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
