The problem is that a crafty user may get any order free of charge.

The free of charge module doesn't show on the payment form if the charge is greater than 0. You can get around this by setting the payment method to "freeofcharge" on a locally saved copy of the payment form.

A workaround is to put error checking in the before_process() function in freeofcharge.php

More...