add optional __call__