diff --git a/basicmath.cpp b/basicmath.cpp
index 911f98f86e6ea3a2e3605e2a0c490434213fc62e..71a9f932362ecf4ab35025e9fe63e210935c01a3 100644
--- a/basicmath.cpp
+++ b/basicmath.cpp
@@ -31,7 +31,7 @@ std::complex<fvalue> eis::grad(const std::vector<eis::DataPoint>& data, size_t i
 								(data[index+1].im.imag()-data[index-1].im.imag())/(data[index+1].omega-data[index-1].omega));
 }
 
-std::complex<fvalue> mean(const std::vector<eis::DataPoint>& data)
+std::complex<fvalue> eis::mean(const std::vector<eis::DataPoint>& data)
 {
 	fvalue accumRe = 0;
 	fvalue accumIm = 0;
@@ -47,7 +47,12 @@ std::complex<fvalue> mean(const std::vector<eis::DataPoint>& data)
 	return std::complex<fvalue>(accumRe, accumIm);
 }
 
-std::complex<fvalue> median(const std::vector<eis::DataPoint>& data)
+static inline fvalue medianTrampoline(const std::vector<fvalue> data)
+{
+	return eis::median(data);
+}
+
+std::complex<fvalue> eis::median(const std::vector<eis::DataPoint>& data)
 {
 	if(data.empty())
 		return std::complex<fvalue>(0,0);
@@ -65,20 +70,33 @@ std::complex<fvalue> median(const std::vector<eis::DataPoint>& data)
 		realParts.push_back(point.im.real());
 	}
 
-	std::sort(imagParts.begin(), imagParts.end());
-	std::sort(realParts.begin(), realParts.end());
+	fvalue realMean = medianTrampoline(realParts);
+	fvalue imagMean = medianTrampoline(imagParts);
+
+	return std::complex<fvalue>(realMean, imagMean);
+}
+
+fvalue eis::mean(const std::vector<fvalue>& data)
+{
+	fvalue accum = 0;
 
+	for(fvalue point : data)
+		accum += point;
+
+	return accum/data.size();
+}
+
+fvalue eis::median(std::vector<fvalue> data)
+{
+	if(data.empty())
+		return 0;
+	else if(data.size() == 1)
+		return data[0];
+
+	std::sort(data.begin(), data.end());
 
 	if(data.size() % 2 == 0)
-	{
-		fvalue real = (realParts[data.size()/2] + realParts[data.size()/2-1])/2;
-		fvalue imag = (imagParts[data.size()/2] + imagParts[data.size()/2-1])/2;
-		return std::complex<fvalue>(real, imag);
-	}
+		return (data[data.size()/2] + data[data.size()/2-1])/2;
 	else
-	{
-		size_t index = data.size()/2;
-		return std::complex<fvalue>(realParts[index], imagParts[index]);
-	}
-
+		return data[data.size()/2];
 }
diff --git a/eisgenerator/basicmath.h b/eisgenerator/basicmath.h
index e53962c983d18914b8728a96143d95844913adb8..fa389b40a5edbb8318253715be69efc54292bed2 100644
--- a/eisgenerator/basicmath.h
+++ b/eisgenerator/basicmath.h
@@ -7,6 +7,8 @@ namespace eis
 {
 	std::complex<fvalue> absGrad(const std::vector<eis::DataPoint>& data, size_t index);
 	std::complex<fvalue> grad(const std::vector<eis::DataPoint>& data, size_t index);
+	fvalue mean(const std::vector<fvalue>& data);
 	std::complex<fvalue> mean(const std::vector<eis::DataPoint>& data);
+	fvalue median(std::vector<fvalue> data);
 	std::complex<fvalue> median(const std::vector<eis::DataPoint>& data);
 }