diff --git a/CHANGELOG.md b/CHANGELOG.md
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,5 +1,17 @@
 # Changelog
 
+## 1.0.5.0 - 2019-11-30
+
+### Fixed
+
+  - Encode empty objects as "{}" rather than ""
+
+## 1.0.4.0 - 2019-11-06
+
+### Fixed
+
+  - Quote date strings (e.g. "2038-01-19")
+
 ## 1.0.3.0 - 2019-11-03
 
 ### Fixed
diff --git a/aeson-yaml.cabal b/aeson-yaml.cabal
--- a/aeson-yaml.cabal
+++ b/aeson-yaml.cabal
@@ -1,7 +1,7 @@
 cabal-version: 1.12
 
 name:           aeson-yaml
-version:        1.0.4.0
+version:        1.0.5.0
 homepage:       https://github.com/clovyr/aeson-yaml
 bug-reports:    https://github.com/clovyr/aeson-yaml/issues
 author:         Patrick Nielsen
diff --git a/src/Data/Aeson/Yaml.hs b/src/Data/Aeson/Yaml.hs
--- a/src/Data/Aeson/Yaml.hs
+++ b/src/Data/Aeson/Yaml.hs
@@ -82,22 +82,23 @@
 encodeBuilder :: Bool -> Bool -> Int -> Data.Aeson.Value -> Builder
 encodeBuilder alwaysQuote newlineBeforeObject level value =
   case value of
-    Object hm ->
-      mconcat $
-      (if newlineBeforeObject
-         then (prefix :)
-         else id) $
-      intersperse prefix $ map (keyValue level) (sortOn fst $ HashMap.toList hm)
+    Object hm
+      | null hm -> bs "{}"
+      | otherwise ->
+        mconcat $
+        (if newlineBeforeObject
+           then (prefix :)
+           else id) $
+        intersperse prefix $
+        map (keyValue level) (sortOn fst $ HashMap.toList hm)
       where prefix = bs "\n" <> indent level
-    Array vec ->
-      if Vector.null vec
-        then bs " []"
-        else mconcat $
-             (prefix :) $
-             intersperse prefix $
-             map
-               (encodeBuilder alwaysQuote False (level + 1))
-               (Vector.toList vec)
+    Array vec
+      | null vec -> bs "[]"
+      | otherwise ->
+        mconcat $
+        (prefix :) $
+        intersperse prefix $
+        map (encodeBuilder alwaysQuote False (level + 1)) (Vector.toList vec)
       where prefix = bs "\n" <> indent level <> bs "- "
     String s -> encodeText True alwaysQuote level s
     Number n -> bl (Data.Aeson.encode n)
@@ -109,8 +110,10 @@
         [ encodeText False alwaysQuote level k
         , ":"
         , case v of
-            Object _ -> ""
-            Array _ -> ""
+            Object hm
+              | not (null hm) -> ""
+            Array vec
+              | not (null vec) -> ""
             _ -> " "
         , encodeBuilder alwaysQuote True (level' + 1) v
         ]
diff --git a/test/Test/Data/Aeson/Yaml.hs b/test/Test/Data/Aeson/Yaml.hs
--- a/test/Test/Data/Aeson/Yaml.hs
+++ b/test/Test/Data/Aeson/Yaml.hs
@@ -29,8 +29,17 @@
     }
 
 testCases :: [TestCase]
-testCases = [tcDataTypes, tcNestedListsAndObjects, tcQuoted]
+testCases = [tcDataTypes, tcNestedListsAndObjects, tcQuoted, tcEmptyList]
 
+tcEmptyList :: TestCase
+tcEmptyList = 
+  TestCase
+    { tcName = "Empty root list"
+    , tcInput = "[]"
+    , tcOutput = "[]\n"
+    , tcAlwaysQuote = False
+    }
+
 tcDataTypes :: TestCase
 tcDataTypes =
   TestCase
@@ -39,6 +48,7 @@
         [s|
 {
    "nullValue": null,
+   "emptyObject": {},
    "isTrue": true,
    "isFalse": false,
    "numberString": "12345",
@@ -59,6 +69,7 @@
         [s|asteriskString: "*"
 boolString: "true"
 dateString: "2038-01-19"
+emptyObject: {}
 expString: "1e3"
 isFalse: false
 isTrue: true
