Index: /trunk/Mars/mcore/Prediction.h
===================================================================
--- /trunk/Mars/mcore/Prediction.h	(revision 17951)
+++ /trunk/Mars/mcore/Prediction.h	(revision 17952)
@@ -8,33 +8,27 @@
 namespace FACT
 {
-    using namespace Nova;
-
-    double PredictI(const double &jd, const EquPosn &src_pos)
+    double PredictI(const Nova::SolarObjects &so, const Nova::EquPosn &srcEqu)
     {
-        // Sun properties
-        const EquPosn  sun  = GetSolarEquCoords(jd);
-        const ZdAzPosn hrzs = GetHrzFromEqu(sun, jd);
-
-        // Moon properties
-        const EquPosn moon = GetLunarEquCoords(jd, 0.01);
-        const HrzPosn hrzm = GetHrzFromEqu(moon, jd);
-        const double  disk = GetLunarDisk(jd);
-
         // Derived moon properties
-        const double angle = GetAngularSeparation(moon, src_pos);
-        const double edist = GetLunarEarthDist(jd)/384400;
+        const double angle = Nova::GetAngularSeparation(so.fMoonEqu, srcEqu);
+        const double edist = so.fEarthDist/384400;
 
         // Current prediction
-        const double sin_malt  = hrzm.alt<0 ? 0 : sin(hrzm.alt*M_PI/180);
+        const double sin_malt  = so.fMoonHrz.alt<0 ? 0 : sin(so.fMoonHrz.alt*M_PI/180);
         const double cos_mdist = cos(angle*M_PI/180);
-        const double sin_szd   = sin(hrzs.zd*M_PI/180);
+        const double cos_salt  = cos(so.fSunHrz.alt*M_PI/180);
 
-        const double c0 = pow(disk,      2.63);
-        const double c1 = pow(sin_malt,  0.60);
-        const double c2 = pow(edist,    -2.00);
+        const double c0 = pow(so.fMoonDisk, 2.63);
+        const double c1 = pow(sin_malt,     0.60);
+        const double c2 = pow(edist,       -2.00);
         const double c3 = exp(0.67*cos_mdist*cos_mdist*cos_mdist*cos_mdist);
-        const double c4 = exp(-97.8+105.8*sin_szd*sin_szd);
+        const double c4 = exp(-97.8+105.8*cos_salt*cos_salt);
 
         return  6.2 + 95.7*c0*c1*c2*c3 + c4; // [muA]
+    }
+
+    double PredictI(const double &jd, const Nova::EquPosn &srcEqu)
+    {
+        return PredictI(Nova::SolarObjects(jd), srcEqu);
     }
 }
Index: /trunk/Mars/mcore/nova.h
===================================================================
--- /trunk/Mars/mcore/nova.h	(revision 17951)
+++ /trunk/Mars/mcore/nova.h	(revision 17952)
@@ -157,4 +157,35 @@
         return ln_get_angular_separation(&p1, &p2);
     }
+
+    struct SolarObjects
+    {
+        double  fJD;
+
+        EquPosn fSunEqu;
+        HrzPosn fSunHrz;
+
+        EquPosn fMoonEqu;
+        HrzPosn fMoonHrz;
+        double  fMoonDisk;
+
+        double fEarthDist;
+
+        SolarObjects(const double &jd, const LnLatPosn &obs=Nova::ORM())
+        {
+            fJD = jd;
+
+            // Sun properties
+            fSunEqu    = GetSolarEquCoords(jd);
+            fSunHrz    = GetHrzFromEqu(fSunEqu, obs, jd);
+
+            // Moon properties
+            fMoonEqu   = GetLunarEquCoords(jd, 0.01);
+            fMoonHrz   = GetHrzFromEqu(fMoonEqu, obs, jd);
+
+            fMoonDisk  = GetLunarDisk(jd);
+            fEarthDist = GetLunarEarthDist(jd);
+        }
+    };
+
 }
 
