prototype abstract factory was added