diff --git a/src/client/widgets/spectrum/spectrum.c b/src/client/widgets/spectrum/spectrum.c
index 118a17e781ca26c5fcf0d902d69cebc812e0abb9..c4546adca344e037588c143c2fc3ee57948142a4 100644
--- a/src/client/widgets/spectrum/spectrum.c
+++ b/src/client/widgets/spectrum/spectrum.c
@@ -992,13 +992,14 @@ static void spectrum_handle_pr_spec_data(gpointer instance,
 		amp[i] = (gdouble) s->spec[i] * 0.001;	/* mK to K */
 	}
 
-
 	/* everyone gets a copy of the data */
-	sp    = (struct spectrum *) g_malloc(sizeof(struct spectrum));
-	sp->x = g_memdup(frq, s->n * sizeof(gdouble));
-	sp->y = g_memdup(amp, s->n * sizeof(gdouble));
-	sp->n = s->n;
-	spectrum_append_avg(p, sp);
+	if (p->cfg->n_per) {
+		sp    = (struct spectrum *) g_malloc(sizeof(struct spectrum));
+		sp->x = g_memdup(frq, s->n * sizeof(gdouble));
+		sp->y = g_memdup(amp, s->n * sizeof(gdouble));
+		sp->n = s->n;
+		spectrum_append_data(p, sp);
+	}
 
 	sp    = (struct spectrum *) g_malloc(sizeof(struct spectrum));
 	sp->x = frq;
@@ -1010,7 +1011,7 @@ static void spectrum_handle_pr_spec_data(gpointer instance,
 	spectrum_record_add(p, sp);
 
 	/* this one does */
-	spectrum_append_data(p, sp);
+	spectrum_append_avg(p, sp);
 }