variable factory