      {value, rev} = lookup_cell(cell, state)
      case cmd do
        {cmd_name, operation} when cmd_name in [:apply, :set] ->
-         new_value = Genomu.Operation.apply(operation, value)
-         serialized = Genomu.Operation.serialize(operation)
-         stage({key, new_rev}, serialized, new_value, state)
+         case apply_operation(operation, value) do
+           :error -> 
+             new_rev = rev
+             new_value = @nil_value
+           new_value ->  
+            serialized = Genomu.Operation.serialize(operation)
+            stage({key, new_rev}, serialized, new_value, state)
+         end
        {:get = cmd_name, operation} ->
-         new_value = Genomu.Operation.apply(operation, value)
+         case apply_operation(operation, value) do
+           :error ->
+             new_value = @nil_value
+           new_value ->
+             :ok
+         end
      end
      case cmd_name do
        :apply ->

   @type command :: {Genomu.cell, Genomu.revision, Genomu.command,
                     Genomu.Coordinator.ref}
   @type commit :: {:C, ITC.t, binary, [Genomu.Transaction.entry], Genomu.Coordinator.ref}

   require Lager


     state
   end

   defp apply_operation(operation, value) do
     try do
       Genomu.Operation.apply(operation, value)
     catch type, msg -> 
       Lager.error "Error #{inspect {type, msg}} occurred while processing operation #{inspect operation} on #{inspect value}"
       :error
     end
   end

 end