abstract factory imll with errors