better error catching...eval is the only clean way