added singleton support