moved AbstractInstruction to be an Interface, cos it made sense that way.