diff --git a/ChangeLog b/ChangeLog
index 069a8b33cbc11b35bb3ddf0cbdd697efdfbb70c7..1b1b227d96f8d9a6d6cff039f9a14663209a6773 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+2005-09-19  Matthias Clasen  <mclasen@redhat.com>
+
+	* gtk/gtkiconview.c: Use g_list_nth_data() instead of g_list_nth()->data
+	in multiple places to avoid segfaults if the index is out of range.  
+	(#316422, Guillaume Cottenceau)
+
 2005-09-18  Hans Breuer  <hans@breuer.org>
 
 	* gtk/gtktrayicon-win32.c : now handling events by hard-coded 
diff --git a/ChangeLog.pre-2-10 b/ChangeLog.pre-2-10
index 069a8b33cbc11b35bb3ddf0cbdd697efdfbb70c7..1b1b227d96f8d9a6d6cff039f9a14663209a6773 100644
--- a/ChangeLog.pre-2-10
+++ b/ChangeLog.pre-2-10
@@ -1,3 +1,9 @@
+2005-09-19  Matthias Clasen  <mclasen@redhat.com>
+
+	* gtk/gtkiconview.c: Use g_list_nth_data() instead of g_list_nth()->data
+	in multiple places to avoid segfaults if the index is out of range.  
+	(#316422, Guillaume Cottenceau)
+
 2005-09-18  Hans Breuer  <hans@breuer.org>
 
 	* gtk/gtktrayicon-win32.c : now handling events by hard-coded 
diff --git a/gtk/gtkiconview.c b/gtk/gtkiconview.c
index e039353913ef1857c2ff96e7b4860a6b5d7a1e32..0f8bdfae688889095627cb375df56271296e78a3 100644
--- a/gtk/gtkiconview.c
+++ b/gtk/gtkiconview.c
@@ -1753,8 +1753,8 @@ gtk_icon_view_set_cursor (GtkIconView     *icon_view,
   gtk_icon_view_stop_editing (icon_view, TRUE);
 
   if (gtk_tree_path_get_depth (path) == 1)
-    item = g_list_nth (icon_view->priv->items,
-		       gtk_tree_path_get_indices(path)[0])->data;
+    item = g_list_nth_data (icon_view->priv->items,
+			    gtk_tree_path_get_indices(path)[0]);
   
   if (!item)
     return;
@@ -5072,8 +5072,8 @@ gtk_icon_view_unselect_path (GtkIconView *icon_view,
   g_return_if_fail (icon_view->priv->model != NULL);
   g_return_if_fail (path != NULL);
 
-  item = g_list_nth (icon_view->priv->items,
-		     gtk_tree_path_get_indices(path)[0])->data;
+  item = g_list_nth_data (icon_view->priv->items,
+			  gtk_tree_path_get_indices(path)[0]);
 
   if (!item)
     return;
@@ -5205,8 +5205,8 @@ gtk_icon_view_path_is_selected (GtkIconView *icon_view,
   g_return_val_if_fail (icon_view->priv->model != NULL, FALSE);
   g_return_val_if_fail (path != NULL, FALSE);
   
-  item = g_list_nth (icon_view->priv->items,
-		     gtk_tree_path_get_indices(path)[0])->data;
+  item = g_list_nth_data (icon_view->priv->items,
+			  gtk_tree_path_get_indices(path)[0]);
 
   if (!item)
     return FALSE;
@@ -8480,7 +8480,6 @@ gtk_icon_view_accessible_model_rows_reordered (GtkTreeModel *tree_model,
   GtkIconView *icon_view;
   GtkIconViewItemAccessible *item;
   GList *items;
-  GList *tmp_list;
   AtkObject *atk_obj;
 
   atk_obj = gtk_widget_get_accessible (GTK_WIDGET (user_data));
@@ -8489,14 +8488,12 @@ gtk_icon_view_accessible_model_rows_reordered (GtkTreeModel *tree_model,
   priv = gtk_icon_view_accessible_get_priv (atk_obj);
 
   items = priv->items;
-  tmp_list = NULL;
   while (items)
     {
       info = items->data;
       item = GTK_ICON_VIEW_ITEM_ACCESSIBLE (info->item);
       info->index = new_order[info->index];
-      tmp_list = g_list_nth (icon_view->priv->items, info->index);
-      item->item = tmp_list->data;
+      item->item = g_list_nth_data (icon_view->priv->items, info->index);
       items = items->next;
     }
   priv->items = g_list_sort (priv->items, 
@@ -8761,7 +8758,6 @@ gtk_icon_view_accessible_add_selection (AtkSelection *selection,
   GtkWidget *widget;
   GtkIconView *icon_view;
   GtkIconViewItem *item;
-  GList *l;
 
   widget = GTK_ACCESSIBLE (selection)->widget;
   if (widget == NULL)
@@ -8769,11 +8765,11 @@ gtk_icon_view_accessible_add_selection (AtkSelection *selection,
 
   icon_view = GTK_ICON_VIEW (widget);
 
-  l = g_list_nth (icon_view->priv->items, i);
-  if (!l)
+  item = g_list_nth_data (icon_view->priv->items, i);
+
+  if (!item)
     return FALSE;
 
-  item = l->data;
   gtk_icon_view_select_item (icon_view, item);
 
   return TRUE;
@@ -8871,11 +8867,10 @@ gtk_icon_view_accessible_is_child_selected (AtkSelection *selection,
     return FALSE;
 
   icon_view = GTK_ICON_VIEW (widget);
-  l = g_list_nth (icon_view->priv->items, i);
-  if (!l)
-    return FALSE;
 
-  item = l->data;
+  item = g_list_nth_data (icon_view->priv->items, i);
+  if (!item)
+    return FALSE;
 
   return item->selected;
 }