diff --git a/Doxyfile.codec.in b/Doxyfile.codec.in
index b826a36..247a8b3 100644
--- a/Doxyfile.codec.in
+++ b/Doxyfile.codec.in
@@ -150,15 +150,15 @@
 # comments will behave just like regular Qt-style comments
 # (thus requiring an explicit @brief command for a brief description.)
 
-JAVADOC_AUTOBRIEF      = NO
+JAVADOC_AUTOBRIEF      = YES
 
 # If the QT_AUTOBRIEF tag is set to YES then Doxygen will
 # interpret the first line (until the first dot) of a Qt-style
 # comment as the brief description. If set to NO, the comments
 # will behave just like regular Qt-style comments (thus requiring
-# an explicit \brief command for a brief description.)
+# an explicit command for a brief description.)
 
-QT_AUTOBRIEF           = NO
+QT_AUTOBRIEF           = YES
 
 # The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen
 # treat a multi-line C++ special comment block (i.e. a block of //! or ///
diff --git a/Doxyfile.coding.in b/Doxyfile.coding.in
index 7c1a28e..9a0058d 100644
--- a/Doxyfile.coding.in
+++ b/Doxyfile.coding.in
@@ -150,15 +150,15 @@
 # comments will behave just like regular Qt-style comments
 # (thus requiring an explicit @brief command for a brief description.)
 
-JAVADOC_AUTOBRIEF      = NO
+JAVADOC_AUTOBRIEF      = YES
 
 # If the QT_AUTOBRIEF tag is set to YES then Doxygen will
 # interpret the first line (until the first dot) of a Qt-style
 # comment as the brief description. If set to NO, the comments
 # will behave just like regular Qt-style comments (thus requiring
-# an explicit \brief command for a brief description.)
+# an explicit command for a brief description.)
 
-QT_AUTOBRIEF           = NO
+QT_AUTOBRIEF           = YES
 
 # The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen
 # treat a multi-line C++ special comment block (i.e. a block of //! or ///
diff --git a/Doxyfile.core.in b/Doxyfile.core.in
index cc3d842..2ca0ced 100644
--- a/Doxyfile.core.in
+++ b/Doxyfile.core.in
@@ -150,15 +150,15 @@
 # comments will behave just like regular Qt-style comments
 # (thus requiring an explicit @brief command for a brief description.)
 
-JAVADOC_AUTOBRIEF      = NO
+JAVADOC_AUTOBRIEF      = YES
 
 # If the QT_AUTOBRIEF tag is set to YES then Doxygen will
 # interpret the first line (until the first dot) of a Qt-style
 # comment as the brief description. If set to NO, the comments
 # will behave just like regular Qt-style comments (thus requiring
-# an explicit \brief command for a brief description.)
+# an explicit command for a brief description.)
 
-QT_AUTOBRIEF           = NO
+QT_AUTOBRIEF           = YES
 
 # The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen
 # treat a multi-line C++ special comment block (i.e. a block of //! or ///
diff --git a/Doxyfile.gb.in b/Doxyfile.gb.in
index 36b4f2b..e6b7826 100644
--- a/Doxyfile.gb.in
+++ b/Doxyfile.gb.in
@@ -156,7 +156,7 @@
 # interpret the first line (until the first dot) of a Qt-style
 # comment as the brief description. If set to NO, the comments
 # will behave just like regular Qt-style comments (thus requiring
-# an explicit \brief command for a brief description.)
+# an explicit command for a brief description.)
 
 QT_AUTOBRIEF           = YES
 
diff --git a/Doxyfile.gsm.in b/Doxyfile.gsm.in
index 9673ea7..742adc2 100644
--- a/Doxyfile.gsm.in
+++ b/Doxyfile.gsm.in
@@ -150,15 +150,15 @@
 # comments will behave just like regular Qt-style comments
 # (thus requiring an explicit @brief command for a brief description.)
 
-JAVADOC_AUTOBRIEF      = NO
+JAVADOC_AUTOBRIEF      = YES
 
 # If the QT_AUTOBRIEF tag is set to YES then Doxygen will
 # interpret the first line (until the first dot) of a Qt-style
 # comment as the brief description. If set to NO, the comments
 # will behave just like regular Qt-style comments (thus requiring
-# an explicit \brief command for a brief description.)
+# an explicit command for a brief description.)
 
-QT_AUTOBRIEF           = NO
+QT_AUTOBRIEF           = YES
 
 # The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen
 # treat a multi-line C++ special comment block (i.e. a block of //! or ///
diff --git a/Doxyfile.vty.in b/Doxyfile.vty.in
index 204436f..917af09 100644
--- a/Doxyfile.vty.in
+++ b/Doxyfile.vty.in
@@ -150,15 +150,15 @@
 # comments will behave just like regular Qt-style comments
 # (thus requiring an explicit @brief command for a brief description.)
 
-JAVADOC_AUTOBRIEF      = NO
+JAVADOC_AUTOBRIEF      = YES
 
 # If the QT_AUTOBRIEF tag is set to YES then Doxygen will
 # interpret the first line (until the first dot) of a Qt-style
 # comment as the brief description. If set to NO, the comments
 # will behave just like regular Qt-style comments (thus requiring
-# an explicit \brief command for a brief description.)
+# an explicit command for a brief description.)
 
-QT_AUTOBRIEF           = NO
+QT_AUTOBRIEF           = YES
 
 # The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen
 # treat a multi-line C++ special comment block (i.e. a block of //! or ///
diff --git a/include/osmocom/codec/codec.h b/include/osmocom/codec/codec.h
index 05da911..3e9b688 100644
--- a/include/osmocom/codec/codec.h
+++ b/include/osmocom/codec/codec.h
@@ -42,7 +42,7 @@
        AMR_GOOD = 1
 };
 
-/*! \brief Check if given AMR Frame Type is a speech frame
+/*! Check if given AMR Frame Type is a speech frame
  *  \param[in] ft AMR Frame Type
  *  \returns true if AMR with given Frame Type contains voice, false otherwise
  */
diff --git a/include/osmocom/coding/gsm0503_coding.h b/include/osmocom/coding/gsm0503_coding.h
index 2f0e631..a9c59e4 100644
--- a/include/osmocom/coding/gsm0503_coding.h
+++ b/include/osmocom/coding/gsm0503_coding.h
@@ -8,7 +8,7 @@
  */
 
 /*! \file gsm0503_coding.h
- *  \brief GSM TS 05.03 coding
+ *  GSM TS 05.03 coding
  */
 
 #define GSM0503_GPRS_BURSTS_NBITS	(116 * 4)
diff --git a/include/osmocom/coding/gsm0503_interleaving.h b/include/osmocom/coding/gsm0503_interleaving.h
index a5d25ed..1463fb3 100644
--- a/include/osmocom/coding/gsm0503_interleaving.h
+++ b/include/osmocom/coding/gsm0503_interleaving.h
@@ -7,7 +7,7 @@
  */
 
 /*! \file gsm0503_interleaving.h
- *  \brief GSM TS 05.03 interleaving
+ *  GSM TS 05.03 interleaving
  */
 
 void gsm0503_xcch_deinterleave(sbit_t *cB, const sbit_t *iB);
diff --git a/include/osmocom/coding/gsm0503_mapping.h b/include/osmocom/coding/gsm0503_mapping.h
index 6e139bf..435c913 100644
--- a/include/osmocom/coding/gsm0503_mapping.h
+++ b/include/osmocom/coding/gsm0503_mapping.h
@@ -7,7 +7,7 @@
  */
 
 /*! \file gsm0503_mapping.c
- *  \brief GSM TS 05.03 burst mapping
+ *  GSM TS 05.03 burst mapping
  */
 
 void gsm0503_xcch_burst_unmap(sbit_t *iB, const sbit_t *eB,
diff --git a/include/osmocom/coding/gsm0503_parity.h b/include/osmocom/coding/gsm0503_parity.h
index f844720..2743bdb 100644
--- a/include/osmocom/coding/gsm0503_parity.h
+++ b/include/osmocom/coding/gsm0503_parity.h
@@ -7,7 +7,7 @@
  */
 
 /*! \file gsm0503_parity.h
- *  \brief GSM TS 05.03 parity
+ *  GSM TS 05.03 parity
  */
 
 const struct osmo_crc64gen_code gsm0503_fire_crc40;
diff --git a/include/osmocom/coding/gsm0503_tables.h b/include/osmocom/coding/gsm0503_tables.h
index 4622cae..f8c43c6 100644
--- a/include/osmocom/coding/gsm0503_tables.h
+++ b/include/osmocom/coding/gsm0503_tables.h
@@ -8,7 +8,7 @@
  */
 
 /*! \file gsm0503_tables.h
- *  \brief GSM TS 05.03 tables
+ *  GSM TS 05.03 tables
  */
 
 extern const ubit_t gsm0503_pdtch_hl_hn_ubit[4][8];
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);
 };
 
diff --git a/include/osmocom/crypt/auth.h b/include/osmocom/crypt/auth.h
index 7a27f3b..af4ae15 100644
--- a/include/osmocom/crypt/auth.h
+++ b/include/osmocom/crypt/auth.h
@@ -10,14 +10,14 @@
 
 #include <osmocom/core/linuxlist.h>
 
-/*! \brief Authentication Type (GSM/UMTS) */
+/*! Authentication Type (GSM/UMTS) */
 enum osmo_sub_auth_type {
 	OSMO_AUTH_TYPE_NONE	= 0x00,
 	OSMO_AUTH_TYPE_GSM	= 0x01,
 	OSMO_AUTH_TYPE_UMTS	= 0x02,
 };
 
-/*! \brief Authentication Algorithm */
+/*! Authentication Algorithm */
 enum osmo_auth_algo {
 	OSMO_AUTH_ALG_NONE,
 	OSMO_AUTH_ALG_COMP128v1,
@@ -28,7 +28,7 @@
 	_OSMO_AUTH_ALG_NUM,
 };
 
-/*! \brief permanent (secret) subscriber auth data */
+/*! permanent (secret) subscriber auth data */
 struct osmo_sub_auth_data {
 	enum osmo_sub_auth_type type;
 	enum osmo_auth_algo algo;
@@ -61,19 +61,19 @@
 	uint32_t auth_types;	/*!< bitmask of OSMO_AUTH_TYPE_* */
 };
 
-/* \brief An implementation of an authentication algorithm */
+/* An implementation of an authentication algorithm */
 struct osmo_auth_impl {
 	struct llist_head list;
 	enum osmo_auth_algo algo; /*!< algorithm we implement */
 	const char *name;	/*!< name of the implementation */
 	unsigned int priority;	/*!< priority value (resp. othe implementations */
 
-	/*! \brief callback for generate authentication vectors */
+	/*! callback for generate authentication vectors */
 	int (*gen_vec)(struct osmo_auth_vector *vec,
 			struct osmo_sub_auth_data *aud,
 			const uint8_t *_rand);
 
-	/* \brief callback for generationg auth vectors + re-sync */
+	/* callback for generationg auth vectors + re-sync */
 	int (*gen_vec_auts)(struct osmo_auth_vector *vec,
 			    struct osmo_sub_auth_data *aud,
 			    const uint8_t *auts, const uint8_t *rand_auts,
diff --git a/include/osmocom/gprs/gprs_bssgp.h b/include/osmocom/gprs/gprs_bssgp.h
index b70487c..0e9f7d6 100644
--- a/include/osmocom/gprs/gprs_bssgp.h
+++ b/include/osmocom/gprs/gprs_bssgp.h
@@ -58,7 +58,7 @@
 
 /* gprs_bssgp.c */
 
-/*! \brief BSSGP flow control (SGSN side) According to Section 8.2 */
+/*! BSSGP flow control (SGSN side) According to Section 8.2 */
 struct bssgp_flow_control {
 	uint32_t bucket_size_max;	/*!< maximum size of the bucket (octets) */
 	uint32_t bucket_leak_rate; 	/*!< leak rate of the bucket (octets/sec) */
@@ -158,13 +158,13 @@
 	return tlv_parse(tp, &tvlv_att_def, buf, len, 0, 0);
 }
 
-/*! \brief BSSGP Paging mode */
+/*! BSSGP Paging mode */
 enum bssgp_paging_mode {
 	BSSGP_PAGING_PS,
 	BSSGP_PAGING_CS,
 };
 
-/*! \brief BSSGP Paging scope */
+/*! BSSGP Paging scope */
 enum bssgp_paging_scope {
 	BSSGP_PAGING_BSS_AREA,		/*!< all cells in BSS */
 	BSSGP_PAGING_LOCATION_AREA,	/*!< all cells in LA */
@@ -172,7 +172,7 @@
 	BSSGP_PAGING_BVCI,		/*!< one cell */
 };
 
-/*! \brief BSSGP paging information */
+/*! BSSGP paging information */
 struct bssgp_paging_info {
 	enum bssgp_paging_mode mode;	/*!< CS or PS paging */
 	enum bssgp_paging_scope scope;	/*!< bssgp_paging_scope */
diff --git a/include/osmocom/gprs/gprs_ns.h b/include/osmocom/gprs/gprs_ns.h
index 9cebbd6..5ecaed8 100644
--- a/include/osmocom/gprs/gprs_ns.h
+++ b/include/osmocom/gprs/gprs_ns.h
@@ -41,19 +41,19 @@
 #define NSE_S_ALIVE	0x0002
 #define NSE_S_RESET	0x0004
 
-/*! \brief Osmocom NS link layer types */
+/*! Osmocom NS link layer types */
 enum gprs_ns_ll {
 	GPRS_NS_LL_UDP,		/*!< NS/UDP/IP */
 	GPRS_NS_LL_E1,		/*!< NS/E1 */
 	GPRS_NS_LL_FR_GRE,	/*!< NS/FR/GRE/IP */
 };
 
-/*! \brief Osmoco NS events */
+/*! Osmoco NS events */
 enum gprs_ns_evt {
 	GPRS_NS_EVT_UNIT_DATA,
 };
 
-/*! \brief Osmocom NS VC create status */
+/*! Osmocom NS VC create status */
 enum gprs_ns_cs {
 	GPRS_NS_CS_CREATED,     /*!< A NSVC object has been created */
 	GPRS_NS_CS_FOUND,       /*!< A NSVC object has been found */
@@ -63,32 +63,32 @@
 };
 
 struct gprs_nsvc;
-/*! \brief Osmocom GPRS callback function type */
+/*! Osmocom GPRS callback function type */
 typedef int gprs_ns_cb_t(enum gprs_ns_evt event, struct gprs_nsvc *nsvc,
 			 struct msgb *msg, uint16_t bvci);
 
-/*! \brief An instance of the NS protocol stack */
+/*! An instance of the NS protocol stack */
 struct gprs_ns_inst {
-	/*! \brief callback to the user for incoming UNIT DATA IND */
+	/*! callback to the user for incoming UNIT DATA IND */
 	gprs_ns_cb_t *cb;
 
-	/*! \brief linked lists of all NSVC in this instance */
+	/*! linked lists of all NSVC in this instance */
 	struct llist_head gprs_nsvcs;
 
-	/*! \brief a NSVC object that's needed to deal with packets for
+	/*! a NSVC object that's needed to deal with packets for
 	 * 	   unknown NSVC */
 	struct gprs_nsvc *unknown_nsvc;
 
 	uint16_t timeout[NS_TIMERS_COUNT];
 
-	/*! \brief NS-over-IP specific bits */
+	/*! NS-over-IP specific bits */
 	struct {
 		struct osmo_fd fd;
 		uint32_t local_ip;
 		uint16_t local_port;
 		int dscp;
 	} nsip;
-	/*! \brief NS-over-FR-over-GRE-over-IP specific bits */
+	/*! NS-over-FR-over-GRE-over-IP specific bits */
 	struct {
 		struct osmo_fd fd;
 		uint32_t local_ip;
@@ -104,15 +104,15 @@
 	_NSVC_TIMER_NR,
 };
 
-/*! \brief Structure representing a single NS-VC */
+/*! Structure representing a single NS-VC */
 struct gprs_nsvc {
-	/*! \brief list of NS-VCs within NS Instance */
+	/*! list of NS-VCs within NS Instance */
 	struct llist_head list;
-	/*! \brief pointer to NS Instance */
+	/*! pointer to NS Instance */
 	struct gprs_ns_inst *nsi;
 
-	uint16_t nsei;	/*! \brief end-to-end significance */
-	uint16_t nsvci;	/*! \brief uniquely identifies NS-VC at SGSN */
+	uint16_t nsei;	/*! end-to-end significance */
+	uint16_t nsvci;	/*! uniquely identifies NS-VC at SGSN */
 
 	uint32_t state;
 	uint32_t remote_state;
@@ -129,7 +129,7 @@
 	struct rate_ctr_group *ctrg;
 	struct osmo_stat_item_group *statg;
 
-	/*! \brief which link-layer are we based on? */
+	/*! which link-layer are we based on? */
 	enum gprs_ns_ll ll;
 
 	union {
diff --git a/include/osmocom/gprs/gprs_rlc.h b/include/osmocom/gprs/gprs_rlc.h
index d34d49b..5765281 100644
--- a/include/osmocom/gprs/gprs_rlc.h
+++ b/include/osmocom/gprs/gprs_rlc.h
@@ -2,14 +2,14 @@
 
 #include <stdint.h>
 
-/*! \brief Structure for CPS coding and puncturing scheme (TS 04.60 10.4.8a) */
+/*! Structure for CPS coding and puncturing scheme (TS 04.60 10.4.8a) */
 struct egprs_cps {
 	uint8_t bits;
 	uint8_t mcs;
 	uint8_t p[2];
 };
 
-/*! \brief CPS puncturing table selection (TS 04.60 10.4.8a) */
+/*! CPS puncturing table selection (TS 04.60 10.4.8a) */
 enum egprs_cps_punc {
 	EGPRS_CPS_P1,
 	EGPRS_CPS_P2,
@@ -17,7 +17,7 @@
 	EGPRS_CPS_NONE = -1,
 };
 
-/*! \brief EGPRS header types (TS 04.60 10.0a.2) */
+/*! EGPRS header types (TS 04.60 10.0a.2) */
 enum egprs_hdr_type {
         EGPRS_HDR_TYPE1,
         EGPRS_HDR_TYPE2,
diff --git a/include/osmocom/gprs/protocol/gsm_08_16.h b/include/osmocom/gprs/protocol/gsm_08_16.h
index 56ed594..c3dbe69 100644
--- a/include/osmocom/gprs/protocol/gsm_08_16.h
+++ b/include/osmocom/gprs/protocol/gsm_08_16.h
@@ -12,7 +12,7 @@
 
 /*! \file gprs_ns.h */
 
-/*! \brief Common header of GPRS NS */
+/*! Common header of GPRS NS */
 struct gprs_ns_hdr {
 	uint8_t pdu_type;	/*!< NS PDU type */
 	uint8_t data[0];	/*!< variable-length payload */
@@ -20,7 +20,7 @@
 
 extern const struct value_string gprs_ns_pdu_strings[];
 
-/*! \brief NS PDU Type (TS 08.16, Section 10.3.7, Table 14) */
+/*! NS PDU Type (TS 08.16, Section 10.3.7, Table 14) */
 enum ns_pdu_type {
 	NS_PDUT_UNITDATA	= 0x00,
 	NS_PDUT_RESET		= 0x02,
@@ -43,7 +43,7 @@
 	SNS_PDUT_SIZE_ACK	= 0x13,
 };
 
-/*! \brief NS Control IE (TS 08.16, Section 10.3, Table 12) */
+/*! NS Control IE (TS 08.16, Section 10.3, Table 12) */
 enum ns_ctrl_ie {
 	NS_IE_CAUSE		= 0x00,
 	NS_IE_VCI		= 0x01,
@@ -60,7 +60,7 @@
 	NS_IE_IP_ADDR		= 0x0b,
 };
 
-/*! \brief NS Cause (TS 08.16, Section 10.3.2, Table 13) */
+/*! NS Cause (TS 08.16, Section 10.3.2, Table 13) */
 enum ns_cause {
 	NS_CAUSE_TRANSIT_FAIL		= 0x00,
 	NS_CAUSE_OM_INTERVENTION	= 0x01,
diff --git a/include/osmocom/gprs/protocol/gsm_08_18.h b/include/osmocom/gprs/protocol/gsm_08_18.h
index 529e988..8bc9a8e 100644
--- a/include/osmocom/gprs/protocol/gsm_08_18.h
+++ b/include/osmocom/gprs/protocol/gsm_08_18.h
@@ -2,11 +2,11 @@
 
 #include <stdint.h>
 
-/*! \brief Fixed BVCI definitions (Section 5.4.1) */
+/*! Fixed BVCI definitions (Section 5.4.1) */
 #define BVCI_SIGNALLING	0x0000
 #define BVCI_PTM	0x0001
 
-/*! \brief BSSGP PDU types (Section 11.3.26 / Table 11.27) */
+/*! BSSGP PDU types (Section 11.3.26 / Table 11.27) */
 enum bssgp_pdu_type {
 	/* PDUs between RL and BSSGP SAPs */
 	BSSGP_PDUT_DL_UNITDATA		= 0x00,
@@ -52,7 +52,7 @@
 	BSSGP_PDUT_DELETE_BSS_PFC_ACK	= 0x57,
 };
 
-/*! \brief BSSGP User-Data header (Section 10.2.1 and 10.2.2) */
+/*! BSSGP User-Data header (Section 10.2.1 and 10.2.2) */
 struct bssgp_ud_hdr {
 	uint8_t pdu_type;	/*!< BSSGP PDU type */
 	uint32_t tlli;		/*!< Temporary Link-Local Identifier */
@@ -60,13 +60,13 @@
 	uint8_t data[0];	/* optional/conditional IEs as TLVs */
 } __attribute__((packed));
 
-/*! \brief BSSGP normal header */
+/*! BSSGP normal header */
 struct bssgp_normal_hdr {
 	uint8_t pdu_type;	/*!< BSSGP PDU type */
 	uint8_t data[0];	/*!< optional/conditional IEs as TLVs */
 };
 
-/*! \brief BSSGP Information Element Identifiers */
+/*! BSSGP Information Element Identifiers */
 enum bssgp_iei_type {
 	BSSGP_IE_ALIGNMENT		= 0x00,
 	BSSGP_IE_BMAX_DEFAULT_MS	= 0x01,
@@ -116,7 +116,7 @@
 	BSSGP_IE_SERVICE_UTRAN_CCO	= 0x3d,
 };
 
-/*! \brief Cause coding (Section 11.3.8 / Table 11.10) */
+/*! Cause coding (Section 11.3.8 / Table 11.10) */
 enum gprs_bssgp_cause {
 	BSSGP_CAUSE_PROC_OVERLOAD	= 0x00,
 	BSSGP_CAUSE_EQUIP_FAIL		= 0x01,
diff --git a/include/osmocom/gsm/a5.h b/include/osmocom/gsm/a5.h
index a2278f2..893fb02 100644
--- a/include/osmocom/gsm/a5.h
+++ b/include/osmocom/gsm/a5.h
@@ -32,10 +32,10 @@
  */
 
 /*! \file gsm/a5.h
- *  \brief Osmocom GSM A5 ciphering algorithm header
+ *  Osmocom GSM A5 ciphering algorithm header
  */
 
-/*! \brief Converts a frame number into the 22 bit number used in A5/x
+/*! Converts a frame number into the 22 bit number used in A5/x
  *  \param[in] fn The true framenumber
  *  \return 22 bit word
  */
diff --git a/include/osmocom/gsm/abis_nm.h b/include/osmocom/gsm/abis_nm.h
index 14dbc08..acddb7f 100644
--- a/include/osmocom/gsm/abis_nm.h
+++ b/include/osmocom/gsm/abis_nm.h
@@ -36,7 +36,7 @@
 extern const struct tlv_definition abis_nm_osmo_att_tlvdef;
 extern const struct tlv_definition abis_nm_att_tlvdef_ipa;
 
-/*! \brief write a human-readable OML header to the debug log
+/*! write a human-readable OML header to the debug log
  *  \param[in] ss Logging sub-system
  *  \param[in] foh A-bis OML FOM header
  */
diff --git a/include/osmocom/gsm/gsm_utils.h b/include/osmocom/gsm/gsm_utils.h
index 1ffe579..e76d9ee 100644
--- a/include/osmocom/gsm/gsm_utils.h
+++ b/include/osmocom/gsm/gsm_utils.h
@@ -60,7 +60,7 @@
 enum gsm_band gsm_band_parse(const char *mhz);
 
 /*!
- * \brief Decode a sequence of GSM 03.38 encoded 7 bit characters.
+ * Decode a sequence of GSM 03.38 encoded 7 bit characters.
  *
  * \param decoded	The destination buffer for the decoded characters.
  * \param n		A maximum of n chars is written (incl. terminating \0).
@@ -76,14 +76,14 @@
 int gsm_7bit_decode_n(char *decoded, size_t n, const uint8_t *user_data, uint8_t length);
 
 /*!
- * \brief Decode a sequence of 7 bit characters (USSD encoding).
+ * Decode a sequence of 7 bit characters (USSD encoding).
  *
  * \see gsm_7bit_encode_n()
  */
 int gsm_7bit_decode_n_ussd(char *decoded, size_t n, const uint8_t *user_data, uint8_t length);
 
 /*!
- * \brief Encode a text string into GSM 03.38 encoded 7 bit characters.
+ * Encode a text string into GSM 03.38 encoded 7 bit characters.
  *
  * \param result	The destination buffer for the packed 7 bit sequence.
  * \param n		A maximum of n octets is written.
@@ -97,7 +97,7 @@
 int gsm_7bit_encode_n(uint8_t *result, size_t n, const char *data, int *octets_written);
 
 /*!
- * \brief Encode a text string into GSM 03.38 encoded 7 bit characters (USSD encoding).
+ * Encode a text string into GSM 03.38 encoded 7 bit characters (USSD encoding).
  *
  * \see gsm_7bit_decode_n()
  */
diff --git a/include/osmocom/gsm/kasumi.h b/include/osmocom/gsm/kasumi.h
index 8ecf65f..222aece 100644
--- a/include/osmocom/gsm/kasumi.h
+++ b/include/osmocom/gsm/kasumi.h
@@ -9,7 +9,7 @@
 
 #include <stdint.h>
 
-/*! \brief Single iteration of KASUMI cipher
+/*! Single iteration of KASUMI cipher
  *  \param[in] P Block, 64 bits to be processed in this round
  *  \param[in] KLi1 Expanded subkeys
  *  \param[in] KLi2 Expanded subkeys
@@ -23,7 +23,7 @@
  */
 uint64_t _kasumi(uint64_t P, const uint16_t *KLi1, const uint16_t *KLi2, const uint16_t *KOi1, const uint16_t *KOi2, const uint16_t *KOi3, const uint16_t *KIi1, const uint16_t *KIi2, const uint16_t *KIi3);
 
-/*! \brief Implementation of the KGCORE algorithm (used by A5/3, A5/4, GEA3, GEA4 and ECSD)
+/*! Implementation of the KGCORE algorithm (used by A5/3, A5/4, GEA3, GEA4 and ECSD)
  *  \param[in] CA
  *  \param[in] cb
  *  \param[in] cc
@@ -34,7 +34,7 @@
  */
 void _kasumi_kgcore(uint8_t CA, uint8_t cb, uint32_t cc, uint8_t cd, const uint8_t *ck, uint8_t *co, uint16_t cl);
 
-/*! \brief Expand key into set of subkeys - see TS 135 202 for details
+/*! Expand key into set of subkeys - see TS 135 202 for details
  *  \param[in] key (128 bits) as array of bytes
  *  \param[out] KLi1 Expanded subkeys
  *  \param[out] KLi2 Expanded subkeys
diff --git a/include/osmocom/gsm/l1sap.h b/include/osmocom/gsm/l1sap.h
index 183edbc..322c7ec 100644
--- a/include/osmocom/gsm/l1sap.h
+++ b/include/osmocom/gsm/l1sap.h
@@ -2,51 +2,51 @@
 
 #include <osmocom/core/prim.h>
 
-/*! \brief PH-SAP related primitives (L1<->L2 SAP) */
+/*! PH-SAP related primitives (L1<->L2 SAP) */
 enum osmo_ph_prim {
-	PRIM_PH_DATA,		/*!< \brief PH-DATA */
-	PRIM_PH_RACH,		/*!< \brief PH-RANDOM_ACCESS */
-	PRIM_PH_CONN,		/*!< \brief PH-CONNECT */
-	PRIM_PH_EMPTY_FRAME,	/*!< \brief PH-EMPTY_FRAME */
-	PRIM_PH_RTS,		/*!< \brief PH-RTS */
-	PRIM_MPH_INFO,		/*!< \brief MPH-INFO */
-	PRIM_TCH,		/*!< \brief TCH */
-	PRIM_TCH_RTS,		/*!< \brief TCH */
+	PRIM_PH_DATA,		/*!< PH-DATA */
+	PRIM_PH_RACH,		/*!< PH-RANDOM_ACCESS */
+	PRIM_PH_CONN,		/*!< PH-CONNECT */
+	PRIM_PH_EMPTY_FRAME,	/*!< PH-EMPTY_FRAME */
+	PRIM_PH_RTS,		/*!< PH-RTS */
+	PRIM_MPH_INFO,		/*!< MPH-INFO */
+	PRIM_TCH,		/*!< TCH */
+	PRIM_TCH_RTS,		/*!< TCH */
 };
 
 extern const struct value_string osmo_ph_prim_names[];
 
-/*! \brief PH-SAP related primitives (L1<->L2 SAP) */
+/*! PH-SAP related primitives (L1<->L2 SAP) */
 enum osmo_mph_info_type {
-	PRIM_INFO_TIME,		/*!< \brief Current GSM time */
-	PRIM_INFO_MEAS,		/*!< \brief Measurement indication */
-	PRIM_INFO_ACTIVATE,	/*!< \brief Activation of channel */
-	PRIM_INFO_DEACTIVATE,	/*!< \brief Deactivation of channel */
-	PRIM_INFO_MODIFY,	/*!< \brief Mode Modify of channel */
-	PRIM_INFO_ACT_CIPH,	/*!< \brief Activation of ciphering */
-	PRIM_INFO_DEACT_CIPH,	/*!< \brief Deactivation of ciphering */
+	PRIM_INFO_TIME,		/*!< Current GSM time */
+	PRIM_INFO_MEAS,		/*!< Measurement indication */
+	PRIM_INFO_ACTIVATE,	/*!< Activation of channel */
+	PRIM_INFO_DEACTIVATE,	/*!< Deactivation of channel */
+	PRIM_INFO_MODIFY,	/*!< Mode Modify of channel */
+	PRIM_INFO_ACT_CIPH,	/*!< Activation of ciphering */
+	PRIM_INFO_DEACT_CIPH,	/*!< Deactivation of ciphering */
 };
 
-/*! \brief PH-DATA presence information */
+/*! PH-DATA presence information */
 enum osmo_ph_pres_info_type {
-	PRES_INFO_INVALID = 0,	/*!< \brief Data is invalid */
-	PRES_INFO_HEADER  = 1,	/*!< \brief Only header is present and valid */
-	PRES_INFO_FIRST   = 3,	/*!< \brief First half of data + header are valid (2nd half may be present but invalid) */
-	PRES_INFO_SECOND  = 5,	/*!< \brief Second half of data + header are valid (1st halfmay be present but invalid) */
-	PRES_INFO_BOTH    = 7,	/*!< \brief Both parts + header are present and valid */
+	PRES_INFO_INVALID = 0,	/*!< Data is invalid */
+	PRES_INFO_HEADER  = 1,	/*!< Only header is present and valid */
+	PRES_INFO_FIRST   = 3,	/*!< First half of data + header are valid (2nd half may be present but invalid) */
+	PRES_INFO_SECOND  = 5,	/*!< Second half of data + header are valid (1st halfmay be present but invalid) */
+	PRES_INFO_BOTH    = 7,	/*!< Both parts + header are present and valid */
 	PRES_INFO_UNKNOWN
 };
 
-/*! \brief for PH-RANDOM_ACCESS.req */
+/*! for PH-RANDOM_ACCESS.req */
 struct ph_rach_req_param {
-	uint8_t ra;		/*!< \brief Random Access */
-	uint8_t ta;		/*!< \brief Timing Advance */
-	uint8_t tx_power;	/*!< \brief Transmit Power */
-	uint8_t is_combined_ccch;/*!< \brief Are we using a combined CCCH? */
-	uint16_t offset;	/*!< \brief Timing Offset */
+	uint8_t ra;		/*!< Random Access */
+	uint8_t ta;		/*!< Timing Advance */
+	uint8_t tx_power;	/*!< Transmit Power */
+	uint8_t is_combined_ccch;/*!< Are we using a combined CCCH? */
+	uint16_t offset;	/*!< Timing Offset */
 };
 
-/*! \brief for PH_RA_IND burstType inforamtion */
+/*! for PH_RA_IND burstType inforamtion */
 enum ph_burst_type {
 	GSM_L1_BURST_TYPE_NONE = 0,
 	GSM_L1_BURST_TYPE_ACCESS_0,
@@ -54,79 +54,79 @@
 	GSM_L1_BURST_TYPE_ACCESS_2
 };
 
-/*! \brief for PH-RANDOM_ACCESS.ind */
+/*! for PH-RANDOM_ACCESS.ind */
 struct ph_rach_ind_param {
-	uint8_t chan_nr;	/*!< \brief Channel Number (Like RSL) */
-	uint16_t ra;		/*!< \brief Random Access */
-	uint8_t acc_delay;	/*!< \brief Delay in bit periods */
-	uint32_t fn;		/*!< \brief GSM Frame Number at time of RA */
-	uint8_t is_11bit;	/*!< \brief no.of bits in RACH*/
-	enum ph_burst_type burst_type; /*!< \brief type of burst*/
+	uint8_t chan_nr;	/*!< Channel Number (Like RSL) */
+	uint16_t ra;		/*!< Random Access */
+	uint8_t acc_delay;	/*!< Delay in bit periods */
+	uint32_t fn;		/*!< GSM Frame Number at time of RA */
+	uint8_t is_11bit;	/*!< no.of bits in RACH*/
+	enum ph_burst_type burst_type; /*!< type of burst*/
 };
 
-/*! \brief for PH-[UNIT]DATA.{req,ind} | PH-RTS.ind */
+/*! for PH-[UNIT]DATA.{req,ind} | PH-RTS.ind */
 struct ph_data_param {
-	uint8_t link_id;	/*!< \brief Link Identifier (Like RSL) */
-	uint8_t chan_nr;	/*!< \brief Channel Number (Like RSL) */
-	uint32_t fn;		/*!< \brief GSM Frame Number */
-	int8_t rssi;		/*!< \brief RSSI of receivedindication */
-	uint16_t ber10k;	/*!< \brief BER in units of 0.01% */
-	int16_t ta_offs_qbits;	/* !< \brief Burst TA Offset in quarter bits */
-	int16_t lqual_cb;	/* !< \brief Link quality in centiBel */
-	enum osmo_ph_pres_info_type pdch_presence_info; /*!< \brief Info regarding presence/validity of header and data parts */
+	uint8_t link_id;	/*!< Link Identifier (Like RSL) */
+	uint8_t chan_nr;	/*!< Channel Number (Like RSL) */
+	uint32_t fn;		/*!< GSM Frame Number */
+	int8_t rssi;		/*!< RSSI of receivedindication */
+	uint16_t ber10k;	/*!< BER in units of 0.01% */
+	int16_t ta_offs_qbits;	/* !< Burst TA Offset in quarter bits */
+	int16_t lqual_cb;	/* !< Link quality in centiBel */
+	enum osmo_ph_pres_info_type pdch_presence_info; /*!< Info regarding presence/validity of header and data parts */
 };
 
-/*! \brief for TCH.{req,ind} | TCH-RTS.ind */
+/*! for TCH.{req,ind} | TCH-RTS.ind */
 struct ph_tch_param {
-	uint8_t chan_nr;	/*!< \brief Channel Number (Like RSL) */
-	uint32_t fn;		/*!< \brief GSM Frame Number */
-	int8_t rssi;		/*!< \brief RSSI of received indication */
-	uint8_t marker;		/*!< \brief RTP Marker bit (speech onset indicator) */
+	uint8_t chan_nr;	/*!< Channel Number (Like RSL) */
+	uint32_t fn;		/*!< GSM Frame Number */
+	int8_t rssi;		/*!< RSSI of received indication */
+	uint8_t marker;		/*!< RTP Marker bit (speech onset indicator) */
 };
 
-/*! \brief for PH-CONN.ind */
+/*! for PH-CONN.ind */
 struct ph_conn_ind_param {
-	uint32_t fn;		/*!< \brief GSM Frame Number */
+	uint32_t fn;		/*!< GSM Frame Number */
 };
 
-/*! \brief for TIME MPH-INFO.ind */
+/*! for TIME MPH-INFO.ind */
 struct info_time_ind_param {
-	uint32_t fn;		/*!< \brief GSM Frame Number */
+	uint32_t fn;		/*!< GSM Frame Number */
 };
 
-/*! \brief for MEAS MPH-INFO.ind */
+/*! for MEAS MPH-INFO.ind */
 struct info_meas_ind_param {
-	uint8_t chan_nr;	/*!< \brief Channel Number (Like RSL) */
-	uint32_t fn;		/*!< \brief GSM Frame Number */
-	uint16_t ber10k;	/*!< \brief BER in units of 0.01% */
-	int16_t ta_offs_qbits;	/*!< \brief timing advance offset (in qbits) */
-	int16_t c_i_cb;		/*!< \brief C/I ratio in 0.1 dB */
-	uint8_t is_sub:1;	/*!< \brief flags */
-	uint8_t inv_rssi;	/*!< \brief RSSI in dBm * -1 */
+	uint8_t chan_nr;	/*!< Channel Number (Like RSL) */
+	uint32_t fn;		/*!< GSM Frame Number */
+	uint16_t ber10k;	/*!< BER in units of 0.01% */
+	int16_t ta_offs_qbits;	/*!< timing advance offset (in qbits) */
+	int16_t c_i_cb;		/*!< C/I ratio in 0.1 dB */
+	uint8_t is_sub:1;	/*!< flags */
+	uint8_t inv_rssi;	/*!< RSSI in dBm * -1 */
 };
 
-/*! \brief for {ACTIVATE,DEACTIVATE,MODIFY} MPH-INFO.req */
+/*! for {ACTIVATE,DEACTIVATE,MODIFY} MPH-INFO.req */
 struct info_act_req_param {
-	uint8_t chan_nr;	/*!< \brief Channel Number (Like RSL) */
+	uint8_t chan_nr;	/*!< Channel Number (Like RSL) */
 	uint8_t sacch_only;	/*!< \breif Only deactivate SACCH */
 };
 
-/*! \brief for {ACTIVATE,DEACTIVATE} MPH-INFO.cnf */
+/*! for {ACTIVATE,DEACTIVATE} MPH-INFO.cnf */
 struct info_act_cnf_param {
-	uint8_t chan_nr;	/*!< \brief Channel Number (Like RSL) */
-	uint8_t cause;		/*!< \brief RSL cause in case of nack */
+	uint8_t chan_nr;	/*!< Channel Number (Like RSL) */
+	uint8_t cause;		/*!< RSL cause in case of nack */
 };
 
-/*! \brief for {ACTIVATE,DEACTIVATE} MPH-INFO.{req,cnf} */
+/*! for {ACTIVATE,DEACTIVATE} MPH-INFO.{req,cnf} */
 struct info_ciph_req_param {
-	uint8_t chan_nr;	/*!< \brief Channel Number (Like RSL) */
-	uint8_t downlink;	/*!< \brief Apply to downlink */
-	uint8_t uplink;		/*!< \brief Apply to uplink */
+	uint8_t chan_nr;	/*!< Channel Number (Like RSL) */
+	uint8_t downlink;	/*!< Apply to downlink */
+	uint8_t uplink;		/*!< Apply to uplink */
 };
 
-/*! \brief for MPH-INFO.ind */
+/*! for MPH-INFO.ind */
 struct mph_info_param {
-	enum osmo_mph_info_type type; /*!< \brief Info message type */
+	enum osmo_mph_info_type type; /*!< Info message type */
 	union {
 		struct info_time_ind_param time_ind;
 		struct info_meas_ind_param meas_ind;
@@ -136,9 +136,9 @@
 	} u;
 };
 
-/*! \brief primitive header for PH-SAP primitives */
+/*! primitive header for PH-SAP primitives */
 struct osmo_phsap_prim {
-	struct osmo_prim_hdr oph; /*!< \brief generic primitive header */
+	struct osmo_prim_hdr oph; /*!< generic primitive header */
 	union {
 		struct ph_data_param data;
 		struct ph_tch_param tch;
@@ -146,5 +146,5 @@
 		struct ph_rach_ind_param rach_ind;
 		struct ph_conn_ind_param conn_ind;
 		struct mph_info_param info;
-	} u;			/*!< \brief request-specific data */
+	} u;			/*!< request-specific data */
 };
diff --git a/include/osmocom/gsm/lapd_core.h b/include/osmocom/gsm/lapd_core.h
index 42ef417..8d3a0f8 100644
--- a/include/osmocom/gsm/lapd_core.h
+++ b/include/osmocom/gsm/lapd_core.h
@@ -14,16 +14,16 @@
  * primitive related stuff
  */
 
-/*! \brief LAPD related primitives (L2<->L3 SAP)*/
+/*! LAPD related primitives (L2<->L3 SAP)*/
 enum osmo_dl_prim {
-	PRIM_DL_UNIT_DATA,	/*!< \brief DL-UNIT-DATA */
-	PRIM_DL_DATA,		/*!< \brief DL-DATA */
-	PRIM_DL_EST,		/*!< \brief DL-ESTABLISH */
-	PRIM_DL_REL,		/*!< \brief DL-RLEEASE */
-	PRIM_DL_SUSP,		/*!< \brief DL-SUSPEND */
-	PRIM_DL_RES,		/*!< \brief DL-RESUME */
-	PRIM_DL_RECON,		/*!< \brief DL-RECONNECT */
-	PRIM_MDL_ERROR,		/*!< \brief MDL-ERROR */
+	PRIM_DL_UNIT_DATA,	/*!< DL-UNIT-DATA */
+	PRIM_DL_DATA,		/*!< DL-DATA */
+	PRIM_DL_EST,		/*!< DL-ESTABLISH */
+	PRIM_DL_REL,		/*!< DL-RLEEASE */
+	PRIM_DL_SUSP,		/*!< DL-SUSPEND */
+	PRIM_DL_RES,		/*!< DL-RESUME */
+	PRIM_DL_RECON,		/*!< DL-RECONNECT */
+	PRIM_MDL_ERROR,		/*!< MDL-ERROR */
 };
 
 /* Uses the same values as RLL, so no conversion for GSM is required. */
@@ -43,32 +43,32 @@
 #define MDL_CAUSE_SABM_INFO_NOTALL	0x0e
 #define MDL_CAUSE_FRMR			0x0f
 
-/*! \brief for MDL-ERROR.ind */
+/*! for MDL-ERROR.ind */
 struct mdl_error_ind_param {
-	uint8_t cause;		/*!< \brief generic cause value */
+	uint8_t cause;		/*!< generic cause value */
 };
 
-/*! \brief for DL-REL.req */
+/*! for DL-REL.req */
 struct dl_rel_req_param {
-	uint8_t mode;		/*!< \brief release mode */
+	uint8_t mode;		/*!< release mode */
 };
 
-/*! \brief primitive header for LAPD DL-SAP primitives */
+/*! primitive header for LAPD DL-SAP primitives */
 struct osmo_dlsap_prim {
-	struct osmo_prim_hdr oph; /*!< \brief generic primitive header */
+	struct osmo_prim_hdr oph; /*!< generic primitive header */
 	union {
 		struct mdl_error_ind_param error_ind;
 		struct dl_rel_req_param rel_req;
-	} u;			/*!< \brief request-specific data */
+	} u;			/*!< request-specific data */
 };
 
-/*! \brief LAPD mode/role */
+/*! LAPD mode/role */
 enum lapd_mode {
-	LAPD_MODE_USER,		/*!< \brief behave like user */
-	LAPD_MODE_NETWORK,	/*!< \brief behave like network */
+	LAPD_MODE_USER,		/*!< behave like user */
+	LAPD_MODE_NETWORK,	/*!< behave like network */
 };
 
-/*! \brief LAPD state (Figure B.2/Q.921)*/
+/*! LAPD state (Figure B.2/Q.921)*/
 enum lapd_state {
 	LAPD_STATE_NULL = 0,
 	LAPD_STATE_TEI_UNASS,
@@ -81,7 +81,7 @@
 	LAPD_STATE_TIMER_RECOV,
 };
 
-/*! \brief LAPD message format (I / S / U) */
+/*! LAPD message format (I / S / U) */
 enum lapd_format {
 	LAPD_FORM_UKN = 0,
 	LAPD_FORM_I,
@@ -89,7 +89,7 @@
 	LAPD_FORM_U,
 };
 
-/*! \brief LAPD message context */
+/*! LAPD message context */
 struct lapd_msg_ctx {
 	struct lapd_datalink *dl;
 	int n201;
@@ -119,45 +119,45 @@
 	int	more; /* if message is fragmented */
 };
 
-/*! \brief LAPD datalink */
+/*! LAPD datalink */
 struct lapd_datalink {
 	int (*send_dlsap)(struct osmo_dlsap_prim *dp,
 	        struct lapd_msg_ctx *lctx);
 	int (*send_ph_data_req)(struct lapd_msg_ctx *lctx, struct msgb *msg);
 	int (*update_pending_frames)(struct lapd_msg_ctx *lctx);
 	struct {
-		/*! \brief filled-in once we set the lapd_mode above */
+		/*! filled-in once we set the lapd_mode above */
 		struct lapd_cr_ent loc2rem;
 		struct lapd_cr_ent rem2loc;
 	} cr;
-	enum lapd_mode mode; /*!< \brief current mode of link */
-	int use_sabme; /*!< \brief use SABME instead of SABM */
-	int reestablish; /*!< \brief enable reestablish support */
-	int n200, n200_est_rel; /*!< \brief number of retranmissions */
-	struct lapd_msg_ctx lctx; /*!< \brief LAPD context */
-	int maxf; /*!< \brief maximum frame size (after defragmentation) */ 
-	uint8_t k; /*!< \brief maximum number of unacknowledged frames */
-	uint8_t v_range; /*!< \brief range of sequence numbers */
-	uint8_t v_send;	/*!< \brief seq nr of next I frame to be transmitted */
-	uint8_t v_ack;	/*!< \brief last frame ACKed by peer */
-	uint8_t v_recv;	/*!< \brief seq nr of next I frame expected to be received */
-	uint32_t state; /*!< \brief LAPD state (\ref lapd_state) */
-	int seq_err_cond; /*!< \brief condition of sequence error */
-	uint8_t own_busy; /*!< \brief receiver busy on our side */
-	uint8_t peer_busy; /*!< \brief receiver busy on remote side */
-	int t200_sec, t200_usec; /*!< \brief retry timer (default 1 sec) */
-	int t203_sec, t203_usec; /*!< \brief retry timer (default 10 secs) */
-	struct osmo_timer_list t200; /*!< \brief T200 timer */
-	struct osmo_timer_list t203; /*!< \brief T203 timer */
-	uint8_t retrans_ctr; /*!< \brief re-transmission counter */
-	struct llist_head tx_queue; /*!< \brief frames to L1 */
-	struct llist_head send_queue; /*!< \brief frames from L3 */
-	struct msgb *send_buffer; /*!< \brief current frame transmitting */
-	int send_out; /*!< \brief how much was sent from send_buffer */
-	struct lapd_history *tx_hist; /*!< \brief tx history structure array */
-	uint8_t range_hist; /*!< \brief range of history buffer 2..2^n */
-	struct msgb *rcv_buffer; /*!< \brief buffer to assemble the received message */
-	struct msgb *cont_res; /*!< \brief buffer to store content resolution data on network side, to detect multiple phones on same channel */
+	enum lapd_mode mode; /*!< current mode of link */
+	int use_sabme; /*!< use SABME instead of SABM */
+	int reestablish; /*!< enable reestablish support */
+	int n200, n200_est_rel; /*!< number of retranmissions */
+	struct lapd_msg_ctx lctx; /*!< LAPD context */
+	int maxf; /*!< maximum frame size (after defragmentation) */ 
+	uint8_t k; /*!< maximum number of unacknowledged frames */
+	uint8_t v_range; /*!< range of sequence numbers */
+	uint8_t v_send;	/*!< seq nr of next I frame to be transmitted */
+	uint8_t v_ack;	/*!< last frame ACKed by peer */
+	uint8_t v_recv;	/*!< seq nr of next I frame expected to be received */
+	uint32_t state; /*!< LAPD state (\ref lapd_state) */
+	int seq_err_cond; /*!< condition of sequence error */
+	uint8_t own_busy; /*!< receiver busy on our side */
+	uint8_t peer_busy; /*!< receiver busy on remote side */
+	int t200_sec, t200_usec; /*!< retry timer (default 1 sec) */
+	int t203_sec, t203_usec; /*!< retry timer (default 10 secs) */
+	struct osmo_timer_list t200; /*!< T200 timer */
+	struct osmo_timer_list t203; /*!< T203 timer */
+	uint8_t retrans_ctr; /*!< re-transmission counter */
+	struct llist_head tx_queue; /*!< frames to L1 */
+	struct llist_head send_queue; /*!< frames from L3 */
+	struct msgb *send_buffer; /*!< current frame transmitting */
+	int send_out; /*!< how much was sent from send_buffer */
+	struct lapd_history *tx_hist; /*!< tx history structure array */
+	uint8_t range_hist; /*!< range of history buffer 2..2^n */
+	struct msgb *rcv_buffer; /*!< buffer to assemble the received message */
+	struct msgb *cont_res; /*!< buffer to store content resolution data on network side, to detect multiple phones on same channel */
 };
 
 void lapd_dl_init(struct lapd_datalink *dl, uint8_t k, uint8_t v_range,
diff --git a/include/osmocom/gsm/lapdm.h b/include/osmocom/gsm/lapdm.h
index 84d109d..ec14cdd 100644
--- a/include/osmocom/gsm/lapdm.h
+++ b/include/osmocom/gsm/lapdm.h
@@ -9,15 +9,15 @@
 
 /*! \file lapdm.h */
 
-/*! \brief LAPDm mode/role */
+/*! LAPDm mode/role */
 enum lapdm_mode {
-	LAPDM_MODE_MS,		/*!< \brief behave like a MS (mobile phone) */
-	LAPDM_MODE_BTS,		/*!< \brief behave like a BTS (network) */
+	LAPDM_MODE_MS,		/*!< behave like a MS (mobile phone) */
+	LAPDM_MODE_BTS,		/*!< behave like a BTS (network) */
 };
 
 struct lapdm_entity;
 
-/*! \brief LAPDm message context */
+/*! LAPDm message context */
 struct lapdm_msg_ctx {
 	struct lapdm_datalink *dl;
 	int lapdm_fmt;
@@ -27,18 +27,18 @@
 	uint8_t tx_power_ind;	/* MS power indicated by network */
 };
 
-/*! \brief LAPDm datalink like TS 04.06 / Section 3.5.2 */
+/*! LAPDm datalink like TS 04.06 / Section 3.5.2 */
 struct lapdm_datalink {
-	struct lapd_datalink dl; /* \brief common LAPD */
-	struct lapdm_msg_ctx mctx; /*!< \brief context of established connection */
+	struct lapd_datalink dl; /* common LAPD */
+	struct lapdm_msg_ctx mctx; /*!< context of established connection */
 
-	struct lapdm_entity *entity; /*!< \brief LAPDm entity we are part of */
+	struct lapdm_entity *entity; /*!< LAPDm entity we are part of */
 };
 
-/*! \brief LAPDm datalink SAPIs */
+/*! LAPDm datalink SAPIs */
 enum lapdm_dl_sapi {
-	DL_SAPI0	= 0,	/*!< \brief SAPI 0 */
-	DL_SAPI3	= 1,	/*!< \brief SAPI 1 */
+	DL_SAPI0	= 0,	/*!< SAPI 0 */
+	DL_SAPI3	= 1,	/*!< SAPI 1 */
 	_NR_DL_SAPI
 };
 
@@ -47,34 +47,34 @@
 #define LAPDM_ENT_F_EMPTY_FRAME		0x0001
 #define LAPDM_ENT_F_POLLING_ONLY	0x0002
 
-/*! \brief a LAPDm Entity */
+/*! a LAPDm Entity */
 struct lapdm_entity {
-	/*! \brief the SAPIs of the LAPDm entity */
+	/*! the SAPIs of the LAPDm entity */
 	struct lapdm_datalink datalink[_NR_DL_SAPI];
-	int last_tx_dequeue; /*!< \brief last entity that was dequeued */
-	int tx_pending; /*!< \brief currently a pending frame not confirmed by L1 */
-	enum lapdm_mode mode; /*!< \brief are we in BTS mode or MS mode */
+	int last_tx_dequeue; /*!< last entity that was dequeued */
+	int tx_pending; /*!< currently a pending frame not confirmed by L1 */
+	enum lapdm_mode mode; /*!< are we in BTS mode or MS mode */
 	unsigned int flags;
 
-	void *l1_ctx;	/*!< \brief context for layer1 instance */
-	void *l3_ctx;	/*!< \brief context for layer3 instance */
+	void *l1_ctx;	/*!< context for layer1 instance */
+	void *l3_ctx;	/*!< context for layer3 instance */
 
-	osmo_prim_cb l1_prim_cb;/*!< \brief callback for sending prims to L1 */
-	lapdm_cb_t l3_cb;	/*!< \brief callback for sending stuff to L3 */
+	osmo_prim_cb l1_prim_cb;/*!< callback for sending prims to L1 */
+	lapdm_cb_t l3_cb;	/*!< callback for sending stuff to L3 */
 
-	/*! \brief pointer to \ref lapdm_channel of which we're part */
+	/*! pointer to \ref lapdm_channel of which we're part */
 	struct lapdm_channel *lapdm_ch;
 
 	uint8_t ta;		/* TA used and indicated to network */
 	uint8_t tx_power;	/* MS power used and indicated to network */
 };
 
-/*! \brief the two lapdm_entities that form a GSM logical channel (ACCH + DCCH) */
+/*! the two lapdm_entities that form a GSM logical channel (ACCH + DCCH) */
 struct lapdm_channel {
-	struct llist_head list;		/*!< \brief internal linked list */
-	char *name;			/*!< \brief human-readable name */
-	struct lapdm_entity lapdm_acch;	/*!< \brief Associated Control Channel */
-	struct lapdm_entity lapdm_dcch;	/*!< \brief Dedicated Control Channel */
+	struct llist_head list;		/*!< internal linked list */
+	char *name;			/*!< human-readable name */
+	struct lapdm_entity lapdm_acch;	/*!< Associated Control Channel */
+	struct lapdm_entity lapdm_dcch;	/*!< Dedicated Control Channel */
 };
 
 const char *get_rsl_name(int value);
diff --git a/include/osmocom/gsm/oap.h b/include/osmocom/gsm/oap.h
index ff561bf..fba22c7 100644
--- a/include/osmocom/gsm/oap.h
+++ b/include/osmocom/gsm/oap.h
@@ -26,7 +26,7 @@
 #include <osmocom/core/msgb.h>
 #include <osmocom/gsm/protocol/gsm_04_08_gprs.h>
 
-/*! \brief Information Element Identifiers for OAP IEs.
+/*! Information Element Identifiers for OAP IEs.
  * They match osmo_gsup_iei (so far). */
 enum osmo_oap_iei {
 	OAP_CAUSE_IE			= 0x02,
@@ -37,7 +37,7 @@
 	OAP_CLIENT_ID_IE		= 0x30,
 };
 
-/*! \brief OAP message types */
+/*! OAP message types */
 enum osmo_oap_message_type {
 	OAP_MSGT_REGISTER_REQUEST	= 0b00000100,
 	OAP_MSGT_REGISTER_ERROR		= 0b00000101,
@@ -52,7 +52,7 @@
 	OAP_MSGT_SYNC_RESULT		= 0b00001110,
 };
 
-/*! \brief Parsed/decoded OAP protocol message */
+/*! Parsed/decoded OAP protocol message */
 struct osmo_oap_message {
 	enum osmo_oap_message_type message_type;
 	enum gsm48_gmm_cause cause;
diff --git a/include/osmocom/gsm/protocol/gsm_04_08.h b/include/osmocom/gsm/protocol/gsm_04_08.h
index 604a5df..90b6cf1 100644
--- a/include/osmocom/gsm/protocol/gsm_04_08.h
+++ b/include/osmocom/gsm/protocol/gsm_04_08.h
@@ -957,7 +957,7 @@
 
 #define GSM48_TA_INVALID 220
 
-/*! \brief Check if TA is valid according to 3GPP TS 44.018 § 10.5.2.40
+/*! Check if TA is valid according to 3GPP TS 44.018 § 10.5.2.40
  *  \param[in] ta Timing Advance value
  *  \returns true if ta is valid, false otherwise
  *  Note: Rules for GSM400 band are ignored as it's not implemented in practice.
@@ -1620,7 +1620,7 @@
 	GSM48_BCAP_MT_AUTO_1	= 8,
 };
 
-/*! \brief GSM 04.08 Bearer Capability: Speech Version Indication
+/*! GSM 04.08 Bearer Capability: Speech Version Indication
  *  (See also 3GPP TS 24.008, Table 10.5.103) */
 enum gsm48_bcap_speech_ver {
 	GSM48_BCAP_SV_FR	= 0,	/*!< GSM FR V1 (GSM FR) */
diff --git a/include/osmocom/gsm/protocol/gsm_08_08.h b/include/osmocom/gsm/protocol/gsm_08_08.h
index d165330..6ae6855 100644
--- a/include/osmocom/gsm/protocol/gsm_08_08.h
+++ b/include/osmocom/gsm/protocol/gsm_08_08.h
@@ -391,7 +391,7 @@
 	GSM0808_SPEECH_PERM_NO_CHANGE = 0x1f,
 };
 
-/*! \brief GSM 08.08 3.2.2.11 Channel Type
+/*! GSM 08.08 3.2.2.11 Channel Type
  *  (see also 3GPP TS 48.008, section 3.2.2.11) */
 enum gsm0808_permitted_speech {
 	GSM0808_PERM_FR1	= 0x01, /*!< GSM FR */
@@ -406,7 +406,7 @@
 	GSM0808_PERM_HR6	= 0x45, /*!< OHR AMR */
 };
 
-/*! \brief 3GPP TS 48.008, 3.2.2.103 Speech Codec Type */
+/*! 3GPP TS 48.008, 3.2.2.103 Speech Codec Type */
 enum gsm0808_speech_codec_type {
 	GSM0808_SCT_FR1	= 0x0, /*!< GSM FR */
 	GSM0808_SCT_FR2	= 0x2, /*!< GSM EFR */
@@ -449,7 +449,7 @@
 	uint16_t cfg;
 };
 
-/*! \brief Default speech codec configurations: Some codecs specified with
+/*! Default speech codec configurations: Some codecs specified with
  *  struct gsm0808_speech_codec, require a configuration (cfg). The following
  *  default configuration will configure the codec (RTP) to match the
  *  configuration that is used on the air interface (Um).
diff --git a/include/osmocom/gsm/protocol/gsm_08_58.h b/include/osmocom/gsm/protocol/gsm_08_58.h
index a7a2ccf..c76cf3b 100644
--- a/include/osmocom/gsm/protocol/gsm_08_58.h
+++ b/include/osmocom/gsm/protocol/gsm_08_58.h
@@ -30,59 +30,59 @@
 
 /*! \file gsm_08_58.h */
 
-/*! \brief RSL common header */
+/*! RSL common header */
 struct abis_rsl_common_hdr {
-	uint8_t	msg_discr;	/*!< \brief message discriminator (ABIS_RSL_MDISC_*) */
-	uint8_t	msg_type;	/*!< \brief message type (\ref abis_rsl_msgtype) */
-	uint8_t	data[0];	/*!< \brief actual payload data */
+	uint8_t	msg_discr;	/*!< message discriminator (ABIS_RSL_MDISC_*) */
+	uint8_t	msg_type;	/*!< message type (\ref abis_rsl_msgtype) */
+	uint8_t	data[0];	/*!< actual payload data */
 } __attribute__ ((packed));
 
-/* \brief RSL RLL header (Chapter 8.3) */
+/* RSL RLL header (Chapter 8.3) */
 struct abis_rsl_rll_hdr {
 	struct abis_rsl_common_hdr c;
-	uint8_t	ie_chan;	/*!< \brief \ref RSL_IE_CHAN_NR (tag) */
-	uint8_t	chan_nr;	/*!< \brief RSL channel number (value) */
-	uint8_t	ie_link_id;	/*!< \brief \ref RSL_IE_LINK_IDENT (tag) */
-	uint8_t	link_id;	/*!< \brief RSL link identifier (value) */
-	uint8_t	data[0];	/*!< \brief message payload data */
+	uint8_t	ie_chan;	/*!< \ref RSL_IE_CHAN_NR (tag) */
+	uint8_t	chan_nr;	/*!< RSL channel number (value) */
+	uint8_t	ie_link_id;	/*!< \ref RSL_IE_LINK_IDENT (tag) */
+	uint8_t	link_id;	/*!< RSL link identifier (value) */
+	uint8_t	data[0];	/*!< message payload data */
 } __attribute__ ((packed));
 
-/* \brief RSL Dedicated Channel header (Chapter 8.3 and 8.4) */
+/* RSL Dedicated Channel header (Chapter 8.3 and 8.4) */
 struct abis_rsl_dchan_hdr {
 	struct abis_rsl_common_hdr c;
-	uint8_t	ie_chan;	/*!< \brief \ref RSL_IE_CHAN_NR (tag) */
-	uint8_t	chan_nr;	/*!< \brief RSL channel number (value) */
-	uint8_t	data[0];	/*!< \brief message payload data */
+	uint8_t	ie_chan;	/*!< \ref RSL_IE_CHAN_NR (tag) */
+	uint8_t	chan_nr;	/*!< RSL channel number (value) */
+	uint8_t	data[0];	/*!< message payload data */
 } __attribute__ ((packed));
 
-/* \brief RSL Common Channel header (Chapter 8.5) */
+/* RSL Common Channel header (Chapter 8.5) */
 struct abis_rsl_cchan_hdr {
 	struct abis_rsl_common_hdr c;
-	uint8_t	ie_chan;	/*!< \brief \ref RSL_IE_CHAN_NR (tag) */
-	uint8_t	chan_nr;	/*!< \brief RSL channel number (value) */
-	uint8_t	data[0];	/*!< \brief message payload data */
+	uint8_t	ie_chan;	/*!< \ref RSL_IE_CHAN_NR (tag) */
+	uint8_t	chan_nr;	/*!< RSL channel number (value) */
+	uint8_t	data[0];	/*!< message payload data */
 } __attribute__ ((packed));
 
 
 /* Chapter 9.1 */
-/* \brief RSL Message Discriminator: RLL */
+/* RSL Message Discriminator: RLL */
 #define ABIS_RSL_MDISC_RLL		0x02
-/* \brief RSL Message Discriminator: Dedicated Channel */
+/* RSL Message Discriminator: Dedicated Channel */
 #define ABIS_RSL_MDISC_DED_CHAN		0x08
-/* \brief RSL Message Discriminator: Common Channel */
+/* RSL Message Discriminator: Common Channel */
 #define ABIS_RSL_MDISC_COM_CHAN		0x0c
-/* \brief RSL Message Discriminator: TRX Management */
+/* RSL Message Discriminator: TRX Management */
 #define ABIS_RSL_MDISC_TRX		0x10
-/* \brief RSL Message Discriminator: Location Service */
+/* RSL Message Discriminator: Location Service */
 #define ABIS_RSL_MDISC_LOC		0x20
-/* \brief RSL Message Discriminator: ip.access */
+/* RSL Message Discriminator: ip.access */
 #define ABIS_RSL_MDISC_IPACCESS		0x7e
 #define ABIS_RSL_MDISC_TRANSP		0x01
 
-/* \brief Check if given RSL message discriminator is transparent */
+/* Check if given RSL message discriminator is transparent */
 #define ABIS_RSL_MDISC_IS_TRANSP(x)	(x & 0x01)
 
-/* \brief RSL Message Type (Chapter 9.1) */
+/* RSL Message Type (Chapter 9.1) */
 enum abis_rsl_msgtype {
 	/* Radio Link Layer Management */
 	RSL_MT_DATA_REQ			= 0x01,
@@ -182,7 +182,7 @@
 	RSL_MT_IPAC_DLCX_NACK,
 };
 
-/*! \brief Siemens vendor-specific RSL message types */
+/*! Siemens vendor-specific RSL message types */
 enum abis_rsl_msgtype_siemens {
 	RSL_MT_SIEMENS_MRPCI		= 0x41,
 	RSL_MT_SIEMENS_INTRAC_HO_COND_IND = 0x42,
@@ -202,7 +202,7 @@
 	RSL_MT_SIEMENS_MODIF_COND_IND	= 0x50,
 };
 
-/*! \brief RSL Information Element Identifiers (Chapter 9.3) */
+/*! RSL Information Element Identifiers (Chapter 9.3) */
 enum abis_rsl_ie {
 	RSL_IE_CHAN_NR			= 0x01,
 	RSL_IE_LINK_IDENT,
@@ -340,7 +340,7 @@
 #define RSL_ACT_SECOND_MULTI	0x05
 #define RSL_ACT_OSMO_PDCH	0x0f	/*< non-standard, for dyn TS */
 
-/*! \brief RSL Channel Mode IF (Chapter 9.3.6) */
+/*! RSL Channel Mode IF (Chapter 9.3.6) */
 struct rsl_ie_chan_mode {
 	uint8_t dtx_dtu;
 	uint8_t spd_ind;
@@ -383,7 +383,7 @@
 #define RSL_CMOD_CSD_T_600	0x14
 #define RSL_CMOD_CSD_T_1200_75	0x15
 
-/*! \brief RSL Channel Identification IE (Chapter 9.3.5) */
+/*! RSL Channel Identification IE (Chapter 9.3.5) */
 struct rsl_ie_chan_ident {
 	/* GSM 04.08 10.5.2.5 */
 	struct {
@@ -496,7 +496,7 @@
 #define RSL_CHANNEED_TCH_F	0x02
 #define RSL_CHANNEED_TCH_ForH	0x03
 
-/*! \brief RSL Cell Broadcast Command (Chapter 9.3.45) */
+/*! RSL Cell Broadcast Command (Chapter 9.3.45) */
 struct rsl_ie_cb_cmd_type {
 	uint8_t last_block:2;
 	uint8_t spare:1;
@@ -603,7 +603,7 @@
 	RSL_REL_LOCAL_END	= 1,
 };
 
-/*! \brief ip.access specific embedded information elements */
+/*! ip.access specific embedded information elements */
 enum rsl_ipac_embedded_ie {
 	RSL_IPAC_EIE_RXLEV		= 0x00,
 	RSL_IPAC_EIE_RXQUAL		= 0x01,
diff --git a/include/osmocom/gsm/protocol/gsm_12_21.h b/include/osmocom/gsm/protocol/gsm_12_21.h
index b35da44..1bdee9c 100644
--- a/include/osmocom/gsm/protocol/gsm_12_21.h
+++ b/include/osmocom/gsm/protocol/gsm_12_21.h
@@ -32,60 +32,60 @@
 #include <stdbool.h>
 #include <osmocom/gsm/tlv.h>
 
-/*! \brief generic header in front of every OML message according to TS 08.59 */
+/*! generic header in front of every OML message according to TS 08.59 */
 struct abis_om_hdr {
-	/*! \brief Message Discriminator \ref abis_oml_mdisc */
+	/*! Message Discriminator \ref abis_oml_mdisc */
 	uint8_t	mdisc;
-	/*! \brief Placement (like \ref ABIS_OM_PLACEMENT_ONLY) */
+	/*! Placement (like \ref ABIS_OM_PLACEMENT_ONLY) */
 	uint8_t	placement;
-	/*! \brief Sequence Number (if \ref ABIS_OM_PLACEMENT_MIDDLE) */
+	/*! Sequence Number (if \ref ABIS_OM_PLACEMENT_MIDDLE) */
 	uint8_t	sequence;
-	/*! \brief Length in octets */
+	/*! Length in octets */
 	uint8_t	length;
-	/*! \brief actual payload data */
+	/*! actual payload data */
 	uint8_t	data[0];
 } __attribute__ ((packed));
 
 #define ABIS_NM_MSG_SIZE	1024
 #define ABIS_NM_MSG_HEADROOM	128
 
-/*! \brief Message Discriminator for Formatted Object Messages */
+/*! Message Discriminator for Formatted Object Messages */
 #define ABIS_OM_MDISC_FOM		0x80
-/*! \brief Message Discriminator for Man Machine Interface */
+/*! Message Discriminator for Man Machine Interface */
 #define ABIS_OM_MDISC_MMI		0x40
-/*! \brief Message Discriminator for TRAU management */
+/*! Message Discriminator for TRAU management */
 #define ABIS_OM_MDISC_TRAU		0x20
-/*! \brief Message Discriminator for Manufacturer Specific Messages */
+/*! Message Discriminator for Manufacturer Specific Messages */
 #define ABIS_OM_MDISC_MANUF		0x10
 
-/*! \brief Entire OML message is in the L2 frame */
+/*! Entire OML message is in the L2 frame */
 #define ABIS_OM_PLACEMENT_ONLY		0x80
-/*! \brief First fragment of OML message is in this L2 frame */
+/*! First fragment of OML message is in this L2 frame */
 #define ABIS_OM_PLACEMENT_FIRST 	0x40
-/*! \brief Middle fragment of OML message is in this L2 frame */
+/*! Middle fragment of OML message is in this L2 frame */
 #define ABIS_OM_PLACEMENT_MIDDLE	0x20
-/*! \brief Last fragment of OML message is in this L2 frame */
+/*! Last fragment of OML message is in this L2 frame */
 #define ABIS_OM_PLACEMENT_LAST		0x10
 
-/*! \brief OML Object Instance */
+/*! OML Object Instance */
 struct abis_om_obj_inst {
-	uint8_t	bts_nr;	/*!< \brief BTS Number */
-	uint8_t	trx_nr;	/*!< \brief TRX Number */
-	uint8_t	ts_nr;	/*!< \brief Timeslot Number */
+	uint8_t	bts_nr;	/*!< BTS Number */
+	uint8_t	trx_nr;	/*!< TRX Number */
+	uint8_t	ts_nr;	/*!< Timeslot Number */
 } __attribute__ ((packed));
 
-/*! \brief OML Object Instance */
+/*! OML Object Instance */
 struct abis_om_fom_hdr {
-	uint8_t	msg_type;	/*!< \brief Message Type (\ref abis_nm_msgtype) */
-	uint8_t	obj_class;	/*!< \brief Object Class (\ref abis_nm_obj_class) */
-	struct abis_om_obj_inst	obj_inst; /*!< \brief Object Instance */
-	uint8_t	data[0];	/*!< \brief Data */
+	uint8_t	msg_type;	/*!< Message Type (\ref abis_nm_msgtype) */
+	uint8_t	obj_class;	/*!< Object Class (\ref abis_nm_obj_class) */
+	struct abis_om_obj_inst	obj_inst; /*!< Object Instance */
+	uint8_t	data[0];	/*!< Data */
 } __attribute__ ((packed));
 
-/*! \brief Size of the OML FOM header in octets */
+/*! Size of the OML FOM header in octets */
 #define ABIS_OM_FOM_HDR_SIZE	(sizeof(struct abis_om_hdr) + sizeof(struct abis_om_fom_hdr))
 
-/*! \brief OML Message Type (Section 9.1) */
+/*! OML Message Type (Section 9.1) */
 enum abis_nm_msgtype {
 	/* SW Download Management Messages */
 	NM_MT_LOAD_INIT			= 0x01,
@@ -196,7 +196,7 @@
 	NM_MT_SET_ALARM_THRES_NACK,
 };
 
-/*! \brief Siemens specific OML Message Types */
+/*! Siemens specific OML Message Types */
 enum abis_nm_msgtype_bs11 {
 	NM_MT_BS11_RESET_RESOURCE	= 0x74,
 
@@ -232,7 +232,7 @@
 	NM_MT_BS11_RECONNECT_ACK,
 };
 
-/*! \brief ip.access specific OML Message Types */
+/*! ip.access specific OML Message Types */
 enum abis_nm_msgtype_ipacc {
 	NM_MT_IPACC_RESTART		= 0x87,
 	NM_MT_IPACC_RESTART_ACK,
@@ -260,7 +260,7 @@
 	NM_MT_IPACC_SET_ATTR_NACK,
 };
 
-/*! \brief OML Probable Cause (Section 9.4.43) Manufacturer specific values */
+/*! OML Probable Cause (Section 9.4.43) Manufacturer specific values */
 enum abis_mm_event_causes {
 	/* Critical causes */
 	OSMO_EVT_CRIT_SW_FATAL		= 0x0000,
@@ -288,7 +288,7 @@
 	NM_BS11_CANR_DCS1800	= 0x01,
 };
 
-/*! \brief OML Object Class (Section 9.2) */
+/*! OML Object Class (Section 9.2) */
 enum abis_nm_obj_class {
 	NM_OC_SITE_MANAGER		= 0x00,
 	NM_OC_BTS,
@@ -319,7 +319,7 @@
 	NM_OC_NULL			= 0xff,
 };
 
-/*! \brief OML Attributes / IEs (Section 9.4) */
+/*! OML Attributes / IEs (Section 9.4) */
 enum abis_nm_attr {
 	NM_ATT_ABIS_CHANNEL	= 0x01,
 	NM_ATT_ADD_INFO,
@@ -519,7 +519,7 @@
 };
 #define NM_ATT_BS11_FILE_DATA	NM_ATT_EVENT_TYPE
 
-/*! \brief OML Administrative State (Section 9.4.4) */
+/*! OML Administrative State (Section 9.4.4) */
 enum abis_nm_adm_state {
 	NM_STATE_LOCKED		= 0x01,
 	NM_STATE_UNLOCKED	= 0x02,
@@ -527,7 +527,7 @@
 	NM_STATE_NULL		= 0xff,
 };
 
-/*! \brief OML Availability State (Section 9.4.7) */
+/*! OML Availability State (Section 9.4.7) */
 enum abis_nm_avail_state {
 	NM_AVSTATE_IN_TEST	= 1,
 	NM_AVSTATE_POWER_OFF	= 2,
@@ -538,14 +538,14 @@
 	NM_AVSTATE_OK		= 0xff,
 };
 
-/*! \brief OML Operational State */
+/*! OML Operational State */
 enum abis_nm_op_state {
 	NM_OPSTATE_DISABLED	= 1,
 	NM_OPSTATE_ENABLED	= 2,
 	NM_OPSTATE_NULL		= 0xff,
 };
 
-/* \brief Channel Combination (Section 9.4.13) */
+/* Channel Combination (Section 9.4.13) */
 enum abis_nm_chan_comb {
 	NM_CHANC_TCHFull	= 0x00,	/* TCH/F + TCH/H + SACCH/TF */
 	NM_CHANC_TCHHalf	= 0x01, /* TCH/H(0,1) + FACCH/H(0,1) +
@@ -570,7 +570,7 @@
 	NM_CHANC_OSMO_TCHFull_TCHHalf_PDCH = 0x90,
 };
 
-/*! \brief Event Type (Section 9.4.16) */
+/*! Event Type (Section 9.4.16) */
 enum abis_nm_event_type {
 	NM_EVT_COMM_FAIL	= 0x00,
 	NM_EVT_QOS_FAIL		= 0x01,
@@ -579,7 +579,7 @@
 	NM_EVT_ENV_FAIL		= 0x04,
 };
 
-/*! \brief Perceived Severity (Section: 9.4.63) */
+/*! Perceived Severity (Section: 9.4.63) */
 enum abis_nm_severity {
 	NM_SEVER_CEASED		= 0x00,
 	NM_SEVER_CRITICAL	= 0x01,
@@ -589,7 +589,7 @@
 	NM_SEVER_INDETERMINATE	= 0x05,
 };
 
-/*! \brief Probable Cause Type (Section 9.4.43) */
+/*! Probable Cause Type (Section 9.4.43) */
 enum abis_nm_pcause_type {
 	NM_PCAUSE_T_X721	= 0x01,
 	NM_PCAUSE_T_GSM		= 0x02,
@@ -600,7 +600,7 @@
 extern const struct value_string abis_nm_msgtype_names[];
 extern const struct value_string abis_nm_att_names[];
 
-/*! \brief NACK causes (Section 9.4.36) */
+/*! NACK causes (Section 9.4.36) */
 enum abis_nm_nack_cause {
 	/* General Nack Causes */
 	NM_NACK_INCORR_STRUCT		= 0x01,
@@ -638,15 +638,15 @@
 	NM_NACK_MEAS_NOTSTART		= 0x2c,
 };
 
-/*! \brief Abis OML Channel (Section 9.4.1) */
+/*! Abis OML Channel (Section 9.4.1) */
 struct abis_nm_channel {
 	uint8_t	attrib;
-	uint8_t	bts_port;	/*!< \brief BTS port number */
-	uint8_t	timeslot;	/*!< \brief E1 timeslot */
-	uint8_t	subslot;	/*!< \brief E1 sub-slot */
+	uint8_t	bts_port;	/*!< BTS port number */
+	uint8_t	timeslot;	/*!< E1 timeslot */
+	uint8_t	subslot;	/*!< E1 sub-slot */
 } __attribute__ ((packed));
 
-/*! \brief 3GPP TS 12.21 9.4.53 T200 index */
+/*! 3GPP TS 12.21 9.4.53 T200 index */
 enum abis_nm_t200_idx {
 	T200_SDCCH		= 0,
 	T200_FACCH_F		= 1,
@@ -659,7 +659,7 @@
 
 extern const uint8_t abis_nm_t200_ms[];
 
-/*! \brief Siemens BS-11 specific objects in the SienemsHW (0xA5) object class */
+/*! Siemens BS-11 specific objects in the SienemsHW (0xA5) object class */
 enum abis_bs11_objtype {
 	BS11_OBJ_ALCO		= 0x01,
 	BS11_OBJ_BBSIG		= 0x02,	/* obj_class: 0,1 */
@@ -670,7 +670,7 @@
 	BS11_OBJ_PA		= 0x09,	/* obj_class: 0, 1*/
 };
 
-/*! \brief Siemens BS11 TRX power */
+/*! Siemens BS11 TRX power */
 enum abis_bs11_trx_power {
 	BS11_TRX_POWER_GSM_2W	= 0x06,
 	BS11_TRX_POWER_GSM_250mW= 0x07,
@@ -682,20 +682,20 @@
 	BS11_TRX_POWER_DCS_160mW= 0x0d,
 };
 
-/*! \brief Siemens BS11 PLL mode */
+/*! Siemens BS11 PLL mode */
 enum abis_bs11_li_pll_mode {
 	BS11_LI_PLL_LOCKED	= 2,
 	BS11_LI_PLL_STANDALONE	= 3,
 };
 
-/*! \brief Siemens BS11 E1 line configuration */
+/*! Siemens BS11 E1 line configuration */
 enum abis_bs11_line_cfg {
 	BS11_LINE_CFG_STAR	= 0x00,
 	BS11_LINE_CFG_MULTIDROP	= 0x01,
 	BS11_LINE_CFG_LOOP	= 0x02,
 };
 
-/*! \brief Siemens BS11 boot phase */
+/*! Siemens BS11 boot phase */
 enum abis_bs11_phase {
 	BS11_STATE_SOFTWARE_RQD		= 0x01,
 	BS11_STATE_LOAD_SMU_INTENDED	= 0x11,
@@ -712,7 +712,7 @@
 	BS11_STATE_ABIS_LOAD		= 0x13,
 };
 
-/*! \brief ip.access test number */
+/*! ip.access test number */
 enum abis_nm_ipacc_test_no {
 	NM_IPACC_TESTNO_RLOOP_ANT	= 0x01,
 	NM_IPACC_TESTNO_RLOOP_XCVR	= 0x02,
@@ -726,7 +726,7 @@
 	NM_IPACC_TESTNO_BCCCH_MONITOR	= 0x46,
 };
 
-/*! \brief first byte after length inside NM_ATT_TEST_REPORT */
+/*! first byte after length inside NM_ATT_TEST_REPORT */
 enum abis_nm_ipacc_test_res {
 	NM_IPACC_TESTRES_SUCCESS	= 0,
 	NM_IPACC_TESTRES_TIMEOUT	= 1,
@@ -735,7 +735,7 @@
 	NM_IPACC_TESTRES_STOPPED	= 4,
 };
 
-/*! \brief internal IE inside NM_ATT_TEST_REPORT */
+/*! internal IE inside NM_ATT_TEST_REPORT */
 enum abis_nm_ipacc_testres_ie {
 	NM_IPACC_TR_IE_FREQ_ERR_LIST	= 3,
 	NM_IPACC_TR_IE_CHAN_USAGE	= 4,
@@ -744,7 +744,7 @@
 	NM_IPACC_TR_IE_FREQ_ERR		= 18,
 };
 
-/*! \brief ip.access IEI */
+/*! ip.access IEI */
 enum ipac_eie {
 	NM_IPAC_EIE_ARFCN_WHITE		= 0x01,
 	NM_IPAC_EIE_ARFCH_BLACK		= 0x02,
@@ -777,7 +777,7 @@
 	NM_IPAC_EIE_BTS_ID		= 0x25,
 };
 
-/*! \brief ip.access NWL BCCH information type */
+/*! ip.access NWL BCCH information type */
 enum ipac_bcch_info_type {
 	IPAC_BINF_RXLEV			= (1 << 8),
 	IPAC_BINF_RXQUAL		= (1 << 9),
@@ -792,7 +792,7 @@
 	IPAC_BINF_CELL_ALLOC		= (1 << 2),
 };
 
-/*! \brief 3GPP TS 52.021 §9.4.62 SW Description */
+/*! 3GPP TS 52.021 §9.4.62 SW Description */
 struct abis_nm_sw_desc {
 	uint8_t file_id[UINT8_MAX];
 	uint8_t file_id_len;
diff --git a/include/osmocom/gsm/rsl.h b/include/osmocom/gsm/rsl.h
index 5da6180..93e27a1 100644
--- a/include/osmocom/gsm/rsl.h
+++ b/include/osmocom/gsm/rsl.h
@@ -17,13 +17,13 @@
 
 extern const struct tlv_definition rsl_att_tlvdef;
 
-/*! \brief Parse RSL TLV structure using \ref tlv_parse */
+/*! Parse RSL TLV structure using \ref tlv_parse */
 #define rsl_tlv_parse(dec, buf, len)     \
 			tlv_parse(dec, &rsl_att_tlvdef, buf, len, 0, 0)
 
 extern const struct tlv_definition rsl_ipac_eie_tlvdef;
 
-/*! \brief Parse RSL IPAC EIE TLV structure using \ref tlv_parse */
+/*! Parse RSL IPAC EIE TLV structure using \ref tlv_parse */
 #define rsl_ipac_eie_tlv_parse(dec, buf, len)     \
 			tlv_parse(dec, &rsl_ipac_eie_tlvdef, buf, len, 0, 0)
 
@@ -58,7 +58,7 @@
 
 extern const struct value_string rsl_act_type_names[];
 
-/*! \brief Return a human readable name for GSM 08.58 RSL_ACT_* constants. */
+/*! Return a human readable name for GSM 08.58 RSL_ACT_* constants. */
 static inline const char *rsl_act_type_name(uint8_t act_type)
 {
 	return get_value_string(rsl_act_type_names, act_type);
diff --git a/include/osmocom/gsm/tlv.h b/include/osmocom/gsm/tlv.h
index 4a9bd27..fa3b656 100644
--- a/include/osmocom/gsm/tlv.h
+++ b/include/osmocom/gsm/tlv.h
@@ -25,21 +25,21 @@
 
 */
 
-/*! \brief gross length of a LV type field */
+/*! gross length of a LV type field */
 #define LV_GROSS_LEN(x)		(x+1)
-/*! \brief gross length of a TLV type field */
+/*! gross length of a TLV type field */
 #define TLV_GROSS_LEN(x)	(x+2)
-/*! \brief gross length of a TLV16 type field */
+/*! gross length of a TLV16 type field */
 #define TLV16_GROSS_LEN(x)	((2*x)+2)
-/*! \brief gross length of a TL16V type field */
+/*! gross length of a TL16V type field */
 #define TL16V_GROSS_LEN(x)	(x+3)
-/*! \brief gross length of a L16TV type field */
+/*! gross length of a L16TV type field */
 #define L16TV_GROSS_LEN(x)	(x+3)
 
-/*! \brief maximum length of TLV of one byte length */
+/*! maximum length of TLV of one byte length */
 #define TVLV_MAX_ONEBYTE	0x7f
 
-/*! \brief gross length of a TVLV type field */
+/*! gross length of a TVLV type field */
 static inline uint16_t TVLV_GROSS_LEN(uint16_t len)
 {
 	if (len <= TVLV_MAX_ONEBYTE)
@@ -48,7 +48,7 @@
 		return TL16V_GROSS_LEN(len);
 }
 
-/*! \brief gross length of vTvL header (tag+len) */
+/*! gross length of vTvL header (tag+len) */
 static inline uint16_t VTVL_GAN_GROSS_LEN(uint16_t tag, uint16_t len)
 {
 	uint16_t ret = 2;
@@ -62,7 +62,7 @@
 	return ret;
 }
 
-/*! \brief gross length of vTvLV (tag+len+val) */
+/*! gross length of vTvLV (tag+len+val) */
 static inline uint16_t VTVLV_GAN_GROSS_LEN(uint16_t tag, uint16_t len)
 {
 	uint16_t ret;
@@ -80,7 +80,7 @@
 
 /* TLV generation */
 
-/*! \brief put (append) a LV field */
+/*! put (append) a LV field */
 static inline uint8_t *lv_put(uint8_t *buf, uint8_t len,
 				const uint8_t *val)
 {
@@ -89,7 +89,7 @@
 	return buf + len;
 }
 
-/*! \brief put (append) a TLV field */
+/*! put (append) a TLV field */
 static inline uint8_t *tlv_put(uint8_t *buf, uint8_t tag, uint8_t len,
 				const uint8_t *val)
 {
@@ -99,7 +99,7 @@
 	return buf + len;
 }
 
-/*! \brief put (append) a TLV16 field */
+/*! put (append) a TLV16 field */
 static inline uint8_t *tlv16_put(uint8_t *buf, uint8_t tag, uint8_t len,
 				const uint16_t *val)
 {
@@ -109,7 +109,7 @@
 	return buf + len*2;
 }
 
-/*! \brief put (append) a TL16V field */
+/*! put (append) a TL16V field */
 static inline uint8_t *tl16v_put(uint8_t *buf, uint8_t tag, uint16_t len,
 				const uint8_t *val)
 {
@@ -120,7 +120,7 @@
 	return buf + len*2;
 }
 
-/*! \brief put (append) a TvLV field */
+/*! put (append) a TvLV field */
 static inline uint8_t *tvlv_put(uint8_t *buf, uint8_t tag, uint16_t len,
 				 const uint8_t *val)
 {
@@ -135,7 +135,7 @@
 	return ret;
 }
 
-/*! \brief put (append) a variable-length tag or variable-length length * */
+/*! put (append) a variable-length tag or variable-length length * */
 static inline uint8_t *vt_gan_put(uint8_t *buf, uint16_t tag)
 {
 	if (tag > TVLV_MAX_ONEBYTE) {
@@ -148,7 +148,7 @@
 	return buf;
 }
 
-/* \brief put (append) vTvL (GAN) field (tag + length)*/
+/* put (append) vTvL (GAN) field (tag + length)*/
 static inline uint8_t *vtvl_gan_put(uint8_t *buf, uint16_t tag, uint16_t len)
 {
 	uint8_t *ret;
@@ -157,7 +157,7 @@
 	return vt_gan_put(ret, len);
 }
 
-/* \brief put (append) vTvLV (GAN) field (tag + length + val) */
+/* put (append) vTvLV (GAN) field (tag + length + val) */
 static inline uint8_t *vtvlv_gan_put(uint8_t *buf, uint16_t tag, uint16_t len,
 				      const uint8_t *val)
 {
@@ -171,14 +171,14 @@
 	return ret;
 }
 
-/*! \brief put (append) a TLV16 field to \ref msgb */
+/*! put (append) a TLV16 field to \ref msgb */
 static inline uint8_t *msgb_tlv16_put(struct msgb *msg, uint8_t tag, uint8_t len, const uint16_t *val)
 {
 	uint8_t *buf = msgb_put(msg, TLV16_GROSS_LEN(len));
 	return tlv16_put(buf, tag, len, val);
 }
 
-/*! \brief put (append) a TL16V field to \ref msgb */
+/*! put (append) a TL16V field to \ref msgb */
 static inline uint8_t *msgb_tl16v_put(struct msgb *msg, uint8_t tag, uint16_t len,
 					const uint8_t *val)
 {
@@ -186,7 +186,7 @@
 	return tl16v_put(buf, tag, len, val);
 }
 
-/*! \brief put (append) a TvLV field to \ref msgb */
+/*! put (append) a TvLV field to \ref msgb */
 static inline uint8_t *msgb_tvlv_put(struct msgb *msg, uint8_t tag, uint16_t len,
 				      const uint8_t *val)
 {
@@ -194,7 +194,7 @@
 	return tvlv_put(buf, tag, len, val);
 }
 
-/*! \brief put (append) a vTvLV field to \ref msgb */
+/*! put (append) a vTvLV field to \ref msgb */
 static inline uint8_t *msgb_vtvlv_gan_put(struct msgb *msg, uint16_t tag,
 					  uint16_t len, const uint8_t *val)
 {
@@ -202,7 +202,7 @@
 	return vtvlv_gan_put(buf, tag, len, val);
 }
 
-/*! \brief put (append) a L16TV field to \ref msgb */
+/*! put (append) a L16TV field to \ref msgb */
 static inline uint8_t *msgb_l16tv_put(struct msgb *msg, uint16_t len, uint8_t tag,
                                        const uint8_t *val)
 {
@@ -215,14 +215,14 @@
 	return buf + len;
 }
 
-/*! \brief put (append) a V field */
+/*! put (append) a V field */
 static inline uint8_t *v_put(uint8_t *buf, uint8_t val)
 {
 	*buf++ = val;
 	return buf;
 }
 
-/*! \brief put (append) a TV field */
+/*! put (append) a TV field */
 static inline uint8_t *tv_put(uint8_t *buf, uint8_t tag, 
 				uint8_t val)
 {
@@ -231,7 +231,7 @@
 	return buf;
 }
 
-/*! \brief put (append) a TVfixed field */
+/*! put (append) a TVfixed field */
 static inline uint8_t *tv_fixed_put(uint8_t *buf, uint8_t tag,
 				    unsigned int len, const uint8_t *val)
 {
@@ -240,7 +240,7 @@
 	return buf + len;
 }
 
-/*! \brief put (append) a TV16 field
+/*! put (append) a TV16 field
  *  \param[in,out] buf data buffer
  *  \param[in] tag Tag value
  *  \param[in] val Value (in host byte order!)
@@ -254,7 +254,7 @@
 	return buf;
 }
 
-/*! \brief put (append) a LV field to a \ref msgb
+/*! put (append) a LV field to a \ref msgb
  *  \returns pointer to first byte after newly-put information */
 static inline uint8_t *msgb_lv_put(struct msgb *msg, uint8_t len, const uint8_t *val)
 {
@@ -262,7 +262,7 @@
 	return lv_put(buf, len, val);
 }
 
-/*! \brief put (append) a TLV field to a \ref msgb
+/*! put (append) a TLV field to a \ref msgb
  *  \returns pointer to first byte after newly-put information */
 static inline uint8_t *msgb_tlv_put(struct msgb *msg, uint8_t tag, uint8_t len, const uint8_t *val)
 {
@@ -270,7 +270,7 @@
 	return tlv_put(buf, tag, len, val);
 }
 
-/*! \brief put (append) a TV field to a \ref msgb
+/*! put (append) a TV field to a \ref msgb
  *  \returns pointer to first byte after newly-put information */
 static inline uint8_t *msgb_tv_put(struct msgb *msg, uint8_t tag, uint8_t val)
 {
@@ -278,7 +278,7 @@
 	return tv_put(buf, tag, val);
 }
 
-/*! \brief put (append) a TVfixed field to a \ref msgb
+/*! put (append) a TVfixed field to a \ref msgb
  *  \returns pointer to first byte after newly-put information */
 static inline uint8_t *msgb_tv_fixed_put(struct msgb *msg, uint8_t tag,
 					unsigned int len, const uint8_t *val)
@@ -287,7 +287,7 @@
 	return tv_fixed_put(buf, tag, len, val);
 }
 
-/*! \brief put (append) a V field to a \ref msgb
+/*! put (append) a V field to a \ref msgb
  *  \returns pointer to first byte after newly-put information */
 static inline uint8_t *msgb_v_put(struct msgb *msg, uint8_t val)
 {
@@ -295,7 +295,7 @@
 	return v_put(buf, val);
 }
 
-/*! \brief put (append) a TV16 field to a \ref msgb
+/*! put (append) a TV16 field to a \ref msgb
  *  \returns pointer to first byte after newly-put information */
 static inline uint8_t *msgb_tv16_put(struct msgb *msg, uint8_t tag, uint16_t val)
 {
@@ -303,7 +303,7 @@
 	return tv16_put(buf, tag, val);
 }
 
-/*! \brief push (prepend) a TLV field to a \ref msgb
+/*! push (prepend) a TLV field to a \ref msgb
  *  \returns pointer to first byte of newly-pushed information */
 static inline uint8_t *msgb_tlv_push(struct msgb *msg, uint8_t tag, uint8_t len, const uint8_t *val)
 {
@@ -312,7 +312,7 @@
 	return buf;
 }
 
-/*! \brief push (prepend) a TV field to a \ref msgb
+/*! push (prepend) a TV field to a \ref msgb
  *  \returns pointer to first byte of newly-pushed information */
 static inline uint8_t *msgb_tv_push(struct msgb *msg, uint8_t tag, uint8_t val)
 {
@@ -321,7 +321,7 @@
 	return buf;
 }
 
-/*! \brief push (prepend) a TV16 field to a \ref msgb
+/*! push (prepend) a TV16 field to a \ref msgb
  *  \returns pointer to first byte of newly-pushed information */
 static inline uint8_t *msgb_tv16_push(struct msgb *msg, uint8_t tag, uint16_t val)
 {
@@ -330,7 +330,7 @@
 	return buf;
 }
 
-/*! \brief push (prepend) a TvLV field to a \ref msgb
+/*! push (prepend) a TvLV field to a \ref msgb
  *  \returns pointer to first byte of newly-pushed information */
 static inline uint8_t *msgb_tvlv_push(struct msgb *msg, uint8_t tag, uint16_t len,
 				      const uint8_t *val)
@@ -340,7 +340,7 @@
 	return buf;
 }
 
-/* \brief push (prepend) a vTvL header to a \ref msgb
+/* push (prepend) a vTvL header to a \ref msgb
  */
 static inline uint8_t *msgb_vtvl_gan_push(struct msgb *msg, uint16_t tag,
 					   uint16_t len)
@@ -361,37 +361,37 @@
 
 /* TLV parsing */
 
-/*! \brief Entry in a TLV parser array */
+/*! Entry in a TLV parser array */
 struct tlv_p_entry {
-	uint16_t len;		/*!< \brief length */
-	const uint8_t *val;	/*!< \brief pointer to value */
+	uint16_t len;		/*!< length */
+	const uint8_t *val;	/*!< pointer to value */
 };
 
-/*! \brief TLV type */
+/*! TLV type */
 enum tlv_type {
-	TLV_TYPE_NONE,		/*!< \brief no type */
-	TLV_TYPE_FIXED,		/*!< \brief fixed-length value-only */
-	TLV_TYPE_T,		/*!< \brief tag-only */
-	TLV_TYPE_TV,		/*!< \brief tag-value (8bit) */
-	TLV_TYPE_TLV,		/*!< \brief tag-length-value */
-	TLV_TYPE_TL16V,		/*!< \brief tag, 16 bit length, value */
-	TLV_TYPE_TvLV,		/*!< \brief tag, variable length, value */
-	TLV_TYPE_SINGLE_TV,	/*!< \brief tag and value (both 4 bit) in 1 byte */
-	TLV_TYPE_vTvLV_GAN,	/*!< \brief variable-length tag, variable-length length */
+	TLV_TYPE_NONE,		/*!< no type */
+	TLV_TYPE_FIXED,		/*!< fixed-length value-only */
+	TLV_TYPE_T,		/*!< tag-only */
+	TLV_TYPE_TV,		/*!< tag-value (8bit) */
+	TLV_TYPE_TLV,		/*!< tag-length-value */
+	TLV_TYPE_TL16V,		/*!< tag, 16 bit length, value */
+	TLV_TYPE_TvLV,		/*!< tag, variable length, value */
+	TLV_TYPE_SINGLE_TV,	/*!< tag and value (both 4 bit) in 1 byte */
+	TLV_TYPE_vTvLV_GAN,	/*!< variable-length tag, variable-length length */
 };
 
-/*! \brief Definition of a single IE (Information Element) */
+/*! Definition of a single IE (Information Element) */
 struct tlv_def {
-	enum tlv_type type;	/*!< \brief TLV type */
-	uint8_t fixed_len;	/*!< \brief length in case of \ref TLV_TYPE_FIXED */
+	enum tlv_type type;	/*!< TLV type */
+	uint8_t fixed_len;	/*!< length in case of \ref TLV_TYPE_FIXED */
 };
 
-/*! \brief Definition of All 256 IE / TLV */
+/*! Definition of All 256 IE / TLV */
 struct tlv_definition {
 	struct tlv_def def[256];
 };
 
-/*! \brief result of the TLV parser */
+/*! result of the TLV parser */
 struct tlv_parsed {
 	struct tlv_p_entry lv[256];
 };
@@ -414,7 +414,7 @@
 #define TLVP_PRES_LEN(tp, tag, min_len) \
 	(TLVP_PRESENT(tp, tag) && TLVP_LEN(tp, tag) >= min_len)
 
-/*! \brief Align given TLV element with 16 bit value to an even address
+/*! Align given TLV element with 16 bit value to an even address
  *  \param[in] tp pointer to \ref tlv_parsed
  *  \param[in] pos element to return
  *  \returns aligned 16 bit value
@@ -426,7 +426,7 @@
 	return res;
 }
 
-/*! \brief Align given TLV element with 32 bit value to an address that is a multiple of 4
+/*! Align given TLV element with 32 bit value to an address that is a multiple of 4
  *  \param[in] tp pointer to \ref tlv_parsed
  *  \param[in] pos element to return
  *  \returns aligned 32 bit value
@@ -438,7 +438,7 @@
 	return res;
 }
 
-/*! \brief Retrieve (possibly unaligned) TLV element and convert to host byte order
+/*! Retrieve (possibly unaligned) TLV element and convert to host byte order
  *  \param[in] tp pointer to \ref tlv_parsed
  *  \param[in] pos element to return
  *  \returns aligned 16 bit value in host byte order
@@ -448,7 +448,7 @@
 	return osmo_load16be(TLVP_VAL(tp, pos));
 }
 
-/*! \brief Retrieve (possibly unaligned) TLV element and convert to host byte order
+/*! Retrieve (possibly unaligned) TLV element and convert to host byte order
  *  \param[in] tp pointer to \ref tlv_parsed
  *  \param[in] pos element to return
  *  \returns aligned 32 bit value in host byte order
diff --git a/include/osmocom/sim/sim.h b/include/osmocom/sim/sim.h
index ba6fb70..eb95480 100644
--- a/include/osmocom/sim/sim.h
+++ b/include/osmocom/sim/sim.h
@@ -8,10 +8,10 @@
 
 /*!
  * \file sim.h
- * \brief Routines for helping with SIM (ISO/IEC 7816-4 more generally) communication.
+ * Routines for helping with SIM (ISO/IEC 7816-4 more generally) communication.
  */
 
-/*! \brief command-response pairs cases
+/*! command-response pairs cases
  *
  * Enumeration used to identify the APDU structure based on command-response pair case , as specified in ISO/IEC 7816-3:2006(E) §12.1.
  */
@@ -25,7 +25,7 @@
 	APDU_CASE_4E /*!< command header, command data field (extended), response data field (extended) */
 };
 
-/*! \brief APDU/TPDU command header
+/*! APDU/TPDU command header
  *
  * This structure encode an APDU/TPDU command header, as specified in ISO/IEC 7816-3:2006(E) §12.2 and §12.3.
  * The APDU (application layer) can be encoded as different TPDUs (transport layer), depending on the transport protocol used.
@@ -44,7 +44,7 @@
 
 #define msgb_apdu_dr(__x)
 
-/*! \brief APDU command body
+/*! APDU command body
  *
  * This structure encode a command body, as specified in ISO/IEC 7816-3:2006(E) §12.1.
  * The data and response contents should be provided along with this structure.
@@ -56,12 +56,12 @@
 	uint16_t sw; /*!< status word, composed of SW1 and SW2 bytes */
 } __attribute__((__may_alias__));
 #define OSIM_MSGB_CB(__msgb)	((struct osim_msgb_cb *)&((__msgb)->cb[0]))
-/*! \brief status word from msgb->cb */
+/*! status word from msgb->cb */
 #define msgb_apdu_case(__x)	OSIM_MSGB_CB(__x)->apduc
 #define msgb_apdu_lc(__x)	OSIM_MSGB_CB(__x)->lc
 #define msgb_apdu_le(__x)	OSIM_MSGB_CB(__x)->le
 #define msgb_apdu_sw(__x)	OSIM_MSGB_CB(__x)->sw
-/*! \brief pointer to the command header of the APDU */
+/*! pointer to the command header of the APDU */
 #define msgb_apdu_h(__x)	((struct osim_apdu_cmd_hdr *)(__x)->l2h)
 
 #define msgb_apdu_dc(__x)	((__x)->l2h + sizeof(struct osim_apdu_cmd_hdr))
@@ -73,7 +73,7 @@
 struct osim_file_desc;
 struct osim_decoded_data;
 
-/*! \brief Operations for a given File */
+/*! Operations for a given File */
 struct osim_file_ops {
 	/*! Parse binary file data into osim_decoded_data */
 	int (*parse)(struct osim_decoded_data *dd,
@@ -102,7 +102,7 @@
 	ELEM_REPR_HEX,
 };
 
-/*! \brief A single decoded element inside a file */
+/*! A single decoded element inside a file */
 struct osim_decoded_element {
 	struct llist_head list;
 
@@ -176,7 +176,7 @@
 	} size;
 };
 
-/*! \brief A single instance of a file: Descriptor and contents */
+/*! A single instance of a file: Descriptor and contents */
 struct osim_file {
 	/*! Descriptor for the file */
 	const struct osim_file_desc *desc;
@@ -282,7 +282,7 @@
 	.class = SW_CLS_NONE, .u.str = NULL		\
 }
 
-/*! \brief A card profile (e.g. SIM card */
+/*! A card profile (e.g. SIM card */
 struct osim_card_profile {
 	const char *name;
 	/*! Descriptor for the MF (root directory */
@@ -343,33 +343,33 @@
 };
 
 struct osim_reader_hdl {
-	/*! \brief member in global list of readers */
+	/*! member in global list of readers */
 	struct llist_head list;
 	const struct osim_reader_ops *ops;
 	uint32_t proto_supported;
 	void *priv;
-	/*! \brief current card, if any */
+	/*! current card, if any */
 	struct osim_card_hdl *card;
 };
 
 struct osim_card_hdl {
-	/*! \brief member in global list of cards */
+	/*! member in global list of cards */
 	struct llist_head list;
-	/*! \brief reader through which card is accessed */
+	/*! reader through which card is accessed */
 	struct osim_reader_hdl *reader;
-	/*! \brief card profile */
+	/*! card profile */
 	struct osim_card_profile *prof;
-	/*! \brief card protocol */
+	/*! card protocol */
 	enum osim_proto proto;
 
-	/*! \brief list of channels for this card */
+	/*! list of channels for this card */
 	struct llist_head channels;
 };
 
 struct osim_chan_hdl {
-	/*! \brief linked to card->channels */
+	/*! linked to card->channels */
 	struct llist_head list;
-	/*! \brief card to which this channel belongs */
+	/*! card to which this channel belongs */
 	struct osim_card_hdl *card;
 	const struct osim_file_desc *cwd;
 };
diff --git a/include/osmocom/vty/command.h b/include/osmocom/vty/command.h
index 62989c1..9a072d7 100644
--- a/include/osmocom/vty/command.h
+++ b/include/osmocom/vty/command.h
@@ -31,97 +31,97 @@
  */
 /*! \file command.h */
 
-/*! \brief Host configuration variable */
+/*! Host configuration variable */
 struct host {
-	/*! \brief Host name of this router. */
+	/*! Host name of this router. */
 	char *name;
 
-	/*! \brief Password for vty interface. */
+	/*! Password for vty interface. */
 	char *password;
 	char *password_encrypt;
 
-	/*! \brief Enable password */
+	/*! Enable password */
 	char *enable;
 	char *enable_encrypt;
 
-	/*! \brief System wide terminal lines. */
+	/*! System wide terminal lines. */
 	int lines;
 
-	/*! \brief Log filename. */
+	/*! Log filename. */
 	char *logfile;
 
-	/*! \brief config file name of this host */
+	/*! config file name of this host */
 	char *config;
 
-	/*! \brief Flags for services */
+	/*! Flags for services */
 	int advanced;
 	int encrypt;
 
-	/*! \brief Banner configuration. */
+	/*! Banner configuration. */
 	const char *motd;
 	char *motdfile;
 
-	/*! \brief VTY application information */
+	/*! VTY application information */
 	const struct vty_app_info *app_info;
 };
 
-/*! \brief There are some command levels which called from command node. */
+/*! There are some command levels which called from command node. */
 enum node_type {
-	AUTH_NODE,		/*!< \brief Authentication mode of vty interface. */
-	VIEW_NODE,		/*!< \brief View node. Default mode of vty interface. */
-	AUTH_ENABLE_NODE,	/*!< \brief Authentication mode for change enable. */
-	ENABLE_NODE,		/*!< \brief Enable node. */
-	CONFIG_NODE,		/*!< \brief Config node. Default mode of config file. */
-	SERVICE_NODE,		/*!< \brief Service node. */
-	DEBUG_NODE,		/*!< \brief Debug node. */
-	CFG_LOG_NODE,		/*!< \brief Configure the logging */
-	CFG_STATS_NODE,		/*!< \brief Configure the statistics */
+	AUTH_NODE,		/*!< Authentication mode of vty interface. */
+	VIEW_NODE,		/*!< View node. Default mode of vty interface. */
+	AUTH_ENABLE_NODE,	/*!< Authentication mode for change enable. */
+	ENABLE_NODE,		/*!< Enable node. */
+	CONFIG_NODE,		/*!< Config node. Default mode of config file. */
+	SERVICE_NODE,		/*!< Service node. */
+	DEBUG_NODE,		/*!< Debug node. */
+	CFG_LOG_NODE,		/*!< Configure the logging */
+	CFG_STATS_NODE,		/*!< Configure the statistics */
 
-	VTY_NODE,		/*!< \brief Vty node. */
+	VTY_NODE,		/*!< Vty node. */
 
-	L_E1INP_NODE,		/*!< \brief E1 line in libosmo-abis. */
-	L_IPA_NODE,		/*!< \brief IPA proxying commands in libosmo-abis. */
-	L_NS_NODE,		/*!< \brief NS node in libosmo-gb. */
-	L_BSSGP_NODE,		/*!< \brief BSSGP node in libosmo-gb. */
-	L_CTRL_NODE,		/*!< \brief Control interface node. */
+	L_E1INP_NODE,		/*!< E1 line in libosmo-abis. */
+	L_IPA_NODE,		/*!< IPA proxying commands in libosmo-abis. */
+	L_NS_NODE,		/*!< NS node in libosmo-gb. */
+	L_BSSGP_NODE,		/*!< BSSGP node in libosmo-gb. */
+	L_CTRL_NODE,		/*!< Control interface node. */
 
-	L_CS7_NODE,		/*!< \brief SS7 root node */
-	L_CS7_AS_NODE,		/*!< \brief SS7 Application Server */
-	L_CS7_ASP_NODE,		/*!< \brief SS7 Application Server Process */
-	L_CS7_XUA_NODE,		/*!< \brief SS7 xUA Listener */
-	L_CS7_RTABLE_NODE,	/*!< \brief SS7 Routing Table */
-	L_CS7_LINK_NODE,	/*!< \brief SS7 Link */
-	L_CS7_LINKSET_NODE,	/*!< \brief SS7 Linkset */
-	L_CS7_SCCPADDR_NODE,	/*!< \brief SS7 SCCP Address */
-	L_CS7_SCCPADDR_GT_NODE,	/*!< \brief SS7 SCCP Global Title */
+	L_CS7_NODE,		/*!< SS7 root node */
+	L_CS7_AS_NODE,		/*!< SS7 Application Server */
+	L_CS7_ASP_NODE,		/*!< SS7 Application Server Process */
+	L_CS7_XUA_NODE,		/*!< SS7 xUA Listener */
+	L_CS7_RTABLE_NODE,	/*!< SS7 Routing Table */
+	L_CS7_LINK_NODE,	/*!< SS7 Link */
+	L_CS7_LINKSET_NODE,	/*!< SS7 Linkset */
+	L_CS7_SCCPADDR_NODE,	/*!< SS7 SCCP Address */
+	L_CS7_SCCPADDR_GT_NODE,	/*!< SS7 SCCP Global Title */
 
 	/*
 	 * When adding new nodes to the libosmocore project, these nodes can be
 	 * used to avoid ABI changes for unrelated projects.
 	 */
-	RESERVED3_NODE,		/*!< \brief Reserved for later extensions */
+	RESERVED3_NODE,		/*!< Reserved for later extensions */
 
 	_LAST_OSMOVTY_NODE
 };
 
 #include "vty.h"
 
-/*! \brief Node which has some commands and prompt string and
+/*! Node which has some commands and prompt string and
  * configuration function pointer . */
 struct cmd_node {
-	/*! \brief Node index */
+	/*! Node index */
 	int node;
 
-	/*! \brief Prompt character at vty interface. */
+	/*! Prompt character at vty interface. */
 	const char *prompt;
 
-	/*! \brief Is this node's configuration goes to vtysh ? */
+	/*! Is this node's configuration goes to vtysh ? */
 	int vtysh;
 
-	/*! \brief Node's configuration write function */
+	/*! Node's configuration write function */
 	int (*func) (struct vty *);
 
-	/*! \brief Vector of this node's command list. */
+	/*! Vector of this node's command list. */
 	vector cmd_vector;
 };
 
@@ -130,26 +130,26 @@
 	CMD_ATTR_HIDDEN,
 };
 
-/*! \brief Structure of a command element */
+/*! Structure of a command element */
 struct cmd_element {
-	const char *string;	/*!< \brief Command specification by string. */
+	const char *string;	/*!< Command specification by string. */
 	int (*func) (struct cmd_element *, struct vty *, int, const char *[]);
-	const char *doc;	/*!< \brief Documentation of this command. */
-	int daemon;		/*!< \brief Daemon to which this command belong. */
-	vector strvec;		/*!< \brief Pointing out each description vector. */
-	unsigned int cmdsize;	/*!< \brief Command index count. */
-	char *config;		/*!< \brief Configuration string */
-	vector subconfig;	/*!< \brief Sub configuration string */
-	unsigned char attr;	/*!< \brief Command attributes */
+	const char *doc;	/*!< Documentation of this command. */
+	int daemon;		/*!< Daemon to which this command belong. */
+	vector strvec;		/*!< Pointing out each description vector. */
+	unsigned int cmdsize;	/*!< Command index count. */
+	char *config;		/*!< Configuration string */
+	vector subconfig;	/*!< Sub configuration string */
+	unsigned char attr;	/*!< Command attributes */
 };
 
-/*! \brief Command description structure. */
+/*! Command description structure. */
 struct desc {
-	const char *cmd;	/*!< \brief Command string. */
-	const char *str;	/*!< \brief Command's description. */
+	const char *cmd;	/*!< Command string. */
+	const char *str;	/*!< Command's description. */
 };
 
-/*! \brief Return value of the commands. */
+/*! Return value of the commands. */
 #define CMD_SUCCESS              0
 #define CMD_WARNING              1
 #define CMD_ERR_NO_MATCH         2
@@ -197,7 +197,7 @@
   static int funcname \
     (struct cmd_element *self, struct vty *vty, int argc, const char *argv[])
 
-/*! \brief Macro for defining a VTY node and function
+/*! Macro for defining a VTY node and function
  *  \param[in] funcname Name of the function implementing the node
  *  \param[in] cmdname Name of the command node
  *  \param[in] cmdstr String with syntax of node
@@ -208,7 +208,7 @@
   DEFUN_CMD_ELEMENT(funcname, cmdname, cmdstr, helpstr, 0, 0) \
   DEFUN_CMD_FUNC_TEXT(funcname)
 
-/*! \brief Macro for defining a non-static (global) VTY node and function
+/*! Macro for defining a non-static (global) VTY node and function
  *  \param[in] funcname Name of the function implementing the node
  *  \param[in] cmdname Name of the command node
  *  \param[in] cmdstr String with syntax of node
diff --git a/include/osmocom/vty/telnet_interface.h b/include/osmocom/vty/telnet_interface.h
index e939ec7..bca9156 100644
--- a/include/osmocom/vty/telnet_interface.h
+++ b/include/osmocom/vty/telnet_interface.h
@@ -31,17 +31,17 @@
 
 /*! \file telnet_interface.h */
 
-/*! \brief A telnet connection */
+/*! A telnet connection */
 struct telnet_connection {
-	/*! \brief linked list header for internal management */
+	/*! linked list header for internal management */
 	struct llist_head entry;
-	/*! \brief private data pointer passed through */
+	/*! private data pointer passed through */
 	void *priv;
-	/*! \brief filedsecriptor (socket ) */
+	/*! filedsecriptor (socket ) */
 	struct osmo_fd fd;
-	/*! \brief VTY instance associated with telnet connection */
+	/*! VTY instance associated with telnet connection */
 	struct vty *vty;
-	/*! \brief logging target associated with this telnet connection */
+	/*! logging target associated with this telnet connection */
 	struct log_target *dbg;
 };
 
diff --git a/include/osmocom/vty/vty.h b/include/osmocom/vty/vty.h
index 43cb0cf..d59f5d4 100644
--- a/include/osmocom/vty/vty.h
+++ b/include/osmocom/vty/vty.h
@@ -25,7 +25,7 @@
 #define VTY_BUFSIZ 512
 #define VTY_MAXHIST 20
 
-/*! \brief VTY events */
+/*! VTY events */
 enum event {
 	VTY_SERV,
 	VTY_READ,
@@ -48,92 +48,92 @@
 
 /*! Internal representation of a single VTY */
 struct vty {
-	/*! \brief underlying file (if any) */
+	/*! underlying file (if any) */
 	FILE *file;
 
-	/*! \brief private data, specified by creator */
+	/*! private data, specified by creator */
 	void *priv;
 
-	/*! \brief File descripter of this vty. */
+	/*! File descripter of this vty. */
 	int fd;
 
-	/*! \brief Is this vty connect to file or not */
+	/*! Is this vty connect to file or not */
 	enum vty_type type;
 
-	/*! \brief Node status of this vty */
+	/*! Node status of this vty */
 	int node;
 
-	/*! \brief Failure count */
+	/*! Failure count */
 	int fail;
 
-	/*! \brief Output buffer. */
+	/*! Output buffer. */
 	struct buffer *obuf;
 
-	/*! \brief Command input buffer */
+	/*! Command input buffer */
 	char *buf;
 
-	/*! \brief Command cursor point */
+	/*! Command cursor point */
 	int cp;
 
-	/*! \brief Command length */
+	/*! Command length */
 	int length;
 
-	/*! \brief Command max length. */
+	/*! Command max length. */
 	int max;
 
-	/*! \brief Histry of command */
+	/*! Histry of command */
 	char *hist[VTY_MAXHIST];
 
-	/*! \brief History lookup current point */
+	/*! History lookup current point */
 	int hp;
 
-	/*! \brief History insert end point */
+	/*! History insert end point */
 	int hindex;
 
-	/*! \brief For current referencing point of interface, route-map,
+	/*! For current referencing point of interface, route-map,
 	   access-list etc... */
 	void *index;
 
-	/*! \brief For multiple level index treatment such as key chain and key. */
+	/*! For multiple level index treatment such as key chain and key. */
 	void *index_sub;
 
-	/*! \brief For escape character. */
+	/*! For escape character. */
 	unsigned char escape;
 
-	/*! \brief Current vty status. */
+	/*! Current vty status. */
 	enum { VTY_NORMAL, VTY_CLOSE, VTY_MORE, VTY_MORELINE } status;
 
-	/*! \brief IAC handling
+	/*! IAC handling
 	 *
 	 * IAC handling: was the last character received the IAC
 	 * (interpret-as-command) escape character (and therefore the next
 	 * character will be the command code)?  Refer to Telnet RFC 854. */
 	unsigned char iac;
 
-	/*! \brief IAC SB (option subnegotiation) handling */
+	/*! IAC SB (option subnegotiation) handling */
 	unsigned char iac_sb_in_progress;
 	/* At the moment, we care only about the NAWS (window size) negotiation,
 	 * and that requires just a 5-character buffer (RFC 1073):
 	 * <NAWS char> <16-bit width> <16-bit height> */
 #define TELNET_NAWS_SB_LEN 5
-	/*! \brief sub-negotiation buffer */
+	/*! sub-negotiation buffer */
 	unsigned char sb_buf[TELNET_NAWS_SB_LEN];
-	/*! \brief How many subnegotiation characters have we received?  
+	/*! How many subnegotiation characters have we received?  
 	 *
 	 * We just drop those that do not fit in the buffer. */
 	size_t sb_len;
 
-	/*! \brief Window width */
+	/*! Window width */
 	int width;
-	/*! \brief Widnow height */
+	/*! Widnow height */
 	int height;
 
-	/*! \brief Configure lines. */
+	/*! Configure lines. */
 	int lines;
 
 	int monitor;
 
-	/*! \brief In configure mode. */
+	/*! In configure mode. */
 	int config;
 };
 
@@ -147,19 +147,19 @@
 
 /*! Information an application registers with the VTY */
 struct vty_app_info {
-	/*! \brief name of the application */
+	/*! name of the application */
 	const char *name;
-	/*! \brief version string of the application */
+	/*! version string of the application */
 	const char *version;
-	/*! \brief copyright string of the application */
+	/*! copyright string of the application */
 	const char *copyright;
-	/*! \brief \ref talloc context */
+	/*! \ref talloc context */
 	void *tall_ctx;
-	/*! \brief call-back for returning to parent n ode */
+	/*! call-back for returning to parent n ode */
 	int (*go_parent_cb)(struct vty *vty);
-	/*! \brief call-back to determine if node is config node */
+	/*! call-back to determine if node is config node */
 	int (*is_config_node)(struct vty *vty, int node);
-	/*! \brief Check if the config is consistent before write */
+	/*! Check if the config is consistent before write */
 	int (*config_is_consistent)(struct vty *vty);
 };
 
diff --git a/src/application.c b/src/application.c
index 8f37c93..e7c8e0f 100644
--- a/src/application.c
+++ b/src/application.c
@@ -22,7 +22,7 @@
  */
 
 /*! \file application.c
- *  \brief Routines for helping with the osmocom application setup.
+ *  Routines for helping with the osmocom application setup.
  */
 
 /*! \mainpage libosmocore Documentation
@@ -90,7 +90,7 @@
 	log_targets_reopen();
 }
 
-/*! \brief Ignore \ref SIGPIPE, \ref SIGALRM, \ref SIGHUP and \ref SIGIO */
+/*! Ignore \ref SIGPIPE, \ref SIGALRM, \ref SIGHUP and \ref SIGIO */
 void osmo_init_ignore_signals(void)
 {
 	/* Signals that by default would terminate */
@@ -106,7 +106,7 @@
 #endif
 }
 
-/*! \brief Initialize the osmocom logging framework
+/*! Initialize the osmocom logging framework
  *  \param[in] log_info Array of available logging sub-systems
  *  \returns 0 on success, -1 in case of error
  *
@@ -125,7 +125,7 @@
 	return 0;
 }
 
-/*! \brief Turn the current process into a background daemon
+/*! Turn the current process into a background daemon
  *
  * This function will fork the process, exit the parent and set umask,
  * create a new session, close stdin/stdout/stderr and chdir to /tmp
diff --git a/src/backtrace.c b/src/backtrace.c
index 6cd798c..0240a75 100644
--- a/src/backtrace.c
+++ b/src/backtrace.c
@@ -21,7 +21,7 @@
  */
 
 /*! \file backtrace.c
- *  \brief Routines realted to generating call back traces
+ *  Routines realted to generating call back traces
  */
 
 #include <stdio.h>
@@ -60,7 +60,7 @@
 	free(strings);
 }
 
-/*! \brief Generate and print a call back-trace
+/*! Generate and print a call back-trace
  *
  * This function will generate a function call back-trace of the
  * current process and print it to stdout. */
@@ -69,7 +69,7 @@
 	_osmo_backtrace(1, 0, 0);
 }
 
-/*! \brief Generate and log a call back-trace
+/*! Generate and log a call back-trace
  *  \param[in] subsys Logging sub-system
  *  \param[in] level Logging level
  *
diff --git a/src/bitcomp.c b/src/bitcomp.c
index 9c01246..acf165e 100644
--- a/src/bitcomp.c
+++ b/src/bitcomp.c
@@ -25,7 +25,7 @@
  */
 
 /*! \file bitcomp.c
- *  \brief Osmocom bit compression routines
+ *  Osmocom bit compression routines
  */
 
 #include <stdint.h>
@@ -222,7 +222,7 @@
 	 }
 };
 
-/*! \brief Make-up codes for a given length
+/*! Make-up codes for a given length
  *
  *  \return Return proper make-up code word for an uninterrupted
  *  sequence of b bits of length len according to modified ITU-T T.4
@@ -307,7 +307,7 @@
 	return bitvec_set_uint(bv, t4_term[b][len], t4_term_length[b][len]);
 }
 
-/*! \brief encode bit vector in-place using T4 encoding
+/*! encode bit vector in-place using T4 encoding
  *  Assumes MSB first encoding.
  *  \param[in] bv bit vector to be encoded
  *  \return color code (if the encoding started with 0 or 1) or -1 on
diff --git a/src/bits.c b/src/bits.c
index fe92f93..45ac8e2 100644
--- a/src/bits.c
+++ b/src/bits.c
@@ -26,13 +26,13 @@
 
 /*! \addtogroup bits
  *  @{
- *  \brief Osmocom bit level support code
+ *  Osmocom bit level support code
  */
 
 /*! \file bits.c */
 
 
-/*! \brief convert unpacked bits to packed bits, return length in bytes
+/*! convert unpacked bits to packed bits, return length in bytes
  *  \param[out] out output buffer of packed bits
  *  \param[in] in input buffer of unpacked bits
  *  \param[in] num_bits number of bits
@@ -60,7 +60,7 @@
 	return outptr - out;
 }
 
-/*! \brief Shift unaligned input to octet-aligned output
+/*! Shift unaligned input to octet-aligned output
  *  \param[out] out output buffer, unaligned
  *  \param[in] in input buffer, octet-aligned
  *  \param[in] num_nibbles number of nibbles
@@ -87,7 +87,7 @@
 		out[i] = (in[i - 1] & 0xF) << 4;
 }
 
-/*! \brief Shift unaligned input to octet-aligned output
+/*! Shift unaligned input to octet-aligned output
  *  \param[out] out output buffer, octet-aligned
  *  \param[in] in input buffer, unaligned
  *  \param[in] num_nibbles number of nibbles
@@ -108,7 +108,7 @@
 		out[i] = (in[i] & 0xF) << 4;
 }
 
-/*! \brief convert unpacked bits to soft bits
+/*! convert unpacked bits to soft bits
  *  \param[out] out output buffer of soft bits
  *  \param[in] in input buffer of unpacked bits
  *  \param[in] num_bits number of bits
@@ -120,7 +120,7 @@
 		out[i] = in[i] ? -127 : 127;
 }
 
-/*! \brief convert soft bits to unpacked bits
+/*! convert soft bits to unpacked bits
  *  \param[out] out output buffer of unpacked bits
  *  \param[in] in input buffer of soft bits
  *  \param[in] num_bits number of bits
@@ -132,7 +132,7 @@
 		out[i] = in[i] < 0;
 }
 
-/*! \brief convert packed bits to unpacked bits, return length in bytes
+/*! convert packed bits to unpacked bits, return length in bytes
  *  \param[out] out output buffer of unpacked bits
  *  \param[in] in input buffer of packed bits
  *  \param[in] num_bits number of bits
@@ -174,7 +174,7 @@
 	return cur - out;
 }
 
-/*! \brief convert unpacked bits to packed bits (extended options)
+/*! convert unpacked bits to packed bits (extended options)
  *  \param[out] out output buffer of packed bits
  *  \param[in] out_ofs offset into output buffer
  *  \param[in] in input buffer of unpacked bits
@@ -199,7 +199,7 @@
 	return ((out_ofs + num_bits - 1) >> 3) + 1;
 }
 
-/*! \brief convert packed bits to unpacked bits (extended options)
+/*! convert packed bits to unpacked bits (extended options)
  *  \param[out] out output buffer of unpacked bits
  *  \param[in] out_ofs offset into output buffer
  *  \param[in] in input buffer of packed bits
@@ -221,7 +221,7 @@
 	return out_ofs + num_bits;
 }
 
-/*! \brief generalized bit reversal function
+/*! generalized bit reversal function
  *  \param[in] x the 32bit value to be reversed
  *  \param[in] k the type of reversal requested
  *  \returns the reversed 32bit dword
@@ -242,7 +242,7 @@
 	return x;
 }
 
-/*! \brief reverse the bit-order in each byte of a dword
+/*! reverse the bit-order in each byte of a dword
  *  \param[in] x 32bit input value
  *  \returns 32bit value where bits of each byte have been reversed
  *
@@ -257,7 +257,7 @@
 	return x;
 }
 
-/*! \brief reverse the bit order in a byte
+/*! reverse the bit order in a byte
  *  \param[in] x 8bit input value
  *  \returns 8bit value where bits order has been reversed
  *
@@ -272,7 +272,7 @@
 	return x;
 }
 
-/*! \brief reverse bit-order of each byte in a buffer
+/*! reverse bit-order of each byte in a buffer
  *  \param[in] buf buffer containing bytes to be bit-reversed
  *  \param[in] len length of buffer in bytes
  *
diff --git a/src/bitvec.c b/src/bitvec.c
index 41e4f64..8ed7296 100644
--- a/src/bitvec.c
+++ b/src/bitvec.c
@@ -24,7 +24,7 @@
 
 /*! \addtogroup bitvec
  *  @{
- *  \brief Osmocom bit vector abstraction
+ *  Osmocom bit vector abstraction
  */
 
 /*! \file bitvec.c */
@@ -71,7 +71,7 @@
 	return bitval;
 }
 
-/*! \brief check if the bit is 0 or 1 for a given position inside a bitvec
+/*! check if the bit is 0 or 1 for a given position inside a bitvec
  *  \param[in] bv the bit vector on which to check
  *  \param[in] bitnr the bit number inside the bit vector to check
  *  \return value of the requested bit
@@ -93,7 +93,7 @@
 	return ZERO;
 }
 
-/*! \brief check if the bit is L or H for a given position inside a bitvec
+/*! check if the bit is L or H for a given position inside a bitvec
  *  \param[in] bv the bit vector on which to check
  *  \param[in] bitnr the bit number inside the bit vector to check
  *  \return value of the requested bit
@@ -116,7 +116,7 @@
 	return L;
 }
 
-/*! \brief get the Nth set bit inside the bit vector
+/*! get the Nth set bit inside the bit vector
  *  \param[in] bv the bit vector to use
  *  \param[in] n the bit number to get
  *  \returns the bit number (offset) of the Nth set bit in \a bv
@@ -136,7 +136,7 @@
 	return 0;
 }
 
-/*! \brief set a bit at given position in a bit vector
+/*! set a bit at given position in a bit vector
  *  \param[in] bv bit vector on which to operate
  *  \param[in] bitnr number of bit to be set
  *  \param[in] bit value to which the bit is to be set
@@ -163,7 +163,7 @@
 	return 0;
 }
 
-/*! \brief set the next bit inside a bitvec
+/*! set the next bit inside a bitvec
  *  \param[in] bv bit vector to be used
  *  \param[in] bit value of the bit to be set
  *  \returns 0 on success, negative value on error
@@ -179,7 +179,7 @@
 	return rc;
 }
 
-/*! \brief get the next bit (low/high) inside a bitvec
+/*! get the next bit (low/high) inside a bitvec
  *  \return value of th next bit in the vector */
 int bitvec_get_bit_high(struct bitvec *bv)
 {
@@ -192,7 +192,7 @@
 	return rc;
 }
 
-/*! \brief set multiple bits (based on array of bitvals) at current pos
+/*! set multiple bits (based on array of bitvals) at current pos
  *  \param[in] bv bit vector
  *  \param[in] bits array of \ref bit_value
  *  \param[in] count number of bits to set
@@ -210,7 +210,7 @@
 	return 0;
 }
 
-/*! \brief set multiple bits (based on numeric value) at current pos
+/*! set multiple bits (based on numeric value) at current pos
  *  \return 0 in case of success; negative in case of error */
 int bitvec_set_uint(struct bitvec *bv, unsigned int ui, unsigned int num_bits)
 {
@@ -228,7 +228,7 @@
 	return 0;
 }
 
-/*! \brief get multiple bits (num_bits) from beginning of vector (MSB side)
+/*! get multiple bits (num_bits) from beginning of vector (MSB side)
  *  \return 16bit signed integer retrieved from bit vector */
 int16_t bitvec_get_int16_msb(const struct bitvec *bv, unsigned int num_bits)
 {
@@ -241,7 +241,7 @@
 	return osmo_load16be(bv->data) >> (16 - num_bits);
 }
 
-/*! \brief get multiple bits (based on numeric value) from current pos
+/*! get multiple bits (based on numeric value) from current pos
  *  \return integer value retrieved from bit vector */
 int bitvec_get_uint(struct bitvec *bv, unsigned int num_bits)
 {
@@ -260,7 +260,7 @@
 	return ui;
 }
 
-/*! \brief fill num_bits with \fill starting from the current position
+/*! fill num_bits with \fill starting from the current position
  *  \return 0 on success; negative otherwise (out of vector boundary)
  */
 int bitvec_fill(struct bitvec *bv, unsigned int num_bits, enum bit_value fill)
@@ -273,7 +273,7 @@
 	return 0;
 }
 
-/*! \brief pad all remaining bits up to num_bits
+/*! pad all remaining bits up to num_bits
  *  \return 0 on success; negative otherwise */
 int bitvec_spare_padding(struct bitvec *bv, unsigned int up_to_bit)
 {
@@ -284,7 +284,7 @@
 	return bitvec_fill(bv, n, L);
 }
 
-/*! \brief find first bit set in bit vector
+/*! find first bit set in bit vector
  *  \return 0 on success; negative otherwise */
 int bitvec_find_bit_pos(const struct bitvec *bv, unsigned int n,
 			enum bit_value val)
@@ -299,7 +299,7 @@
 	return -1;
 }
 
-/*! \brief get multiple bytes from current pos
+/*! get multiple bytes from current pos
  *  Assumes MSB first encoding.
  *  \param[in] bv bit vector
  *  \param[in] bytes array
@@ -335,7 +335,7 @@
 	return 0;
 }
 
-/*! \brief set multiple bytes at current pos
+/*! set multiple bytes at current pos
  *  Assumes MSB first encoding.
  *  \param[in] bv bit vector
  *  \param[in] bytes array
@@ -375,7 +375,7 @@
 	return 0;
 }
 
-/*! \brief Allocate a bit vector
+/*! Allocate a bit vector
  *  \param[in] size Number of bits in the vector
  *  \param[in] ctx Context from which to allocate
  *  \return pointer to allocated vector; NULL in case of error */
@@ -396,7 +396,7 @@
 	return bv;
 }
 
-/*! \brief Free a bit vector (release its memory)
+/*! Free a bit vector (release its memory)
  *  \param[in] bit vector to free */
 void bitvec_free(struct bitvec *bv)
 {
@@ -404,7 +404,7 @@
 	talloc_free(bv);
 }
 
-/*! \brief Export a bit vector to a buffer
+/*! Export a bit vector to a buffer
  *  \param[in] bitvec (unpacked bits)
  *  \param[out] buffer for the unpacked bits
  *  \return number of bytes (= bits) copied */
@@ -417,7 +417,7 @@
 	return i;
 }
 
-/*! \brief Copy buffer of unpacked bits into bit vector
+/*! Copy buffer of unpacked bits into bit vector
  *  \param[in] buffer unpacked input bits
  *  \param[out] bv unpacked bit vector
  *  \return number of bytes (= bits) copied */
@@ -430,7 +430,7 @@
 	return i;
 }
 
-/*! \brief read hexadecimap string into a bit vector
+/*! read hexadecimap string into a bit vector
  *  \param[in] src string containing hex digits
  *  \param[out] bv unpacked bit vector
  *  \return 0 in case of success; 1 in case of error
@@ -451,7 +451,7 @@
 	return 0;
 }
 
-/*! \brief read part of the vector
+/*! read part of the vector
  *  \param[in] bv The boolean vector to work on
  *  \param[in,out] read_index Where reading supposed to start in the vector
  *  \param[in] len How many bits to read from vector
@@ -475,7 +475,7 @@
 	return ui;
 }
 
-/*! \brief write into the vector
+/*! write into the vector
  *  \param[in] bv The boolean vector to work on
  *  \param[in,out] write_index Where writing supposed to start in the vector
  *  \param[in] len How many bits to write
@@ -498,7 +498,7 @@
 	return 0;
 }
 
-/*! \brief convert enum to corresponding character
+/*! convert enum to corresponding character
  *  \param v input value (bit)
  *  \return single character, either 0, 1, L or H */
 char bit_value_to_char(enum bit_value v)
@@ -512,7 +512,7 @@
 	}
 }
 
-/*! \brief prints bit vector to provided string
+/*! prints bit vector to provided string
  * It's caller's responsibility to ensure that we won't shoot him in the foot:
  * the provided buffer should be at lest cur_bit + 1 bytes long
  */
@@ -551,14 +551,14 @@
 	}
 	return 7;
 }
-/*! \brief force bit vector to all 0 and current bit to the beginnig of the vector */
+/*! force bit vector to all 0 and current bit to the beginnig of the vector */
 void bitvec_zero(struct bitvec *bv)
 {
 	bv->cur_bit = 0;
 	memset(bv->data, 0, bv->data_len);
 }
 
-/*! \brief Return number (bits) of uninterrupted bit run in vector starting from the MSB
+/*! Return number (bits) of uninterrupted bit run in vector starting from the MSB
  *  \param[in] bv The boolean vector to work on
  *  \param[in] b The boolean, sequence of which is looked at from the vector start
  *  \returns Number of consecutive bits of \p b in \p bv
@@ -574,7 +574,7 @@
 	return bv->cur_bit;
 }
 
-/*! \brief Return number (bits) of uninterrupted bit run in vector
+/*! Return number (bits) of uninterrupted bit run in vector
  *   starting from the current bit
  *  \param[in] bv The boolean vector to work on
  *  \param[in] b The boolean, sequence of 1's or 0's to be checked
@@ -619,7 +619,7 @@
 	return (bv->cur_bit - readIndex + temp_res);
 }
 
-/*! \brief Shifts bitvec to the left, n MSB bits lost */
+/*! Shifts bitvec to the left, n MSB bits lost */
 void bitvec_shiftl(struct bitvec *bv, unsigned n)
 {
 	if (0 == n)
@@ -643,7 +643,7 @@
 	bv->cur_bit -= n;
 }
 
-/*! \brief Add given array to bitvec
+/*! Add given array to bitvec
  *  \param[in,out] bv bit vector to work with
  *  \param[in] array elements to be added
  *  \param[in] array_len length of array
diff --git a/src/codec/gsm610.c b/src/codec/gsm610.c
index c1eca0c..df56583 100644
--- a/src/codec/gsm610.c
+++ b/src/codec/gsm610.c
@@ -298,7 +298,7 @@
 	29,	/* LARc5:0 */
 };
 
-/*! \brief Check whether RTP frame contains FR SID code word according to
+/*! Check whether RTP frame contains FR SID code word according to
  *  TS 101 318 §5.1.2
  *  \param[in] rtp_payload Buffer with RTP payload
  *  \param[in] payload_len Length of payload
diff --git a/src/codec/gsm620.c b/src/codec/gsm620.c
index 7067239..3064748 100644
--- a/src/codec/gsm620.c
+++ b/src/codec/gsm620.c
@@ -272,7 +272,7 @@
 	return (m - 1) ^ m;
 }
 
-/*! \brief Check whether RTP frame contains HR SID code word according to
+/*! Check whether RTP frame contains HR SID code word according to
  *  TS 101 318 §5.2.2
  *  \param[in] rtp_payload Buffer with RTP payload
  *  \param[in] payload_len Length of payload
diff --git a/src/codec/gsm690.c b/src/codec/gsm690.c
index b273f0f..74655bf 100644
--- a/src/codec/gsm690.c
+++ b/src/codec/gsm690.c
@@ -235,7 +235,7 @@
 	{ 0,			NULL },
 };
 
-/*! \brief Decode various AMR parameters from RTP payload (RFC 4867) acording to
+/*! Decode various AMR parameters from RTP payload (RFC 4867) acording to
  *         3GPP TS 26.101
  *  \param[in] rtppayload Payload from RTP packet
  *  \param[in] payload_len length of rtppayload
@@ -284,7 +284,7 @@
 	return 2 + amr_len_by_ft[type];
 }
 
-/*! \brief Encode various AMR parameters from RTP payload (RFC 4867)
+/*! Encode various AMR parameters from RTP payload (RFC 4867)
  *  \param[out] payload Payload for RTP packet, contains speech data (if any)
  *              except for have 2 first bytes where header will be built
  *  \param[in] cmr AMR codec Mode Request
diff --git a/src/coding/gsm0503_coding.c b/src/coding/gsm0503_coding.c
index 1e70d2e..bb86b2c 100644
--- a/src/coding/gsm0503_coding.c
+++ b/src/coding/gsm0503_coding.c
@@ -94,7 +94,7 @@
 /*! \addtogroup coding
  *  @{
  *
- *  \brief GSM TS 05.03 coding
+ *  GSM TS 05.03 coding
  *
  *  This module is the "master module" of libosmocoding. It uses the
  *  various other modules (mapping, parity, interleaving) in order to
@@ -137,49 +137,49 @@
 /* TS 101318 Chapter 5.3: 244 bits + 4bit sig */
 #define GSM_EFR_BYTES	31
 
-/*! \brief union across the three different EGPRS Uplink header types */
+/*! union across the three different EGPRS Uplink header types */
 union gprs_rlc_ul_hdr_egprs {
 	struct gprs_rlc_ul_header_egprs_1 type1;
 	struct gprs_rlc_ul_header_egprs_2 type2;
 	struct gprs_rlc_ul_header_egprs_3 type3;
 };
 
-/*! \brief union across the three different EGPRS Downlink header types */
+/*! union across the three different EGPRS Downlink header types */
 union gprs_rlc_dl_hdr_egprs {
 	struct gprs_rlc_dl_header_egprs_1 type1;
 	struct gprs_rlc_dl_header_egprs_2 type2;
 	struct gprs_rlc_dl_header_egprs_3 type3;
 };
 
-/*! \brief Structure describing a Modulation and Coding Scheme */
+/*! Structure describing a Modulation and Coding Scheme */
 struct gsm0503_mcs_code {
-	/*! \brief Modulation and Coding Scheme (MSC) number */
+	/*! Modulation and Coding Scheme (MSC) number */
 	uint8_t mcs;
-	/*! \brief Length of Uplink Stealing Flag (USF) in bits */
+	/*! Length of Uplink Stealing Flag (USF) in bits */
 	uint8_t usf_len;
 
 	/* Header coding */
-	/*! \brief Length of header (bits) */
+	/*! Length of header (bits) */
 	uint8_t hdr_len;
-	/*! \brief Length of header convolutional code */
+	/*! Length of header convolutional code */
 	uint8_t hdr_code_len;
-	/*! \brief Length of header code puncturing sequence */
+	/*! Length of header code puncturing sequence */
 	uint8_t hdr_punc_len;
-	/*! \brief header convolutional code */
+	/*! header convolutional code */
 	const struct osmo_conv_code *hdr_conv;
-	/*! \brief header puncturing sequence */
+	/*! header puncturing sequence */
 	const uint8_t *hdr_punc;
 
 	/* Data coding */
-	/*! \brief length of data (bits) */
+	/*! length of data (bits) */
 	uint16_t data_len;
-	/*! \brief length of data convolutional code */
+	/*! length of data convolutional code */
 	uint16_t data_code_len;
-	/*! \brief length of data code puncturing sequence */
+	/*! length of data code puncturing sequence */
 	uint16_t data_punc_len;
-	/*! \brief data convolutional code */
+	/*! data convolutional code */
 	const struct osmo_conv_code *data_conv;
-	/*! \brief data puncturing sequences */
+	/*! data puncturing sequences */
 	const uint8_t *data_punc[3];
 };
 
@@ -534,7 +534,7 @@
 	},
 };
 
-/*! \brief Convolutional Decode + compute BER
+/*! Convolutional Decode + compute BER
  *  \param[in] code Description of Convolutional Code
  *  \param[in] input Input soft-bits (-127...127)
  *  \param[out] output bits
@@ -571,7 +571,7 @@
 	return res;
 }
 
-/*! \brief convenience wrapper for decoding coded bits
+/*! convenience wrapper for decoding coded bits
  *  \param[out] l2_data caller-allocated buffer for L2 Frame
  *  \param[in] cB 456 coded (soft) bits as per TS 05.03 4.1.3
  *  \param[out] n_errors Number of detected errors
@@ -596,7 +596,7 @@
 	return 0;
 }
 
-/*! \brief convenience wrapper for encoding to coded bits
+/*! convenience wrapper for encoding to coded bits
  *  \param[out] cB caller-allocated buffer for 456 coded bits as per TS 05.03 4.1.3
  *  \param[out] l2_data to-be-encoded L2 Frame
  *  \returns 0 */
@@ -617,7 +617,7 @@
  * GSM xCCH block transcoding
  */
 
-/*! \brief Decoding of xCCH data from bursts to L2 frame
+/*! Decoding of xCCH data from bursts to L2 frame
  *  \param[out] l2_data caller-allocated output data buffer
  *  \param[in] bursts four GSM bursts in soft-bits
  *  \param[out] n_errors Number of detected errors
@@ -637,7 +637,7 @@
 	return _xcch_decode_cB(l2_data, cB, n_errors, n_bits_total);
 }
 
-/*! \brief Encoding of xCCH data from L2 frame to bursts
+/*! Encoding of xCCH data from L2 frame to bursts
  *  \param[out] bursts caller-allocated burst data (unpacked bits)
  *  \param[in] l2_data L2 input data (MAC block)
  *  \returns 0
@@ -904,7 +904,7 @@
 	return OSMO_BYTES_FOR_BITS(code->hdr_len + code->data_len);
 }
 
-/*! \brief Decode EGPRS UL message
+/*! Decode EGPRS UL message
  * 	1. Header section decoding
  * 	2. Extract CPS settings
  * 	3. Burst unmapping and deinterleaving
@@ -986,7 +986,7 @@
  * GSM PDTCH block transcoding
  */
 
-/*! \brief Decode GPRS PDTCH
+/*! Decode GPRS PDTCH
  *  \param[out] l2_data caller-allocated buffer for L2 Frame
  *  \param[in] bursts burst input data as soft unpacked bits
  *  \param[out] usf_p uplink stealing flag
@@ -1303,7 +1303,7 @@
 	return egprs_get_cps(cps, type, bits);
 }
 
-/*! \brief EGPRS DL message encoding
+/*! EGPRS DL message encoding
  *  \param[out] bursts caller-allocated buffer for unpacked burst bits
  *  \param[in] l2_data L2 (MAC) block to be encoded
  *  \param[in] l2_len length of l2_data in bytes, used to determine MCS
@@ -1398,7 +1398,7 @@
 	return -1;
 }
 
-/*! \brief GPRS DL message encoding
+/*! GPRS DL message encoding
  *  \param[out] bursts caller-allocated buffer for unpacked burst bits
  *  \param[in] l2_data L2 (MAC) block to be encoded
  *  \param[in] l2_len length of l2_data in bytes, used to determine CS
@@ -1487,7 +1487,7 @@
  * GSM TCH/F FR/EFR transcoding
  */
 
-/*! \brief assemble a FR codec frame in format as used inside RTP
+/*! assemble a FR codec frame in format as used inside RTP
  *  \param[out] tch_data Codec frame in RTP format
  *  \param[in] b_bits Codec frame in 'native' format
  *  \param[in] net_order FIXME */
@@ -1772,7 +1772,7 @@
 	memcpy(d + prot, u + prot + 6, len - prot);
 }
 
-/*! \brief Perform channel decoding of a FR/EFR channel according TS 05.03
+/*! Perform channel decoding of a FR/EFR channel according TS 05.03
  *  \param[out] tch_data Codec frame in RTP payload format
  *  \param[in] bursts buffer containing the symbols of 8 bursts
  *  \param[in] net_order FIXME
@@ -1858,7 +1858,7 @@
 	return len;
 }
 
-/*! \brief Perform channel encoding on a TCH/FS channel according to TS 05.03
+/*! Perform channel encoding on a TCH/FS channel according to TS 05.03
  *  \param[out] bursts caller-allocated output buffer for bursts bits
  *  \param[in] tch_data Codec input data in RTP payload format
  *  \param[in] len Length of \a tch_data in bytes
@@ -1922,7 +1922,7 @@
 	return 0;
 }
 
-/*! \brief Perform channel decoding of a HR(v1) channel according TS 05.03
+/*! Perform channel decoding of a HR(v1) channel according TS 05.03
  *  \param[out] tch_data Codec frame in RTP payload format
  *  \param[in] bursts buffer containing the symbols of 8 bursts
  *  \param[in] odd Odd (1) or even (0) frame number
@@ -1999,7 +1999,7 @@
 	return 15;
 }
 
-/*! \brief Perform channel encoding on a TCH/HS channel according to TS 05.03
+/*! Perform channel encoding on a TCH/HS channel according to TS 05.03
  *  \param[out] bursts caller-allocated output buffer for bursts bits
  *  \param[in] tch_data Codec input data in RTP payload format
  *  \param[in] len Length of \a tch_data in bytes
@@ -2059,7 +2059,7 @@
 	return 0;
 }
 
-/*! \brief Perform channel decoding of a TCH/AFS channel according TS 05.03
+/*! Perform channel decoding of a TCH/AFS channel according TS 05.03
  *  \param[out] tch_data Codec frame in RTP payload format
  *  \param[in] bursts buffer containing the symbols of 8 bursts
  *  \param[in] codec_mode_req is this CMR (1) or CMC (0)
@@ -2265,7 +2265,7 @@
 	return len;
 }
 
-/*! \brief Perform channel encoding on a TCH/AFS channel according to TS 05.03
+/*! Perform channel encoding on a TCH/AFS channel according to TS 05.03
  *  \param[out] bursts caller-allocated output buffer for bursts bits
  *  \param[in] tch_data Codec input data in RTP payload format
  *  \param[in] len Length of \a tch_data in bytes
@@ -2435,7 +2435,7 @@
 	return -1;
 }
 
-/*! \brief Perform channel decoding of a TCH/AFS channel according TS 05.03
+/*! Perform channel decoding of a TCH/AFS channel according TS 05.03
  *  \param[out] tch_data Codec frame in RTP payload format
  *  \param[in] bursts buffer containing the symbols of 8 bursts
  *  \param[in] odd Is this an odd (1) or even (0) frame number?
@@ -2650,7 +2650,7 @@
 	return len;
 }
 
-/*! \brief Perform channel encoding on a TCH/AHS channel according to TS 05.03
+/*! Perform channel encoding on a TCH/AHS channel according to TS 05.03
  *  \param[out] bursts caller-allocated output buffer for bursts bits
  *  \param[in] tch_data Codec input data in RTP payload format
  *  \param[in] len Length of \a tch_data in bytes
@@ -2834,7 +2834,7 @@
 	return 0;
 }
 
-/*! \brief Decode the (8-bit) RACH according to TS 05.03
+/*! Decode the (8-bit) RACH according to TS 05.03
  *  \param[out] ra output buffer for RACH data
  *  \param[in] burst Input burst data
  *  \param[in] bsic BSIC used in this cell
@@ -2857,7 +2857,7 @@
 	return 0;
 }
 
-/*! \brief Encode the (8-bit) RACH according to TS 05.03
+/*! Encode the (8-bit) RACH according to TS 05.03
  *  \param[out] burst Caller-allocated output burst buffer
  *  \param[in] ra Input RACH data
  *  \param[in] bsic BSIC used in this cell
@@ -2881,7 +2881,7 @@
  * GSM SCH transcoding
  */
 
-/*! \brief Decode the SCH according to TS 05.03
+/*! Decode the SCH according to TS 05.03
  *  \param[out] sb_info output buffer for SCH data
  *  \param[in] burst Input burst data
  *  \returns 0 on success; negative on error (e.g. CRC error) */
@@ -2901,7 +2901,7 @@
 	return 0;
 }
 
-/*! \brief Encode the SCH according to TS 05.03
+/*! Encode the SCH according to TS 05.03
  *  \param[out] burst Caller-allocated output burst buffer
  *  \param[in] sb_info Input SCH data
  *  \returns 0 on success; negative on error */
diff --git a/src/coding/gsm0503_interleaving.c b/src/coding/gsm0503_interleaving.c
index cd47cff..19e6847 100644
--- a/src/coding/gsm0503_interleaving.c
+++ b/src/coding/gsm0503_interleaving.c
@@ -29,7 +29,7 @@
 
 /*! \addtogroup interleaving
  *  @{
- *  \brief GSM TS 05.03 interleaving
+ *  GSM TS 05.03 interleaving
  *
  *  This module contains interleaving / de-interleaving routines for
  *  various channel types, as defined in 3GPP TS 05.03 / 45.003
@@ -59,7 +59,7 @@
  * Where hl(B) and hn(B) are bits in burst B indicating flags.
  */
 
-/*! \brief De-Interleave burst bits according to TS 05.03 4.1.4
+/*! De-Interleave burst bits according to TS 05.03 4.1.4
  *  \param[out] cB caller-allocated output buffer for 456 soft coded bits
  *  \param[in] iB 456 soft input bits */
 void gsm0503_xcch_deinterleave(sbit_t *cB, const sbit_t *iB)
@@ -73,7 +73,7 @@
 	}
 }
 
-/*! \brief Interleave burst bits according to TS 05.03 4.1.4
+/*! Interleave burst bits according to TS 05.03 4.1.4
  *  \param[out] iB caller-allocated output buffer for 456 soft interleaved bits
  *  \param[in] cB 456 soft input coded bits */
 void gsm0503_xcch_interleave(const ubit_t *cB, ubit_t *iB)
@@ -87,7 +87,7 @@
 	}
 }
 
-/*! \brief De-Interleave MCS1 DL burst bits according to TS 05.03 5.1.5.1.5
+/*! De-Interleave MCS1 DL burst bits according to TS 05.03 5.1.5.1.5
  *  \param[out] u caller-allocated output buffer for 12 soft coded bits
  *  \param[out] hc caller-allocated output buffer for 68 soft coded bits
  *  \param[out] dc caller-allocated output buffer for 372 soft coded bits
@@ -128,7 +128,7 @@
 	}
 }
 
-/*! \brief Interleave MCS1 DL burst bits according to TS 05.03 5.1.5.1.5
+/*! Interleave MCS1 DL burst bits according to TS 05.03 5.1.5.1.5
  *  \param[in] up 12 input soft coded bits (usf)
  *  \param[in] hc 68 input soft coded bits (header)
  *  \param[in] dc 372 input soft bits (data)
@@ -166,7 +166,7 @@
 	gsm0503_xcch_interleave(cp, iB);
 }
 
-/*! \brief Interleave MCS1 UL burst bits according to TS 05.03 5.1.5.2.4
+/*! Interleave MCS1 UL burst bits according to TS 05.03 5.1.5.2.4
  *  \param[out] hc caller-allocated output buffer for 80 soft coded header bits
  *  \param[out] dc caller-allocated output buffer for 372 soft coded data bits
  *  \param[in] iB 456 interleaved soft input bits */
@@ -200,7 +200,7 @@
 	}
 }
 
-/*! \brief Interleave MCS1 DL burst bits according to TS 05.03 5.1.5.2.4
+/*! Interleave MCS1 DL burst bits according to TS 05.03 5.1.5.2.4
  *  \param[in] hc 80 input coded bits (header)
  *  \param[in] dc 372 input bits (data)
  *  \param[out] iB 456 interleaved output bits */
@@ -234,7 +234,7 @@
 	gsm0503_xcch_interleave(cp, iB);
 }
 
-/*! \brief Interleave MCS5 UL burst bits according to TS 05.03 5.1.9.2.4
+/*! Interleave MCS5 UL burst bits according to TS 05.03 5.1.9.2.4
  *  \param[in] hc 136 soft coded header input bits
  *  \param[in] dc 1248 soft coded data input bits
  *  \param[out] hi 136 interleaved header output bits
@@ -257,7 +257,7 @@
 	}
 }
 
-/*! \brief De-Interleave MCS5 UL burst bits according to TS 05.03 5.1.9.2.4
+/*! De-Interleave MCS5 UL burst bits according to TS 05.03 5.1.9.2.4
  *  \param[out] hc caller-allocated output buffer for 136 soft coded header bits
  *  \param[out] dc caller-allocated output buffer for 1248 soft coded data bits
  *  \param[in] iB interleaved soft input bits */
@@ -283,7 +283,7 @@
 	}
 }
 
-/*! \brief Interleave MCS5 DL burst bits according to TS 05.03 5.1.9.1.5
+/*! Interleave MCS5 DL burst bits according to TS 05.03 5.1.9.1.5
  *  \param[in] hc 100 soft coded header input bits
  *  \param[in] dc 1248 soft coded data input bits
  *  \param[out] hi 100 interleaved header output bits
@@ -306,7 +306,7 @@
 	}
 }
 
-/*! \brief De-Interleave MCS5 UL burst bits according to TS 05.03 5.1.9.1.5
+/*! De-Interleave MCS5 UL burst bits according to TS 05.03 5.1.9.1.5
  *  \param[out] hc caller-allocated output buffer for 100 soft coded header bits
  *  \param[out] dc caller-allocated output buffer for 1248 soft coded data bits
  *  \param[in] iB interleaved soft input bits */
@@ -332,7 +332,7 @@
 	}
 }
 
-/*! \brief Interleave MCS7 DL burst bits according to TS 05.03 5.1.11.1.5
+/*! Interleave MCS7 DL burst bits according to TS 05.03 5.1.11.1.5
  *  \param[in] hc 124 soft coded header input bits
  *  \param[in] c1 612 soft coded data input bits
  *  \param[in] c2 612 soft coded data input bits
@@ -361,7 +361,7 @@
 	}
 }
 
-/*! \brief De-Interleave MCS7 DL burst bits according to TS 05.03 5.1.11.1.5
+/*! De-Interleave MCS7 DL burst bits according to TS 05.03 5.1.11.1.5
  *  \param[out] hc caller-allocated output buffer for 124 soft coded header bits
  *  \param[out] c1 caller-allocated output buffer for 612 soft coded data bits
  *  \param[out] c2 caller-allocated output buffer for 612 soft coded data bits
@@ -394,7 +394,7 @@
 	}
 }
 
-/*! \brief Interleave MCS7 UL burst bits according to TS 05.03 5.1.11.2.4
+/*! Interleave MCS7 UL burst bits according to TS 05.03 5.1.11.2.4
  *  \param[in] hc 124 soft coded header input bits
  *  \param[in] c1 612 soft coded data input bits
  *  \param[in] c2 612 soft coded data input bits
@@ -423,7 +423,7 @@
 	}
 }
 
-/*! \brief De-Interleave MCS7 UL burst bits according to TS 05.03 5.1.11.2.4
+/*! De-Interleave MCS7 UL burst bits according to TS 05.03 5.1.11.2.4
  *  \param[out] hc caller-allocated output buffer for 160 soft coded header bits
  *  \param[out] c1 caller-allocated output buffer for 612 soft coded data bits
  *  \param[out] c2 caller-allocated output buffer for 612 soft coded data bits
@@ -456,7 +456,7 @@
 	}
 }
 
-/*! \brief Interleave MCS8 UL burst bits according to TS 05.03 5.1.12.2.4
+/*! Interleave MCS8 UL burst bits according to TS 05.03 5.1.12.2.4
  *  \param[in] hc 160 soft coded header input bits
  *  \param[in] c1 612 soft coded data input bits
  *  \param[in] c2 612 soft coded data input bits
@@ -486,7 +486,7 @@
 }
 
 
-/*! \brief De-Interleave MCS8 UL burst bits according to TS 05.03 5.1.12.2.4
+/*! De-Interleave MCS8 UL burst bits according to TS 05.03 5.1.12.2.4
  *  \param[out] hc caller-allocated output buffer for 160 soft coded header bits
  *  \param[out] c1 caller-allocated output buffer for 612 soft coded data bits
  *  \param[out] c2 caller-allocated output buffer for 612 soft coded data bits
@@ -519,7 +519,7 @@
 	}
 }
 
-/*! \brief Interleave MCS8 DL burst bits according to TS 05.03 5.1.12.1.5
+/*! Interleave MCS8 DL burst bits according to TS 05.03 5.1.12.1.5
  *  \param[in] hc 124 soft coded header input bits
  *  \param[in] c1 612 soft coded data input bits
  *  \param[in] c2 612 soft coded data input bits
@@ -548,7 +548,7 @@
 	}
 }
 
-/*! \brief De-Interleave MCS8 DL burst bits according to TS 05.03 5.1.12.1.5
+/*! De-Interleave MCS8 DL burst bits according to TS 05.03 5.1.12.1.5
  *  \param[out] hc caller-allocated output buffer for 124 soft coded header bits
  *  \param[out] c1 caller-allocated output buffer for 612 soft coded data bits
  *  \param[out] c2 caller-allocated output buffer for 612 soft coded data bits
@@ -605,7 +605,7 @@
  * Where hl(B) and hn(B) are bits in burst B indicating flags.
  */
 
-/*! \brief GSM TCH FR/EFR/AFS De-Interleaving and burst mapping
+/*! GSM TCH FR/EFR/AFS De-Interleaving and burst mapping
  *  \param[out] cB caller-allocated buffer for 456 unpacked output bits
  *  \param[in] iB 456 unpacked interleaved input bits */
 void gsm0503_tch_fr_deinterleave(sbit_t *cB, const sbit_t *iB)
@@ -619,7 +619,7 @@
 	}
 }
 
-/*! \brief GSM TCH FR/EFR/AFS Interleaving and burst mapping
+/*! GSM TCH FR/EFR/AFS Interleaving and burst mapping
  *  \param[in] cB caller-allocated buffer for 456 unpacked input bits
  *  \param[out] iB 456 unpacked interleaved output bits */
 void gsm0503_tch_fr_interleave(const ubit_t *cB, ubit_t *iB)
@@ -657,7 +657,7 @@
  * Where hl(B) and hn(B) are bits in burst B indicating flags.
  */
 
-/*! \brief GSM TCH HR/AHS De-Interleaving and burst mapping
+/*! GSM TCH HR/AHS De-Interleaving and burst mapping
  *  \param[out] cB caller-allocated buffer for 228 unpacked output bits
  *  \param[in] iB 228 unpacked interleaved input bits */
 void gsm0503_tch_hr_deinterleave(sbit_t *cB, const sbit_t *iB)
@@ -671,7 +671,7 @@
 	}
 }
 
-/*! \brief GSM TCH HR/AHS Interleaving and burst mapping
+/*! GSM TCH HR/AHS Interleaving and burst mapping
  *  \param[in] cB caller-allocated buffer for 228 unpacked input bits
  *  \param[out] iB 228 unpacked interleaved output bits */
 void gsm0503_tch_hr_interleave(const ubit_t *cB, ubit_t *iB)
diff --git a/src/coding/gsm0503_mapping.c b/src/coding/gsm0503_mapping.c
index 82c049c..15fd1b6 100644
--- a/src/coding/gsm0503_mapping.c
+++ b/src/coding/gsm0503_mapping.c
@@ -28,7 +28,7 @@
 /*! \addtogroup mapping
  *  @{
  *
- *  \brief GSM TS 05.03 burst mapping
+ *  GSM TS 05.03 burst mapping
  *
  *  This module contains burst mapping routines as specified in 3GPP TS
  *  05.03 / 45.003.
diff --git a/src/coding/gsm0503_parity.c b/src/coding/gsm0503_parity.c
index 171feb4..cc81702 100644
--- a/src/coding/gsm0503_parity.c
+++ b/src/coding/gsm0503_parity.c
@@ -27,7 +27,7 @@
 /*! \addtogroup parity
  *  @{
  *
- *  \brief GSM TS 05.03 parity
+ *  GSM TS 05.03 parity
  *
  *  This module contains parity/crc code definitions for the various
  *  parity/crc schemes as defined in 3GPP TS 05.03 / 45.003
@@ -35,7 +35,7 @@
 
 /*! \file gsm0503_parity.c */
 
-/*! \brief GSM (SACCH) parity (FIRE code)
+/*! GSM (SACCH) parity (FIRE code)
  *
  * g(x) = (x^23 + 1)(x^17 + x^3 + 1)
  *      = x^40 + x^26 + x^23 + x^17 + x^3 + a1
@@ -47,7 +47,7 @@
 	.remainder = 0xffffffffffULL,
 };
 
-/*! \brief GSM PDTCH CS-2, CS-3, CS-4 parity
+/*! GSM PDTCH CS-2, CS-3, CS-4 parity
  *
  * g(x) = x^16 + x^12 + x^5 + 1
  */
@@ -58,7 +58,7 @@
 	.remainder = 0xffff,
 };
 
-/*! \brief EDGE MCS header parity
+/*! EDGE MCS header parity
  *
  */
 const struct osmo_crc8gen_code gsm0503_mcs_crc8_hdr = {
@@ -68,7 +68,7 @@
 	.remainder = 0xff,
 };
 
-/*! \brief EDGE MCS data parity
+/*! EDGE MCS data parity
  *
  */
 const struct osmo_crc16gen_code gsm0503_mcs_crc12 = {
@@ -78,7 +78,7 @@
 	.remainder = 0x0fff,
 };
 
-/*! \brief GSM RACH parity
+/*! GSM RACH parity
  *
  * g(x) = x^6 + x^5 + x^3 + x^2 + x^1 + 1
  */
@@ -89,7 +89,7 @@
 	.remainder = 0x3f,
 };
 
-/*! \brief GSM SCH parity
+/*! GSM SCH parity
  *
  * g(x) = x^10 + x^8 + x^6 + x^5 + x^4 + x^2 + 1
  */
@@ -100,7 +100,7 @@
 	.remainder = 0x3ff,
 };
 
-/*! \brief GSM TCH FR/HR/EFR parity
+/*! GSM TCH FR/HR/EFR parity
  *
  * g(x) = x^3 + x + 1
  */
@@ -111,7 +111,7 @@
 	.remainder = 0x7,
 };
 
-/*! \brief GSM TCH EFR parity
+/*! GSM TCH EFR parity
  *
  * g(x) = x^8 + x^4 + x^3 + x^2 + 1
  */
@@ -122,7 +122,7 @@
 	.remainder = 0x00,
 };
 
-/*! \brief GSM AMR parity
+/*! GSM AMR parity
  *
  * g(x) = x^6 + x^5 + x^3 + x^2 + x^1 + 1
  */
diff --git a/src/coding/gsm0503_tables.c b/src/coding/gsm0503_tables.c
index 1c85765..32d12ea 100644
--- a/src/coding/gsm0503_tables.c
+++ b/src/coding/gsm0503_tables.c
@@ -27,7 +27,7 @@
 /*! \addtogroup tables
  *  @{
  *
- *  \brief GSM TS 05.03 tables
+ *  GSM TS 05.03 tables
  *
  *  This module contains various tables defining parts of 3GPP TS 05.03
  *  / 45.003, primarily for the purpose of (de)puncturing, interleaving,
diff --git a/src/conv.c b/src/conv.c
index b81e37e..38ce173 100644
--- a/src/conv.c
+++ b/src/conv.c
@@ -24,7 +24,7 @@
 
 /*! \addtogroup conv
  *  @{
- *  \brief Osmocom convolutional encoder and decoder
+ *  Osmocom convolutional encoder and decoder
  */
 
 /*! \file conv.c */
@@ -78,7 +78,7 @@
 /* Encoding                                                                 */
 /* ------------------------------------------------------------------------ */
 
-/*! \brief Initialize a convolutional encoder
+/*! Initialize a convolutional encoder
  *  \param[in,out] encoder Encoder state to initialize
  *  \param[in] code Description of convolutional code
  */
@@ -198,7 +198,7 @@
 	return o_idx;
 }
 
-/*! \brief All-in-one convolutional encoding function
+/*! All-in-one convolutional encoding function
  *  \param[in] code description of convolutional code to be used
  *  \param[in] input array of unpacked bits (uncoded)
  *  \param[out] output array of unpacked bits (encoded)
@@ -593,7 +593,7 @@
 	return min_ae;
 }
 
-/*! \brief All-in-one convolutional decoding function
+/*! All-in-one convolutional decoding function
  *  \param[in] code description of convolutional code to be used
  *  \param[in] input array of soft bits (coded)
  *  \param[out] output array of unpacked bits (decoded)
diff --git a/src/crc16.c b/src/crc16.c
index accb0b4..7d523b6 100644
--- a/src/crc16.c
+++ b/src/crc16.c
@@ -10,7 +10,7 @@
 
 #include <osmocom/core/crc16.h>
 
-/*! \brief CRC table for the CRC-16. The poly is 0x8005 (x^16 + x^15 + x^2 + 1) */
+/*! CRC table for the CRC-16. The poly is 0x8005 (x^16 + x^15 + x^2 + 1) */
 uint16_t const osmo_crc16_table[256] = {
 	0x0000, 0xC0C1, 0xC181, 0x0140, 0xC301, 0x03C0, 0x0280, 0xC241,
 	0xC601, 0x06C0, 0x0780, 0xC741, 0x0500, 0xC5C1, 0xC481, 0x0440,
@@ -46,7 +46,7 @@
 	0x8201, 0x42C0, 0x4380, 0x8341, 0x4100, 0x81C1, 0x8081, 0x4040
 };
 
-/*! \brief compute the CRC-16 for the data buffer
+/*! compute the CRC-16 for the data buffer
  *  \param crc[in] previous CRC value
  *  \param buffer[in] data pointer
  *  \param len[in] number of bytes in input \ref buffer
diff --git a/src/crcXXgen.c.tpl b/src/crcXXgen.c.tpl
index 1a69e85..9c63052 100644
--- a/src/crcXXgen.c.tpl
+++ b/src/crcXXgen.c.tpl
@@ -24,7 +24,7 @@
 
 /*! \addtogroup crcgen
  *  @{
- *  \brief Osmocom generic CRC routines
+ *  Osmocom generic CRC routines
  */
 
 /*! \file crcXXgen.c
@@ -37,7 +37,7 @@
 #include <osmocom/core/crcXXgen.h>
 
 
-/*! \brief Compute the CRC value of a given array of hard-bits
+/*! Compute the CRC value of a given array of hard-bits
  *  \param[in] code The CRC code description to apply
  *  \param[in] in Array of hard bits
  *  \param[in] len Length of the array of hard bits
@@ -69,7 +69,7 @@
 }
 
 
-/*! \brief Checks the CRC value of a given array of hard-bits
+/*! Checks the CRC value of a given array of hard-bits
  *  \param[in] code The CRC code description to apply
  *  \param[in] in Array of hard bits
  *  \param[in] len Length of the array of hard bits
@@ -95,7 +95,7 @@
 }
 
 
-/*! \brief Computes and writes the CRC value of a given array of bits
+/*! Computes and writes the CRC value of a given array of bits
  *  \param[in] code The CRC code description to apply
  *  \param[in] in Array of hard bits
  *  \param[in] len Length of the array of hard bits
diff --git a/src/ctrl/control_if.c b/src/ctrl/control_if.c
index 5a84f7c0..5d04cdf 100644
--- a/src/ctrl/control_if.c
+++ b/src/ctrl/control_if.c
@@ -126,7 +126,7 @@
 	return ret;
 }
 
-/*! \brief Send TRAP over given Control Interface
+/*! Send TRAP over given Control Interface
  *  \param[in] ctrl Control Interface over which TRAP will be sent
  *  \param[in] name Name of the TRAP variable
  *  \param[in] value Value of the TRAP variable
@@ -401,7 +401,7 @@
 	return rc;
 }
 
-/*! \brief Allocate CTRL connection
+/*! Allocate CTRL connection
  *  \param[in] ctx Context from which talloc should allocate it
  *  \param[in] data caller's private data parameter which should assigned to
                write queue's file descriptor data parameter.
@@ -729,7 +729,7 @@
 	return -1;
 }
 
-/*! \brief Allocate a CTRL interface handle
+/*! Allocate a CTRL interface handle
  *  \param[in] ctx Tallo callocation context to be used
  *  \param[in] data Pointer which will be made available to each
                set_..() get_..() verify_..() control command function
@@ -754,7 +754,7 @@
 	return ctrl;
 }
 
-/*! \brief Setup CTRL interface on a given address
+/*! Setup CTRL interface on a given address
  *  \param[in] data Pointer which will be made available to each
                set_..() get_..() verify_..() control command function
  *  \param[in] bind_addr Address on which CTRL socket shall listen
@@ -788,7 +788,7 @@
 	return ctrl;
 }
 
-/*! \brief Install a lookup helper function for control nodes
+/*! Install a lookup helper function for control nodes
  *  This function is used by e.g. library code to install lookup helpers
  *  for additional nodes in the control interface.
  *  \param[in] lookup The lookup helper function
@@ -813,7 +813,7 @@
 	return 0;
 }
 
-/*! \brief Helper for "local execution" of a CTRL command from a string
+/*! Helper for "local execution" of a CTRL command from a string
  *  The function will parse + execute the given control command string
  *  and return a corresponding ctrl_cmd.  Caller is responsible to
  *  talloc_free() the return value.
diff --git a/src/ctrl/fsm_ctrl_commands.c b/src/ctrl/fsm_ctrl_commands.c
index 95d5fca..6c3ecde 100644
--- a/src/ctrl/fsm_ctrl_commands.c
+++ b/src/ctrl/fsm_ctrl_commands.c
@@ -6,7 +6,7 @@
 #include <osmocom/ctrl/control_cmd.h>
 #include <osmocom/ctrl/control_if.h>
 
-/*! \brief control interface lookup function for FSM's
+/*! control interface lookup function for FSM's
  * \param[in] data Private data passed to controlif_setup()
  * \param[in] vline Vector of the line holding the command string
  * \param[out] node_type type (CTRL_NODE_) that was determined
diff --git a/src/fsm.c b/src/fsm.c
index 16f5d65..27389a7 100644
--- a/src/fsm.c
+++ b/src/fsm.c
@@ -30,7 +30,7 @@
 
 /*! \addtogroup fsm
  *  @{
- *  \brief Finite State Machine abstraction
+ *  Finite State Machine abstraction
  *
  *  This is a generic C-language abstraction for implementing finite
  *  state machines within the Osmocom framework.  It is intended to
@@ -89,7 +89,7 @@
 LLIST_HEAD(osmo_g_fsms);
 static bool fsm_log_addr = true;
 
-/*! \brief specify if FSM instance addresses should be logged or not
+/*! specify if FSM instance addresses should be logged or not
  *
  *  By default, the FSM name includes the pointer address of the \ref
  *  osmo_fsm_inst.  This behavior can be disabled (and re-enabled)
@@ -136,7 +136,7 @@
 	return NULL;
 }
 
-/*! \brief register a FSM with the core
+/*! register a FSM with the core
  *
  *  A FSM descriptor needs to be registered with the core before any
  *  instances can be created for it.
@@ -154,7 +154,7 @@
 	return 0;
 }
 
-/*! \brief unregister a FSM from the core
+/*! unregister a FSM from the core
  *
  *  Once the FSM descriptor is unregistered, active instances can still
  *  use it, but no new instances may be created for it.
@@ -190,7 +190,7 @@
 	osmo_fsm_inst_term(fi, OSMO_FSM_TERM_TIMEOUT, &T);
 }
 
-/*! \brief allocate a new instance of a specified FSM
+/*! allocate a new instance of a specified FSM
  *  \param[in] fsm Descriptor of the FSM
  *  \param[in] ctx talloc context from which to allocate memory
  *  \param[in] priv private data reference store in fsm instance
@@ -231,7 +231,7 @@
 	return fi;
 }
 
-/*! \brief allocate a new instance of a specified FSM as child of
+/*! allocate a new instance of a specified FSM as child of
  *  other FSM instance
  *
  *  This is like \ref osmo_fsm_inst_alloc but using the parent FSM as
@@ -265,7 +265,7 @@
 	return fi;
 }
 
-/*! \brief delete a given instance of a FSM
+/*! delete a given instance of a FSM
  *  \param[in] fsm The FSM to be un-registered and deleted
  */
 void osmo_fsm_inst_free(struct osmo_fsm_inst *fi)
@@ -276,7 +276,7 @@
 	talloc_free(fi);
 }
 
-/*! \brief get human-readable name of FSM event
+/*! get human-readable name of FSM event
  *  \param[in] fsm FSM descriptor of event
  *  \param[in] event Event integer value
  *  \returns string rendering of the event
@@ -291,7 +291,7 @@
 		return get_value_string(fsm->event_names, event);
 }
 
-/*! \brief get human-readable name of FSM instance
+/*! get human-readable name of FSM instance
  *  \param[in] fi FSM instance
  *  \returns string rendering of the FSM identity
  */
@@ -306,7 +306,7 @@
 		return fi->fsm->name;
 }
 
-/*! \brief get human-readable name of FSM instance
+/*! get human-readable name of FSM instance
  *  \param[in] fsm FSM descriptor
  *  \param[in] state FSM state number
  *  \returns string rendering of the FSM state
@@ -321,7 +321,7 @@
 		return fsm->states[state].name;
 }
 
-/*! \brief perform a state change of the given FSM instance
+/*! perform a state change of the given FSM instance
  *
  *  Best invoke via the osmo_fsm_inst_state_chg() macro which logs the source
  *  file where the state change was effected. Alternatively, you may pass \a
@@ -384,7 +384,7 @@
 	return 0;
 }
 
-/*! \brief dispatch an event to an osmocom finite state machine instance
+/*! dispatch an event to an osmocom finite state machine instance
  *
  *  Best invoke via the osmo_fsm_inst_dispatch() macro which logs the source
  *  file where the event was effected. Alternatively, you may pass \a file as
@@ -438,7 +438,7 @@
 	return 0;
 }
 
-/*! \brief Terminate FSM instance with given cause
+/*! Terminate FSM instance with given cause
  *
  *  This safely terminates the given FSM instance by first iterating
  *  over all children and sending them a termination event.  Next, it
@@ -489,7 +489,7 @@
 					file, line);
 }
 
-/*! \brief Terminate all child FSM instances of an FSM instance.
+/*! Terminate all child FSM instances of an FSM instance.
  *
  *  Iterate over all children and send them a termination event, with the given
  *  cause. Pass OSMO_FSM_TERM_PARENT to avoid dispatching events from the
diff --git a/src/gb/gprs_bssgp_bss.c b/src/gb/gprs_bssgp_bss.c
index 93af98f..f41c4a4 100644
--- a/src/gb/gprs_bssgp_bss.c
+++ b/src/gb/gprs_bssgp_bss.c
@@ -41,7 +41,7 @@
 	return msgb_tvlv_put(msg, BSSGP_IE_TLLI, 4, (uint8_t *) &_tlli);
 }
 
-/*! \brief GMM-SUSPEND.req (Chapter 10.3.6) */
+/*! GMM-SUSPEND.req (Chapter 10.3.6) */
 int bssgp_tx_suspend(uint16_t nsei, uint32_t tlli,
 		     const struct gprs_ra_id *ra_id)
 {
@@ -64,7 +64,7 @@
 	return gprs_ns_sendmsg(bssgp_nsi, msg);
 }
 
-/*! \brief GMM-RESUME.req (Chapter 10.3.9) */
+/*! GMM-RESUME.req (Chapter 10.3.9) */
 int bssgp_tx_resume(uint16_t nsei, uint32_t tlli,
 		    const struct gprs_ra_id *ra_id, uint8_t suspend_ref)
 {
@@ -89,7 +89,7 @@
 	return gprs_ns_sendmsg(bssgp_nsi, msg);
 }
 
-/*! \brief Transmit RA-CAPABILITY-UPDATE (10.3.3) */
+/*! Transmit RA-CAPABILITY-UPDATE (10.3.3) */
 int bssgp_tx_ra_capa_upd(struct bssgp_bvc_ctx *bctx, uint32_t tlli, uint8_t tag)
 {
 	struct msgb *msg = bssgp_msgb_alloc();
@@ -139,7 +139,7 @@
 	return gprs_ns_sendmsg(bssgp_nsi, msg);
 }
 
-/*! \brief Transmit RADIO-STATUS for TLLI (10.3.5) */
+/*! Transmit RADIO-STATUS for TLLI (10.3.5) */
 int bssgp_tx_radio_status_tlli(struct bssgp_bvc_ctx *bctx, uint8_t cause,
 				uint32_t tlli)
 {
@@ -153,7 +153,7 @@
 	return common_tx_radio_status2(msg, cause);
 }
 
-/*! \brief Transmit RADIO-STATUS for TMSI (10.3.5) */
+/*! Transmit RADIO-STATUS for TMSI (10.3.5) */
 int bssgp_tx_radio_status_tmsi(struct bssgp_bvc_ctx *bctx, uint8_t cause,
 				uint32_t tmsi)
 {
@@ -168,7 +168,7 @@
 	return common_tx_radio_status2(msg, cause);
 }
 
-/*! \brief Transmit RADIO-STATUS for IMSI (10.3.5) */
+/*! Transmit RADIO-STATUS for IMSI (10.3.5) */
 int bssgp_tx_radio_status_imsi(struct bssgp_bvc_ctx *bctx, uint8_t cause,
 				const char *imsi)
 {
@@ -187,7 +187,7 @@
 	return common_tx_radio_status2(msg, cause);
 }
 
-/*! \brief Transmit FLUSH-LL-ACK (Chapter 10.4.2) */
+/*! Transmit FLUSH-LL-ACK (Chapter 10.4.2) */
 int bssgp_tx_flush_ll_ack(struct bssgp_bvc_ctx *bctx, uint32_t tlli,
 			   uint8_t action, uint16_t bvci_new,
 			   uint32_t num_octets)
@@ -211,7 +211,7 @@
 	return gprs_ns_sendmsg(bssgp_nsi, msg);
 }
 
-/*! \brief Transmit LLC-DISCARDED (Chapter 10.4.3) */
+/*! Transmit LLC-DISCARDED (Chapter 10.4.3) */
 int bssgp_tx_llc_discarded(struct bssgp_bvc_ctx *bctx, uint32_t tlli,
 			   uint8_t num_frames, uint32_t num_octets)
 {
@@ -237,7 +237,7 @@
 	return gprs_ns_sendmsg(bssgp_nsi, msg);
 }
 
-/*! \brief Transmit a BVC-BLOCK message (Chapter 10.4.8) */
+/*! Transmit a BVC-BLOCK message (Chapter 10.4.8) */
 int bssgp_tx_bvc_block(struct bssgp_bvc_ctx *bctx, uint8_t cause)
 {
 	struct msgb *msg = bssgp_msgb_alloc();
@@ -258,7 +258,7 @@
 	return gprs_ns_sendmsg(bssgp_nsi, msg);
 }
 
-/*! \brief Transmit a BVC-UNBLOCK message (Chapter 10.4.10) */
+/*! Transmit a BVC-UNBLOCK message (Chapter 10.4.10) */
 int bssgp_tx_bvc_unblock(struct bssgp_bvc_ctx *bctx)
 {
 	struct msgb *msg = bssgp_msgb_alloc();
@@ -277,7 +277,7 @@
 	return gprs_ns_sendmsg(bssgp_nsi, msg);
 }
 
-/*! \brief Transmit a BVC-RESET message (Chapter 10.4.12) */
+/*! Transmit a BVC-RESET message (Chapter 10.4.12) */
 int bssgp_tx_bvc_reset(struct bssgp_bvc_ctx *bctx, uint16_t bvci, uint8_t cause)
 {
 	struct msgb *msg = bssgp_msgb_alloc();
@@ -304,7 +304,7 @@
 	return gprs_ns_sendmsg(bssgp_nsi, msg);
 }
 
-/*! \brief Transmit a FLOW_CONTROL-BVC (Chapter 10.4.4)
+/*! Transmit a FLOW_CONTROL-BVC (Chapter 10.4.4)
  *  \param[in] bctx BVC Context
  *  \param[in] tag Additional tag to identify acknowledge
  *  \param[in] bucket_size Maximum bucket size in octets
@@ -376,7 +376,7 @@
 	return gprs_ns_sendmsg(bssgp_nsi, msg);
 }
 
-/*! \brief Transmit a FLOW_CONTROL-MS (Chapter 10.4.6)
+/*! Transmit a FLOW_CONTROL-MS (Chapter 10.4.6)
  *  \param[in] bctx BVC Context
  *  \param[in] tlli TLLI to identify MS
  *  \param[in] tag Additional tag to identify acknowledge
@@ -421,7 +421,7 @@
 	return gprs_ns_sendmsg(bssgp_nsi, msg);
 }
 
-/*! \brief RL-UL-UNITDATA.req (Chapter 10.2.2)
+/*! RL-UL-UNITDATA.req (Chapter 10.2.2)
  *  \param[in] bctx BVC Context
  *  \param[in] tlli TLLI to identify MS
  *  \param[in] qos_profile Pointer to three octests of QoS profile
diff --git a/src/gb/gprs_ns.c b/src/gb/gprs_ns.c
index 17933ed..51d1c3c 100644
--- a/src/gb/gprs_ns.c
+++ b/src/gb/gprs_ns.c
@@ -177,7 +177,7 @@
 }
 
 
-/*! \brief Lookup struct gprs_nsvc based on NSVCI
+/*! Lookup struct gprs_nsvc based on NSVCI
  *  \param[in] nsi NS instance in which to search
  *  \param[in] nsvci NSVCI to be searched
  *  \returns gprs_nsvc of respective NSVCI
@@ -192,7 +192,7 @@
 	return NULL;
 }
 
-/*! \brief Lookup struct gprs_nsvc based on NSEI
+/*! Lookup struct gprs_nsvc based on NSEI
  *  \param[in] nsi NS instance in which to search
  *  \param[in] nsei NSEI to be searched
  *  \returns first gprs_nsvc of respective NSEI
@@ -258,7 +258,7 @@
 	return nsvc;
 }
 
-/*! \brief Delete given NS-VC
+/*! Delete given NS-VC
  *  \param[in] nsvc gprs_nsvc to be deleted
  */
 void gprs_nsvc_delete(struct gprs_nsvc *nsvc)
@@ -346,7 +346,7 @@
 	{ 0, NULL }
 };
 
-/*! \brief Obtain a human-readable string for NS cause value */
+/*! Obtain a human-readable string for NS cause value */
 const char *gprs_ns_cause_str(enum ns_cause cause)
 {
 	return get_value_string(ns_cause_str, cause);
@@ -407,7 +407,7 @@
 	return gprs_ns_tx(nsvc, msg);
 }
 
-/*! \brief Transmit a NS-RESET on a given NSVC
+/*! Transmit a NS-RESET on a given NSVC
  *  \param[in] nsvc NS-VC used for transmission
  *  \paam[in] cause Numeric NS cause value
  */
@@ -438,7 +438,7 @@
 
 }
 
-/*! \brief Transmit a NS-STATUS on a given NSVC
+/*! Transmit a NS-STATUS on a given NSVC
  *  \param[in] nsvc NS-VC to be used for transmission
  *  \param[in] cause Numeric NS cause value
  *  \param[in] bvci BVCI to be reset within NSVC
@@ -492,7 +492,7 @@
 	return gprs_ns_tx(nsvc, msg);
 }
 
-/*! \brief Transmit a NS-BLOCK on a tiven NS-VC
+/*! Transmit a NS-BLOCK on a tiven NS-VC
  *  \param[in] nsvc NS-VC on which the NS-BLOCK is to be transmitted
  *  \param[in] cause Numeric NS Cause value
  *  \returns 0 in case of success
@@ -525,7 +525,7 @@
 	return gprs_ns_tx(nsvc, msg);
 }
 
-/*! \brief Transmit a NS-UNBLOCK on a given NS-VC
+/*! Transmit a NS-UNBLOCK on a given NS-VC
  *  \param[in] nsvc NS-VC on which the NS-UNBLOCK is to be transmitted
  *  \returns 0 in case of success
  */
@@ -538,7 +538,7 @@
 	return gprs_ns_tx_simple(nsvc, NS_PDUT_UNBLOCK);
 }
 
-/*! \brief Transmit a NS-ALIVE on a given NS-VC
+/*! Transmit a NS-ALIVE on a given NS-VC
  *  \param[in] nsvc NS-VC on which the NS-ALIVE is to be transmitted
  *  \returns 0 in case of success
  */
@@ -551,7 +551,7 @@
 	return gprs_ns_tx_simple(nsvc, NS_PDUT_ALIVE);
 }
 
-/*! \brief Transmit a NS-ALIVE-ACK on a given NS-VC
+/*! Transmit a NS-ALIVE-ACK on a given NS-VC
  *  \param[in] nsvc NS-VC on which the NS-ALIVE-ACK is to be transmitted
  *  \returns 0 in case of success
  */
@@ -693,7 +693,7 @@
 	return gprs_ns_tx(nsvc, msg);
 }
 
-/*! \brief High-level function for transmitting a NS-UNITDATA messsage
+/*! High-level function for transmitting a NS-UNITDATA messsage
  *  \param[in] nsi NS-instance on which we shall transmit
  *  \param[in] msg struct msgb to be trasnmitted
  *
@@ -1110,7 +1110,7 @@
 int gprs_ns_process_msg(struct gprs_ns_inst *nsi, struct msgb *msg,
 		      struct gprs_nsvc **nsvc);
 
-/*! \brief Receive incoming NS message from underlying transport layer
+/*! Receive incoming NS message from underlying transport layer
  *  \param nsi NS instance to which the data belongs
  *  \param[in] msg message buffer containing newly-received data
  *  \param[in] saddr socketaddr from which data was received
@@ -1194,7 +1194,7 @@
 	}
 }
 
-/*! \brief Create/get NS-VC independently from underlying transport layer
+/*! Create/get NS-VC independently from underlying transport layer
  *  \param nsi NS instance to which the data belongs
  *  \param[in] msg message buffer containing newly-received data
  *  \param[in] fallback_nsvc is used to send error messages back to the peer
@@ -1316,7 +1316,7 @@
 	return GPRS_NS_CS_FOUND;
 }
 
-/*! \brief Process NS message independently from underlying transport layer
+/*! Process NS message independently from underlying transport layer
  *  \param nsi NS instance to which the data belongs
  *  \param[in] msg message buffer containing newly-received data
  *  \param[inout] nsvc refers to the virtual connection, may be modified when
@@ -1406,7 +1406,7 @@
 	return rc;
 }
 
-/*! \brief Create a new GPRS NS instance
+/*! Create a new GPRS NS instance
  *  \param[in] cb Call-back function for incoming BSSGP data
  *  \returns dynamically allocated gprs_ns_inst
  */
@@ -1452,7 +1452,7 @@
 	}
 }
 
-/*! \brief Destroy an entire NS instance
+/*! Destroy an entire NS instance
  *  \param nsi gprs_ns_inst that is to be destroyed
  *
  *  This function releases all resources associated with the
@@ -1552,7 +1552,7 @@
 	return rc;
 }
 
-/*! \brief Create a listening socket for GPRS NS/UDP/IP
+/*! Create a listening socket for GPRS NS/UDP/IP
  *  \param[in] nsi NS protocol instance to listen
  *  \returns >=0 (fd) in case of success, negative in case of error
  *
@@ -1586,7 +1586,7 @@
 	return ret;
 }
 
-/*! \brief Initiate a RESET procedure
+/*! Initiate a RESET procedure
  *  \param[in] nsvc NS-VC in which to start the procedure
  *  \param[in] cause Numeric NS cause value
  *
@@ -1616,7 +1616,7 @@
 	return rc;
 }
 
-/*! \brief Establish a NS connection (from the BSS) to the SGSN
+/*! Establish a NS connection (from the BSS) to the SGSN
  *  \param nsi NS-instance
  *  \param[in] dest Destination IP/Port
  *  \param[in] nsei NSEI of the to-be-established NS-VC
diff --git a/src/gsm/a5.c b/src/gsm/a5.c
index 23cbe0c..f21554f 100644
--- a/src/gsm/a5.c
+++ b/src/gsm/a5.c
@@ -28,7 +28,7 @@
 
 /*! \addtogroup crypto
  *  @{
- *  \brief Osmocom GSM/GPRS ciphering algorithm implementation
+ *  Osmocom GSM/GPRS ciphering algorithm implementation
  */
 
 /*! \file gsm/a5.c */
@@ -50,7 +50,7 @@
 /* A5/3&4                                                                   */
 /* ------------------------------------------------------------------------ */
 
-/*! \brief Generate a GSM A5/4 cipher stream
+/*! Generate a GSM A5/4 cipher stream
  *  \param[in] key 16 byte array for the key (as received from the SIM)
  *  \param[in] fn Frame number
  *  \param[out] dl Pointer to array of ubits to return Downlink cipher stream
@@ -79,7 +79,7 @@
        }
 }
 
-/*! \brief Generate a GSM A5/3 cipher stream
+/*! Generate a GSM A5/3 cipher stream
  *  \param[in] key 8 byte array for the key (as received from the SIM)
  *  \param[in] fn Frame number
  *  \param[out] dl Pointer to array of ubits to return Downlink cipher stream
@@ -119,7 +119,7 @@
 #define A5_R3_TAPS	0x700080 /* x^23 + x^22 + x^21 + x^8 + 1 */
 #define A5_R4_TAPS	0x010800 /* x^17 + x^12 + 1 */
 
-/*! \brief Computes parity of a 32-bit word
+/*! Computes parity of a 32-bit word
  *  \param[in] x 32 bit word
  *  \return Parity bit (xor of all bits) as 0 or 1
  */
@@ -133,7 +133,7 @@
 	return (0x6996 >> x) & 1;
 }
 
-/*! \brief Compute majority bit from 3 taps
+/*! Compute majority bit from 3 taps
  *  \param[in] v1 LFSR state ANDed with tap-bit
  *  \param[in] v2 LFSR state ANDed with tap-bit
  *  \param[in] v3 LFSR state ANDed with tap-bit
@@ -145,7 +145,7 @@
 	return (!!v1 + !!v2 + !!v3) >= 2;
 }
 
-/*! \brief Compute the next LFSR state
+/*! Compute the next LFSR state
  *  \param[in] r Current state
  *  \param[in] mask LFSR mask
  *  \param[in] taps LFSR taps
@@ -166,7 +166,7 @@
 #define A51_R2_CLKBIT	0x000400
 #define A51_R3_CLKBIT	0x000400
 
-/*! \brief GSM A5/1 Clocking function
+/*! GSM A5/1 Clocking function
  *  \param[in] r Register state
  *  \param[in] force Non-zero value disable conditional clocking
  */
@@ -191,7 +191,7 @@
 		r[2] = _a5_12_clock(r[2], A5_R3_MASK, A5_R3_TAPS);
 }
 
-/*! \brief GSM A5/1 Output function
+/*! GSM A5/1 Output function
  *  \param[in] r Register state
  *  \return The A5/1 output function bit
  */
@@ -203,7 +203,7 @@
 		(r[2] >> (A5_R3_LEN-1));
 }
 
-/*! \brief Generate a GSM A5/1 cipher stream
+/*! Generate a GSM A5/1 cipher stream
  *  \param[in] key 8 byte array for the key (as received from the SIM)
  *  \param[in] fn Frame number
  *  \param[out] dl Pointer to array of ubits to return Downlink cipher stream
@@ -278,7 +278,7 @@
 #define A52_R4_CLKBIT1	0x000008
 #define A52_R4_CLKBIT2	0x000080
 
-/*! \brief GSM A5/2 Clocking function
+/*! GSM A5/2 Clocking function
  *  \param[in] r Register state
  *  \param[in] force Non-zero value disable conditional clocking
  */
@@ -305,7 +305,7 @@
 	r[3] = _a5_12_clock(r[3], A5_R4_MASK, A5_R4_TAPS);
 }
 
-/*! \brief GSM A5/2 Output function
+/*! GSM A5/2 Output function
  *  \param[in] r Register state
  *  \return The A5/2 output function bit
  */
@@ -324,7 +324,7 @@
 	return b;
 }
 
-/*! \brief Generate a GSM A5/1 cipher stream
+/*! Generate a GSM A5/1 cipher stream
  *  \param[in] key 8 byte array for the key (as received from the SIM)
  *  \param[in] fn Frame number
  *  \param[out] dl Pointer to array of ubits to return Downlink cipher stream
@@ -398,7 +398,7 @@
 	osmo_a5(2, key, fn, dl, ul);
 }
 
-/*! \brief Main method to generate a A5/x cipher stream
+/*! Main method to generate a A5/x cipher stream
  *  \param[in] n Which A5/x method to use
  *  \param[in] key 8 or 16 (for a5/4) byte array for the key (as received from the SIM)
  *  \param[in] fn Frame number
diff --git a/src/gsm/abis_nm.c b/src/gsm/abis_nm.c
index c954902..287973b 100644
--- a/src/gsm/abis_nm.c
+++ b/src/gsm/abis_nm.c
@@ -22,7 +22,7 @@
 
 /*! \addtogroup oml
  *  @{
- * \brief GSM Network Management (OML) messages on the A-bis interface
+ * GSM Network Management (OML) messages on the A-bis interface
  * 3GPP TS 12.21 version 8.0.0 Release 1999 / ETSI TS 100 623 V8.0.0
  */
 
@@ -41,7 +41,7 @@
 const char abis_nm_ipa_magic[13] = "com.ipaccess";
 const char abis_nm_osmo_magic[12] = "org.osmocom";
 
-/*! \brief unidirectional messages from BTS to BSC */
+/*! unidirectional messages from BTS to BSC */
 const enum abis_nm_msgtype abis_nm_reports[4] = {
 	NM_MT_SW_ACTIVATED_REP,
 	NM_MT_TEST_REP,
@@ -49,14 +49,14 @@
 	NM_MT_FAILURE_EVENT_REP,
 };
 
-/*! \brief messages without ACK/NACK */
+/*! messages without ACK/NACK */
 const enum abis_nm_msgtype abis_nm_no_ack_nack[3] = {
 	NM_MT_MEAS_RES_REQ,
 	NM_MT_STOP_MEAS,
 	NM_MT_START_MEAS,
 };
 
-/*! \brief messages related to software load */
+/*! messages related to software load */
 const enum abis_nm_msgtype abis_nm_sw_load_msgs[9] = {
 	NM_MT_LOAD_INIT_ACK,
 	NM_MT_LOAD_INIT_NACK,
@@ -70,7 +70,7 @@
 	NM_MT_SW_ACTIVATED_REP,
 };
 
-/*! \brief All NACKs (negative acknowledgements */
+/*! All NACKs (negative acknowledgements */
 const enum abis_nm_msgtype abis_nm_nacks[33] = {
 	NM_MT_LOAD_INIT_NACK,
 	NM_MT_LOAD_END_NACK,
@@ -145,7 +145,7 @@
 	{ 0,				NULL }
 };
 
-/*! \brief Get human-readable string for OML NACK message type */
+/*! Get human-readable string for OML NACK message type */
 const char *abis_nm_nack_name(uint8_t nack)
 {
 	return get_value_string(nack_names, nack);
@@ -214,7 +214,7 @@
 	{ 0,				NULL }
 };
 
-/*! \brief Get human-readable string for NACK cause */
+/*! Get human-readable string for NACK cause */
 const char *abis_nm_nack_cause_name(uint8_t cause)
 {
 	return get_value_string(nack_cause_names, cause);
@@ -230,7 +230,7 @@
 	{ 0,				NULL }
 };
 
-/*! \brief Get human-readable string for OML event type */
+/*! Get human-readable string for OML event type */
 const char *abis_nm_event_type_name(uint8_t cause)
 {
 	return get_value_string(event_type_names, cause);
@@ -247,13 +247,13 @@
 	{ 0,				NULL }
 };
 
-/*! \brief Get human-readable string for perceived OML severity */
+/*! Get human-readable string for perceived OML severity */
 const char *abis_nm_severity_name(uint8_t cause)
 {
 	return get_value_string(severity_names, cause);
 }
 
-/*! \brief 3GPP TS 12.21 9.4.53 T200 values (in msec) */
+/*! 3GPP TS 12.21 9.4.53 T200 values (in msec) */
 const uint8_t abis_nm_t200_ms[] = {
 	[T200_SDCCH]		= 5,
 	[T200_FACCH_F]		= 5,
@@ -264,7 +264,7 @@
 	[T200_SACCH_TCH_SAPI3]	= 10
 };
 
-/*! \brief 3GPP TS 52.021 §9.1 Message Types */
+/*! 3GPP TS 52.021 §9.1 Message Types */
 const struct value_string abis_nm_msgtype_names[] = {
 	{ NM_MT_LOAD_INIT,		"Load Data Initiate" },				/* §8.3.1 */
 	{ NM_MT_LOAD_INIT_ACK,		"Load Data Initiate Ack" },
@@ -367,7 +367,7 @@
 	{ 0, NULL }
 };
 
-/*! \brief 3GPP TS 52.021 §9.4 Attributes and Parameters */
+/*! 3GPP TS 52.021 §9.4 Attributes and Parameters */
 const struct value_string abis_nm_att_names[] = {
 	{ NM_ATT_ABIS_CHANNEL,		"Abis Channel" },			/* §9.4.1 */
 	{ NM_ATT_ADD_INFO,		"Additional Info" },			/* §9.4.2 */
@@ -438,7 +438,7 @@
 	{ 0, NULL }
 };
 
-/*! \brief Attributes that the BSC can set, not only get, according to Section 9.4 */
+/*! Attributes that the BSC can set, not only get, according to Section 9.4 */
 const enum abis_nm_attr abis_nm_att_settable[] = {
 	NM_ATT_ADD_INFO,
 	NM_ATT_ADD_TEXT,
@@ -467,7 +467,7 @@
 	NM_ATT_MEAS_TYPE,
 };
 
-/*! \brief GSM A-bis OML IPA TLV parser definition */
+/*! GSM A-bis OML IPA TLV parser definition */
 const struct tlv_definition abis_nm_att_tlvdef_ipa = {
 	.def = {
 		/* ip.access specifics */
@@ -516,7 +516,7 @@
 	},
 };
 
-/*! \brief GSM A-bis OML TLV parser definition */
+/*! GSM A-bis OML TLV parser definition */
 const struct tlv_definition abis_nm_att_tlvdef = {
 	.def = {
 		[NM_ATT_ABIS_CHANNEL] =		{ TLV_TYPE_FIXED, 3 },
@@ -586,14 +586,14 @@
 	},
 };
 
-/*! \brief org.osmocom GSM A-bis OML TLV parser definition */
+/*! org.osmocom GSM A-bis OML TLV parser definition */
 const struct tlv_definition abis_nm_osmo_att_tlvdef = {
 	.def = {
 		[NM_ATT_OSMO_REDUCEPOWER] =	{ TLV_TYPE_TV },
 	},
 };
 
-/*! \brief Human-readable strings for A-bis OML Object Class */
+/*! Human-readable strings for A-bis OML Object Class */
 const struct value_string abis_nm_msg_disc_names[] = {
 	{ ABIS_OM_MDISC_FOM,	"FOM" },
 	{ ABIS_OM_MDISC_MMI,	"MMI" },
@@ -602,7 +602,7 @@
 	{ 0, NULL }
 };
 
-/*! \brief Human-readable strings for A-bis OML Object Class */
+/*! Human-readable strings for A-bis OML Object Class */
 const struct value_string abis_nm_obj_class_names[] = {
 	{ NM_OC_SITE_MANAGER,	"SITE-MANAGER" },
 	{ NM_OC_BTS,		"BTS" },
@@ -624,7 +624,7 @@
 	{ 0,			NULL }
 };
 
-/*! \brief Get human-readable string for OML Operational State */
+/*! Get human-readable string for OML Operational State */
 const char *abis_nm_opstate_name(uint8_t os)
 {
 	switch (os) {
@@ -653,7 +653,7 @@
 	{ 0,	NULL }
 };
 
-/*! \brief Get human-readable string for OML Availability State */
+/*! Get human-readable string for OML Availability State */
 const char *abis_nm_avail_name(uint8_t avail)
 {
 	return get_value_string(avail_names, avail);
@@ -671,13 +671,13 @@
 	{ 0, NULL }
 };
 
-/*! \brief Get human-readable string for OML test */
+/*! Get human-readable string for OML test */
 const char *abis_nm_test_name(uint8_t test)
 {
 	return get_value_string(test_names, test);
 }
 
-/*! \brief Human-readable names for OML administrative state */
+/*! Human-readable names for OML administrative state */
 const struct value_string abis_nm_adm_state_names[] = {
 	{ NM_STATE_LOCKED,	"Locked" },
 	{ NM_STATE_UNLOCKED,	"Unlocked" },
@@ -702,7 +702,7 @@
 	/* FIXME: bounds check */
 };
 
-/*! \brief Pack 3GPP TS 12.21 § 8.8.2 Failure Event Report into msgb */
+/*! Pack 3GPP TS 12.21 § 8.8.2 Failure Event Report into msgb */
 struct msgb *abis_nm_fail_evt_rep(enum abis_nm_event_type t,
 				  enum abis_nm_severity s,
 				  enum abis_nm_pcause_type ct,
@@ -718,7 +718,7 @@
 	return nmsg;
 }
 
-/*! \brief Pack 3GPP TS 12.21 § 8.8.2 Failure Event Report into msgb */
+/*! Pack 3GPP TS 12.21 § 8.8.2 Failure Event Report into msgb */
 struct msgb *abis_nm_fail_evt_vrep(enum abis_nm_event_type t,
 				   enum abis_nm_severity s,
 				   enum abis_nm_pcause_type ct,
@@ -753,7 +753,7 @@
 	return nmsg;
 }
 
-/*! \brief Compute length of given 3GPP TS 52.021 §9.4.62 SW Description.
+/*! Compute length of given 3GPP TS 52.021 §9.4.62 SW Description.
  *  \param[in] sw SW Description struct
  *  \param[in] put_sw_descr boolean, whether to put NM_ATT_SW_DESCR IE or not
  *  \returns length of buffer space necessary to store sw
@@ -764,7 +764,7 @@
 	return (put_sw_desc ? 1 : 0) + (sw->file_id_len + 3) + (sw->file_version_len + 3);
 }
 
-/*! \brief Put given 3GPP TS 52.021 §9.4.62 SW Description into msgb.
+/*! Put given 3GPP TS 52.021 §9.4.62 SW Description into msgb.
  *  \param[out] msg message buffer
  *  \param[in] sw SW Description struct
  *  \param[in] put_sw_descr boolean, whether to put NM_ATT_SW_DESCR IE or not
@@ -781,7 +781,7 @@
 	return abis_nm_sw_desc_len(sw, put_sw_desc);
 }
 
-/*! \brief Put given file ID/Version pair as 3GPP TS 52.021 §9.4.62 SW Description into msgb.
+/*! Put given file ID/Version pair as 3GPP TS 52.021 §9.4.62 SW Description into msgb.
  *  \param[out] msg message buffer
  *  \param[in] id File ID part of SW Description
  *  \param[in] id File Version part of SW Description
@@ -801,7 +801,7 @@
 	return abis_nm_put_sw_desc(msg, &sw, put_sw_desc);
 }
 
-/*! \brief Get length of first 3GPP TS 52.021 §9.4.62 SW Description from buffer.
+/*! Get length of first 3GPP TS 52.021 §9.4.62 SW Description from buffer.
  *  \param[in] buf buffer, may contain several SW Descriptions
  *  \param[in] len buffer length
  *  \returns length if parsing succeeded, 0 otherwise
@@ -826,7 +826,7 @@
 	return sw + 2; /* +  2-byte length field of 2nd FILE_* element */
 }
 
-/*! \brief Parse single 3GPP TS 52.021 §9.4.62 SW Description from buffer.
+/*! Parse single 3GPP TS 52.021 §9.4.62 SW Description from buffer.
  *  \param[out] sw SW Description struct
  *  \param[in] buf buffer
  *  \param[in] len buffer length
@@ -882,7 +882,7 @@
 	return 0;
 }
 
-/*! \brief Parse 3GPP TS 52.021 §9.4.61 SW Configuration from buffer.
+/*! Parse 3GPP TS 52.021 §9.4.61 SW Configuration from buffer.
  *  \param[in] buf buffer
  *  \param[in] buf_len buffer length
  *  \param[out] sw SW Description struct array
@@ -908,7 +908,7 @@
 	return i;
 }
 
-/*! \brief Obtain OML Channel Combination for phnsical channel config */
+/*! Obtain OML Channel Combination for phnsical channel config */
 int abis_nm_chcomb4pchan(enum gsm_phys_chan_config pchan)
 {
 	if (pchan < ARRAY_SIZE(chcomb4pchan))
@@ -917,7 +917,7 @@
 	return -EINVAL;
 }
 
-/*! \brief Obtain physical channel config for OML Channel Combination */
+/*! Obtain physical channel config for OML Channel Combination */
 enum gsm_phys_chan_config abis_nm_pchan4chcomb(uint8_t chcomb)
 {
 	int i;
diff --git a/src/gsm/auth_core.c b/src/gsm/auth_core.c
index c9e403c..1bdd4a8 100644
--- a/src/gsm/auth_core.c
+++ b/src/gsm/auth_core.c
@@ -32,7 +32,7 @@
 
 /*! \addtogroup auth
  *  @{
- *  \brief GSM/GPRS/3G authentication core infrastructure
+ *  GSM/GPRS/3G authentication core infrastructure
  */
 
 /* \file auth_core.c */
@@ -41,7 +41,7 @@
 
 static struct osmo_auth_impl *selected_auths[_OSMO_AUTH_ALG_NUM];
 
-/*! \brief Register an authentication algorithm implementation with the core
+/*! Register an authentication algorithm implementation with the core
  *  \param[in] impl Structure describing implementation and it's callbacks
  *  \returns 0 on success, or a negative error code on failure
  *
@@ -63,7 +63,7 @@
 	return 0;
 }
 
-/*! \brief Load all available authentication plugins from the given path
+/*! Load all available authentication plugins from the given path
  *  \param[in] path Path name of the directory containing the plugins
  *  \returns number of plugins loaded in case of success, negative in case of error
  *
@@ -75,7 +75,7 @@
 	return osmo_plugin_load_all(path);
 }
 
-/*! \brief Determine if a given authentication algorithm is supported
+/*! Determine if a given authentication algorithm is supported
  *  \param[in] algo Algorithm which should be checked
  *  \returns 1 if algo is supported, 0 if not, negative error on failure
  *
@@ -112,7 +112,7 @@
 	memcpy(ck+8, kc, 8);
 }
 
-/*! \brief Generate 3G CK + IK from 2G authentication vector
+/*! Generate 3G CK + IK from 2G authentication vector
  *  \param vec Authentication Vector to be modified
  *  \returns 1 if the vector was changed, 0 otherwise
  *
@@ -136,7 +136,7 @@
 	return 0;
 }
 
-/*! \brief Generate authentication vector
+/*! Generate authentication vector
  *  \param[out] vec Generated authentication vector
  *  \param[in] aud Subscriber-specific key material
  *  \param[in] _rand Random challenge to be used
@@ -167,7 +167,7 @@
 	return 0;
 }
 
-/*! \brief Generate authentication vector and re-sync sequence
+/*! Generate authentication vector and re-sync sequence
  *  \param[out] vec Generated authentication vector
  *  \param[in] aud Subscriber-specific key material
  *  \param[in] auts AUTS value sent by the SIM/MS
@@ -212,13 +212,13 @@
 	{ 0, NULL }
 };
 
-/*! \brief Get human-readable name of authentication algorithm */
+/*! Get human-readable name of authentication algorithm */
 const char *osmo_auth_alg_name(enum osmo_auth_algo alg)
 {
 	return get_value_string(auth_alg_vals, alg);
 }
 
-/*! \brief Parse human-readable name of authentication algorithm */
+/*! Parse human-readable name of authentication algorithm */
 enum osmo_auth_algo osmo_auth_alg_parse(const char *name)
 {
 	return get_string_value(auth_alg_vals, name);
diff --git a/src/gsm/comp128.c b/src/gsm/comp128.c
index cb3a309..78f0e07 100644
--- a/src/gsm/comp128.c
+++ b/src/gsm/comp128.c
@@ -73,7 +73,7 @@
  */
 
 /*! \file comp128.c
- *  \brief COMP128 v1; common/old GSM Authentication Algorithm (A3/A8)
+ *  COMP128 v1; common/old GSM Authentication Algorithm (A3/A8)
  */
 
 /* The compression tables (just copied ...) */
@@ -192,7 +192,7 @@
 		x[(i>>3)+16] |= bits[(i*17) & 127] << (7-(i&7));
 }
 
-/*! \brief Perform COMP128v1 algorithm
+/*! Perform COMP128v1 algorithm
  *  \param[in] ki Secret Key K(i) of subscriber
  *  \param[in] rand Random Challenge
  *  \param[out] sres user-supplied buffer for storing computed SRES value
@@ -242,7 +242,7 @@
 }
 
 
-/*! \brief Perform COMP128v1 algorithm
+/*! Perform COMP128v1 algorithm
  *  \param[in] ki Secret Key K(i) of subscriber
  *  \param[in] rand Random Challenge
  *  \param[out] sres user-supplied buffer for storing computed SRES value
diff --git a/src/gsm/comp128v23.c b/src/gsm/comp128v23.c
index bfb4a0e..1797ebc 100644
--- a/src/gsm/comp128v23.c
+++ b/src/gsm/comp128v23.c
@@ -33,7 +33,7 @@
  */
 
 /*! \file comp128v23.c
- *  \brief COMP128 v2 / v3; Common Algorithm used for GSM Authentication (A3/A8)
+ *  COMP128 v2 / v3; Common Algorithm used for GSM Authentication (A3/A8)
  */
 
 static const uint8_t table0[256] = {
@@ -109,7 +109,7 @@
 	}
 }
 
-/*! \brief Perform COMP128v3 algorithm
+/*! Perform COMP128v3 algorithm
  *  \param[in] ki Secret Key K(i) of subscriber
  *  \param[in] rand Random Challenge
  *  \param[out] sres user-supplied buffer for storing computed SRES value
@@ -161,7 +161,7 @@
 	return 0;
 }
 
-/*! \brief Perform COMP128v2 algorithm
+/*! Perform COMP128v2 algorithm
  *  \param[in] ki Secret Key K(i) of subscriber
  *  \param[in] rand Random Challenge
  *  \param[out] sres user-supplied buffer for storing computed SRES value
diff --git a/src/gsm/gan.c b/src/gsm/gan.c
index 1d98b38..d357b7e 100644
--- a/src/gsm/gan.c
+++ b/src/gsm/gan.c
@@ -22,7 +22,7 @@
 #include <osmocom/gsm/protocol/gsm_44_318.h>
 
 /*! \file gan.c
- *  \brief Generic Access Network (GAN) / UMA according to TS 44.318
+ *  Generic Access Network (GAN) / UMA according to TS 44.318
  */
 
 
diff --git a/src/gsm/gea.c b/src/gsm/gea.c
index 8d026a2..d4e599c 100644
--- a/src/gsm/gea.c
+++ b/src/gsm/gea.c
@@ -37,7 +37,7 @@
 /*! \file gsm/gea.c */
 
 
-/*! \brief Performs the GEA4 algorithm as in 3GPP TS 55.226 V9.0.0
+/*! Performs the GEA4 algorithm as in 3GPP TS 55.226 V9.0.0
  *  \param[in,out] out Buffer for gamma for encrypted/decrypted
  *  \param[in] len Length of out, in bytes
  *  \param[in] kc Buffer with the ciphering key
@@ -51,7 +51,7 @@
 	return 0;
 }
 
-/*! \brief Performs the GEA3 algorithm as in 3GPP TS 55.216 V6.2.0
+/*! Performs the GEA3 algorithm as in 3GPP TS 55.216 V6.2.0
  *  \param[in,out] out Buffer for gamma for encrypted/decrypted
  *  \param[in] len Length of out, in bytes
  *  \param[in] kc Buffer with the ciphering key
diff --git a/src/gsm/gprs_cipher_core.c b/src/gsm/gprs_cipher_core.c
index a0cf185..b833048 100644
--- a/src/gsm/gprs_cipher_core.c
+++ b/src/gsm/gprs_cipher_core.c
@@ -88,7 +88,7 @@
 	return selected_ciphers[algo]->run(out, len, kc, iv, dir);
 }
 
-/*! \brief Obtain key lenght for given GPRS cipher
+/*! Obtain key lenght for given GPRS cipher
  *  \param[in] algo Enum representive GPRS cipher
  *  \returns unsigned integer key length for supported algorithms,
  *  for GEA0 and unknown ciphers will return 0
diff --git a/src/gsm/gprs_rlc.c b/src/gsm/gprs_rlc.c
index d1247be..4b32947 100644
--- a/src/gsm/gprs_rlc.c
+++ b/src/gsm/gprs_rlc.c
@@ -6,7 +6,7 @@
 #include <osmocom/gprs/protocol/gsm_04_60.h>
 
 /*! \file gsm/gprs_rlc.c
- *  \brief helper functions for (E)GPRS RLC according to 3GPP TS 44.060
+ *  helper functions for (E)GPRS RLC according to 3GPP TS 44.060
  */
 
 #define EGPRS_CPS_TYPE1_TBL_SZ		29
diff --git a/src/gsm/gsm0341.c b/src/gsm/gsm0341.c
index 2592b54..0e3e453 100644
--- a/src/gsm/gsm0341.c
+++ b/src/gsm/gsm0341.c
@@ -31,7 +31,7 @@
  *  @{
  */
 
-/*! \brief Encode a 3GPP TS 03.41 SMS-CB message
+/*! Encode a 3GPP TS 03.41 SMS-CB message
  *  \param[in] ctx talloc allocation context
  *  \param[in] geo_scope Geographic Scope
  *  \param[in] msg_code Message Code
diff --git a/src/gsm/gsm0411_smc.c b/src/gsm/gsm0411_smc.c
index 03016b9..dab83eb 100644
--- a/src/gsm/gsm0411_smc.c
+++ b/src/gsm/gsm0411_smc.c
@@ -62,7 +62,7 @@
 
 /*! \addtogroup sms
  *  @{
- *  \brief Point-to-Point (PP) Short Message Service (SMS) as per TS 04.11
+ *  Point-to-Point (PP) Short Message Service (SMS) as per TS 04.11
  */
 
 static void cp_timer_expired(void *data);
diff --git a/src/gsm/gsm0411_utils.c b/src/gsm/gsm0411_utils.c
index 543775c..ef67930 100644
--- a/src/gsm/gsm0411_utils.c
+++ b/src/gsm/gsm0411_utils.c
@@ -45,7 +45,7 @@
 #define GSM411_ALLOC_SIZE	1024
 #define GSM411_ALLOC_HEADROOM	128
 
-/*! \brief Allocate a message buffer for use as TS 04.11 message
+/*! Allocate a message buffer for use as TS 04.11 message
  *  \returns allocated message buffer */
 struct msgb *gsm411_msgb_alloc(void)
 {
@@ -53,7 +53,7 @@
 				   "GSM 04.11");
 }
 
-/*! \brief Turn int into semi-octet representation: 98 => 0x89
+/*! Turn int into semi-octet representation: 98 => 0x89
  *  \param[in] integer value representing decimal number 0..99
  *  \returns BSC encoded as nibbles, swapped */
 uint8_t gsm411_bcdify(uint8_t value)
@@ -66,7 +66,7 @@
 	return ret;
 }
 
-/*! \brief Turn semi-octet representation into int: 0x89 => 98
+/*! Turn semi-octet representation into int: 0x89 => 98
  *  \param[in] value byte containing two BCD nibbles in revere order
  *  \returns integer representing decoded, re-ordered nibbles */
 uint8_t gsm411_unbcdify(uint8_t value)
@@ -83,7 +83,7 @@
 	return ret;
 }
 
-/*! \brief Generate 03.40 TP-SCTS
+/*! Generate 03.40 TP-SCTS
  *  \param[out] scts Caller-provided buffer to store SCTS (7 octets)
  *  \param[in] time to encode */
 void gsm340_gen_scts(uint8_t *scts, time_t time)
@@ -104,7 +104,7 @@
 #endif
 }
 
-/*! \brief Decode 03.40 TP-SCTS (into utc/gmt timestamp)
+/*! Decode 03.40 TP-SCTS (into utc/gmt timestamp)
  *  \param[in] scts SMS Center Time Stamp
  *  \return time in UTC time_t format */
 time_t gsm340_scts(uint8_t *scts)
@@ -204,7 +204,7 @@
 	return minutes;
 }
 
-/*! \brief decode validity period. return minutes
+/*! decode validity period. return minutes
  *  \param[in] sms_vpf Validity Period Format in 03.40 encoding
  *  \param[in] sms_vp Validity Period Information Element
  *  \returns validity period in minutes */
@@ -245,7 +245,7 @@
 	}
 }
 
-/*! \brief determine coding alphabet dependent on GSM 03.38 Section 4 DCS
+/*! determine coding alphabet dependent on GSM 03.38 Section 4 DCS
  *  \param[in] dcs Data Coding Scheme in 03.38 encoding
  *  \returns libosmogsm internal enum \ref sms_alphabet */
 enum sms_alphabet gsm338_get_sms_alphabet(uint8_t dcs)
@@ -285,7 +285,7 @@
 	return alpha;
 }
 
-/*! \brief generate a TPDU address field compliant with 03.40 sec. 9.1.2.5 
+/*! generate a TPDU address field compliant with 03.40 sec. 9.1.2.5 
  *  \param[out] oa caller-provided output buffer
  *  \param[in] oa_len caller-specified length of \a oa in bytes
  *  \param[in] type GSM340_TYPE_*
@@ -321,7 +321,7 @@
 	return len_in_bytes;
 }
 
-/*! \brief Prefix \ref msgb with a RP header
+/*! Prefix \ref msgb with a RP header
  *  \param msg Message Buffer containing message
  *  \param[in] rp_msg_type RP Message Type
  *  \param[in] rp_msg_ref RP Message Reference
@@ -341,7 +341,7 @@
 	return 0;
 }
 
-/*! \brief Prefix \ref msgb with a 04.08/04.11 CP header
+/*! Prefix \ref msgb with a 04.08/04.11 CP header
  *  \param msg Message Buffer containing message
  *  \param[in] proto Protocol
  *  \param[in] trans Transaction
diff --git a/src/gsm/gsm0808.c b/src/gsm/gsm0808.c
index c96dc77..f595dd6 100644
--- a/src/gsm/gsm0808.c
+++ b/src/gsm/gsm0808.c
@@ -26,13 +26,13 @@
 
 /*! \addtogroup gsm0808
  *  @{
- *  \brief Helper functions regarding the TS 08.08 / 48.008 A interface
+ *  Helper functions regarding the TS 08.08 / 48.008 A interface
  */
 
 #define BSSMAP_MSG_SIZE 512
 #define BSSMAP_MSG_HEADROOM 128
 
-/*! \brief Create "Complete L3 Info" for AoIP
+/*! Create "Complete L3 Info" for AoIP
  *  \param[in] msg_l3 msgb containing Layer 3 Message
  *  \param[in] nc Mobile Network Code
  *  \param[in] cc Mobile Country Code
@@ -81,7 +81,7 @@
 	return msg;
 }
 
-/*! \brief Create "Complete L3 Info" for A
+/*! Create "Complete L3 Info" for A
  *  \param[in] msg_l3 msgb containing Layer 3 Message
  *  \param[in] nc Mobile Network Code
  *  \param[in] cc Mobile Country Code
@@ -94,7 +94,7 @@
 	return gsm0808_create_layer3_aoip(msg_l3, nc, cc, lac, _ci, NULL);
 }
 
-/*! \brief Create BSSMAP RESET message
+/*! Create BSSMAP RESET message
  *  \returns callee-allocated msgb with BSSMAP Reset message */
 struct msgb *gsm0808_create_reset(void)
 {
@@ -111,7 +111,7 @@
 	return msg;
 }
 
-/*! \brief Create BSSMAP RESET ACK message
+/*! Create BSSMAP RESET ACK message
  *  \returns callee-allocated msgb with BSSMAP Reset ACK message */
 struct msgb *gsm0808_create_reset_ack(void)
 {
@@ -126,7 +126,7 @@
 	return msg;
 }
 
-/*! \brief Create BSSMAP Clear Complete message
+/*! Create BSSMAP Clear Complete message
  *  \returns callee-allocated msgb with BSSMAP Clear Complete message */
 struct msgb *gsm0808_create_clear_complete(void)
 {
@@ -142,7 +142,7 @@
 	return msg;
 }
 
-/*! \brief Create BSSMAP Clear Command message
+/*! Create BSSMAP Clear Command message
  *  \param[in] reason TS 08.08 cause value
  *  \returns callee-allocated msgb with BSSMAP Clear Command message */
 struct msgb *gsm0808_create_clear_command(uint8_t reason)
@@ -159,7 +159,7 @@
 	return msg;
 }
 
-/*! \brief Create BSSMAP Cipher Mode Command message
+/*! Create BSSMAP Cipher Mode Command message
  *  \param[in] ei Mandatory Encryption Information
  *  \param[in] cipher_response_mode optional 1-byte Cipher Response Mode
  *  \returns callee-allocated msgb with BSSMAP Cipher Mode Command message */
@@ -196,7 +196,7 @@
 	return msg;
 }
 
-/*! \brief Create BSSMAP Cipher Mode Complete message
+/*! Create BSSMAP Cipher Mode Complete message
  *  \param[in] layer3 L3 Message to be included
  *  \param[in] alg_id Chosen Encrpytion Algorithm
  *  \returns callee-allocated msgb with BSSMAP Cipher Mode Complete message */
@@ -225,7 +225,7 @@
 	return msg;
 }
 
-/*! \brief Create BSSMAP Cipher Mode Reject message
+/*! Create BSSMAP Cipher Mode Reject message
  *  \param[in] reason TS 08.08 cause value
  *  \returns callee-allocated msgb with BSSMAP Cipher Mode Reject message */
 struct msgb *gsm0808_create_cipher_reject(uint8_t cause)
@@ -242,7 +242,7 @@
 	return msg;
 }
 
-/*! \brief Create BSSMAP Classmark Update message
+/*! Create BSSMAP Classmark Update message
  *  \param[in] cm2 Classmark 2
  *  \param[in] cm2_len length (in octets) of \a cm2
  *  \param[in] cm3 Classmark 3
@@ -267,7 +267,7 @@
 	return msg;
 }
 
-/*! \brief Create BSSMAP SAPI N Reject message
+/*! Create BSSMAP SAPI N Reject message
  *  \param[in] link_id Link Identifier
  *  \returns callee-allocated msgb with BSSMAP SAPI N Reject message */
 struct msgb *gsm0808_create_sapi_reject(uint8_t link_id)
@@ -286,7 +286,7 @@
 	return msg;
 }
 
-/*! \brief Create BSSMAP Assignment Request message
+/*! Create BSSMAP Assignment Request message
  *  \param[in] ct Channel Type
  *  \param[in] cic Circuit Identity Code (Classic A only)
  *  \param[in] ss Socket Address of MSC-side RTP socket (AoIP only)
@@ -349,7 +349,7 @@
 	return msg;
 }
 
-/*! \brief Create BSSMAP Assignment Completed message
+/*! Create BSSMAP Assignment Completed message
  *  \param[in] rr_cause GSM 04.08 RR Cause value
  *  \param[in] chosen_channel Chosen Channel
  *  \param[in] encr_alg_id Encryption Algorithm ID
@@ -407,7 +407,7 @@
 	return msg;
 }
 
-/*! \brief Create BSSMAP Assignment Completed message
+/*! Create BSSMAP Assignment Completed message
  *  \param[in] rr_cause GSM 04.08 RR Cause value
  *  \param[in] chosen_channel Chosen Channel
  *  \param[in] encr_alg_id Encryption Algorithm ID
@@ -422,7 +422,7 @@
 					speech_mode, NULL, NULL, NULL);
 }
 
-/*! \brief Create BSSMAP Assignment Failure message
+/*! Create BSSMAP Assignment Failure message
  *  \param[in] cause BSSMAP Cause value
  *  \param[in] rr_cause GSM 04.08 RR Cause value
  *  \param[in] scl Optional Speech Cdec List (AoIP)
@@ -456,7 +456,7 @@
 	return msg;
 }
 
-/*! \brief Create BSSMAP Assignment Failure message
+/*! Create BSSMAP Assignment Failure message
  *  \param[in] cause BSSMAP Cause value
  *  \param[in] rr_cause GSM 04.08 RR Cause value
  *  \returns callee-allocated msgb with BSSMAP Assignment Failure message */
@@ -466,7 +466,7 @@
 	return gsm0808_create_ass_fail(cause, rr_cause, NULL);
 }
 
-/*! \brief Create BSSMAP Clear Request message
+/*! Create BSSMAP Clear Request message
  *  \param[in] cause BSSMAP Cause value
  *  \returns callee-allocated msgb with BSSMAP Clear Request message */
 struct msgb *gsm0808_create_clear_rqst(uint8_t cause)
@@ -485,7 +485,7 @@
 	return msg;
 }
 
-/*! \brief Create BSSMAP PAGING message
+/*! Create BSSMAP PAGING message
  *  \param[in] imsi Mandatory paged IMSI in string representation
  *  \param[in] tmsi Optional paged TMSI
  *  \param[in] cil Cell Identity List (where to page)
@@ -543,7 +543,7 @@
 	return msg;
 }
 
-/*! \brief Prepend a DTAP header to given Message Buffer
+/*! Prepend a DTAP header to given Message Buffer
  *  \param[in] msgb Message Buffer
  *  \param[in] link_id Link Identifier */
 void gsm0808_prepend_dtap_header(struct msgb *msg, uint8_t link_id)
@@ -554,7 +554,7 @@
 	hh[2] = msg->len - 3;
 }
 
-/*! \brief Create BSSMAP DTAP message
+/*! Create BSSMAP DTAP message
  *  \param[in] msg_l3 Messge Buffer containing Layer3 message
  *  \param[in] link_id Link Identifier
  *  \returns callee-allocated msgb with BSSMAP DTAP message */
@@ -818,7 +818,7 @@
 	{ 0, NULL }
 };
 
-/*! \brief Return string name of BSSMAP Message Type */
+/*! Return string name of BSSMAP Message Type */
 const char *gsm0808_bssmap_name(uint8_t msg_type)
 {
 	return get_value_string(gsm0808_msgt_names, msg_type);
@@ -830,7 +830,7 @@
 	{ 0, NULL }
 };
 
-/*! \brief Return string name of BSSAP Message Type */
+/*! Return string name of BSSAP Message Type */
 const char *gsm0808_bssap_name(uint8_t msg_type)
 {
 	return get_value_string(gsm0808_bssap_names, msg_type);
diff --git a/src/gsm/gsm0808_utils.c b/src/gsm/gsm0808_utils.c
index 210f64e..34e10bb 100644
--- a/src/gsm/gsm0808_utils.c
+++ b/src/gsm/gsm0808_utils.c
@@ -44,7 +44,7 @@
  *  @{
  */
 
-/*! \brief Encode TS 08.08 AoIP transport address IE
+/*! Encode TS 08.08 AoIP transport address IE
  *  \param[out] msg Message Buffer to which to append IE
  *  \param[in] ss Socket Address to be used in IE
  *  \returns number of bytes added to \a msg */
@@ -88,7 +88,7 @@
 	return *tlv_len + 2;
 }
 
-/*! \brief Decode TS 08.08 AoIP transport address IE
+/*! Decode TS 08.08 AoIP transport address IE
  *  \param[out] ss Caller-provided memory where decoded socket addr is stored
  *  \param[in] elem pointer to IE value
  *  \param[in] len length of \a elem in bytes
@@ -223,7 +223,7 @@
 	return (uint8_t) (msg->tail - old_tail);
 }
 
-/*! \brief Encode TS 08.08 Speech Codec IE
+/*! Encode TS 08.08 Speech Codec IE
  *  \param[out] msg Message Buffer to which IE will be appended
  *  \param[in] sc Speech Codec to be encoded into IE
  *  \returns number of bytes appended to \a msg */
@@ -247,7 +247,7 @@
 	return *tlv_len + 2;
 }
 
-/*! \brief Decode TS 08.08 Speech Codec IE
+/*! Decode TS 08.08 Speech Codec IE
  *  \param[out] sc Caller-allocated memory for Speech Codec
  *  \param[in] elem IE value to be decoded
  *  \param[in] len Length of \a elem in bytes
@@ -328,7 +328,7 @@
 	return (int)(elem - old_elem);
 }
 
-/*! \brief Encode TS 08.08 Speech Codec list
+/*! Encode TS 08.08 Speech Codec list
  *  \param[out] msg  Message Buffer to which IE is to be appended
  *  \param[in] scl Speech Codec List to be encoded into IE
  *  \returns number of bytes added to \a msg */
@@ -363,7 +363,7 @@
 	return *tlv_len + 2;
 }
 
-/*! \brief Decode TS 08.08 Speech Codec list IE
+/*! Decode TS 08.08 Speech Codec list IE
  *  \param[out] scl Caller-provided memory to store codec list
  *  \param[in] elem IE value to be decoded
  *  \param[in] len Length of \a elem in bytes
@@ -408,7 +408,7 @@
 	return (int)(elem - old_elem);
 }
 
-/*! \brief Encode TS 08.08 Channel Type IE
+/*! Encode TS 08.08 Channel Type IE
  *  \param[out] msg Message Buffer to which IE is to be appended
  *  \param[in] ct Channel Type to be encoded
  *  \returns number of bytes added to \a msg */
@@ -450,7 +450,7 @@
 	return *tlv_len + 2;
 }
 
-/*! \brief Decode TS 08.08 Channel Type IE
+/*! Decode TS 08.08 Channel Type IE
  *  \param[out] ct Caller-provided memory to store channel type
  *  \param[in] elem IE Value to be decoded
  *  \param[in] len Length of \a elem in bytes
@@ -488,7 +488,7 @@
 	return (int)(elem - old_elem);
 }
 
-/*! \brief Encode TS 08.08 Encryption Information IE
+/*! Encode TS 08.08 Encryption Information IE
  *  \param[out] msg Message Buffer to which IE is to be appended
  *  \param[in] ei Encryption Information to be encoded
  *  \returns number of bytes appended to \a msg */
@@ -526,7 +526,7 @@
 	return *tlv_len + 2;
 }
 
-/*! \brief Decode TS 08.08 Encryption Information IE
+/*! Decode TS 08.08 Encryption Information IE
  *  \param[out] ei Caller-provided memory to store encryption information
  *  \param[in] elem IE value to be decoded
  *  \param[in] len Length of \a elem in bytes
@@ -565,7 +565,7 @@
 	return (int)(elem - old_elem);
 }
 
-/*! \brief Encode TS 08.08 Cell Identifier List IE
+/*! Encode TS 08.08 Cell Identifier List IE
  *  \param[out] msg Message Buffer to which IE is to be appended
  *  \param[in] cil Cell ID List to be encoded
  *  \returns number of bytes appended to \a msg */
@@ -604,7 +604,7 @@
 	return *tlv_len + 2;
 }
 
-/*! \brief Decode Cell Identifier List IE
+/*! Decode Cell Identifier List IE
  *  \param[out] cil Caller-provided memory to store Cell ID list
  *  \param[in] elem IE value to be decoded
  *  \param[in] len Length of \a elem in bytes
@@ -650,7 +650,7 @@
 	return (int)(elem - old_elem);
 }
 
-/*! \brief Convert the representation of the permitted speech codec identifier
+/*! Convert the representation of the permitted speech codec identifier
  *  that is used in struct gsm0808_channel_type to the speech codec
  *  representation we use in struct gsm0808_speech_codec.
  *  \param[in] perm_spch to be converted (see also gsm0808_permitted_speech)
@@ -687,7 +687,7 @@
 	return -EINVAL;
 }
 
-/*! \brief Extrapolate a speech codec field from a given permitted speech
+/*! Extrapolate a speech codec field from a given permitted speech
  *  parameter (channel type).
  *  \param[out] sc Caller provided memory to store the resulting speech codec
  *  \param[in] perm_spch value that is used to derive the speech codec info
diff --git a/src/gsm/gsm48.c b/src/gsm/gsm48.c
index 405c904..227dbef 100644
--- a/src/gsm/gsm48.c
+++ b/src/gsm/gsm48.c
@@ -41,10 +41,10 @@
 
 /*! \addtogroup gsm0408
  *  @{
- *  \brief GSM Mobile Radion Interface L3 messages / TS 04.08
+ *  GSM Mobile Radion Interface L3 messages / TS 04.08
  */
 
-/*! \brief TLV parser definitions for TS 04.08 CC */
+/*! TLV parser definitions for TS 04.08 CC */
 const struct tlv_definition gsm48_att_tlvdef = {
 	.def = {
 		[GSM48_IE_MOBILE_ID]	= { TLV_TYPE_TLV },
@@ -86,7 +86,7 @@
 	},
 };
 
-/*! \brief TLV parser definitions for TS 04.08 RR */
+/*! TLV parser definitions for TS 04.08 RR */
 const struct tlv_definition gsm48_rr_att_tlvdef = {
 	.def = {
 		/* NOTE: Don't add IE 17 = MOBILE_ID here, it already used. */
@@ -131,7 +131,7 @@
 	},
 };
 
-/*! \brief TLV parser definitions for TS 04.08 MM */
+/*! TLV parser definitions for TS 04.08 MM */
 const struct tlv_definition gsm48_mm_att_tlvdef = {
 	.def = {
 		[GSM48_IE_MOBILE_ID]		= { TLV_TYPE_TLV },
@@ -170,7 +170,7 @@
 	{ 0,					NULL },
 };
 
-/*! \brief return string representation of RR Cause value */
+/*! return string representation of RR Cause value */
 const char *rr_cause_name(uint8_t cause)
 {
 	return get_value_string(rr_cause_names, cause);
@@ -212,7 +212,7 @@
 	"illegal state 31",
 };
 
-/*! \brief return string representation of CC State */
+/*! return string representation of CC State */
 const char *gsm48_cc_state_name(uint8_t state)
 {
 	if (state < ARRAY_SIZE(cc_state_names))
@@ -260,7 +260,7 @@
 	{ 0,				NULL }
 };
 
-/*! \brief return string representation of CC Message Type */
+/*! return string representation of CC Message Type */
 const char *gsm48_cc_msg_name(uint8_t msgtype)
 {
 	return get_value_string(cc_msg_names, msgtype);
@@ -368,7 +368,7 @@
 	{ 0,				NULL }
 };
 
-/*! \brief return string representation of RR Message Type */
+/*! return string representation of RR Message Type */
 const char *gsm48_rr_msg_name(uint8_t msgtype)
 {
 	return get_value_string(rr_msg_names, msgtype);
@@ -408,7 +408,7 @@
 	{ 0,			NULL }
 };
 
-/*! \brief return string representation of Mobile Identity Type */
+/*! return string representation of Mobile Identity Type */
 const char *gsm48_mi_type_name(uint8_t mi)
 {
 	return get_value_string(mi_type_names, mi);
@@ -423,7 +423,7 @@
 	bcd[0] = val % 10;
 }
 
-/*! \brief Checks is particular message is cipherable in A/Gb mode according to
+/*! Checks is particular message is cipherable in A/Gb mode according to
  *         3GPP TS 24.008 § 4.7.1.2
  *  \param[in] hdr Message header
  *  \return true if message can be encrypted, false otherwise
@@ -447,7 +447,7 @@
 	}
 }
 
-/* \brief Convert MCC + MNC to BCD representation
+/* Convert MCC + MNC to BCD representation
  * \param[out] bcd_dst caller-allocated memory for output
  * \param[in] mcc Mobile Country Code
  * \param[in] mnc Mobile Network Code
@@ -492,7 +492,7 @@
 	}
 }
 
-/*! \brief Encode TS 04.08 Location Area Identifier
+/*! Encode TS 04.08 Location Area Identifier
  *  \param[out] caller-provided memory for output
  *  \param[in] mcc Mobile Country Code
  *  \param[in] mnc Mobile Network Code
@@ -504,7 +504,7 @@
 	lai48->lac = osmo_htons(lac);
 }
 
-/*! \brief Decode TS 04.08 Location Area Identifier
+/*! Decode TS 04.08 Location Area Identifier
  *  \param[in] Location Area Identifier (encoded)
  *  \param[out] mcc Mobile Country Code
  *  \param[out] mnc Mobile Network Code
@@ -520,7 +520,7 @@
 	return 0;
 }
 
-/*! \brief Set DTX mode in Cell Options IE (3GPP TS 44.018)
+/*! Set DTX mode in Cell Options IE (3GPP TS 44.018)
  *  \param[in] op Cell Options structure in which DTX parameters will be set
  *  \param[in] full Mode for full-rate channels
  *  \param[in] half Mode for half-rate channels
@@ -564,7 +564,7 @@
 	}
 }
 
-/*! \brief Generate TS 04.08 Mobile ID from TMSI
+/*! Generate TS 04.08 Mobile ID from TMSI
  *  \param[out] buf Caller-provided output buffer (7 bytes)
  *  \param[in] tmsi TMSI to be encoded
  *  \returns number of byes encoded (always 7) */
@@ -580,7 +580,7 @@
 	return 7;
 }
 
-/*! \brief Generate TS 04.08 Mobile ID from IMSI
+/*! Generate TS 04.08 Mobile ID from IMSI
  *  \param[out] buf Caller-provided output buffer
  *  \param[in] imsi IMSI to be encoded
  *  \returns number of bytes used in \a buf */
@@ -613,7 +613,7 @@
 	return 2 + buf[1];
 }
 
-/*! \brief Convert TS 04.08 Mobile Identity (10.5.1.4) to string
+/*! Convert TS 04.08 Mobile Identity (10.5.1.4) to string
  *  \param[out] string Caller-provided buffer for output
  *  \param[in] str_len Length of \a string in bytes
  *  \param[in] mi Mobile Identity to be stringified
@@ -661,7 +661,7 @@
 	return str_cur - string;
 }
 
-/*! \brief Parse TS 04.08 Routing Area Identifier
+/*! Parse TS 04.08 Routing Area Identifier
  *  \param[out] Caller-provided memory for decoded RA ID
  *  \param[in] buf Input buffer pointing to RAI IE value */
 void gsm48_parse_ra(struct gprs_ra_id *raid, const uint8_t *buf)
@@ -685,7 +685,7 @@
 	raid->rac = buf[5];
 }
 
-/*! \brief Encode a TS 04.08 Routing Area Identifier
+/*! Encode a TS 04.08 Routing Area Identifier
  *  \param[out] buf Caller-provided output buffer of 6 bytes
  *  \param[in] raid Routing Area ID to be encoded
  *  \returns number of bytes used in \a buf */
@@ -716,7 +716,7 @@
 	return 6;
 }
 
-/*! \brief Determine number of paging sub-channels
+/*! Determine number of paging sub-channels
  *  \param[in] chan_desc Control Channel Description
  *  \returns number of paging sub-channels
  *
@@ -733,7 +733,7 @@
 		return n_pag_blocks * (chan_desc->bs_pa_mfrms + 2);
 }
 
-/*! \brief TS 04.08 Protocol Descriptor names */
+/*! TS 04.08 Protocol Descriptor names */
 const struct value_string gsm48_pdisc_names[] = {
 	OSMO_VALUE_STRING(GSM48_PDISC_GROUP_CC),
 	OSMO_VALUE_STRING(GSM48_PDISC_BCAST_CC),
@@ -753,7 +753,7 @@
 	{ 0, NULL }
 };
 
-/*! \brief TS 04.08 RR Message Type names */
+/*! TS 04.08 RR Message Type names */
 const struct value_string gsm48_rr_msgtype_names[] = {
 	OSMO_VALUE_STRING(GSM48_MT_RR_INIT_REQ),
 	OSMO_VALUE_STRING(GSM48_MT_RR_ADD_ASS),
@@ -846,7 +846,7 @@
 	{ 0, NULL }
 };
 
-/*! \brief TS 04.08 MM Message Type names */
+/*! TS 04.08 MM Message Type names */
 const struct value_string gsm48_mm_msgtype_names[] = {
 	OSMO_VALUE_STRING(GSM48_MT_MM_IMSI_DETACH_IND),
 	OSMO_VALUE_STRING(GSM48_MT_MM_LOC_UPD_ACCEPT),
@@ -876,7 +876,7 @@
 	{ 0, NULL }
 };
 
-/*! \brief TS 04.08 CC Message Type names */
+/*! TS 04.08 CC Message Type names */
 const struct value_string gsm48_cc_msgtype_names[] = {
 	OSMO_VALUE_STRING(GSM48_MT_CC_ALERTING),
 	OSMO_VALUE_STRING(GSM48_MT_CC_CALL_CONF),
@@ -919,7 +919,7 @@
 	{ 0, NULL }
 };
 
-/*! \brief Compose a string naming the message type for given protocol.
+/*! Compose a string naming the message type for given protocol.
  * If the message type string is known, return the message type name, otherwise
  * return "<protocol discriminator name>:<message type in hex>".
  * \param[in] pdisc protocol discriminator like GSM48_PDISC_MM
diff --git a/src/gsm/gsm48_ie.c b/src/gsm/gsm48_ie.c
index 20d0075..d3a868d 100644
--- a/src/gsm/gsm48_ie.c
+++ b/src/gsm/gsm48_ie.c
@@ -43,7 +43,7 @@
 	'8', '9', '*', '#', 'a', 'b', 'c', '\0'
 };
 
-/*! \brief decode a 'called/calling/connect party BCD number' as in 10.5.4.7
+/*! decode a 'called/calling/connect party BCD number' as in 10.5.4.7
  *  \param[out] Caller-provided output buffer
  *  \param[in] bcd_lv Length-Value portion of to-be-decoded IE
  *  \param[in] h_len Length of an optional heder between L and V portion
@@ -73,7 +73,7 @@
 	return 0;
 }
 
-/*! \brief convert a single ASCII character to call-control BCD */
+/*! convert a single ASCII character to call-control BCD */
 static int asc_to_bcd(const char asc)
 {
 	int i;
@@ -85,7 +85,7 @@
 	return -EINVAL;
 }
 
-/*! \brief convert a ASCII phone number to 'called/calling/connect party BCD number'
+/*! convert a ASCII phone number to 'called/calling/connect party BCD number'
  *  \param[out] bcd_lv Caller-provided output buffer
  *  \param[in] max_len Maximum Length of \a bcd_lv
  *  \param[in] h_len Length of an optional heder between L and V portion
@@ -123,7 +123,7 @@
 	return (bcd_cur - bcd_lv);
 }
 
-/*! \brief Decode TS 04.08 Bearer Capability IE (10.5.4.5)
+/*! Decode TS 04.08 Bearer Capability IE (10.5.4.5)
  *  \param[out] Caller-provided memory for decoded output
  *  \[aram[in] LV portion of TS 04.08 Bearer Capability
  *  \returns 0 on success; negative on error */
@@ -235,7 +235,7 @@
 	return 0;
 }
 
-/*! \brief Encode TS 04.08 Bearer Capability IE (10.5.4.5)
+/*! Encode TS 04.08 Bearer Capability IE (10.5.4.5)
  *  \param[out] msg Message Buffer to which IE is to be appended
  *  \param[in] lv_only Write only LV portion (1) or TLV (0)
  *  \param[in] bcap Decoded Bearer Capability to be encoded
@@ -294,7 +294,7 @@
 	return 0;
 }
 
-/*! \brief Decode TS 04.08 Call Control Capabilities IE (10.5.4.5a)
+/*! Decode TS 04.08 Call Control Capabilities IE (10.5.4.5a)
  *  \param[out] Caller-provided memory for decoded CC capabilities
  *  \param[in] lv Length-Value of IE
  *  \retursns 0 on success; negative on error */
@@ -312,7 +312,7 @@
 	return 0;
 }
 
-/*! \brief Encodoe TS 04.08 Call Control Capabilities (10.5.4.5a)
+/*! Encodoe TS 04.08 Call Control Capabilities (10.5.4.5a)
  *  \param[out] msg Message Buffer to which to append IE (as TLV)
  *  \param[in] ccap Decoded CC Capabilities to be encoded
  *  \returns 0 on success; negative on error */
@@ -333,7 +333,7 @@
 	return 0;
 }
 
-/*! \brief Decode TS 04.08 Called Party BCD Number IE (10.5.4.7)
+/*! Decode TS 04.08 Called Party BCD Number IE (10.5.4.7)
  *  \param[out] called Caller-provided memory for decoded number
  *  \param[in] lv Length-Value portion of IE
  *  \returns 0 on success; negative on error */
@@ -355,7 +355,7 @@
 	return 0;
 }
 
-/*! \brief Encode TS 04.08 Called Party IE (10.5.4.7)
+/*! Encode TS 04.08 Called Party IE (10.5.4.7)
  *  \param[out] msg Mesage Buffer to which to append IE (as TLV)
  *  \param[in] called MNCC Number to encode/append
  *  \returns 0 on success; negative on error */
@@ -380,7 +380,7 @@
 	return 0;
 }
 
-/*! \brief Decode TS 04.08 Caller ID
+/*! Decode TS 04.08 Caller ID
  *  \param[out] called Caller-provided memory for decoded number
  *  \param[in] lv Length-Value portion of IE
  *  \returns 0 on success; negative on error */
@@ -410,7 +410,7 @@
 	return 0;
 }
 
-/*! \brief Encode TS 04.08 Caller ID IE
+/*! Encode TS 04.08 Caller ID IE
  *  \param[out] msg Mesage Buffer to which to append IE (as TLV)
  *  \param[in] ie IE Identifier (tag)
  *  \param[in] max_len maximum generated output in bytes
@@ -446,7 +446,7 @@
 	return 0;
 }
 
-/*! \brief Decode TS 04.08 Cause IE (10.5.4.11)
+/*! Decode TS 04.08 Cause IE (10.5.4.11)
  *  \param[out] cause Caller-provided memory for output
  *  \param[in] lv LV portion of Cause IE
  *  \returns 0 on success; negative on error */
@@ -492,7 +492,7 @@
 	return 0;
 }
 
-/*! \brief Encode TS 04.08 Cause IE (10.5.4.11)
+/*! Encode TS 04.08 Cause IE (10.5.4.11)
  *  \param[out] msg Message Buffer to which to append IE
  *  \param[in] lv_only Encode as LV (1) or TLV (0)
  *  \param[in] cause Cause value to be encoded
@@ -536,49 +536,49 @@
 	return 0;
 }
 
-/*! \brief Decode TS 04.08 Calling Number IE (10.5.4.9) */
+/*! Decode TS 04.08 Calling Number IE (10.5.4.9) */
 int gsm48_decode_calling(struct gsm_mncc_number *calling,
 			 const uint8_t *lv)
 {
 	return gsm48_decode_callerid(calling, lv);
 }
 
-/*! \brief Encode TS 04.08 Calling Number IE (10.5.4.9) */
+/*! Encode TS 04.08 Calling Number IE (10.5.4.9) */
 int gsm48_encode_calling(struct msgb *msg, 
 			  const struct gsm_mncc_number *calling)
 {
 	return gsm48_encode_callerid(msg, GSM48_IE_CALLING_BCD, 14, calling);
 }
 
-/*! \brief Decode TS 04.08 Connected Number IE (10.5.4.13) */
+/*! Decode TS 04.08 Connected Number IE (10.5.4.13) */
 int gsm48_decode_connected(struct gsm_mncc_number *connected,
 			 const uint8_t *lv)
 {
 	return gsm48_decode_callerid(connected, lv);
 }
 
-/*! \brief Encode TS 04.08 Connected Number IE (10.5.4.13) */
+/*! Encode TS 04.08 Connected Number IE (10.5.4.13) */
 int gsm48_encode_connected(struct msgb *msg,
 			    const struct gsm_mncc_number *connected)
 {
 	return gsm48_encode_callerid(msg, GSM48_IE_CONN_BCD, 14, connected);
 }
 
-/*! \brief Decode TS 04.08 Redirecting Number IE (10.5.4.21b) */
+/*! Decode TS 04.08 Redirecting Number IE (10.5.4.21b) */
 int gsm48_decode_redirecting(struct gsm_mncc_number *redirecting,
 			 const uint8_t *lv)
 {
 	return gsm48_decode_callerid(redirecting, lv);
 }
 
-/*! \brief Encode TS 04.08 Redirecting Number IE (10.5.4.21b) */
+/*! Encode TS 04.08 Redirecting Number IE (10.5.4.21b) */
 int gsm48_encode_redirecting(struct msgb *msg,
 			      const struct gsm_mncc_number *redirecting)
 {
 	return gsm48_encode_callerid(msg, GSM48_IE_REDIR_BCD, 19, redirecting);
 }
 
-/*! \brief Decode TS 04.08 Facility IE (10.5.4.15) */
+/*! Decode TS 04.08 Facility IE (10.5.4.15) */
 int gsm48_decode_facility(struct gsm_mncc_facility *facility,
 			   const uint8_t *lv)
 {
@@ -596,7 +596,7 @@
 	return 0;
 }
 
-/*! \brief Encode TS 04.08 Facility IE (10.5.4.15) */
+/*! Encode TS 04.08 Facility IE (10.5.4.15) */
 int gsm48_encode_facility(struct msgb *msg, int lv_only,
 			   const struct gsm_mncc_facility *facility)
 {
@@ -615,7 +615,7 @@
 	return 0;
 }
 
-/*! \brief Decode TS 04.08 Notify IE (10.5.4.20) */
+/*! Decode TS 04.08 Notify IE (10.5.4.20) */
 int gsm48_decode_notify(int *notify, const uint8_t *v)
 {
 	*notify = v[0] & 0x7f;
@@ -623,7 +623,7 @@
 	return 0;
 }
 
-/*! \brief Encode TS 04.08 Notify IE (10.5.4.20) */
+/*! Encode TS 04.08 Notify IE (10.5.4.20) */
 int gsm48_encode_notify(struct msgb *msg, int notify)
 {
 	msgb_v_put(msg, notify | 0x80);
@@ -631,7 +631,7 @@
 	return 0;
 }
 
-/*! \brief Decode TS 04.08 Signal IE (10.5.4.23) */
+/*! Decode TS 04.08 Signal IE (10.5.4.23) */
 int gsm48_decode_signal(int *signal, const uint8_t *v)
 {
 	*signal = v[0];
@@ -639,7 +639,7 @@
 	return 0;
 }
 
-/*! \brief Encode TS 04.08 Signal IE (10.5.4.23) */
+/*! Encode TS 04.08 Signal IE (10.5.4.23) */
 int gsm48_encode_signal(struct msgb *msg, int signal)
 {
 	msgb_tv_put(msg, GSM48_IE_SIGNAL, signal);
@@ -647,7 +647,7 @@
 	return 0;
 }
 
-/*! \brief Decode TS 04.08 Keypad IE (10.5.4.17) */
+/*! Decode TS 04.08 Keypad IE (10.5.4.17) */
 int gsm48_decode_keypad(int *keypad, const uint8_t *lv)
 {
 	uint8_t in_len = lv[0];
@@ -660,7 +660,7 @@
 	return 0;
 }
 
-/*! \brief Encode TS 04.08 Keypad IE (10.5.4.17) */
+/*! Encode TS 04.08 Keypad IE (10.5.4.17) */
 int gsm48_encode_keypad(struct msgb *msg, int keypad)
 {
 	msgb_tv_put(msg, GSM48_IE_KPD_FACILITY, keypad);
@@ -668,7 +668,7 @@
 	return 0;
 }
 
-/*! \brief Decode TS 04.08 Progress IE (10.5.4.21) */
+/*! Decode TS 04.08 Progress IE (10.5.4.21) */
 int gsm48_decode_progress(struct gsm_mncc_progress *progress,
 			   const uint8_t *lv)
 {
@@ -684,7 +684,7 @@
 	return 0;
 }
 
-/*! \brief Encode TS 04.08 Progress IE (10.5.4.21) */
+/*! Encode TS 04.08 Progress IE (10.5.4.21) */
 int gsm48_encode_progress(struct msgb *msg, int lv_only,
 			   const struct gsm_mncc_progress *p)
 {
@@ -701,7 +701,7 @@
 	return 0;
 }
 
-/*! \brief Decode TS 04.08 User-User IE (10.5.4.25) */
+/*! Decode TS 04.08 User-User IE (10.5.4.25) */
 int gsm48_decode_useruser(struct gsm_mncc_useruser *uu,
 			   const uint8_t *lv)
 {
@@ -727,7 +727,7 @@
 	return 0;
 }
 
-/*! \brief Encode TS 04.08 User-User IE (10.5.4.25) */
+/*! Encode TS 04.08 User-User IE (10.5.4.25) */
 int gsm48_encode_useruser(struct msgb *msg, int lv_only,
 			   const struct gsm_mncc_useruser *uu)
 {
@@ -747,7 +747,7 @@
 	return 0;
 }
 
-/*! \brief Decode TS 04.08 SS Version IE (10.5.4.24) */
+/*! Decode TS 04.08 SS Version IE (10.5.4.24) */
 int gsm48_decode_ssversion(struct gsm_mncc_ssversion *ssv,
 			    const uint8_t *lv)
 {
@@ -762,7 +762,7 @@
 	return 0;
 }
 
-/*! \brief Encode TS 04.08 SS Version IE (10.5.4.24) */
+/*! Encode TS 04.08 SS Version IE (10.5.4.24) */
 int gsm48_encode_ssversion(struct msgb *msg,
 			   const struct gsm_mncc_ssversion *ssv)
 {
@@ -780,7 +780,7 @@
 
 /* decode 'more data' does not require a function, because it has no value */
 
-/*! \brief Encode TS 04.08 More Data IE (10.5.4.19) */
+/*! Encode TS 04.08 More Data IE (10.5.4.19) */
 int gsm48_encode_more(struct msgb *msg)
 {
 	uint8_t *ie;
@@ -803,7 +803,7 @@
 	return res;
 }
 
-/*! \brief Decode TS 04.08 Cell Channel Description IE (10.5.2.1b) and other frequency lists
+/*! Decode TS 04.08 Cell Channel Description IE (10.5.2.1b) and other frequency lists
  *  \param[out] f Caller-provided output memory
  *  \param[in] cd Cell Channel Description IE
  *  \param[in] len Length of \a cd in bytes
diff --git a/src/gsm/gsm_04_08_gprs.c b/src/gsm/gsm_04_08_gprs.c
index bd986d7..7bcef4e 100644
--- a/src/gsm/gsm_04_08_gprs.c
+++ b/src/gsm/gsm_04_08_gprs.c
@@ -30,7 +30,7 @@
  *  @{
  */
 
-/*! \brief 10.5.5.14 GPRS MM Cause / Table 10.5.147 */
+/*! 10.5.5.14 GPRS MM Cause / Table 10.5.147 */
 const struct value_string gsm48_gmm_cause_names_[] = {
 	{ GMM_CAUSE_IMSI_UNKNOWN,	"IMSI unknown in HLR" },
 	{ GMM_CAUSE_ILLEGAL_MS,		"Illegal MS" },
@@ -75,7 +75,7 @@
 
 const struct value_string *gsm48_gmm_cause_names = gsm48_gmm_cause_names_;
 
-/*! \brief 10.5.6.6 SM Cause / Table 10.5.157 */
+/*! 10.5.6.6 SM Cause / Table 10.5.157 */
 const struct value_string gsm48_gsm_cause_names_[] = {
 	{ GSM_CAUSE_OPER_DET_BARR, "Operator Determined Barring" },
 	{ GSM_CAUSE_MBMS_CAP_INSUF, "MBMS bearer capabilities insufficient for the service" },
@@ -115,7 +115,7 @@
 
 const struct value_string *gsm48_gsm_cause_names = gsm48_gsm_cause_names_;
 
-/*! \brief Check if MS supports particular version of GEA by inspecting
+/*! Check if MS supports particular version of GEA by inspecting
  *         MS network capability IE specified in 3GPP TS 24.008
  *  \param[in] ms_net_cap Buffer with raw MS network capability IE value,
  *                        3 - 10 bytes
@@ -142,7 +142,7 @@
 	}
 }
 
-/*! \brief String names of GMM message types */
+/*! String names of GMM message types */
 const struct value_string gprs_msgt_gmm_names[] = {
 	{ GSM48_MT_GMM_ATTACH_REQ,		"ATTACH REQUEST" },
 	{ GSM48_MT_GMM_ATTACH_ACK,		"ATTACH ACK" },
@@ -167,7 +167,7 @@
 	{ 0, NULL }
 };
 
-/*! \brief String names of GPRS Attach types according to 10.5.5.2 */
+/*! String names of GPRS Attach types according to 10.5.5.2 */
 const struct value_string gprs_att_t_strs_[] = {
 	{ GPRS_ATT_T_ATTACH,		"GPRS attach" },
 	{ GPRS_ATT_T_ATT_WHILE_IMSI,	"GPRS attach while IMSI attached" },
@@ -177,7 +177,7 @@
 
 const struct value_string *gprs_att_t_strs = gprs_att_t_strs_;
 
-/*! \brief String names of GPRS Location Update Types */
+/*! String names of GPRS Location Update Types */
 const struct value_string gprs_upd_t_strs_[] = {
 	{ GPRS_UPD_T_RA,		"RA updating" },
 	{ GPRS_UPD_T_RA_LA,		"combined RA/LA updating" },
@@ -188,7 +188,7 @@
 
 const struct value_string *gprs_upd_t_strs = gprs_upd_t_strs_;
 
-/*! \brief String names of GMM MO Detach Types according to 10.5.5.5 */
+/*! String names of GMM MO Detach Types according to 10.5.5.5 */
 const struct value_string gprs_det_t_mo_strs_[] = {
 	{ GPRS_DET_T_MO_GPRS,		"GPRS detach" },
 	{ GPRS_DET_T_MO_IMSI,		"IMSI detach" },
@@ -198,7 +198,7 @@
 
 const struct value_string *gprs_det_t_mo_strs = gprs_det_t_mo_strs_;
 
-/*! \brief String names of GMM MT Detach Types according to 10.5.5.5 */
+/*! String names of GMM MT Detach Types according to 10.5.5.5 */
 const struct value_string gprs_det_t_mt_strs_[] = {
 	{ GPRS_DET_T_MT_REATT_REQ,	"re-attach required" },
 	{ GPRS_DET_T_MT_REATT_NOTREQ,	"re-attach not required" },
@@ -208,7 +208,7 @@
 
 const struct value_string *gprs_det_t_mt_strs = gprs_det_t_mt_strs_;
 
-/*! \brief String names of GMM Service Types */
+/*! String names of GMM Service Types */
 const struct value_string gprs_service_t_strs_[] = {
 	{ GPRS_SERVICE_T_SIGNALLING,	"signalling" },
 	{ GPRS_SERVICE_T_DATA,		"data" },
diff --git a/src/gsm/gsm_utils.c b/src/gsm/gsm_utils.c
index 9cb5df6..fd16e98 100644
--- a/src/gsm/gsm_utils.c
+++ b/src/gsm/gsm_utils.c
@@ -146,7 +146,7 @@
 	return octet_len;
 }
 
-/*! \brief TS 03.38 7-bit Character unpacking (6.2.1)
+/*! TS 03.38 7-bit Character unpacking (6.2.1)
  *  \param[out] text Caller-provided output text buffer
  *  \param[in] n Length of \a text
  *  \param[in] user_data Input Data (septets)
@@ -210,13 +210,13 @@
 	return text - text_buf_begin;
 }
 
-/*! \brief Decode 7bit GSM Alphabet */
+/*! Decode 7bit GSM Alphabet */
 int gsm_7bit_decode_n(char *text, size_t n, const uint8_t *user_data, uint8_t septet_l)
 {
 	return gsm_7bit_decode_n_hdr(text, n, user_data, septet_l, 0);
 }
 
-/*! \brief Decode 7bit GSM Alphabet (USSD) */
+/*! Decode 7bit GSM Alphabet (USSD) */
 int gsm_7bit_decode_n_ussd(char *text, size_t n, const uint8_t *user_data, uint8_t length)
 {
 	int nchars;
@@ -229,7 +229,7 @@
 	return nchars;
 }
 
-/*! \brief Encode a ASCII characterrs as 7-bit GSM alphabet (TS 03.38)
+/*! Encode a ASCII characterrs as 7-bit GSM alphabet (TS 03.38)
  *
  *  This function converts a zero-terminated input string \a data from
  *  ASCII into octet-aligned 7-bit GSM characters. No packing is
@@ -266,7 +266,7 @@
 	return y;
 }
 
-/*! \brief GSM Default Alphabet 7bit to octet packing
+/*! GSM Default Alphabet 7bit to octet packing
  *  \param[out] result Caller-provided output buffer
  *  \param[in] rdata Input data septets
  *  \param[in] septet_len Length of \a rdata
@@ -317,7 +317,7 @@
 	return z;
 }
 
-/*! \brief GSM 7-bit alphabet TS 03.38 6.2.1 Character packing
+/*! GSM 7-bit alphabet TS 03.38 6.2.1 Character packing
  *  \param[out] result Caller-provided output buffer
  *  \param[in] n Maximum length of \a result in bytes
  *  \param[in] data octet-aligned string
@@ -361,7 +361,7 @@
 	return y;
 }
 
-/*! \brief Encode according to GSM 7-bit alphabet (TS 03.38 6.2.1) for USSD
+/*! Encode according to GSM 7-bit alphabet (TS 03.38 6.2.1) for USSD
  *  \param[out] result Caller-provided output buffer
  *  \param[in] n Maximum length of \a result in bytes
  *  \param[in] data octet-aligned string
@@ -385,7 +385,7 @@
 	return y;
 }
 
-/*! \brief Build the RSL uplink measurement IE (3GPP TS 08.58 § 9.3.25)
+/*! Build the RSL uplink measurement IE (3GPP TS 08.58 § 9.3.25)
  *  \param[in] mru Unidirectional measurement report structure
  *  \param[in] dtxd_used Indicates if DTXd was used during measurement report
  *             period
@@ -403,7 +403,7 @@
 	return 3;
 }
 
-/*! \brief Convert power class to dBm according to GSM TS 05.05
+/*! Convert power class to dBm according to GSM TS 05.05
  *  \param[in] band GSM frequency band
  *  \param[in] class GSM power class
  *  \returns maximum transmit power of power class in dBm */
@@ -447,7 +447,7 @@
 	return -EINVAL;
 }
 
-/*! \brief determine power control level for given dBm value, as indicated
+/*! determine power control level for given dBm value, as indicated
  *  by the tables in chapter 4.1.1 of GSM TS 05.05
  *  \param[in] GSM frequency band
  *  \param[in] dbm RF power value in dBm
@@ -500,7 +500,7 @@
 	return -EINVAL;
 }
 
-/*! \brief Convert TS 05.05 power level to absolute dBm value
+/*! Convert TS 05.05 power level to absolute dBm value
  *  \param[in] band GSM frequency band
  *  \param[in] lvl TS 05.05 power control level
  *  \returns RF power level in dBm */
@@ -542,7 +542,7 @@
 	return -EINVAL;
 }
 
-/*! \brief Convert TS 05.08 RxLev to dBm (TS 05.08 Chapter 8.1.4)
+/*! Convert TS 05.08 RxLev to dBm (TS 05.08 Chapter 8.1.4)
  *  \param[in] rxlev TS 05.08 RxLev value
  *  \returns Received RF power in dBm */
 int rxlev2dbm(uint8_t rxlev)
@@ -553,7 +553,7 @@
 	return -110 + rxlev;
 }
 
-/*! \brief Convert RF signal level in dBm to TS 05.08 RxLev (TS 05.08 Chapter 8.1.4)
+/*! Convert RF signal level in dBm to TS 05.08 RxLev (TS 05.08 Chapter 8.1.4)
  *  \param[in] dbm RF signal level in dBm
  *  \returns TS 05.08 RxLev value */
 uint8_t dbm2rxlev(int dbm)
@@ -568,7 +568,7 @@
 	return rxlev;
 }
 
-/*! \brief Return string name of a given GSM Band */
+/*! Return string name of a given GSM Band */
 const char *gsm_band_name(enum gsm_band band)
 {
 	switch (band) {
@@ -592,7 +592,7 @@
 	return "invalid";
 }
 
-/*! \brief Parse string name of a GSM band */
+/*! Parse string name of a GSM band */
 enum gsm_band gsm_band_parse(const char* mhz)
 {
 	while (*mhz && !isdigit(*mhz))
@@ -623,7 +623,7 @@
 	}
 }
 
-/*! \brief Resolve GSM band from ARFCN
+/*! Resolve GSM band from ARFCN
  *  In Osmocom, we use the highest bit of the \a arfcn to indicate PCS
  *  \param[in] arfcn Osmocom ARFCN, highest bit determines PCS mode
  *  \returns GSM Band */
@@ -676,7 +676,7 @@
 	{ /* Guard */ }
 };
 
-/*! \brief Convert an ARFCN to the frequency in MHz * 10
+/*! Convert an ARFCN to the frequency in MHz * 10
  *  \param[in] arfcn GSM ARFCN to convert
  *  \param[in] uplink Uplink (1) or Downlink (0) frequency
  *  \returns Frequency in units of 1/10ths of MHz (100kHz) */
@@ -703,7 +703,7 @@
 	return uplink ? freq10_ul : freq10_dl;
 }
 
-/*! \brief Convert a Frequency in MHz * 10 to ARFCN
+/*! Convert a Frequency in MHz * 10 to ARFCN
  *  \param[in] freq10 Frequency in units of 1/10ths of MHz (100kHz)
  *  \param[in] uplink Frequency is Uplink (1) or Downlink (0)
  *  \returns ARFCN in case of success; 0xffff on error */
@@ -736,7 +736,7 @@
 	return arfcn;
 }
 
-/*! \brief Parse GSM Frame Number into struct \ref gsm_time
+/*! Parse GSM Frame Number into struct \ref gsm_time
  *  \param[out] time Caller-provided memory for \ref gsm_time
  *  \param[in] fn GSM Frame Number */
 void gsm_fn2gsmtime(struct gsm_time *time, uint32_t fn)
@@ -748,7 +748,7 @@
 	time->tc = (time->fn / 51) % 8;
 }
 
-/*! \brief Encode decoded \ref gsm_time to Frame Number
+/*! Encode decoded \ref gsm_time to Frame Number
  *  \param[in] time GSM Time in decoded structure
  *  \returns GSM Frame Number */
 uint32_t gsm_gsmtime2fn(struct gsm_time *time)
@@ -757,7 +757,7 @@
 	return (51 * ((time->t3 - time->t2 + 26) % 26) + time->t3 + (26 * 51 * time->t1));
 }
 
-/*! \brief append range1024 encoded data to bit vector
+/*! append range1024 encoded data to bit vector
  *  \param[out] bv Caller-provided output bit-vector
  *  \param[in] r Input Range1024 sructure */
 void bitvec_add_range1024(struct bitvec *bv, const struct gsm48_range_1024 *r)
@@ -793,7 +793,7 @@
 	bitvec_set_uint(bv, r->w16, 6);
 }
 
-/*! \brief Determine GPRS TLLI Type (TS 23.003 Chapter 2.6) */
+/*! Determine GPRS TLLI Type (TS 23.003 Chapter 2.6) */
 int gprs_tlli_type(uint32_t tlli)
 {
 	if ((tlli & 0xc0000000) == 0xc0000000)
@@ -812,7 +812,7 @@
 	return TLLI_RESERVED;
 }
 
-/*! \brief Determine TLLI from P-TMSI
+/*! Determine TLLI from P-TMSI
  *  \param[in] p_tmsi P-TMSI
  *  \param[in] type TLLI Type we want to derive from \a p_tmsi
  *  \returns TLLI of given type */
diff --git a/src/gsm/gsup.c b/src/gsm/gsup.c
index 3cac201..780198c 100644
--- a/src/gsm/gsup.c
+++ b/src/gsm/gsup.c
@@ -33,7 +33,7 @@
 
 /*! \addtogroup gsup
  *  @{
- *  \brief Osmocom Generic Subscriber Update Protocol
+ *  Osmocom Generic Subscriber Update Protocol
  */
 
 const struct value_string osmo_gsup_message_type_names[] = {
diff --git a/src/gsm/ipa.c b/src/gsm/ipa.c
index 5c37d64..2c7cf58 100644
--- a/src/gsm/ipa.c
+++ b/src/gsm/ipa.c
@@ -43,7 +43,7 @@
 
 /*! \addtogroup ipa
  *  @{
- *  \brief IPA Multiplex utility routines
+ *  IPA Multiplex utility routines
  */
 
 #define IPA_ALLOC_SIZE 1200
@@ -213,7 +213,7 @@
 
 #define IPA_STRING_MAX 64
 
-/*! \brief Generate IPA CCM ID RESP based on list of IEs
+/*! Generate IPA CCM ID RESP based on list of IEs
  *  \param[in] dev Descriptor describing identity data for response
  *  \param[in] ies_req List of IEIs to include in response
  *  \param[in] num_ies_req Number of IEIs in \a ies_req
@@ -296,7 +296,7 @@
 	return msg;
 }
 
-/*! \brief Generate IPA CCM ID RESP based on requets payload
+/*! Generate IPA CCM ID RESP based on requets payload
  *  \param[in] dev Descriptor describing identity data for response
  *  \param[in] data Payload of the IPA CCM ID GET request
  *  \param[in] len Length of \a data in octets
diff --git a/src/gsm/lapd_core.c b/src/gsm/lapd_core.c
index b7a9539..4ad7556 100644
--- a/src/gsm/lapd_core.c
+++ b/src/gsm/lapd_core.c
@@ -23,7 +23,7 @@
 
 /*! \addtogroup lapd
  *  @{
- *  \brief Osmocom LAPD core, used for Q.921, LAPDm and others
+ *  Osmocom LAPD core, used for Q.921, LAPDm and others
  */
 
 /*! \file lapd_core.c */
@@ -332,7 +332,7 @@
 	dl->tx_hist = NULL;
 }
 
-/*! \brief Set the \ref lapdm_mode of a LAPDm entity */
+/*! Set the \ref lapdm_mode of a LAPDm entity */
 int lapd_set_mode(struct lapd_datalink *dl, enum lapd_mode mode)
 {
 	switch (mode) {
diff --git a/src/gsm/lapdm.c b/src/gsm/lapdm.c
index 8ec942f..1152e0d 100644
--- a/src/gsm/lapdm.c
+++ b/src/gsm/lapdm.c
@@ -23,7 +23,7 @@
 
 /*! \addtogroup lapdm
  *  @{
- *  \brief GSM LAPDm (TS 04.06) implementation
+ *  GSM LAPDm (TS 04.06) implementation
  */
 
 /*! \file lapdm.c */
@@ -144,7 +144,7 @@
 	dl->dl.t200_sec = t200; dl->dl.t200_usec = 0;
 }
 
-/*! \brief initialize a LAPDm entity and all datalinks inside
+/*! initialize a LAPDm entity and all datalinks inside
  *  \param[in] le LAPDm entity
  *  \param[in] mode \ref lapdm_mode (BTS/MS)
  */
@@ -158,7 +158,7 @@
 	lapdm_entity_set_mode(le, mode);
 }
 
-/*! \brief initialize a LAPDm channel and all its channels
+/*! initialize a LAPDm channel and all its channels
  *  \param[in] lc \ref lapdm_channel to be initialized
  *  \param[in] mode \ref lapdm_mode (BTS/MS)
  *
@@ -172,7 +172,7 @@
 	lapdm_entity_init(&lc->lapdm_dcch, mode, 1);
 }
 
-/*! \brief flush and release all resoures in LAPDm entity */
+/*! flush and release all resoures in LAPDm entity */
 void lapdm_entity_exit(struct lapdm_entity *le)
 {
 	unsigned int i;
@@ -184,7 +184,7 @@
 	}
 }
 
-/* \brief lfush and release all resources in LAPDm channel
+/* lfush and release all resources in LAPDm channel
  *
  * A convenience wrapper calling \ref lapdm_entity_exit on both
  * entities inside the \ref lapdm_channel
@@ -287,7 +287,7 @@
 	return msg;
 }
 
-/*! \brief dequeue a msg that's pending transmission via L1 and wrap it into
+/*! dequeue a msg that's pending transmission via L1 and wrap it into
  * a osmo_phsap_prim */
 int lapdm_phsap_dequeue_prim(struct lapdm_entity *le, struct osmo_phsap_prim *pp)
 {
@@ -711,7 +711,7 @@
 
 static int l2_ph_chan_conf(struct msgb *msg, struct lapdm_entity *le, uint32_t frame_nr);
 
-/*! \brief Receive a PH-SAP primitive from L1 */
+/*! Receive a PH-SAP primitive from L1 */
 int lapdm_phsap_up(struct osmo_prim_hdr *oph, struct lapdm_entity *le)
 {
 	struct osmo_phsap_prim *pp = (struct osmo_phsap_prim *) oph;
@@ -1213,7 +1213,7 @@
 	return rc;
 }
 
-/*! \brief Receive a RSLms \ref msgb from Layer 3 */
+/*! Receive a RSLms \ref msgb from Layer 3 */
 int lapdm_rslms_recvmsg(struct msgb *msg, struct lapdm_channel *lc)
 {
 	struct abis_rsl_common_hdr *rslh = msgb_l2(msg);
@@ -1241,7 +1241,7 @@
 	return rc;
 }
 
-/*! \brief Set the \ref lapdm_mode of a LAPDm entity */
+/*! Set the \ref lapdm_mode of a LAPDm entity */
 int lapdm_entity_set_mode(struct lapdm_entity *le, enum lapdm_mode mode)
 {
 	int i;
@@ -1267,7 +1267,7 @@
 	return 0;
 }
 
-/*! \brief Set the \ref lapdm_mode of a LAPDm channel*/
+/*! Set the \ref lapdm_mode of a LAPDm channel*/
 int lapdm_channel_set_mode(struct lapdm_channel *lc, enum lapdm_mode mode)
 {
 	int rc;
@@ -1279,7 +1279,7 @@
 	return lapdm_entity_set_mode(&lc->lapdm_acch, mode);
 }
 
-/*! \brief Set the L1 callback and context of a LAPDm channel */
+/*! Set the L1 callback and context of a LAPDm channel */
 void lapdm_channel_set_l1(struct lapdm_channel *lc, osmo_prim_cb cb, void *ctx)
 {
 	lc->lapdm_dcch.l1_prim_cb = cb;
@@ -1288,7 +1288,7 @@
 	lc->lapdm_acch.l1_ctx = ctx;
 }
 
-/*! \brief Set the L3 callback and context of a LAPDm channel */
+/*! Set the L3 callback and context of a LAPDm channel */
 void lapdm_channel_set_l3(struct lapdm_channel *lc, lapdm_cb_t cb, void *ctx)
 {
 	lc->lapdm_dcch.l3_cb = cb;
@@ -1297,7 +1297,7 @@
 	lc->lapdm_acch.l3_ctx = ctx;
 }
 
-/*! \brief Reset an entire LAPDm entity and all its datalinks */
+/*! Reset an entire LAPDm entity and all its datalinks */
 void lapdm_entity_reset(struct lapdm_entity *le)
 {
 	struct lapdm_datalink *dl;
@@ -1309,20 +1309,20 @@
 	}
 }
 
-/*! \brief Reset a LAPDm channel with all its entities */
+/*! Reset a LAPDm channel with all its entities */
 void lapdm_channel_reset(struct lapdm_channel *lc)
 {
 	lapdm_entity_reset(&lc->lapdm_dcch);
 	lapdm_entity_reset(&lc->lapdm_acch);
 }
 
-/*! \brief Set the flags of a LAPDm entity */
+/*! Set the flags of a LAPDm entity */
 void lapdm_entity_set_flags(struct lapdm_entity *le, unsigned int flags)
 {
 	le->flags = flags;
 }
 
-/*! \brief Set the flags of all LAPDm entities in a LAPDm channel */
+/*! Set the flags of all LAPDm entities in a LAPDm channel */
 void lapdm_channel_set_flags(struct lapdm_channel *lc, unsigned int flags)
 {
 	lapdm_entity_set_flags(&lc->lapdm_dcch, flags);
diff --git a/src/gsm/oap.c b/src/gsm/oap.c
index 5706e8f..88c98f7 100644
--- a/src/gsm/oap.c
+++ b/src/gsm/oap.c
@@ -30,10 +30,10 @@
 
 /*! \addtogroup oap
  *  @{
- *  \brief Osmocom Authentication Protocol
+ *  Osmocom Authentication Protocol
  */
 
-/*! \brief Decode OAP message data.
+/*! Decode OAP message data.
  * \param[out] oap_msg  Parsed data is written to this instance.
  * \param[in] data  Pointer to the data buffer containing the OAP message.
  * \param[in] data_len  Length of the OAP message data.
@@ -152,7 +152,7 @@
 	return 0;
 }
 
-/*! \brief Compose OAP message data.
+/*! Compose OAP message data.
  * \param[out] msg  OAP message data is appended to this message buffer.
  * \param[in] oap_msg  Elements to encode in the message data.
  */
diff --git a/src/gsm/rsl.c b/src/gsm/rsl.c
index 5bdb006..4a1f733 100644
--- a/src/gsm/rsl.c
+++ b/src/gsm/rsl.c
@@ -30,17 +30,17 @@
 
 /*! \addtogroup rsl
  *  @{
- *  \brief GSM Radio Signalling Link (TS 08.58)
+ *  GSM Radio Signalling Link (TS 08.58)
  */
 
 /*! \file rsl.c */
 
-/*! \brief Size for RSL \ref msgb_alloc */
+/*! Size for RSL \ref msgb_alloc */
 #define RSL_ALLOC_SIZE		200
-/*! \brief Headroom size for RSL \ref msgb_alloc */
+/*! Headroom size for RSL \ref msgb_alloc */
 #define RSL_ALLOC_HEADROOM	56
 
-/*! \brief Initialize a RSL RLL header
+/*! Initialize a RSL RLL header
  *  \param[out] dh Caller-allocated RSL RLL header
  *  \param[in] msg_type Message Type */
 void rsl_init_rll_hdr(struct abis_rsl_rll_hdr *dh, uint8_t msg_type)
@@ -51,7 +51,7 @@
 	dh->ie_link_id = RSL_IE_LINK_IDENT;
 }
 
-/*! \brief Initialize a RSL Common Channel header
+/*! Initialize a RSL Common Channel header
  *  \param[out] ch Caller-allocated RSL Common Channel Header
  *  \param[in] msg_type Message Type */
 void rsl_init_cchan_hdr(struct abis_rsl_cchan_hdr *ch, uint8_t msg_type)
@@ -61,7 +61,7 @@
 	ch->ie_chan = RSL_IE_CHAN_NR;
 }
 
-/* \brief TLV parser definition for RSL */
+/* TLV parser definition for RSL */
 const struct tlv_definition rsl_att_tlvdef = {
 	.def = {
 		[RSL_IE_CHAN_NR]		= { TLV_TYPE_TV },
@@ -142,7 +142,7 @@
 	},
 };
 
-/*! \brief Encode channel number as per Section 9.3.1
+/*! Encode channel number as per Section 9.3.1
  *  \param[in] Channel Type (RSL_CHAN_...)
  *  \param[in] subch Sub-Channel within Channel
  *  \param[in] timeslot Air interface timeslot
@@ -173,7 +173,7 @@
 	return ret;
 }
 
-/*! \brief Decode RSL channel number
+/*! Decode RSL channel number
  *  \param[in] chan_nr Channel Number
  *  \param[out] type Channel Type
  *  \param[out] subch Sub-channel Number
@@ -210,7 +210,7 @@
 	return 0;
 }
 
-/*! \brief Get human-readable string for RSL channel number */
+/*! Get human-readable string for RSL channel number */
 const char *rsl_chan_nr_str(uint8_t chan_nr)
 {
 	static char str[20];
@@ -272,7 +272,7 @@
 	{ 0,				NULL }
 };
 
-/*! \brief Get human-readable name for RSL Error */
+/*! Get human-readable name for RSL Error */
 const char *rsl_err_name(uint8_t err)
 {
 	return get_value_string(rsl_err_vals, err);
@@ -349,13 +349,13 @@
 };
 
 
-/*! \brief Get human-readable string for RSL Message Type */
+/*! Get human-readable string for RSL Message Type */
 const char *rsl_msg_name(uint8_t msg_type)
 {
 	return get_value_string(rsl_msgt_names, msg_type);
 }
 
-/*! \brief ip.access specific */
+/*! ip.access specific */
 static const struct value_string rsl_ipac_msgt_names[] = {
 	{ RSL_MT_IPAC_PDCH_ACT,		"IPAC_PDCH_ACT" },
 	{ RSL_MT_IPAC_PDCH_ACT_ACK,	"IPAC_PDCH_ACT_ACK" },
@@ -385,13 +385,13 @@
 	{ 0, NULL }
 };
 
-/*! \brief Get human-readable name of ip.access RSL msg type */
+/*! Get human-readable name of ip.access RSL msg type */
 const char *rsl_ipac_msg_name(uint8_t msg_type)
 {
 	return get_value_string(rsl_ipac_msgt_names, msg_type);
 }
 
-/*! \brief Get human-readable name of standard or ip.access RSL msg type.
+/*! Get human-readable name of standard or ip.access RSL msg type.
  * If msg_type is a standard RSL message type, return its human-readable name.
  * Otherwise return rsl_ipac_msg_name(msg_type). */
 const char *rsl_or_ipac_msg_name(uint8_t msg_type)
@@ -420,7 +420,7 @@
 	{ 0,				NULL },
 };
 
-/*! \brief Get human-readable string for RLM cause */
+/*! Get human-readable string for RLM cause */
 const char *rsl_rlm_cause_name(uint8_t err)
 {
 	return get_value_string(rsl_rlm_cause_strs, err);
@@ -464,7 +464,7 @@
 	}
 }
 
-/*! \brief Push a RSL RLL header onto an existing msgb
+/*! Push a RSL RLL header onto an existing msgb
  *  \param msg Message Buffer to which RLL header shall be pushed
  *  \param[in] msg_type RSL Message Type
  *  \param[in] chan_nr RSL Channel Number
@@ -486,7 +486,7 @@
 	msg->l2h = (uint8_t *)rh;
 }
 
-/*! \brief Wrap msgb in L3 Info IE and push a RSL RLL header
+/*! Wrap msgb in L3 Info IE and push a RSL RLL header
  *  \param[in] msg Message Buffer to which L3 Header shall be appended
  *  \param[in] msg_type RSL Message Type
  *  \param[in] chan_hr RSL Channel Number
@@ -507,7 +507,7 @@
 	rsl_rll_push_hdr(msg, msg_type, chan_nr, link_id, transparent);
 }
 
-/*! \brief Create msgb with RSL RLL header
+/*! Create msgb with RSL RLL header
  *  \param[in] msg_type RSL Message Type
  *  \param[in] chan_nr RSL Channel Number
  *  \param[in] link_id RSL Link Identifier
@@ -539,7 +539,7 @@
 	return msg;
 }
 
-/*! \brief TLV parser definitions for IPA embedded IEs */
+/*! TLV parser definitions for IPA embedded IEs */
 const struct tlv_definition rsl_ipac_eie_tlvdef = {
 	.def = {
 		[RSL_IPAC_EIE_RXLEV]		= { TLV_TYPE_TV },
@@ -566,7 +566,7 @@
 	},
 };
 
-/*! \brief String names of RSL Channel Activation Types */
+/*! String names of RSL Channel Activation Types */
 const struct value_string rsl_act_type_names[] = {
 	{ RSL_ACT_TYPE_INITIAL,	"INITIAL" },
 	{ RSL_ACT_TYPE_REACT,	"REACT" },
diff --git a/src/gsm/sysinfo.c b/src/gsm/sysinfo.c
index b5ebd57..201acfc 100644
--- a/src/gsm/sysinfo.c
+++ b/src/gsm/sysinfo.c
@@ -125,7 +125,7 @@
 	{ 0, NULL }
 };
 
-/*! \brief Add pair of arfcn and measurement bandwith value to earfcn struct
+/*! Add pair of arfcn and measurement bandwith value to earfcn struct
  *  \param[in,out] e earfcn struct
  *  \param[in] arfcn EARFCN value, 16 bits
  *  \param[in] meas_bw measurement bandwith value
@@ -144,7 +144,7 @@
 	return -ENOMEM;
 }
 
-/*! \brief Return number of bits necessary to represent earfcn struct as
+/*! Return number of bits necessary to represent earfcn struct as
  *  Repeated E-UTRAN Neighbour Cells IE from 3GPP TS 44.018 Table 10.5.2.33b.1
  *  \param[in,out] e earfcn struct
  *  \returns number of bits
@@ -154,7 +154,7 @@
 	return osmo_earfcn_bit_size_ext(e, 0);
 }
 
-/*! \brief Return number of bits necessary to represent earfcn struct as
+/*! Return number of bits necessary to represent earfcn struct as
  *  Repeated E-UTRAN Neighbour Cells IE from 3GPP TS 44.018 Table 10.5.2.33b.1
  *  \param[in,out] e earfcn struct
  *  \param[in] offset into earfcn struct: how many EARFCNs to skip while estimating size
@@ -183,7 +183,7 @@
 	return bits;
 }
 
-/*! \brief Delete arfcn (and corresponding measurement bandwith) from earfcn
+/*! Delete arfcn (and corresponding measurement bandwith) from earfcn
  *  struct
  *  \param[in,out] e earfcn struct
  *  \param[in] arfcn EARFCN value, 16 bits
@@ -202,7 +202,7 @@
 	return -ENOENT;
 }
 
-/*! \brief Initialize earfcn struct
+/*! Initialize earfcn struct
  *  \param[in,out] e earfcn struct
  */
 void osmo_earfcn_init(struct osmo_earfcn_si2q *e)
diff --git a/src/gsm/tlv_parser.c b/src/gsm/tlv_parser.c
index d7604c6..d9072c9 100644
--- a/src/gsm/tlv_parser.c
+++ b/src/gsm/tlv_parser.c
@@ -25,7 +25,7 @@
 
 /*! \addtogroup tlv
  *  @{
- *  \brief Osmocom TLV Parser
+ *  Osmocom TLV Parser
  *
  *  The Osmocom TLV parser is intended to operate as a low-level C
  *  implementation without dynamic memory allocations.  Basically, it
@@ -46,7 +46,7 @@
 struct tlv_definition tvlv_att_def;
 struct tlv_definition vtvlv_gan_att_def;
 
-/*! \brief Dump pasred TLV structure to stdout */
+/*! Dump pasred TLV structure to stdout */
 int tlv_dump(struct tlv_parsed *dec)
 {
 	int i;
@@ -59,7 +59,7 @@
 	return 0;
 }
 
-/*! \brief Copy \ref tlv_parsed using given talloc context
+/*! Copy \ref tlv_parsed using given talloc context
  *  \param[in] tp_orig Parsed TLV structure
  *  \param[in] ctx Talloc context for allocations
  *  \returns NULL on errors, \ref tlv_parsed pointer otherwise
@@ -94,7 +94,7 @@
 	return tp_out;
 }
 
-/*! \brief Merge all \ref tlv_parsed attributes of 'src' into 'dst'
+/*! Merge all \ref tlv_parsed attributes of 'src' into 'dst'
  *  \param[in] dst Parsed TLV structure to merge into
  *  \param[in] src Parsed TLV structure to merge from
  *  \returns 0 on success, negative on error
@@ -118,7 +118,7 @@
 	return 0;
 }
 
-/*! \brief Parse a single TLV encoded IE
+/*! Parse a single TLV encoded IE
  *  \param[out] o_tag the tag of the IE that was found
  *  \param[out] o_len length of the IE that was found
  *  \param[out] o_val pointer to the data of the IE that was found
@@ -218,7 +218,7 @@
 	return len;
 }
 
-/*! \brief Parse an entire buffer of TLV encoded Information Elements
+/*! Parse an entire buffer of TLV encoded Information Elements
  *  \param[out] dec caller-allocated pointer to \ref tlv_parsed
  *  \param[in] def structure defining the valid TLV tags / configurations
  *  \param[in] buf the input data buffer to be parsed
@@ -277,7 +277,7 @@
 	return num_parsed;
 }
 
-/*! \brief take a master (src) tlvdev and fill up all empty slots in 'dst'
+/*! take a master (src) tlvdev and fill up all empty slots in 'dst'
  *  \param dst TLV parser definition that is to be patched
  *  \param[in] src TLV parser definition whose content is patched into \a dst */
 void tlv_def_patch(struct tlv_definition *dst, const struct tlv_definition *src)
diff --git a/src/gsmtap_util.c b/src/gsmtap_util.c
index 64b54f3..62bbd57 100644
--- a/src/gsmtap_util.c
+++ b/src/gsmtap_util.c
@@ -43,12 +43,12 @@
 
 /*! \addtogroup gsmtap
  *  @{
- *  \brief GSMTAP utility routines. Encapsulates GSM messages over UDP
+ *  GSMTAP utility routines. Encapsulates GSM messages over UDP
  */
 /*! \file gsmtap_util.c */
 
 
-/*! \brief convert RSL channel number to GSMTAP channel type
+/*! convert RSL channel number to GSMTAP channel type
  *  \param[in] rsl_chantype RSL channel type
  *  \param[in] link_id RSL link identifier
  *  \returns GSMTAP channel type
@@ -88,7 +88,7 @@
 	return ret;
 }
 
-/*! \brief create an arbitrary type GSMTAP message
+/*! create an arbitrary type GSMTAP message
  *  \param[in] type The GSMTAP_TYPE_xxx constant of the message to create
  *  \param[in] arfcn GSM ARFCN (Channel Number)
  *  \param[in] ts GSM time slot
@@ -136,7 +136,7 @@
 	return msg;
 }
 
-/*! \brief create L1/L2 data and put it into GSMTAP
+/*! create L1/L2 data and put it into GSMTAP
  *  \param[in] arfcn GSM ARFCN (Channel Number)
  *  \param[in] ts GSM time slot
  *  \param[in] chan_type Channel Type
@@ -164,7 +164,7 @@
 #include <sys/socket.h>
 #include <netinet/in.h>
 
-/*! \brief Create a new (sending) GSMTAP source socket 
+/*! Create a new (sending) GSMTAP source socket 
  *  \param[in] host host name or IP address in string format
  *  \param[in] port UDP port number in host byte order
  *  \return file descriptor of the new socket
@@ -185,7 +185,7 @@
 				OSMO_SOCK_F_CONNECT);
 }
 
-/*! \brief Add a local sink to an existing GSMTAP source and return fd
+/*! Add a local sink to an existing GSMTAP source and return fd
  *  \param[in] gsmtap_fd file descriptor of the gsmtap socket
  *  \returns file descriptor of locally bound receive socket
  *
@@ -217,7 +217,7 @@
 	return -ENODEV;
 }
 
-/*! \brief Send a \ref msgb through a GSMTAP source
+/*! Send a \ref msgb through a GSMTAP source
  *  \param[in] gti GSMTAP instance
  *  \param[in] msg message buffer
  *  \return 0 in case of success; negative in case of error
@@ -246,7 +246,7 @@
 	}
 }
 
-/*! \brief send an arbitrary type through GSMTAP.
+/*! send an arbitrary type through GSMTAP.
  *  See \ref gsmtap_makemsg_ex for arguments
  */
 int gsmtap_send_ex(struct gsmtap_inst *gti, uint8_t type, uint16_t arfcn, uint8_t ts,
@@ -267,7 +267,7 @@
 	return gsmtap_sendmsg(gti, msg);
 }
 
-/*! \brief send a message from L1/L2 through GSMTAP.
+/*! send a message from L1/L2 through GSMTAP.
  *  See \ref gsmtap_makemsg for arguments
  */
 int gsmtap_send(struct gsmtap_inst *gti, uint16_t arfcn, uint8_t ts,
@@ -313,7 +313,7 @@
 	return 0;
 }
 
-/*! \brief Add a local sink to an existing GSMTAP source and return fd
+/*! Add a local sink to an existing GSMTAP source and return fd
  *  \param[in] gsmtap_fd file descriptor of the gsmtap socket
  *  \returns file descriptor of locally bound receive socket
  *
@@ -355,7 +355,7 @@
 }
 
 
-/*! \brief Open GSMTAP source socket, connect and register osmo_fd
+/*! Open GSMTAP source socket, connect and register osmo_fd
  *  \param[in] host host name or IP address in string format
  *  \param[in] port UDP port number in host byte order
  *  \param[in] ofd_wq_mode Register \ref osmo_wqueue (1) or not (0)
diff --git a/src/logging.c b/src/logging.c
index 3b3dd05..964128b 100644
--- a/src/logging.c
+++ b/src/logging.c
@@ -22,7 +22,7 @@
 
 /* \addtogroup logging
  * @{
- * \brief libosmocore Logging sub-system
+ * libosmocore Logging sub-system
  */
 
 /* \file logging.c */
@@ -163,7 +163,7 @@
 	},
 };
 
-/*! \brief descriptive string for each log level */
+/*! descriptive string for each log level */
 /* You have to keep this in sync with the structure loglevel_strs. */
 static const char *loglevel_descriptions[LOGLEVEL_DEFS+1] = {
 	"Don't use. It doesn't log anything",
@@ -190,7 +190,7 @@
 	return (subsys * -1) + (osmo_log_info->num_cat_user-1);
 }
 
-/*! \brief Parse a human-readable log level into a numeric value
+/*! Parse a human-readable log level into a numeric value
  *  \param lvl[in] zero-terminated string containing log level name
  *  \returns numeric log level
  */
@@ -199,7 +199,7 @@
 	return get_string_value(loglevel_strs, lvl);
 }
 
-/*! \brief convert a numeric log level into human-readable string
+/*! convert a numeric log level into human-readable string
  *  \param lvl[in] numeric log level
  *  \returns zero-terminated string (log level name)
  */
@@ -208,7 +208,7 @@
 	return get_value_string(loglevel_strs, lvl);
 }
 
-/*! \brief parse a human-readable log category into numeric form
+/*! parse a human-readable log category into numeric form
  *  \param[in] category human-readable log category name
  *  \returns numeric category value, or -EINVAL otherwise
  */
@@ -228,7 +228,7 @@
 	return -EINVAL;
 }
 
-/*! \brief parse the log category mask
+/*! parse the log category mask
  *  \param[in] target log target to be configured
  *  \param[in] _mask log category mask string
  *
@@ -426,7 +426,7 @@
 	return true;
 }
 
-/*! \brief vararg version of logging function
+/*! vararg version of logging function
  *  \param[in] subsys Logging sub-system
  *  \param[in] level Log level
  *  \param[in] file name of source code file
@@ -459,7 +459,7 @@
 	}
 }
 
-/*! \brief logging function used by DEBUGP() macro
+/*! logging function used by DEBUGP() macro
  *  \param[in] subsys Logging sub-system
  *  \param[in] file name of source code file
  *  \param[in] cont continuation (1) or new line (0)
@@ -475,7 +475,7 @@
 	va_end(ap);
 }
 
-/*! \brief logging function used by LOGP() macro
+/*! logging function used by LOGP() macro
  *  \param[in] subsys Logging sub-system
  *  \param[in] level Log level
  *  \param[in] file name of source code file
@@ -491,7 +491,7 @@
 	va_end(ap);
 }
 
-/*! \brief Register a new log target with the logging core
+/*! Register a new log target with the logging core
  *  \param[in] target Log target to be registered
  */
 void log_add_target(struct log_target *target)
@@ -499,7 +499,7 @@
 	llist_add_tail(&target->entry, &osmo_log_target_list);
 }
 
-/*! \brief Unregister a log target from the logging core
+/*! Unregister a log target from the logging core
  *  \param[in] target Log target to be unregistered
  */
 void log_del_target(struct log_target *target)
@@ -507,13 +507,13 @@
 	llist_del(&target->entry);
 }
 
-/*! \brief Reset (clear) the logging context */
+/*! Reset (clear) the logging context */
 void log_reset_context(void)
 {
 	memset(&log_context, 0, sizeof(log_context));
 }
 
-/*! \brief Set the logging context
+/*! Set the logging context
  *  \param[in] ctx_nr logging context number
  *  \param[in] value value to which the context is to be set
  *  \returns 0 in case of success; negative otherwise
@@ -534,7 +534,7 @@
 	return 0;
 }
 
-/*! \brief Enable the \ref LOG_FLT_ALL log filter
+/*! Enable the \ref LOG_FLT_ALL log filter
  *  \param[in] target Log target to be affected
  *  \param[in] all enable (1) or disable (0) the ALL filter
  *
@@ -550,7 +550,7 @@
 		target->filter_map &= ~(1 << LOG_FLT_ALL);
 }
 
-/*! \brief Enable or disable the use of colored output
+/*! Enable or disable the use of colored output
  *  \param[in] target Log target to be affected
  *  \param[in] use_color Use color (1) or don't use color (0)
  */
@@ -559,7 +559,7 @@
 	target->use_color = use_color;
 }
 
-/*! \brief Enable or disable printing of timestamps while logging
+/*! Enable or disable printing of timestamps while logging
  *  \param[in] target Log target to be affected
  *  \param[in] print_timestamp Enable (1) or disable (0) timestamps
  */
@@ -568,7 +568,7 @@
 	target->print_timestamp = print_timestamp;
 }
 
-/*! \brief Enable or disable printing of extended timestamps while logging
+/*! Enable or disable printing of extended timestamps while logging
  *  \param[in] target Log target to be affected
  *  \param[in] print_timestamp Enable (1) or disable (0) timestamps
  *
@@ -581,7 +581,7 @@
 	target->print_ext_timestamp = print_timestamp;
 }
 
-/*! \brief Enable or disable printing of the filename while logging
+/*! Enable or disable printing of the filename while logging
  *  \param[in] target Log target to be affected
  *  \param[in] print_filename Enable (1) or disable (0) filenames
  */
@@ -590,7 +590,7 @@
 	target->print_filename = print_filename;
 }
 
-/*! \brief Enable or disable printing of the category name
+/*! Enable or disable printing of the category name
  *  \param[in] target Log target to be affected
  *  \param[in] print_catname Enable (1) or disable (0) filenames
  *
@@ -601,7 +601,7 @@
 	target->print_category = print_category;
 }
 
-/*! \brief Set the global log level for a given log target
+/*! Set the global log level for a given log target
  *  \param[in] target Log target to be affected
  *  \param[in] log_level New global log level
  */
@@ -610,7 +610,7 @@
 	target->loglevel = log_level;
 }
 
-/*! \brief Set a category filter on a given log target
+/*! Set a category filter on a given log target
  *  \param[in] target Log target to be affected
  *  \param[in] category Log category to be affected
  *  \param[in] enable whether to enable or disable the filter
@@ -635,7 +635,7 @@
 }
 #endif
 
-/*! \brief Create a new log target skeleton
+/*! Create a new log target skeleton
  *  \returns dynamically-allocated log target
  *  This funcition allocates a \ref log_target and initializes it
  *  with some default values.  The newly created target is not
@@ -679,7 +679,7 @@
 	return target;
 }
 
-/*! \brief Create the STDERR log target
+/*! Create the STDERR log target
  *  \returns dynamically-allocated \ref log_target for STDERR */
 struct log_target *log_target_create_stderr(void)
 {
@@ -701,7 +701,7 @@
 }
 
 #if (!EMBEDDED)
-/*! \brief Create a new file-based log target
+/*! Create a new file-based log target
  *  \param[in] fname File name of the new log file
  *  \returns Log target in case of success, NULL otherwise
  */
@@ -726,7 +726,7 @@
 }
 #endif
 
-/*! \brief Find a registered log target
+/*! Find a registered log target
  *  \param[in] type Log target type
  *  \param[in] fname File name
  *  \returns Log target (if found), NULL otherwise
@@ -747,7 +747,7 @@
 	return NULL;
 }
 
-/*! \brief Unregister, close and delete a log target
+/*! Unregister, close and delete a log target
  *  \param target[in] log target to unregister, close and delete */
 void log_target_destroy(struct log_target *target)
 {
@@ -772,7 +772,7 @@
 	talloc_free(target);
 }
 
-/*! \brief close and re-open a log file (for log file rotation)
+/*! close and re-open a log file (for log file rotation)
  *  \param[in] target log target to re-open
  *  \returns 0 in case of success; negative otherwise */
 int log_target_file_reopen(struct log_target *target)
@@ -788,7 +788,7 @@
 	return 0;
 }
 
-/*! \brief close and re-open all log files (for log file rotation)
+/*! close and re-open all log files (for log file rotation)
  *  \returns 0 in case of success; negative otherwise */
 int log_targets_reopen(void)
 {
@@ -809,7 +809,7 @@
 	return rc;
 }
 
-/*! \brief Generates the logging command string for VTY
+/*! Generates the logging command string for VTY
  *  \param[in] unused_info Deprecated parameter, no longer used!
  *  \returns vty command string for use by VTY command node
  */
@@ -889,7 +889,7 @@
 	return str;
 }
 
-/*! \brief Generates the logging command description for VTY
+/*! Generates the logging command description for VTY
  *  \param[in] unused_info Deprecated parameter, no longer used!
  *  \returns logging command description for use by VTY command node
  */
@@ -952,7 +952,7 @@
 	return str;
 }
 
-/*! \brief Initialize the Osmocom logging core
+/*! Initialize the Osmocom logging core
  *  \param[in] inf Information regarding logging categories
  *  \param[in] ctx \ref talloc context for logging allocations
  *  \returns 0 in case of success, negative in case of error
@@ -1000,7 +1000,7 @@
 	return 0;
 }
 
-/* \brief De-initialize the Osmocom logging core
+/* De-initialize the Osmocom logging core
  * This function destroys all targets and releases associated memory */
 void log_fini(void)
 {
@@ -1015,7 +1015,7 @@
 	tall_log_ctx = NULL;
 }
 
-/*! \brief Check whether a log entry will be generated.
+/*! Check whether a log entry will be generated.
  *  \returns != 0 if a log entry might get generated by at least one target */
 int log_check_level(int subsys, unsigned int level)
 {
diff --git a/src/logging_gsmtap.c b/src/logging_gsmtap.c
index 7358bf6..9e5884b 100644
--- a/src/logging_gsmtap.c
+++ b/src/logging_gsmtap.c
@@ -24,7 +24,7 @@
  */
 
 /*! \file logging_gsmtap.c
- *  \brief libosmocore log output encapsulated in GSMTAP
+ *  libosmocore log output encapsulated in GSMTAP
  *
  *  Encapsulating the log output inside GSMTAP frames allows us to
  *  observer protocol traces (of Um, Abis, A or any other interface in
@@ -102,7 +102,7 @@
 	gsmtap_sendmsg(target->tgt_gsmtap.gsmtap_inst, msg);
 }
 
-/*! \brief Create a new logging target for GSMTAP logging
+/*! Create a new logging target for GSMTAP logging
  *  \param[in] ident string identifier
  *  \returns Log target in case of success, NULL in case of error
  */
diff --git a/src/logging_syslog.c b/src/logging_syslog.c
index 6fe3c71..a80a31e 100644
--- a/src/logging_syslog.c
+++ b/src/logging_syslog.c
@@ -24,7 +24,7 @@
  */
 
 /*! \file logging_syslog.c
- *  \brief libosmocore logging output via syslog
+ *  libosmocore logging output via syslog
  */
 
 #include "../config.h"
@@ -65,7 +65,7 @@
 	syslog(logp2syslog_level(level), "%s", log);
 }
 
-/*! \brief Create a new logging target for syslog logging
+/*! Create a new logging target for syslog logging
  *  \param[in] ident syslog string identifier
  *  \param[in] option syslog options
  *  \param[in] facility syslog facility
diff --git a/src/loggingrb.c b/src/loggingrb.c
index 3fb38ca..64033fc 100644
--- a/src/loggingrb.c
+++ b/src/loggingrb.c
@@ -24,7 +24,7 @@
  */
 
 /*! \file loggingrb.c
- *  \brief libosmocore logging backend for a ring-buffer of last log messages
+ *  libosmocore logging backend for a ring-buffer of last log messages
  */
 
 #include <osmocom/core/strrb.h>
@@ -37,7 +37,7 @@
 	osmo_strrb_add(target->tgt_rb.rb, log);
 }
 
-/*! \brief Return the number of log strings in the osmo_strrb-backed target.
+/*! Return the number of log strings in the osmo_strrb-backed target.
  *  \param[in] target The target to search.
  *
  *  \return The number of log strings in the osmo_strrb-backed target.
@@ -47,7 +47,7 @@
 	return osmo_strrb_elements(target->tgt_rb.rb);
 }
 
-/*! \brief Return the capacity of the osmo_strrb-backed target.
+/*! Return the capacity of the osmo_strrb-backed target.
  *  \param[in] target The target to search.
  *
  * Note that this is the capacity (aka max number of messages).
@@ -60,7 +60,7 @@
 	return rb->size - 1;
 }
 
-/*! \brief Return the nth log entry in a target.
+/*! Return the nth log entry in a target.
  *  \param[in] target The target to search.
  *  \param[in] logindex The index of the log entry/error message.
  *
@@ -71,7 +71,7 @@
 	return osmo_strrb_get_nth(target->tgt_rb.rb, logindex);
 }
 
-/*! \brief Create a new logging target for ringbuffer-backed logging.
+/*! Create a new logging target for ringbuffer-backed logging.
  *  \param[in] size The capacity (number of messages) of the logging target.
  *  \returns A log target in case of success, NULL in case of error.
  */
diff --git a/src/macaddr.c b/src/macaddr.c
index e5db8cf..6a1588d 100644
--- a/src/macaddr.c
+++ b/src/macaddr.c
@@ -25,7 +25,7 @@
  */
 
 /*! \file macaddr.c
- *  \brief MAC address utility routines
+ *  MAC address utility routines
  */
 
 #include "config.h"
@@ -35,7 +35,7 @@
 #include <stdlib.h>
 #include <unistd.h>
 
-/*! \brief Parse a MAC address from human-readable notation
+/*! Parse a MAC address from human-readable notation
  *  This function parses an ethernet MAC address in the commonly-used
  *  hex/colon notation (00:00:00:00:00:00) and generates the binary
  *  representation from it.
@@ -70,7 +70,7 @@
 #include <net/if_dl.h>
 #include <net/if_types.h>
 
-/*! \brief Obtain the MAC address of a given network device
+/*! Obtain the MAC address of a given network device
  *  \param[out] mac_out pointer to caller-allocated buffer of 6 bytes
  *  \param[in] dev_name string name of the network device
  *  \returns 0 in case of success; negative otherwise
@@ -114,7 +114,7 @@
 #include <netinet/in.h>
 #include <netinet/ip.h>
 
-/*! \brief Obtain the MAC address of a given network device
+/*! Obtain the MAC address of a given network device
  *  \param[out] mac_out pointer to caller-allocated buffer of 6 bytes
  *  \param[in] dev_name string name of the network device
  *  \returns 0 in case of success; negative otherwise
diff --git a/src/msgb.c b/src/msgb.c
index 136ad88..bad98f4 100644
--- a/src/msgb.c
+++ b/src/msgb.c
@@ -20,7 +20,7 @@
 
 /*! \addtogroup msgb
  *  @{
- *  \brief libosmocore message buffers, inspired by Linux kernel skbuff
+ *  libosmocore message buffers, inspired by Linux kernel skbuff
  *
  *  Inspired by the 'struct skbuff' of the Linux kernel, we implement a
  *  'struct msgb' which we use for handling network
@@ -62,7 +62,7 @@
 
 void *tall_msgb_ctx = NULL;
 
-/*! \brief Allocate a new message buffer
+/*! Allocate a new message buffer
  * \param[in] size Length in octets, including headroom
  * \param[in] name Human-readable name to be associated with msgb
  * \returns dynamically-allocated \ref msgb
@@ -91,7 +91,7 @@
 	return msg;
 }
 
-/*! \brief Release given message buffer
+/*! Release given message buffer
  * \param[in] m Message buffer to be free'd
  */
 void msgb_free(struct msgb *m)
@@ -99,7 +99,7 @@
 	talloc_free(m);
 }
 
-/*! \brief Enqueue message buffer to tail of a queue
+/*! Enqueue message buffer to tail of a queue
  * \param[in] queue linked list header of queue
  * \param[in] msg message buffer to be added to the queue
  *
@@ -111,7 +111,7 @@
 	llist_add_tail(&msg->list, queue);
 }
 
-/*! \brief Dequeue message buffer from head of queue
+/*! Dequeue message buffer from head of queue
  * \param[in] queue linked list header of queue
  * \returns message buffer (if any) or NULL if queue empty
  *
@@ -134,7 +134,7 @@
 		return NULL;
 }
 
-/*! \brief Re-set all message buffer pointers
+/*! Re-set all message buffer pointers
  *  \param[in] msg message buffer that is to be resetted
  *
  * This will re-set the various internal pointers into the underlying
@@ -157,7 +157,7 @@
 	memset(&msg->cb, 0, sizeof(msg->cb));
 }
 
-/*! \brief get pointer to data section of message buffer
+/*! get pointer to data section of message buffer
  *  \param[in] msg message buffer
  *  \returns pointer to data section of message buffer
  */
@@ -166,7 +166,7 @@
 	return msg->data;
 }
 
-/*! \brief get length of message buffer
+/*! get length of message buffer
  *  \param[in] msg message buffer
  *  \returns length of data section in message buffer
  */
@@ -175,7 +175,7 @@
 	return msg->len;
 }
 
-/*! \brief Set the talloc context for \ref msgb_alloc
+/*! Set the talloc context for \ref msgb_alloc
  * Deprecated, use msgb_talloc_ctx_init() instead.
  *  \param[in] ctx talloc context to be used as root for msgb allocations
  */
@@ -184,7 +184,7 @@
 	tall_msgb_ctx = ctx;
 }
 
-/*! \brief Initialize a msgb talloc context for \ref msgb_alloc.
+/*! Initialize a msgb talloc context for \ref msgb_alloc.
  * Create a talloc context called "msgb". If \a pool_size is 0, create a named
  * const as msgb talloc context. If \a pool_size is nonzero, create a talloc
  * pool, possibly for faster msgb allocations (see talloc_pool()).
@@ -202,7 +202,7 @@
 	return tall_msgb_ctx;
 }
 
-/*! \brief Copy an msgb.
+/*! Copy an msgb.
  *
  *  This function allocates a new msgb, copies the data buffer of msg,
  *  and adjusts the pointers (incl l1h-l4h) accordingly. The cb part
@@ -239,7 +239,7 @@
 	return new_msg;
 }
 
-/*! \brief Resize an area within an msgb
+/*! Resize an area within an msgb
  *
  *  This resizes a sub area of the msgb data and adjusts the pointers (incl
  *  l1h-l4h) accordingly. The cb part is not updated. If the area is extended,
@@ -293,7 +293,7 @@
 }
 
 
-/*! \brief Return a (static) buffer containing a hexdump of the msg
+/*! Return a (static) buffer containing a hexdump of the msg
  * \param[in] msg message buffer
  * \returns a pointer to a static char array
  */
diff --git a/src/panic.c b/src/panic.c
index e233588..251fdad 100644
--- a/src/panic.c
+++ b/src/panic.c
@@ -25,7 +25,7 @@
  */
 
 /*! \file panic.c
- *  \brief Routines for panic handling
+ *  Routines for panic handling
  */
 
 #include <osmocom/core/panic.h>
@@ -59,7 +59,7 @@
 #endif
 
 
-/*! \brief Terminate the current program with a panic
+/*! Terminate the current program with a panic
  *
  * You can call this function in case some severely unexpected situation
  * is detected and the program is supposed to terminate in a way that
@@ -87,7 +87,7 @@
 }
  
 
-/*! \brief Set the panic handler
+/*! Set the panic handler
  *  \param[in] h New panic handler function
  *
  *  This changes the panic handling function from the currently active
diff --git a/src/plugin.c b/src/plugin.c
index 71df88b..b6a5a48 100644
--- a/src/plugin.c
+++ b/src/plugin.c
@@ -25,7 +25,7 @@
  */
 
 /*! \file plugin.c
- *  \brief Routines for loading and managing shared library plug-ins.
+ *  Routines for loading and managing shared library plug-ins.
  */
 
 
@@ -41,7 +41,7 @@
 
 #include <osmocom/core/plugin.h>
 
-/*! \brief Load all plugins available in given directory
+/*! Load all plugins available in given directory
  *  \param[in] directory full path name of directory containing plug-ins
  *  \returns number of plugins loaded in case of success, negative in case of error
  */
diff --git a/src/prim.c b/src/prim.c
index 5851f6f..f39527f 100644
--- a/src/prim.c
+++ b/src/prim.c
@@ -1,7 +1,7 @@
 #include <osmocom/core/utils.h>
 #include <osmocom/core/prim.h>
 
-/*! \brief human-readable string mapping for
+/*! human-readable string mapping for
  *  \ref osmo_prim_operation */
 const struct value_string osmo_prim_op_names[5] = {
 	{ PRIM_OP_REQUEST,			"request" },
@@ -11,7 +11,7 @@
 	{ 0, NULL }
 };
 
-/*! \brief resolve the (fsm) event for a given primitive using a map
+/*! resolve the (fsm) event for a given primitive using a map
  *  \param[in] oph primitive header used as key for match
  *  \param[in] maps list of mappings from primitive to event
  *  \returns event determined by map; \ref OSMO_NO_EVENT if no match */
diff --git a/src/rate_ctr.c b/src/rate_ctr.c
index 47067fb..068d491 100644
--- a/src/rate_ctr.c
+++ b/src/rate_ctr.c
@@ -22,7 +22,7 @@
 
 /*! \addtogroup rate_ctr
  *  @{
- *  \brief conters about events and their event rates
+ *  conters about events and their event rates
  */
 
 /*! \file rate_ctr.c */
@@ -41,7 +41,7 @@
 
 static void *tall_rate_ctr_ctx;
 
-/*! \brief Allocate a new group of counters according to description
+/*! Allocate a new group of counters according to description
  *  \param[in] ctx \ref talloc context
  *  \param[in] desc Rate counter group description
  *  \param[in] idx Index of new counter group
@@ -71,20 +71,20 @@
 	return group;
 }
 
-/*! \brief Free the memory for the specified group of counters */
+/*! Free the memory for the specified group of counters */
 void rate_ctr_group_free(struct rate_ctr_group *grp)
 {
 	llist_del(&grp->list);
 	talloc_free(grp);
 }
 
-/*! \brief Add a number to the counter */
+/*! Add a number to the counter */
 void rate_ctr_add(struct rate_ctr *ctr, int inc)
 {
 	ctr->current += inc;
 }
 
-/*! \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)
 {
 	int64_t result = ctr->current - ctr->previous;
@@ -144,7 +144,7 @@
 	osmo_timer_schedule(&rate_ctr_timer, 1, 0);
 }
 
-/*! \brief Initialize the counter module */
+/*! Initialize the counter module */
 int rate_ctr_init(void *tall_ctx)
 {
 	tall_rate_ctr_ctx = tall_ctx;
@@ -154,7 +154,7 @@
 	return 0;
 }
 
-/*! \brief Search for counter group based on group name and index
+/*! Search for counter group based on group name and index
  *  \param[in] name Name of the counter group you're looking for
  *  \param[in] idx Index inside the counter group
  *  \returns \ref rate_ctr_group or NULL in case of error */
@@ -174,7 +174,7 @@
 	return NULL;
 }
 
-/*! \brief Search for counter based on group + name
+/*! Search for counter based on group + name
  *  \param[in] ctrg pointer to \ref rate_ctr_group
  *  \param[in] name name of counter inside group
  *  \returns \ref rate_ctr or NULL in caes of error
@@ -197,7 +197,7 @@
 	return NULL;
 }
 
-/*! \brief Iterate over each counter in group and call function
+/*! Iterate over each counter in group and call function
  *  \param[in] counter group over whose counter to iterate
  *  \param[in] handle_counter function pointer
  *  \param[in] data Data to hand transparently to \ref handle_counter
@@ -220,7 +220,7 @@
 	return rc;
 }
 
-/*! \brief Iterate over all counter groups
+/*! Iterate over all counter groups
  *  \param[in] handle_group function pointer of callback function
  *  \param[in] data Data to hand transparently to \ref handle_group
  *  \returns 0 on success; negative otherwise
diff --git a/src/select.c b/src/select.c
index bdd53b2..575fd77 100644
--- a/src/select.c
+++ b/src/select.c
@@ -36,7 +36,7 @@
 
 /*! \addtogroup select
  *  @{
- *  \brief select() loop abstraction
+ *  select() loop abstraction
  */
 
 /*! \file select.c */
@@ -46,7 +46,7 @@
 static int unregistered_count;
 
 
-/*! \brief Check if a file descriptor is already registered
+/*! Check if a file descriptor is already registered
  *  \param[in] fd osmocom file descriptor to be checked
  *  \returns true if registered; otherwise false
  */
@@ -62,7 +62,7 @@
 	return false;
 }
 
-/*! \brief Register a new file descriptor with select loop abstraction
+/*! Register a new file descriptor with select loop abstraction
  *  \param[in] fd osmocom file descriptor to be registered
  *  \returns 0 on success; negative in case of error
  */
@@ -104,7 +104,7 @@
 	return 0;
 }
 
-/*! \brief Unregister a file descriptor from select loop abstraction
+/*! Unregister a file descriptor from select loop abstraction
  *  \param[in] fd osmocom file descriptor to be unregistered
  */
 void osmo_fd_unregister(struct osmo_fd *fd)
@@ -116,7 +116,7 @@
 	llist_del(&fd->list);
 }
 
-/*! \brief Populate the fd_sets and return the highest fd number
+/*! Populate the fd_sets and return the highest fd number
  *  \param[in] _rset The readfds to populate
  *  \param[in] _wset The wrtiefds to populate
  *  \param[in] _eset The errorfds to populate
@@ -187,7 +187,7 @@
 	return work;
 }
 
-/*! \brief select main loop integration
+/*! select main loop integration
  *  \param[in] polling should we pollonly (1) or block on select (0)
  *  \returns 0 if no fd handled; 1 if fd handled; negative in case of error
  */
@@ -217,7 +217,7 @@
 	return osmo_fd_disp_fds(&readset, &writeset, &exceptset);
 }
 
-/*! \brief find an osmo_fd based on the integer fd
+/*! find an osmo_fd based on the integer fd
  *  \param[in] fd file descriptor to use as search key
  *  \returns \ref osmo_fd for \ref fd; NULL in case it doesn't exist */
 struct osmo_fd *osmo_fd_get_by_fd(int fd)
diff --git a/src/sercomm.c b/src/sercomm.c
index 33d4853..d02b39e 100644
--- a/src/sercomm.c
+++ b/src/sercomm.c
@@ -22,7 +22,7 @@
 
 /*! \addtogroup sercomm
  *  @{
- *  \brief Serial communications layer, based on HDLC
+ *  Serial communications layer, based on HDLC
  */
 
 /*! \file sercomm.c
@@ -41,9 +41,9 @@
 
 #ifndef EMBEDDED
 # define DEFAULT_RX_MSG_SIZE	2048
-/*! \brief Protect against IRQ context */
+/*! Protect against IRQ context */
 void sercomm_drv_lock(unsigned long __attribute__((unused)) *flags) {}
-/*! \brief Release protection against IRQ context */
+/*! Release protection against IRQ context */
 void sercomm_drv_unlock(unsigned long __attribute__((unused)) *flags) {}
 #else
 # define DEFAULT_RX_MSG_SIZE	256
@@ -71,7 +71,7 @@
 	RX_ST_ESCAPE,
 };
 
-/*! \brief Initialize an Osmocom sercomm instance
+/*! Initialize an Osmocom sercomm instance
  *  \param sercomm Caller-allocated sercomm instance to be initialized
  *
  *  This function initializes the sercomm instance, including the
@@ -92,7 +92,7 @@
 	osmo_sercomm_register_rx_cb(sercomm, SC_DLCI_ECHO, &osmo_sercomm_sendmsg);
 }
 
-/*! \brief Determine if a given Osmocom sercomm instance has been initialized
+/*! Determine if a given Osmocom sercomm instance has been initialized
  *  \param[in] sercomm Osmocom sercomm instance to be checked
  *  \returns 1 in case \a sercomm was previously initialized; 0 otherwise */
 int osmo_sercomm_initialized(struct osmo_sercomm_inst *sercomm)
@@ -100,7 +100,7 @@
 	return sercomm->initialized;
 }
 
-/*! \brief User interface for transmitting messages for a given DLCI
+/*! User interface for transmitting messages for a given DLCI
  *  \param[in] sercomm Osmocom sercomm instance through which to transmit
  *  \param[in] dlci DLCI through whcih to transmit \a msg
  *  \param[in] msg Message buffer to be transmitted via \a dlci on \a *  sercomm
@@ -125,7 +125,7 @@
 	sercomm_drv_start_tx(sercomm);
 }
 
-/*! \brief How deep is the Tx queue for a given DLCI?
+/*! How deep is the Tx queue for a given DLCI?
  *  \param[n] sercomm Osmocom sercomm instance on which to operate
  *  \param[in] dlci DLCI whose queue depthy is to be determined
  *  \returns number of elements in the per-DLCI transmit queue */
@@ -141,7 +141,7 @@
 	return num;
 }
 
-/*! \brief wait until everything has been transmitted, then grab the lock and
+/*! wait until everything has been transmitted, then grab the lock and
  *	   change the baud rate as requested
  *  \param[in] sercomm Osmocom sercomm instance
  *  \param[in] bdrt New UART Baud Rate
@@ -178,7 +178,7 @@
 	return -1;
 }
 
-/*! \brief fetch one octet of to-be-transmitted serial data
+/*! fetch one octet of to-be-transmitted serial data
  *  \param[in] sercomm Sercomm Instance from which to fetch pending data
  *  \param[out] ch pointer to caller-allocaed output memory
  *  \returns 1 in case of succss; 0 if no data available; negative on error */
@@ -243,7 +243,7 @@
 	return 1;
 }
 
-/*! \brief Register a handler for a given DLCI
+/*! Register a handler for a given DLCI
  *  \param sercomm Sercomm Instance in which caller wishes to register
  *  \param[in] dlci Data Ling Connection Identifier to register
  *  \param[in] cb Callback function for \a dlci
@@ -271,7 +271,7 @@
 	sercomm->rx.dlci_handler[dlci](sercomm, dlci, msg);
 }
 
-/*! \brief the driver has received one byte, pass it into sercomm layer
+/*! the driver has received one byte, pass it into sercomm layer
  *  \param[in] sercomm Sercomm Instance for which a byte was received
  *  \param[in] ch byte that was received from line for said instance
  *  \returns 1 on success; 0 on unrecognized char; negative on error */
diff --git a/src/serial.c b/src/serial.c
index 51a32bb..b8c347b 100644
--- a/src/serial.c
+++ b/src/serial.c
@@ -24,7 +24,7 @@
 
 /*! \addtogroup serial
  *  @{
- *  \brief Osmocom serial port helpers
+ *  Osmocom serial port helpers
  */
 
 /*! \file serial.c */
@@ -50,7 +50,7 @@
 # define dbg_perror(x) do { } while (0)
 #endif
 
-/*! \brief Open serial device and does base init
+/*! Open serial device and does base init
  *  \param[in] dev Path to the device node to open
  *  \param[in] baudrate Baudrate constant (speed_t: B9600, B...)
  *  \returns >=0 file descriptor in case of success or negative errno.
@@ -149,7 +149,7 @@
 	return 0;
 }
 
-/*! \brief Change current baudrate
+/*! Change current baudrate
  *  \param[in] fd File descriptor of the open device
  *  \param[in] baudrate Baudrate constant (speed_t: B9600, B...)
  *  \returns 0 for success or negative errno.
@@ -161,7 +161,7 @@
 	return _osmo_serial_set_baudrate(fd, baudrate);
 }
 
-/*! \brief Change current baudrate to a custom one using OS specific method
+/*! Change current baudrate to a custom one using OS specific method
  *  \param[in] fd File descriptor of the open device
  *  \param[in] baudrate Baudrate as integer
  *  \returns 0 for success or negative errno.
@@ -210,7 +210,7 @@
 #endif
 }
 
-/*! \brief Clear any custom baudrate
+/*! Clear any custom baudrate
  *  \param[in] fd File descriptor of the open device
  *  \returns 0 for success or negative errno.
  *
diff --git a/src/signal.c b/src/signal.c
index 1d11617..301b021 100644
--- a/src/signal.c
+++ b/src/signal.c
@@ -27,7 +27,7 @@
 
 /*! \addtogroup signal
  *  @{
- *  \brief Generic signalling/notification infrastructure
+ *  Generic signalling/notification infrastructure
  */
 
 /*! \file signal.c */
@@ -44,7 +44,7 @@
 };
 
 
-/*! \brief Register a new signal handler
+/*! Register a new signal handler
  *  \param[in] subsys Subsystem number
  *  \param[in] cbfn Callback function
  *  \param[in] data Data passed through to callback
@@ -72,7 +72,7 @@
 	return 0;
 }
 
-/*! \brief Unregister signal handler
+/*! Unregister signal handler
  *  \param[in] subsys Subsystem number
  *  \param[in] cbfn Callback function
  *  \param[in] data Data passed through to callback
@@ -92,7 +92,7 @@
 	}
 }
 
-/*! \brief dispatch (deliver) a new signal to all registered handlers
+/*! dispatch (deliver) a new signal to all registered handlers
  *  \param[in] subsys Subsystem number
  *  \param[in] signal Signal number,
  *  \param[in] signal_data Data to be passed along to handlers
diff --git a/src/sim/core.c b/src/sim/core.c
index 1ce2fed..15a1563 100644
--- a/src/sim/core.c
+++ b/src/sim/core.c
@@ -210,7 +210,7 @@
 }
 
 
-/*! \brief Generate an APDU message and initialize APDU command header
+/*! Generate an APDU message and initialize APDU command header
  *  \param[in] cla CLASS byte
  *  \param[in] ins INSTRUCTION byte
  *  \param[in] p1 Parameter 1 byte
diff --git a/src/socket.c b/src/socket.c
index 6fa05a8..f033912 100644
--- a/src/socket.c
+++ b/src/socket.c
@@ -23,7 +23,7 @@
 
 /*! \addtogroup socket
  *  @{
- *  \brief Osmocom socket convenience functions
+ *  Osmocom socket convenience functions
  */
 
 /*! \file socket.c */
@@ -104,7 +104,7 @@
 }
 
 
-/*! \brief Initialize a socket (including bind and/or connect)
+/*! Initialize a socket (including bind and/or connect)
  *  \param[in] family Address Family like AF_INET, AF_INET6, AF_UNSPEC
  *  \param[in] type Socket type like SOCK_DGRAM, SOCK_STREAM
  *  \param[in] proto Protocol like IPPROTO_TCP, IPPROTO_UDP
@@ -232,7 +232,7 @@
 }
 
 
-/*! \brief Initialize a socket (including bind/connect)
+/*! Initialize a socket (including bind/connect)
  *  \param[in] family Address Family like AF_INET, AF_INET6, AF_UNSPEC
  *  \param[in] type Socket type like SOCK_DGRAM, SOCK_STREAM
  *  \param[in] proto Protocol like IPPROTO_TCP, IPPROTO_UDP
@@ -317,7 +317,7 @@
 	return sfd;
 }
 
-/*! \brief fill \ref osmo_fd for a give sfd
+/*! fill \ref osmo_fd for a give sfd
  *  \param[out] ofd file descriptor (will be filled in)
  *  \param[in] sfd socket file descriptor
  *  \returns socket fd on success; negative on error
@@ -343,7 +343,7 @@
 	return sfd;
 }
 
-/*! \brief Initialize a socket and fill \ref osmo_fd
+/*! Initialize a socket and fill \ref osmo_fd
  *  \param[out] ofd file descriptor (will be filled in)
  *  \param[in] family Address Family like AF_INET, AF_INET6, AF_UNSPEC
  *  \param[in] type Socket type like SOCK_DGRAM, SOCK_STREAM
@@ -362,7 +362,7 @@
 	return osmo_fd_init_ofd(ofd, osmo_sock_init(family, type, proto, host, port, flags));
 }
 
-/*! \brief Initialize a socket and fill \ref osmo_fd
+/*! Initialize a socket and fill \ref osmo_fd
  *  \param[out] ofd file descriptor (will be filled in)
  *  \param[in] family Address Family like AF_INET, AF_INET6, AF_UNSPEC
  *  \param[in] type Socket type like SOCK_DGRAM, SOCK_STREAM
@@ -385,7 +385,7 @@
 					local_port, remote_host, remote_port, flags));
 }
 
-/*! \brief Initialize a socket and fill \ref sockaddr
+/*! Initialize a socket and fill \ref sockaddr
  *  \param[out] ss socket address (will be filled in)
  *  \param[in] type Socket type like SOCK_DGRAM, SOCK_STREAM
  *  \param[in] proto Protocol like IPPROTO_TCP, IPPROTO_UDP
@@ -459,7 +459,7 @@
 	return 0;
 }
 
-/*! \brief Determine if the given address is a local address
+/*! Determine if the given address is a local address
  *  \param[in] addr Socket Address
  *  \param[in] addrlen Length of socket address in bytes
  *  \returns 1 if address is local, 0 otherwise.
@@ -484,7 +484,7 @@
 	return 0;
 }
 
-/*! \brief Initialize a unix domain socket (including bind/connect)
+/*! Initialize a unix domain socket (including bind/connect)
  *  \param[in] type Socket type like SOCK_DGRAM, SOCK_STREAM
  *  \param[in] proto Protocol like IPPROTO_TCP, IPPROTO_UDP
  *  \param[in] socket_path path to identify the socket
@@ -557,7 +557,7 @@
 	return -1;
 }
 
-/*! \brief Initialize a unix domain socket and fill \ref osmo_fd
+/*! Initialize a unix domain socket and fill \ref osmo_fd
  *  \param[out] ofd file descriptor (will be filled in)
  *  \param[in] type Socket type like SOCK_DGRAM, SOCK_STREAM
  *  \param[in] proto Protocol like IPPROTO_TCP, IPPROTO_UDP
@@ -574,7 +574,7 @@
 	return osmo_fd_init_ofd(ofd, osmo_sock_unix_init(type, proto, socket_path, flags));
 }
 
-/*! \brief Get address/port information on soocket in dyn-alloc string
+/*! Get address/port information on soocket in dyn-alloc string
  *  \param[in] ctx talloc context from which to allocate string buffer
  *  \param[in] fd file descriptor of socket
  *  \returns string identifying the connection of this socket
diff --git a/src/stat_item.c b/src/stat_item.c
index fcd6781..3b67ba0 100644
--- a/src/stat_item.c
+++ b/src/stat_item.c
@@ -42,7 +42,7 @@
 
 static void *tall_stat_item_ctx;
 
-/*! \brief Allocate a new group of counters according to description
+/*! Allocate a new group of counters according to description
  *  \param[in] ctx \ref talloc context
  *  \param[in] desc Statistics item group description
  *  \param[in] idx Index of new stat item group
@@ -114,7 +114,7 @@
 	return group;
 }
 
-/*! \brief Free the memory for the specified group of counters */
+/*! Free the memory for the specified group of counters */
 void osmo_stat_item_group_free(struct osmo_stat_item_group *grp)
 {
 	llist_del(&grp->list);
@@ -172,7 +172,7 @@
 	return idx_delta;
 }
 
-/*! \brief Skip all values of this item and update idx accordingly */
+/*! Skip all values of this item and update idx accordingly */
 int osmo_stat_item_discard(const struct osmo_stat_item *item, int32_t *idx)
 {
 	int discarded = item->values[item->last_offs].id + 1 - *idx;
@@ -181,7 +181,7 @@
 	return discarded;
 }
 
-/*! \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)
 {
 	int discarded = global_value_id + 1 - *idx;
@@ -190,7 +190,7 @@
 	return discarded;
 }
 
-/*! \brief Initialize the stat item module */
+/*! Initialize the stat item module */
 int osmo_stat_item_init(void *tall_ctx)
 {
 	tall_stat_item_ctx = tall_ctx;
@@ -198,7 +198,7 @@
 	return 0;
 }
 
-/*! \brief Search for item group based on group name and index */
+/*! Search for item group based on group name and index */
 struct osmo_stat_item_group *osmo_stat_item_get_group_by_name_idx(
 	const char *name, const unsigned int idx)
 {
@@ -215,7 +215,7 @@
 	return NULL;
 }
 
-/*! \brief Search for item group based on group name */
+/*! Search for item group based on group name */
 const struct osmo_stat_item *osmo_stat_item_get_by_name(
 	const struct osmo_stat_item_group *statg, const char *name)
 {
diff --git a/src/strrb.c b/src/strrb.c
index 69c4dda..0c56be2 100644
--- a/src/strrb.c
+++ b/src/strrb.c
@@ -26,7 +26,7 @@
  */
 
 /*! \file strrb.c
- *  \brief Lossy string ringbuffer for logging; keeps newest messages.
+ *  Lossy string ringbuffer for logging; keeps newest messages.
  */
 
 #include <stdio.h>
@@ -49,7 +49,7 @@
  * is the case unless this is the first time the ringbuffer becomes full).
 */
 
-/*! \brief Create an empty, initialized osmo_strrb.
+/*! Create an empty, initialized osmo_strrb.
  *  \param[in] ctx The talloc memory context which should own this.
  *  \param[in] rb_size The number of message slots the osmo_strrb can hold.
  *  \returns A struct osmo_strrb* on success, NULL in case of error.
@@ -87,7 +87,7 @@
 	return NULL;
 }
 
-/*! \brief Check if an osmo_strrb is empty.
+/*! Check if an osmo_strrb is empty.
  *  \param[in] rb The osmo_strrb to check.
  *  \returns True if the osmo_strrb is empty, false otherwise.
  */
@@ -96,7 +96,7 @@
 	return rb->end == rb->start;
 }
 
-/*! \brief Return a pointer to the Nth string in the osmo_strrb.
+/*! Return a pointer to the Nth string in the osmo_strrb.
  * \param[in] rb The osmo_strrb to search.
  * \param[in] string_index The index sought (N), zero-indexed.
  *
@@ -130,7 +130,7 @@
 	return (bufi < rb->end) || (bufi >= rb->start);
 }
 
-/*! \brief Count the number of log messages in an osmo_strrb.
+/*! Count the number of log messages in an osmo_strrb.
  *  \param[in] rb The osmo_strrb to count the elements of.
  *
  *  \returns The number of log messages in the osmo_strrb.
@@ -143,7 +143,7 @@
 	return rb->end - rb->start;
 }
 
-/*! \brief Add a string to the osmo_strrb.
+/*! Add a string to the osmo_strrb.
  * \param[in] rb The osmo_strrb to add to.
  * \param[in] data The string to add.
  *
diff --git a/src/timer.c b/src/timer.c
index 72176b8..e18195a 100644
--- a/src/timer.c
+++ b/src/timer.c
@@ -26,7 +26,7 @@
 
 /*! \addtogroup timer
  *  @{
- *  \brief Osmocom timer abstraction; modelled after linux kernel timers
+ *  Osmocom timer abstraction; modelled after linux kernel timers
  */
 
 /*! \file timer.c */
@@ -65,7 +65,7 @@
         rb_insert_color(&timer->node, &timer_root);
 }
 
-/*! \brief set up timer callback and data
+/*! set up timer callback and data
  *  \param[in] timer the timer that should be added
  *  \param[in] callback function to be called when timer expires
  *  \param[in] pointer to data that passed to the callback function
@@ -77,7 +77,7 @@
 	timer->data	= data;
 }
 
-/*! \brief add a new timer to the timer management
+/*! add a new timer to the timer management
  *  \param[in] timer the timer that should be added
  */
 void osmo_timer_add(struct osmo_timer_list *timer)
@@ -88,7 +88,7 @@
 	__add_timer(timer);
 }
 
-/*! \brief schedule a timer at a given future relative time
+/*! schedule a timer at a given future relative time
  *  \param[in] timer the to-be-added timer
  *  \param[in] seconds number of seconds from now
  *  \param[in] microseconds number of microseconds from now
@@ -110,7 +110,7 @@
 	osmo_timer_add(timer);
 }
 
-/*! \brief delete a timer from timer management
+/*! delete a timer from timer management
  *  \param[in] timer the to-be-deleted timer
  *
  * This function can be used to delete a previously added/scheduled
@@ -127,7 +127,7 @@
 	}
 }
 
-/*! \brief check if given timer is still pending
+/*! check if given timer is still pending
  *  \param[in] timer the to-be-checked timer
  *  \return 1 if pending, 0 otherwise
  *
@@ -139,7 +139,7 @@
 	return timer->active;
 }
 
-/*! \brief compute the remaining time of a timer
+/*! compute the remaining time of a timer
  *  \param[in] timer the to-be-checked timer
  *  \param[in] now the current time (NULL if not known)
  *  \param[out] remaining remaining time until timer fires
@@ -167,7 +167,7 @@
 	return 0;
 }
 
-/*! \brief Determine time between now and the nearest timer
+/*! Determine time between now and the nearest timer
  *  \returns pointer to timeval of nearest timer, NULL if there is none
  *
  * if we have a nearest time return the delta between the current
@@ -198,7 +198,7 @@
 	}
 }
 
-/*! \brief Find the nearest time and update nearest_p */
+/*! Find the nearest time and update nearest_p */
 void osmo_timers_prepare(void)
 {
 	struct rb_node *node;
@@ -216,7 +216,7 @@
 	}
 }
 
-/*! \brief fire all timers... and remove them */
+/*! fire all timers... and remove them */
 int osmo_timers_update(void)
 {
 	struct timeval current_time;
@@ -261,7 +261,7 @@
 	return work;
 }
 
-/*! \brief Check how many timers we have in the system
+/*! Check how many timers we have in the system
  *  \returns number of \ref osmo_timer_list registered */
 int osmo_timers_check(void)
 {
diff --git a/src/timer_gettimeofday.c b/src/timer_gettimeofday.c
index 3573051..3a2ae9a 100644
--- a/src/timer_gettimeofday.c
+++ b/src/timer_gettimeofday.c
@@ -34,7 +34,7 @@
 bool osmo_gettimeofday_override = false;
 struct timeval osmo_gettimeofday_override_time = { 23, 424242 };
 
-/*! \brief shim around gettimeofday to be able to set the time manually.
+/*! shim around gettimeofday to be able to set the time manually.
  * To override, set osmo_gettimeofday_override == true and set the desired
  * current time in osmo_gettimeofday_override_time. */
 int osmo_gettimeofday(struct timeval *tv, struct timezone *tz)
@@ -47,7 +47,7 @@
 	return gettimeofday(tv, tz);
 }
 
-/*! \brief convenience function to advance the fake time.
+/*! convenience function to advance the fake time.
  * Add the given values to osmo_gettimeofday_override_time. */
 void osmo_gettimeofday_override_add(time_t secs, suseconds_t usecs)
 {
diff --git a/src/utils.c b/src/utils.c
index e7c6bcf..2bd4c19 100644
--- a/src/utils.c
+++ b/src/utils.c
@@ -33,14 +33,14 @@
 
 /*! \addtogroup utils
  * @{
- * \brief various utility routines
+ * various utility routines
  */
 
 /*! \file utils.c */
 
 static char namebuf[255];
 
-/*! \brief get human-readable string for given value
+/*! get human-readable string for given value
  *  \param[in] vs Array of value_string tuples
  *  \param[in] val Value to be converted
  *  \returns pointer to human-readable string
@@ -60,7 +60,7 @@
 	return namebuf;
 }
 
-/*! \brief get human-readable string or NULL for given value
+/*! get human-readable string or NULL for given value
  *  \param[in] vs Array of value_string tuples
  *  \param[in] val Value to be converted
  *  \returns pointer to human-readable string or NULL if val is not found
@@ -80,7 +80,7 @@
 	return NULL;
 }
 
-/*! \brief get numeric value for given human-readable string
+/*! get numeric value for given human-readable string
  *  \param[in] vs Array of value_string tuples
  *  \param[in] str human-readable string
  *  \returns numeric value (>0) or negative numer in case of error
@@ -98,7 +98,7 @@
 	return -EINVAL;
 }
 
-/*! \brief Convert BCD-encoded digit into printable character
+/*! Convert BCD-encoded digit into printable character
  *  \param[in] bcd A single BCD-encoded digit
  *  \returns single printable character
  */
@@ -110,7 +110,7 @@
 		return 'A' + (bcd - 0xa);
 }
 
-/*! \brief Convert number in ASCII to BCD value
+/*! Convert number in ASCII to BCD value
  *  \param[in] c ASCII character
  *  \returns BCD encoded value of character
  */
@@ -119,7 +119,7 @@
 	return c - 0x30;
 }
 
-/*! \brief Parse a string containing hexadecimal digits
+/*! Parse a string containing hexadecimal digits
  *  \param[in] str string containing ASCII encoded hexadecimal digits
  *  \param[out] b output buffer
  *  \param[in] max_len maximum space in output buffer
@@ -194,7 +194,7 @@
 	return hexd_buff;
 }
 
-/*! \brief Convert a sequence of unpacked bits to ASCII string
+/*! Convert a sequence of unpacked bits to ASCII string
  * \param[in] bits A sequence of unpacked bits
  * \param[in] len Length of bits
  */
@@ -228,7 +228,7 @@
 	return hexd_buff;
 }
 
-/*! \brief Convert binary sequence to hexadecimal ASCII string
+/*! Convert binary sequence to hexadecimal ASCII string
  *  \param[in] buf pointer to sequence of bytes
  *  \param[in] len length of buf in number of bytes
  *  \returns pointer to zero-terminated string
@@ -241,7 +241,7 @@
 	return _osmo_hexdump(buf, len, " ");
 }
 
-/*! \brief Convert binary sequence to hexadecimal ASCII string
+/*! Convert binary sequence to hexadecimal ASCII string
  *  \param[in] buf pointer to sequence of bytes
  *  \param[in] len length of buf in number of bytes
  *  \returns pointer to zero-terminated string
@@ -265,7 +265,7 @@
 #include "../config.h"
 #ifdef HAVE_CTYPE_H
 #include <ctype.h>
-/*! \brief Convert an entire string to lower case
+/*! Convert an entire string to lower case
  *  \param[out] out output string, caller-allocated
  *  \param[in] in input string
  */
@@ -278,7 +278,7 @@
 	out[strlen(in)] = '\0';
 }
 
-/*! \brief Convert an entire string to upper case
+/*! Convert an entire string to upper case
  *  \param[out] out output string, caller-allocated
  *  \param[in] in input string
  */
@@ -292,7 +292,7 @@
 }
 #endif /* HAVE_CTYPE_H */
 
-/*! \brief Wishful thinking to generate a constant time compare
+/*! Wishful thinking to generate a constant time compare
  *  \param[in] exp Expected data
  *  \param[in] rel Comparison value
  *  \param[in] count Number of bytes to compare
@@ -313,7 +313,7 @@
 	return x? 1 : 0;
 }
 
-/*! \brief Generic retrieval of 1..8 bytes as big-endian uint64_t
+/*! Generic retrieval of 1..8 bytes as big-endian uint64_t
  *  \param[in] data Input data as byte-array
  *  \param[in] data_len Length of \a data in octets
  *  \returns uint64_t of \a data interpreted as big-endian
@@ -337,7 +337,7 @@
 	return value;
 }
 
-/*! \brief Generic big-endian encoding of big endian number up to 64bit
+/*! Generic big-endian encoding of big endian number up to 64bit
  *  \param[in] value unsigned integer value to be stored
  *  \param[in] data_len number of octets 
  *  \returns static buffer containing big-endian stored value
@@ -353,7 +353,7 @@
 	return buf;
 }
 
-/*! \brief Copy a C-string into a sized buffer
+/*! Copy a C-string into a sized buffer
  *  \param[in] src source string
  *  \param[out] dst destination string
  *  \param[in] siz size of the \a dst buffer
diff --git a/src/vty/command.c b/src/vty/command.c
index 0168462..a0824d3 100644
--- a/src/vty/command.c
+++ b/src/vty/command.c
@@ -43,7 +43,7 @@
 
 /*! \addtogroup command
  *  @{
- *  \brief VTY command handling
+ *  VTY command handling
  */
 /*! \file command.c */
 
@@ -88,7 +88,7 @@
 /* Default motd string. */
 const char *default_motd = "";
 
-/*! \brief print the version (and optionally copyright) information
+/*! print the version (and optionally copyright) information
  *
  * This is called from main when a daemon is invoked with -v or --version. */
 void print_version(int print_copyright)
@@ -123,7 +123,7 @@
 	return str;
 }
 
-/*! \brief Install top node of command vector. */
+/*! Install top node of command vector. */
 void install_node(struct cmd_node *node, int (*func) (struct vty *))
 {
 	vector_set_index(cmdvec, node->node, node);
@@ -160,7 +160,7 @@
 		return vty->node > CONFIG_NODE;
 }
 
-/*! \brief Sort each node's command element according to command string. */
+/*! Sort each node's command element according to command string. */
 void sort_node(void)
 {
 	unsigned int i, j;
@@ -240,7 +240,7 @@
 	}
 }
 
-/*! \brief Free allocated string vector. */
+/*! Free allocated string vector. */
 void cmd_free_strvec(vector v)
 {
 	unsigned int i;
@@ -256,7 +256,7 @@
 	vector_free(v);
 }
 
-/*! \brief Fetch next description.  Used in \ref cmd_make_descvec(). */
+/*! Fetch next description.  Used in \ref cmd_make_descvec(). */
 static char *cmd_desc_str(const char **string)
 {
 	const char *cp, *start;
@@ -291,7 +291,7 @@
 	return token;
 }
 
-/*! \brief New string vector. */
+/*! New string vector. */
 static vector cmd_make_descvec(const char *string, const char *descstr)
 {
 	int multiple = 0;
@@ -394,7 +394,7 @@
 	return size;
 }
 
-/*! \brief Return prompt character of specified node. */
+/*! Return prompt character of specified node. */
 const char *cmd_prompt(enum node_type node)
 {
 	struct cmd_node *cnode;
@@ -404,7 +404,7 @@
 }
 
 /*!
- * \brief escape all special asciidoc symbols
+ * escape all special asciidoc symbols
  * \param unsafe string
  * \return a new talloc char *
  */
@@ -595,7 +595,7 @@
 	return 0;
 }
 
-/* \brief Check if a command with given string exists at given node */
+/* Check if a command with given string exists at given node */
 static int check_element_exists(struct cmd_node *cnode, const char *cmdstring)
 {
 	int i;
@@ -611,7 +611,7 @@
 	return 0;
 }
 
-/*! \brief Install a command into a node
+/*! Install a command into a node
  *  \param[in] ntype Node Type
  *  \param[cmd] element to be installed
  */
@@ -3406,7 +3406,7 @@
 }
 
 /**
- * \brief Write the current running config to a given file
+ * Write the current running config to a given file
  * \param[in] vty the vty of the code
  * \param[in] filename where to store the file
  * \return 0 in case of success.
@@ -3426,7 +3426,7 @@
 }
 
 /**
- * \brief Save the current state to the config file
+ * Save the current state to the config file
  * \return 0 in case of success.
  *
  * If the filename already exists create a filename.sav
diff --git a/src/vty/fsm_vty.c b/src/vty/fsm_vty.c
index 3824fe8..acc8ca6 100644
--- a/src/vty/fsm_vty.c
+++ b/src/vty/fsm_vty.c
@@ -35,7 +35,7 @@
 
 /*! \addtogroup fsm
  *  @{
- *  \brief VTY interface for Osmocom FSM
+ *  VTY interface for Osmocom FSM
  *
  *  This is code implementing generic VTY access to Osmocom FSMs from
  *  libosmocore.  This means that any application can expose all state
@@ -48,7 +48,7 @@
  * consumption. */
 extern struct llist_head osmo_g_fsms;
 
-/*! \brief Print information about a FSM [class] to the given VTY
+/*! Print information about a FSM [class] to the given VTY
  *  \param vty The VTY to which to print
  *  \param[in] fsm The FSM class to print
  */
@@ -74,7 +74,7 @@
 	}
 }
 
-/*! \brief Print a FSM instance to the given VTY
+/*! Print a FSM instance to the given VTY
  *  \param vty The VTY to which to print
  *  \param[in] fsmi The FSM instance to print
  */
@@ -174,7 +174,7 @@
 	return CMD_SUCCESS;
 }
 
-/*! \brief Install VTY commands for FSM introspection
+/*! Install VTY commands for FSM introspection
  *  This installs a couple of VTY commands for introspection of FSM
  *  classes as well as FSM instances. Call this once from your
  *  application if you want to support those commands. */
diff --git a/src/vty/logging_vty.c b/src/vty/logging_vty.c
index 8c8a323..4cb1379 100644
--- a/src/vty/logging_vty.c
+++ b/src/vty/logging_vty.c
@@ -41,7 +41,7 @@
 
 /*! \addtogroup logging
  *  @{
- *  \brief Configuration of logging from VTY
+ *  Configuration of logging from VTY
  *
  *  This module implements functions that permit configuration of
  *  the libosmocore logging framework from VTY commands.  This applies
diff --git a/src/vty/stats_vty.c b/src/vty/stats_vty.c
index af69289..0557820 100644
--- a/src/vty/stats_vty.c
+++ b/src/vty/stats_vty.c
@@ -43,7 +43,7 @@
 
 /*! \addtogroup stats
  *  @{
- *  \brief VTY interface for statsd / statistic items
+ *  VTY interface for statsd / statistic items
  */
 
 /* containing version info */
@@ -576,7 +576,7 @@
 	return 1;
 }
 
-/*! \brief Add stats related commands to the VTY
+/*! Add stats related commands to the VTY
  *  Call this once during your application initialization if you would
  *  like to have stats VTY commands enabled.
  */
diff --git a/src/vty/telnet_interface.c b/src/vty/telnet_interface.c
index d53881a..d59516c 100644
--- a/src/vty/telnet_interface.c
+++ b/src/vty/telnet_interface.c
@@ -38,7 +38,7 @@
 
 /*! \addtogroup telnet_interface
  *  @{
- *  \brief Telnet interface towards Osmocom VTY
+ *  Telnet interface towards Osmocom VTY
  *
  *  This module contains the code implementing a telnet server for VTY
  *  access.  This telnet server gets linked into each libosmovty-using
@@ -61,7 +61,7 @@
 	.priv_nr    = 0,
 };
 
-/*! \brief Initialize telnet based VTY interface listening to 127.0.0.1
+/*! Initialize telnet based VTY interface listening to 127.0.0.1
  *  \param[in] tall_ctx \ref talloc context
  *  \param[in] priv private data to be passed to callback
  *  \param[in] port UDP port number
@@ -71,7 +71,7 @@
 	return telnet_init_dynif(tall_ctx, priv, "127.0.0.1", port);
 }
 
-/*! \brief Initialize telnet based VTY interface
+/*! Initialize telnet based VTY interface
  *  \param[in] tall_ctx \ref talloc context
  *  \param[in] priv private data to be passed to callback
  *  \param[in] ip IP to listen to ('::1' for localhost, '::0' for all, ...)
@@ -104,7 +104,7 @@
 
 extern struct host host;
 
-/*! \brief close a telnet connection */
+/*! close a telnet connection */
 int telnet_close_client(struct osmo_fd *fd)
 {
 	struct telnet_connection *conn = (struct telnet_connection*)fd->data;
@@ -182,7 +182,7 @@
 	return 0;
 }
 
-/*! \brief callback from core VTY code about VTY related events */
+/*! callback from core VTY code about VTY related events */
 void vty_event(enum event event, int sock, struct vty *vty)
 {
 	struct vty_signal_data sig_data = { 0, };
diff --git a/src/vty/utils.c b/src/vty/utils.c
index 6772593..267d76e 100644
--- a/src/vty/utils.c
+++ b/src/vty/utils.c
@@ -67,7 +67,7 @@
 	return 0;
 }
 
-/*! \brief print a rate counter group to given VTY
+/*! print a rate counter group to given VTY
  *  \param[in] vty The VTY to which it should be printed
  *  \param[in] prefix Any additional log prefix ahead of each line
  *  \param[in] ctrg Rate counter group to be printed
@@ -126,7 +126,7 @@
 	return 0;
 }
 
-/*! \brief print a stat item group to given VTY
+/*! print a stat item group to given VTY
  *  \param[in] vty The VTY to which it should be printed
  *  \param[in] prefix Any additional log prefix ahead of each line
  *  \param[in] statg Stat item group to be printed
@@ -200,7 +200,7 @@
 	vty_out_statistics_partial(vty, prefix, INT_MAX);
 }
 
-/*! \brief Generate a VTY command string from value_string */
+/*! Generate a VTY command string from value_string */
 char *vty_cmd_string_from_valstr(void *ctx, const struct value_string *vals,
 				 const char *prefix, const char *sep,
 				 const char *end, int do_lower)
diff --git a/src/vty/vector.c b/src/vty/vector.c
index b95e15c..c21bca7 100644
--- a/src/vty/vector.c
+++ b/src/vty/vector.c
@@ -29,7 +29,7 @@
 
 /*! \addtogroup vector
  *  @{
- *  \brief Generic vector routines, used by VTY internally
+ *  Generic vector routines, used by VTY internally
  */
 
 void *tall_vty_vec_ctx;
diff --git a/src/vty/vty.c b/src/vty/vty.c
index 2ec9538..6e60eb7 100644
--- a/src/vty/vty.c
+++ b/src/vty/vty.c
@@ -103,7 +103,7 @@
 	memset(vty->buf, 0, vty->max);
 }
 
-/*! \brief Allocate a new vty interface structure */
+/*! Allocate a new vty interface structure */
 struct vty *vty_new(void)
 {
 	struct vty *new = talloc_zero(tall_vty_ctx, struct vty);
@@ -196,7 +196,7 @@
 	}
 }
 
-/*! \brief Close a given vty interface. */
+/*! Close a given vty interface. */
 void vty_close(struct vty *vty)
 {
 	int i;
@@ -237,14 +237,14 @@
 	talloc_free(vty);
 }
 
-/*! \brief Return if this VTY is a shell or not */
+/*! Return if this VTY is a shell or not */
 int vty_shell(struct vty *vty)
 {
 	return vty->type == VTY_SHELL ? 1 : 0;
 }
 
 
-/*! \brief VTY standard output function
+/*! VTY standard output function
  *  \param[in] vty VTY to which we should print
  *  \param[in] format variable-length format string
  */
@@ -304,7 +304,7 @@
 	return len;
 }
 
-/*! \brief print a newline on the given VTY */
+/*! print a newline on the given VTY */
 int vty_out_newline(struct vty *vty)
 {
 	const char *p = vty_newline(vty);
@@ -312,19 +312,19 @@
 	return 0;
 }
 
-/*! \brief return the current index of a given VTY */
+/*! return the current index of a given VTY */
 void *vty_current_index(struct vty *vty)
 {
 	return vty->index;
 }
 
-/*! \brief return the current node of a given VTY */
+/*! return the current node of a given VTY */
 int vty_current_node(struct vty *vty)
 {
 	return vty->node;
 }
 
-/*! \brief Lock the configuration to a given VTY
+/*! Lock the configuration to a given VTY
  *  \param[in] vty VTY to which the config shall be locked
  *  \returns 1 on success, 0 on error
  *
@@ -339,7 +339,7 @@
 	return vty->config;
 }
 
-/*! \brief Unlock the configuration from a given VTY
+/*! Unlock the configuration from a given VTY
  *  \param[in] vty VTY from which the configuration shall be unlocked
  *  \returns 0 in case of success
  */
@@ -1272,7 +1272,7 @@
 	vty_redraw_line(vty);
 }
 
-/*! \brief Read data via vty socket. */
+/*! Read data via vty socket. */
 int vty_read(struct vty *vty)
 {
 	int i;
@@ -1492,7 +1492,7 @@
 	return 0;
 }
 
-/*! \brief Create new vty structure. */
+/*! Create new vty structure. */
 struct vty *
 vty_create (int vty_sock, void *priv)
 {
@@ -1702,7 +1702,7 @@
 	1,
 };
 
-/*! \brief Reset all VTY status. */
+/*! Reset all VTY status. */
 void vty_reset(void)
 {
 	unsigned int i;
@@ -1760,7 +1760,7 @@
 
 extern void *tall_bsc_ctx;
 
-/*! \brief Initialize VTY layer
+/*! Initialize VTY layer
  *  \param[in] app_info application information
  */
 /* Install vty's own commands like `who' command. */
@@ -1797,7 +1797,7 @@
 	install_element(VTY_NODE, &vty_bind_cmd);
 }
 
-/*! \brief Read the configuration file using the VTY code
+/*! Read the configuration file using the VTY code
  *  \param[in] file_name file name of the configuration file
  *  \param[in] priv private data to be passed to \ref vty_read_file
  */
diff --git a/src/write_queue.c b/src/write_queue.c
index 1e4cda5..d929774 100644
--- a/src/write_queue.c
+++ b/src/write_queue.c
@@ -27,12 +27,12 @@
 
 /*! \addtogroup write_queue
  *  @{
- *  \brief write queue for writing \ref msgb to sockets/fd's
+ *  write queue for writing \ref msgb to sockets/fd's
  */
 
 /*! \file write_queue.c */
 
-/*! \brief Select loop function for write queue handling
+/*! Select loop function for write queue handling
  *  \param[in] fd osmocom file descriptor
  *  \param[in] what bit-mask of events that have happened
  *  \returns 0 on success; negative on error
@@ -85,7 +85,7 @@
 	return 0;
 }
 
-/*! \brief Initialize a \ref osmo_wqueue structure
+/*! Initialize a \ref osmo_wqueue structure
  *  \param[in] queue Write queue to operate on
  *  \param[in] max_length Maximum length of write queue
  */
@@ -100,7 +100,7 @@
 	INIT_LLIST_HEAD(&queue->msg_queue);
 }
 
-/*! \brief Enqueue a new \ref msgb into a write queue
+/*! Enqueue a new \ref msgb into a write queue
  *  \param[in] queue Write queue to be used
  *  \param[in] data to-be-enqueued message buffer
  *  \returns 0 on success; negative on error
@@ -120,7 +120,7 @@
 	return 0;
 }
 
-/*! \brief Clear a \ref osmo_wqueue
+/*! Clear a \ref osmo_wqueue
  *  \param[in] queue Write queue to be cleared
  *
  * This function will clear (remove/release) all messages in it.
diff --git a/utils/conv_gen.py b/utils/conv_gen.py
index 0cdba75..6b6b267 100644
--- a/utils/conv_gen.py
+++ b/utils/conv_gen.py
@@ -170,8 +170,7 @@
 
 	def print_description(self, fi, brief = False):
 		if brief is True:
-			fi.write("/*! \\brief ")
-			fi.write("structure describing %s\n"
+			fi.write("/*! structure describing %s.\n"
 				% self.description[0])
 			for line in self.description[1:]:
 				fi.write(" * %s\n" % line)
