abstract OTs to use class hierarchy; makes it easier to plug in
different OTs to OT extension