diff --git a/CHANGELOG.md b/CHANGELOG.md
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,3 +1,5 @@
+# 0.4.0.2
+- small fix for different line number count
 # 0.4.0.1
 - small fix for smaller diff context
 # 0.4.0.0
diff --git a/pretty-diff.cabal b/pretty-diff.cabal
--- a/pretty-diff.cabal
+++ b/pretty-diff.cabal
@@ -4,10 +4,10 @@
 --
 -- see: https://github.com/sol/hpack
 --
--- hash: 2de8bb4300f0e1ec9cb8d75f7c3bf5d103cc03bdff7e05ca1afee805857aaafa
+-- hash: 4f793bc4b441a763102c87017e021f3fab936f2ee528c21b41c3a8444c5922b9
 
 name:           pretty-diff
-version:        0.4.0.1
+version:        0.4.0.2
 synopsis:       Pretty printing a diff of two values.
 description:    Please see the README at <https://github.com/stoeffel/pretty-diff>.
 category:       Diffing
diff --git a/src/Pretty/Diff.hs b/src/Pretty/Diff.hs
--- a/src/Pretty/Diff.hs
+++ b/src/Pretty/Diff.hs
@@ -38,7 +38,7 @@
 import qualified Data.Algorithm.Diff as Diff
 import Data.Default (Default, def)
 import Data.Function ((&))
-import Data.List (take, transpose, zipWith)
+import Data.List (take, transpose)
 import Data.Maybe (fromMaybe, mapMaybe)
 import Data.String (IsString)
 import Data.Text (Text)
@@ -108,12 +108,17 @@
 pretty Config {separatorText, wrapping, multilineContext} x y =
   let xs = Text.lines x
       ys = Text.lines y
-   in [ zipWith (above' wrapping) xs ys & extractContext multilineContext (False, [], []) & mconcat,
+   in [ zipWithSameLength (above' wrapping) xs ys & extractContext multilineContext (False, [], []) & mconcat,
         separator separatorText,
-        zipWith (below' wrapping) xs ys & extractContext multilineContext (False, [], []) & mconcat
+        zipWithSameLength (below' wrapping) xs ys & extractContext multilineContext (False, [], []) & mconcat
       ]
         & mconcat
 
+zipWithSameLength :: (Maybe a -> Maybe a -> b) -> [a] -> [a] -> [b]
+zipWithSameLength f [] ys = map (\y -> f Nothing (Just y)) ys
+zipWithSameLength f xs [] = map (\x -> f (Just x) Nothing) xs
+zipWithSameLength f (x : xs) (y : ys) = f (Just x) (Just y) : zipWithSameLength f xs ys
+
 -- | Printing The first value and the diff indicator above.
 --
 --  @
@@ -126,11 +131,25 @@
 --  @
 above :: Wrapping -> Text -> Text -> Text
 above wrapping x y =
-  let (_, res) = above' wrapping x y
+  let (_, res) = above' wrapping (Just x) (Just y)
    in res
 
-above' :: Wrapping -> Text -> Text -> (Bool, Text)
-above' wrapping x y =
+above' :: Wrapping -> Maybe Text -> Maybe Text -> (Bool, Text)
+above' wrapping Nothing (Just y) =
+  ( True,
+    withDiffLine First down (map Diff.Second $ Text.unpack y)
+      & wrap wrapping
+      & filterEmptyLines
+      & Text.unlines
+  )
+above' wrapping (Just x) Nothing =
+  ( True,
+    withDiffLine First down (map Diff.First $ Text.unpack x)
+      & wrap wrapping
+      & filterEmptyLines
+      & Text.unlines
+  )
+above' wrapping (Just x) (Just y) =
   let diffs =
         Diff.getDiff
           (Text.unpack x)
@@ -154,11 +173,25 @@
 --  @
 below :: Wrapping -> Text -> Text -> Text
 below wrapping x y =
-  let (_, res) = below' wrapping x y
+  let (_, res) = below' wrapping (Just x) (Just y)
    in res
 
-below' :: Wrapping -> Text -> Text -> (Bool, Text)
-below' wrapping x y =
+below' :: Wrapping -> Maybe Text -> Maybe Text -> (Bool, Text)
+below' wrapping Nothing (Just y) =
+  ( True,
+    withDiffLine Second up (map Diff.Second $ Text.unpack y)
+      & wrap wrapping
+      & filterEmptyLines
+      & Text.unlines
+  )
+below' wrapping (Just x) Nothing =
+  ( True,
+    withDiffLine Second up (map Diff.First $ Text.unpack x)
+      & wrap wrapping
+      & filterEmptyLines
+      & Text.unlines
+  )
+below' wrapping (Just x) (Just y) =
   let diffs =
         Diff.getDiff
           (Text.unpack x)
diff --git a/test/Main.hs b/test/Main.hs
--- a/test/Main.hs
+++ b/test/Main.hs
@@ -282,6 +282,74 @@
             "c",
             "d",
             "e"
+          ],
+      testCase "wrapping w/ surrounding multilineContext" $
+        expectDiffToEqual
+          ( Diff.pretty
+              def {Diff.wrapping = Diff.Wrap 3, Diff.multilineContext = Diff.Surrounding 1 "..."}
+              "a\nb\nc\nxdddddddd\ne\n"
+              "a\nb\nc\nddddddddd\ne\n"
+          )
+          [ "...",
+            "c",
+            "▼",
+            "xdd",
+            "ddd",
+            "ddd",
+            "e",
+            "╷",
+            "│",
+            "╵",
+            "...",
+            "c",
+            "ddd",
+            "ddd",
+            "ddd",
+            "  ▲",
+            "e"
+          ],
+      testCase "few lines (no diff)" $
+        expectDiffToEqual
+          ( Diff.pretty
+              def {Diff.wrapping = Diff.NoWrap, Diff.multilineContext = Diff.Surrounding 1 "..."}
+              "a\n"
+              "a\n"
+          )
+          [ "a",
+            "╷",
+            "│",
+            "╵",
+            "a"
+          ],
+      testCase "first is longer" $
+        expectDiffToEqual
+          ( Diff.pretty
+              def
+              "a\nB"
+              "a\n"
+          )
+          [ "a",
+            "▼",
+            "B",
+            "╷",
+            "│",
+            "╵",
+            "a"
+          ],
+      testCase "second is longer" $
+        expectDiffToEqual
+          ( Diff.pretty
+              def
+              "a\n"
+              "a\nB"
+          )
+          [ "a",
+            "╷",
+            "│",
+            "╵",
+            "a",
+            "B",
+            "▲"
           ]
     ]
 
