diff --git a/metobs/data/__init__.py b/metobs/data/__init__.py
index f42818019150f93d802eaf2d562161c90ab383b2..d955761cc379306fa413a1a0e2a2bf948a93cc29 100644
--- a/metobs/data/__init__.py
+++ b/metobs/data/__init__.py
@@ -8,7 +8,8 @@ import math
 from datetime import timedelta
 
 import fpconst
-from numpy import array, average, zeros, radians, degrees, arctan2, sin, cos
+from numpy import array, average, zeros, radians, degrees, arctan2, sin, cos, ndarray
+from numpy.ma import masked_array, average as masked_average, MaskedArray, masked_where, column_stack
 from pydap.client import open_url as dapopen
 
 from metobs import mytime
@@ -32,6 +33,12 @@ def average_for_interval(basetime, arr, interval):
     :type arr: ``numpy.array``
     :param interval: the averaging interval in seconds
     """
+    if type(arr) == ndarray:
+        avg_func = average
+        array_func = array
+    elif type(arr) == MaskedArray:
+        avg_func = masked_average
+        array_func = masked_array
     arr_out = []
     stop_dt = basetime + timedelta(seconds=interval)
     stop_idx = 1
@@ -55,12 +62,13 @@ def average_for_interval(basetime, arr, interval):
             # matrix of data to be averaged
             avg_input = arr[start_idx:stop_idx,1:]
             avg_out = array(zeros(arr[0].shape[0]))
-            avg_out.fill(NaN)
+            if type(arr) == ndarray: avg_out.fill(NaN)
+            elif type(arr) == MaskedArray: masked_where(avg_out == 0, avg_out)
             
             # timestamp for center of averaging interval
             int_dt = stop_dt - timedelta(seconds=(interval/2))
             avg_out[0] = mytime.datetime_to_epoch(int_dt)
-            avg_out[1:] = average(avg_input, axis=0)
+            avg_out[1:] = avg_func(avg_input, axis=0)
             arr_out.append(avg_out)
             
             # adjust conditions for next average
@@ -69,8 +77,12 @@ def average_for_interval(basetime, arr, interval):
             stop_dt += timedelta(seconds=interval)
 
     avg_arr = arr[start_idx:,:]
-    arr_out.append(average(avg_arr, axis=0))
-    return array(arr_out)
+    avg_arr = avg_func(avg_arr, axis=0)
+    arr_out.append(avg_arr)
+    if type(arr) == ndarray: arr_out = array_func(arr_out)
+    elif type(arr) == MaskedArray:
+        arr_out = column_stack(arr_out).transpose()
+    return arr_out
 
 def average_for_interval_degree(basetime, arr, interval):
     """Generate averages for timestamped data at a particular interval.