diff --git a/components/esm/cellref.cpp b/components/esm/cellref.cpp
index a61a16ca44..d4ef29e04e 100644
--- a/components/esm/cellref.cpp
+++ b/components/esm/cellref.cpp
@@ -24,33 +24,6 @@ void ESM::RefNum::save (ESMWriter &esm, bool wide, const std::string& tag) const
 }
 
 
-void ESM::CellRef::clearData()
-{
-    mScale = 1;
-    mOwner.clear();
-    mGlobalVariable.clear();
-    mSoul.clear();
-    mFaction.clear();
-    mFactionRank = -2;
-    mChargeInt = -1;
-    mEnchantmentCharge = -1;
-    mGoldValue = 0;
-    mDestCell.clear();
-    mLockLevel = 0;
-    mKey.clear();
-    mTrap.clear();
-    mReferenceBlocked = -1;
-    mTeleport = false;
-    
-    for (int i=0; i<3; ++i)
-    {
-        mDoorDest.pos[i] = 0;
-        mDoorDest.rot[i] = 0;
-        mPos.pos[i] = 0;
-        mPos.rot[i] = 0;
-    }
-}
-
 void ESM::CellRef::load (ESMReader& esm, bool &isDeleted, bool wideRefNum)
 {
     loadId(esm, wideRefNum);
@@ -66,6 +39,8 @@ void ESM::CellRef::loadId (ESMReader& esm, bool wideRefNum)
     if (esm.isNextSub ("NAM0"))
         esm.skipHSub();
 
+    blank();
+
     mRefNum.load (esm, wideRefNum);
 
     mRefID = esm.getHNString ("NAME");
@@ -75,8 +50,6 @@ void ESM::CellRef::loadData(ESMReader &esm, bool &isDeleted)
 {
     isDeleted = false;
 
-    clearData();
-
     bool isLoaded = false;
     while (!isLoaded && esm.hasMoreSubs())
     {
@@ -153,6 +126,11 @@ void ESM::CellRef::save (ESMWriter &esm, bool wideRefNum, bool inInventory, bool
 
     esm.writeHNCString("NAME", mRefID);
 
+    if (isDeleted) {
+        esm.writeHNCString("DELE", "");
+        return;
+    }
+
     if (mScale != 1.0) {
         esm.writeHNT("XSCL", mScale);
     }
@@ -197,18 +175,35 @@ void ESM::CellRef::save (ESMWriter &esm, bool wideRefNum, bool inInventory, bool
 
     if (!inInventory)
         esm.writeHNT("DATA", mPos, 24);
-
-    if (isDeleted)
-    {
-        esm.writeHNCString("DELE", "");
-    }
 }
 
 void ESM::CellRef::blank()
 {
     mRefNum.unset();
-    mRefID.clear();
-    clearData();
+    mRefID.clear();    
+    mScale = 1;
+    mOwner.clear();
+    mGlobalVariable.clear();
+    mSoul.clear();
+    mFaction.clear();
+    mFactionRank = -2;
+    mChargeInt = -1;
+    mEnchantmentCharge = -1;
+    mGoldValue = 0;
+    mDestCell.clear();
+    mLockLevel = 0;
+    mKey.clear();
+    mTrap.clear();
+    mReferenceBlocked = -1;
+    mTeleport = false;
+    
+    for (int i=0; i<3; ++i)
+    {
+        mDoorDest.pos[i] = 0;
+        mDoorDest.rot[i] = 0;
+        mPos.pos[i] = 0;
+        mPos.rot[i] = 0;
+    }
 }
 
 bool ESM::operator== (const RefNum& left, const RefNum& right)
diff --git a/components/esm/cellref.hpp b/components/esm/cellref.hpp
index a9edd291e0..c371a4f015 100644
--- a/components/esm/cellref.hpp
+++ b/components/esm/cellref.hpp
@@ -33,10 +33,7 @@ namespace ESM
 
     class CellRef
     {
-            void clearData();
-
         public:
-
             // Reference number
             // Note: Currently unused for items in containers
             RefNum mRefNum;
diff --git a/components/esm/loadbsgn.cpp b/components/esm/loadbsgn.cpp
index 56dc1897cf..0413a86104 100644
--- a/components/esm/loadbsgn.cpp
+++ b/components/esm/loadbsgn.cpp
@@ -52,12 +52,13 @@ namespace ESM
 
     void BirthSign::save(ESMWriter &esm, bool isDeleted) const
     {
+        esm.writeHNCString("NAME", mId);
+
         if (isDeleted)
         {
             esm.writeHNCString("DELE", "");
+            return;
         }
-
-        esm.writeHNCString("NAME", mId);
         esm.writeHNOCString("FNAM", mName);
         esm.writeHNOCString("TNAM", mTexture);
         esm.writeHNOCString("DESC", mDescription);
diff --git a/components/esm/loadcell.cpp b/components/esm/loadcell.cpp
index 2d8daa584f..703a4f4cba 100644
--- a/components/esm/loadcell.cpp
+++ b/components/esm/loadcell.cpp
@@ -62,7 +62,8 @@ namespace ESM
     {
         isDeleted = false;
 
-        bool hasName = false;
+        blank();
+
         bool hasData = false;
         bool isLoaded = false;
         while (!isLoaded && esm.hasMoreSubs())
@@ -72,7 +73,6 @@ namespace ESM
             {
                 case ESM::FourCC<'N','A','M','E'>::value:
                     mName = esm.getHString();
-                    hasName = true;
                     break;
                 case ESM::FourCC<'D','A','T','A'>::value:
                     esm.getHT(mData, 12);
@@ -89,20 +89,12 @@ namespace ESM
             }
         }
 
-        if (!hasName)
-            esm.fail("Missing NAME subrecord");
         if (!hasData)
             esm.fail("Missing DATA subrecord");
     }
 
     void Cell::loadCell(ESMReader &esm, bool saveContext)
     {
-        mWater = 0.0f;
-        mWaterInt = false;
-        mMapColor = 0;
-        mRegion.clear();
-        mRefNumCounter = 0;
-
         bool isLoaded = false;
         while (!isLoaded && esm.hasMoreSubs())
         {
@@ -117,6 +109,7 @@ namespace ESM
                     break;
                 case ESM::FourCC<'W','H','G','T'>::value:
                     esm.getHT(mWater);
+                    mWaterInt = false;
                     break;
                 case ESM::FourCC<'A','M','B','I'>::value:
                     esm.getHT(mAmbi);
@@ -153,14 +146,15 @@ namespace ESM
 
     void Cell::save(ESMWriter &esm, bool isDeleted) const
     {
-        esm.writeHNCString("NAME", mName);
+        esm.writeHNOCString("NAME", mName);
+        esm.writeHNT("DATA", mData, 12);
 
         if (isDeleted)
         {
             esm.writeHNCString("DELE", "");
+            return;
         }
 
-        esm.writeHNT("DATA", mData, 12);
         if (mData.mFlags & Interior)
         {
             if (mWaterInt) {
diff --git a/components/esm/loadland.cpp b/components/esm/loadland.cpp
index 65e30f00f7..13f65ea43a 100644
--- a/components/esm/loadland.cpp
+++ b/components/esm/loadland.cpp
@@ -169,6 +169,7 @@ namespace ESM
         if (isDeleted)
         {
             esm.writeHNCString("DELE", "");
+            return;
         }
 
         if (mLandData)
diff --git a/components/esm/loadltex.cpp b/components/esm/loadltex.cpp
index cf026dbf1d..e9cd4578d1 100644
--- a/components/esm/loadltex.cpp
+++ b/components/esm/loadltex.cpp
@@ -47,14 +47,14 @@ namespace ESM
     }
     void LandTexture::save(ESMWriter &esm, bool isDeleted) const
     {
+        esm.writeHNCString("NAME", mId);
+        esm.writeHNT("INTV", mIndex);
+        esm.writeHNCString("DATA", mTexture);
+
         if (isDeleted)
         {
             esm.writeHNCString("DELE", "");
         }
-
-        esm.writeHNCString("NAME", mId);
-        esm.writeHNT("INTV", mIndex);
-        esm.writeHNCString("DATA", mTexture);
     }
 
     void LandTexture::blank()
diff --git a/components/esm/loadpgrd.cpp b/components/esm/loadpgrd.cpp
index 8027be91ca..95e6a906fd 100644
--- a/components/esm/loadpgrd.cpp
+++ b/components/esm/loadpgrd.cpp
@@ -43,20 +43,18 @@ namespace ESM
         int edgeCount = 0;
 
         bool hasData = false;
-        bool hasName = false;
         while (esm.hasMoreSubs())
         {
             esm.getSubName();
             switch (esm.retSubName().val)
             {
+                case ESM::FourCC<'N','A','M','E'>::value:
+                    mCell = esm.getHString();
+                    break;
                 case ESM::FourCC<'D','A','T','A'>::value:
                     esm.getHT(mData, 12);
                     hasData = true;
                     break;
-                case ESM::FourCC<'N','A','M','E'>::value:
-                    mCell = esm.getHString();
-                    hasName = true;
-                    break;
                 case ESM::FourCC<'P','G','R','P'>::value:
                 {
                     esm.getSubHeader();
@@ -125,14 +123,12 @@ namespace ESM
 
         if (!hasData)
             esm.fail("Missing DATA subrecord");
-        if (!hasName)
-            esm.fail("Missing NAME subrecord");
     }
 
     void Pathgrid::save(ESMWriter &esm, bool isDeleted) const
     {
-        esm.writeHNT("DATA", mData, 12);
         esm.writeHNCString("NAME", mCell);
+        esm.writeHNT("DATA", mData, 12);
 
         if (isDeleted)
         {
diff --git a/components/esm/loadregn.cpp b/components/esm/loadregn.cpp
index add821c3e8..9f3089763c 100644
--- a/components/esm/loadregn.cpp
+++ b/components/esm/loadregn.cpp
@@ -81,12 +81,14 @@ namespace ESM
 
     void Region::save(ESMWriter &esm, bool isDeleted) const
     {
+        esm.writeHNCString("NAME", mId);
+
         if (isDeleted)
         {
             esm.writeHNCString("DELE", "");
+            return;
         }
 
-        esm.writeHNString("NAME", mId);
         esm.writeHNOCString("FNAM", mName);
 
         if (esm.getVersion() == VER_12)
diff --git a/components/esm/loadscpt.cpp b/components/esm/loadscpt.cpp
index 09bf7f125e..b36cf7ecfb 100644
--- a/components/esm/loadscpt.cpp
+++ b/components/esm/loadscpt.cpp
@@ -123,6 +123,7 @@ namespace ESM
         if (isDeleted)
         {
             esm.writeHNCString("DELE", "");
+            return;
         }
 
         if (!mVarNames.empty())
diff --git a/components/esm/loadsndg.cpp b/components/esm/loadsndg.cpp
index 400b1072b6..189cc97df9 100644
--- a/components/esm/loadsndg.cpp
+++ b/components/esm/loadsndg.cpp
@@ -51,14 +51,17 @@ namespace ESM
     void SoundGenerator::save(ESMWriter &esm, bool isDeleted) const
     {
         esm.writeHNCString("NAME", mId);
+
+        if (isDeleted)
+        {
+            esm.writeHNCString("DELE", "");
+            return;
+        }
+
         esm.writeHNT("DATA", mType, 4);
         esm.writeHNOCString("CNAM", mCreature);
         esm.writeHNOCString("SNAM", mSound);
         
-        if (isDeleted)
-        {
-            esm.writeHNCString("DELE", "");
-        }
     }
 
     void SoundGenerator::blank()
diff --git a/components/esm/loadsscr.cpp b/components/esm/loadsscr.cpp
index 6af6c96dc0..a211a99bf5 100644
--- a/components/esm/loadsscr.cpp
+++ b/components/esm/loadsscr.cpp
@@ -19,14 +19,14 @@ namespace ESM
             esm.getSubName();
             switch (esm.retSubName().val)
             {
-                case ESM::FourCC<'D','A','T','A'>::value:
-                    mData = esm.getHString();
-                    hasData = true;
-                    break;
                 case ESM::FourCC<'N','A','M','E'>::value:
                     mId = esm.getHString();
                     hasName = true;
                     break;
+                case ESM::FourCC<'D','A','T','A'>::value:
+                    mData = esm.getHString();
+                    hasData = true;
+                    break;
                 case ESM::FourCC<'D','E','L','E'>::value:
                     esm.skipHSub();
                     isDeleted = true;
@@ -37,20 +37,22 @@ namespace ESM
             }
         }
 
-        if (!hasData)
-            esm.fail("Missing DATA");
         if (!hasName)
             esm.fail("Missing NAME");
+        if (!hasData && !isDeleted)
+            esm.fail("Missing DATA");
     }
     void StartScript::save(ESMWriter &esm, bool isDeleted) const
     {
-        esm.writeHNString("DATA", mData);
-        esm.writeHNString("NAME", mId);
-
+        esm.writeHNCString("NAME", mId);
         if (isDeleted)
         {
             esm.writeHNCString("DELE", "");
         }
+        else
+        {
+            esm.writeHNString("DATA", mData);
+        }
     }
 
     void StartScript::blank()