diff --git a/after/ftplugin/markdown.vim b/after/ftplugin/markdown.vim
index eca3dac..2c2de47 100644
--- a/after/ftplugin/markdown.vim
+++ b/after/ftplugin/markdown.vim
@@ -5,6 +5,7 @@ endif
 
 setlocal foldmethod=expr
 setlocal foldexpr=MarkdownFold(v:lnum)
+setlocal conceallevel=2
 
 function! MarkdownFold(lnum)
   let l:line = getline(a:lnum)
diff --git a/after/syntax/markdown.vim b/after/syntax/markdown.vim
index 0934962..822b8b5 100644
--- a/after/syntax/markdown.vim
+++ b/after/syntax/markdown.vim
@@ -10,11 +10,38 @@ hi link markdownUrl Include
 syn match markdownCheckboxTick '\[\zsx\ze\]' contained
 syn match markdownCheckboxDelimiter '\[[ x]\]' contained contains=markdownCheckboxTick
 syn match markdownCheckbox '\s*\* \[[ x]\] ' contains=markdownCheckboxDelimiter,markdownListMarker
-syn region markdownCheckboxDone start='\s*\* \ze\[x\] ' keepend end='\ze\(\n^\s*\*\|\n^\s*\n\)' contains=markdownCheckbox
+syn region markdownCheckboxDone start='\s*\* \ze\[x\] ' keepend end='\ze\(\n^\s*\*\|\n^\s*\n\)' contains=markdownCheckbox,@markdownCheckboxDoneInline
+
+if has('conceal') && get(g:, 'markdown_syntax_conceal', 1) == 1
+  let s:concealends = ' concealends'
+endif
+exe 'syn region markdownCheckboxItalic matchgroup=markdownCheckboxItalicDelimiter start="\S\@<=\*\|\*\S\@=" end="\S\@<=\*\|\*\S\@=" keepend contains=markdownLineStart,@Spell contained' . s:concealends
+exe 'syn region markdownCheckboxItalic matchgroup=markdownCheckboxItalicDelimiter start="\S\@<=_\|_\S\@=" end="\S\@<=_\|_\S\@=" keepend contains=markdownLineStart,@Spell contained' . s:concealends
+exe 'syn region markdownCheckboxBold matchgroup=markdownCheckboxBoldDelimiter start="\S\@<=\*\*\|\*\*\S\@=" end="\S\@<=\*\*\|\*\*\S\@=" keepend contains=markdownLineStart,markdownItalic,@Spell contained' . s:concealends
+exe 'syn region markdownCheckboxBold matchgroup=markdownCheckboxBoldDelimiter start="\S\@<=__\|__\S\@=" end="\S\@<=__\|__\S\@=" keepend contains=markdownLineStart,markdownItalic,@Spell contained' . s:concealends
+exe 'syn region markdownCheckboxBoldItalic matchgroup=markdownCheckboxBoldItalicDelimiter start="\S\@<=\*\*\*\|\*\*\*\S\@=" end="\S\@<=\*\*\*\|\*\*\*\S\@=" keepend contains=markdownLineStart,@Spell contained' . s:concealends
+exe 'syn region markdownCheckboxBoldItalic matchgroup=markdownCheckboxBoldItalicDelimiter start="\S\@<=___\|___\S\@=" end="\S\@<=___\|___\S\@=" keepend contains=markdownLineStart,@Spell contained' . s:concealends
+
+syn region markdownCheckboxCode matchgroup=markdownCheckboxCodeDelimiter start="`" end="`" keepend contains=markdownLineStart contained
+syn region markdownCheckboxCode matchgroup=markdownCheckboxCodeDelimiter start="`` \=" end=" \=``" keepend contains=markdownLineStart contained
+
+syn cluster markdownInline contains=markdownLineBreak,markdownLinkText,markdownItalic,markdownBold,markdownCode,markdownEscape,@htmlTop,markdownError
+syn cluster markdownCheckboxDoneInline contains=markdownLineBreak,markdownLinkText,markdownCheckboxItalic,markdownCheckboxBold,markdownCheckboxBoldItalic,markdownCheckboxCode,markdownEscape,@htmlTop,markdownError
 
 hi link markdownCheckboxTick markdownListMarker
 hi link markdownCheckboxDelimiter PreProc
 hi link markdownCheckboxDone Comment
+call CloneHighlightGroupWithAttributes('markdownCheckboxDone',
+      \ 'markdownCheckboxItalic', 'italic')
+hi link markdownCheckboxItalicDelimiter markdownCheckboxItalic
+call CloneHighlightGroupWithAttributes('markdownCheckboxDone',
+      \ 'markdownCheckboxBold', 'bold')
+hi link markdownCheckboxBoldDelimiter markdownCheckboxBold
+call CloneHighlightGroupWithAttributes('markdownCheckboxDone',
+      \ 'markdownCheckboxBoldItalic', 'bold,italic')
+hi link markdownCheckboxBoldItalicDelimiter markdownCheckboxBoldItalic
+hi link markdownCheckboxCode SpecialComment
+hi link markdownCheckboxCodeDelimiter PreProc
 
 " Add match for TODO
 syn match markdownTodo 'TODO'