Index: commands.c
===================================================================
--- commands.c	(revision 6829afcb7133217c6afdbd7634452d0fabdeaa4f)
+++ commands.c	(revision e6d7e4ea996534cc5a8f0ce69e523114ea38486b)
@@ -2467,6 +2467,5 @@
 void owl_command_punt_unpunt(int argc, const char *const * argv, const char *buff, int unpunt)
 {
-  owl_list * fl;
-  owl_filter * f;
+  GPtrArray * fl;
   int i;
 
@@ -2478,8 +2477,6 @@
     if(unpunt && (i=atoi(argv[1])) !=0) {
       i--;      /* Accept 1-based indexing */
-      if(i < owl_list_get_size(fl)) {
-        f = owl_list_get_element(fl, i);
-        owl_list_remove_element(fl, i);
-        owl_filter_delete(f);
+      if (i < fl->len) {
+        owl_filter_delete(g_ptr_array_remove_index(fl, i));
         return;
       } else {
Index: functions.c
===================================================================
--- functions.c	(revision 6829afcb7133217c6afdbd7634452d0fabdeaa4f)
+++ functions.c	(revision e6d7e4ea996534cc5a8f0ce69e523114ea38486b)
@@ -2215,17 +2215,16 @@
 {
   const owl_filter *f;
-  const owl_list *fl;
+  const GPtrArray *fl;
   char *tmp;
   owl_fmtext fm;
-  int i, j;
+  int i;
 
   owl_fmtext_init_null(&fm);
 
   fl=owl_global_get_puntlist(&g);
-  j=owl_list_get_size(fl);
   owl_fmtext_append_bold(&fm, "Active zpunt filters:\n");
 
-  for (i=0; i<j; i++) {
-    f=owl_list_get_element(fl, i);
+  for (i = 0; i < fl->len; i++) {
+    f = fl->pdata[i];
     owl_fmtext_appendf_normal(&fm, "[% 2d] ", i+1);
     tmp = owl_filter_print(f);
@@ -2787,6 +2786,6 @@
 {
   owl_filter *f;
-  owl_list *fl;
-  int i, j;
+  GPtrArray *fl;
+  int i;
   fl=owl_global_get_puntlist(&g);
 
@@ -2799,7 +2798,6 @@
 
   /* Check for an identical filter */
-  j=owl_list_get_size(fl);
-  for (i=0; i<j; i++) {
-    if (owl_filter_equiv(f, owl_list_get_element(fl, i))) {
+  for (i = 0; i < fl->len; i++) {
+    if (owl_filter_equiv(f, fl->pdata[i])) {
       owl_function_debugmsg("found an equivalent punt filter");
       /* if we're punting, then just silently bow out on this duplicate */
@@ -2811,6 +2809,5 @@
       /* if we're unpunting, then remove this filter from the puntlist */
       if (direction==1) {
-	owl_filter_delete(owl_list_get_element(fl, i));
-	owl_list_remove_element(fl, i);
+	owl_filter_delete(g_ptr_array_remove_index(fl, i));
 	owl_filter_delete(f);
 	return;
@@ -2822,5 +2819,5 @@
     owl_function_debugmsg("punting");
     /* If we're punting, add the filter to the global punt list */
-    owl_list_append_element(fl, f);
+    g_ptr_array_add(fl, f);
   } else if (direction == 1) {
     owl_function_makemsg("No matching punt filter");
Index: global.c
===================================================================
--- global.c	(revision 6829afcb7133217c6afdbd7634452d0fabdeaa4f)
+++ global.c	(revision e6d7e4ea996534cc5a8f0ce69e523114ea38486b)
@@ -47,5 +47,5 @@
   owl_dict_create(&(g->filters));
   g->filterlist = NULL;
-  owl_list_create(&(g->puntlist));
+  g->puntlist = g_ptr_array_new();
   g->messagequeue = g_queue_new();
   owl_dict_create(&(g->styledict));
@@ -579,18 +579,17 @@
 /* puntlist */
 
-owl_list *owl_global_get_puntlist(owl_global *g) {
-  return(&(g->puntlist));
+GPtrArray *owl_global_get_puntlist(owl_global *g) {
+  return g->puntlist;
 }
 
 int owl_global_message_is_puntable(owl_global *g, const owl_message *m) {
-  const owl_list *pl;
-  int i, j;
-
-  pl=owl_global_get_puntlist(g);
-  j=owl_list_get_size(pl);
-  for (i=0; i<j; i++) {
-    if (owl_filter_message_match(owl_list_get_element(pl, i), m)) return(1);
-  }
-  return(0);
+  const GPtrArray *pl;
+  int i;
+
+  pl = owl_global_get_puntlist(g);
+  for (i = 0; i < pl->len; i++) {
+    if (owl_filter_message_match(pl->pdata[i], m)) return 1;
+  }
+  return 0;
 }
 
Index: owl.h
===================================================================
--- owl.h	(revision eb897c60f2b0304285f23687dc1f357afaa6ca53)
+++ owl.h	(revision e6d7e4ea996534cc5a8f0ce69e523114ea38486b)
@@ -542,5 +542,5 @@
   owl_dict filters;
   GList *filterlist;
-  owl_list puntlist;
+  GPtrArray *puntlist;
   owl_vardict vars;
   owl_cmddict cmds;
