updated with __clone()