diff --git a/src/model.js b/src/model.js
index <HASH>..<HASH> 100644
--- a/src/model.js
+++ b/src/model.js
@@ -105,7 +105,9 @@ export function add (model, key, field) {
  * @returns {Model} - the updated model.
  */
 export function remove (model, key, field) {
-  // TODO: bug - verify that the field is there to remove in the first place
+  if (get(model, key).filter(f => f._id === field._id).length === 0) {
+    return model
+  }
   return createModel(
     model.subject,
     model.fields.set(
diff --git a/test/model.spec.js b/test/model.spec.js
index <HASH>..<HASH> 100644
--- a/test/model.spec.js
+++ b/test/model.spec.js
@@ -96,6 +96,11 @@ describe('Model', () => {
     expect(Model.get(updatedModel, 'phone')).toEqual([secondPhone])
   })
 
+  it('can not remove fields which do not belong to the model', () => {
+    const notOwnedPhone = phone('tel:444-444-4444')
+    expect(Model.remove(model, 'phone', phone)).toEqual(model)
+  })
+
   it('can change the value of contained fields', () => {
     const firstPhone = Model.get(model, 'phone')[0]
     const secondPhone = Model.get(model, 'phone')[1]
Don't remove un-owned fields from a model