diff --git a/src/Plugin/search_api/datasource/ContentEntity.php b/src/Plugin/search_api/datasource/ContentEntity.php
index c9e18c9..6751142 100644
--- a/src/Plugin/search_api/datasource/ContentEntity.php
+++ b/src/Plugin/search_api/datasource/ContentEntity.php
@@ -369,7 +369,7 @@ class ContentEntity extends DatasourcePluginBase {
 
     $entity_ids = array();
     foreach ($ids as $item_id) {
-      list($entity_id, $langcode) = explode(':', $item_id, 2);
+      list($entity_id, $langcode) = preg_split('/:(?=[a-z-]+$)/', $item_id);
       if (isset($allowed_languages[$langcode])) {
         $entity_ids[$entity_id][$item_id] = $langcode;
       }
diff --git a/src/Utility.php b/src/Utility.php
index 8e8ccda..8baed14 100644
--- a/src/Utility.php
+++ b/src/Utility.php
@@ -367,7 +367,8 @@ class Utility {
    *   might be NULL. If $separate_last is TRUE it's the exact other way round.
    */
   public static function splitPropertyPath($property_path, $separate_last = TRUE, $separator = ':') {
-    $function = $separate_last ? 'strrpos' : 'strpos';
+    $is_default_separator = $separator != IndexInterface::DATASOURCE_ID_SEPARATOR;
+    $function = $separate_last && $is_default_separator ? 'strrpos' : 'strpos';
     $pos = $function($property_path, $separator);
     if ($pos !== FALSE) {
       return array(
