safeStringCopy now calls stringValue if available