diff --git a/jams/core.py b/jams/core.py
index <HASH>..<HASH> 100644
--- a/jams/core.py
+++ b/jams/core.py
@@ -685,11 +685,15 @@ class JamsFrame(pd.DataFrame):
         if duration is None or not (duration >= 0.0):
             raise ParameterError('duration={} must be a non-negative number'.format(duration))
 
-        n = len(self)
-        self.loc[n] = {'time': pd.to_timedelta(time, unit='s'),
-                       'duration': pd.to_timedelta(duration, unit='s'),
-                       'value': value,
-                       'confidence': confidence}
+        if not len(self):
+            n = 0
+        else:
+            n = self.index.max() + 1
+
+        self.set_value(n, 'time', pd.to_timedelta(time, unit='s'))
+        self.set_value(n, 'duration', pd.to_timedelta(duration, unit='s'))
+        self.set_value(n, 'value', value)
+        self.set_value(n, 'confidence', confidence)
 
     def to_interval_values(self):
         '''Extract observation data in a `mir_eval`-friendly format.
fixed most of the append-type-errors