Accessors are not horrible if they are relevant to the problem domain.
How is that not an accessor, anyway? I mean yeah, you didn't name the pair get and set, but a rose by any other name ...get/set is horrible...I avoided this issue by using function overloading.
form.caption(str); //set the caption of form
str = form.caption(); //get the caption of from;