diff --git a/src/OpenFOAM/db/dictionary/dictionaryIO.C b/src/OpenFOAM/db/dictionary/dictionaryIO.C
index 243799231f2a920d880e78a41ab3ca41fcafd922..2f0987d16b7e2b4ebafd8ce7ad63184696f49d97 100644
--- a/src/OpenFOAM/db/dictionary/dictionaryIO.C
+++ b/src/OpenFOAM/db/dictionary/dictionaryIO.C
@@ -79,12 +79,7 @@ bool Foam::dictionary::substituteKeyword(const word& keyword)
     {
         const dictionary& addDict = ePtr->dict();
 
-        for
-        (
-            IDLList<entry>::const_iterator iter = addDict.begin();
-            iter != addDict.end();
-            ++iter
-        )
+        forAllConstIter(IDLList<entry>, addDict, iter)
         {
             add(iter());
         }
@@ -152,15 +147,22 @@ void Foam::dictionary::write(Ostream& os, bool subDict) const
         os << nl << indent << token::BEGIN_BLOCK << incrIndent << nl;
     }
 
-    for
-    (
-        IDLList<entry>::const_iterator iter = begin();
-        iter != end();
-        ++iter
-    )
+    forAllConstIter(IDLList<entry>, *this, iter)
     {
-        // Write entry & follow with carriage return.
-        os << *iter;
+        const entry& e = *iter;
+
+        // Write entry
+        os << e;
+
+        // Add new line if applicable
+        if
+        (
+            (e.isDict() || (!e.isDict() && parent()==dictionary::null))
+         && e != *last()
+        )
+        {
+            os << nl;
+        }
 
         // Check stream before going to next entry.
         if (!os.good())