Reorganize to take advantage of ActiveModel modules