universal create function