If your code looks like this in pseudo code: function do: if (pool has mymoney = true) split(mymoney) pool has mymoney = false By repeatedly calling that function, you have sort of a race condition where you are allowed to spend your money twice, trice, ... *ad infitum*. Fix is simple, reverse two operations: function do: if (pool has mymoney = true) pool= pool - mymoney // 2 split(mymoney) //1 [See this commit for example of the fix][1] [1]: https://github.com/slockit/DAO/commit/f01f3bd8df5e1e222dde625118b7e0f2bfe5b680