diff --git a/CHANGELOG.md b/CHANGELOG.md
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,3 +1,10 @@
+## Stache 2.1.1
+
+* Fixed the bug related to incorrect indentation with nested partials.
+  [Issue 44](https://github.com/stackbuilders/stache/issues/44).
+
+* Dropped support for GHC 8.2 and older.
+
 ## Stache 2.1.0
 
 * Dropped support for GHC 8.0 and older.
diff --git a/README.md b/README.md
--- a/README.md
+++ b/README.md
@@ -7,11 +7,11 @@
 [![Build Status](https://travis-ci.org/stackbuilders/stache.svg?branch=master)](https://travis-ci.org/stackbuilders/stache)
 
 This is a Haskell implementation of Mustache templates. The implementation
-conforms to the version 1.1.3 of the
-official [Mustache specification](https://github.com/mustache/spec). It is
-extremely simple and straightforward to use with minimal but complete
-API—three functions to compile templates (from directory, from file, and
-from lazy text) and one to render them.
+conforms to the version 1.1.3 of the official [Mustache
+specification](https://github.com/mustache/spec). It is extremely simple and
+straightforward to use with minimal but complete API—three functions to
+compile templates (from directory, from file, and from lazy text) and one to
+render them.
 
 The implementation uses the Megaparsec parsing library to parse the
 templates which results in superior quality of error messages.
@@ -79,7 +79,7 @@
 Issues, bugs, and questions may be reported in [the GitHub issue tracker for
 this project](https://github.com/stackbuilders/stache/issues).
 
-Pull requests are also welcome and will be reviewed quickly.
+Pull requests are also welcome.
 
 ## License
 
diff --git a/Text/Mustache/Parser.hs b/Text/Mustache/Parser.hs
--- a/Text/Mustache/Parser.hs
+++ b/Text/Mustache/Parser.hs
@@ -11,6 +11,7 @@
 -- import the module, because "Text.Mustache" re-exports everything you may
 -- need, import that module instead.
 
+{-# LANGUAGE CPP               #-}
 {-# LANGUAGE OverloadedStrings #-}
 
 module Text.Mustache.Parser
@@ -21,7 +22,6 @@
 import Control.Monad.State.Strict
 import Data.Char (isSpace, isAlphaNum)
 import Data.Maybe (catMaybes)
-import Data.Semigroup ((<>))
 import Data.Text (Text)
 import Data.Void
 import Text.Megaparsec
@@ -29,6 +29,10 @@
 import Text.Mustache.Type
 import qualified Data.Text                  as T
 import qualified Text.Megaparsec.Char.Lexer as L
+
+#if !MIN_VERSION_base(4,13,0)
+import Data.Semigroup ((<>))
+#endif
 
 ----------------------------------------------------------------------------
 -- Parser
diff --git a/Text/Mustache/Render.hs b/Text/Mustache/Render.hs
--- a/Text/Mustache/Render.hs
+++ b/Text/Mustache/Render.hs
@@ -11,6 +11,7 @@
 -- import the module, because "Text.Mustache" re-exports everything you may
 -- need, import that module instead.
 
+{-# LANGUAGE CPP               #-}
 {-# LANGUAGE OverloadedStrings #-}
 
 module Text.Mustache.Render
@@ -24,20 +25,22 @@
 import Data.Foldable (asum)
 import Data.List (tails)
 import Data.List.NonEmpty (NonEmpty (..))
-import Data.Semigroup ((<>))
 import Data.Text (Text)
-import Text.Megaparsec.Pos (Pos, unPos)
+import Text.Megaparsec.Pos (Pos, mkPos, unPos)
 import Text.Mustache.Type
 import qualified Data.HashMap.Strict     as H
 import qualified Data.List.NonEmpty      as NE
 import qualified Data.Map                as M
-import qualified Data.Semigroup          as S
 import qualified Data.Text               as T
 import qualified Data.Text.Lazy          as TL
 import qualified Data.Text.Lazy.Builder  as B
 import qualified Data.Text.Lazy.Encoding as TL
 import qualified Data.Vector             as V
 
+#if !MIN_VERSION_base(4,13,0)
+import Data.Semigroup ((<>))
+#endif
+
 ----------------------------------------------------------------------------
 -- The rendering monad
 
@@ -250,7 +253,7 @@
 addIndents Nothing  Nothing  = Nothing
 addIndents Nothing  (Just x) = Just x
 addIndents (Just x) Nothing  = Just x
-addIndents (Just x) (Just y) = Just (x S.<> y)
+addIndents (Just x) (Just y) = Just (mkPos $ unPos x + unPos y - 1)
 {-# INLINE addIndents #-}
 
 -- | Build indentation of specified length by repeating the space character.
diff --git a/Text/Mustache/Type.hs b/Text/Mustache/Type.hs
--- a/Text/Mustache/Type.hs
+++ b/Text/Mustache/Type.hs
@@ -11,7 +11,6 @@
 -- because "Text.Mustache" re-exports everything you may need, import that
 -- module instead.
 
-{-# LANGUAGE CPP                        #-}
 {-# LANGUAGE DeriveDataTypeable         #-}
 {-# LANGUAGE DeriveGeneric              #-}
 {-# LANGUAGE GeneralizedNewtypeDeriving #-}
@@ -42,10 +41,6 @@
 import qualified Data.Map  as M
 import qualified Data.Text as T
 import qualified Language.Haskell.TH.Syntax as TH
-
-#if !MIN_VERSION_base(4,11,0)
-import Data.Semigroup
-#endif
 
 -- | Mustache template as name of “top-level” template and a collection of
 -- all available templates (partials).
diff --git a/stache.cabal b/stache.cabal
--- a/stache.cabal
+++ b/stache.cabal
@@ -1,7 +1,7 @@
 name:                 stache
-version:              2.1.0
+version:              2.1.1
 cabal-version:        1.18
-tested-with:          GHC==8.2.2, GHC==8.4.4, GHC==8.6.5
+tested-with:          GHC==8.4.4, GHC==8.6.5, GHC==8.8.3
 license:              BSD3
 license-file:         LICENSE.md
 author:               Mark Karpov <markkarpov92@gmail.com>
@@ -29,15 +29,15 @@
 
 library
   build-depends:      aeson            >= 0.11 && < 1.5
-                    , base             >= 4.10 && < 5.0
+                    , base             >= 4.11 && < 5.0
                     , bytestring       >= 0.10 && < 0.11
                     , containers       >= 0.5  && < 0.7
                     , deepseq          >= 1.4  && < 1.5
                     , directory        >= 1.2  && < 1.4
                     , filepath         >= 1.2  && < 1.5
-                    , megaparsec       >= 7.0  && < 8.0
+                    , megaparsec       >= 7.0  && < 9.0
                     , mtl              >= 2.1  && < 3.0
-                    , template-haskell >= 2.10 && < 2.15
+                    , template-haskell >= 2.11 && < 2.16
                     , text             >= 1.2  && < 1.3
                     , unordered-containers >= 0.2.5 && < 0.3
                     , vector           >= 0.11 && < 0.13
@@ -56,7 +56,6 @@
                       -Wincomplete-record-updates
                       -Wincomplete-uni-patterns
                       -Wnoncanonical-monad-instances
-                      -Wnoncanonical-monadfail-instances
   default-language:   Haskell2010
 
 test-suite tests
@@ -64,13 +63,13 @@
   hs-source-dirs:     tests
   type:               exitcode-stdio-1.0
   build-depends:      aeson            >= 0.11 && < 1.5
-                    , base             >= 4.10 && < 5.0
+                    , base             >= 4.11 && < 5.0
                     , containers       >= 0.5  && < 0.7
                     , hspec            >= 2.0  && < 3.0
                     , hspec-megaparsec >= 2.0  && < 3.0
-                    , megaparsec       >= 7.0  && < 8.0
+                    , megaparsec       >= 7.0  && < 9.0
                     , stache
-                    , template-haskell >= 2.10 && < 2.15
+                    , template-haskell >= 2.11 && < 2.16
                     , text             >= 1.2  && < 1.3
   other-modules:      Text.Mustache.Compile.THSpec
                     , Text.Mustache.ParserSpec
@@ -88,12 +87,12 @@
   hs-source-dirs:     mustache-spec
   type:               exitcode-stdio-1.0
   build-depends:      aeson            >= 0.11 && < 1.5
-                    , base             >= 4.10 && < 5.0
+                    , base             >= 4.11 && < 5.0
                     , bytestring       >= 0.10 && < 0.11
                     , containers       >= 0.5  && < 0.7
                     , file-embed
                     , hspec            >= 2.0  && < 3.0
-                    , megaparsec       >= 7.0  && < 8.0
+                    , megaparsec       >= 7.0  && < 9.0
                     , stache
                     , text             >= 1.2  && < 1.3
                     , yaml             >= 0.8  && < 0.12
@@ -111,7 +110,7 @@
                     , base             >= 4.10 && < 5.0
                     , criterion        >= 0.6.2.1 && < 1.6
                     , deepseq          >= 1.4  && < 1.5
-                    , megaparsec       >= 7.0  && < 8.0
+                    , megaparsec       >= 7.0  && < 9.0
                     , stache
                     , text             >= 1.2  && < 1.3
   if flag(dev)
diff --git a/tests/Text/Mustache/Compile/THSpec.hs b/tests/Text/Mustache/Compile/THSpec.hs
--- a/tests/Text/Mustache/Compile/THSpec.hs
+++ b/tests/Text/Mustache/Compile/THSpec.hs
@@ -10,18 +10,18 @@
 
 import Test.Hspec
 
-#if MIN_VERSION_template_haskell(2,11,0)
-import Data.Semigroup ((<>))
 import Text.Mustache.Type
 import qualified Data.Map                 as M
 import qualified Text.Mustache.Compile.TH as TH
+
+#if !MIN_VERSION_base(4,13,0)
+import Data.Semigroup ((<>))
 #endif
 
 main :: IO ()
 main = hspec spec
 
 spec :: Spec
-#if MIN_VERSION_template_haskell(2,11,0)
 spec = do
   describe "mustache" $
     it "compiles template using QuasiQuotes at compile time" $
@@ -52,6 +52,3 @@
 barTemplate :: Template
 barTemplate = Template "bar" $
   M.singleton "bar" [TextBlock "And this is the ‘bar’.\n"]
-#else
-spec = return ()
-#endif
diff --git a/tests/Text/Mustache/ParserSpec.hs b/tests/Text/Mustache/ParserSpec.hs
--- a/tests/Text/Mustache/ParserSpec.hs
+++ b/tests/Text/Mustache/ParserSpec.hs
@@ -1,3 +1,4 @@
+{-# LANGUAGE CPP               #-}
 {-# LANGUAGE OverloadedStrings #-}
 
 module Text.Mustache.ParserSpec
@@ -5,12 +6,15 @@
   , spec )
 where
 
-import Data.Semigroup ((<>))
 import Test.Hspec
 import Test.Hspec.Megaparsec
 import Text.Megaparsec
 import Text.Mustache.Parser
 import Text.Mustache.Type
+
+#if !MIN_VERSION_base(4,13,0)
+import Data.Semigroup ((<>))
+#endif
 
 main :: IO ()
 main = hspec spec
diff --git a/tests/Text/Mustache/RenderSpec.hs b/tests/Text/Mustache/RenderSpec.hs
--- a/tests/Text/Mustache/RenderSpec.hs
+++ b/tests/Text/Mustache/RenderSpec.hs
@@ -138,6 +138,14 @@
                        , ("partial", [TextBlock "one\ntwo\nthree"]) ]
       in renderMustache template Null `shouldBe`
            "   one\n   two\n   three*"
+  context "when rendering a nested partial" $
+    it "renders outer partial correctly" $
+      let template = Template "outer" $
+            M.fromList [ ("inner",  [TextBlock "x"])
+                       , ("middle", [Partial "inner"  (Just $ mkPos 1)])
+                       , ("outer",  [Partial "middle" (Just $ mkPos 1)])
+                       ]
+      in renderMustache template Null `shouldBe` "x"
   context "when using dotted keys inside a section" $
     it "it should be equivalent to access via one more section" $
       r [ Section (key "things")
diff --git a/tests/Text/Mustache/TypeSpec.hs b/tests/Text/Mustache/TypeSpec.hs
--- a/tests/Text/Mustache/TypeSpec.hs
+++ b/tests/Text/Mustache/TypeSpec.hs
@@ -1,3 +1,4 @@
+{-# LANGUAGE CPP               #-}
 {-# LANGUAGE OverloadedStrings #-}
 
 module Text.Mustache.TypeSpec
@@ -5,10 +6,13 @@
   , spec )
 where
 
-import Data.Semigroup ((<>))
 import Test.Hspec
 import Text.Mustache.Type
 import qualified Data.Map as M
+
+#if !MIN_VERSION_base(4,13,0)
+import Data.Semigroup ((<>))
+#endif
 
 main :: IO ()
 main = hspec spec
