Index: /library/bdm/estim/arx.h
===================================================================
--- /library/bdm/estim/arx.h (revision 1166)
+++ /library/bdm/estim/arx.h (revision 1176)
@@ -93,5 +93,6 @@
     //! Conditioned version of the predictor
     enorm<ldmat>* epredictor ( const vec &rgr ) const;
-    //! conditional version of the predictor
+	estudent<ldmat>* epredictor_student ( const vec &rgr ) const;
+	//! conditional version of the predictor
     template<class sq_T>
     shared_ptr<mlnorm<sq_T> > ml_predictor() const;
@@ -99,5 +100,5 @@
     template<class sq_T>
     void ml_predictor_update ( mlnorm<sq_T> &pred ) const;
-    mlstudent* predictor_student() const;
+    mlstudent* predictor() const;
     //! Brute force structure estimation.\return indices of accepted regressors.
     ivec structure_est ( const egiw &Eg0 );
Index: /library/bdm/estim/arx.cpp
===================================================================
--- /library/bdm/estim/arx.cpp (revision 1166)
+++ /library/bdm/estim/arx.cpp (revision 1176)
@@ -144,5 +144,46 @@
 }
 
-mlstudent* ARX::predictor_student ( ) const {
+estudent<ldmat>* ARX::epredictor_student ( const vec &cond ) const {
+	bdm_assert_debug ( cond.length() == rgrlen , "ARX::epredictor cond is of size "+num2str(cond.length())+" expected dimension is "+num2str(rgrlen) );
+	
+	mat mu ( dimy, posterior()._V().rows() - dimy );
+	
+	vec ext_rgr;
+	if (have_constant) {
+		ext_rgr = concat(cond,vec_1(1.0));
+	} else {
+		ext_rgr = cond;
+	}
+	
+	estudent<ldmat>* tmp = new estudent<ldmat> ( );
+	//TODO: too hackish
+	if ( yrv._dsize() > 0 ) {
+	}
+
+	ldmat Lam;
+	ldmat Vz;
+
+	est.factorize( mu, Vz, Lam ); //mu =
+	//correction for student-t  -- TODO check if correct!!
+	double zeta =0;
+	if (mu.cols()>0) {// nonempty egiw
+		mat p_mu = mu.T() * ext_rgr; 	//the result is one column
+		tmp->_mu()= p_mu.get_col ( 0 );
+		zeta = Vz.invqform(ext_rgr);
+	} else {
+		tmp->_mu()=zeros(dimy);
+	}
+	// nu-rgrlen+2+dimy = delta+dimy
+	tmp->_delta()=est._nu()+2-rgrlen;
+	tmp->_H()=Lam;
+	tmp->_H()*=1/tmp->_delta();
+	tmp->_H()*=(1+zeta);
+	
+	if (dimy==yrv._dsize())
+		tmp->set_rv(yrv);
+	return tmp;
+}
+
+mlstudent* ARX::predictor ( ) const {
     const ldmat &V = posterior()._V();
 
Index: /library/tests/stresssuite/arx_elem_stress.cpp
===================================================================
--- /library/tests/stresssuite/arx_elem_stress.cpp (revision 1064)
+++ /library/tests/stresssuite/arx_elem_stress.cpp (revision 1176)
@@ -39,5 +39,5 @@
     X2.set_row ( 0, x );
 
-    mlstudent* Ap = Ar.predictor_student();
+    mlstudent* Ap = Ar.predictor();
     vec Ap_x = Ap->evallogcond_mat ( X, empty_vec );
     vec ll_x = Ar.logpred_mat ( X2 , empty_vec);
Index: /library/tests/stresssuite/arx_stress.cpp
===================================================================
--- /library/tests/stresssuite/arx_stress.cpp (revision 1064)
+++ /library/tests/stresssuite/arx_stress.cpp (revision 1176)
@@ -55,10 +55,19 @@
 
         // Build predictor
-        mlstudent* 	Pr = Ar.predictor_student ( );
-        // Test similarity of likelihoods from the Bayes rule and the predictor
+        mlstudent* 	Pr = Ar.predictor ( );
+		estudent<ldmat>* 	PrS = Ar.epredictor_student (rgr );
+		
+		cout << "m1: " << Pr->_A()*rgr+Pr->_mu_const() << 
+		" v1:" << Pr->e()._R();
+		cout << "ms: " << PrS->mean() << " vs:" << PrS->variance()  << 
+		" del:" << PrS->_delta() <<endl;
+		
+		// Test similarity of likelihoods from the Bayes rule and the predictor
         cout << "BR log-lik: " << Ar._ll();
-        cout << " , predictor ll: " <<  Pr->evallogcond ( vec_1 ( Yt ( t ) ), rgr )  << endl;
-        delete Pr;
-    }
+		cout << " , predictor ll: " <<  Pr->evallogcond ( vec_1 ( Yt ( t ) ), rgr );
+		cout << " , epredictor_student ll: " <<  PrS->evallog ( vec_1 ( Yt ( t ) ) )  << endl;
+		delete Pr;
+		delete PrS;
+	}
     //print posterior moments
     cout << "posterior mean: " << f_thr.mean() << endl;
