diff --git a/README.md b/README.md
--- a/README.md
+++ b/README.md
@@ -80,7 +80,7 @@
 
 To sum up, subfigures are made with a div having a figure `id`. Contents of said div consist of several paragraphs. All but last paragraphs contain one subfigure each, with captions, images and (optionally) reference attributes. Last paragraph contains figure caption.
 
-Output is customizable, with metadata fields. See [Customization](#Customization) for more information.
+Output is customizable, with metadata fields. See [Customization](#customization) for more information.
 
 Default settings will produce the following equivalent Markdown from example above:
 
@@ -223,7 +223,7 @@
 
 Reference syntax heavily relies on citation syntax. Basic reference is created by writing `@`, then basically desired label with prefix. It is also possible to reference a group of objects, by putting them into brackets with `;` as separator. Similar objects will be grouped in order of them appearing in citation brackets, and sequential reference numbers will be shortened, e.g. `1,2,3` will be shortened to `1-3`.
 
-You can capitalize first reference character to get capitalized prefix, e.g. `[@Fig:label1]` will produce `Fig. ...` by default. Capitalized prefixes are derived automatically by capitalizing first letter of every word in non-capitalized prefix, unless overriden with metadata settings. See [Customization](#Customization) for more information.
+You can capitalize first reference character to get capitalized prefix, e.g. `[@Fig:label1]` will produce `Fig. ...` by default. Capitalized prefixes are derived automatically by capitalizing first letter of every word in non-capitalized prefix, unless overriden with metadata settings. See [Customization](#customization) for more information.
 
 ### Lists
 
diff --git a/lib/Text/Pandoc/CrossRef/References/Blocks.hs b/lib/Text/Pandoc/CrossRef/References/Blocks.hs
--- a/lib/Text/Pandoc/CrossRef/References/Blocks.hs
+++ b/lib/Text/Pandoc/CrossRef/References/Blocks.hs
@@ -89,7 +89,7 @@
               ++ cont ++
               [ Para [RawInline (Format "tex") "\\caption"
                        , Span stopAttr caption]
-              , RawBlock (Format "tex") $ "\\label{"++label++"}"
+              , RawBlock (Format "tex") $ mkLaTeXLabel label
               , RawBlock (Format "tex") "\\end{figure}"]
           _  -> return $ Div (label, "subfigures":cls, attrs) $ cont ++ [Para capt]
   where
@@ -105,7 +105,7 @@
     let title' =
           case outFormat opts of
               f | isFormat "latex" f ->
-                RawInline (Format "tex") ("\\label{"++label++"}") : title
+                RawInline (Format "tex") (mkLaTeXLabel label) : title
               _  -> applyTemplate idxStr title $ tableTemplate opts
     return $ Table title' align widths header cells
 replaceBlocks opts cb@(CodeBlock (label, classes, attrs) code)
@@ -173,7 +173,7 @@
   | "eq:" `isPrefixOf` label
   = case outFormat opts of
       f | isFormat "latex" f ->
-        let eqn = "\\begin{equation}"++eq++"\\label{"++label++"}\\end{equation}"
+        let eqn = "\\begin{equation}"++eq++mkLaTeXLabel label++"\\end{equation}"
         in return $ RawInline (Format "tex") eqn
       _ -> do
         idxStr <- replaceAttr opts label (lookup "label" attrs) [] eqnRefs
@@ -202,7 +202,7 @@
 #if MIN_VERSION_pandoc(1,17,0)
                 alt
 #else
-                RawInline (Format "tex") ("\\label{"++label++"}") : alt
+                RawInline (Format "tex") (mkLaTeXLabel label) : alt
 #endif
               _  -> applyTemplate idxStr alt $ figureTemplate opts
         return $ Image attr alt' img
@@ -263,7 +263,7 @@
   let
     title' = fromMaybe title $ stripPrefix "fig:" title
     texlabel | null label = []
-             | otherwise = "\\label{" ++ label ++ "}"
+             | otherwise = mkLaTeXLabel label
     texalt | "nocaption" `elem` cls  = []
            | otherwise =
               [ RawInline (Format "tex") "["] ++ alt ++ [ RawInline (Format "tex") "]"]
diff --git a/lib/Text/Pandoc/CrossRef/References/Refs.hs b/lib/Text/Pandoc/CrossRef/References/Refs.hs
--- a/lib/Text/Pandoc/CrossRef/References/Refs.hs
+++ b/lib/Text/Pandoc/CrossRef/References/Refs.hs
@@ -86,7 +86,7 @@
   return $ p [texcit]
   where
     texcit =
-      RawInline (Format "tex") $ replace' '_' "ux5f" $
+      RawInline (Format "tex") $
       if cref opts then
         cref'++"{"++listLabels prefix "" "," "" cits++"}"
         else
@@ -96,14 +96,10 @@
     cap = maybe False isFirstUpper $ getLabelPrefix . citationId . head $ cits
     cref' | cap = "\\Cref"
           | otherwise = "\\cref"
-    replace' old new | prefix == "sec:" = replace old new
-                     | otherwise = id
-    replace old new = intercalate new . split old
-    split a = filter (/=[a]) . groupBy ((&&) `on` (/= a))
 
 listLabels :: String -> String -> String -> String -> [Citation] -> String
 listLabels prefix p sep s =
-  intercalate sep . map ((p ++) . (++ s) . (prefix++) . getLabelWithoutPrefix . citationId)
+  intercalate sep . map ((p ++) . (++ s) . mkLaTeXLabel' . (prefix++) . getLabelWithoutPrefix . citationId)
 
 getLabelWithoutPrefix :: String -> String
 getLabelWithoutPrefix = drop 1 . dropWhile (/=':')
diff --git a/lib/Text/Pandoc/CrossRef/Util/Util.hs b/lib/Text/Pandoc/CrossRef/Util/Util.hs
--- a/lib/Text/Pandoc/CrossRef/Util/Util.hs
+++ b/lib/Text/Pandoc/CrossRef/Util/Util.hs
@@ -10,6 +10,8 @@
 import Data.List (intercalate)
 import Data.Maybe (fromMaybe)
 import Data.Generics
+import Text.Pandoc.Writers.LaTeX
+import Data.Default
 
 isFormat :: String -> Maybe Format -> Bool
 isFormat fmt (Just (Format f)) = takeWhile (`notElem` "+-") f == fmt
@@ -41,3 +43,11 @@
     if q x'
     then return x'
     else gmapM (everywhereMBut' q f) x'
+
+mkLaTeXLabel :: String -> String
+mkLaTeXLabel l = "\\label{" ++ mkLaTeXLabel' l ++ "}"
+
+mkLaTeXLabel' :: String -> String
+mkLaTeXLabel' l =
+  let ll = writeLaTeX def $ Pandoc nullMeta [Div (l, [], []) []]
+  in takeWhile (/='}') . drop 1 . dropWhile (/='{') $ ll
diff --git a/pandoc-crossref.cabal b/pandoc-crossref.cabal
--- a/pandoc-crossref.cabal
+++ b/pandoc-crossref.cabal
@@ -2,7 +2,7 @@
 -- documentation, see http://haskell.org/cabal/users-guide/
 
 name:                pandoc-crossref
-version:             0.2.1.2
+version:             0.2.1.3
 synopsis:            Pandoc filter for cross-references
 description:         pandoc-crossref is a pandoc filter for numbering figures, equations, tables and cross-references to them.
 license:             GPL-2
@@ -25,7 +25,7 @@
 source-repository this
   type: git
   location: https://github.com/lierdakil/pandoc-crossref
-  tag: v0.2.1.2
+  tag: v0.2.1.3
 
 library
   exposed-modules:     Text.Pandoc.CrossRef
diff --git a/test/test-pandoc-crossref.hs b/test/test-pandoc-crossref.hs
--- a/test/test-pandoc-crossref.hs
+++ b/test/test-pandoc-crossref.hs
@@ -1,4 +1,4 @@
-{-# LANGUAGE FlexibleContexts #-}
+{-# LANGUAGE FlexibleContexts, CPP #-}
 import Test.Hspec
 import Text.Pandoc hiding (readMarkdown)
 import Text.Pandoc.Builder
@@ -266,7 +266,50 @@
             m' = setMeta "chapters" True m
         runCrossRef m' Nothing crossRefBlocks b `shouldBe` Native.demochapters
 
+    describe "LaTeX" $ do
+      let test = test' nullMeta
+          infixr 5 `test`
+          test' m i o = writeLaTeX def (Pandoc m $ runCrossRef m (Just $ Format "latex") crossRefBlocks (toList i)) `shouldBe` o
 
+      describe "Labels" $ do
+
+        it "Section labels" $
+          headerWith ("sec:section_label1", [], []) 1 (text "Section")
+            <> para (citeGen "sec:section_label" [1])
+            `test` "\\section{Section}\\label{sec:sectionux5flabel1}\n\nsec.~\\ref{sec:sectionux5flabel1}"
+
+        it "Image labels" $
+          figure "img.png" [] "Title" "figure_label1"
+            <> para (citeGen "fig:figure_label" [1])
+#if MIN_VERSION_pandoc(1,17,0)
+            `test` "\\begin{figure}[htbp]\n\\centering\n\\includegraphics{img.png}\n\\caption{Title}\\label{fig:figureux5flabel1}\n\\end{figure}\n\nfig.~\\ref{fig:figureux5flabel1}"
+#else
+            `test` "\\begin{figure}[htbp]\n\\centering\n\\includegraphics{img.png}\n\\caption{\\label{fig:figureux5flabel1}Title}\n\\end{figure}\n\nfig.~\\ref{fig:figureux5flabel1}"
+#endif
+
+        it "Eqn labels" $
+          equation "x^2" "some_equation1"
+            <> para (citeGen "eq:some_equation" [1])
+            `test` "\\begin{equation}x^2\\label{eq:someux5fequation1}\\end{equation}\n\neq.~\\ref{eq:someux5fequation1}"
+
+        it "Tbl labels" $
+          table' "A table" "some_table1"
+            <> para (citeGen "tbl:some_table" [1])
+#if MIN_VERSION_pandoc(1,17,0)
+            `test` "\\begin{longtable}[]{@{}@{}}\n\\caption{\\label{tbl:someux5ftable1}A table }\\tabularnewline\n\\toprule\n\\tabularnewline\n\\midrule\n\\endfirsthead\n\\toprule\n\\tabularnewline\n\\midrule\n\\endhead\n\\tabularnewline\n\\bottomrule\n\\end{longtable}\n\ntbl.~\\ref{tbl:someux5ftable1}"
+#else
+            `test` "\\begin{longtable}[c]{@{}@{}}\n\\caption{\\label{tbl:someux5ftable1}A table }\\tabularnewline\n\\toprule\n\\tabularnewline\n\\midrule\n\\endfirsthead\n\\toprule\n\\tabularnewline\n\\midrule\n\\endhead\n\\tabularnewline\n\\bottomrule\n\\end{longtable}\n\ntbl.~\\ref{tbl:someux5ftable1}"
+#endif
+
+        it "Code block labels" $ do
+          codeBlock' "A code block" "some_codeblock1"
+            <> para (citeGen "lst:some_codeblock" [1])
+            `test` "\\begin{codelisting}\n\\caption{A code block}\n\n\\hypertarget{lst:someux5fcodeblock1}{\\label{lst:someux5fcodeblock1}}\n\\begin{verbatim}\nmain :: IO ()\n\\end{verbatim}\n\n\\end{codelisting}\n\nlst.~\\ref{lst:someux5fcodeblock1}"
+          let test1 = test' $ setMeta "codeBlockCaptions" True nullMeta
+              infixr 5 `test1`
+          codeBlockForTable "some_codeblock1" <> paraText ": A code block"
+            <> para (citeGen "lst:some_codeblock" [1])
+            `test1` "\\begin{codelisting}\n\n\\caption{A code block}\n\n\\hypertarget{lst:someux5fcodeblock1}{\\label{lst:someux5fcodeblock1}}\n\\begin{verbatim}\nmain :: IO ()\n\\end{verbatim}\n\n\\end{codelisting}\n\nlst.~\\ref{lst:someux5fcodeblock1}"
 
 citeGen :: String -> [Int] -> Inlines
 citeGen p l = cite (mconcat $ map (cit . (p++) . show) l) $ text $
