diff --git a/src/Text/Pandoc/Writers/LaTeX.hs b/src/Text/Pandoc/Writers/LaTeX.hs
index e0cdd2054..467ef304a 100644
--- a/src/Text/Pandoc/Writers/LaTeX.hs
+++ b/src/Text/Pandoc/Writers/LaTeX.hs
@@ -1148,14 +1148,22 @@ inlineToLaTeX (Cite cits lst) = do
      Biblatex -> citationsToBiblatex cits
      _        -> inlineListToLaTeX lst
 
-inlineToLaTeX (Code (_,classes,_) str) = do
+inlineToLaTeX (Code (_,classes,kvs) str) = do
   opts <- gets stOptions
   inHeading <- gets stInHeading
   inItem <- gets stInItem
   let listingsCode = do
-        let listingsopt = case getListingsLanguage classes of
-                               Just l  -> "[language=" ++ mbBraced l ++ "]"
-                               Nothing -> ""
+        let listingsopts = (case getListingsLanguage classes of
+                                Just l  -> (("language", mbBraced l):)
+                                Nothing -> id) $
+                           [(k,v) | (k,v) <- kvs
+                                  , k `notElem` ["exports","tangle","results"]]
+        let listingsopt = if null listingsopts
+                             then ""
+                             else "[" ++
+                                  intercalate ", "
+                                  (map (\(k,v) -> k ++ "=" ++ v)
+                                   listingsopts) ++ "]"
         inNote <- gets stInNote
         when inNote $ modify $ \s -> s{ stVerbInNote = True }
         let chr = case "!\"'()*,-./:;?@" \\ str of
diff --git a/test/command/5420.md b/test/command/5420.md
new file mode 100644
index 000000000..b638fe5d2
--- /dev/null
+++ b/test/command/5420.md
@@ -0,0 +1,6 @@
+```
+% pandoc --listings -t latex
+`int a = 1;`{.cpp style=cpp}
+^D
+\passthrough{\lstinline[language={C++}, style=cpp]!int a = 1;!}
+```