introduce common superclass
add recovery