diff --git a/CHANGELOG.md b/CHANGELOG.md
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -3,6 +3,15 @@
 `jira-wiki-markup` uses [PVP Versioning][1].
 The changelog is available [on GitHub][2].
 
+1.1.2
+=====
+
+Released 2020-03-18
+
+* Don't escape colon/semicolon unless necessary: it is necessary
+  to escape colons or semicolons only if they could otherwise
+  become part of a smiley.
+
 1.1.1
 =====
 
diff --git a/jira-wiki-markup.cabal b/jira-wiki-markup.cabal
--- a/jira-wiki-markup.cabal
+++ b/jira-wiki-markup.cabal
@@ -1,6 +1,6 @@
 cabal-version:       2.0
 name:                jira-wiki-markup
-version:             1.1.1
+version:             1.1.2
 synopsis:            Handle Jira wiki markup
 description:         Parse jira wiki text into an abstract syntax tree for easy
                      transformation to other formats.
@@ -18,8 +18,8 @@
 tested-with:         GHC == 8.0.2
                    , GHC == 8.2.2
                    , GHC == 8.4.4
-                   , GHC == 8.6.4
-                   , GHC == 8.8.1
+                   , GHC == 8.6.5
+                   , GHC == 8.8.3
 
 source-repository head
   type:                git
diff --git a/src/Text/Jira/Printer.hs b/src/Text/Jira/Printer.hs
--- a/src/Text/Jira/Printer.hs
+++ b/src/Text/Jira/Printer.hs
@@ -56,6 +56,12 @@
     (renderInline s `T.snoc` c) <> prettyInlines rest
   s@Linebreak : SpecialChar c : rest@(Space {}:_) ->
     (renderInline s `T.snoc` c) <> prettyInlines rest
+  -- Colon and semicolon only need escaping if they could otherwise
+  -- become part of a smiley.
+  SpecialChar c : rest@(x : _) | c `elem` [':', ';'] && not (isSmileyStr x) ->
+    T.singleton c <> prettyInlines rest
+  [SpecialChar c] | c `elem` [':', ';'] ->
+    T.singleton c
   (x:xs) ->
     renderInline x <> prettyInlines xs
 
@@ -63,6 +69,9 @@
     startsWithAlphaNum t = case T.uncons t of
       Just (c, _) -> isAlphaNum c
       _           -> False
+    isSmileyStr = \case
+      Str x | x `elem` ["D", ")", "(", "P"] -> True
+      _                                     -> False
 
 -- | Internal state used by the printer.
 data PrinterState = PrinterState
diff --git a/test/Text/Jira/PrinterTests.hs b/test/Text/Jira/PrinterTests.hs
--- a/test/Text/Jira/PrinterTests.hs
+++ b/test/Text/Jira/PrinterTests.hs
@@ -149,6 +149,24 @@
     , testCase "markup followed by punctuation" $
       prettyInlines [Styled Emphasis [Str "Word"], Str "."] @?=
       "_Word_."
+
+    , testCase "colon as last character" $
+      prettyInlines [Str "end", SpecialChar ':'] @?=
+      "end:"
+
+    , testCase "semicolon is escaped before close paren" $
+      -- would be treated as "winking smiley" otherwise
+      prettyInlines [SpecialChar ';', Str ")"] @?=
+      "\\;)"
+
+    , testCase "colon is not escaped before space" $
+      prettyInlines [SpecialChar ':', Space, Str "end"] @?=
+      ": end"
+
+    , testCase "colon not escaped before opening paren" $
+      -- escaping the paren is enough
+      prettyInlines [SpecialChar ':', SpecialChar '('] @?=
+      ":\\("
     ]
   ]
 
