diff --git a/UltiSnips/c_doxygen.snippets b/UltiSnips/c_doxygen.snippets
index bacb38b..1fcc05a 100644
--- a/UltiSnips/c_doxygen.snippets
+++ b/UltiSnips/c_doxygen.snippets
@@ -1,19 +1,50 @@
-snippet "/// p" "Doxygen param tag"
+snippet "/// p" "Doxygen parameter block"
 /// @param${1/.+/[/}$1${1/.+/]/} $0
 endsnippet
 
-snippet "/// b" "Doxygen brief tag"
+snippet "/// t" "Doxygen template parameter block"
+/// @tparam $0
+endsnippet
+
+snippet "/// b" "Doxygen brief block"
 /// @brief $0
 endsnippet
 
-snippet "/// r" "Doxygen return tag"
+snippet "/// r" "Doxygen return block"
 /// @return $0
 endsnippet
 
-snippet "/// n" "Doxygen note tag"
+snippet "/// n" "Doxygen note block"
 /// @note $0
 endsnippet
 
 snippet copydoc "Doxygen copydoc block"
 /// @copydoc $0
 endsnippet
+
+snippet "/// a" "Doxygen attention block"
+/// @attention $0
+endsnippet
+
+snippet "/// cp" "Doxygen copydoc block"
+/// @copydoc $0
+endsnippet
+
+global !p
+def complete(t, opts):
+	if t:
+		opts = [m[len(t):] for m in opts if m.startswith(t)]
+	if len(opts) == 1:
+		return opts[0]
+	elif len(opts) == 0:
+		return ""
+	return '|'.join(opts)
+endglobal
+
+snippet "/// d" "Doxygen dot graph block"
+/// @dot${1: "${2:caption}"}
+/// $3`!p snip.rv=complete(t[3], ['graph', 'digraph'])` ${4:name} {
+///		$0
+/// }
+/// @enddot
+endsnippet