This is a much better framework