diff --git a/include/llvm/ADT/Statistic.h b/include/llvm/ADT/Statistic.h
index 332a57d..dd44f27 100644
--- a/include/llvm/ADT/Statistic.h
+++ b/include/llvm/ADT/Statistic.h
@@ -26,53 +26,22 @@
 #ifndef LLVM_ADT_STATISTIC_H
 #define LLVM_ADT_STATISTIC_H
 
-#include <ostream>
-#include "llvm/Support/Compiler.h"
-
 namespace llvm {
 
-// StatisticBase - Nontemplated base class for Statistic class...
-class StatisticBase {
+class Statistic {
   const char *Name;
   const char *Desc;
-  static unsigned NumStats;
-protected:
-  StatisticBase(const char *name, const char *desc) : Name(name), Desc(desc) {
-    ++NumStats;  // Keep track of how many stats are created...
-  }
-  // Out of line virtual dtor, to give the vtable etc a home.
-  virtual ~StatisticBase();
-
-  // destroy - Called by subclass dtor so that we can still invoke virtual
-  // functions on the subclass.
-  void destroy() const;
-
-  // printValue - Overridden by template class to print out the value type...
-  virtual void printValue(std::ostream &o) const = 0;
-
-  // hasSomeData - Return true if some data has been aquired.  Avoid printing
-  // lots of zero counts.
-  //
-  virtual bool hasSomeData() const = 0;
-};
-
-// Statistic Class - templated on the data type we are monitoring...
-class Statistic : private StatisticBase {
   unsigned Value;
-
-  virtual void printValue(std::ostream &o) const { o << Value; }
-  virtual bool hasSomeData() const { return Value != 0; }
+  static unsigned NumStats;
 public:
   // Normal constructor, default initialize data item...
   Statistic(const char *name, const char *desc)
-    : StatisticBase(name, desc), Value(0) {}
-
-  // Constructor to provide an initial value...
-  Statistic(const unsigned &Val, const char *name, const char *desc)
-    : StatisticBase(name, desc), Value(Val) {}
+    : Name(name), Desc(desc), Value(0) {
+    ++NumStats;  // Keep track of how many stats are created...
+  }
 
   // Print information when destroyed, iff command line option is specified
-  ~Statistic() { destroy(); }
+  ~Statistic();
 
   // Allow use of this class as the value itself...
   operator unsigned() const { return Value; }
diff --git a/lib/Support/Statistic.cpp b/lib/Support/Statistic.cpp
index cd51662..19cfff3 100644
--- a/lib/Support/Statistic.cpp
+++ b/lib/Support/Statistic.cpp
@@ -23,6 +23,7 @@
 
 #include "llvm/ADT/Statistic.h"
 #include "llvm/Support/CommandLine.h"
+#include "llvm/ADT/StringExtras.h"
 #include <sstream>
 #include <iostream>
 #include <algorithm>
@@ -31,7 +32,7 @@
 // GetLibSupportInfoOutputFile - Return a file stream to print our output on...
 namespace llvm { extern std::ostream *GetLibSupportInfoOutputFile(); }
 
-unsigned StatisticBase::NumStats = 0;
+unsigned Statistic::NumStats = 0;
 
 // -stats - Command line option to cause transformations to emit stats about
 // what they did.
@@ -61,19 +62,13 @@
 
 static std::vector<StatRecord> *AccumStats = 0;
 
-// Out of line virtual dtor, to give the vtable etc a home.
-StatisticBase::~StatisticBase() {
-}
-
 // Print information when destroyed, iff command line option is specified
-void StatisticBase::destroy() const {
-  if (Enabled && hasSomeData()) {
+Statistic::~Statistic() {
+  if (Enabled && Value != 0) {
     if (AccumStats == 0)
       AccumStats = new std::vector<StatRecord>();
 
-    std::ostringstream Out;
-    printValue(Out);
-    AccumStats->push_back(StatRecord(Out.str(), Name, Desc));
+    AccumStats->push_back(StatRecord(utostr(Value), Name, Desc));
   }
 
   if (--NumStats == 0 && AccumStats) {
