diff --git a/ecrire/inc_version.php b/ecrire/inc_version.php
index d232f2cab2f66d35c6b8e0b9bf2374b7de896620..535092379c375fc7e7d026227f4f4ea01ad9fe85 100644
--- a/ecrire/inc_version.php
+++ b/ecrire/inc_version.php
@@ -419,6 +419,14 @@ OR _request('action') == 'test_dirs')) {
 	// autrement c'est une install ad hoc (spikini...), on sait pas faire
 }
 
+// memoriser un tri sessionne eventuel
+if (isset($_REQUEST['var_memotri'])
+  AND $t = $_REQUEST['var_memotri']
+	AND (strncmp($t,'trisession',10)==0 OR strncmp($t,'senssession',11)==0)){
+	if (!function_exists('session_set'))
+		include_spip('inc/session');
+	session_set($t,_request($t));
+}
 
 /**
  * Header "Composed-By"
diff --git a/ecrire/public/balises.php b/ecrire/public/balises.php
index 92150d49f06f0630feac35efb4adaef312df5012..fbcfae0dbae83702256f6a880f9275be7ddeed9e 100644
--- a/ecrire/public/balises.php
+++ b/ecrire/public/balises.php
@@ -2594,6 +2594,7 @@ function balise_TRI_dist($p, $liste='true') {
 
 	$_variable = "((\$s=$_issens)?'sens':'tri').".$boucle->modificateur['tri_nom'];
 	$_url = "parametre_url(self(),$_variable,\$s?$_sens:$_champ)";
+	$_url = "parametre_url($_url,'var_memotri',strncmp(".$boucle->modificateur['tri_nom'].",'session',7)==0?$_variable:'')";
 	$_on = "\$s?(".$boucle->modificateur['tri_sens']."==$_sens".'):('.$boucle->modificateur['tri_champ']."==$_champ)";
 
 	$p->code = "lien_ou_expose($_url,$_libelle,$_on".($_class?",$_class":"").")";
diff --git a/ecrire/public/criteres.php b/ecrire/public/criteres.php
index 5bac3eca158c4684110d13bd1306b6d968f73e70..e88c6bf8583441d3718daa88580848555c84c074 100644
--- a/ecrire/public/criteres.php
+++ b/ecrire/public/criteres.php
@@ -1287,10 +1287,10 @@ function critere_tri_dist($idb, &$boucles, $crit){
 	$_variable = !isset($crit->param[2][0]) ? "'$idb'"
 		: calculer_liste(array($crit->param[2][0]), array(), $boucles, $boucle->id_parent);
 
-	$_tri = "((\$t=(isset(\$Pile[0]['tri'.$_variable]))?\$Pile[0]['tri'.$_variable]:$_champ_defaut)?tri_protege_champ(\$t):'')";
+	$_tri = "((\$t=(isset(\$Pile[0]['tri'.$_variable]))?\$Pile[0]['tri'.$_variable]:((strncmp($_variable,'session',7)==0 AND session_get('tri'.$_variable))?session_get('tri'.$_variable):$_champ_defaut))?tri_protege_champ(\$t):'')";
 
 	$_sens_defaut = "(is_array(\$s=$_sens_defaut)?(isset(\$s[\$st=$_tri])?\$s[\$st]:reset(\$s)):\$s)";
-	$_sens = "((intval(\$t=(isset(\$Pile[0]['sens'.$_variable]))?\$Pile[0]['sens'.$_variable]:$_sens_defaut)==-1 OR \$t=='inverse')?-1:1)";
+	$_sens = "((intval(\$t=(isset(\$Pile[0]['sens'.$_variable]))?\$Pile[0]['sens'.$_variable]:((strncmp($_variable,'session',7)==0 AND session_get('sens'.$_variable))?session_get('sens'.$_variable):$_sens_defaut))==-1 OR \$t=='inverse')?-1:1)";
 
 	$boucle->modificateur['tri_champ'] = $_tri;
 	$boucle->modificateur['tri_sens'] = $_sens;
diff --git a/prive/objets/liste/articles.html b/prive/objets/liste/articles.html
index ade1782a742ec03bbbf4821876c836fd6c0b6c11..458a9d9767744a496b2da72a369bdeccdb568168 100644
--- a/prive/objets/liste/articles.html
+++ b/prive/objets/liste/articles.html
@@ -19,7 +19,7 @@
 		</tr>
 	</thead>
 	<tbody>
-	<BOUCLE_liste_art(ARTICLES){id_article?}{id_rubrique?}{id_mot?}{id_auteur?}{where?}{statut?}{recherche?}{tri #ENV{par,date},#GET{defaut_tri}}{par titre}{pagination #ENV{nb,10}}{!lang_select}>
+	<BOUCLE_liste_art(ARTICLES){id_article?}{id_rubrique?}{id_mot?}{id_auteur?}{where?}{statut?}{recherche?}{tri #ENV{par,date},#GET{defaut_tri},session_liste_art}{par titre}{pagination #ENV{nb,10}}{!lang_select}>
 		[(#LANG|changer_typo)]
 		<tr class="[(#COMPTEUR_BOUCLE|alterner{row_odd,row_even})]">
 			<td class='statut'>[(#STATUT|puce_statut{article,#ID_ARTICLE,#ID_RUBRIQUE})]</td>