partial
diff --git a/include/json/value.h b/include/json/value.h
index 78e7546..18355d0 100644
--- a/include/json/value.h
+++ b/include/json/value.h
@@ -395,6 +395,15 @@
   Value removeMember(const char* key);
   /// Same as removeMember(const char*)
   Value removeMember(const std::string& key);
+  /** \brief Remove the indexed array element.
+
+      O(n) expensive operations.
+      Update 'removed' iff removed.
+      (This is a better pattern than removeMember().)
+      JSON_FAIL if !isValidIndex(i) or if not arrayObject
+      \return true iff removed
+  */
+  bool removeIndex(ArrayIndex i, Value* removed);
 
   /// Return true if the object has a member named key.
   bool isMember(const char* key) const;
diff --git a/src/lib_json/json_value.cpp b/src/lib_json/json_value.cpp
index 0a7fb85..aa9bfb4 100644
--- a/src/lib_json/json_value.cpp
+++ b/src/lib_json/json_value.cpp
@@ -1018,6 +1018,14 @@
   return removeMember(key.c_str());
 }
 
+bool Value::removeIndex(ArrayIndex i, Value* removed) {
+  JSON_ASSERT_MESSAGE(this->type_ == arrayValue,
+                      "in Json::Value::removeIndex(): requires arrayValue");
+  JSON_ASSERT_MESSAGE(this->isValidIndex(i),
+      "invalid index i=" << i << " for array of size " << this->size());
+  return true;
+}
+
 #ifdef JSON_USE_CPPTL
 Value Value::get(const CppTL::ConstString& key,
                  const Value& defaultValue) const {