{
      // Compute the relative index as best as possible.
      //
      for (EStructuralFeature feature : getAnyChildrenFeatures(eObject))
      {
        if (feature == childFeature)
        {
          break;
        } 

        if (feature.isMany())
        {
          index -= ((List<?>)(eObject).eGet(feature)).size();
        }
        else if (eObject.eGet(feature) != null)
        {
          index -= 1;
        }
      }

      // Create a command for this feature,
      //
      return createMoveCommand(domain, eObject, childFeature, value, index);
    }