         done()
 
 describe 'Array EmbeddedDocument', ->
-  before ->
-    ChildModelSchema = mongoose.Schema
-      text: type: String
-
-    ChildModelSchema.plugin encrypt, key: encryptionKey
-
-    ParentModelSchema = mongoose.Schema
-      text: type: String
-      children: [ChildModelSchema]
-
-    @ParentModel = mongoose.model 'Parent', ParentModelSchema
-    @ChildModel = mongoose.model 'Child', ChildModelSchema
-
-  beforeEach (done) ->
-    @parentDoc = new @ParentModel
-      text: 'Unencrypted text'
-
-    childDoc = new @ChildModel
-      text: 'Child unencrypted text'
-
-    @parentDoc.children.addToSet childDoc
-
-    @parentDoc.save done
-
-  after (done) ->
-    @parentDoc.remove done
-
-  describe 'document.save()', ->
-    it 'should have decrypted fields', ->
-      assert.equal @parentDoc.children[0].text, 'Child unencrypted text'
-
-    it 'should persist children as encrypted', (done) ->
-      @ParentModel.find
-        _id: @parentDoc._id
-        'children._ct': $exists: true
-        'children.text': $exists: false
-      , (err, docs) ->
-        assert.lengthOf docs, 1
-        assert.propertyVal docs[0].children[0], 'text', 'Child unencrypted text'
-        done()
-
-  describe 'document.find()', ->
-    it 'when parent doc found, should pass an unencrypted version of the embedded document to the callback', (done) ->
-      @ParentModel.findById @parentDoc._id, (err, doc) ->
-        assert.equal err, null
-        assert.propertyVal doc, 'text', 'Unencrypted text'
-        assert.isArray doc.children
-        assert.isObject doc.children[0]
-        assert.property doc.children[0], 'text', 'Child unencrypted text'
-        assert.property doc.children[0], '_id'
-        assert.notProperty doc.children[0], '_ct'
-        done()
+  describe 'when only child is encrypted', ->
+    before ->
+      ChildModelSchema = mongoose.Schema
+        text: type: String
+
+      ChildModelSchema.plugin encrypt, key: encryptionKey
+
+      ParentModelSchema = mongoose.Schema
+        text: type: String
+        children: [ChildModelSchema]
+
+      @ParentModel = mongoose.model 'Parent', ParentModelSchema
+      @ChildModel = mongoose.model 'Child', ChildModelSchema
+
+    beforeEach (done) ->
+      @parentDoc = new @ParentModel
+        text: 'Unencrypted text'
+
+      childDoc = new @ChildModel
+        text: 'Child unencrypted text'
+
+      @parentDoc.children.addToSet childDoc
+
+      @parentDoc.save done
+
+    after (done) ->
+      @parentDoc.remove done
+
+    describe 'document.save()', ->
+      it 'should have decrypted fields', ->
+        assert.equal @parentDoc.children[0].text, 'Child unencrypted text'
+
+      it 'should persist children as encrypted', (done) ->
+        @ParentModel.find
+          _id: @parentDoc._id
+          'children._ct': $exists: true
+          'children.text': $exists: false
+        , (err, docs) ->
+          assert.lengthOf docs, 1
+          assert.propertyVal docs[0].children[0], 'text', 'Child unencrypted text'
+          done()
+
+    describe 'document.find()', ->
+      it 'when parent doc found, should pass an unencrypted version of the embedded document to the callback', (done) ->
+        @ParentModel.findById @parentDoc._id, (err, doc) ->
+          assert.equal err, null
+          assert.propertyVal doc, 'text', 'Unencrypted text'
+          assert.isArray doc.children
+          assert.isObject doc.children[0]
+          assert.property doc.children[0], 'text', 'Child unencrypted text'
+          assert.property doc.children[0], '_id'
+          assert.notProperty doc.children[0], '_ct'
+          done()
+
+  describe 'when child and parent are encrypted', ->
+    before ->
+      ChildModelSchema = mongoose.Schema
+        text: type: String
+
+      ChildModelSchema.plugin encrypt, key: encryptionKey
+
+      ParentModelSchema = mongoose.Schema
+        text: type: String
+        children: [ChildModelSchema]
+
+      ParentModelSchema.plugin encrypt, key: encryptionKey, fields: ['text']
+
+      @ParentModel = mongoose.model 'ParentBoth', ParentModelSchema
+      @ChildModel = mongoose.model 'ChildBoth', ChildModelSchema
+
+    beforeEach (done) ->
+      @parentDoc = new @ParentModel
+        text: 'Unencrypted text'
+
+      childDoc = new @ChildModel
+        text: 'Child unencrypted text'
+
+      @parentDoc.children.addToSet childDoc
+
+      @parentDoc.save done
+
+    after (done) ->
+      @parentDoc.remove done
+
+    describe 'document.save()', ->
+      it 'should have decrypted fields on parent', ->
+        assert.equal @parentDoc.text, 'Unencrypted text'
+
+      it 'should have decrypted fields', ->
+        assert.equal @parentDoc.children[0].text, 'Child unencrypted text'
+
+      it 'should persist children as encrypted', (done) ->
+        @ParentModel.find
+          _id: @parentDoc._id
+          'children._ct': $exists: true
+          'children.text': $exists: false
+        , (err, docs) ->
+          assert.lengthOf docs, 1
+          assert.propertyVal docs[0].children[0], 'text', 'Child unencrypted text'
+          done()
+
+    describe 'document.find()', ->
+      it 'when parent doc found, should pass an unencrypted version of the embedded document to the callback', (done) ->
+        @ParentModel.findById @parentDoc._id, (err, doc) ->
+          assert.equal err, null
+          assert.propertyVal doc, 'text', 'Unencrypted text'
+          assert.isArray doc.children
+          assert.isObject doc.children[0]
+          assert.property doc.children[0], 'text', 'Child unencrypted text'
+          assert.property doc.children[0], '_id'
+          assert.notProperty doc.children[0], '_ct'
+          done()

    sinon.spy BasicEncryptedModel.prototype, 'decryptSync'

  beforeEach (done) ->
    @simpleTestDoc2 = new BasicEncryptedModel
      text: 'Unencrypted text'
      bool: true

      encryptedText: 'Encrypted Text'
      unencryptedText: 'Unencrypted Text'

    @partiallyEncryptedDoc.save (err) ->
      assert.equal err, null
      done()
