added classical factory implementation