+               //Set alternates
+               $result['alternates'] = [];
+
+               //Set route
+               $route = 'rapsysair_location_view';
+
+               //Set route params
+               $routeParams = ['id' => $id];
+
+               //Iterate on each languages
+               foreach($this->languages as $languageId => $language) {
+                       //Without current locale
+                       if ($languageId !== $locale) {
+                               //Set titles
+                               $titles = [];
+
+                               //Set route params locale
+                               $routeParams['_locale'] = $languageId;
+
+                               //Set route params location
+                               $routeParams['location'] = $this->slugger->slug($this->translator->trans($result['title'], [], null, $languageId));
+
+                               //Iterate on each locales
+                               foreach(array_keys($this->languages) as $other) {
+                                       //Without other locale
+                                       if ($other !== $languageId) {
+                                               //Set other locale title
+                                               $titles[$other] = $this->translator->trans($language, [], null, $other);
+                                       }
+                               }
+
+                               //Add alternates locale
+                               $result['alternates'][substr($languageId, 0, 2)] = $result['alternates'][str_replace('_', '-', $languageId)] = [
+                                       'absolute' => $this->router->generate($route, $routeParams, UrlGeneratorInterface::ABSOLUTE_URL),
+                                       'relative' => $this->router->generate($route, $routeParams),
+                                       'title' => implode('/', $titles),
+                                       'translated' => $this->translator->trans($language, [], null, $languageId)
+                               ];
+                       }
+               }
+
+               //Return result
+               return [
+                       'id' => $result['id'],
+                       'city' => [
+                               'id' => $result['city_id'],
+                               'title' => $result['city'],
+                               'in' => $this->translator->trans('in '.$result['city']),
+                               'link' => $this->router->generate('rapsysair_city_view', ['city' => $result['city'], 'latitude' => $result['city_latitude'], 'longitude' => $result['city_longitude']])
+                       ],
+                       'title' => $title = $this->translator->trans($result['title']),
+                       'latitude' => $result['latitude'],
+                       'longitude' => $result['longitude'],
+                       'indoor' => $result['indoor'],
+                       'modified' => $result['modified'],
+                       'around' => $this->translator->trans('around '.$result['title']),
+                       'at' => $this->translator->trans('at '.$result['title']),
+                       'atin' => $this->translator->trans('at '.$result['title']).' '.$this->translator->trans('in '.$result['city']),
+                       'multimap' => $this->translator->trans($result['title'].' sector map'),
+                       //XXX: Useless ???
+                       'slug' => $slug = $this->slugger->slug($title),
+                       'link' => $this->router->generate($route, ['_locale' => $locale, 'location' => $slug]+$routeParams),
+                       'alternates' => $result['alternates']
+               ];
+       }
+
+       /**
+        * Find complementary locations by session id
+        *
+        * @param int $id The session id
+        * @return array The other locations
+        */
+       public function findComplementBySessionId(int $id): array {
+               //Fetch complement locations
+               return array_column(
+                       $this->getEntityManager()
+                               #->createQuery('SELECT l.id, l.title FROM Rapsys\AirBundle\Entity\Location l JOIN Rapsys\AirBundle\Entity\Session s WITH s.id = :sid LEFT JOIN Rapsys\AirBundle\Entity\Session s2 WITH s2.id != s.id AND s2.slot = s.slot AND s2.date = s.date WHERE l.id != s.location AND s2.location IS NULL GROUP BY l.id ORDER BY l.id')
+                               ->createQuery('SELECT l.id, l.title FROM Rapsys\AirBundle\Entity\Session s LEFT JOIN Rapsys\AirBundle\Entity\Session s2 WITH s2.id != s.id AND s2.slot = s.slot AND s2.date = s.date LEFT JOIN Rapsys\AirBundle\Entity\Location l WITH l.id != s.location AND (l.id != s2.location OR s2.location IS NULL) WHERE s.id = :sid GROUP BY l.id ORDER BY l.id')
+                               ->setParameter('sid', $id)
+                               ->getArrayResult(),
+                       'id',
+                       'title'
+               );
+       }
+
+       /**
+        * Find locations by user id
+        *
+        * @param int $id The user id
+        * @return array The user locations
+        */
+       public function findByUserId(int $userId): array {
+               //Set the request
+               $req = 'SELECT l.id, l.title
+FROM Rapsys\AirBundle\Entity\UserLocation AS ul
+JOIN Rapsys\AirBundle\Entity\Location AS l ON (l.id = ul.location_id)
+WHERE ul.user_id = :id';
+
+               //Replace bundle entity name by table name
+               $req = str_replace($this->tableKeys, $this->tableValues, $req);
+
+               //Get result set mapping instance
+               //XXX: DEBUG: see ../blog.orig/src/Rapsys/BlogBundle/Repository/ArticleRepository.php
+               $rsm = new ResultSetMapping();
+
+               //Declare result set for our request
+               $rsm->addEntityResult('Rapsys\AirBundle\Entity\Location', 'l')
+                       ->addFieldResult('l', 'id', 'id')
+                       ->addFieldResult('l', 'title', 'title');
+