diff --git a/CHANGELOG.md b/CHANGELOG.md
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,3 +1,14 @@
+## Ormolu 0.1.2.0
+
+* Fixed the bug when comments in different styles got glued together after
+  formatting. [Issue 589](https://github.com/tweag/ormolu/issues/589).
+
+* Added `-i` as a shortcut for `--mode inplace`. [Issue
+  467](https://github.com/tweag/ormolu/issues/467).
+
+* Improved grouping of top-level declarations. [Issue
+  466](https://github.com/tweag/ormolu/issues/466).
+
 ## Ormolu 0.1.1.0
 
 * Imports in a import lists are now normalized: duplicate imports are
diff --git a/README.md b/README.md
--- a/README.md
+++ b/README.md
@@ -49,8 +49,8 @@
 packages:
 - '.'
 
-$ stack build -- to build
-$ stack install -- to install
+$ stack build # to build
+$ stack install # to install
 ```
 
 To use Ormolu directly from GitHub with Nix, this snippet may come in handy:
diff --git a/app/Main.hs b/app/Main.hs
--- a/app/Main.hs
+++ b/app/Main.hs
@@ -8,6 +8,7 @@
 
 import Control.Exception (SomeException, displayException, try)
 import Control.Monad
+import Data.Bool (bool)
 import Data.Either (lefts)
 import Data.List (intercalate, sort)
 import qualified Data.Text.IO as TIO
@@ -134,13 +135,18 @@
 optsParser :: Parser Opts
 optsParser =
   Opts
-    <$> (option parseMode . mconcat)
-      [ long "mode",
-        short 'm',
-        metavar "MODE",
-        value Stdout,
-        help "Mode of operation: 'stdout' (default), 'inplace', or 'check'"
-      ]
+    <$> ( (fmap (bool Stdout InPlace) . switch . mconcat)
+            [ short 'i',
+              help "A shortcut for --mode inplace"
+            ]
+            <|> (option parseMode . mconcat)
+              [ long "mode",
+                short 'm',
+                metavar "MODE",
+                value Stdout,
+                help "Mode of operation: 'stdout' (default), 'inplace', or 'check'"
+              ]
+        )
     <*> configParser
     <*> (many . strArgument . mconcat)
       [ metavar "FILE",
diff --git a/data/examples/declaration/signature/type/infix-promoted-type-constructor-out.hs b/data/examples/declaration/signature/type/infix-promoted-type-constructor-out.hs
--- a/data/examples/declaration/signature/type/infix-promoted-type-constructor-out.hs
+++ b/data/examples/declaration/signature/type/infix-promoted-type-constructor-out.hs
@@ -1,3 +1,2 @@
 fun1 :: Def ('[Ref s (Stored Uint32), IBool] 'T.:-> IBool)
-
 fun2 :: Def ('[Ref s (Stored Uint32), IBool] ':-> IBool)
diff --git a/data/examples/declaration/signature/type/unrelated-out.hs b/data/examples/declaration/signature/type/unrelated-out.hs
new file mode 100644
--- /dev/null
+++ b/data/examples/declaration/signature/type/unrelated-out.hs
@@ -0,0 +1,4 @@
+clientFunc1 :: SomeType1
+clientFunc2 :: SomeType2
+clientFunc3 :: SomeType3
+clientFunc1 :<|> clientFunc2 :<|> clientFunc3 = hoistClient foo bar baz
diff --git a/data/examples/declaration/signature/type/unrelated.hs b/data/examples/declaration/signature/type/unrelated.hs
new file mode 100644
--- /dev/null
+++ b/data/examples/declaration/signature/type/unrelated.hs
@@ -0,0 +1,4 @@
+clientFunc1 :: SomeType1
+clientFunc2 :: SomeType2
+clientFunc3 :: SomeType3
+clientFunc1 :<|> clientFunc2 :<|> clientFunc3 = hoistClient foo bar baz
diff --git a/data/examples/declaration/value/function/implicit-params-out.hs b/data/examples/declaration/value/function/implicit-params-out.hs
--- a/data/examples/declaration/value/function/implicit-params-out.hs
+++ b/data/examples/declaration/value/function/implicit-params-out.hs
@@ -1,6 +1,7 @@
 {-# LANGUAGE ImplicitParams #-}
 
 sortBy :: (a -> a -> Bool) -> [a] -> [a]
+sortBy = undefined
 
 sort :: (?cmp :: a -> a -> Bool) => [a] -> [a]
 sort = sortBy ?cmp
diff --git a/data/examples/declaration/value/function/implicit-params.hs b/data/examples/declaration/value/function/implicit-params.hs
--- a/data/examples/declaration/value/function/implicit-params.hs
+++ b/data/examples/declaration/value/function/implicit-params.hs
@@ -1,6 +1,8 @@
 {-# LANGUAGE ImplicitParams #-}
 sortBy :: (a -> a -> Bool) -> [a] -> [a]
 
+sortBy = undefined
+
 sort   :: (?cmp :: a -> a -> Bool) => [a] -> [a]
 sort    = sortBy ?cmp
 
diff --git a/data/examples/other/argument-comment-out.hs b/data/examples/other/argument-comment-out.hs
--- a/data/examples/other/argument-comment-out.hs
+++ b/data/examples/other/argument-comment-out.hs
@@ -9,7 +9,6 @@
   -- | Foo
   Int ->
   Int
-
 foo ::
   Foo a =>
   -- | Foo
diff --git a/data/examples/other/comment-glued-together-out.hs b/data/examples/other/comment-glued-together-out.hs
new file mode 100644
--- /dev/null
+++ b/data/examples/other/comment-glued-together-out.hs
@@ -0,0 +1,7 @@
+module Main (main) where
+
+-- | Foo.
+
+-- Bar
+main :: IO ()
+main = return ()
diff --git a/data/examples/other/comment-glued-together.hs b/data/examples/other/comment-glued-together.hs
new file mode 100644
--- /dev/null
+++ b/data/examples/other/comment-glued-together.hs
@@ -0,0 +1,6 @@
+module Main (main) where
+
+{- | Foo. -}
+-- Bar
+main :: IO ()
+main = return ()
diff --git a/ormolu.cabal b/ormolu.cabal
--- a/ormolu.cabal
+++ b/ormolu.cabal
@@ -1,6 +1,6 @@
 cabal-version:   1.18
 name:            ormolu
-version:         0.1.1.0
+version:         0.1.2.0
 license:         BSD3
 license-file:    LICENSE.md
 maintainer:      Mark Karpov <mark.karpov@tweag.io>
diff --git a/src/Ormolu/Printer/Comments.hs b/src/Ormolu/Printer/Comments.hs
--- a/src/Ormolu/Printer/Comments.hs
+++ b/src/Ormolu/Printer/Comments.hs
@@ -154,6 +154,7 @@
   -- | Last printed comment span
   Maybe SpanMark ->
   Bool
+needsNewlineBefore _ (Just (HaddockSpan _ _)) = True
 needsNewlineBefore l mlastMark =
   case spanMarkSpan <$> mlastMark of
     Nothing -> False
@@ -238,8 +239,7 @@
       -- lexemes in front of it and goes right after the previous comment.
       not (hasAtomsBefore comment)
         && ( case mlastMark of
-               Just (HaddockSpan _ spn) ->
-                 srcSpanEndLine spn + 1 == srcSpanStartLine l
+               Just (HaddockSpan _ _) -> False
                Just (CommentSpan spn) ->
                  srcSpanEndLine spn + 1 == srcSpanStartLine l
                _ -> False
diff --git a/src/Ormolu/Printer/Meat/Declaration.hs b/src/Ormolu/Printer/Meat/Declaration.hs
--- a/src/Ormolu/Printer/Meat/Declaration.hs
+++ b/src/Ormolu/Printer/Meat/Declaration.hs
@@ -85,9 +85,6 @@
     isHaddock _ = False
 
 -- | Group relevant declarations together.
---
--- Add a declaration to a group iff it is relevant to either the first or
--- the preceding declaration in the group.
 groupDecls :: [LHsDecl GhcPs] -> [NonEmpty (LHsDecl GhcPs)]
 groupDecls [] = []
 groupDecls (l@(L _ DocNext) : xs) =
@@ -100,7 +97,8 @@
   let (grp, rest) = flip span (zip (header : xs) xs) $ \(previous, current) ->
         let relevantToHdr = groupedDecls header current
             relevantToPrev = groupedDecls previous current
-         in relevantToHdr || relevantToPrev
+            isDeclSeries = declSeries previous current
+         in isDeclSeries || relevantToHdr || relevantToPrev
    in (header :| map snd grp) : groupDecls (map snd rest)
 
 p_hsDecl :: FamilyStyle -> HsDecl GhcPs -> R ()
@@ -195,6 +193,18 @@
     -- This looks only at Haddocks, normal comments are handled elsewhere
     (DocNext, _) -> True
     (_, DocPrev) -> True
+    _ -> False
+
+-- | Detect declaration series that should not have blanks between them.
+declSeries ::
+  LHsDecl GhcPs ->
+  LHsDecl GhcPs ->
+  Bool
+declSeries (L _ x) (L _ y) =
+  case (x, y) of
+    ( SigD NoExtField (TypeSig NoExtField _ _),
+      SigD NoExtField (TypeSig NoExtField _ _)
+      ) -> True
     _ -> False
 
 intersects :: Ord a => [a] -> [a] -> Bool
diff --git a/src/Ormolu/Printer/Meat/Declaration.hs-boot b/src/Ormolu/Printer/Meat/Declaration.hs-boot
--- a/src/Ormolu/Printer/Meat/Declaration.hs-boot
+++ b/src/Ormolu/Printer/Meat/Declaration.hs-boot
@@ -9,5 +9,4 @@
 import Ormolu.Printer.Meat.Common
 
 p_hsDecls :: FamilyStyle -> [LHsDecl GhcPs] -> R ()
-
 p_hsDeclsRespectGrouping :: FamilyStyle -> [LHsDecl GhcPs] -> R ()
diff --git a/src/Ormolu/Printer/Meat/Declaration/Value.hs-boot b/src/Ormolu/Printer/Meat/Declaration/Value.hs-boot
--- a/src/Ormolu/Printer/Meat/Declaration/Value.hs-boot
+++ b/src/Ormolu/Printer/Meat/Declaration/Value.hs-boot
@@ -11,11 +11,7 @@
 import Ormolu.Printer.Combinators
 
 p_valDecl :: HsBindLR GhcPs GhcPs -> R ()
-
 p_pat :: Pat GhcPs -> R ()
-
 p_hsExpr :: HsExpr GhcPs -> R ()
-
 p_hsSplice :: HsSplice GhcPs -> R ()
-
 p_stringLit :: String -> R ()
