add generic forward function