diff --git a/sinks/gangliaCommon.go b/sinks/gangliaCommon.go
index b2a1b2c..f562ea4 100644
--- a/sinks/gangliaCommon.go
+++ b/sinks/gangliaCommon.go
@@ -35,6 +35,8 @@ func GangliaMetricRename(name string) string {
 		return "pkts_out"
 	} else if name == "cpu_iowait" {
 		return "cpu_wio"
+	} else if name == "cpu_load" {
+		return "load_one"
 	}
 	return name
 }
@@ -148,10 +150,14 @@ type GangliaMetricConfig struct {
 	Unit  string
 	Group string
 	Value string
+	Name  string
 }
 
 func GetCommonGangliaConfig(point lp.CCMetric) GangliaMetricConfig {
 	mname := GangliaMetricRename(point.Name())
+	if oldname, ok := point.GetMeta("oldname"); ok {
+		mname = oldname
+	}
 	for _, group := range CommonGangliaMetrics {
 		for _, metric := range group.Metrics {
 			if metric.Name == mname {
@@ -187,6 +193,7 @@ func GetCommonGangliaConfig(point lp.CCMetric) GangliaMetricConfig {
 					Tmax:  metric.Tmax,
 					Unit:  metric.Unit,
 					Value: valueStr,
+					Name:  GangliaMetricRename(mname),
 				}
 			}
 		}
@@ -198,10 +205,15 @@ func GetCommonGangliaConfig(point lp.CCMetric) GangliaMetricConfig {
 		Tmax:  0,
 		Unit:  "",
 		Value: "",
+		Name:  "",
 	}
 }
 
 func GetGangliaConfig(point lp.CCMetric) GangliaMetricConfig {
+	mname := GangliaMetricRename(point.Name())
+	if oldname, ok := point.GetMeta("oldname"); ok {
+		mname = oldname
+	}
 	group := ""
 	if g, ok := point.GetMeta("group"); ok {
 		group = g
@@ -254,5 +266,6 @@ func GetGangliaConfig(point lp.CCMetric) GangliaMetricConfig {
 		Tmax:  DEFAULT_GANGLIA_METRIC_TMAX,
 		Unit:  unit,
 		Value: valueStr,
+		Name:  GangliaMetricRename(mname),
 	}
 }
diff --git a/sinks/gangliaSink.go b/sinks/gangliaSink.go
index 22096af..5324123 100644
--- a/sinks/gangliaSink.go
+++ b/sinks/gangliaSink.go
@@ -39,16 +39,13 @@ func (s *GangliaSink) Write(point lp.CCMetric) error {
 	//var tagsstr []string
 	var argstr []string
 
-	// Get metric name
-	metricname := GangliaMetricRename(point.Name())
-
 	// Get metric config (type, value, ... in suitable format)
 	conf := GetCommonGangliaConfig(point)
 	if len(conf.Type) == 0 {
 		conf = GetGangliaConfig(point)
 	}
 	if len(conf.Type) == 0 {
-		return fmt.Errorf("metric %s has no 'value' field", metricname)
+		return fmt.Errorf("metric %q (Ganglia name %q) has no 'value' field", point.Name(), conf.Name)
 	}
 
 	if s.config.AddGangliaGroup {
@@ -70,7 +67,7 @@ func (s *GangliaSink) Write(point lp.CCMetric) error {
 	if s.config.AddTypeToName {
 		argstr = append(argstr, fmt.Sprintf("--name=%s", GangliaMetricName(point)))
 	} else {
-		argstr = append(argstr, fmt.Sprintf("--name=%s", metricname))
+		argstr = append(argstr, fmt.Sprintf("--name=%s", conf.Name))
 	}
 	argstr = append(argstr, fmt.Sprintf("--slope=%s", conf.Slope))
 	argstr = append(argstr, fmt.Sprintf("--value=%s", conf.Value))
diff --git a/sinks/libgangliaSink.go b/sinks/libgangliaSink.go
index 1fc7863..3651584 100644
--- a/sinks/libgangliaSink.go
+++ b/sinks/libgangliaSink.go
@@ -124,24 +124,21 @@ func (s *LibgangliaSink) Write(point lp.CCMetric) error {
 		return s.cstrCache[key]
 	}
 
-	// Get metric name
-	metricname := GangliaMetricRename(point.Name())
-
 	conf := GetCommonGangliaConfig(point)
 	if len(conf.Type) == 0 {
 		conf = GetGangliaConfig(point)
 	}
 	if len(conf.Type) == 0 {
-		return fmt.Errorf("metric %s has no 'value' field", metricname)
+		return fmt.Errorf("metric %q (Ganglia name %q) has no 'value' field", point.Name(), conf.Name)
 	}
 
 	if s.config.AddTypeToName {
-		metricname = GangliaMetricName(point)
+		conf.Name = GangliaMetricName(point)
 	}
 
 	c_value = C.CString(conf.Value)
 	c_type = lookup(conf.Type)
-	c_name = lookup(metricname)
+	c_name = lookup(conf.Name)
 
 	// Add unit
 	unit := ""