diff --git a/libjava/ChangeLog b/libjava/ChangeLog
index 1333cb4f971bf6015e870ec6617cf73dcd668279..06595e00db7b8fa69a888e89570c3fff009e1cd7 100644
--- a/libjava/ChangeLog
+++ b/libjava/ChangeLog
@@ -1,3 +1,16 @@
+2003-08-21  Scott Gilbertson  <scottg@mantatest.com>
+            Thomas Fitzsimmons  <fitzsim@redhat.com>
+
+	* Makefile.am (gtk_awt_peer_sources): Add
+	gnu/java/awt/peer/GLightweightPeer.java.  Remove
+	gnu/java/awt/GLightweightPeer.java.
+	* gnu/java/awt/GLightweightPeer.java: Remove file.
+	* gnu/java/awt/peer/GLightweightPeer.java: New file.
+	* java/awt/Component.java (getToolkit): Add comment about
+	lightweight components.
+	* java/awt/Toolkit.java (createComponent): Return
+	gnu.java.awt.peer.GLightweightPeer.
+
 2003-08-21  Richard Earnshaw  <rearnsha@arm.com>
 
 	* configure.in: Fix detection of gcj when building with newlib.
diff --git a/libjava/Makefile.am b/libjava/Makefile.am
index cfbdbd80783aa5925825962ea526498facbc4855..7869df021f30b55acc5ab01364ad1845ab80c174 100644
--- a/libjava/Makefile.am
+++ b/libjava/Makefile.am
@@ -758,10 +758,10 @@ gnu/java/awt/ComponentDataBlitOp.java \
 gnu/java/awt/EmbeddedWindow.java \
 gnu/java/awt/EmbeddedWindowSupport.java \
 gnu/java/awt/EventModifier.java \
-gnu/java/awt/GLightweightPeer.java \
 gnu/java/awt/image/ImageDecoder.java \
 gnu/java/awt/image/XBMDecoder.java \
 gnu/java/awt/peer/EmbeddedWindowPeer.java \
+gnu/java/awt/peer/GLightweightPeer.java \
 gnu/java/beans/editors/ColorEditor.java	\
 gnu/java/beans/editors/FontEditor.java \
 gnu/java/beans/editors/NativeBooleanEditor.java	\
diff --git a/libjava/Makefile.in b/libjava/Makefile.in
index 6ba2a97960583c7c6711893bce42f8b35a574816..b98f5208d996616d44c683cf40293ceed9192149 100644
--- a/libjava/Makefile.in
+++ b/libjava/Makefile.in
@@ -530,10 +530,10 @@ gnu/java/awt/ComponentDataBlitOp.java \
 gnu/java/awt/EmbeddedWindow.java \
 gnu/java/awt/EmbeddedWindowSupport.java \
 gnu/java/awt/EventModifier.java \
-gnu/java/awt/GLightweightPeer.java \
 gnu/java/awt/image/ImageDecoder.java \
 gnu/java/awt/image/XBMDecoder.java \
 gnu/java/awt/peer/EmbeddedWindowPeer.java \
+gnu/java/awt/peer/GLightweightPeer.java \
 gnu/java/beans/editors/ColorEditor.java	\
 gnu/java/beans/editors/FontEditor.java \
 gnu/java/beans/editors/NativeBooleanEditor.java	\
@@ -2688,14 +2688,13 @@ LINK = $(LIBTOOL) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(LDFLAGS) -o $@
 DATA =  $(jar_DATA) $(pkgconfig_DATA) $(toolexecmainlib_DATA)
 
 DIST_COMMON =  README COPYING ChangeLog Makefile.am Makefile.in NEWS \
-THANKS acconfig.h acinclude.m4 aclocal.m4 configure configure.in \
-gcj/libgcj-config.h.in gcj/stamp-h2.in include/config.h.in \
-include/stamp-h1.in libgcj-test.spec.in libgcj.pc.in libgcj.spec.in
+THANKS acinclude.m4 aclocal.m4 configure configure.in \
+libgcj-test.spec.in libgcj.pc.in libgcj.spec.in
 
 
 DISTFILES = $(DIST_COMMON) $(SOURCES) $(HEADERS) $(TEXINFOS) $(EXTRA_DIST)
 
-TAR = tar
+TAR = gtar
 GZIP_ENV = --best
 DIST_SUBDIRS =  @DIRLTDL@ testsuite gcj include @DIRLTDL@ gcj include
 DEP_FILES =  .deps/$(srcdir)/$(CONVERT_DIR)/gen-from-JIS.P \
@@ -2789,11 +2788,11 @@ DEP_FILES =  .deps/$(srcdir)/$(CONVERT_DIR)/gen-from-JIS.P \
 .deps/gnu/java/awt/EmbeddedWindow.P \
 .deps/gnu/java/awt/EmbeddedWindowSupport.P \
 .deps/gnu/java/awt/EventModifier.P \
-.deps/gnu/java/awt/GLightweightPeer.P \
 .deps/gnu/java/awt/image/ImageDecoder.P \
 .deps/gnu/java/awt/image/XBMDecoder.P \
 .deps/gnu/java/awt/natEmbeddedWindow.P \
 .deps/gnu/java/awt/peer/EmbeddedWindowPeer.P \
+.deps/gnu/java/awt/peer/GLightweightPeer.P \
 .deps/gnu/java/awt/peer/gtk/GdkFontMetrics.P \
 .deps/gnu/java/awt/peer/gtk/GdkGraphics.P \
 .deps/gnu/java/awt/peer/gtk/GtkArg.P \
@@ -4318,53 +4317,6 @@ config.status: $(srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
 	$(SHELL) ./config.status --recheck
 $(srcdir)/configure: @MAINTAINER_MODE_TRUE@$(srcdir)/configure.in $(ACLOCAL_M4) $(CONFIGURE_DEPENDENCIES)
 	cd $(srcdir) && $(AUTOCONF)
-
-include/config.h: include/stamp-h1
-	@if test ! -f $@; then \
-		rm -f include/stamp-h1; \
-		$(MAKE) include/stamp-h1; \
-	else :; fi
-include/stamp-h1: $(srcdir)/include/config.h.in $(top_builddir)/config.status
-	cd $(top_builddir) \
-	  && CONFIG_FILES= CONFIG_HEADERS=include/config.h \
-	     $(SHELL) ./config.status
-	@echo timestamp > include/stamp-h1 2> /dev/null
-$(srcdir)/include/config.h.in: @MAINTAINER_MODE_TRUE@$(srcdir)/include/stamp-h1.in
-	@if test ! -f $@; then \
-		rm -f $(srcdir)/include/stamp-h1.in; \
-		$(MAKE) $(srcdir)/include/stamp-h1.in; \
-	else :; fi
-$(srcdir)/include/stamp-h1.in: $(top_srcdir)/configure.in $(ACLOCAL_M4) acconfig.h
-	cd $(top_srcdir) && $(AUTOHEADER)
-	@echo timestamp > $(srcdir)/include/stamp-h1.in 2> /dev/null
-
-gcj/libgcj-config.h: gcj/stamp-h2
-	@if test ! -f $@; then \
-		rm -f gcj/stamp-h2; \
-		$(MAKE) gcj/stamp-h2; \
-	else :; fi
-gcj/stamp-h2: $(srcdir)/gcj/libgcj-config.h.in $(top_builddir)/config.status
-	cd $(top_builddir) \
-	  && CONFIG_FILES= CONFIG_HEADERS=gcj/libgcj-config.h \
-	     $(SHELL) ./config.status
-	@echo timestamp > gcj/stamp-h2 2> /dev/null
-$(srcdir)/gcj/libgcj-config.h.in: @MAINTAINER_MODE_TRUE@$(srcdir)/gcj/stamp-h2.in
-	@if test ! -f $@; then \
-		rm -f $(srcdir)/gcj/stamp-h2.in; \
-		$(MAKE) $(srcdir)/gcj/stamp-h2.in; \
-	else :; fi
-$(srcdir)/gcj/stamp-h2.in: $(top_srcdir)/configure.in $(ACLOCAL_M4) acconfig.h
-	cd $(top_srcdir) && $(AUTOHEADER)
-	@echo timestamp > $(srcdir)/gcj/stamp-h2.in 2> /dev/null
-
-mostlyclean-hdr:
-
-clean-hdr:
-
-distclean-hdr:
-	-rm -f include/config.h gcj/libgcj-config.h
-
-maintainer-clean-hdr:
 libgcj.pc: $(top_builddir)/config.status libgcj.pc.in
 	cd $(top_builddir) && CONFIG_FILES=$@ CONFIG_HEADERS= $(SHELL) ./config.status
 libgcj.spec: $(top_builddir)/config.status libgcj.spec.in
@@ -4829,32 +4781,29 @@ distclean-generic:
 	-rm -f config.cache config.log stamp-h stamp-h[0-9]*
 
 maintainer-clean-generic:
-mostlyclean-am:  mostlyclean-hdr mostlyclean-toolexeclibLTLIBRARIES \
-		mostlyclean-compile mostlyclean-libtool \
-		mostlyclean-binPROGRAMS mostlyclean-noinstPROGRAMS \
-		mostlyclean-tags mostlyclean-depend mostlyclean-generic
+mostlyclean-am:  mostlyclean-toolexeclibLTLIBRARIES mostlyclean-compile \
+		mostlyclean-libtool mostlyclean-binPROGRAMS \
+		mostlyclean-noinstPROGRAMS mostlyclean-tags \
+		mostlyclean-depend mostlyclean-generic
 
 mostlyclean: mostlyclean-recursive
 
-clean-am:  clean-hdr clean-toolexeclibLTLIBRARIES clean-compile \
-		clean-libtool clean-binPROGRAMS clean-noinstPROGRAMS \
-		clean-tags clean-depend clean-generic mostlyclean-am \
-		clean-local
+clean-am:  clean-toolexeclibLTLIBRARIES clean-compile clean-libtool \
+		clean-binPROGRAMS clean-noinstPROGRAMS clean-tags \
+		clean-depend clean-generic mostlyclean-am clean-local
 
 clean: clean-recursive
 
-distclean-am:  distclean-hdr distclean-toolexeclibLTLIBRARIES \
-		distclean-compile distclean-libtool \
-		distclean-binPROGRAMS distclean-noinstPROGRAMS \
-		distclean-tags distclean-depend distclean-generic \
-		clean-am
+distclean-am:  distclean-toolexeclibLTLIBRARIES distclean-compile \
+		distclean-libtool distclean-binPROGRAMS \
+		distclean-noinstPROGRAMS distclean-tags \
+		distclean-depend distclean-generic clean-am
 	-rm -f libtool
 
 distclean: distclean-recursive
 	-rm -f config.status
 
-maintainer-clean-am:  maintainer-clean-hdr \
-		maintainer-clean-toolexeclibLTLIBRARIES \
+maintainer-clean-am:  maintainer-clean-toolexeclibLTLIBRARIES \
 		maintainer-clean-compile maintainer-clean-libtool \
 		maintainer-clean-binPROGRAMS \
 		maintainer-clean-noinstPROGRAMS maintainer-clean-tags \
@@ -4866,9 +4815,9 @@ maintainer-clean-am:  maintainer-clean-hdr \
 maintainer-clean: maintainer-clean-recursive
 	-rm -f config.status
 
-.PHONY: mostlyclean-hdr distclean-hdr clean-hdr maintainer-clean-hdr \
-mostlyclean-toolexeclibLTLIBRARIES distclean-toolexeclibLTLIBRARIES \
-clean-toolexeclibLTLIBRARIES maintainer-clean-toolexeclibLTLIBRARIES \
+.PHONY: mostlyclean-toolexeclibLTLIBRARIES \
+distclean-toolexeclibLTLIBRARIES clean-toolexeclibLTLIBRARIES \
+maintainer-clean-toolexeclibLTLIBRARIES \
 uninstall-toolexeclibLTLIBRARIES install-toolexeclibLTLIBRARIES \
 mostlyclean-compile distclean-compile clean-compile \
 maintainer-clean-compile mostlyclean-libtool distclean-libtool \
diff --git a/libjava/gcj/Makefile.in b/libjava/gcj/Makefile.in
index fa140875acd731bcd350bd141c2982944d974878..064b5227625567dfa89132d54cc14d8f8a2c6584 100644
--- a/libjava/gcj/Makefile.in
+++ b/libjava/gcj/Makefile.in
@@ -125,6 +125,7 @@ STRIP = @STRIP@
 SYSDEP_SOURCES = @SYSDEP_SOURCES@
 SYSTEMSPEC = @SYSTEMSPEC@
 SYS_ZLIBS = @SYS_ZLIBS@
+THREADCXXFLAGS = @THREADCXXFLAGS@
 THREADDEPS = @THREADDEPS@
 THREADINCS = @THREADINCS@
 THREADLDFLAGS = @THREADLDFLAGS@
diff --git a/libjava/gnu/java/awt/GLightweightPeer.java b/libjava/gnu/java/awt/peer/GLightweightPeer.java
similarity index 50%
rename from libjava/gnu/java/awt/GLightweightPeer.java
rename to libjava/gnu/java/awt/peer/GLightweightPeer.java
index cb1aac544f343a9e0eaad2c7c24dfb8728581258..5c0ea498e8236a39d23892c4b2e358ff50a99b4c 100644
--- a/libjava/gnu/java/awt/GLightweightPeer.java
+++ b/libjava/gnu/java/awt/peer/GLightweightPeer.java
@@ -1,4 +1,5 @@
-/* Copyright (C) 2000, 2002  Free Software Foundation
+/* GLightweightPeer.java --
+   Copyright (C) 2003 Free Software Foundation, Inc.
 
 This file is part of GNU Classpath.
 
@@ -34,34 +35,109 @@ this exception to your version of the library, but you are not
 obligated to do so.  If you do not wish to do so, delete this
 exception statement from your version. */
 
-package gnu.java.awt;
-
-import java.awt.*;
+package gnu.java.awt.peer;
+
+import java.awt.AWTEvent;
+import java.awt.AWTException;
+import java.awt.BufferCapabilities;
+import java.awt.Color;
+import java.awt.Component;
+import java.awt.Cursor;
+import java.awt.Dimension;
+import java.awt.Font;
+import java.awt.Font;
+import java.awt.FontMetrics;
+import java.awt.Graphics;
+import java.awt.GraphicsConfiguration;
+import java.awt.Image;
+import java.awt.Insets;
+import java.awt.Point;
+import java.awt.Toolkit;
 import java.awt.event.PaintEvent;
-import java.awt.peer.*;
-import java.awt.image.*;
+import java.awt.image.ColorModel;
+import java.awt.image.ImageObserver;
+import java.awt.image.ImageProducer;
+import java.awt.image.VolatileImage;
+import java.awt.peer.ContainerPeer;
+import java.awt.peer.LightweightPeer;
+
+/*
+ * Another possible implementation strategy for lightweight peers is
+ * to make GLightweightPeer a placeholder class that implements
+ * LightweightPeer.  Then the Component and Container classes could
+ * identify a peer as lightweight and handle it specially.  The
+ * current approach is probably more clear but less efficient.
+ */
 
 /**
- * @author Rolf W. Rasmussen <rolfwr@ii.uib.no>
+ * A stub class that implements the ComponentPeer and ContainerPeer
+ * interfaces using callbacks into the Component and Container
+ * classes.  GLightweightPeer allows the Component and Container
+ * classes to treat lightweight and heavyweight peers in the same way.
+ *
+ * Lightweight components are painted directly onto their parent
+ * containers through an Image object provided by the toolkit.
  */
-public class GLightweightPeer implements LightweightPeer
+public class GLightweightPeer
+  implements LightweightPeer, ContainerPeer
 {
-  public static final GLightweightPeer INSTANCE = new GLightweightPeer();
+  private Component comp;
 
-  public GLightweightPeer() {}
+  private Insets containerInsets;
 
-  // -------- java.awt.peer.ComponentPeer implementation:
+  public GLightweightPeer(Component comp)
+  {
+    this.comp = comp;
+  }
+
+  // -------- java.awt.peer.ContainerPeer implementation:
+  
+  public Insets insets()
+  {
+    return getInsets ();
+  }
+  
+  public Insets getInsets()
+  {
+    if (containerInsets == null)
+      containerInsets = new Insets (0,0,0,0);
+    return containerInsets;
+  }
+  
+  public void beginValidate()
+  {
+  }
+  
+  public void endValidate()
+  {
+  }
+  
+  public void beginLayout()
+  {
+  }
   
+  public void endLayout()
+  {
+  }
+  
+  public boolean isPaintPending()
+  {
+    return false;
+  }
+
+  // -------- java.awt.peer.ComponentPeer implementation:
+
   public int checkImage(Image img, int width, int height, ImageObserver o)
   {
-    return 0;
+    return comp.getToolkit().checkImage(img, width, height, o);
   }
 
   public Image createImage(ImageProducer prod)
   {
-    return null;
+    return comp.getToolkit().createImage(prod);
   }
 
+  /* This method is not called. */
   public Image createImage(int width, int height)
   {
     return null;
@@ -77,12 +153,14 @@ public class GLightweightPeer implements LightweightPeer
   {
     return null;
   }
-  
+
   public FontMetrics getFontMetrics(Font f)
   {
-    return null;
+    return comp.getToolkit().getFontMetrics(f);
   }
 
+  /* Returning null here tells the Component object that called us to
+   * use its parent's Graphics. */
   public Graphics getGraphics()
   {
     return null;
@@ -90,19 +168,25 @@ public class GLightweightPeer implements LightweightPeer
 
   public Point getLocationOnScreen()
   {
-    return null;
+    Point parentLocation = comp.getParent().getLocationOnScreen();
+    return new Point (parentLocation.x + comp.getX(),
+                      parentLocation.y + comp.getY());
   }
 
   public Dimension getMinimumSize()
   {
-    return null;
+    return new Dimension(comp.getWidth(), comp.getHeight());
   }
 
+  /* A lightweight component's preferred size is equivalent to its
+   * Component width and height values. */
   public Dimension getPreferredSize()
   {
-    return null;
+    return new Dimension(comp.getWidth(), comp.getHeight());
   }
 
+  /* Returning null here tells the Component object that called us to
+   * use its parent's Toolkit. */
   public Toolkit getToolkit()
   {
     return null;
@@ -124,12 +208,12 @@ public class GLightweightPeer implements LightweightPeer
 
   public Dimension minimumSize()
   {
-    return null;
+    return getMinimumSize();
   }
 
   public Dimension preferredSize()
   {
-    return null;
+    return getPreferredSize();
   }
 
   public void paint(Graphics graphics) {}
@@ -137,7 +221,7 @@ public class GLightweightPeer implements LightweightPeer
   public boolean prepareImage(Image img, int width, int height,
 			      ImageObserver o)
   {
-    return false;
+    return comp.getToolkit().prepareImage(img, width, height, o);
   }
 
   public void print(Graphics graphics) {}
@@ -146,13 +230,16 @@ public class GLightweightPeer implements LightweightPeer
 
   public void requestFocus() {}
 
-  public boolean requestFocus(java.awt.Component source, boolean bool1, boolean bool2, long x) { return false; }
+  public boolean requestFocus(Component source, boolean bool1, boolean bool2, long x)
+  {
+    return false;
+  }
 
   public void reshape(int x, int y, int width, int height) {}
 
   public void setBackground(Color color) {}
 
-  public void setBounds(int x, int y, int width, int height) {}
+  public void setBounds(int x, int y, int width, int height) { }
 
   public void setCursor(Cursor cursor) {}
 
@@ -170,12 +257,18 @@ public class GLightweightPeer implements LightweightPeer
 
   public ColorModel getColorModel ()
   {
-    return null;
+    return comp.getColorModel ();
   }
 
-  public boolean isObscured() { return false; }
+  public boolean isObscured()
+  {
+    return false;
+  }
 
-  public boolean canDetermineObscurity() { return false; }
+  public boolean canDetermineObscurity()
+  {
+    return false;
+  }
 
   public void coalescePaintEvent(PaintEvent e) { }
 
@@ -186,14 +279,20 @@ public class GLightweightPeer implements LightweightPeer
     return null; 
   }
 
-  public boolean handlesWheelScrolling() { return false; }
+  public boolean handlesWheelScrolling()
+  {
+    return false;
+  }
 
-  public void createBuffers(int x, java.awt.BufferCapabilities capabilities) 
-    throws java.awt.AWTException { }
+  public void createBuffers(int x, BufferCapabilities capabilities) 
+    throws AWTException { }
 
-  public java.awt.Image getBackBuffer() { return null; }
+  public Image getBackBuffer()
+  {
+    return null;
+  }
 
-  public void flip(java.awt.BufferCapabilities.FlipContents contents) { }
+  public void flip(BufferCapabilities.FlipContents contents) { }
 
   public void destroyBuffers() { }
 }
diff --git a/libjava/include/Makefile.in b/libjava/include/Makefile.in
index 1a38831cb1907df7b8375e11d5805cffe27647c3..70902622733ecbdade74706a4f064e296038bbac 100644
--- a/libjava/include/Makefile.in
+++ b/libjava/include/Makefile.in
@@ -125,6 +125,7 @@ STRIP = @STRIP@
 SYSDEP_SOURCES = @SYSDEP_SOURCES@
 SYSTEMSPEC = @SYSTEMSPEC@
 SYS_ZLIBS = @SYS_ZLIBS@
+THREADCXXFLAGS = @THREADCXXFLAGS@
 THREADDEPS = @THREADDEPS@
 THREADINCS = @THREADINCS@
 THREADLDFLAGS = @THREADLDFLAGS@
diff --git a/libjava/java/awt/Component.java b/libjava/java/awt/Component.java
index 9a38919f1c574ebb48b1aaf6330f41618701c5e1..98511ef7c6e0b4a4b2ed0fe44452992f6aaf3bc1 100644
--- a/libjava/java/awt/Component.java
+++ b/libjava/java/awt/Component.java
@@ -677,6 +677,7 @@ public abstract class Component
         if (tk != null)
           return tk;
       }
+    // Get toolkit for lightweight component.
     if (parent != null)
       return parent.getToolkit();
     return Toolkit.getDefaultToolkit();
diff --git a/libjava/java/awt/Toolkit.java b/libjava/java/awt/Toolkit.java
index 6fd1413895b575ecf9264f0111e427ecb22e6826..f8cc6bffa2c8cf101c3e5c50e64214db7b332717 100644
--- a/libjava/java/awt/Toolkit.java
+++ b/libjava/java/awt/Toolkit.java
@@ -342,15 +342,13 @@ public abstract class Toolkit
    * with its own native window.  Instead, this method allows the component
    * to draw on its parent window as a "lightweight" widget.
    *
-   * XXX: FIXME
-   *
    * @param target The <code>Component</code> to create the peer for.
    *
    * @return The peer for the specified <code>Component</code> object.
    */
   protected LightweightPeer createComponent(Component target)
   {
-    return null;
+    return new gnu.java.awt.peer.GLightweightPeer (target);
   }
 
   /**
diff --git a/libjava/testsuite/Makefile.in b/libjava/testsuite/Makefile.in
index 091051224b90b3640e66ae421327a8cb9de2193a..a45ec55ddb27703de6ee5e76e173810de47c278a 100644
--- a/libjava/testsuite/Makefile.in
+++ b/libjava/testsuite/Makefile.in
@@ -125,6 +125,7 @@ STRIP = @STRIP@
 SYSDEP_SOURCES = @SYSDEP_SOURCES@
 SYSTEMSPEC = @SYSTEMSPEC@
 SYS_ZLIBS = @SYS_ZLIBS@
+THREADCXXFLAGS = @THREADCXXFLAGS@
 THREADDEPS = @THREADDEPS@
 THREADINCS = @THREADINCS@
 THREADLDFLAGS = @THREADLDFLAGS@