diff --git a/include/arbor/simd/simd.hpp b/include/arbor/simd/simd.hpp
index 535b823347032728893b5e82d6cce5ddc25da662..a3f6cd599e7ba474c74134f28ef39236ffff4dd7 100644
--- a/include/arbor/simd/simd.hpp
+++ b/include/arbor/simd/simd.hpp
@@ -211,7 +211,7 @@ namespace simd_detail {
 
         template <typename ImplIndex>
         static void compound_indexed_add(tag<ImplIndex> tag, const vector_type& s, scalar_type* p, const typename ImplIndex::vector_type& index, index_constraint constraint) {
-            switch (constraint) { 
+            switch (constraint) {
             case index_constraint::none:
                 {
                     typename ImplIndex::scalar_type o[width];
@@ -228,7 +228,8 @@ namespace simd_detail {
                             temp = 0;
                         }
                     }
-                    p[o[width-1]] = temp;
+                    temp += a[width-1];
+                    p[o[width-1]] += temp;
                 }
                 break;
             case index_constraint::independent:
diff --git a/test/unit/test_simd.cpp b/test/unit/test_simd.cpp
index 40c05587b99f08fe0b3507c935933fd41406cfda..9be4a7e8a02fc6d454b8356985d3d00c2057e9a2 100644
--- a/test/unit/test_simd.cpp
+++ b/test/unit/test_simd.cpp
@@ -981,7 +981,7 @@ TYPED_TEST_P(simd_indirect, scatter) {
         simd s(values);
         s.copy_to(indirect(array, simd_index(offset)));
 
-        EXPECT_TRUE(::testing::indexed_eq_n(N, test, array));
+        EXPECT_TRUE(::testing::indexed_eq_n(buflen, test, array));
     }
 }
 
@@ -1019,7 +1019,7 @@ TYPED_TEST_P(simd_indirect, masked_scatter) {
         simd_mask m(mask);
         where(m, s).copy_to(indirect(array, simd_index(offset)));
 
-        EXPECT_TRUE(::testing::indexed_eq_n(N, test, array));
+        EXPECT_TRUE(::testing::indexed_eq_n(buflen, test, array));
     }
 }
 
@@ -1051,7 +1051,7 @@ TYPED_TEST_P(simd_indirect, add_and_subtract) {
         }
 
         indirect(array, simd_index(offset)) += simd(values);
-        EXPECT_TRUE(::testing::indexed_eq_n(N, test, array));
+        EXPECT_TRUE(::testing::indexed_eq_n(buflen, test, array));
 
         fill_random(offset, rng, 0, (int)(buflen-1));
 
@@ -1063,7 +1063,7 @@ TYPED_TEST_P(simd_indirect, add_and_subtract) {
         }
 
         indirect(array, simd_index(offset)) -= simd(values);
-        EXPECT_TRUE(::testing::indexed_eq_n(N, test, array));
+        EXPECT_TRUE(::testing::indexed_eq_n(buflen, test, array));
     }
 }
 
@@ -1115,7 +1115,7 @@ TYPED_TEST_P(simd_indirect, constrained_add) {
         make_test_array();
         indirect(array, simd_index(offset), index_constraint::independent) += simd(values);
 
-        EXPECT_TRUE(::testing::indexed_eq_n(N, test, array));
+        EXPECT_TRUE(::testing::indexed_eq_n(buflen, test, array));
 
         // Contiguous:
 
@@ -1127,7 +1127,7 @@ TYPED_TEST_P(simd_indirect, constrained_add) {
         make_test_array();
         indirect(array, simd_index(offset), index_constraint::contiguous) += simd(values);
 
-        EXPECT_TRUE(::testing::indexed_eq_n(N, test, array));
+        EXPECT_TRUE(::testing::indexed_eq_n(buflen, test, array));
 
         // Constant:
 
@@ -1146,7 +1146,7 @@ TYPED_TEST_P(simd_indirect, constrained_add) {
         make_test_array();
         indirect(array, simd_index(offset), index_constraint::constant) += simd(values);
 
-        EXPECT_TRUE(::testing::indexed_almost_eq_n(N, test, array));
+        EXPECT_TRUE(::testing::indexed_almost_eq_n(buflen, test, array));
 
     }
 }