diff --git a/include/osmocom/core/application.h b/include/osmocom/core/application.h
index ecaeaa8..266fa9b 100644
--- a/include/osmocom/core/application.h
+++ b/include/osmocom/core/application.h
@@ -2,16 +2,16 @@
 
 /*!
  * \file application.h
- * \brief Routines for helping with the osmocom application setup.
+ * Routines for helping with the osmocom application setup.
  */
 
-/*! \brief information containing the available logging subsystems */
+/*! information containing the available logging subsystems */
 struct log_info;
 
-/*! \brief one instance of a logging target (file, stderr, ...) */
+/*! one instance of a logging target (file, stderr, ...) */
 struct log_target;
 
-/*! \brief the default logging target, logging to stderr */
+/*! the default logging target, logging to stderr */
 extern struct log_target *osmo_stderr_target;
 
 void osmo_init_ignore_signals(void);
diff --git a/include/osmocom/core/bitXXgen.h.tpl b/include/osmocom/core/bitXXgen.h.tpl
index 7480a8f..6881d87 100644
--- a/include/osmocom/core/bitXXgen.h.tpl
+++ b/include/osmocom/core/bitXXgen.h.tpl
@@ -22,7 +22,7 @@
 
 #pragma once
 
-/*! \brief load unaligned n-byte integer (little-endian encoding) into uintXX_t
+/*! load unaligned n-byte integer (little-endian encoding) into uintXX_t
  *  \param[in] p Buffer where integer is stored
  *  \param[in] n Number of bytes stored in p
  *  \returns XX bit unsigned integer
@@ -36,7 +36,7 @@
 	return r;
 }
 
-/*! \brief load unaligned n-byte integer (big-endian encoding) into uintXX_t
+/*! load unaligned n-byte integer (big-endian encoding) into uintXX_t
  *  \param[in] p Buffer where integer is stored
  *  \param[in] n Number of bytes stored in p
  *  \returns XX bit unsigned integer
@@ -51,7 +51,7 @@
 }
 
 
-/*! \brief store unaligned n-byte integer (little-endian encoding) from uintXX_t
+/*! store unaligned n-byte integer (little-endian encoding) from uintXX_t
  *  \param[in] x unsigned XX bit integer
  *  \param[out] p Buffer to store integer
  *  \param[in] n Number of bytes to store
@@ -63,7 +63,7 @@
 	for(i = 0; i < n; q[i] = (x >> i * 8) & 0xFF, i++);
 }
 
-/*! \brief store unaligned n-byte integer (big-endian encoding) from uintXX_t
+/*! store unaligned n-byte integer (big-endian encoding) from uintXX_t
  *  \param[in] x unsigned XX bit integer
  *  \param[out] p Buffer to store integer
  *  \param[in] n Number of bytes to store
@@ -79,26 +79,26 @@
 /* Convenience function for most-used cases */
 
 
-/*! \brief load unaligned XX-bit integer (little-endian encoding) */
+/*! load unaligned XX-bit integer (little-endian encoding) */
 static inline uintXX_t osmo_loadXXle(const void *p)
 {
 	return osmo_loadXXle_ext(p, XX / 8);
 }
 
-/*! \brief load unaligned XX-bit integer (big-endian encoding) */
+/*! load unaligned XX-bit integer (big-endian encoding) */
 static inline uintXX_t osmo_loadXXbe(const void *p)
 {
 	return osmo_loadXXbe_ext(p, XX / 8);
 }
 
 
-/*! \brief store unaligned XX-bit integer (little-endian encoding) */
+/*! store unaligned XX-bit integer (little-endian encoding) */
 static inline void osmo_storeXXle(uintXX_t x, void *p)
 {
 	osmo_storeXXle_ext(x, p, XX / 8);
 }
 
-/*! \brief store unaligned XX-bit integer (big-endian encoding) */
+/*! store unaligned XX-bit integer (big-endian encoding) */
 static inline void osmo_storeXXbe(uintXX_t x, void *p)
 {
 	osmo_storeXXbe_ext(x, p, XX / 8);
diff --git a/include/osmocom/core/bitcomp.h b/include/osmocom/core/bitcomp.h
index e87c0e1..a184a1c 100644
--- a/include/osmocom/core/bitcomp.h
+++ b/include/osmocom/core/bitcomp.h
@@ -27,7 +27,7 @@
  */
 
 /*! \file bitcomp.h
- *  \brief Osmocom bit compression routines
+ *  Osmocom bit compression routines
  */
 
 #include <stdint.h>
diff --git a/include/osmocom/core/bits.h b/include/osmocom/core/bits.h
index 5535920..61af716 100644
--- a/include/osmocom/core/bits.h
+++ b/include/osmocom/core/bits.h
@@ -12,18 +12,18 @@
  */
 
 /*! \file bits.h
- *  \brief Osmocom bit level support code
+ *  Osmocom bit level support code
  *
  *  NOTE on the endianess of pbit_t:
  *  Bits in a pbit_t are ordered MSB first, i.e. 0x80 is the first bit.
  *  Bit i in a pbit_t array is array[i/8] & (1<<(7-i%8))
  */
 
-typedef int8_t  sbit_t;		/*!< \brief soft bit (-127...127) */
-typedef uint8_t ubit_t;		/*!< \brief unpacked bit (0 or 1) */
-typedef uint8_t pbit_t;		/*!< \brief packed bis (8 bits in a byte) */
+typedef int8_t  sbit_t;		/*!< soft bit (-127...127) */
+typedef uint8_t ubit_t;		/*!< unpacked bit (0 or 1) */
+typedef uint8_t pbit_t;		/*!< packed bis (8 bits in a byte) */
 
-/*! \brief determine how many bytes we would need for \a num_bits packed bits
+/*! determine how many bytes we would need for \a num_bits packed bits
  *  \param[in] num_bits Number of packed bits
  *  \returns number of bytes needed for \a num_bits packed bits
  */
@@ -81,31 +81,31 @@
 
 /* BIT REVERSAL */
 
-/*! \brief bit-reversal mode for osmo_bit_reversal() */
+/*! bit-reversal mode for osmo_bit_reversal() */
 enum osmo_br_mode {
-	/*! \brief reverse all bits in a 32bit dword */
+	/*! reverse all bits in a 32bit dword */
 	OSMO_BR_BITS_IN_DWORD	= 31,
-	/*! \brief reverse byte order in a 32bit dword */
+	/*! reverse byte order in a 32bit dword */
 	OSMO_BR_BYTES_IN_DWORD	= 24,
-	/*! \brief reverse bits of each byte in a 32bit dword */
+	/*! reverse bits of each byte in a 32bit dword */
 	OSMO_BR_BITS_IN_BYTE	= 7,
-	/*! \brief swap the two 16bit words in a 32bit dword */
+	/*! swap the two 16bit words in a 32bit dword */
 	OSMO_BR_WORD_SWAP	= 16,
 };
 
-/*! \brief generic bit reversal function */
+/*! generic bit reversal function */
 uint32_t osmo_bit_reversal(uint32_t x, enum osmo_br_mode k);
 
-/* \brief reverse the bits within each byte of a 32bit word */
+/* reverse the bits within each byte of a 32bit word */
 uint32_t osmo_revbytebits_32(uint32_t x);
 
-/* \brief reverse the bits within a byte */
+/* reverse the bits within a byte */
 uint32_t osmo_revbytebits_8(uint8_t x);
 
-/* \brief reverse the bits of each byte in a given buffer */
+/* reverse the bits of each byte in a given buffer */
 void osmo_revbytebits_buf(uint8_t *buf, int len);
 
-/*! \brief left circular shift
+/*! left circular shift
  *  \param[in] in The 16 bit unsigned integer to be rotated
  *  \param[in] shift Number of bits to shift \a in to, [0;16] bits
  *  \returns shifted value
diff --git a/include/osmocom/core/bitvec.h b/include/osmocom/core/bitvec.h
index 6944770..9187ce2 100644
--- a/include/osmocom/core/bitvec.h
+++ b/include/osmocom/core/bitvec.h
@@ -29,7 +29,7 @@
  */
 
 /*! \file bitvec.h
- *  \brief Osmocom bit vector abstraction
+ *  Osmocom bit vector abstraction
  *
  *  These functions assume a MSB (most significant bit) first layout of the
  *  bits, so that for instance the 5 bit number abcde (a is MSB) can be
@@ -44,22 +44,22 @@
 #include <osmocom/core/talloc.h>
 #include <stdbool.h>
 
-/*! \brief A single GSM bit
+/*! A single GSM bit
  *
  * In GSM mac blocks, every bit can be 0 or 1, or L or H.  L/H are
  * defined relative to the 0x2b padding pattern */
 enum bit_value {
-	ZERO	= 0, 	/*!< \brief A zero (0) bit */
-	ONE	= 1,	/*!< \brief A one (1) bit */
-	L	= 2,	/*!< \brief A CSN.1 "L" bit */
-	H	= 3,	/*!< \brief A CSN.1 "H" bit */
+	ZERO	= 0, 	/*!< A zero (0) bit */
+	ONE	= 1,	/*!< A one (1) bit */
+	L	= 2,	/*!< A CSN.1 "L" bit */
+	H	= 3,	/*!< A CSN.1 "H" bit */
 };
 
-/*! \brief structure describing a bit vector */
+/*! structure describing a bit vector */
 struct bitvec {
-	unsigned int cur_bit;	/*!< \brief cursor to the next unused bit */
-	unsigned int data_len;	/*!< \brief length of data array in bytes */
-	uint8_t *data;		/*!< \brief pointer to data array */
+	unsigned int cur_bit;	/*!< cursor to the next unused bit */
+	unsigned int data_len;	/*!< length of data array in bytes */
+	uint8_t *data;		/*!< pointer to data array */
 };
 
 enum bit_value bitvec_get_bit_pos(const struct bitvec *bv, unsigned int bitnr);
diff --git a/include/osmocom/core/byteswap.h b/include/osmocom/core/byteswap.h
index 1f09c2b..4274b8f 100644
--- a/include/osmocom/core/byteswap.h
+++ b/include/osmocom/core/byteswap.h
@@ -2,7 +2,7 @@
 #include <stdint.h>
 #include <osmocom/core/endian.h>
 
-/*! \brief byte-swap a 32bit word
+/*! byte-swap a 32bit word
  *  \param[in] in to be swapped 32bit word
  *  \returns byte-swapped 32bit word */
 static inline uint32_t osmo_swab32(uint32_t in)
@@ -17,7 +17,7 @@
 	return out;
 }
 
-/*! \brief byte-swap a 16bit word
+/*! byte-swap a 16bit word
  *  \param[in] in to be swapped 16bit word
  *  \returns byte-swapped 16bit word */
 static inline uint16_t osmo_swab16(uint16_t in)
diff --git a/include/osmocom/core/conv.h b/include/osmocom/core/conv.h
index e7f6bd6..1888fe1 100644
--- a/include/osmocom/core/conv.h
+++ b/include/osmocom/core/conv.h
@@ -34,7 +34,7 @@
 
 #include <osmocom/core/bits.h>
 
-/*! \brief possibe termination types
+/*! possibe termination types
  *
  *  The termination type will determine which state the encoder/decoder
  *  can start/end with. This is mostly taken care of in the high level API
@@ -42,31 +42,31 @@
  *  proper calls yourself.
  */
 enum osmo_conv_term {
-	CONV_TERM_FLUSH = 0,	/*!< \brief Flush encoder state */
-	CONV_TERM_TRUNCATION,	/*!< \brief Direct truncation */
-	CONV_TERM_TAIL_BITING,	/*!< \brief Tail biting */
+	CONV_TERM_FLUSH = 0,	/*!< Flush encoder state */
+	CONV_TERM_TRUNCATION,	/*!< Direct truncation */
+	CONV_TERM_TAIL_BITING,	/*!< Tail biting */
 };
 
-/*! \brief structure describing a given convolutional code
+/*! structure describing a given convolutional code
  *
  *  The only required fields are N,K and the next_output/next_state arrays. The
  *  other can be left to default value of zero depending on what the code does.
  *  If 'len' is left at 0 then only the low level API can be used.
  */
 struct osmo_conv_code {
-	int N;				/*!< \brief Inverse of code rate */
-	int K;				/*!< \brief Constraint length */
-	int len;			/*!< \brief # of data bits */
+	int N;				/*!< Inverse of code rate */
+	int K;				/*!< Constraint length */
+	int len;			/*!< # of data bits */
 
-	enum osmo_conv_term term;	/*!< \brief Termination type */
+	enum osmo_conv_term term;	/*!< Termination type */
 
-	const uint8_t (*next_output)[2];/*!< \brief Next output array */
-	const uint8_t (*next_state)[2];	/*!< \brief Next state array  */
+	const uint8_t (*next_output)[2];/*!< Next output array */
+	const uint8_t (*next_state)[2];	/*!< Next state array  */
 
-	const uint8_t *next_term_output;/*!< \brief Flush termination output */
-	const uint8_t *next_term_state;	/*!< \brief Flush termination state  */
+	const uint8_t *next_term_output;/*!< Flush termination output */
+	const uint8_t *next_term_state;	/*!< Flush termination state  */
 
-	const int *puncture;		/*!< \brief Punctured bits indexes */
+	const int *puncture;		/*!< Punctured bits indexes */
 };
 
 
@@ -80,12 +80,12 @@
 
 	/* Low level API */
 
-/*! \brief convolutional encoder state */
+/*! convolutional encoder state */
 struct osmo_conv_encoder {
-	const struct osmo_conv_code *code; /*!< \brief for which code? */
-	int i_idx;	/*!< \brief Next input bit index */
-	int p_idx;	/*!< \brief Current puncture index */
-	uint8_t state;	/*!< \brief Current state */
+	const struct osmo_conv_code *code; /*!< for which code? */
+	int i_idx;	/*!< Next input bit index */
+	int p_idx;	/*!< Current puncture index */
+	uint8_t state;	/*!< Current state */
 };
 
 void osmo_conv_encode_init(struct osmo_conv_encoder *encoder,
@@ -105,20 +105,20 @@
 
 	/* Low level API */
 
-/*! \brief convolutional decoder state */
+/*! convolutional decoder state */
 struct osmo_conv_decoder {
-	const struct osmo_conv_code *code; /*!< \brief for which code? */
+	const struct osmo_conv_code *code; /*!< for which code? */
 
-	int n_states;		/*!< \brief number of states */
+	int n_states;		/*!< number of states */
 
-	int len;		/*!< \brief Max o_idx (excl. termination) */
+	int len;		/*!< Max o_idx (excl. termination) */
 
-	int o_idx;		/*!< \brief output index */
-	int p_idx;		/*!< \brief puncture index */
+	int o_idx;		/*!< output index */
+	int p_idx;		/*!< puncture index */
 
-	unsigned int *ae;	/*!< \brief accumulated error */
-	unsigned int *ae_next;	/*!< \brief next accumulated error (tmp in scan) */
-	uint8_t *state_history;	/*!< \brief state history [len][n_states] */
+	unsigned int *ae;	/*!< accumulated error */
+	unsigned int *ae_next;	/*!< next accumulated error (tmp in scan) */
+	uint8_t *state_history;	/*!< state history [len][n_states] */
 };
 
 void osmo_conv_decode_init(struct osmo_conv_decoder *decoder,
diff --git a/include/osmocom/core/crcXXgen.h.tpl b/include/osmocom/core/crcXXgen.h.tpl
index 164f720..4718809 100644
--- a/include/osmocom/core/crcXXgen.h.tpl
+++ b/include/osmocom/core/crcXXgen.h.tpl
@@ -35,12 +35,12 @@
 #include <osmocom/core/bits.h>
 
 
-/*! \brief structure describing a given CRC code of max XX bits */
+/*! structure describing a given CRC code of max XX bits */
 struct osmo_crcXXgen_code {
-	int bits;           /*!< \brief Actual number of bits of the CRC */
-	uintXX_t poly;      /*!< \brief Polynom (normal representation, MSB omitted */
-	uintXX_t init;      /*!< \brief Initialization value of the CRC state */
-	uintXX_t remainder; /*!< \brief Remainder of the CRC (final XOR) */
+	int bits;           /*!< Actual number of bits of the CRC */
+	uintXX_t poly;      /*!< Polynom (normal representation, MSB omitted */
+	uintXX_t init;      /*!< Initialization value of the CRC state */
+	uintXX_t remainder; /*!< Remainder of the CRC (final XOR) */
 };
 
 uintXX_t osmo_crcXXgen_compute_bits(const struct osmo_crcXXgen_code *code,
diff --git a/include/osmocom/core/defs.h b/include/osmocom/core/defs.h
index 51ac4e5..88c41b9 100644
--- a/include/osmocom/core/defs.h
+++ b/include/osmocom/core/defs.h
@@ -5,10 +5,10 @@
  */
 
 /*! \file defs.h
- *  \brief General definitions that are meant to be included from header files.
+ *  General definitions that are meant to be included from header files.
  */
 
-/*! \brief Check for gcc and version.
+/*! Check for gcc and version.
  *
  * \note Albeit glibc provides a features.h file that contains a similar
  *       definition (__GNUC_PREREQ), this definition has been copied from there
@@ -23,7 +23,7 @@
 # define OSMO_GNUC_PREREQ(maj, min) 0
 #endif
 
-/*! \brief Set the deprecated attribute with a message.
+/*! Set the deprecated attribute with a message.
  */
 #if defined(__clang__)
 # define _OSMO_HAS_ATTRIBUTE_DEPRECATED __has_attribute(deprecated)
diff --git a/include/osmocom/core/fsm.h b/include/osmocom/core/fsm.h
index f42dd0c..fb182f3 100644
--- a/include/osmocom/core/fsm.h
+++ b/include/osmocom/core/fsm.h
@@ -12,21 +12,21 @@
  */
 
 /*! \file fsm.h
- *  \brief Finite State Machine
+ *  Finite State Machine
  */
 
 struct osmo_fsm_inst;
 
 enum osmo_fsm_term_cause {
-	/*! \brief terminate because parent terminated */
+	/*! terminate because parent terminated */
 	OSMO_FSM_TERM_PARENT,
-	/*! \brief terminate on explicit user request */
+	/*! terminate on explicit user request */
 	OSMO_FSM_TERM_REQUEST,
-	/*! \brief regular termination of process */
+	/*! regular termination of process */
 	OSMO_FSM_TERM_REGULAR,
-	/*! \brief erroneous termination of process */
+	/*! erroneous termination of process */
 	OSMO_FSM_TERM_ERROR,
-	/*! \brief termination due to time-out */
+	/*! termination due to time-out */
 	OSMO_FSM_TERM_TIMEOUT,
 };
 
@@ -37,80 +37,80 @@
 }
 
 
-/*! \brief description of a rule in the FSM */
+/*! description of a rule in the FSM */
 struct osmo_fsm_state {
-	/*! \brief bit-mask of permitted input events for this state */
+	/*! bit-mask of permitted input events for this state */
 	uint32_t in_event_mask;
-	/*! \brief bit-mask to which other states this state may transiton */
+	/*! bit-mask to which other states this state may transiton */
 	uint32_t out_state_mask;
-	/*! \brief human-readable name of this state */
+	/*! human-readable name of this state */
 	const char *name;
-	/*! \brief function to be called for events arriving in this state */
+	/*! function to be called for events arriving in this state */
 	void (*action)(struct osmo_fsm_inst *fi, uint32_t event, void *data);
-	/*! \brief function to be called just after entering the state */
+	/*! function to be called just after entering the state */
 	void (*onenter)(struct osmo_fsm_inst *fi, uint32_t prev_state);
-	/*! \brief function to be called just before leaving the state */
+	/*! function to be called just before leaving the state */
 	void (*onleave)(struct osmo_fsm_inst *fi, uint32_t next_state);
 };
 
-/*! \brief a description of an osmocom finite state machine */
+/*! a description of an osmocom finite state machine */
 struct osmo_fsm {
-	/*! \brief global list */
+	/*! global list */
 	struct llist_head list;
-	/*! \brief list of instances of this FSM */
+	/*! list of instances of this FSM */
 	struct llist_head instances;
-	/*! \brief human readable name */
+	/*! human readable name */
 	const char *name;
-	/*! \brief table of state transition rules */
+	/*! table of state transition rules */
 	const struct osmo_fsm_state *states;
-	/*! \brief number of entries in \ref states */
+	/*! number of entries in \ref states */
 	unsigned int num_states;
-	/*! \brief bit-mask of events permitted in all states */
+	/*! bit-mask of events permitted in all states */
 	uint32_t allstate_event_mask;
-	/*! \brief function pointer to be called for allstate events */
+	/*! function pointer to be called for allstate events */
 	void (*allstate_action)(struct osmo_fsm_inst *fi, uint32_t event, void *data);
-	/*! \brief clean-up function, called during termination */
+	/*! clean-up function, called during termination */
 	void (*cleanup)(struct osmo_fsm_inst *fi, enum osmo_fsm_term_cause cause);
-	/*! \brief timer call-back for states with time-out.
+	/*! timer call-back for states with time-out.
 	 * \returns 1 to request termination, 0 to keep running. */
 	int (*timer_cb)(struct osmo_fsm_inst *fi);
-	/*! \brief logging sub-system for this FSM */
+	/*! logging sub-system for this FSM */
 	int log_subsys;
-	/*! \brief human-readable names of events */
+	/*! human-readable names of events */
 	const struct value_string *event_names;
 };
 
-/*! \brief a single instanceof an osmocom finite state machine */
+/*! a single instanceof an osmocom finite state machine */
 struct osmo_fsm_inst {
-	/*! \brief member in the fsm->instances list */
+	/*! member in the fsm->instances list */
 	struct llist_head list;
-	/*! \brief back-pointer to the FSM of which we are an instance */
+	/*! back-pointer to the FSM of which we are an instance */
 	struct osmo_fsm *fsm;
-	/*! \brief human readable identifier */
+	/*! human readable identifier */
 	const char *id;
-	/*! \brief human readable fully-qualified name */
+	/*! human readable fully-qualified name */
 	const char *name;
-	/*! \brief some private data of this instance */
+	/*! some private data of this instance */
 	void *priv;
-	/*! \brief logging level for this FSM */
+	/*! logging level for this FSM */
 	int log_level;
-	/*! \brief current state of the FSM */
+	/*! current state of the FSM */
 	uint32_t state;
 
-	/*! \brief timer number for states with time-out */
+	/*! timer number for states with time-out */
 	int T;
-	/*! \brief timer back-end for states with time-out */
+	/*! timer back-end for states with time-out */
 	struct osmo_timer_list timer;
 
-	/*! \brief support for fsm-based procedures */
+	/*! support for fsm-based procedures */
 	struct {
-		/*! \brief the parent FSM that has created us */
+		/*! the parent FSM that has created us */
 		struct osmo_fsm_inst *parent;
-		/*! \brief the event we should send upon termination */
+		/*! the event we should send upon termination */
 		uint32_t parent_term_event;
-		/*! \brief a list of children processes */
+		/*! a list of children processes */
 		struct llist_head children;
-		/*! \brief \ref llist_head linked to parent->proc.children */
+		/*! \ref llist_head linked to parent->proc.children */
 		struct llist_head child;
 	} proc;
 };
@@ -156,11 +156,11 @@
 const char *osmo_fsm_inst_name(struct osmo_fsm_inst *fi);
 const char *osmo_fsm_state_name(struct osmo_fsm *fsm, uint32_t state);
 
-/*! \brief return the name of the state the FSM instance is currently in. */
+/*! return the name of the state the FSM instance is currently in. */
 static inline const char *osmo_fsm_inst_state_name(struct osmo_fsm_inst *fi)
 { return osmo_fsm_state_name(fi->fsm, fi->state); }
 
-/*! \brief perform a state change of the given FSM instance
+/*! perform a state change of the given FSM instance
  *
  *  This is a macro that calls _osmo_fsm_inst_state_chg() with the given
  *  parameters as well as the caller's source file and line number for logging
@@ -173,7 +173,7 @@
 			     unsigned long timeout_secs, int T,
 			     const char *file, int line);
 
-/*! \brief dispatch an event to an osmocom finite state machine instance
+/*! dispatch an event to an osmocom finite state machine instance
  *
  *  This is a macro that calls _osmo_fsm_inst_dispatch() with the given
  *  parameters as well as the caller's source file and line number for logging
@@ -184,7 +184,7 @@
 int _osmo_fsm_inst_dispatch(struct osmo_fsm_inst *fi, uint32_t event, void *data,
 			    const char *file, int line);
 
-/*! \brief Terminate FSM instance with given cause
+/*! Terminate FSM instance with given cause
  *
  *  This is a macro that calls _osmo_fsm_inst_term() with the given parameters
  *  as well as the caller's source file and line number for logging purposes.
@@ -196,7 +196,7 @@
 			 enum osmo_fsm_term_cause cause, void *data,
 			 const char *file, int line);
 
-/*! \brief Terminate all child FSM instances of an FSM instance.
+/*! Terminate all child FSM instances of an FSM instance.
  *
  *  This is a macro that calls _osmo_fsm_inst_term_children() with the given
  *  parameters as well as the caller's source file and line number for logging
diff --git a/include/osmocom/core/gsmtap.h b/include/osmocom/core/gsmtap.h
index f9d6f0a..0dc25bb 100644
--- a/include/osmocom/core/gsmtap.h
+++ b/include/osmocom/core/gsmtap.h
@@ -238,7 +238,7 @@
 };
 
 /* ====== DO NOT MAKE UNAPPROVED MODIFICATIONS HERE ===== */
-/*! \brief Structure of the GTMTAP pseudo-header */
+/*! Structure of the GTMTAP pseudo-header */
 struct gsmtap_hdr {
 	uint8_t version;	/*!< version, set to 0x01 currently */
 	uint8_t hdr_len;	/*!< length in number of 32bit words */
@@ -258,7 +258,7 @@
 
 } __attribute__((packed));
 
-/*! \brief Structure of the GTMTAP libosmocore logging header */
+/*! Structure of the GTMTAP libosmocore logging header */
 struct gsmtap_osmocore_log_hdr {
 	struct {
 		uint32_t sec;
diff --git a/include/osmocom/core/gsmtap_util.h b/include/osmocom/core/gsmtap_util.h
index 2e3d068..b60257e 100644
--- a/include/osmocom/core/gsmtap_util.h
+++ b/include/osmocom/core/gsmtap_util.h
@@ -19,14 +19,14 @@
 			    uint8_t ss, uint32_t fn, int8_t signal_dbm,
 			    uint8_t snr, const uint8_t *data, unsigned int len);
 
-/*! \brief one gsmtap instance */
+/*! one gsmtap instance */
 struct gsmtap_inst {
-	int ofd_wq_mode;	/*!< \brief wait queue mode? */
-	struct osmo_wqueue wq;	/*!< \brief the wait queue */
-	struct osmo_fd sink_ofd;/*!< \brief file descriptor */
+	int ofd_wq_mode;	/*!< wait queue mode? */
+	struct osmo_wqueue wq;	/*!< the wait queue */
+	struct osmo_fd sink_ofd;/*!< file descriptor */
 };
 
-/*! \brief obtain the file descriptor associated with a gsmtap instance
+/*! obtain the file descriptor associated with a gsmtap instance
  *  \param[in] gti GSMTAP instance
  *  \returns file descriptor of GSMTAP instance */
 static inline int gsmtap_inst_fd(struct gsmtap_inst *gti)
diff --git a/include/osmocom/core/linuxlist.h b/include/osmocom/core/linuxlist.h
index 7d85077..5098c5f 100644
--- a/include/osmocom/core/linuxlist.h
+++ b/include/osmocom/core/linuxlist.h
@@ -7,7 +7,7 @@
 /*!
  * \file linuxlist.h
  *
- * \brief Simple doubly linked list implementation.
+ * Simple doubly linked list implementation.
  *
  * Some of the internal functions ("__xxx") are useful when
  * manipulating whole llists rather than single entries, as
@@ -24,7 +24,7 @@
 
 static inline void prefetch(const void *x) {;}
 
-/*! \brief cast a member of a structure out to the containing structure
+/*! cast a member of a structure out to the containing structure
  *
  * \param[in] ptr the pointer to the member.
  * \param[in] type the type of the container struct this is embedded in.
@@ -43,15 +43,15 @@
 #define LLIST_POISON1  ((void *) 0x00100100)
 #define LLIST_POISON2  ((void *) 0x00200200)
 
-/*! \brief (double) linked list header structure */
+/*! (double) linked list header structure */
 struct llist_head {
-	/*! \brief Pointer to next and previous item */
+	/*! Pointer to next and previous item */
 	struct llist_head *next, *prev;
 };
 
 #define LLIST_HEAD_INIT(name) { &(name), &(name) }
 
-/*! \brief define a statically-initialized \ref llist_head
+/*! define a statically-initialized \ref llist_head
  *  \param[in] name Variable name
  *
  * This is a helper macro that will define a named variable of type
@@ -59,12 +59,12 @@
 #define LLIST_HEAD(name) \
 	struct llist_head name = LLIST_HEAD_INIT(name)
 
-/*! \brief initialize a \ref llist_head to point back to self */
+/*! initialize a \ref llist_head to point back to self */
 #define INIT_LLIST_HEAD(ptr) do { \
 	(ptr)->next = (ptr); (ptr)->prev = (ptr); \
 } while (0)
 
-/*! \brief Insert a new entry between two known consecutive entries. 
+/*! Insert a new entry between two known consecutive entries. 
  *
  * This is only for internal llist manipulation where we know
  * the prev/next entries already!
@@ -79,7 +79,7 @@
 	prev->next = _new;
 }
 
-/*! \brief add a new entry into a linked list (at head)
+/*! add a new entry into a linked list (at head)
  *  \param _new New entry to be added
  *  \param head \ref llist_head to add it after
  *
@@ -91,7 +91,7 @@
 	__llist_add(_new, head, head->next);
 }
 
-/*! \brief add a new entry into a linked list (at tail)
+/*! add a new entry into a linked list (at tail)
  *  \param _new  New entry to be added
  *  \param head  Head of linked list to whose tail we shall add \a _new
  *
@@ -116,7 +116,7 @@
 	prev->next = next;
 }
 
-/*! \brief Delete entry from linked list
+/*! Delete entry from linked list
  *  \param entry  The element to delete from the llist
  *
  * Note: llist_empty on entry does not return true after this, the entry is
@@ -129,7 +129,7 @@
 	entry->prev = (struct llist_head *)LLIST_POISON2;
 }
 
-/*! \brief Delete entry from linked list and reinitialize it
+/*! Delete entry from linked list and reinitialize it
  *  \param entry  The element to delete from the list
  */
 static inline void llist_del_init(struct llist_head *entry)
@@ -138,7 +138,7 @@
 	INIT_LLIST_HEAD(entry); 
 }
 
-/*! \brief Delete from one llist and add as another's head
+/*! Delete from one llist and add as another's head
  *  \param llist The entry to move
  *  \param head	The head that will precede our entry
  */
@@ -148,7 +148,7 @@
         llist_add(llist, head);
 }
 
-/*! \brief Delete from one llist and add as another's tail
+/*! Delete from one llist and add as another's tail
  *  \param llist The entry to move
  *  \param head The head that will follow our entry
  */
@@ -159,7 +159,7 @@
         llist_add_tail(llist, head);
 }
 
-/*! \brief Test whether a linked list is empty
+/*! Test whether a linked list is empty
  *  \param[in] head  The llist to test.
  *  \returns 1 if the list is empty, 0 otherwise
  */
@@ -182,7 +182,7 @@
 	at->prev = last;
 }
 
-/*! \brief Join two llists
+/*! Join two llists
  *  \param llist The new linked list to add
  *  \param head The place to add \a llist in the other list
  */
@@ -192,7 +192,7 @@
 		__llist_splice(llist, head);
 }
 
-/*! \brief join two llists and reinitialise the emptied llist.
+/*! join two llists and reinitialise the emptied llist.
  * \param llist The new linked list to add.
  * \param head  The place to add it in the first llist.
  *
@@ -207,7 +207,7 @@
 	}
 }
 
-/*! \brief Get the struct containing this list entry
+/*! Get the struct containing this list entry
  *  \param ptr The \ref llist_head pointer
  *  \param type The type of the struct this is embedded in
  *  \param @member The name of the \ref llist_head within the struct
@@ -215,7 +215,7 @@
 #define llist_entry(ptr, type, member) \
 	container_of(ptr, type, member)
 
-/*! \brief Get the first element from a list
+/*! Get the first element from a list
  *  \param ptr    the list head to take the element from.
  *  \param type   the type of the struct this is embedded in.
  *  \param member the name of the list_head within the struct.
@@ -225,7 +225,7 @@
 #define llist_first_entry(ptr, type, member) \
 	llist_entry((ptr)->next, type, member)
 
-/*! \brief Get the last element from a list
+/*! Get the last element from a list
  *  \param ptr    the list head to take the element from.
  *  \param type   the type of the struct this is embedded in.
  *  \param member the name of the llist_head within the struct.
@@ -235,7 +235,7 @@
 #define llist_last_entry(ptr, type, member) \
 	llist_entry((ptr)->prev, type, member)
 
-/*! \brief Get the first element from a list, or NULL
+/*! Get the first element from a list, or NULL
  *  \param ptr    the list head to take the element from.
  *  \param type   the type of the struct this is embedded in.
  *  \param member the name of the list_head within the struct.
@@ -245,7 +245,7 @@
 #define llist_first_entry_or_null(ptr, type, member) \
 	(!llist_empty(ptr) ? llist_first_entry(ptr, type, member) : NULL)
 
-/*! \brief Iterate over a linked list
+/*! Iterate over a linked list
  *  \param pos 	The \ref llist_head to use as a loop counter
  *  \param head The head of the list over which to iterate
  */
@@ -253,7 +253,7 @@
 	for (pos = (head)->next, prefetch(pos->next); pos != (head); \
         	pos = pos->next, prefetch(pos->next))
 
-/*! \brief Iterate over a llist (no prefetch)
+/*! Iterate over a llist (no prefetch)
  *  \param pos 	The \ref llist_head to use as a loop counter
  *  \param head The head of the list over which to iterate
  *
@@ -265,7 +265,7 @@
 #define __llist_for_each(pos, head) \
 	for (pos = (head)->next; pos != (head); pos = pos->next)
 
-/*! \brief Iterate over a llist backwards
+/*! Iterate over a llist backwards
  *  \param pos 	The \ref llist_head to use as a loop counter
  *  \param head The head of the list over which to iterate
  */
@@ -273,7 +273,7 @@
 	for (pos = (head)->prev, prefetch(pos->prev); pos != (head); \
         	pos = pos->prev, prefetch(pos->prev))
 
-/*! \brief Iterate over a list; safe against removal of llist entry
+/*! Iterate over a list; safe against removal of llist entry
  *  \param pos 	The \ref llist_head to use as a loop counter
  *  \param n Another \ref llist_head to use as temporary storage
  *  \param head The head of the list over which to iterate
@@ -282,7 +282,7 @@
 	for (pos = (head)->next, n = pos->next; pos != (head); \
 		pos = n, n = pos->next)
 
-/*! \brief Iterate over llist of given type
+/*! Iterate over llist of given type
  *  \param pos The 'type *' to use as a loop counter
  *  \param head The head of the list over which to iterate
  *  \param member The name of the \ref llist_head within struct \a pos
@@ -294,7 +294,7 @@
 	     pos = llist_entry(pos->member.next, typeof(*pos), member),	\
 		     prefetch(pos->member.next))
 
-/*! \brief Iterate backwards over llist of given type.
+/*! Iterate backwards over llist of given type.
  *  \param pos The 'type *' to use as a loop counter
  *  \param head The head of the list over which to iterate
  *  \param member The name of the \ref llist_head within struct \a pos
@@ -306,7 +306,7 @@
 	     pos = llist_entry(pos->member.prev, typeof(*pos), member),	\
 		     prefetch(pos->member.prev))
 
-/*! \brief iterate over llist of given type continuing after existing
+/*! iterate over llist of given type continuing after existing
  * point
  *  \param pos The 'type *' to use as a loop counter
  *  \param head The head of the list over which to iterate
@@ -319,7 +319,7 @@
 	     pos = llist_entry(pos->member.next, typeof(*pos), member),	\
 		     prefetch(pos->member.next))
 
-/*! \brief iterate over llist of given type, safe against removal of
+/*! iterate over llist of given type, safe against removal of
  * non-consecutive(!) llist entries
  *  \param pos The 'type *' to use as a loop counter
  *  \param n Another type * to use as temporary storage
@@ -381,7 +381,7 @@
 	for ((pos) = (pos)->next, prefetch((pos)->next); (pos) != (head); \
         	(pos) = (pos)->next, ({ smp_read_barrier_depends(); 0;}), prefetch((pos)->next))
 
-/*! \brief count nr of llist items by iterating.
+/*! count nr of llist items by iterating.
  *  \param head The llist head to count items of.
  *  \returns Number of items.
  *
diff --git a/include/osmocom/core/logging.h b/include/osmocom/core/logging.h
index 7af0ad2..4721713 100644
--- a/include/osmocom/core/logging.h
+++ b/include/osmocom/core/logging.h
@@ -13,15 +13,15 @@
 #include <osmocom/core/defs.h>
 #include <osmocom/core/linuxlist.h>
 
-/*! \brief Maximum number of logging contexts */
+/*! Maximum number of logging contexts */
 #define LOG_MAX_CTX		8
-/*! \brief Maximum number of logging filters */
+/*! Maximum number of logging filters */
 #define LOG_MAX_FILTERS	8
 
 #define DEBUG
 
 #ifdef DEBUG
-/*! \brief Log a debug message through the Osmocom logging framework
+/*! Log a debug message through the Osmocom logging framework
  *  \param[in] ss logging subsystem (e.g. \ref DLGLOBAL)
  *  \param[in] fmt format string
  *  \param[in] args variable argument list
@@ -39,7 +39,7 @@
 
 void logp(int subsys, const char *file, int line, int cont, const char *format, ...) OSMO_DEPRECATED("Use DEBUGP* macros instead");
 
-/*! \brief Log a new message through the Osmocom logging framework
+/*! Log a new message through the Osmocom logging framework
  *  \param[in] ss logging subsystem (e.g. \ref DLGLOBAL)
  *  \param[in] level logging level (e.g. \ref LOGL_NOTICE)
  *  \param[in] fmt format string
@@ -48,7 +48,7 @@
 #define LOGP(ss, level, fmt, args...) \
 	LOGPSRC(ss, level, NULL, 0, fmt, ## args)
 
-/*! \brief Continue a log message through the Osmocom logging framework
+/*! Continue a log message through the Osmocom logging framework
  *  \param[in] ss logging subsystem (e.g. \ref DLGLOBAL)
  *  \param[in] level logging level (e.g. \ref LOGL_NOTICE)
  *  \param[in] fmt format string
@@ -60,7 +60,7 @@
 			logp2(ss, level, __BASE_FILE__, __LINE__, 1, fmt, ##args); \
 	} while(0)
 
-/*! \brief Log through the Osmocom logging framework with explicit source.
+/*! Log through the Osmocom logging framework with explicit source.
  *  If caller_file is passed as NULL, __BASE_FILE__ and __LINE__ are used
  *  instead of caller_file and caller_line (so that this macro here defines
  *  both cases in the same place, and to catch cases where callers fail to pass
@@ -82,12 +82,12 @@
 		}\
 	} while(0)
 
-/*! \brief different log levels */
-#define LOGL_DEBUG	1	/*!< \brief debugging information */
-#define LOGL_INFO	3	/*!< \brief general information */
-#define LOGL_NOTICE	5	/*!< \brief abnormal/unexpected condition */
-#define LOGL_ERROR	7	/*!< \brief error condition, requires user action */
-#define LOGL_FATAL	8	/*!< \brief fatal, program aborted */
+/*! different log levels */
+#define LOGL_DEBUG	1	/*!< debugging information */
+#define LOGL_INFO	3	/*!< general information */
+#define LOGL_NOTICE	5	/*!< abnormal/unexpected condition */
+#define LOGL_ERROR	7	/*!< error condition, requires user action */
+#define LOGL_FATAL	8	/*!< fatal, program aborted */
 
 /* logging levels defined by the library itself */
 #define DLGLOBAL	-1	/*!< global logging */
@@ -114,7 +114,7 @@
 	uint8_t enabled;	/*!< is logging enabled? */
 };
 
-/*! \brief Information regarding one logging category */
+/*! Information regarding one logging category */
 struct log_info_cat {
 	const char *name;		/*!< name of category */
 	const char *color;		/*!< color string for cateyory */
@@ -123,12 +123,12 @@
 	uint8_t enabled;		/*!< is this category enabled or not */
 };
 
-/*! \brief Log context information, passed to filter */
+/*! Log context information, passed to filter */
 struct log_context {
 	void *ctx[LOG_MAX_CTX+1];
 };
 
-/*! \brief Indexes to indicate the object currently acted upon.
+/*! Indexes to indicate the object currently acted upon.
  * Array indexes for the global \a log_context array. */
 enum log_ctx_index {
 	LOG_CTX_GB_NSVC,
@@ -138,7 +138,7 @@
 	_LOG_CTX_COUNT
 };
 
-/*! \brief Indexes to indicate objects that should be logged.
+/*! Indexes to indicate objects that should be logged.
  * Array indexes to log_target->filter_data and bit indexes for
  * log_target->filter_map. */
 enum log_filter_index {
@@ -150,18 +150,18 @@
 	_LOG_FLT_COUNT
 };
 
-/*! \brief Compatibility with older libosmocore versions */
+/*! Compatibility with older libosmocore versions */
 #define LOG_FILTER_ALL (1<<LOG_FLT_ALL)
-/*! \brief Compatibility with older libosmocore versions */
+/*! Compatibility with older libosmocore versions */
 #define GPRS_CTX_NSVC LOG_CTX_GB_NSVC
-/*! \brief Compatibility with older libosmocore versions */
+/*! Compatibility with older libosmocore versions */
 #define GPRS_CTX_BVC LOG_CTX_GB_BVC
-/*! \brief Indexes to indicate the object currently acted upon.
+/*! Indexes to indicate the object currently acted upon.
  * Array indexes for the global \a log_context array. */
 
 struct log_target;
 
-/*! \brief Log filter function */
+/*! Log filter function */
 typedef int log_filter(const struct log_context *ctx,
 		       struct log_target *target);
 
@@ -177,60 +177,60 @@
 			      const struct log_info *info,
 			      const struct log_target *tgt);
 
-/*! \brief Logging configuration, passed to \ref log_init */
+/*! Logging configuration, passed to \ref log_init */
 struct log_info {
-	/* \brief filter callback function */
+	/* filter callback function */
 	log_filter *filter_fn;
 
-	/*! \brief per-category information */
+	/*! per-category information */
 	const struct log_info_cat *cat;
-	/*! \brief total number of categories */
+	/*! total number of categories */
 	unsigned int num_cat;
-	/*! \brief total number of user categories (not library) */
+	/*! total number of user categories (not library) */
 	unsigned int num_cat_user;
 
-	/*! \brief filter saving function */
+	/*! filter saving function */
 	log_save_filters *save_fn;
-	/*! \brief filter saving function */
+	/*! filter saving function */
 	log_print_filters *print_fn;
 };
 
-/*! \brief Type of logging target */
+/*! Type of logging target */
 enum log_target_type {
-	LOG_TGT_TYPE_VTY,	/*!< \brief VTY logging */
-	LOG_TGT_TYPE_SYSLOG,	/*!< \brief syslog based logging */
-	LOG_TGT_TYPE_FILE,	/*!< \brief text file logging */
-	LOG_TGT_TYPE_STDERR,	/*!< \brief stderr logging */
-	LOG_TGT_TYPE_STRRB,	/*!< \brief osmo_strrb-backed logging */
-	LOG_TGT_TYPE_GSMTAP,	/*!< \brief GSMTAP network logging */
+	LOG_TGT_TYPE_VTY,	/*!< VTY logging */
+	LOG_TGT_TYPE_SYSLOG,	/*!< syslog based logging */
+	LOG_TGT_TYPE_FILE,	/*!< text file logging */
+	LOG_TGT_TYPE_STDERR,	/*!< stderr logging */
+	LOG_TGT_TYPE_STRRB,	/*!< osmo_strrb-backed logging */
+	LOG_TGT_TYPE_GSMTAP,	/*!< GSMTAP network logging */
 };
 
-/*! \brief structure representing a logging target */
+/*! structure representing a logging target */
 struct log_target {
-        struct llist_head entry;		/*!< \brief linked list */
+        struct llist_head entry;		/*!< linked list */
 
-	/*! \brief Internal data for filtering */
+	/*! Internal data for filtering */
 	int filter_map;
-	/*! \brief Internal data for filtering */
+	/*! Internal data for filtering */
 	void *filter_data[LOG_MAX_FILTERS+1];
 
-	/*! \brief logging categories */
+	/*! logging categories */
 	struct log_category *categories;
 
-	/*! \brief global log level */
+	/*! global log level */
 	uint8_t loglevel;
-	/*! \brief should color be used when printing log messages? */
+	/*! should color be used when printing log messages? */
 	unsigned int use_color:1;
-	/*! \brief should log messages be prefixed with a timestamp? */
+	/*! should log messages be prefixed with a timestamp? */
 	unsigned int print_timestamp:1;
-	/*! \brief should log messages be prefixed with a filename? */
+	/*! should log messages be prefixed with a filename? */
 	unsigned int print_filename:1;
-	/*! \brief should log messages be prefixed with a category name? */
+	/*! should log messages be prefixed with a category name? */
 	unsigned int print_category:1;
-	/*! \brief should log messages be prefixed with an extended timestamp? */
+	/*! should log messages be prefixed with an extended timestamp? */
 	unsigned int print_ext_timestamp:1;
 
-	/*! \brief the type of this log taget */
+	/*! the type of this log taget */
 	enum log_target_type type;
 
 	union {
@@ -259,7 +259,7 @@
 		} tgt_gsmtap;
 	};
 
-	/*! \brief call-back function to be called when the logging framework
+	/*! call-back function to be called when the logging framework
 	 *	   wants to log a fully formatted string
 	 *  \param[in] target logging target
 	 *  \param[in] level log level of currnet message
@@ -268,7 +268,7 @@
         void (*output) (struct log_target *target, unsigned int level,
 			const char *string);
 
-	/*! \brief alternative call-back function to which the logging
+	/*! alternative call-back function to which the logging
 	 *	   framework passes the unfortmatted input arguments,
 	 *	   i.e. bypassing the internal string formatter
 	 *  \param[in] target logging target
diff --git a/include/osmocom/core/msgb.h b/include/osmocom/core/msgb.h
index f5dd323..7fad943 100644
--- a/include/osmocom/core/msgb.h
+++ b/include/osmocom/core/msgb.h
@@ -33,33 +33,33 @@
 
 #define MSGB_DEBUG
 
-/*! \brief Osmocom message buffer */
+/*! Osmocom message buffer */
 struct msgb {
-	struct llist_head list; /*!< \brief linked list header */
+	struct llist_head list; /*!< linked list header */
 
 
 	/* Part of which TRX logical channel we were received / transmitted */
 	/* FIXME: move them into the control buffer */
 	union {
-		void *dst; /*!< \brief reference of origin/destination */
+		void *dst; /*!< reference of origin/destination */
 		struct gsm_bts_trx *trx;
 	};
-	struct gsm_lchan *lchan; /*!< \brief logical channel */
+	struct gsm_lchan *lchan; /*!< logical channel */
 
-	unsigned char *l1h; /*!< \brief pointer to Layer1 header (if any) */
-	unsigned char *l2h; /*!< \brief pointer to A-bis layer 2 header: OML, RSL(RLL), NS */
-	unsigned char *l3h; /*!< \brief pointer to Layer 3 header. For OML: FOM; RSL: 04.08; GPRS: BSSGP */
-	unsigned char *l4h; /*!< \brief pointer to layer 4 header */
+	unsigned char *l1h; /*!< pointer to Layer1 header (if any) */
+	unsigned char *l2h; /*!< pointer to A-bis layer 2 header: OML, RSL(RLL), NS */
+	unsigned char *l3h; /*!< pointer to Layer 3 header. For OML: FOM; RSL: 04.08; GPRS: BSSGP */
+	unsigned char *l4h; /*!< pointer to layer 4 header */
 
-	unsigned long cb[5]; /*!< \brief control buffer */
+	unsigned long cb[5]; /*!< control buffer */
 
-	uint16_t data_len;   /*!< \brief length of underlying data array */
-	uint16_t len;	     /*!< \brief length of bytes used in msgb */
+	uint16_t data_len;   /*!< length of underlying data array */
+	uint16_t len;	     /*!< length of bytes used in msgb */
 
-	unsigned char *head;	/*!< \brief start of underlying memory buffer */
-	unsigned char *tail;	/*!< \brief end of message in buffer */
-	unsigned char *data;	/*!< \brief start of message in buffer */
-	unsigned char _data[0]; /*!< \brief optional immediate data array */
+	unsigned char *head;	/*!< start of underlying memory buffer */
+	unsigned char *tail;	/*!< end of message in buffer */
+	unsigned char *data;	/*!< start of message in buffer */
+	unsigned char _data[0]; /*!< optional immediate data array */
 };
 
 extern struct msgb *msgb_alloc(uint16_t size, const char *name);
@@ -83,16 +83,16 @@
 #define MSGB_ABORT(msg, fmt, args ...)
 #endif
 
-/*! \brief obtain L1 header of msgb */
+/*! obtain L1 header of msgb */
 #define msgb_l1(m)	((void *)(m->l1h))
-/*! \brief obtain L2 header of msgb */
+/*! obtain L2 header of msgb */
 #define msgb_l2(m)	((void *)(m->l2h))
-/*! \brief obtain L3 header of msgb */
+/*! obtain L3 header of msgb */
 #define msgb_l3(m)	((void *)(m->l3h))
-/*! \brief obtain SMS header of msgb */
+/*! obtain SMS header of msgb */
 #define msgb_sms(m)	((void *)(m->l4h))
 
-/*! \brief determine length of L1 message
+/*! determine length of L1 message
  *  \param[in] msgb message buffer
  *  \returns size of L1 message in bytes
  *
@@ -104,7 +104,7 @@
 	return msgb->tail - (uint8_t *)msgb_l1(msgb);
 }
 
-/*! \brief determine length of L2 message
+/*! determine length of L2 message
  *  \param[in] msgb message buffer
  *  \returns size of L2 message in bytes
  *
@@ -116,7 +116,7 @@
 	return msgb->tail - (uint8_t *)msgb_l2(msgb);
 }
 
-/*! \brief determine length of L3 message
+/*! determine length of L3 message
  *  \param[in] msgb message buffer
  *  \returns size of L3 message in bytes
  *
@@ -128,7 +128,7 @@
 	return msgb->tail - (uint8_t *)msgb_l3(msgb);
 }
 
-/*! \brief determine the length of the header
+/*! determine the length of the header
  *  \param[in] msgb message buffer
  *  \returns number of bytes between start of buffer and start of msg
  *
@@ -140,7 +140,7 @@
 	return msgb->len - msgb->data_len;
 }
 
-/*! \brief determine how much tail room is left in msgb
+/*! determine how much tail room is left in msgb
  *  \param[in] msgb message buffer
  *  \returns number of bytes remaining at end of msgb
  *
@@ -152,7 +152,7 @@
 	return (msgb->head + msgb->data_len) - msgb->tail;
 }
 
-/*! \brief determine the amount of headroom in msgb
+/*! determine the amount of headroom in msgb
  *  \param[in] msgb message buffer
  *  \returns number of bytes left ahead of message start in msgb
  *
@@ -164,7 +164,7 @@
 	return (msgb->data - msgb->head);
 }
 
-/*! \brief append data to end of message buffer
+/*! append data to end of message buffer
  *  \param[in] msgb message buffer
  *  \param[in] len number of bytes to append to message
  *  \returns pointer to start of newly-appended data
@@ -187,7 +187,7 @@
 	return tmp;
 }
 
-/*! \brief append a uint8 value to the end of the message
+/*! append a uint8 value to the end of the message
  *  \param[in] msgb message buffer
  *  \param[in] word unsigned 8bit byte to be appended
  */
@@ -197,7 +197,7 @@
 	space[0] = word & 0xFF;
 }
 
-/*! \brief append a uint16 value to the end of the message
+/*! append a uint16 value to the end of the message
  *  \param[in] msgb message buffer
  *  \param[in] word unsigned 16bit byte to be appended
  */
@@ -207,7 +207,7 @@
 	osmo_store16be(word, space);
 }
 
-/*! \brief append a uint32 value to the end of the message
+/*! append a uint32 value to the end of the message
  *  \param[in] msgb message buffer
  *  \param[in] word unsigned 32bit byte to be appended
  */
@@ -217,7 +217,7 @@
 	osmo_store32be(word, space);
 }
 
-/*! \brief remove data from end of message
+/*! remove data from end of message
  *  \param[in] msgb message buffer
  *  \param[in] len number of bytes to remove from end
  */
@@ -232,7 +232,7 @@
 	return tmp;
 }
 
-/*! \brief remove uint8 from end of message
+/*! remove uint8 from end of message
  *  \param[in] msgb message buffer
  *  \returns 8bit value taken from end of msgb
  */
@@ -242,7 +242,7 @@
 	return space[0];
 }
 
-/*! \brief remove uint16 from end of message
+/*! remove uint16 from end of message
  *  \param[in] msgb message buffer
  *  \returns 16bit value taken from end of msgb
  */
@@ -252,7 +252,7 @@
 	return osmo_load16be(space);
 }
 
-/*! \brief remove uint32 from end of message
+/*! remove uint32 from end of message
  *  \param[in] msgb message buffer
  *  \returns 32bit value taken from end of msgb
  */
@@ -262,7 +262,7 @@
 	return osmo_load32be(space);
 }
 
-/*! \brief prepend (push) some data to start of message
+/*! prepend (push) some data to start of message
  *  \param[in] msgb message buffer
  *  \param[in] len number of bytes to pre-pend
  *  \returns pointer to newly added portion at start of \a msgb
@@ -284,7 +284,7 @@
 	return msgb->data;
 }
 
-/*! \brief prepend a uint8 value to the head of the message
+/*! prepend a uint8 value to the head of the message
  *  \param[in] msgb message buffer
  *  \param[in] word unsigned 8bit byte to be prepended
  */
@@ -294,7 +294,7 @@
 	space[0] = word;
 }
 
-/*! \brief prepend a uint16 value to the head of the message
+/*! prepend a uint16 value to the head of the message
  *  \param[in] msgb message buffer
  *  \param[in] word unsigned 16bit byte to be prepended
  */
@@ -304,7 +304,7 @@
 	osmo_store16be(word, space);
 }
 
-/*! \brief prepend a uint32 value to the head of the message
+/*! prepend a uint32 value to the head of the message
  *  \param[in] msgb message buffer
  *  \param[in] word unsigned 32bit byte to be prepended
  */
@@ -314,7 +314,7 @@
 	osmo_store32be(word, space);
 }
 
-/*! \brief remove (pull) a header from the front of the message buffer
+/*! remove (pull) a header from the front of the message buffer
  *  \param[in] msgb message buffer
  *  \param[in] len number of octets to be pulled
  *  \returns pointer to new start of msgb
@@ -329,7 +329,7 @@
 	return msgb->data += len;
 }
 
-/*! \brief remove (pull) all headers in front of l3h from the message buffer.
+/*! remove (pull) all headers in front of l3h from the message buffer.
  *  \param[in] msgb message buffer with a valid l3h
  *  \returns pointer to new start of msgb (l3h)
  *
@@ -344,7 +344,7 @@
 	return ret;
 }
 
-/*! \brief remove (pull) all headers in front of l2h from the message buffer.
+/*! remove (pull) all headers in front of l2h from the message buffer.
  *  \param[in] msgb message buffer with a valid l2h
  *  \returns pointer to new start of msgb (l2h)
  *
@@ -359,7 +359,7 @@
 	return ret;
 }
 
-/*! \brief remove uint8 from front of message
+/*! remove uint8 from front of message
  *  \param[in] msgb message buffer
  *  \returns 8bit value taken from end of msgb
  */
@@ -369,7 +369,7 @@
 	return space[0];
 }
 
-/*! \brief remove uint16 from front of message
+/*! remove uint16 from front of message
  *  \param[in] msgb message buffer
  *  \returns 16bit value taken from end of msgb
  */
@@ -379,7 +379,7 @@
 	return osmo_load16be(space);
 }
 
-/*! \brief remove uint32 from front of message
+/*! remove uint32 from front of message
  *  \param[in] msgb message buffer
  *  \returns 32bit value taken from end of msgb
  */
@@ -389,7 +389,7 @@
 	return osmo_load32be(space);
 }
 
-/*! \brief Increase headroom of empty msgb, reducing the tailroom
+/*! Increase headroom of empty msgb, reducing the tailroom
  *  \param[in] msg message buffer
  *  \param[in] len amount of extra octets to be reserved as headroom
  *
@@ -406,7 +406,7 @@
 	msg->tail += len;
 }
 
-/*! \brief Trim the msgb to a given absolute length
+/*! Trim the msgb to a given absolute length
  *  \param[in] msg message buffer
  *  \param[in] len new total length of buffer
  *  \returns 0 in case of success, negative in case of error
@@ -424,7 +424,7 @@
 	return 0;
 }
 
-/*! \brief Trim the msgb to a given layer3 length
+/*! Trim the msgb to a given layer3 length
  *  \param[in] msg message buffer
  *  \param[in] l3len new layer3 length
  *  \returns 0 in case of success, negative in case of error
@@ -434,7 +434,7 @@
 	return msgb_trim(msg, (msg->l3h - msg->data) + l3len);
 }
 
-/*! \brief Allocate message buffer with specified headroom
+/*! Allocate message buffer with specified headroom
  *  \param[in] size size in bytes, including headroom
  *  \param[in] headroom headroom in bytes
  *  \param[in] name human-readable name
@@ -455,7 +455,7 @@
 	return msg;
 }
 
-/*! \brief Check a message buffer for consistency
+/*! Check a message buffer for consistency
  *  \param[in] msg message buffer
  *  \returns 0 (false) if inconsistent, != 0 (true) otherwise
  */
diff --git a/include/osmocom/core/panic.h b/include/osmocom/core/panic.h
index 5d575c4..92c557f 100644
--- a/include/osmocom/core/panic.h
+++ b/include/osmocom/core/panic.h
@@ -8,7 +8,7 @@
 
 #include <stdarg.h>
 
-/*! \brief panic handler callback function type */
+/*! panic handler callback function type */
 typedef void (*osmo_panic_handler_t)(const char *fmt, va_list args);
 
 extern void osmo_panic(const char *fmt, ...);
diff --git a/include/osmocom/core/prim.h b/include/osmocom/core/prim.h
index f04e15e..7288ba6 100644
--- a/include/osmocom/core/prim.h
+++ b/include/osmocom/core/prim.h
@@ -12,12 +12,12 @@
 #define OSMO_PRIM(prim, op)	((prim << 8) | (op & 0xFF))
 #define OSMO_PRIM_HDR(oph)	OSMO_PRIM((oph)->primitive, (oph)->operation)
 
-/*! \brief primitive operation */
+/*! primitive operation */
 enum osmo_prim_operation {
-	PRIM_OP_REQUEST,	/*!< \brief request */
-	PRIM_OP_RESPONSE,	/*!< \brief response */
-	PRIM_OP_INDICATION,	/*!< \brief indication */
-	PRIM_OP_CONFIRM,	/*!< \brief confirm */
+	PRIM_OP_REQUEST,	/*!< request */
+	PRIM_OP_RESPONSE,	/*!< response */
+	PRIM_OP_INDICATION,	/*!< indication */
+	PRIM_OP_CONFIRM,	/*!< confirm */
 };
 
 extern const struct value_string osmo_prim_op_names[5];
@@ -28,15 +28,15 @@
 #define _SAP_TETRA_BASE	(0x02 << _SAP_GSM_SHIFT)
 #define _SAP_SS7_BASE	(0x03 << _SAP_GSM_SHIFT)
 
-/*! \brief primitive header */
+/*! primitive header */
 struct osmo_prim_hdr {
-	unsigned int sap;	/*!< \brief Service Access Point */
-	unsigned int primitive;	/*!< \brief Primitive number */
-	enum osmo_prim_operation operation; /*! \brief Primitive Operation */
-	struct msgb *msg;	/*!< \brief \ref msgb containing associated data */
+	unsigned int sap;	/*!< Service Access Point */
+	unsigned int primitive;	/*!< Primitive number */
+	enum osmo_prim_operation operation; /*! Primitive Operation */
+	struct msgb *msg;	/*!< \ref msgb containing associated data */
 };
 
-/*! \brief initialize a primitive header
+/*! initialize a primitive header
  *  \param[in,out] oph primitive header
  *  \param[in] sap Service Access Point
  *  \param[in] primitive Primitive Number
@@ -54,14 +54,14 @@
 	oph->msg = msg;
 }
 
-/*! \brief primitive handler callback type */
+/*! primitive handler callback type */
 typedef int (*osmo_prim_cb)(struct osmo_prim_hdr *oph, void *ctx);
 
-/*! \brief magic value to be used as final record of \ref
+/*! magic value to be used as final record of \ref
  * osmo_prim_event_map */
 #define OSMO_NO_EVENT	0xFFFFFFFF
 
-/*! \brief single entry in a SAP/PRIM/OP -> EVENT map */
+/*! single entry in a SAP/PRIM/OP -> EVENT map */
 struct osmo_prim_event_map {
 	unsigned int sap;	/*!< SAP to match */
 	unsigned int primitive;	/*!< primtiive to match */
diff --git a/include/osmocom/core/rate_ctr.h b/include/osmocom/core/rate_ctr.h
index ebaa7a7..b75967a 100644
--- a/include/osmocom/core/rate_ctr.h
+++ b/include/osmocom/core/rate_ctr.h
@@ -10,60 +10,60 @@
 
 #include <osmocom/core/linuxlist.h>
 
-/*! \brief Number of rate counter intervals */
+/*! Number of rate counter intervals */
 #define RATE_CTR_INTV_NUM	4
 
-/*! \brief Rate counter interval */
+/*! Rate counter interval */
 enum rate_ctr_intv {
-	RATE_CTR_INTV_SEC,	/*!< \brief last second */
-	RATE_CTR_INTV_MIN,	/*!< \brief last minute */
-	RATE_CTR_INTV_HOUR,	/*!< \brief last hour */
-	RATE_CTR_INTV_DAY,	/*!< \brief last day */
+	RATE_CTR_INTV_SEC,	/*!< last second */
+	RATE_CTR_INTV_MIN,	/*!< last minute */
+	RATE_CTR_INTV_HOUR,	/*!< last hour */
+	RATE_CTR_INTV_DAY,	/*!< last day */
 };
 
-/*! \brief data we keep for each of the intervals */
+/*! data we keep for each of the intervals */
 struct rate_ctr_per_intv {
-	uint64_t last;		/*!< \brief counter value in last interval */
-	uint64_t rate;		/*!< \brief counter rate */
+	uint64_t last;		/*!< counter value in last interval */
+	uint64_t rate;		/*!< counter rate */
 };
 
-/*! \brief data we keep for each actual value */
+/*! data we keep for each actual value */
 struct rate_ctr {
-	uint64_t current;	/*!< \brief current value */
-	uint64_t previous;	/*!< \brief previous value, used for delta */
-	/*! \brief per-interval data */
+	uint64_t current;	/*!< current value */
+	uint64_t previous;	/*!< previous value, used for delta */
+	/*! per-interval data */
 	struct rate_ctr_per_intv intv[RATE_CTR_INTV_NUM];
 };
 
-/*! \brief rate counter description */
+/*! rate counter description */
 struct rate_ctr_desc {
-	const char *name;	/*!< \brief name of the counter */
-	const char *description;/*!< \brief description of the counter */
+	const char *name;	/*!< name of the counter */
+	const char *description;/*!< description of the counter */
 };
 
-/*! \brief description of a rate counter group */
+/*! description of a rate counter group */
 struct rate_ctr_group_desc {
-	/*! \brief The prefix to the name of all counters in this group */
+	/*! The prefix to the name of all counters in this group */
 	const char *group_name_prefix;
-	/*! \brief The human-readable description of the group */
+	/*! The human-readable description of the group */
 	const char *group_description;
-	/*! \brief The class to which this group belongs */
+	/*! The class to which this group belongs */
 	int class_id;
-	/*! \brief The number of counters in this group */
+	/*! The number of counters in this group */
 	const unsigned int num_ctr;
-	/*! \brief Pointer to array of counter names */
+	/*! Pointer to array of counter names */
 	const struct rate_ctr_desc *ctr_desc;
 };
 
-/*! \brief One instance of a counter group class */
+/*! One instance of a counter group class */
 struct rate_ctr_group {
-	/*! \brief Linked list of all counter groups in the system */
+	/*! Linked list of all counter groups in the system */
 	struct llist_head list;
-	/*! \brief Pointer to the counter group class */
+	/*! Pointer to the counter group class */
 	const struct rate_ctr_group_desc *desc;
-	/*! \brief The index of this ctr_group within its class */
+	/*! The index of this ctr_group within its class */
 	unsigned int idx;
-	/*! \brief Actual counter structures below */
+	/*! Actual counter structures below */
 	struct rate_ctr ctr[0];
 };
 
@@ -78,19 +78,19 @@
 
 void rate_ctr_group_free(struct rate_ctr_group *grp);
 
-/*! \brief Increment the counter by \a inc
+/*! Increment the counter by \a inc
  *  \param ctr \ref rate_ctr to increment
  *  \param inc quantity to increment \a ctr by */
 void rate_ctr_add(struct rate_ctr *ctr, int inc);
 
-/*! \brief Increment the counter by 1
+/*! Increment the counter by 1
  *  \param ctr \ref rate_ctr to increment */
 static inline void rate_ctr_inc(struct rate_ctr *ctr)
 {
 	rate_ctr_add(ctr, 1);
 }
 
-/*! \brief Return the counter difference since the last call to this function */
+/*! Return the counter difference since the last call to this function */
 int64_t rate_ctr_difference(struct rate_ctr *ctr);
 
 int rate_ctr_init(void *tall_ctx);
@@ -104,7 +104,7 @@
 typedef int (*rate_ctr_group_handler_t)(struct rate_ctr_group *, void *);
 
 
-/*! \brief Iterate over all counters
+/*! Iterate over all counters
  *  \param[in] handle_item Call-back function, aborts if rc < 0
  *  \param[in] data Private data handed through to \a handle_counter
  */
diff --git a/include/osmocom/core/select.h b/include/osmocom/core/select.h
index c2b51a4..fe84c5b 100644
--- a/include/osmocom/core/select.h
+++ b/include/osmocom/core/select.h
@@ -8,17 +8,17 @@
  */
 
 /*! \file select.h
- *  \brief select loop abstraction
+ *  select loop abstraction
  */
 
-/*! \brief Indicate interest in reading from the file descriptor */
+/*! Indicate interest in reading from the file descriptor */
 #define BSC_FD_READ	0x0001
-/*! \brief Indicate interest in writing to the file descriptor */
+/*! Indicate interest in writing to the file descriptor */
 #define BSC_FD_WRITE	0x0002
-/*! \brief Indicate interest in exceptions from the file descriptor */
+/*! Indicate interest in exceptions from the file descriptor */
 #define BSC_FD_EXCEPT	0x0004
 
-/*! \brief Structure representing a file dsecriptor */
+/*! Structure representing a file dsecriptor */
 struct osmo_fd {
 	/*! linked list for internal management */
 	struct llist_head list;	
diff --git a/include/osmocom/core/sercomm.h b/include/osmocom/core/sercomm.h
index 5ad1d73..cf15613 100644
--- a/include/osmocom/core/sercomm.h
+++ b/include/osmocom/core/sercomm.h
@@ -8,10 +8,10 @@
  */
 
 /*! \file sercomm.h
- *  \brief Osmocom Sercomm HDLC (de)multiplex
+ *  Osmocom Sercomm HDLC (de)multiplex
  */
 
-/*! \brief A low sercomm_dlci means high priority.  A high DLCI means low priority */
+/*! A low sercomm_dlci means high priority.  A high DLCI means low priority */
 enum sercomm_dlci {
 	SC_DLCI_HIGHEST = 0,
 	SC_DLCI_DEBUG   = 4,
@@ -23,44 +23,44 @@
 };
 
 struct osmo_sercomm_inst;
-/*! \brief call-back function for per-DLC receive handler
+/*! call-back function for per-DLC receive handler
  *  \param[in] sercomm instance on which msg was received
  *  \param[in] dlci DLC Identifier of received msg
  *  \param[in] msg received message that needs to be processed */
 typedef void (*dlci_cb_t)(struct osmo_sercomm_inst *sercomm, uint8_t dlci, struct msgb *msg);
 
-/*! \brief one instance of a sercomm multiplex/demultiplex */
+/*! one instance of a sercomm multiplex/demultiplex */
 struct osmo_sercomm_inst {
-	/*! \brief Has this instance been initialized? */
+	/*! Has this instance been initialized? */
 	int initialized;
-	/*! \brief UART Identifier */
+	/*! UART Identifier */
 	int uart_id;
 
-	/*! \brief transmit side */
+	/*! transmit side */
 	struct {
-		/*! \brief per-DLC queue of pending transmit msgbs */
+		/*! per-DLC queue of pending transmit msgbs */
 		struct llist_head dlci_queues[_SC_DLCI_MAX];
-		/*! \brief msgb currently being transmitted */
+		/*! msgb currently being transmitted */
 		struct msgb *msg;
-		/*! \brief transmit state */
+		/*! transmit state */
 		int state;
-		/*! \brief next to-be-transmitted char in msg */
+		/*! next to-be-transmitted char in msg */
 		uint8_t *next_char;
 	} tx;
 
-	/*! \brief receive side */
+	/*! receive side */
 	struct {
-		/*! \brief per-DLC handler call-back functions */
+		/*! per-DLC handler call-back functions */
 		dlci_cb_t dlci_handler[_SC_DLCI_MAX];
-		/*! \brief msgb allocation size for rx msgs */
+		/*! msgb allocation size for rx msgs */
 		unsigned int msg_size;
-		/*! \brief currently received msgb */
+		/*! currently received msgb */
 		struct msgb *msg;
-		/*! \brief receive state */
+		/*! receive state */
 		int state;
-		/*! \brief DLCI of currently received msgb */
+		/*! DLCI of currently received msgb */
 		uint8_t dlci;
-		/*! \brief CTRL of currently received msgb */
+		/*! CTRL of currently received msgb */
 		uint8_t ctrl;
 	} rx;
 };
@@ -86,7 +86,7 @@
 extern void sercomm_drv_lock(unsigned long *flags);
 extern void sercomm_drv_unlock(unsigned long *flags);
 
-/*! \brief low-level driver routine to request start of transmission
+/*! low-level driver routine to request start of transmission
  *  The Sercomm code calls this function to inform the low-level driver
  *  that some data is pending for transmission, and the low-level driver
  *  should (if not active already) start enabling tx_empty interrupts
@@ -96,14 +96,14 @@
  */
 extern void sercomm_drv_start_tx(struct osmo_sercomm_inst *sercomm);
 
-/*! \brief low-level driver routine to execute baud-rate change
+/*! low-level driver routine to execute baud-rate change
  *  \param[in] sercomm Osmocom sercomm instance for which to change
  *  \param[in] bdrt New Baud-Rate (integer)
  *  \returns 0 on success; negative in case of error
  */
 extern int sercomm_drv_baudrate_chg(struct osmo_sercomm_inst *sercomm, uint32_t bdrt);
 
-/*! \brief Sercomm msgb allocator function */
+/*! Sercomm msgb allocator function */
 static inline struct msgb *osmo_sercomm_alloc_msgb(unsigned int len)
 {
 	return msgb_alloc_headroom(len+4, 4, "sercomm_tx");
diff --git a/include/osmocom/core/signal.h b/include/osmocom/core/signal.h
index 5ed4e15..d7132f9 100644
--- a/include/osmocom/core/signal.h
+++ b/include/osmocom/core/signal.h
@@ -13,7 +13,7 @@
 #define OSMO_SIGNAL_SS_APPS		0
 #define OSMO_SIGNAL_SS_RESERVED		2147483648u
 
-/*! \brief signal subsystems */
+/*! signal subsystems */
 enum {
 	SS_L_GLOBAL		= OSMO_SIGNAL_SS_RESERVED,
 	SS_L_INPUT,
@@ -25,7 +25,7 @@
 #define OSMO_SIGNAL_T_APPS		0
 #define OSMO_SIGNAL_T_RESERVED		2147483648u
 
-/*! \brief signal types. */
+/*! signal types. */
 enum {
 	S_L_GLOBAL_SHUTDOWN	= OSMO_SIGNAL_T_RESERVED,
 };
diff --git a/include/osmocom/core/socket.h b/include/osmocom/core/socket.h
index 09376c3..d6a5662 100644
--- a/include/osmocom/core/socket.h
+++ b/include/osmocom/core/socket.h
@@ -5,7 +5,7 @@
  */
 
 /*! \file socket.h
- *  \brief Osmocom socket convenience functions
+ *  Osmocom socket convenience functions
  */
 
 #include <stdint.h>
diff --git a/include/osmocom/core/stat_item.h b/include/osmocom/core/stat_item.h
index 181b029..957918a 100644
--- a/include/osmocom/core/stat_item.h
+++ b/include/osmocom/core/stat_item.h
@@ -20,49 +20,49 @@
 	int32_t value;
 };
 
-/*! \brief data we keep for each actual value */
+/*! data we keep for each actual value */
 struct osmo_stat_item {
 	const struct osmo_stat_item_desc *desc;
-	/*! \brief the index of the freshest value */
+	/*! the index of the freshest value */
 	int32_t last_value_index;
-	/*! \brief offset to the freshest value in the value fifo */
+	/*! offset to the freshest value in the value fifo */
 	int16_t last_offs;
-	/*! \brief value fifo */
+	/*! value fifo */
 	struct osmo_stat_item_value values[0];
 };
 
-/*! \brief statistics value description */
+/*! statistics value description */
 struct osmo_stat_item_desc {
-	const char *name;	/*!< \brief name of the item */
-	const char *description;/*!< \brief description of the item */
-	const char *unit;	/*!< \brief unit of a value */
-	unsigned int num_values;/*!< \brief number of values to store */
+	const char *name;	/*!< name of the item */
+	const char *description;/*!< description of the item */
+	const char *unit;	/*!< unit of a value */
+	unsigned int num_values;/*!< number of values to store */
 	int32_t default_value;
 };
 
-/*! \brief description of a statistics value group */
+/*! description of a statistics value group */
 struct osmo_stat_item_group_desc {
-	/*! \brief The prefix to the name of all values in this group */
+	/*! The prefix to the name of all values in this group */
 	const char *group_name_prefix;
-	/*! \brief The human-readable description of the group */
+	/*! The human-readable description of the group */
 	const char *group_description;
-	/*! \brief The class to which this group belongs */
+	/*! The class to which this group belongs */
 	int class_id;
-	/*! \brief The number of values in this group */
+	/*! The number of values in this group */
 	const unsigned int num_items;
-	/*! \brief Pointer to array of value names */
+	/*! Pointer to array of value names */
 	const struct osmo_stat_item_desc *item_desc;
 };
 
-/*! \brief One instance of a counter group class */
+/*! One instance of a counter group class */
 struct osmo_stat_item_group {
-	/*! \brief Linked list of all value groups in the system */
+	/*! Linked list of all value groups in the system */
 	struct llist_head list;
-	/*! \brief Pointer to the counter group class */
+	/*! Pointer to the counter group class */
 	const struct osmo_stat_item_group_desc *desc;
-	/*! \brief The index of this value group within its class */
+	/*! The index of this value group within its class */
 	unsigned int idx;
-	/*! \brief Actual counter structures below */
+	/*! Actual counter structures below */
 	struct osmo_stat_item *items[0];
 };
 
@@ -89,7 +89,7 @@
 const struct osmo_stat_item *osmo_stat_item_get_by_name(
 	const struct osmo_stat_item_group *statg, const char *name);
 
-/*! \brief Retrieve the next value from the osmo_stat_item object.
+/*! Retrieve the next value from the osmo_stat_item object.
  * If a new value has been set, it is returned. The idx is used to decide
  * which value to return.
  * On success, *idx is updated to refer to the next unread value. If
@@ -107,13 +107,13 @@
  */
 int osmo_stat_item_get_next(const struct osmo_stat_item *item, int32_t *idx, int32_t *value);
 
-/*! \brief Get the last (freshest) value */
+/*! Get the last (freshest) value */
 static int32_t osmo_stat_item_get_last(const struct osmo_stat_item *item);
 
-/*! \brief Skip all values of the item and update idx accordingly */
+/*! Skip all values of the item and update idx accordingly */
 int osmo_stat_item_discard(const struct osmo_stat_item *item, int32_t *idx);
 
-/*! \brief Skip all values of all items and update idx accordingly */
+/*! Skip all values of all items and update idx accordingly */
 int osmo_stat_item_discard_all(int32_t *idx);
 
 typedef int (*osmo_stat_item_handler_t)(
@@ -121,7 +121,7 @@
 
 typedef int (*osmo_stat_item_group_handler_t)(struct osmo_stat_item_group *, void *);
 
-/*! \brief Iteate over all items
+/*! Iteate over all items
  *  \param[in] handle_item Call-back function, aborts if rc < 0
  *  \param[in] data Private data handed through to \a handle_item
  */
diff --git a/include/osmocom/core/statistics.h b/include/osmocom/core/statistics.h
index 41716cc..5ebb5fc 100644
--- a/include/osmocom/core/statistics.h
+++ b/include/osmocom/core/statistics.h
@@ -1,60 +1,60 @@
 #pragma once
 
 /*! \file statistics.h
- *  \brief Common routines regarding statistics */
+ *  Common routines regarding statistics */
 
 /*! structure representing a single counter */
 struct osmo_counter {
-	struct llist_head list;		/*!< \brief internal list head */
-	const char *name;		/*!< \brief human-readable name */
-	const char *description;	/*!< \brief humn-readable description */
-	unsigned long value;		/*!< \brief current value */
-	unsigned long previous;		/*!< \brief previous value */
+	struct llist_head list;		/*!< internal list head */
+	const char *name;		/*!< human-readable name */
+	const char *description;	/*!< humn-readable description */
+	unsigned long value;		/*!< current value */
+	unsigned long previous;		/*!< previous value */
 };
 
-/*! \brief Decrement counter */
+/*! Decrement counter */
 static inline void osmo_counter_dec(struct osmo_counter *ctr)
 {
 	ctr->value--;
 }
 
-/*! \brief Increment counter */
+/*! Increment counter */
 static inline void osmo_counter_inc(struct osmo_counter *ctr)
 {
 	ctr->value++;
 }
 
-/*! \brief Get current value of counter */
+/*! Get current value of counter */
 static inline unsigned long osmo_counter_get(struct osmo_counter *ctr)
 {
 	return ctr->value;
 }
 
-/*! \brief Reset current value of counter to 0 */
+/*! Reset current value of counter to 0 */
 static inline void osmo_counter_reset(struct osmo_counter *ctr)
 {
 	ctr->value = 0;
 }
 
-/*! \brief Allocate a new counter */
+/*! Allocate a new counter */
 struct osmo_counter *osmo_counter_alloc(const char *name);
 
-/*! \brief Free the specified counter
+/*! Free the specified counter
  *  \param[in] ctr Counter
  */
 void osmo_counter_free(struct osmo_counter *ctr);
 
-/*! \brief Iterate over all counters
+/*! Iterate over all counters
  *  \param[in] handle_counter Call-back function, aborts if rc < 0
  *  \param[in] data Private dtata handed through to \a handle_counter
  */
 int osmo_counters_for_each(int (*handle_counter)(struct osmo_counter *, void *), void *data);
 
-/*! \brief Resolve counter by human-readable name
+/*! Resolve counter by human-readable name
  *  \param[in] name human-readable name of counter
  *  \returns pointer to counter (\ref osmo_counter) or NULL otherwise
  */
 struct osmo_counter *osmo_counter_get_by_name(const char *name);
 
-/*! \brief Return the counter difference since the last call to this function */
+/*! Return the counter difference since the last call to this function */
 int osmo_counter_difference(struct osmo_counter *ctr);
diff --git a/include/osmocom/core/strrb.h b/include/osmocom/core/strrb.h
index 7507cf4..2b4d89f 100644
--- a/include/osmocom/core/strrb.h
+++ b/include/osmocom/core/strrb.h
@@ -24,7 +24,7 @@
  */
 
 /*! \file strrb.h
- *  \brief Osmocom string ringbuffer handling routines
+ *  Osmocom string ringbuffer handling routines
  */
 
 #include <unistd.h>
@@ -33,14 +33,14 @@
 
 #include <osmocom/core/talloc.h>
 
-/*! \brief A structure representing an osmocom string ringbuffer */
+/*! A structure representing an osmocom string ringbuffer */
 
 #define RB_MAX_MESSAGE_SIZE 240
 struct osmo_strrb {
-	uint16_t start;		/*!< \brief index of the first slot */
-	uint16_t end;		/*!< \brief index of the last slot */
-	uint16_t size;		/*!< \brief max number of messages to store */
-	char **buffer;		/*!< \brief storage for messages */
+	uint16_t start;		/*!< index of the first slot */
+	uint16_t end;		/*!< index of the last slot */
+	uint16_t size;		/*!< max number of messages to store */
+	char **buffer;		/*!< storage for messages */
 };
 
 struct osmo_strrb *osmo_strrb_create(TALLOC_CTX * ctx, size_t rb_size);
diff --git a/include/osmocom/core/timer.h b/include/osmocom/core/timer.h
index 48e7d8d..28785db 100644
--- a/include/osmocom/core/timer.h
+++ b/include/osmocom/core/timer.h
@@ -23,7 +23,7 @@
  */
 
 /*! \file timer.h
- *  \brief Osmocom timer handling routines
+ *  Osmocom timer handling routines
  */
 
 #pragma once
@@ -50,15 +50,15 @@
  *        remove the timers.
  *
  */
-/*! \brief A structure representing a single instance of a timer */
+/*! A structure representing a single instance of a timer */
 struct osmo_timer_list {
-	struct rb_node node;	  /*!< \brief rb-tree node header */
-	struct llist_head list;   /*!< \brief internal list header */
-	struct timeval timeout;   /*!< \brief expiration time */
-	unsigned int active  : 1; /*!< \brief is it active? */
+	struct rb_node node;	  /*!< rb-tree node header */
+	struct llist_head list;   /*!< internal list header */
+	struct timeval timeout;   /*!< expiration time */
+	unsigned int active  : 1; /*!< is it active? */
 
-	void (*cb)(void*);	  /*!< \brief call-back called at timeout */
-	void *data;		  /*!< \brief user data for callback */
+	void (*cb)(void*);	  /*!< call-back called at timeout */
+	void *data;		  /*!< user data for callback */
 };
 
 /**
diff --git a/include/osmocom/core/timer_compat.h b/include/osmocom/core/timer_compat.h
index fb2967b..44259af 100644
--- a/include/osmocom/core/timer_compat.h
+++ b/include/osmocom/core/timer_compat.h
@@ -23,7 +23,7 @@
  */
 
 /*! \file timer_compat.h
- *  \brief Compatibility header with some helpers
+ *  Compatibility header with some helpers
  */
 
 #pragma once
diff --git a/include/osmocom/core/utils.h b/include/osmocom/core/utils.h
index 1d1ebd8..ce49cbe 100644
--- a/include/osmocom/core/utils.h
+++ b/include/osmocom/core/utils.h
@@ -9,26 +9,26 @@
 
 /*! \file utils.h */
 
-/*! \brief Determine number of elements in an array of static size */
+/*! Determine number of elements in an array of static size */
 #define ARRAY_SIZE(x) (sizeof(x) / sizeof((x)[0]))
-/*! \brief Return the maximum of two specified values */
+/*! Return the maximum of two specified values */
 #define OSMO_MAX(a, b) ((a) >= (b) ? (a) : (b))
-/*! \brief Return the minimum of two specified values */
+/*! Return the minimum of two specified values */
 #define OSMO_MIN(a, b) ((a) >= (b) ? (b) : (a))
-/*! \brief Stringify the contents of a macro, e.g. a port number */
+/*! Stringify the contents of a macro, e.g. a port number */
 #define OSMO_STRINGIFY(x) #x
-/*! \brief Make a value_string entry from an enum value name */
+/*! Make a value_string entry from an enum value name */
 #define OSMO_VALUE_STRING(x) { x, #x }
-/*! \brief Number of bytes necessary to store given BITS */
+/*! Number of bytes necessary to store given BITS */
 #define OSMO_BYTES_FOR_BITS(BITS) ((BITS + 8 - 1) / 8)
 
 #include <stdint.h>
 #include <stdio.h>
 
-/*! \brief A mapping between human-readable string and numeric value */
+/*! A mapping between human-readable string and numeric value */
 struct value_string {
-	unsigned int value;	/*!< \brief numeric value */
-	const char *str;	/*!< \brief human-readable string */
+	unsigned int value;	/*!< numeric value */
+	const char *str;	/*!< human-readable string */
 };
 
 const char *get_value_string(const struct value_string *vs, uint32_t val);
diff --git a/include/osmocom/core/write_queue.h b/include/osmocom/core/write_queue.h
index 4e0fdf3..27d090d 100644
--- a/include/osmocom/core/write_queue.h
+++ b/include/osmocom/core/write_queue.h
@@ -34,21 +34,21 @@
 
 /*! write queue instance */
 struct osmo_wqueue {
-	/*! \brief osmocom file descriptor */
+	/*! osmocom file descriptor */
 	struct osmo_fd bfd;
-	/*! \brief maximum length of write queue */
+	/*! maximum length of write queue */
 	unsigned int max_length;
-	/*! \brief current length of write queue */
+	/*! current length of write queue */
 	unsigned int current_length;
 
-	/*! \brief actual linked list implementing the queue */
+	/*! actual linked list implementing the queue */
 	struct llist_head msg_queue;
 
-	/*! \brief call-back in case qeueue is readable */
+	/*! call-back in case qeueue is readable */
 	int (*read_cb)(struct osmo_fd *fd);
-	/*! \brief call-back in case qeueue is writable */
+	/*! call-back in case qeueue is writable */
 	int (*write_cb)(struct osmo_fd *fd, struct msgb *msg);
-	/*! \brief call-back in case qeueue has exceptions */
+	/*! call-back in case qeueue has exceptions */
 	int (*except_cb)(struct osmo_fd *fd);
 };
 
