diff --git a/views/views_navigation_handler_entity_field_entity.inc b/views/views_navigation_handler_entity_field_entity.inc
new file mode 100644
index 0000000..a00e6c6
--- /dev/null
+++ b/views/views_navigation_handler_entity_field_entity.inc
@@ -0,0 +1,20 @@
+<?php
+
+class views_navigation_handler_entity_field_entity extends entity_views_handler_field_entity {
+
+  public function render($values) {
+    $return = parent::render($values);
+    // For entities such as nodes, the HTML containing the link is already
+    // built, so that the only way we found is to look for the alias in the
+    // rendered HTML...
+    if (isset($this->view->views_navigation_cid)) {
+      module_load_include('inc', 'views_navigation');
+      foreach ($this->wrappers as $wrapper) {
+        $entity = $wrapper->value();
+        _views_navigation_replace_href_in_html($return, $entity, $this->view);
+      }
+    }
+    return $return;
+  }
+
+}
diff --git a/views/views_navigation_plugin_ds_entity_view.inc b/views/views_navigation_plugin_ds_entity_view.inc
new file mode 100644
index 0000000..5083dea
--- /dev/null
+++ b/views/views_navigation_plugin_ds_entity_view.inc
@@ -0,0 +1,18 @@
+<?php
+
+class views_navigation_plugin_ds_entity_view extends views_plugin_ds_entity_view {
+  public function render($values) {
+    $return = parent::render($values);
+    // For entities such as nodes, the HTML containing the link is already built,
+    // so that the only way we found is to look for the alias in the rendered
+    // HTML...
+    if (isset($this->view->views_navigation_cid)) {
+      module_load_include('inc', 'views_navigation');
+      foreach ($this->entities as $entity) {
+        _views_navigation_replace_href_in_html($return, $entity, $this->view);
+      }
+    }
+    return $return;
+  }
+
+}
diff --git a/views/views_navigation_plugin_entity_row_entity_view.inc b/views/views_navigation_plugin_entity_row_entity_view.inc
index 7bf8cd8..6e321a7 100644
--- a/views/views_navigation_plugin_entity_row_entity_view.inc
+++ b/views/views_navigation_plugin_entity_row_entity_view.inc
@@ -8,26 +8,12 @@ class views_navigation_plugin_entity_row_entity_view extends entity_views_plugin
     // so that the only way we found is to look for the alias in the rendered
     // HTML...
     if (isset($this->view->views_navigation_cid)) {
+      module_load_include('inc', 'views_navigation');
       foreach ($this->entities as $entity) {
-        module_load_include('inc', 'views_navigation');
-        $entity_type = _views_navigation_get_entity_type($this->view->query);
-        $id_key = _views_navigation_get_id_key($entity_type);
-        $uri = entity_uri($entity_type, $entity);
-        $alias = drupal_get_path_alias($uri['path']);
-        $this->_replace_href($return, $alias, $entity->$id_key);
+        _views_navigation_replace_href_in_html($return, $entity, $this->view);
       }
     }
     return $return;
   }
 
-  private function _replace_href(&$html, $alias, $etid) {
-    global $base_url;
-    $pattern = '@href="(' . $base_url . ')?/' . trim($alias) . '"@';
-    if (preg_match($pattern, $html)) {
-      module_load_include('inc', 'views_navigation');
-      $url = _views_navigation_build_url($etid, $this->view, array('absolute' => FALSE));
-      $html = preg_replace($pattern, 'href="' . $url . '"', $html);
-    }
-  }
-
 }
diff --git a/views_navigation.inc b/views_navigation.inc
index df51082..86c5bc8 100644
--- a/views_navigation.inc
+++ b/views_navigation.inc
@@ -409,3 +409,23 @@ function _views_navigation_get_entity_type($query) {
   }
   return $entity_type;
 }
+
+function _views_navigation_replace_href_in_html(&$html, $entity, $view) {
+  global $base_url;
+  global $language;
+
+  $entity_type = _views_navigation_get_entity_type($view->query);
+  $id_key = _views_navigation_get_id_key($entity_type);
+  $uri = entity_uri($entity_type, $entity);
+  $alias = drupal_get_path_alias($uri['path']);
+
+  if (!empty($language->prefix)) {
+    $alias = $language->prefix . '/' . $alias;
+  }
+
+  $pattern = '@href="(' . $base_url . ')?/' . trim($alias) . '"@';
+  if (preg_match($pattern, $html)) {
+    $url = _views_navigation_build_url($entity->$id_key, $view, array('absolute' => FALSE));
+    $html = preg_replace($pattern, 'href="' . $url . '"', $html);
+  }
+}
diff --git a/views_navigation.info b/views_navigation.info
index f68f91f..62b549d 100755
--- a/views_navigation.info
+++ b/views_navigation.info
@@ -8,8 +8,11 @@ files[] = views/views_navigation_handler_field_field.inc
 files[] = views/views_navigation_handler_entity_field_text.inc
 files[] = views/views_navigation_handler_entity_field_field.inc
 files[] = views/views_navigation_handler_entity_field_uri.inc
+files[] = views/views_navigation_handler_entity_field_entity.inc
 files[] = views/views_navigation_plugin_display_extender_views_navigation.inc
 files[] = views/views_navigation_plugin_entity_row_entity_view.inc
+files[] = views/views_navigation_plugin_ds_entity_view.inc
+
 dependencies[] = views
 files[] = tests/views_navigation.test
 testing_api = 2.x
diff --git a/views_navigation.module b/views_navigation.module
index e3d0f0e..cd5f6db 100755
--- a/views_navigation.module
+++ b/views_navigation.module
@@ -69,6 +69,9 @@ function views_navigation_views_data_alter(&$data) {
           case 'entity_views_handler_field_uri' :
             $item['field']['handler'] = 'views_navigation_handler_entity_field_uri';
             break;
+          case 'entity_views_handler_field_entity' :
+            $item['field']['handler'] = 'views_navigation_handler_entity_field_entity';
+          break;
         }
       }
     }
@@ -84,6 +87,9 @@ function views_navigation_views_plugins_alter(&$plugins) {
     module_load_include('inc', 'views_navigation', 'views/views_navigation_plugin_entity_row_entity_view');
     $plugins['row']['entity']['override handler'] = 'views_navigation_plugin_entity_row_entity_view';
   }
+  if (isset($plugins['row']['ds'])) {
+    $plugins['row']['ds']['override handler'] = 'views_navigation_plugin_ds_entity_view';
+  }
 }
 
 /**
