diff --git a/motif/server/datatrans.c b/motif/server/datatrans.c
index 61abe5a964b0480344e1bf8430d43aa01a84c758..99aa42330c4d7900866e270ab8350db63f36d452 100644
--- a/motif/server/datatrans.c
+++ b/motif/server/datatrans.c
@@ -1,6 +1,6 @@
 /*
 
- $Header: /Volumes/share2/src/cmucl/cvs2git/cvsroot/src/motif/server/datatrans.c,v 1.5 1997/08/22 20:49:32 pw Exp $
+ $Header: /Volumes/share2/src/cmucl/cvs2git/cvsroot/src/motif/server/datatrans.c,v 1.6 1997/12/31 18:57:53 pw Exp $
 
  This code was written as part of the CMU Common Lisp project at
  Carnegie Mellon University, and has been placed in the public domain.
@@ -378,6 +378,8 @@ void message_read_resource_names(message_t message,ResourceList *list,
   list->length = length;
   if( length>0 ) {
     list->args = (ArgList)XtMalloc(length*sizeof(Arg));
+    register_garbage(list->args, GarbageData);
+
     /* Allocate region to store data into */
     data = (long *)XtMalloc( sizeof(long)*length );
     bzero(data,sizeof(long)*length);
diff --git a/motif/server/requests.c b/motif/server/requests.c
index 92ffd967800edcbbe0b98230c228b7693f029ec7..9d65702b0198b9e0d40fde1ec0e49998f4384787 100644
--- a/motif/server/requests.c
+++ b/motif/server/requests.c
@@ -1,6 +1,6 @@
 /*
 
- $Header: /Volumes/share2/src/cmucl/cvs2git/cvsroot/src/motif/server/requests.c,v 1.4 1996/05/08 14:15:40 ram Exp $
+ $Header: /Volumes/share2/src/cmucl/cvs2git/cvsroot/src/motif/server/requests.c,v 1.5 1997/12/31 18:57:55 pw Exp $
 
  This code was written as part of the CMU Common Lisp project at
  Carnegie Mellon University, and has been placed in the public domain.
@@ -27,14 +27,29 @@ Garbage garbage_list = NULL;
 
 #include "Interface.h"
 
+static int
+already_garbage(void*stuff)
+{
+  Garbage current = garbage_list;
+  while( current ) {
+    if (current->junk == (char*)stuff){
+      fprintf(stderr,"Redundant add to garbage list.\n");
+      return 1;
+    }
+    current = current->next;
+  }
+  return 0;
+}
+    
 void register_garbage(void *stuff,garbage_kind kind)
 {
-  Garbage garbage = XtNew(struct garbage_node);
-
-  garbage->junk = (char *)stuff;
-  garbage->kind = kind;
-  garbage->next = garbage_list;
-  garbage_list = garbage;
+  if (!already_garbage(stuff)) {
+    Garbage garbage = XtNew(struct garbage_node);
+    garbage->junk = (char *)stuff;
+    garbage->kind = kind;
+    garbage->next = garbage_list;
+    garbage_list = garbage;
+  }
 }
 
 void cleanup_garbage()
diff --git a/motif/server/resources.c b/motif/server/resources.c
index 284295f76d4af6bab2cfcc4c1014a8bdbc1dab7f..5326114424f1116970d28ad3238fa7fdd83e4804 100644
--- a/motif/server/resources.c
+++ b/motif/server/resources.c
@@ -1,6 +1,6 @@
 /*
 
- $Header: /Volumes/share2/src/cmucl/cvs2git/cvsroot/src/motif/server/resources.c,v 1.2 1994/10/27 17:16:51 ram Exp $
+ $Header: /Volumes/share2/src/cmucl/cvs2git/cvsroot/src/motif/server/resources.c,v 1.3 1997/12/31 18:57:58 pw Exp $
 
  This code was written as part of the CMU Common Lisp project at
  Carnegie Mellon University, and has been placed in the public domain.
@@ -33,7 +33,6 @@ int RXtSetValues(message_t message)
   toolkit_read_value(message,&resources,ExtRResourceList);
 
   XtSetValues(w,resources.args,resources.length);
-  register_garbage(resources.args,GarbageData);
 }
 
 int RXtGetValues(message_t message)
@@ -53,7 +52,6 @@ int RXtGetValues(message_t message)
   message_write_resource_list(reply,&resources,resource_list_tag);
   message_send(client_socket,reply);
   message_free(reply);
-  register_garbage(resources.args,GarbageData);
 
   must_confirm = False;
 }