Index: trunk/MagicSoft/Mars/manalysis/MMultiDimDistCalc.cc
===================================================================
--- trunk/MagicSoft/Mars/manalysis/MMultiDimDistCalc.cc	(revision 1566)
+++ trunk/MagicSoft/Mars/manalysis/MMultiDimDistCalc.cc	(revision 1567)
@@ -200,4 +200,10 @@
     Double_t dh = fMHadrons->CalcDist(event, numh);
 
+    if (dg<0 || dh<0)
+    {
+        *fLog << err << "MHMatrix::CalcDist failed (dg=" << dg << ", dh=" << dh << ")... aborting" << endl;
+        return kFALSE;
+    }
+
     //fHadronness->SetHadronness(dg/(dg+dh));
     fHadronness->SetHadronness(exp(-dh/dg));
Index: trunk/MagicSoft/Mars/mhist/MHMatrix.cc
===================================================================
--- trunk/MagicSoft/Mars/mhist/MHMatrix.cc	(revision 1566)
+++ trunk/MagicSoft/Mars/mhist/MHMatrix.cc	(revision 1567)
@@ -367,5 +367,5 @@
     if (det==0)
     {
-        *fLog << err << "ERROR - MHMatrix::InvertPosDef failed (Matrix is sigular)." << endl;
+        *fLog << err << "ERROR - MHMatrix::InvertPosDef failed (Matrix is singular)." << endl;
         delete m2;
         return NULL;
@@ -441,5 +441,5 @@
             res += exp(-dists[idx[i]]/h);
 
-        return log(res/n);
+        return -log(res/n);
     }
     else
@@ -466,9 +466,12 @@
     if (!fM2.IsValid())
     {
-        const TMatrix &m = *InvertPosDef();
-        fM2.ResizeTo(m);
-        fM2 = m;
+        const TMatrix *m = InvertPosDef();
+        if (!m)
+            return -1;
+
+        fM2.ResizeTo(*m);
+        fM2 = *m;
         fM2 *= fM.GetNrows()-1;
-        delete &m;
+        delete m;
     }
 
