diff --git a/xchart/src/main/java/com/xeiam/xchart/Histogram.java b/xchart/src/main/java/com/xeiam/xchart/Histogram.java
index 31cb3b9879c66d6d3e887198c1d40b8ec262a186..6914c383c485f4f7f61c3a655be94b8bc258f319 100644
--- a/xchart/src/main/java/com/xeiam/xchart/Histogram.java
+++ b/xchart/src/main/java/com/xeiam/xchart/Histogram.java
@@ -17,7 +17,6 @@ package com.xeiam.xchart;
 
 import java.util.ArrayList;
 import java.util.Collection;
-import java.util.Collections;
 import java.util.Iterator;
 import java.util.List;
 
@@ -46,14 +45,19 @@ public class Histogram {
     this.numBins = numBins;
     this.originalData = data;
 
-    List<Double> dataAsList = new ArrayList<Double>();
-    Iterator<? extends Number> itr = data.iterator();
-    while (itr.hasNext()) {
-      dataAsList.add(((Number) itr.next()).doubleValue());
+    Double tempMax = Double.MIN_VALUE;
+    Double tempMin = Double.MAX_VALUE;
+    for (Number number : data) {
+      double value = number.doubleValue();
+      if (value > tempMax) {
+        tempMax = value;
+      }
+      if (value < tempMin) {
+        tempMin = value;
+      }
     }
-    Collections.sort(dataAsList);
-    this.min = dataAsList.get(0);
-    this.max = dataAsList.get(dataAsList.size() - 1);
+    max = tempMax;
+    min = tempMin;
 
     init();
   }
@@ -92,8 +96,7 @@ public class Histogram {
       else if (bin > numBins) { /* this data point is bigger than max */
         // System.out.println("greater than");
       }
-      else if (bin == numBins) { // this falls right on the edge of the max bin
-        tempYAxisData[bin - 1] += 1;
+      else if (bin == numBins) { // this falls on the next bin of the max bin
       }
       else {
         tempYAxisData[bin] += 1;
@@ -101,7 +104,7 @@ public class Histogram {
     }
     yAxisData = new ArrayList<Double>(numBins);
     for (double d : tempYAxisData) {
-      yAxisData.add(new Double(d));
+      yAxisData.add(d);
     }
 
     // x axis data