diff --git a/hist/hist/inc/HFitInterface.h b/hist/hist/inc/HFitInterface.h
index c79831d092a8ddd06556964d51626e31c51ea65f..f917d0e4b84bdbe527cbff58547956be5620f1ff 100644
--- a/hist/hist/inc/HFitInterface.h
+++ b/hist/hist/inc/HFitInterface.h
@@ -85,7 +85,7 @@ namespace ROOT {
           deleting the data after the fit. User calling this function MUST NOT delete UnBinData after 
           calling it.
       */
-      int UnBinFit(ROOT::Fit::UnBinData * data, TF1 * f1 , Foption_t & option , const ROOT::Math::MinimizerOptions & moption); 
+      TFitResultPtr UnBinFit(ROOT::Fit::UnBinData * data, TF1 * f1 , Foption_t & option , const ROOT::Math::MinimizerOptions & moption); 
 
       /** 
           fill the data vector from a TH1. Pass also the TF1 function which is 
diff --git a/hist/hist/inc/TGraph.h b/hist/hist/inc/TGraph.h
index 59c84968c689be88feba035b823c286647732711..af28b7272d9e6b52a28ca1db01a4833734552aa4 100644
--- a/hist/hist/inc/TGraph.h
+++ b/hist/hist/inc/TGraph.h
@@ -48,6 +48,8 @@ class TCollection;
 class TF1;
 class TSpline;
 
+#include "TFitResultPtr.h"
+
 class TGraph : public TNamed, public TAttLine, public TAttFill, public TAttMarker {
 
 protected:
@@ -114,8 +116,8 @@ public:
    virtual void          Expand(Int_t newsize, Int_t step);
    virtual TObject      *FindObject(const char *name) const;
    virtual TObject      *FindObject(const TObject *obj) const;
-   virtual Int_t         Fit(const char *formula ,Option_t *option="" ,Option_t *goption="", Axis_t xmin=0, Axis_t xmax=0); // *MENU*
-   virtual Int_t         Fit(TF1 *f1 ,Option_t *option="" ,Option_t *goption="", Axis_t xmin=0, Axis_t xmax=0);
+   virtual TFitResultPtr Fit(const char *formula ,Option_t *option="" ,Option_t *goption="", Axis_t xmin=0, Axis_t xmax=0); // *MENU*
+   virtual TFitResultPtr Fit(TF1 *f1 ,Option_t *option="" ,Option_t *goption="", Axis_t xmin=0, Axis_t xmax=0);
    virtual void          FitPanel(); // *MENU*
    Bool_t                GetEditable() const;
    TF1                  *GetFunction(const char *name) const;
diff --git a/hist/hist/inc/TGraph2D.h b/hist/hist/inc/TGraph2D.h
index 8e241ae1897639c70d90cd46626a0a4621277e65..a4ea835264bf2d3b9396c2c43b19557246df8dc1 100644
--- a/hist/hist/inc/TGraph2D.h
+++ b/hist/hist/inc/TGraph2D.h
@@ -45,6 +45,8 @@ class TH2D;
 class TView;
 class TDirectory;
 
+#include "TFitResultPtr.h"
+
 class TGraph2D : public TNamed, public TAttLine, public TAttFill, public TAttMarker {
 
 protected:
@@ -97,8 +99,8 @@ public:
    void             ExecuteEvent(Int_t event, Int_t px, Int_t py);
    virtual TObject *FindObject(const char *name) const;
    virtual TObject *FindObject(const TObject *obj) const;
-   virtual Int_t    Fit(const char *formula ,Option_t *option="" ,Option_t *goption=""); // *MENU*
-   virtual Int_t    Fit(TF2 *f2 ,Option_t *option="" ,Option_t *goption=""); // *MENU*
+   virtual TFitResultPtr Fit(const char *formula ,Option_t *option="" ,Option_t *goption=""); // *MENU*
+   virtual TFitResultPtr Fit(TF2 *f2 ,Option_t *option="" ,Option_t *goption=""); // *MENU*
    virtual void     FitPanel(); // *MENU*
    TList           *GetContourList(Double_t contour);
    TDirectory      *GetDirectory() const {return fDirectory;}
diff --git a/hist/hist/inc/THnSparse.h b/hist/hist/inc/THnSparse.h
index 9dd2c2e48e5592a8a365a90de57851850a67133a..b0facdd7155fddc1dedd6b8dd84cc17dc22b99b7 100644
--- a/hist/hist/inc/THnSparse.h
+++ b/hist/hist/inc/THnSparse.h
@@ -59,6 +59,8 @@ class TH2D;
 class TH3D;
 class TF1;
 
+#include "TFitResultPtr.h"
+
 class THnSparseArrayChunk: public TObject {
  private:
 
diff --git a/hist/hist/inc/TMultiGraph.h b/hist/hist/inc/TMultiGraph.h
index fdf9c9b92c1f98ee63f040382c328669ed8f5aa0..6e84c7261997f3429843b8a1b092b86ae3b57e5b 100644
--- a/hist/hist/inc/TMultiGraph.h
+++ b/hist/hist/inc/TMultiGraph.h
@@ -32,6 +32,8 @@ class TAxis;
 class TBrowser;
 class TGraph;
 
+#include "TFitResultPtr.h"
+
 class TMultiGraph : public TNamed {
 
 protected:
@@ -54,8 +56,8 @@ public:
    virtual void      Browse(TBrowser *b);
    virtual Int_t     DistancetoPrimitive(Int_t px, Int_t py);
    virtual void      Draw(Option_t *chopt="");
-   virtual Int_t     Fit(const char *formula ,Option_t *option="" ,Option_t *goption="", Axis_t xmin=0, Axis_t xmax=0); 
-   virtual Int_t     Fit(TF1 *f1 ,Option_t *option="" ,Option_t *goption="", Axis_t rxmin=0, Axis_t rxmax=0); 
+   virtual TFitResultPtr Fit(const char *formula ,Option_t *option="" ,Option_t *goption="", Axis_t xmin=0, Axis_t xmax=0); 
+   virtual TFitResultPtr Fit(TF1 *f1 ,Option_t *option="" ,Option_t *goption="", Axis_t rxmin=0, Axis_t rxmax=0); 
    virtual void      FitPanel(); // *MENU*
    virtual Option_t *GetGraphDrawOption(const TGraph *gr) const;
    virtual void      LeastSquareLinearFit(Int_t ndata, Double_t &a0, Double_t &a1, Int_t &ifail, Double_t xmin, Double_t xmax);
diff --git a/hist/hist/src/HFitImpl.cxx b/hist/hist/src/HFitImpl.cxx
index 6939405b0495094f27a9c283beac5d075c0f1eea..1cd1d14933629b8d4424d56947c1158cd27cf132 100644
--- a/hist/hist/src/HFitImpl.cxx
+++ b/hist/hist/src/HFitImpl.cxx
@@ -594,7 +594,7 @@ void HFit::CheckGraphFitOptions(Foption_t & foption) {
 
 // implementation of unbin fit function (defined in HFitInterface)
 
-int ROOT::Fit::UnBinFit(ROOT::Fit::UnBinData * fitdata, TF1 * fitfunc, Foption_t & fitOption , const ROOT::Math::MinimizerOptions & minOption) { 
+TFitResultPtr ROOT::Fit::UnBinFit(ROOT::Fit::UnBinData * fitdata, TF1 * fitfunc, Foption_t & fitOption , const ROOT::Math::MinimizerOptions & minOption) { 
    // do unbin fit, ownership of fitdata is passed later to the TBackFitter class
 
 #ifdef DEBUG
@@ -710,7 +710,19 @@ int ROOT::Fit::UnBinFit(ROOT::Fit::UnBinData * fitdata, TF1 * fitfunc, Foption_t
    if (fitOption.Verbose) bcfitter->PrintResults(2,0.);
    else if (!fitOption.Quiet) bcfitter->PrintResults(1,0.);
 
-   return iret; 
+   if (fitOption.StoreResult) 
+   {
+      TFitResult* fr = new TFitResult(fitResult);
+      TString name = "TFitResult-";
+      name = name + "UnBinData-" + fitfunc->GetName();
+      TString title = "TFitResult-";
+      title += name;
+      fr->SetName(name);
+      fr->SetTitle(title);
+      return TFitResultPtr(fr);
+   }
+   else 
+      return TFitResultPtr(iret);
 }
 
 
diff --git a/hist/hist/src/TGraph.cxx b/hist/hist/src/TGraph.cxx
index c7f8ea030b6ba6d0809a1f3bda597f359e0abae7..aa966514cf36a52ad25790764ccc9944daac876d 100644
--- a/hist/hist/src/TGraph.cxx
+++ b/hist/hist/src/TGraph.cxx
@@ -903,7 +903,7 @@ TObject *TGraph::FindObject(const TObject *obj) const
 
 
 //______________________________________________________________________________
-Int_t TGraph::Fit(const char *fname, Option_t *option, Option_t *, Axis_t xmin, Axis_t xmax)
+TFitResultPtr TGraph::Fit(const char *fname, Option_t *option, Option_t *, Axis_t xmin, Axis_t xmax)
 {
    // Fit this graph with function with name fname.
    //
@@ -929,7 +929,7 @@ Int_t TGraph::Fit(const char *fname, Option_t *option, Option_t *, Axis_t xmin,
 
 
 //______________________________________________________________________________
-Int_t TGraph::Fit(TF1 *f1, Option_t *option, Option_t *goption, Axis_t rxmin, Axis_t rxmax)
+TFitResultPtr TGraph::Fit(TF1 *f1, Option_t *option, Option_t *goption, Axis_t rxmin, Axis_t rxmax)
 {
    // Fit this graph with function f1.
    //
diff --git a/hist/hist/src/TGraph2D.cxx b/hist/hist/src/TGraph2D.cxx
index 68445c4aff2c863fccacc9afbf3b1b4d2572a667..4f784f3b062bd1529b409dadba34d07f34e54ffc 100644
--- a/hist/hist/src/TGraph2D.cxx
+++ b/hist/hist/src/TGraph2D.cxx
@@ -610,7 +610,7 @@ TObject *TGraph2D::FindObject(const TObject *obj) const
 
 
 //______________________________________________________________________________
-Int_t TGraph2D::Fit(const char *fname, Option_t *option, Option_t *)
+TFitResultPtr TGraph2D::Fit(const char *fname, Option_t *option, Option_t *)
 {
    // Fits this graph with function with name fname
    // Predefined functions such as gaus, expo and poln are automatically
@@ -634,7 +634,7 @@ Int_t TGraph2D::Fit(const char *fname, Option_t *option, Option_t *)
 
 
 //______________________________________________________________________________
-Int_t TGraph2D::Fit(TF2 *f2, Option_t *option, Option_t *)
+TFitResultPtr TGraph2D::Fit(TF2 *f2, Option_t *option, Option_t *)
 {
    // Fits this 2D graph with function f2
    //
diff --git a/hist/hist/src/TMultiGraph.cxx b/hist/hist/src/TMultiGraph.cxx
index c799a62c3f2e2e71a33b53e9c8dceed812636da0..ef156c7ff038635fb17b9ee51e42182ba29b1208 100644
--- a/hist/hist/src/TMultiGraph.cxx
+++ b/hist/hist/src/TMultiGraph.cxx
@@ -240,7 +240,7 @@ void TMultiGraph::Draw(Option_t *option)
 
 
 //______________________________________________________________________________
-Int_t TMultiGraph::Fit(const char *fname, Option_t *option, Option_t *, Axis_t xmin, Axis_t xmax)
+TFitResultPtr TMultiGraph::Fit(const char *fname, Option_t *option, Option_t *, Axis_t xmin, Axis_t xmax)
 {
    // Fit this graph with function with name fname.
    //
@@ -261,7 +261,7 @@ Int_t TMultiGraph::Fit(const char *fname, Option_t *option, Option_t *, Axis_t x
 
 
 //______________________________________________________________________________
-Int_t TMultiGraph::Fit(TF1 *f1, Option_t *option, Option_t *goption, Axis_t rxmin, Axis_t rxmax)
+TFitResultPtr TMultiGraph::Fit(TF1 *f1, Option_t *option, Option_t *goption, Axis_t rxmin, Axis_t rxmax)
 {
    // Fit this multigraph with function f1.
    //