[Pkg-mono-svn-commits] [SCM] mono branch, upstream-experimental, updated. upstream/2.10.8.1-1-gcd7e428

Mirco Bauer meebey at meebey.net
Fri Mar 23 04:10:48 UTC 2012


The following commit has been merged in the upstream-experimental branch:
commit cd7e42859293eb817cac2203bcb546e9df4987b9
Author: Mirco Bauer <meebey at meebey.net>
Date:   Fri Mar 23 05:06:24 2012 +0100

    Imported Upstream version 2.11.0

diff --git a/ChangeLog b/ChangeLog
index e0db801..1616a4e 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,891 +1,15 @@
-2011-12-16  Duncan Mak  <duncan.mak at xamarin.com>
-
-	Bump version number to 2.10.8.1.
-
-2011-12-14  Duncan Mak  <duncan.mak at xamarin.com>
-
-	Bump version number to 2.10.8
-
-2011-12-02  Duncan Mak  <duncan.mak at xamarin.com>
-
-	Bump to 2.10.7
-
-2011-04-21  Zoltan Varga  <vargaz at gmail.com>
-
-	Don't allow compiling with stock LLVM versions, only the Mono LLVM
-	repo at https://github.com/mono/llvm is supported.
-
-2011-10-24  Miguel de Icaza  <miguel at gnome.org>
-
-	Remove the exit code so that we can get a little bit further on
-	MacOS X
-
-2011-09-13  Alex Corrado  <alexc at xamarin.com>
-
-	2.10.6
-
-2011-08-29  Hin-Tak Leung  <htl10 at users.sourceforge.net>
-
-	Fix mingw32 cross-build on a git no-branch checkout. Fixes
-	#698446.
-
-2011-08-22  Alex Corrado  <alexc at xamarin.com>
-
-	2.10.5
-
-2011-08-08  Alex Corrado  <alexc at xamarin.com>
-
-	2.10.4
-
-2011-07-27  Alex Corrado  <alexc at xamarin.com>
-
-	2.10.3
-
-2011-02-25  Geoff Norton  <grompf at sublimeintervention.com>
-
-	Fix configure check for darwin to support all variants
-
-2011-07-12  Rodrigo Kumpera  <kumpera at gmail.com>
-
-	Add shared_perfcounters option to enable minimal.
-
-2011-06-28  Zoltan Varga  <vargaz at gmail.com>
-
-	Really fix the -Wno-unused-but-set-variable check.
-
-2011-06-12  Zoltan Varga  <vargaz at gmail.com>
-
-	Clean up the cross-compile configure.in code. Add a TARGET_ANDROID
-	define.
-
-2011-06-07  Zoltan Varga  <vargaz at gmail.com>
-
-	Fix the check for the -Wno-unused-but-set-variable gcc option.
-
-2011-05-21  Zoltan Varga  <vargaz at gmail.com>
-
-	Disable the -Wunused-by-set-variable warning supported by newer
-	gcc versions.
-
-2011-06-03  Jonathan Pryor  <jonpryor at vt.edu>
-
-	Allow Android'd support_boehm=no to work.
-
-	The AC_ARG_ENABLE(boehm, ..., ..., support_boehm=yes) resulted in
-	support_boehm always being 'yes', even for
-	`--host=arm-linux-androidabi`, which was not the intention. Using
-	`support_boehm=${support_boehm:-yes}` generates correct behavior.
-
-2011-06-03  Jonathan Pryor  <jonpryor at vt.edu>
-
-	Simplify building with the Android NDK.
-
-	Check --host against *-*-linux-android* for Android-specific
-	configure fixes, and improve **/Makefile.am to simplify Android
-	support:
-
-	./configure \ --build=`./config.guess` \
-	--host=armv5-linux-androideabi \ --target=armv5-linux-androideabi
-	\ --enable-nls=no --with-mcs-docs=no --enable-mcs-build=no \
-	CC="/path/to/ndk/arm-linux-androideabi-gcc
-	--sysroot=/path/to/sysroot" \ AR="..." AS="..." CPP="..."
-	CXX="..." LD="..." RANLIB="..." STRIP="..."
-	CFLAGS="-DARM_FPU_NONE=1" CXXFLAGS="-DARM_FPU_NONE=1"
-
-	See also Android NDK docs/STANDALONE-TOOLCHAIN.html.
-
-	The Android NDK/bionic is "interesting", in that it's lacking
-	header files and macros normally present on Linux which otherwise
-	break the build (e.g. no <link.h> which breaks Boehm support).
-	Using --host with an android target works around the known issues,
-	simplifying the building of libmonosgen-2.0.so with the Android
-	NDK toolchain.
-
-2011-04-07  Zoltan Varga  <vargaz at gmail.com>
-
-	Pass HAVE_ARMV6 to libgc on darwin too.
-
-2011-04-07  Zoltan Varga  <vargaz at gmail.com>
-
-	Add a membar to libgc's UNLOCK () on arm. Fixes #683409.
-
-2011-03-28  Andrew Jorgensen  <ajorgensen at novell.com>
-
-	Bump to 2.10.2
-
-2011-03-21  Gonzalo Paniagua Javier  <gonzalo.mono at gmail.com>
-
-	.gitignore
-
-2011-02-19  Gonzalo Paniagua Javier  <gonzalo.mono at gmail.com>
-
-	[threadpool] Add support for kqueue asynch. IO.
-
-2011-03-07  Andrew Jorgensen  <ajorgensen at novell.com>
-
-	Fix up devel packages in spec file
-
-2011-03-01  Andrew Jorgensen  <ajorgensen at novell.com>
-
-	add xbuild-frameworks to rpm
-
-2011-02-24  Geoff Norton  <grompf at sublimeintervention.com>
-
-	Enable ARMv6 for arm*-darwin
-
-2011-02-24  Zoltan Varga  <vargaz at gmail.com>
-
-	Only use memory barriers on arm when running on armv6 or later.
-
-2011-02-22  Andrew Jorgensen  <ajorgensen at novell.com>
-
-	Version 2.10.1
-
-2011-02-10  Andrew Jorgensen  <ajorgensen at novell.com>
-
-	Mono.Debugger.Soft.dll is installed for 4.0 also.
-
-2011-02-08  Marek Habersack  <grendel at twistedcode.net>
-
-	[cross-compilation] Added some flexibility regarding the location
-	of development packages
-
-	The script now supports an extra cross-compilation directory in
-	which you can unpack the library and development packages
-	necessary for the build to succeed (glib, zlib etc). Also
-	supported now is specifying the location at which Mono will be
-	installed on Windows. Replaced SVN and GIT-SVN version checks with
-	git checks.
-
-2010-06-14  Hib Eris  <hib at hiberis.nl>
-
-	Fix build-mingw32.sh for CROSS_PKG_CONFIG_DIR without *.pc files
-
-2010-06-14  Hib Eris  <hib at hiberis.nl>
-
-	No longer include glib binaries in build-mingw32.sh builds.
-
-	By default, Mono now uses an embedded glib implementation, so
-	there is no need to ship external glib libraries anymore.
-
-2010-06-14  Hib Eris  <hib at hiberis.nl>
-
-	Let build-mingw32.sh script also work on dist tarballs
-
-2011-02-07  Hib Eris  <hib at hiberis.nl>
-
-	Use winternl.h instead of ddk (when available)
-
-	These changes are nescessary for compiling with a mingw-w64
-	compiler.
-
-2011-01-27  Zoltan Varga  <vargaz at gmail.com>
-
-	Applied patch from Burkhard Linke
-	<blinke at cebitec.uni-bielefeld.de>. Add support for newer boehm-gc
-	versions.
-
-2011-01-26  Andrew Jorgensen  <ajorgensen at novell.com>
-
-	Add 2.0 and 4.0 S.D.S.C
-
-2011-01-24  Andrew Jorgensen  <ajorgensen at novell.com>
-
-	Add WebMatrix.Data to spec
-
-2011-01-19  Mark Probst  <mark.probst at gmail.com>
-
-	[build] pkg-config support for libmonosgen.
-
-2011-01-21  Andrew Jorgensen  <ajorgensen at novell.com>
-
-	Oops, Microsoft.Web.Infrastructure, not System.
-
-2011-01-21  Andrew Jorgensen  <ajorgensen at novell.com>
-
-	add Microsoft.Web.Infrastructure
-
-2011-01-19  Andrew Jorgensen  <ajorgensen at novell.com>
-
-	Dist more files needed by MSVC build
-
-2011-01-13  Andrew Jorgensen  <ajorgensen at novell.com>
-
-	2.10
-
-2011-01-11  Marek Safar  <marek.safar at gmail.com>
-
-	Install new ikvm based C# compiler as mcs
-
-2011-01-11  Zoltan Varga  <vargaz at gmail.com>
-
-	Disable system AOT when using the loaded llvm, as it seems to
-	cause crashes on the x86 buildbot.
-
-2011-01-10  Zoltan Varga  <vargaz at gmail.com>
-
-	Force a build.
-
-2011-01-03  barkerm  <michael.barker at lmax.com>
-
-	Ignore files ending in '~'
-
-2011-01-05  Geoff Norton  <grompf at sublimeintervention.com>
-
-	Bump winconfig version
-
-2011-01-04  Elijah Taylor  <elijahtaylor at google.com>
-
-	change first batch of __native_client_codegen__ && TARGET_AMD64 to
-	__mono_ilp32__ where appropriate
-
-2011-01-05  Marek Habersack  <grendel at twistedcode.net>
-
-	[runtime] Include the al script in temporary installation
-	directory
-
-	This is needed as the 4.0 profile calls 'al' (which is defaults to
-	4.0) and not 'al2' and if Mono older than 2.8 is installed on the
-	machine, 'al' coming from it will fail to work with the current
-	Mono and thus some tests will fail.
-
-	The commit should fix the 300+ failing tests on the build bots.
-
-2011-01-04  Zoltan Varga  <vargaz at gmail.com>
-
-	Remove glib dependencies from the embed samples. Fixes #660117.
-
-2011-01-03  Zoltan Varga  <vargaz at gmail.com>
-
-	.gitignore
-
-2011-01-03  Zoltan Varga  <vargaz at gmail.com>
-
-	.gitignore.
-
-2010-12-23  Miguel de Icaza  <miguel at gnome.org>
-
-	Update README
-
-2010-12-22  Andrew Jorgensen  <ajorgensen at novell.com>
-
-	Package the new mcs.exe instead of gmcs.exe
-
-2010-12-20  Elijah Taylor  <elijahtaylor at google.com>
-
-	Merge selective files from fsa branch
-
-2010-12-21  Andreia Gaita  <shana at jitted.com>
-
-	Moonlight build fixes and cleanup
-
-2010-12-20  Elijah Taylor  <elijahtaylor at google.com>
-
-	Add back SHARED_MONO line that got deleted accidentally, always
-	enable shared mono for NaCl
-
-2010-12-20  Elijah Taylor  <elijahtaylor at google.com>
-
-	Changes to get NaCl builds working minimally
-
-2010-12-20  Elijah Taylor  <elijahtaylor at google.com>
-
-	NaCl build and test scripts
-
-2010-12-17  Andreia Gaita  <shana at jitted.com>
-
-	Fix moonlight build
-
-2010-12-17  Andreia Gaita  <shana at jitted.com>
-
-	Document the new --with-moon-gc flag on the README
-
-2010-12-17  Andreia Gaita  <shana at jitted.com>
-
-	Add --with-moon-gc to select the gc to use with moon (boehm/sgen)
-
-2010-12-16  Andrew Jorgensen  <ajorgensen at novell.com>
-
-	get-monolite-latest now pulls a versioned archive
-
-	In order to ensure that monolite actually works you need to ensure
-	that the corlib in it has the same version as your runtime.
-	Monolite archives are now versioned
-	monolite-MONO_CORLIB_VERSION-DATE.
-
-2010-12-16  Elijah Taylor  <elijahtaylor at google.com>
-
-	Merged in rest of Native Client changes, untested
-
-2010-12-16  Jonathan Pryor  <jonpryor at vt.edu>
-
-	[monodroid] Add support for the Android TimeZone file format.
-
-	Fixes #657609.
-
-	Android uses "ye standard" timezone file format, but instead of
-	using a directory + file structure as libc uses, they throw
-	everything into two files, a "zoneinfo.dat" and a "zoneinfo.idx",
-	where "zoneinfo.dat" is the concatenation of all the TZIF files
-	and "zoneinfo.idx" contains the timezone names and offsets into
-	"zoneinfo.dat". From the ZoneInfoDB documentation:
-
-	However, to conserve disk space the data for all time zones are
-	concatenated into a single file, and a second file is used to
-	indicate the starting position of each time zone record. A third
-	file indicates the version of the zoneinfo databse used to
-	generate the data.
-
-	TimeZoneInfo.Android.cs is a C# port of the corresponding Android
-	ZoneInfoDB type so that Mono can use Android's timezone DB.
-
-2010-12-16  Miguel de Icaza  <miguel at gnome.org>
-
-	Update instructions
-
-2010-12-16  Miguel de Icaza  <miguel at gnome.org>
-
-	Undo adding of README2 test file
-
-2010-12-16  Miguel de Icaza  <miguel at gnome.org>
-
-	Update COPYING file with MS-PL and Apache2 texts
-
-2010-12-14  Miguel de Icaza  <miguel at gnome.org>
-
-	Add README2
-
-2010-12-14  Elijah Taylor  <elijahtaylor at google.com>
-
-	Merge mono/io-layer, mono/metadata, mono/arch/x86 and configure.in
-	for Native Client
-
-2010-12-13  Andrew Jorgensen  <ajorgensen at novell.com>
-
-	Simplify the profiler line in the spec file
-
-	Stuff sometimes appears or disappears here, just use a wildcard.
-
-2010-12-12  Bojan Rajkovic  <bojan at airpoweranalytics.com>
-
-	Add FreeBSD to the list of supported platforms for SGen on i386
-	and x86_64.
-
-2010-12-03  Andreia Gaita  <shana at jitted.com>
-
-	[Moon] include cecil when building mono for moon
-
-2010-11-29  Paolo Molaro  <lupus at oddwiz.org>
-
-	Log profiler: portability checks.
-
-2010-11-26  Zoltan Varga  <vargaz at gmail.com>
-
-	Use $build instead of $target in a few places in configure.in,
-	$target is about building cross compilers, not cross compiling
-	itself.
-
-2010-11-24  Andreia Gaita  <shana at jitted.com>
-
-	[Moon] Speed up the moonlight build by stripping it down to the
-	bare basics
-
-2010-11-20  Miguel de Icaza  <miguel at gnome.org>
-
-	Remove experimental from the name
-
-2010-11-14  Zoltan Varga  <vargaz at gmail.com>
-
-	Remove the unused and incomplete CMake build scripts for now.
-
-2010-11-13  Zoltan Varga  <vargaz at gmail.com>
-
-	Fix build breakage on platforms without execvp.
-
-2010-11-12  Andrew Jorgensen  <ajorgensen at novell.com>
-
-	Add new profiler to mono-devel package
-
-2010-11-12  Zoltan Varga  <vargaz at gmail.com>
-
-	Avoid 'sgen not supported' warnings when no --with-sgen=yes
-	argument was passed to configure.
-
-2010-11-12  Zoltan Varga  <vargaz at gmail.com>
-
-	Remove obsolete cygwin glib checks.
-
-2010-11-11  Zoltan Varga  <vargaz at gmail.com>
-
-	Pass -mno-cygwin to eglib's configure.
-
-2010-11-11  Paolo Molaro  <lupus at oddwiz.org>
-
-	Added a proper define for the external zlib and check for
-	sched_getcpu().
-
-2010-11-10  Geoff Norton  <grompf at sublimeintervention.com>
-
-	[OSX] Dont use nested functions to determine if we can use the
-	system zlib
-
-2010-11-10  Andrew Jorgensen  <ajorgensen at novell.com>
-
-	Remove compat-4.0 dir (nothing there anymore)
-
-2010-11-09  Zoltan Varga  <vargaz at gmail.com>
-
-	Tidy up the configure output a bit.
-
-2010-10-18  Mark Probst  <mark.probst at gmail.com>
-
-	[sgen] Dump Mark&Sweep heap occupancy.
-
-	For each block size dump the occupancy to the heap-dump file.
-
-2010-11-05  Marek Safar  <marek.safar at gmail.com>
-
-	Add *.xml to ignore list
-
-2010-11-03  Gonzalo Paniagua Javier  <gonzalo.mono at gmail.com>
-
-	a5
-
-2010-11-03  Gonzalo Paniagua Javier  <gonzalo.mono at gmail.com>
-
-	a4
-
-2010-11-03  Gonzalo Paniagua Javier  <gonzalo.mono at gmail.com>
-
-	a3
-
-2010-11-03  Gonzalo Paniagua Javier  <gonzalo.mono at gmail.com>
-
-	a2
-
-2010-11-03  Gonzalo Paniagua Javier  <gonzalo.mono at gmail.com>
-
-	iii
-
-2010-11-03  Gonzalo Paniagua Javier  <gonzalo.mono at gmail.com>
-
-	i
-
-2010-11-03  Gonzalo Paniagua Javier  <gonzalo.mono at gmail.com>
-
-	Last
-
-2010-11-03  Gonzalo Paniagua Javier  <gonzalo.mono at gmail.com>
-
-	Test 5
-
-2010-11-03  Gonzalo Paniagua Javier  <gonzalo.mono at gmail.com>
-
-	Last test
-
-2010-11-03  Gonzalo Paniagua Javier  <gonzalo.mono at gmail.com>
-
-	Test 3
-
-2010-11-03  Gonzalo Paniagua Javier  <gonzalo.mono at gmail.com>
-
-	Test 2
-
-2010-11-03  Gonzalo Paniagua Javier  <gonzalo.mono at gmail.com>
-
-	TEST
-
-2010-10-28  Andrew Jorgensen  <ajorgensen at novell.com>
-
-	Move version to 2.9 (next to be 2.10)
-
-2010-10-22  Gonzalo Paniagua Javier  <gonzalo.mono at gmail.com>
-
-	Unbreak the world
-
-2010-10-22  Gonzalo Paniagua Javier  <gonzalo.mono at gmail.com>
-
-	Remove 'web' directory
-
-2010-10-12  Gonzalo Paniagua Javier  <gonzalo.mono at gmail.com>
-
-	Updated notes on using get-monolite-latest
-
-2010-09-23  Andrew Jorgensen  <ajorgensen at novell.com>
-
-	move DynamicData to mvc because it depends on Extensions
-
-2010-09-23  Zoltan Varga  <vargaz at gmail.com>
-
-	Avoid extracting tar.gz files in the get-cygwin-deps.sh script, we
-	download only zip files now.
-
-2010-09-22  Jonathan Pryor  <jonpryor at vt.edu>
-
-	Do not build mcs/docs if the 4.0 build is disabled.
-
-2010-09-22  Jonathan Pryor  <jonpryor at vt.edu>
-
-	Revert "mdoc 2.0-only profile build support, take 3!"
-
-	We'll instead just disable the docs build entirely if
-	--with-profile4=no is specified [future commit, not this one].
-
-2010-09-22  Jonathan Pryor  <jonpryor at vt.edu>
-
-	mdoc 2.0-only profile build support, take 3!
-
-	Further discussion suggested that, even if mdoc 2.0 works, it
-	hasn't gotten widespread testing (as it's been a 4.0 app for
-	months), so it would be preferable to keep it as a 4.0 app.
-
-	However, it still needs to be built under 2.0 so that a
-	--with-profile4=no build can...build...without errors.
-
-	Thus, the compromise: build mdoc twice, once for each profile.
-	This will ensure that *some* version of mdoc is around when
-	mcs/docs is built.
-
-	Unfortunately we can't place mdoc into $(per_profile_dirs), as
-	these are built before $(net_2_0_dirs) (and thus before monodoc,
-	which needs to be built before mdoc). Thus the compromise of
-	listing mdoc in *both* $(net_2_0_dirs) and $(net_4_0_dirs),
-	allowing build dependencies to be met.
-
-2010-09-22  Marek Habersack  <grendel at twistedcode.net>
-
-	Revert "mdoc 2.0-only profile build support, take 2!"
-
-	This reverts commit 313633fc67cf1479514019a56143e5ad1643d28f
-	because it breaks the build.
-
-2010-09-21  Jonathan Pryor  <jonpryor at vt.edu>
-
-	mdoc 2.0-only profile build support, take 2!
-
-	Further discussion suggested that, even if mdoc 2.0 works, it
-	hasn't gotten widespread testing (as it's been a 4.0 app for
-	months), so it would be preferable to keep it as a 4.0 app.
-
-	However, it still needs to be built under 2.0 so that a
-	--with-profile4=no build can...build...without errors.
-
-	Thus, the compromise: build mdoc twice, once for each profile.
-	This will ensure that *some* version of mdoc is around when
-	mcs/docs is built.
-
-2010-09-20  Andrew Jorgensen  <ajorgensen at novell.com>
-
-	put the x11 devel package back in buildrequires and a couple other
-	spec fixes
-
-2010-09-17  Andrew Jorgensen  <ajorgensen at novell.com>
-
-	3.5 version of Sys.Web.Ext is gone
-
-2010-09-16  Andrew Jorgensen  <ajorgensen at novell.com>
-
-	More .spec reorgs
-
-2010-09-16  Rolf Bjarne Kvinge  <RKvinge at novell.com>
-
-	Add a configure option to disable building the shared libmono
-	library
-
-2010-09-15  Rolf Bjarne Kvinge  <RKvinge at novell.com>
-
-	Disable assembly remapping for moonlight
-
-2010-09-15  Rolf Bjarne Kvinge  <RKvinge at novell.com>
-
-	Add configure option for disabling assembly remapping
-
-2010-09-16  Jonathan Pryor  <jonpryor at vt.edu>
-
-	Make mdoc a 2.0 app, not a 4.0 app.
-
-	The problem is build sanity: it's possible to disable the 4.0
-	profile (--with-profile4=no) while not disabling documentation
-	building (--with-mcs-docs=yes is the default). The result would be
-	a 4.0-less build, and thus no mdoc, and thus no mdoc to assemble
-	the documentation, and thus a build break as we attempted to use
-	an app during the build which didn't exist.
-
-	Oops.
-
-	mdoc doesn't need to be a 4.0 app anyway...
-
-2010-09-15  Andrew Jorgensen  <ajorgensen at novell.com>
-
-	Add System.Net (4.0 and 2.0) to mono-core in .spec
-
-2010-09-15  Marek Safar  <marek.safar at gmail.com>
-
-	Remove copying of misplaced duplicate of
-	System.Web.Extensions.Design.dll
-
-2010-09-15  Andrew Jorgensen  <ajorgensen at novell.com>
-
-	mono-configuration-crypto is a 4.0 assembly, not 2.0
-
-2010-09-14  Chris Toshok  <toshok at gmail.com>
-
-	built a separate libmonoruntime for moonlight, so we can do
-	-DMOONLIGHT just in the moonlight lib instead of globally.
-
-2010-09-09  Chris Toshok  <toshok at gmail.com>
-
-	if we're building with moonlight enabled, don't build mdb.
-
-2010-09-14  Marek Safar  <marek.safar at gmail.com>
-
-	Fixes mixed line ending.
-
-2010-09-09  Andrew Jorgensen  <ajorgensen at novell.com>
-
-	Various cleanup and addition
-
-2010-09-09  Jb Evain  <jbevain at gmail.com>
-
-	add mono-abi-info to gitignore
-
-2010-09-08  Jb Evain  <jbevain at gmail.com>
-
-	Enable the mcs monodroid build from mono's configure
-
-2010-09-02  Zoltan Varga  <vargaz at gmail.com>
-
-	Enable system aot by default only on x86/amd64 linux.
-
-2010-08-31  Zoltan Varga  <vargaz at gmail.com>
-
-	Reenable system AOT on x86/amd64 which accidently got disabled.
-
-2010-08-31  Zoltan Varga  <vargaz at gmail.com>
-
-	Disable system aot on darwin.
-
-2010-08-31  Zoltan Varga  <vargaz at gmail.com>
-
-	Enable aot-ing of mscorlib+gmcs on all architectures where AOT is
-	supported.
-
-2010-08-30  Andrew Jorgensen  <ajorgensen at novell.com>
-
-	Relatively major overhaul of the .spec file
-
-	Cleanup of legacy conditionals, addition of llvm and sgen
-	conditionals
-
-2010-08-26  Andrew Jorgensen  <ajorgensen at novell.com>
-
-	* Makefile.am: Check for GIT_DIR if defined (rather than .git) *
-	commits-to-changelog.py: BUILD_REVISION rather than HEAD if
-	defined
-
-2010-08-26  Andrew Jorgensen  <ajorgensen at novell.com>
-
-	Bump version to 2.8.1
-
-	2.8.ODD will mean git master and 2.8.EVEN will mean a release
-	branch
-
-2010-08-26  Andrew Jorgensen  <ajorgensen at novell.com>
-
-	Add the mono-api-info man page
-
-2010-08-25  Andrew Jorgensen  <ajorgensen at novell.com>
-
-	Remove mono-abi-info from the .spec file
-
-2010-08-25  Gonzalo Paniagua Javier  <gonzalo.mono at gmail.com>
-
-	Ignore removed ChangeLog files
-
-	If a ChangeLog has been removed, don't try to open the file.
-
-2010-08-25  Robert Nagy  <robert at bsd.hu>
-
-	Make sgen compile on OpenBSD, by adding the missing stuff
-
-2010-08-23  Andrés G. Aragoneses  <knocte at gmail.com>
-
-	[tools] Merge mono-abi-info tool into a "--abi" flag for
-	mono-api-info
-
-	This commit also includes a brief (help welcome!) man page for
-	mono-api-info that explains its usage.
-
-2010-08-23  Robert Nagy  <robert at bsd.hu>
-
-	fix openbsd CPPFLAGS and check for sys/param.h
-
-2010-08-20  Zoltan Varga  <vargaz at gmail.com>
-
-	Update get-cygwin-deps.sh after a filename change.
-
-2010-08-20  Mark Probst  <mark.probst at gmail.com>
-
-	[scripts] Don't use saxutils in mono-heapviz.
-
-	Some Pythons don't have saxutils.DefaultHandler, so don't use it.
-
-2010-08-17  Jb Evain  <jbevain at gmail.com>
-
-	update ignore files
-
-2010-08-17  Zoltan Varga  <vargaz at gmail.com>
-
-	Remove support for building with system glib.
-
-2010-08-17  Zoltan Varga  <vargaz at gmail.com>
-
-	Disable building of ikvm-native and define DISABLE_SOCKETS when
-	using NACL.
-
-2010-08-13  Andrew Jorgensen  <ajorgensen at novell.com>
-
-	Add ccrewrite manpage to spec
-
-2010-08-13  Andrew Jorgensen  <ajorgensen at novell.com>
-
-	Add ccrewrite wrapper
-
-2010-08-13  Marek Safar  <marek.safar at gmail.com>
-
-	Add ccrewrite script
-
-2010-08-12  Andrew Jorgensen  <ajorgensen at novell.com>
-
-	Add mono-abi-info and Mono.CodeContracts to spec
-
-2010-08-09  Andrew Jorgensen  <ajorgensen at novell.com>
-
-	Bump version to 2.7.1
-
-2010-08-09  Andrew Jorgensen  <ajorgensen at novell.com>
-
-	* mono-core.spec.in: Add System.ServiceModel.Discovery
-
-2010-08-09  Miguel de Icaza  <miguel at gnome.org>
-
-	Update README
-
-2010-08-09  Elijah Taylor  <elijahtaylor at google.com>
-
-	Add configure support for Google Native Client (NACL).
-
-2010-08-08  Mark Probst  <mark.probst at gmail.com>
-
-	[sgen] Fix sgen-grep-binprot.
-
-	The refactoring that occurred with addition of parallel mark left
-	sgen-grep-binprot in an uncompilable state. Fix.
-
-2010-08-06  Zoltan Varga  <vargaz at gmail.com>
-
-	Reenable LLVM+AOT again, the latest LLVM branch code works fine.
-
-2010-08-05  Zoltan Varga  <vargaz at gmail.com>
-
-	Disable system aot when LLVM is enabled for now.
-
-2010-08-05  Mark Probst  <mark.probst at gmail.com>
-
-	[dist] Only run the commit-to-changelog script if there's a
-	repository.
-
-	Since "make dist" should also work from a tarball we must only
-	call the commit-to-changelog script if there's a git repository
-	present. If we're already in a disted tree, the script has already
-	run.
-
-2010-08-04  Mark Probst  <mark.probst at gmail.com>
-
-	[scripts] commit-to-changelog fails if git is too old
-
-	We need a git that supports the %B format specifier, which seems
-	to be 1.7.2. Fail if it's not supported.
-
-2010-08-04  Mark Probst  <mark.probst at gmail.com>
-
-	[scripts] commit-to-changelog fails if git fails
-
-	The commit-to-changelog script now fails if git fails for whatever
-	reason. The most important reasons would be that git isn't
-	installed, and that the script is called without a repository.
-
-2010-08-04  Andrew Jorgensen  <ajorgensen at novell.com>
-
-	Don't call commit-to-changelog until after mcs is dist'd
-
-2010-08-02  Mark Probst  <mark.probst at gmail.com>
-
-	[commit-to-changelog] Bugfix.
-
-	The commit-to-changelog script would crash for commits that
-	already contain ChangeLog entries.
-
-2010-08-02  Raja R Harinath  <harinath at hurrynot.org>
-
-	Re-enable 'crlf' attributes on *.cs
-
-	This fixes EOL conversions flagged by git 1.7.1
-	core.autocrlf=true. At this point, neither git 1.7.1 nor 1.7.2
-	show any automatic CRLF normalization. I think we're ready for
-	another experiment.
-
-	There seems to be a difference in the handling of mixed
-	line-ending files between git 1.7.2 and older versions, when
-	core.autocrlf is set to true.
-
-2010-07-30  Mark Probst  <mark.probst at gmail.com>
-
-	Don't generate empty ChangeLog entries, insert the whole message
-	instead.
-
-	The commits-to-changelog script previously generated ChangeLog
-	entries with a FIXME if it couldn't find anything applicable for
-	that particular ChangeLog. Since we want to use the script for
-	"make dist" it shouldn't do this. Instead it now just inserts the
-	whole commit message in those ChangeLogs.
-
-2010-07-30  Mark Probst  <mark.probst at gmail.com>
-
-	"make dist" updates the ChangeLogs automatically.
-
-	When creating a distribution "make dist" now uses the
-	commits-to-changelog script to automatically update all ChangeLog
-	files since the last commit marked with the
-	"last-commit-with-compulsory-changelog-entry" tag.
-
-2010-07-29  Mark Probst  <mark.probst at gmail.com>
-
-	commits-to-changelog script.
-
-	This script converts git commit messages to ChangeLog entries.
-	That will hopefully allow us to forego adding ChangeLog entries in
-	our commits, which always leads to merge conflicts.
-
-2010-07-24  Gonzalo Paniagua Javier  <gonzalo at novell.com>
-
-	TEST 5
-
-2010-07-24  Gonzalo Paniagua Javier  <gonzalo at novell.com>
-
-	TEST 4
-
-2010-07-24  Gonzalo Paniagua Javier  <gonzalo at novell.com>
-
-	TEST 3
-
-2010-07-24  Gonzalo Paniagua Javier  <gonzalo at novell.com>
-
-	TEST 2
-
-2010-07-24  Gonzalo Paniagua Javier  <gonzalo at novell.com>
-
-	TEST
+2011-04-19  gettextize  <bug-gnu-gettext at gnu.org>
+
+	* m4/gettext.m4: New file, from gettext-0.18.1.
+	* m4/iconv.m4: New file, from gettext-0.18.1.
+	* m4/lib-ld.m4: New file, from gettext-0.18.1.
+	* m4/lib-link.m4: New file, from gettext-0.18.1.
+	* m4/lib-prefix.m4: New file, from gettext-0.18.1.
+	* m4/nls.m4: Upgrade to gettext-0.18.1.
+	* m4/po.m4: Upgrade to gettext-0.18.1.
+	* m4/progtest.m4: Upgrade to gettext-0.18.1.
+	* m4/Makefile.am (EXTRA_DIST): Add the new files.
+	* configure.in (AC_CONFIG_FILES): Add po/Makefile.in.
 
 2010-08-05  Andrés G. Aragoneses  <andres at lindenlab.com>
 
diff --git a/ChangeLog.old b/ChangeLog.old
deleted file mode 100644
index 92d7263..0000000
--- a/ChangeLog.old
+++ /dev/null
@@ -1,5706 +0,0 @@
-2010-08-05  Andrés G. Aragoneses  <andres at lindenlab.com>
-
-	* scripts/.gitignore: added mono-abi-info.
-	* scripts/Makefile.am: added mono-abi-info autofoo.
-
-2010-07-16  Zoltan Varga  <vargaz at gmail.com>
-
-	* configure.in: Remove the 'LLVM backend is experimental' warning.
-
-2010-07-08  Neale Ferguson <neale at sinenomine.net>
-
-	* configure.in: Add sgen_supported=true for s390x.
-
-2010-07-05  Rolf Bjarne Kvinge  <RKvinge at novell.com>
-
-	* configure.in: Restore the AM_CONDITIONAL debugger supported, we need it to
-	include/exclude assembler files from the build in the makefile.
-
-2010-06-29  Zoltan Varga  <vargaz at gmail.com>
-
-	* configure.in: Add a define for the full LLVM version to config.h.
-
-2010-06-26  Zoltan Varga  <vargaz at gmail.com>
-
-	* configure.in: Make sgen_supported default to false to fix non-x86 builds.
-
-2010-06-25  Zoltan Varga  <vargaz at gmail.com>
-
-	* scripts/patch-quiet.sh: Fix this up after the build changes.
-
-2010-06-23  Miguel de Icaza  <miguel at novell.com>
-
-	* configure.in: By default, we will now also buils an SGen-aware
-	VM by default.   This can be turned off by using the
-	--with-sgen=no command line option.
-
-	Two binaries are produced now: mono and mono-sgen
-
-	--- First Pass ---
-
-	* configure.in: Remove redundant setting of variables in non-Boehm
-	cases.
-
-	First pass at supporting the compilation of both
-	the Boehm-powered Mono VM and the Sgen-powered one.
-
-	The Boehm configuration flags are no longer part of the config.h
-	that we generate, but instead they are part of the CFLAGS
-	variables that are used for the following components:
-
-		* io-layer/ because it uses the pthread APIs that are
-		wrapped by using utils/gc_wrapper.h
-
-		* metatada/ because we have plenty of GC-specific code
-
-		* mini/ the VM itself
-
-	The patch currently only changes the way that Boehm is compiled,
-	no changes for Sgen have been done yet.
-
-	We now pass Boehm CFLAG settings as "BOEHM_DEFINES" which need to
-	be added to the three Makefiles above.
-
-	When building the bundled and modified libgc, we also need to pass
-	MONO_DEBUGGER_SUPPORTED as it triggers some special features in
-	the libgc.
-
-	Simplify the build also by removing the AM_CONDITIONAL debugger
-	supported, we now merely check this on the source file and wrap
-	the entire debug-debugger.c in an ifdef.
-
-2010-06-05  Mark Probst  <mark.probst at gmail.com>
-
-	* tools/sgen/sgen-grep-binprot.c: Updated for degraded and pinned
-	allocations.
-
-2010-06-02  Zoltan Varga  <vargaz at gmail.com>
-
-	* configure.in: Check whenever we are using mono's LLVM branch.
-
-2010-05-31  Robert Jordan  <robertj at gmx.net>
-
-	* configure.in: Windows: mcs_topdir_from_srcdir must not be
-	converted to a Win32 path unless it's already a cygwin path.
-	Fixes --with-mcs-docs for in-tree mcs builds.
-
-2010-05-28  Robert Jordan  <robertj at gmx.net>
-
-	* configure.in: Fix mcs_topdir* for the Windows build.
-
-2010-05-28  Mark Probst  <mark.probst at gmail.com>
-
-	* tools/sgen/sgen-grep-binprot.c (main): Use strtoul(), not
-	strtol(), to parse addresses from the command line.
-
-2010-05-20  Miguel de Icaza  <miguel at novell.com>
-
-	* configure.in: drop again the pkg.m4 dependency and for eglib
-	cases (and not-Windows) make it entirely optional.
-
-2010-05-11  Andrew Jorgensen  <ajorgensen at novell.com>
-
-	* scripts/mono-find-*.in: Look for libmono-2.0.so.1, not libmono.so
-	and set MONO_PATH to ensure that mscorlib.dll can be found
-
-2010-04-29  Andreas Färber  <andreas.faerber at web.de>
-
-	* configure.in: Check for -lm necessity.
-	Fixes linking on Haiku.
-
-	Contributed under MIT/X11 license.
-
-2010-04-27  Mark Probst  <mark.probst at gmail.com>
-
-	* scripts/mono-heapviz: If the major sections are too small, use a
-	larger width.
-
-2010-04-27  Zoltan Varga  <vargaz at gmail.com>
-
-	* configure.in: Switch to eglib by default.
-
-2010-04-26  Geoff Norton  <gnorton at novell.com>
-
-	* configure.in: Allow cross compiling osx for 64-bit
-
-2010-04-26  Zoltan Varga  <vargaz at gmail.com>
-
-	* configure.in: Applied patch from Robert Nagy (robert at openbsd.org). Add
-	sys/param.h dependencies to a few checks.
-
-2010-04-25  Mark Probst  <mark.probst at gmail.com>
-
-	* tools/sgen/sgen-grep-binprot.c: Support for major Mark&Sweep
-	collector.
-
-2010-04-20  Jonathan Pryor  <jpryor at novell.com>
-
-	* configure.in: Check for the asm/sigcontext.h header.
-
-2010-04-20  Andrés G. Aragoneses  <andres at lindenlab.com>
-
-	* README: Replace --with-profile2 with --with-profile4.
-
-2010-04-20  Jonathan Pryor  <jpryor at novell.com>
-
-	* configure.in: On OpenBSD, remove duplicate -pthread options in 
-	  libmono_ldflags.  Change from Robert Nagy <robert at openbsd.org>.
-
-2010-04-20  Jonathan Pryor  <jpryor at novell.com>
-
-	* configure.in: For Linux hosts, remove libmono_ldflags="-lpthread".
-	  It's unnecessary (for !target_win32, pthreads are checked again 
-	  later in configure.in), and it breaks Android (which doesn't have
-	  libpthread, but DOES have pthreads in libc).
-
-2010-04-19  Jonathan Pryor  <jpryor at novell.com>
-
-	* configure.in: Disable AC_CHECK_LIB() for pthread, as this breaks
-	  autoconf on BSD platforms.  (Why?  Who knows -- it's AutoConf!)
-
-2010-04-19  Jonathan Pryor  <jpryor at novell.com>
-
-	* configure.in: Use AC_CHECK_LIB() to check for pthread instead of
-	  just blindly linking to -lpthread, as Android includes pthread
-	  support within libc and doesn't provide a separate libpthread.
-	  Android's <string.h> pulls in <malloc.h> (unlike glibc), resulting
-	  in a build error in mono/utils/mono-codeman.c due to 
-	  `struct mallinfo` re-declaration.  Define HAVE_USR_INCLUDE_MALLOC_H 
-	  if /usr/include/malloc.h is present to avoid this.
-
-2010-04-19  Jonathan Pryor  <jpryor at novell.com>
-
-	* configure.in: Add header, structure member, and function checks as 
-	  Android doesn't provide all the headers, structure members, and 
-	  functions that a "full" Linux distro includes.
-
-2010-04-19  Zoltan Varga  <vargaz at gmail.com>
-
-	* configure.in: Add a --enable-minimal=normalization option to disable support
-	for string normalization.
-
-2010-04-16  Marek Habersack  <mhabersack at novell.com>
-
-	* configure.in: added a check for sysconf(3)
-
-2010-04-14  Miguel de Icaza  <miguel at novell.com>
-
-	* configure.in: turn the AC_MSG_ERROR into a AC_MSG_WARN since in
-	Andrew's configuration this aborts the build:
-
-	 host=i686-pc-linux-gnu != target=i586-suse-linux
-
-	And I no longer remember why I added that error in the first
-	place (we need to determine perhaps the arch/OS but it is
-	difficult with those strings).
-
-2010-04-08  Andreia Gaita  <avidigal at novell.com>
-
-	* configure.in: Add an extra "only" option to --with-moonlight. This
-	will configure mono to only build moonlight-specific stuff and
-	nothing else. --with-moonlight=yes now just adds the moon profile to
-	the build
-
-	* Makefile.am: Add moonlight-specific rules that only build what
-	moon needs. These are called directly from moon, to do fast
-	moon+mono+mcs builds
-
-	* runtime/Makefile.am: Change the build rules to have a moonlight-only
-	build configuration, as well as a normal build that optionally includes
-	it
-
-2010-04-07  Raja R Harinath  <harinath at hurrynot.org>
-
-	* runtime/Makefile.am ($(tmpinst)/bin/dmcs): Add.
-
-2010-04-06  Andreia Gaita  <avidigal at novell.com>
-
-	* configure.in: add --with-mcs-path option to specify where the mcs
-	source can be found, if not on ./mcs or ../mcs.
-	Only touch the mcs and/or olive dirs and config files if we're
-	actually building them
-
-2010-04-05  Zoltan Varga  <vargaz at gmail.com>
-
-	* configure.in: Append -lgc to libmono_ldflags if using an external libgc.
-
-2010-04-04  Andreas Färber  <andreas.faerber at web.de>
-
-	* configure.in: Fix typo.
-	Set default for with_moonlight to fix "Moon Profile:" output.
-
-	Contributed under MIT/X11 license.
-
-2010-04-03  Zoltan Varga  <vargaz at gmail.com>
-
-	* configure.in: Applied some openbsd changes from Robert Nagy
-	<robert at openbsd.org>.
-
-2010-04-03  Marek Habersack  <mhabersack at novell.com>
-
-	* configure.in: TARGET_WIN32 and MINGW_CROSS_COMPILE are defined
-	when cross-compiling with MinGW 
-
-	* build-mingw32.sh: include the 4.0 profile in the zip.
-	Remove cross-compilation environment bin path from PATH before
-	compiling native Mono.
-	Remove autotools cache directory before each compilation phase.
-
-2010-04-02  Marek Habersack  <mhabersack at novell.com>
-
-	* configure.in: include -lkernel32 in LDFLAGS when cross-compiling
-	with MINGW or compiling on Cygwin.
-
-	* build-mingw32.sh: some changes to make the compilation work
-	better on non-SuSE systems.
-
-2010-04-01  Mark Probst  <mark.probst at gmail.com>
-
-	* scripts/mono-heapviz: Process and output detailed pinning
-	statistics.
-
-2010-03-29  Andreas Färber  <andreas.faerber at web.de>
-
-	* configure.in: Add support for Haiku
-
-	Contributed under MIT/X11 license.
-
-2010-03-26  Zoltan Varga  <vargaz at gmail.com>
-
-	* configure.in: Add a --enable-system-aot option to control the generation of
-	AOT images during the build.
-
-2010-03-26  Zoltan Varga  <vargaz at gmail.com>
-
-	* configure.in: Apply some openbsd changes from openbsd ports.
-
-2010-03-23  Neale Ferguson <neale at sinenomine.net>
-
-	* configure.in: Change ACCESS_UNALINGED to "yes" for s390/s390x.
-
-2010-03-22  Andreia Gaita  <avidigal at gmail.com>
-
-	* configure.in: fix build when doing with-mcs-docs=no on a clean tree
-
-2010-03-19  Zoltan Varga  <vargaz at gmail.com>
-
-	* autogen.sh: Pass -Wno-portability to automake to quiet some warnings.
-
-2010-03-16  Jb Evain  <jbevain at novell.com>
-
-	* runtime/Makefile.am, build-mingw32.sh: rename
-	the net_2_1 profile to moonlight.
-
-2010-03-10  Andrew Jorgensen  <ajorgensen at novell.com>
-
-	* configure.in: configure eglib even when we are not building
-	it (fixes dist)
-
-Fri Mar 5 18:58:15 CET 2010 Paolo Molaro <lupus at ximian.com>
-
-	* configure.in: introduce the --enable-small-config option
-	to reduce runtime requirements (and capabilities).
-
-2010-03-04  Zoltan Varga  <vargaz at gmail.com>
-
-	* Makefile.am (DIST_SUBDIRS): Add eglib.
-
-	* autogen.sh: Run eglib's autogen.sh too.
-
-2010-03-02  Rolf Bjarne Kvinge  <RKvinge at novell.com>
-
-	* Makefile.am:
-	* mono/Makefile.am: Only build some subdirs when configured for
-	moonlight.
-
-	* configure.in: If configured --with-moonlight=yes, define MOONLIGHT and
-	use that variable instead of INSTALL_2_1.
-
-	* runtime/Makefile.am: If configured for moonlight, only build
-	net_2_1_raw.
-
-2010-03-02  Mark Probst  <mark.probst at gmail.com>
-
-	* tools/sgen-grep-binprot.c: Tool for searching through the binary
-	protocol files generated by SGen.
-
-2010-02-26  Miguel de Icaza  <miguel at novell.com>
-
-	* Make the scripts default to 4.0 now.
-
-2009-05-21  Miguel de Icaza  <miguel at novell.com>
-
-	* Check for sys/select.h as well
-
-Wed Feb 24 15:47:16 CET 2010 Paolo Molaro <lupus at ximian.com>
-
-	* configure.in, data/mono-2.pc.in, data/Makefile.am,
-	samples/embed/*: increase the API version.
-
-2010-02-18  Marek Habersack  <mhabersack at novell.com>
-
-	* scripts/mono-configuration-crypto.in: added
-
-	* scripts/Makefile.am: added mono-configuration-crypto targets
-
-2010-01-27  Zoltan Varga  <vargaz at gmail.com>
-
-	* configure.in: Fix the setting of LLVM_CXXFLAGS.
-
-2010-01-22  Andrés G. Aragoneses  <knocte at gmail.com>
-
-	* configure.in: Improve r150055 by checking for CXX=g++ as well, according to
-	http://lists.gnu.org/archive/html/bug-autoconf/2002-04/msg00077.html
-
-2010-01-22  Zoltan Varga  <vargaz at gmail.com>
-
-	* configure.in: Disable the solaris tar check on !solaris platforms.
-
-2010-01-22  Zoltan Varga  <vargaz at gmail.com>
-
-	* configure.in: Check whenever g++ is installed, since libtool requires it
-	even if no c++ files will be compiled.
-	See BNC#572871.
-
-2010-01-22  Zoltan Varga  <vargaz at gmail.com>
-
-	* configure.in: Add -fno-rrti to CXXFLAGS.
-
-2010-01-20  Rolf Bjarne Kvinge  <RKvinge at novell.com>
-
-	* configure.in: Add support for disabling mdb support.
-
-2010-01-15  Zoltan Varga  <vargaz at gmail.com>
-
-	* configure.in: Don't define TARGET_WIN32 when --target is used.
-
-2010-01-15  Zoltan Varga  <vargaz at gmail.com>
-
-	* scripts/get-cygwin-deps.sh: New file. Contains a script to download and setup
-	the dependencies needed for compiling mono on cygwin.
-
-2010-01-06  Rodrigo Kumpera  <rkumpera at novell.com>
-
-	* scripts/Makefile.am: Add peverify script.
-
-	* scripts/peverify.in: Added.
-
-2009-12-22  Geoff Norton  <gnorton at novell.com>
-
-	* configure.in: Fix invalid escaping.  Patch from Spina from
-	www.slacky.eu.
-
-2009-12-21  Zoltan Varga  <vargaz at gmail.com>
-
-	* configure.in: Add an LLVM_CFLAGS automake variable.
-
-2009-12-18  Zoltan Varga  <vargaz at gmail.com>
-
-	* configure.in: Remove the check for valgrind/memcheck.h, we include the file
-	in our sources now.
-
-2009-12-11  Zoltan Varga  <vargaz at gmail.com>
-
-	* configure.in: Applied patch from Matt McClellan (matt at mc-c.net). Add a check
-	for 2 parameter sched_setaffinity in older glibc versions. Fixes
-	#564000.
-
-2009-11-22  Zoltan Varga  <vargaz at gmail.com>
-
-	* configure.in: Disable visibility attributes on cygwin.
-
-2009-11-18  Mark Probst  <mark.probst at gmail.com>
-
-	* scripts/Makefile.am: Put mono-heapviz into EXTRA_DIST as well.
-
-2009-11-18  Mark Probst  <mark.probst at gmail.com>
-
-	* scripts/Makefile.am: mono-heapviz is not a managed executable.
-
-2009-11-18  Mark Probst  <mark.probst at gmail.com>
-
-	* configure.in: Allow SGen without __thread.
-
-2009-11-17  Marek Habersack  <mhabersack at novell.com>
-
-	* runtime/Makefile.am (TEST_SUPPORT_FILES): added bin/al2 - needed
-	for System.Web tests.
-
-2009-11-17  Zoltan Varga  <vargaz at gmail.com>
-
-	* configure.in: Add a --enable-minimal=soft-debug option.
-
-2009-11-15  Andreas Faerber  <andreas.faerber at web.de>
-
-	* configure.in (DTrace): Add missing -s switch for dtrace -h.
-	Fixes BNC #445074.
-	
-	Contributed under MIT/X11 license.
-
-2009-11-12  Zoltan Varga  <vargaz at gmail.com>
-
-	* acinclude.m4 (dolt_supported): Handle 'i686-pc-cygwin' too.
-
-2009-11-12  Mark Probst  <mark.probst at gmail.com>
-
-	* scripts/mono-heapviz: New script for generating SGen heap
-	visualizations.
-
-	* scripts/Makefile.am: mono-heapviz added.
-
-2009-11-11  Zoltan Varga  <vargaz at gmail.com>
-
-	* configure.in: Add checks for link.h and dl_iterate_phdr.
-
-2009-11-10  Jonathan Chambers  <joncham at gmail.com>
-
-	* winconfig.h: Bump version string to 2.7.
-
-	Contributed under MIT/X11 license.
-
-2009-11-09  Zoltan Varga  <vargaz at gmail.com>
-
-	* configure.in: Define LLVM_MAJOR/MINOR_VERSION defines to allow working
-	around changes in LLVM APIs.
-	
-	* configure.in: Remove the MONO_ARCH_REGPARMS define.
-
-	* configure.in (MONO_ARCH_REGPARMS): Set MONO_ARCH_REGPARS on ARM.
-
-2009-11-08  Rodrigo Kumpera  <rkumpera at novell.com>
-
-	* configure.in: Add check for FreeBSD/ppc64.
-
-	Patch by Justin Hibbits <chmeeedalf at gmail.com>.
-
-2009-11-05  Miguel de Icaza  <miguel at novell.com>
-
-	* Add configure check for xbox360
-
-2009-11-04  Zoltan Varga  <vargaz at gmail.com>
-
-	* acinclude.m4 (dolt_supported): Applied patch from Kornél Pál
-	<kornelpal at gmail.com>. Enable dolt on cygwin.
-
-2009-11-03  Zoltan Varga  <vargaz at gmail.com>
-
-	* configure.in: Check for netinet/in.h.
-
-2009-11-02 Gonzalo Paniagua Javier <gonzalo at novell.com>
-
-	* configure.in: add a few missing header file checks.
-
-2009-11-01  Zoltan Varga  <vargaz at gmail.com>
-
-	* configure.in: Make the LLVM warning a bit more up-to-date.
-
-	* configure.in: Pass -mno-cygwin to CXX too on windows. Enable AC_PROG_CXX
-	since it now works on windows too.
-
-2009-10-27  Zoltan Varga  <vargaz at gmail.com>
-
-	* configure.in: Add support for cross-compiling to ppc.
-
-2009-10-22  Rodrigo Kumpera  <rkumpera at novell.com>
-
-	* configure.in: Add check for the deprecated attribute.
-
-2009-10-12  Zoltan Varga  <vargaz at gmail.com>
-
-	* data/Makefile.am (gdb_DATA): Install mono-gdb.py alongside the mono executable.
-
-	* data/gdb-pre7.0: New directory, containing the mono support files for
-	gdb versions before 7.0.
-
-2009-10-10  Zoltan Varga  <vargaz at gmail.com>
-
-	* */CMakeLists.txt: Update this to latest autoconf files.
-
-2009-10-06  Zoltan Varga  <vargaz at gmail.com>
-
-	* configure.in: Bump version to 2.7.
-
-2009-10-01  Raja R Harinath  <harinath at hurrynot.org>
-
-	* scripts/Makefile.am: Use 'mv -f' instead of 'mv'.
-
-2009-09-30  Marek Safar  <marek.safar at gmail.com>
-
-	* runtime/Makefile.am, configure.in: Don't build 1.1 profile
-
-2009-09-29  Ankit Jain  <jankit at novell.com>
-
-	* mono-core.spec.in: Add Microsoft.WebApplication.targets
-
-2009-08-29  Jonathan Pryor  <jpryor at novell.com>
-
-	* man/mdoc-export-html.1: Document --with-profile, --with-version.
-
-2009-09-08  Zoltan Varga  <vargaz at gmail.com>
-
-	* acinclude.m4 (dolt_supported): Enable this for mips.
-
-2009-08-29  Jonathan Pryor  <jpryor at novell.com>
-
-	* man/mdoc.5: Document the new <format/> element.
-
-2009-08-18  Zoltan Varga  <vargaz at gmail.com>
-
-	* scripts/Makefile.am: Applied patch from Hib Eris (hib at hiberis.nl).
-	Add $(SCRIPT_SUFFIX) to the name of the 'mod' tool.
-
-2009-08-04  Miguel de Icaza  <miguel at novell.com>
-
-	* Start the split between PLATFORM_WIN32 and TARGET_WIN32.
-
-	PLATFORM_WIN32 should be used to configure the runtime while
-	building it.   TARGET_WIN32 is used for target execution.
-
-	This is used by Mono's AOT cross compiler when running on Windows,
-	but targetting a different operating system.    So we have to tell
-	those two apart.
-
-2009-07-24  Jb Evain  <jbevain at novell.com>
-
-	* scripts/Makefile.am: generate a dmcs script for the 4.0 compiler
-	when building the net_4_0 profile.
-
-2009-07-24  Jb Evain  <jbevain at novell.com>
-
-	* configure.in
-	* runtime/Makefile.am
-	* data/Makefile.am: create a and populate a configuration folder
-	for the net_4_0 profile.
-
-2009-07-21  Jb Evain  <jbevain at novell.com>
-
-	* configure.in: add a --with-monotouch option.
-	* runtime/Makefile.am: use it to trigger the mcs monotouch build.
-
-2009-07-14  Zoltan Varga  <vargaz at gmail.com>
-
-	* configure.in: Add more libraries needed by the llvm backend.
-
-2009-07-02  Jb Evain  <jbevain at novell.com>
-
-	* scripts/Makefile.am: monolinker is now a 2.0 assembly.
-
-2009-07-02  jonas echterhoff <jonas at unity3d.com>
-
-	* configure.in: Add linker flag on Mac OS X to allow access to other
-	processes, needed for debugging. Enable debugging on OS X.
-	
-2009-06-21  Zoltan Varga  <vargaz at gmail.com>
-
-	* configure.in (TARGET_BYTE_ORDER): New define containing the byte order of
-	the target.
-
-2009-06-18  Marek Habersack  <mhabersack at novell.com>
-
-	* data/browscap.ini: applied Mono modifications to the upstream
-	version. Fixes three tests failing in System.Web. Fixes bug #513965
-	Added ecmascriptversion, msdomversion and w3cdomversion to the IE
-	8.0 entry. Fixes bug #513965
-
-2009-06-16  Raja R Harinath  <harinath at hurrynot.org>
-
-	* configure.in (--with-profile2): Simplify slightly.
-	(--with-profile4, --with-moonlight): Likewise.
-
-2009-06-15  Miguel de Icaza  <miguel at novell.com>
-
-	* configure.in: Changed the default to not build the 4.0 profile
-	unless explicitly enabled.
-
-2009-06-15  Zoltan Varga  <vargaz at gmail.com>
-
-	* CMakeLists.txt: Add mips support.
-
-2009-06-14  Zoltan Varga  <vargaz at gmail.com>
-
-	* scripts/CMakeLists.txt: New file.
-
-	* samples/CMakeLists.txt: New file, currently empty.
-
-2009-06-12  Andreia Gaita  <avidigal at novell.com>
-
-	* data/config.in: add libcups dllmap entry
-
-2009-06-11  Zoltan Varga  <vargaz at gmail.com>
-
-	* configure.in: Disable dtrace support if dtrace doesn't support the
-	-h option.
-
-2009-06-10  Marek Safar  <marek.safar at gmail.com>
-
-	* runtime/Makefile.am, configure.in: Make net_4_0 profile optional.
-
-2009-06-07  Marek Safar  <marek.safar at gmail.com>
-
-	* runtime/Makefile.am: Enabled net_4_0 for compilation.
-
-2009-05-27  Zoltan Varga  <vargaz at gmail.com>
-
-	* configure.in: Disable USE_MUNMAP on ppc to work around #504411.
-
-2009-05-26  Zoltan Varga  <vargaz at gmail.com>
-
-	* CMakeLists.txt: Implement AC_OUTPUT, creation of config.make, etc.
-	
-	* CMakeLists.txt: implement arm fpu detection, add vfp detection as
-	well.
-
-	* CMakeLists.txt: Add arm support.
-
-2009-05-24  Miguel de Icaza  <miguel at novell.com>
-
-	* Disable mono/docs build if we disabled the mcs build.
-
-2009-05-24  Zoltan Varga  <vargaz at gmail.com>
-
-	* */CMakeLists.txt: Add beginnings of a cmake based build system.
-
-2009-05-22  Zoltan Varga  <vargaz at gmail.com>
-
-	* acinclude.m4 (dolt_supported): Enable dolt on sparc linux.
-
-2009-05-17  Zoltan Varga  <vargaz at gmail.com>
-
-	* configure.in: Add TARGET_POWERPC/POWERPC64 defines.
-
-2009-05-09  Miguel de Icaza  <miguel at novell.com>
-
-	* configure.in: Instead of reporting the various disabled features
-	in a loop, where a keyword might fail, report the actual disabled
-	features in the sections that handle them
-
-2009-05-08  Zoltan Varga  <vargaz at gmail.com>
-
-	* acinclude.m4 (dolt_supported): Add powerpc64.
-
-2009-05-07  Rodrigo Kumpera  <rkumpera at novell.com>
-
-	* runtime/Makefile.am (mcs-compileall): Pass --security=validil
-	to the runtime so the assemblies are not required to be verifiable.
-
-2009-05-06  Raja R Harinath  <harinath at hurrynot.org>
-
-	* Makefile.am (compiler-tests): Rewrite to re-build the moon
-	assemblies after mcs/ is built.
-	* runtime/Makefile.am (build_profiles) [INSTALL_2_1]: Build only
-	the net_2_1_raw profile.
-	(test_profiles): New.  Mention net_2_1 profile.
-	(moon-do-build): New.
-
-2009-05-05  Miguel de Icaza  <miguel at novell.com>
-
-	* configure.in: Fix the bug reported on the mailing list by
-	Koushik K Dutta: do not build docs when --disable-mcs-builds is
-	passed. 
-
-2009-05-05  Miguel de Icaza  <miguel at novell.com>
-
-	* configure.in: Reduce configure-time dependencies by using
-	pkg-config the way it was originally intended to be used, and not
-	with the incredibly lame and painful inducing pkg.m4 file. 
-
-	I am on a quest to remove this gratuitous dep on pkg.m4 that is
-	making people's lives miserable around the globe, just because
-	someone can not be bothered to learn the shell if construct.
-
-2009-04-28  Zoltan Varga  <vargaz at gmail.com>
-
-	* configure.in: Add an option to disable the solaris tar check.
-	
-	* configure.in: Define a TARGET_<ARCH> preprocessor symbol for some
-	architectures.
-
-2009-04-23  Jb Evain  <jbevain at novell.com>
-
-	* scripts/Makefile.am: add a pdb2mdb script.
-
-2009-04-22  Jeffrey Stedfast  <fejj at novell.com>
-
-	* configure.in: Check for a stable version of glib-2.0 as opposed
-	to an unstable development version (we don't want people
-	unfamiliar with glib versioning to install an unstable development
-	version of glib).
-
-2009-04-13  Zoltan Varga  <vargaz at gmail.com>
-
-	* configure.in: Quiet 'copying selected object files' messages from
-	newer libtool versions as well.
-	
-	* configure.in: Disable AC_PROG_CXX for now to fix the windows build.
-
-	In mono/mini:
-
-	* Makefile.am: Comment out the cpp files as f@#%$ automake complains even
-	if they are inside a conditional.
-	
-2009-04-03  Zoltan Varga  <vargaz at gmail.com>
-
-	* scripts/patch-quiet.sh: Process LTCXXCOMPILE too.
-
-2009-04-02  Zoltan Varga  <vargaz at gmail.com>
-
-	* configure.in: Move the call to AC_PROG_CXX earlier and enable it again.
-	
-	* configure.in: Disable the call to AC_PROG_CXX for now.
-
-2009-04-02  Marek Habersack  <mhabersack at novell.com>
-
-	* data/Makefile.am: added system.web.mvc.pc{.in}
-
-	* configure.in: added data/system.web.mvc.pc to AC_OUTPUT
-
-	* data/system.web.mvc.pc.in: added
-
-2009-04-02  Zoltan Varga  <vargaz at gmail.com>
-
-	* configure.in: Add an ENABLE_LLVM autoconf define.
-	
-	* configure.in: Add --enable-llvm argument to enable the experimental
-	LLVM back end.
-
-2009-03-31  Jb Evain  <jbevain at novell.com>
-
-	* scripts: Remove smcs, which is handled by moon now.
-	* data: ditto.
-
-2009-03-20  Zoltan Varga  <vargaz at gmail.com>
-
-	* mono/os: Remove this now empty directory.
-	
-	* mono/Makefile.am (SUBDIRS): Remove 'os'.
-
-2009-03-16  Atsushi Enomoto  <atsushi at ximian.com>
-
-	* scripts/Makefile.am : mono-xmltool uses 2.0.
-
-2009-03-12  Jonathan Pryor  <jpryor at novell.com>
-
-	* scripts/Makefile.am: Add sqlmetal.
-
-2009-03-10  Zoltan Varga  <vargaz at gmail.com>
-
-	* README: Remove the comment about --with-moonlight being pre-alpha.
-
-2009-03-10  Atsushi Enomoto  <atsushi at ximian.com>
-
-	* scripts/Makefile.am : added svcutil.
-
-2009-02-26  Marek Habersack  <mhabersack at novell.com>
-
-	* data/mono.web.pc.in: added. Fixes bug #479760
-
-	* data/Makefile.am:  added mono.pc{.in} wherever necessary
-
-2009-02-07 Gonzalo Paniagua Javier <gonzalo at novell.com>
-
-	* configure.in: include stdio so that NULL is defined when checking
-	for ifreq.
-
-2009-02-06  Miguel De Icaza  <miguel at novell.com>
-
-	* Disable parallel marking on OSX as it hangs during collections
-	in the bootstrap stage of Mono.
-
-	As we find more platforms that hang, we should disable it there as
-	well. 
-
-2009-02-03  Miguel de Icaza  <miguel at novell.com>
-
-	* configure.in (PLATFORM_NO_SYMLINKS): New define that replaces
-	PLATFORM_WIN32.
-
-2009-02-02  Rodrigo Kumpera  <rkumpera at novell.com>
-
-	* configure.in: Add --with-mcs-docs to make it possible to disable building of documentation under mcs.
-
-2009-01-29  Zoltan Varga  <vargaz at gmail.com>
-
-	* configure.in: Remove -Wcast-align from the warning list, it leads to a lot of
-	useless warnings which can only be fixed by casting a pointer to (void*).
-
-2009-01-29  Miguel de Icaza  <miguel at novell.com>
-
-	* configure.in: Add a couple of new AM conditionals for POSIX and
-	DARWIN, these are used to conditionally include some files in
-	mono/mini. 
-
-2009-01-27  Jb Evain  <jbevain at novell.com>
-
-	* configure.in: bump Mono's version to 2.5 now that 2.4
-	has been branched.
-
-2009-01-25  Zoltan Varga  <vargaz at gmail.com>
-
-	* acinclude.m4 (dolt_supported): Handle ARM as well.
-
-2009-01-23  Zoltan Varga  <vargaz at gmail.com>
-
-	* configure.in: Make --enable-parallel-mark=yes the default.
-
-2009-01-17  Zoltan Varga  <vargaz at gmail.com>
-
-	* configure.in: Complete the OPROFILE checks.
-
-2009-01-16  Zoltan Varga  <vargaz at gmail.com>
-
-	* configure.in: Avoid error messages in the quiet code if libgc/Makefile
-	does not exist yet. Fixes #466814.
-
-2009-01-09  Zoltan Varga  <vargaz at gmail.com>
-
-	* configure.in: Check for the existence of the gettext executables.
-
-2008-01-08  Christian Prochnow  <cproch at seculogix.de>
-
-	* configure.in: Check for sys/statfs.h and sys/mount.h
-
-2009-01-07  Geoff Norton  <gnorton at novell.com>
-
-	* configure.in: Provide platform information to the mcs build tree
-
-2009-01-06  Jb Evain  <jbevain at novell.com>
-
-	* scripts/Makefile.am: don't generate a script for the now
-	dead mono-api-diff.
-
-2008-12-05  Jonathan Pryor  <jpryor at novell.com>
-
-	* scripts/mdassembler, scripts/monodocer, scripts/monodocs2html:
-	  Properly quote parameters as they may contain spaces.
-
-2008-12-05  Jonathan Pryor  <jpryor at novell.com>
-
-	* man/mdoc-update.1: Document -fno-assembly-versions.
-
-2009-01-05  Zoltan Varga  <vargaz at gmail.com>
-
-	* configure.in: Disable sigaltstack on freebsd as it doesn't seem to work.
-
-2008-12-16  Marek Habersack  <mhabersack at novell.com>
-
-	* data/system.web.extensions.design_1.0.pc.in: added
-
-	* data/Makefile.am (EXTRA_DIST): added
-	system.web.extensions.design_1.0.pc.in. Also added to
-	pkgconfig_DATA
-
-	* configure.in: added data/system.web.extensions_1.0.pc to
-	AC_OUTPUT
-
-2008-12-16  Bill Holmes  <billholmes54 at gmail.com>
-
-	* winconfig.h : Defining the SIZEOF_REGISTER variable for the MSVC builds.
-
-	Code is contributed under MIT/X11 license.
-
-2008-12-15  Marek Habersack  <mhabersack at novell.com>
-
-	* data/Makefile.am (EXTRA_DIST): added
-	system.web.extensions_1.0.pc.in. Also added to pkgconfig_DATA
-
-	* data/system.web.extensions_1.0.pc.in: added. This file serves
-	the purpose of making MonoDevelop see the 1.0 version of the
-	System.Web.Extensions assembly in the project references
-	editor. This will also make legacy 2.0 ASP.NET apps not fail when
-	they reference the 1.0 version of the assembly in their project
-	files.
-
-	* configure.in: added data/system.web.extensions_1.0.pc to AC_OUTPUT
-
-2008-12-11  Mark Mason <mmason at upwardaccess.com>
-
-	* configure.in: introduce SIZEOF_REGISTER - usually ==SIZEOF_VOID_P, except on mips/n32
-	
-2008-12-05  Marek Habersack  <mhabersack at novell.com>
-
-	* configure.in: check whether round (3) and rint (3) are present
-	in the C library.
-
-2008-12-05  Jonathan Pryor  <jpryor at novell.com>
-
-	* man/mdoc-update.1: Document new parameters such as --exceptions.
-
-2008-12-04  Mark Probst  <mark.probst at gmail.com>
-
-	* configure.in: Disabling the sibling call optimization doesn't
-	work, so we're using -mminimal-toc.
-
-2008-12-03  Mark Probst  <mark.probst at gmail.com>
-
-	* configure.in: Disable sibling call optimization on PPC64 as it
-	seems to trip up GCC on the build bot.
-
-2008-11-28  Atsushi Enomoto  <atsushi at ximian.com>
-
-	* data/mono-nunit.pc.in : add new 2.4.8 files.
-
-2008-11-21  Jb Evain  <jbevain at novell.com>
-
-	* scripts/Makefile.am: use only one mono-api-info pointing to the cecil one
-	which is mscorlib agnostic.
-
-2008-11-21  Zoltan Varga  <vargaz at gmail.com>
-
-	* configure.in: Only enable AOT on linux. Fixes #447265.
-
-2008-11-19  Jonathan Pryor  <jpryor at novell.com>
-
-	* configure.in: Remove mono/monoburg/Makefile; fixes the build.
-
-2008-11-14  Andreas Färber  <andreas.faerber at web.de>
-
-	* configure.in: Add preprocessor defines for ppc(64).
-	Suggested by Paolo and Mark.
-	
-	Contributed under MIT/X11 license.
-
-2008-11-12  Zoltan Varga  <vargaz at gmail.com>
-
-	* configure.in: Add an ENABLE_AOT variable to config.make, currently only
-	enabled for AMD64.
-
-2008-11-11  Zoltan Varga  <vargaz at gmail.com>
-
-	* configure.in: Bump version to 2.3.
-
-Mon Nov 10 17:37:08 CET 2008 Paolo Molaro <lupus at ximian.com>
-
-	* configure.in: check for sys/user.h and struct kinfo_proc members.
-
-2008-11-07  Bill Holmes  <billholmes54 at gmail.com>
-
-	* winconfig.h : Removing HAVE_DIRENT_H, HAVE_STDINT_H,
-	  HAVE_VISIBILITY_HIDDEN, HAVE_ZLIB for the VC builds.
-
-	Code is contributed under MIT/X11 license.
-
-2008-11-05  Bill Holmes  <billholmes54 at gmail.com>
-
-	* configure.in : Adding a auto configure check for dirent.h.
-
-	Code is contributed under MIT/X11 license.
-
-2008-10-30  Jonathan Pryor  <jpryor at novell.com>
-
-	* Makefile.am: Build `docs` after `runtime`, so that it can depend
-	  upon mdoc.exe for it's operation.
-
-2008-10-30  Jonathan Pryor  <jpryor at novell.com>
-
-	* man/mdoc-assemble.1: Document //node use within .source files.
-
-2008-10-27  Jb Evain  <jbevain at novell.com>
-
-	* data/cecil.pc.in: update version.
-
-2008-10-22  Zoltan Varga  <vargaz at gmail.com>
-
-	* scripts/Makefile.am: Add gacutil1 script.
-
-2008-10-21  Atsushi Enomoto  <atsushi at ximian.com>
-
-	* data/dotnet35.pc.in : added sys.cm.dataannotations.dll too.
-
-2008-10-21  Atsushi Enomoto  <atsushi at ximian.com>
-
-	* data/net_2_0/web.config : added new assemblies and namespaces in
-	  pages and compilation sections.
-
-2008-10-21  Atsushi Enomoto  <atsushi at ximian.com>
-
-	* data/dotnet35.pc.in : added new assemblies (dlinq, abstractions,
-	  routing, dynamic data).
-
-2008-10-20  Jonathan Pryor  <jpryor at novell.com>
-
-	* scripts/mod.in: Remove bash-isms.
-
-2008-10-18  Jonathan Pryor  <jpryor at novell.com>
-
-	* configure.in: Generate data/monodoc.pc.
-
-2008-10-18  Jonathan Pryor  <jpryor at novell.com>
-
-	* data/Makefile.am: Add monodoc.pc to $(pkgconfig_DATA), $(DISTCLEANFILES).
-
-2008-10-18  Jonathan Pryor  <jpryor at novell.com>
-
-	* data/monodoc.pc.in: Fixup sourcesdir.
-	* data/Makefile.am (EXTRA_DIST): Add monodoc.pc.in.
-
-2008-10-17  Jonathan Pryor  <jpryor at novell.com>
-
-	* scripts/Makefile.am: Install scripts for mdoc-compat commands.
-	* scripts (svn:ignore): Ignore generated files.
-	* mdassembler, mdvalidater, monodocer, monodocs2html, 
-	  monodocs2slashdoc: Added; "compatibility" scripts, converting the
-	  previous commands into mdoc commands.
-
-2008-10-17  Jonathan Pryor  <jpryor at novell.com>
-
-	* scripts/Makefile.am: Create scripts for mdoc sub-commands.
-
-2008-10-17  Jonathan Pryor  <jpryor at novell.com>
-
-	* scripts/Makefile.am: Add mod.
-
-2008-10-16  Jonathan Pryor  <jpryor at novell.com>
-
-	* scripts/Makefile.am: Move mono-shlib-cop to scripts_2_0.
-
-2008-10-15  Jonathan Pryor  <jpryor at novell.com>
-
-	* configure.in: Add checks for `struct flock`, `struct timespec`.
-
-2008-10-14  Jonathan Pryor  <jpryor at novell.com>
-
-	* data/mono-options.pcs.in: We're not installing Mono.Options.dll into 
-	  the GAC anymore, we're just concerned `pkg-config --variable=Source` 
-	  support.
-
-2008-10-14  Jonathan Pryor  <jpryor at novell.com>
-
-	* data/mono-options.pc.in: Add a Sources variable so that 
-	  `pkg-config --variable Sources mono-options` can be used to grab the
-	  sources to Mono.Options (useful for embedding).
-
-2008-10-13  Jonathan Pryor  <jpryor at novell.com>
-
-	* configure.in: Generate data/mono-options.pc.
-	* data/Makefile.am: Support mono-options.pc.in and mono-options.pc.
-	* data/mono-options.pc.in: Added.
-
-Mon Oct 13 11:26:19 CEST 2008 Paolo Molaro <lupus at ximian.com>
-
-	* configure.in: check for shm_open ().
-
-2008-10-12  Zoltan Varga  <vargaz at gmail.com>
-
-	* configure.in: Only process Makefiles with patch-quiet.sh which have a 
-	corresponding Makefile.in.
-
-2008-10-11  Zoltan Varga  <vargaz at gmail.com>
-
-	* configure.in: Make --enable-minimal=reflection_emit turn on
-	--enable-minimal=reflection_emit_save too.
-
-	* README: Add docs for the option.
-
-	* configure.in: Add --enable-minimal=reflection_emit_save option.
-
-2008-10-10  Atsushi Enomoto  <atsushi at ximian.com>
-
-	* data/net_2_0/web.config: add UrlRouting.axd handler (forbidden).
-
-2008-10-08  Zoltan Varga  <vargaz at gmail.com>
-
-	* Makefile.am (dist-hook): Use 'net_1_1' instead of 'default'.
-
-	* runtime/Makefile.am: Rename 'default' profile to 'net_1_1'.
-
-2008-10-07  Atsushi Enomoto  <atsushi at ximian.com>
-
-	* data/Makefile.am : there seems a couple more of required changes.
-
-2008-10-07  Atsushi Enomoto  <atsushi at ximian.com>
-
-	* scripts/Makefile.am : one more dist fix is needed.
-
-2008-10-07  Atsushi Enomoto  <atsushi at ximian.com>
-
-	* configure.in : fix missing change for previous change.
-
-2008-10-07  Atsushi Enomoto  <atsushi at ximian.com>
-
-	* scripts/mono-nunit.pc.in, data/mono-nunit.pc.in:
-	  move former to latter.
-	* scripts/Makefile.am : remove packaging info.
-	* data/Makefile.am : add mono-nunit.pc too.
-
-2008-10-03  Rodrigo Kumpera  <rkumpera at novell.com>
-
-	* configure.in: Add simd intrinsics to the disable set.
-
-2008-10-01  Jb Evain  <jbevain at novell.com>
-
-	* scripts/Makefile.am: add mono-cil-strip.
-
-2008-09-29  Zoltan Varga  <vargaz at gmail.com>
-
-	* scripts/patch-quiet.sh: Handle the ifs used by some versions of
-	automake.
-
-2008-09-25  Luis Ortiz  <lortiz at interactivesupercomputing.com>
-
-	* configure.in: Big arrays are only supported on 64 bit systems. 
-
-	Fixes #430022
-
-2008-09-24  Zoltan Varga  <vargaz at gmail.com>
-
-	* configure.in: Add --enable-minimal=attach option.
-
-2008-09-22  Raja R Harinath  <harinath at hurrynot.org>
-
-	* scripts/patch-quiet.sh: Skip Makefiles that've already been
-	patched.  Handle automake 1.10a.
-
-2008-09-18  Mark Probst  <mark.probst at gmail.com>
-
-	* docs/generic-sharing: More generic sharing porting
-	documentation.
-
-2008-09-17  Raja R Harinath  <harinath at hurrynot.org>
-
-	* Makefile.am (EXTRA_DIST): Update.
-	* nls.m4, progtest.m4: Really add from Gettext 0.17.
-
-2008-09-15  Raja R Harinath  <harinath at hurrynot.org>
-
-	* configure.in (AC_CONFIG_FILES): Put po/mcs/Makefile.in in its
-	own stanza.
-	(AC_OUTPUT): Don't list po/mcs/Makefile, it's automatically
-	handled by AM_PO_SUBDIRS.
-
-2008-09-14  Miguel de Icaza  <miguel at novell.com>
-
-	* Added some infrastructure to start the translation of the
-	compiler error messages.
-
-	Currently the compiler does not yet use the infrastructure,
-	that needs a bit of work, but the PO infrastructure is in place. 
-
-2008-09-14  gettextize  <bug-gnu-gettext at gnu.org>
-
-	* Makefile.am (SUBDIRS): Add po/mcs.
-	(DIST_SUBDIRS): Add po/mcs.
-	(EXTRA_DIST): Add config.rpath.
-	* configure.in (AC_CONFIG_FILES): Add po/mcs/Makefile.in.
-
-2008-09-14  gettextize  <bug-gnu-gettext at gnu.org>
-
-	* gettext.m4: New file, from gettext-0.17.
-	* iconv.m4: New file, from gettext-0.17.
-	* lib-ld.m4: New file, from gettext-0.17.
-	* lib-link.m4: New file, from gettext-0.17.
-	* lib-prefix.m4: New file, from gettext-0.17.
-	* nls.m4: New file, from gettext-0.17.
-	* po.m4: New file, from gettext-0.17.
-	* progtest.m4: New file, from gettext-0.17.
-	* Makefile.am (EXTRA_DIST): Add the new files.
-
-2008-09-12  Zoltan Varga  <vargaz at gmail.com>
-
-	* scripts/patch-quiet.sh: Remove an obsolete comment. Change the Makefile so
-	this script is rerun if Makefile.am changes.
-
-2008-09-11  Zoltan Varga  <vargaz at gmail.com>
-
-	* configure.in: Add a DISABLE_JIT automake conditional too.
-
-	* configure.in: Add a --enable-minimal=jit option to disable jit, only
-	allowing full-aot execution.
-
-2008-09-10  Zoltan Varga  <vargaz at gmail.com>
-
-	* configure.in: Move the computation of export_ldflags after libtool has
-	been created.
-
-2008-09-08  Massimiliano Mantione  <massi at ximian.com>
-
-	* configure.in: Added DISABLE_PROFILER automake conditional.
-
-2008-08-29  Geoff Norton  <gnorton at novell.com>
-
-	* configure.in: Rollup our unrolled FreeBSD support so that we properly
-	build and compile on FreeBSD6+.  (FreeBSD5 is 2004)
-
-2008-08-28  Geoff Norton  <gnorton at novell.com>
-
-	* build-iphone.sh: iPhone lies about HAVE_MMAP as well.
-
-2008-08-26  Geoff Norton  <gnorton at novell.com>
-
-	* build-iphone.sh: Update build-iphone to not wget old inssel's, and build
-	out of the box with teh current SDK.
-
-2008-08-28  Zoltan Varga  <vargaz at gmail.com>
-
-	* scripts/Makefile.am (scripts_2_0): Add gacutil2.
-	* scripts/gacutil2: New file.
-
-2008-08-22  Jb Evain  <jbevain at novell.com>
-
-	* data/wcf.pc.in
-	* data/Makefile.am
-	* configure.in: add a new wcf.pc for assemblies recently moved
-	from olive to mcs.
-
-2008-08-12  Bill Holmes  <billholmes54 at gmail.com>
-
-	* winconfig.h:  Updating the config file for MSVC builds to match
- 	  the config file used when compiling with gcc in Cygwin.
-
-	Contributed under MIT/X11 license.
-
-2008-08-09  Rodrigo Kumpera  <rkumpera at novell.com>
-
-	* docs/generic-sharing: Some updates from an irc talk with Mark.
-
-2008-08-06  Zoltan Varga  <vargaz at gmail.com>
-
-	* Makefile.am (EXTRA_DIST): Add dtrace-prelink.sh and build-mingw32.sh.
-
-	* scripts/Makefile.am (EXTRA_DIST): Add patch-quiet.sh.
-
-2008-08-05  Marek Habersack  <mhabersack at novell.com>
-
-	* configure.in: use the PKG_CONFIG_PATH only when cross-compiling.
-
-2008-08-05  Marek Habersack  <mhabersack at novell.com>
-
-	* configure.in: added support for cross-compilation
-
-2008-08-05  Marek Habersack  <mhabersack at novell.com>
-
-	* build-mingw32.sh: added a script to build Mono for Windows on a
-	Linux host using mingw.
-
-2008-08-05  Marek Habersack  <mhabersack at novell.com>
-
-	* scripts/Makefile.am: added support for cross-compilation,
-	including .bat generation for windows targets.
-
-2008-08-05  Marek Habersack  <mhabersack at novell.com>
-
-	* scripts/smcs.bat.in, scripts/script.bat.in,
-	scripts/script_umask.bat.in: added .bat templates.
-
-2008-08-05  Marek Habersack  <mhabersack at novell.com>
-
-	* runtime/Makefile.am: mingw cross-compilation support.
-
-2008-08-05  Andreas Färber  <andreas.faerber at web.de>
-
-	* autogen.sh: Suppress arguments warning for NOCONFIGURE.
-	
-	Contributed under MIT/X11 license.
-
-2008-08-02  Zoltan Varga  <vargaz at gmail.com>
-
-	* configure.in: Enable dtrace by default on platforms which support it.
-
-2008-07-27  Zoltan Varga  <vargaz at gmail.com>
-
-	* scripts/patch-quiet.sh: Make the libtool --quiet flag configurable by
-	V=1 as well.
-
-2008-07-24  Zoltan Varga  <vargaz at gmail.com>
-
-	* configure.in: Patch libtool to avoid the 
-	'copying selected object files ...' messages.
-
-2008-07-24  Rodrigo Kumpera  <rkumpera at novell.com>
-
-	* configure.in: Change USED_GC_NAME to show if parallel mark is used.
-	This is shown in mono --version.
-
-2008-07-22  Mark Probst  <mark.probst at gmail.com>
-
-	* configure.in: New configure option (--with-malloc-mempools) to
-	make mempools use malloc for every single allocation, which makes
-	it easier to use debugging/profiling tools like Valgrind.
-
-2008-07-21  Zoltan Varga  <vargaz at gmail.com>
-
-	* configure.in: Invoke patch-quiet.sh using AC_CONFIG_COMMANDS so it
-	runs during a reconfigure too.
-
-2008-07-13  Zoltan Varga  <vargaz at gmail.com>
-
-	* docs/aot-compiler.txt: Update docs.
-
-2008-07-09  Zoltan Varga  <vargaz at gmail.com>
-
-	* scripts/patch-quiet.sh: Another try to fix this on osx.
-	
-	* scripts/patch-quiet.sh: Use \\t to encode \t.
-
-	* scripts/patch-quiet.sh: Remove a stray \t.
-
-2008-07-10  Raja R Harinath  <harinath at hurrynot.org>
-
-	* configure.in (enable_quiet_build): Work better on a non-srcdir build.
-	(mono_cv_sizeof_sunpath): Rename cacheval from 'cv_mono_sizeof_sunpath'
-	to placate autoconf.
-
-2008-07-07  Zoltan Varga  <vargaz at gmail.com>
-
-	* configure.in: Make the patching done by --enable-quiet quiet.
-
-2008-07-07  Zoltan Varga  <vargaz at gmail.com>
-
-	* scripts/patch-quiet.sh: Make this more precise.
-
-2008-07-06  Zoltan Varga  <vargaz at gmail.com>
-
-	* configure.in: Add an --enable-quiet-build option.
-
-	* Makefile.am (patch-quiet): New target.
-
-	* acinclude.m4: Handle --quiet.
-
-2008-07-05  Mark Probst  <mark.probst at gmail.com>
-
-	* docs/generic-sharing: Docs about porting generic sharing.
-
-2008-07-04  Zoltan Varga  <vargaz at gmail.com>
-
-	* scripts/patch-quiet.sh (src): Fix verbose mode.
-
-2008-07-03  Mark Probst  <mark.probst at gmail.com>
-
-	* docs/generic-sharing: New documentation file about generic code
-	sharing.  Currently contains information about examining stack
-	frames of generic shared code.
-
-2008-07-03  Zoltan Varga  <vargaz at gmail.com>
-
-	* scripts/patch-quiet.sh: New helper script.
-
-2008-07-02  Gert Driesen  <drieseng at users.sourceforge.net>
-
-	* data/net_1_1/machine.config: Ignore system.windows.forms section.
-	* data/net_2_0/machine.config: Define system.windows.forms section.
-
-2008-06-30  Alp Toker  <alp at nuanti.com>
-
-	* configure.in:
-	* acinclude.m4: Remove concatenation syntax from doltlibtool to support
-	old versions of bash and re-enable dolt.
-
-2008-06-26  Alp Toker  <alp at nuanti.com>
-
-	* acinclude.m4: Prospective dolt fix for the build bot. Fix syntax to work
-	with older bash versions.
-
-2008-06-26  Alp Toker  <alp at nuanti.com>
-
-	* acinclude.m4: Update dolt to the latest git version 5e9eef10. (The one we
-	had wasn't in fact the latest version and had a known bug.)
-
-2008-06-25  Zoltan Varga  <vargaz at gmail.com>
-
-	* configure.in: Enable dolt by default as an experiment.
-
-	* acinclude.m4: Update dolt to the latest git version.
-
-2008-06-23  Andreas Färber  <andreas.faerber at web.de>
-
-	* data/Makefile.am (EXTRA_DIST): Distribute mono.d.
-
-	Contributed unter MIT/X11 license.
-
-2008-06-11  Zoltan Varga  <vargaz at gmail.com>
-
-	* configure.in: Remove -D_FILE_OFFSET_BITS=64 from the CPPFLAGS passed to
-	libgc on sparc. Fixes #323138.
-
-2008-06-05  Andreas Färber  <andreas.faerber at web.de>
-
-	* configure.in: Add configure option for DTrace.
-	* dtrace-prelink.sh: New file, helper script for DTrace builds.
-	* data/mono.d: New file, defines the DTrace 'mono' provider.
-
-	Contributed unter MIT/X11 license.
-
-2008-05-31  Andreas Färber  <andreas.faerber at web.de>
-
-	* configure.in (big-arrays): Output fix.
-	  Display "no" in absence of --enable-big-arrays.
-
-	Contributed unter MIT/X11 license.
-
-2008-05-27 Rodrigo Kumpera  <rkumpera at novell.com>
-
-	* configure.in: Add configure option for big arrays.
-
-	  Patch by Luis F. Ortiz.
-	  Contributed under X11 license.
-	  http://lists.ximian.com/pipermail/mono-devel-list/2008-May/027995.html
-
-2008-05-23  Wade Berrier  <wberrier at novell.com>
-
-	* scripts/Makefile.am: remove mbas script since we don't ship it anymore
-	(fixed bnc#393903)
-
-2008-05-22 Marek Safar  <marek.safar at gmail.com>
-
-	* Makefile.am: Distribute 2.0 profile specific files.
-
-2008-05-21  Zoltan Varga  <vargaz at gmail.com>
-
-	* acinclude.m4: New file, contains a snapshot of dolt.
-
-	* configure.in: Add support for the DOLT libtool replacement.
-
-2008-05-19  Zoltan Varga  <vargaz at gmail.com>
-
-	* configure.in: Change the way CPPFLAGS/CFLAGS are passed to libgc one more
-	time. This time, we collect them in two variables and pass these to libgc
-	configure instead of using the standard CPPFLAGS/CFLAGS, to prevent problems
-	during reconfiguring. Also pass '-mno-tls-direct-segment-refs' to libgc 
-	configure, hopefully fixing #385006.
-
-2008-05-15  Zoltan Varga  <vargaz at gmail.com>
-
-	* configure.in: Add a check for sgen and __thread. Fixes #347171.
-
-2008-05-14  Atsushi Enomoto  <atsushi at ximian.com>
-
-	* configure.in, data/Makefile.am, data/dotnet35.pc : 
-	  add new package for .net framework 3.5 libs.
-
-2008-05-12  Raja R Harinath  <harinath at hurrynot.org>
-
-	* scripts/mono-service.in: Undo 2008-05-08.  '2>&1' is not a bash-ism.
-
-2008-05-09  Zoltan Varga  <zovarga at debian.chello.hu>
-
-	* Makefile.am (get-monolite-latest): Create mcs/lib if not existing.
-
-2008-05-08  Robert Jordan  <robertjj at gmx.net>
-
-	* scripts/mono-service.in: Replace bash-ism with `sh' syntax.
-
-2008-05-07  Sebastien Pouliot  <sebastien at ximian.com>
-
-	* data/net_[1_1|2_0]/machine.config: Add entry to remap the public 
-	key used by Silverlight 2.0 platform assemblies. Needed in both 
-	profiles since SN uses 1.0.
-
-2008-05-05  Andreas Färber  <andreas.faerber at web.de>
-
-	* configure.in: Detect ppc64 target architecture.
-	
-	Contributed unter MIT/X11 license.
-
-2008-04-29  Kornél Pál  <kornelpal at gmail.com>
-
-	* configure.in: Check for sys/utime.h.
-	* winconfig.h: Define HAVE_SYS_UTIME_H, undef HAVE_UTIME_H.
-
-2008-04-28  Zoltan Varga  <vargaz at gmail.com>
-
-	* configure.in: Use lowercase for 'integrity of package' for consistency.
-
-2008-04-28  Geoff Norton  <gnorton at novell.com>
-
-	* build-iphone.sh: Some updates to work with the latest SDK.
-
-2008-04-24  Zoltan Varga  <vargaz at gmail.com>
-
-	* configure.in: Use the three argument form of AC_DEFINE everywhere since it is
-	required by autoheader for parameters not in acconfig.h.
-
-	* acconfig.h: Removed, all the parameters are defined in configure.in now.
-
-2008-04-24  Rodrigo Kumpera  <rkumpera at novell.com>
-
-	* runtime/Makefile.am (mcs-compileall): Turn on the verifier.
-
-2008-04-18  Wade Berrier  <wberrier at novell.com>
-
-	* scripts/mono-find-requires.in: Add env var to ignore scanning
-	of .config files.
-	Fix extra whitespace when no config reqs are found.
-
-2008-04-17  Zoltan Varga  <vargaz at gmail.com>
-
-	* configure.in: Enable the valgrind header check on amd64 too.
-
-2008-04-16  Wade Berrier  <wberrier at novell.com>
-
-	* scripts/mono-find-requires.in: Fix extraneous whitespace that makes
-	some reqs from .config be on the same line as the monodis reqs.
-
-2008-04-16  Jb Evain  <jbevain at novell.com>
-
-	* configure.in, data/Makefile.am: add a smcs.pc file,
-	that moonlight can use to locate smcs.exe.
-
-2008-04-11  Atsushi Enomoto  <atsushi at ximian.com>
-
-	* scripts/Makefile.am : we need genxs2 for generating 2.0 based 
-	  serializer.
-
-2008-04-08  Dean Brettle  <dean at brettle.com>
-
-	* configure.in, runtime/Makefile.am: create a symlink at
-	mono/runtime/etc/mono/2.0/Browsers/Compat.browser similar to machine.config
-
-2008-03-26  Massimiliano Mantione  <massi at ximian.com>
-	* configure.in: Added PLATFORM_LINUX automake conditional.
-
-2008-03-25  Zoltan Varga  <vargaz at gmail.com>
-
-	* runtime/Makefile.am (mcs-compileall): Skip net 2.1 assemblies for now.
-
-2008-03-22  Zoltan Varga  <vargaz at gmail.com>
-
-	* configure.in: Pass CPPFLAGS to libgc configure using ac_configure_args instead
-	of exporting it. Fixes #373113.
-
-2008-03-20  Geoff Norton  <gnorton at novell.com>
-
-	* build-iphone.sh: Add CPLUS_INCLUDE_PATH.
-
-2008-03-20  Kornél Pál  <kornelpal at gmail.com>
-
-	* configure.in: Added Windows version macros to CPPFLAGS and export
-	CPPFLAGS for libgc configure to ensure Windows version compatibility.
-	* winconfig.h: Added compile-time feature detection and support for
-	64-bit Windows versions. Updated VERSION to 1.9.
-
-2008-03-19  Zoltan Varga  <vargaz at gmail.com>
-
-	* configure.in: Fix a typo.
-
-2008-03-17  Geoff Norton  <gnorton at novell.com>
-
-	* build-iphone.sh: Fix a typo.
-	
-2008-03-12  Atsushi Enomoto  <atsushi at ximian.com>
-
-	* scripts/Makefile.am : added xsd2.
-
-2008-03-12  Geoff Norton  <gnorton at novell.com>
-
-	* build-iphone.sh: A autogen/make wrapper to define everything to build
-	mono for the iphone.
-	* configure.in: Add support for arm-apple-darwin (iPhone).
-
-2008-03-05  Wade Berrier  <wberrier at novell.com>
-
-	* scripts/Makefile.am: fix typo so that 'scripts_defaults' scripts get
-	installed.
-	Fix sed command so that 'scripts_defaults' scripts work. 
-	Add some files to the cleanup list.
-
-2008-03-02  Miguel de Icaza  <miguel at novell.com>
-
-	* configure.in: No need to detect mcs1, as we are going to keep
-	mcs as the 1.0 compiler and gmcs as the 2.0 compiler.  Since
-	making mcs a 2.0 compiler caused too many problems.
-
-2008-02-29  Miguel de Icaza  <miguel at novell.com>
-
-	* configure.in: Detect if there is an mcs1 command installed as
-	the external c# compiler, and if this is the compiler, pick this
-	to bootstrap. 
-
-	You need to re-autogen.sh after the first installation of mono
-	with the new scripts.
-
-2008-02-28  Miguel de Icaza  <miguel at novell.com>
-
-	* scripts/Makefile.am: Implement new defaults for the Mono 2.0
-	release, 2.0 profile executables are now the defaults (al, ilasm,
-	mkbundle, mono-api-info, monop, resgen, wsdl and mcs).
-
-	Old commands running under the 1.0 profile are still available
-	by having the number 1 appended to their command name (al1,
-	ilasm1, mcs1, mkbundle1, mono-api-info1, monop1, resgen1, wsdl1). 
-
-2008-02-05  Zoltan Varga  <vargaz at gmail.com>
-
-	* runtime/Makefile.am: Update after the changes to mcs/Makefile.
-
-2008-02-03  Zoltan Varga  <vargaz at gmail.com>
-
-	* runtime/Makefile.am (clean-local): Use mono --wapi=semdel instead of the
-	nonexistent semdel utility.
-
-	* runtime/semdel-wrapper.in: Delete.
-
-2008-01-28  Wade Berrier  <wberrier at novell.com>
-
-	* configure.in: version bump -> 1.9
-
-2008-01-26  Zoltan Varga  <vargaz at gmail.com>
-
-	* docs/mini-porting.txt: Add some info about the order the JIT regression
-	tests should be run.
-
-2008-01-26  Daniel Nauck  <dna at mono-project.de>
-
-	* scripts/mono-service.in: fix compability with the dash shell,
-	it doesn't like the use of >& without a file descriptor
-
-2008-01-09  Zoltan Varga  <vargaz at freemail.hu>
-
-	* runtime/Makefile.am (mcs-compileall): Remove some whitespace after
-	a backslash.
-
-2008-01-05  Zoltan Varga  <vargaz at gmail.com>
-
-	* Makefile.am (DIST_SUBDIRS): Use $(eglib_dir) instead of eglib to
-	fix make dist.
-
-2008-01-05  Andreas Faerber  <andreas.faerber at web.de>
-
-	* configure.in: Add support for building with eglib and VPATH.
-	Fixes #351893.
-
-2008-01-05  Andreas Faerber  <andreas.faerber at web.de>
-
-	* configure.in: Define eglib_dir.
-	* Makefile.am: Add eglib to subdirectory lists.
-
-2007-12-31  Jonathan Chambers  <joncham at gmail.com>
-
-	* winconfig.h: Define HAVE_GETPROCESSID.
-	Contributed under MIT/X11 license.
-
-2007-12-28  Everaldo Canuto  <ecanuto at novell.com>
-
-	* configure.in: Add support for oprofile.
-
-2007-12-08  Zoltan Varga  <vargaz at gmail.com>
-
-	* configure.in: Add check for sys/mkdev.h.
-
-2007-12-05  Dick Porter  <dick at ximian.com>
-
-	* configure.in: Define PLATFORM_SOLARIS for solaris builds, needed
-	by fix for bug 323524.
-
-2007-11-21  Dick Porter  <dick at ximian.com>
-
-	* configure.in: No need to check for glib functions any more
-
-2007-11-19  Atsushi Enomoto  <atsushi at ximian.com>
-
-	* configure.in : fix win32 build.
-
-2007-11-16  Zoltan Varga  <vargaz at gmail.com>
-
-	* configure.in: Make --with-moonlight=yes the default.
-
-2007-11-15  Dick Porter  <dick at ximian.com>
-
-	* configure.in: Check for g_strsplit_set() and g_strv_length()
-
-2007-11-10  Alp Toker  <alp at atoker.com>
-
-	* samples/embed/teste.c: Add a newline at the end of this printf()
-
-2007-11-08  Wade Berrier  <wberrier at novell.com>
-
-	* configure.in: add sysconfdir for mcs config.make
-	version bump -> 1.2.6
-
-2007-11-07  Geoff Norton  <gnorton at novell.com>
-
-	* configure.in: Add a check for sockaddr_in(6).sin(6)_len
-
-2007-11-05  Geoff Norton  <gnorton at novell.com>
-
-	* configure.in: Set GMODULE_CFLAGS and GMODULE_LIBS to be set
-	with eglib as well
-
-2007-10-30  Raja R Harinath  <harinath at gmail.com>
-
-	* runtime/Makefile.am ($(tmpinst)/bin/gmcs): Update rule to point
-	to location of 'gmcs.exe'.
-
-2007-10-29  Raja R Harinath  <rharinath at novell.com>
-
-	* configure.in (olive_topdir): Look for $olivedir in the source tree.
-
-2007-10-19  Marek Habersack  <mhabersack at novell.com>
-
-	* scripts/Makefile.am (scripts_2_0): added mconfig to the list
-
-2007-10-09  Wade Berrier  <wberrier at novell.com>
-
-	* configure.in: Split up the mono version that goes into Consts.cs 
-	to make sure each segment is no longer than 4 digits.  
-	This allows svn revisions to be used.
-
-2007-10-02  Miguel de Icaza  <miguel at novell.com>
-
-	* scripts/mono-test-install: (temp_exe): Add tests for dynamic
-	libraries that libgdiplus might be missing
-
-	Add detection and diagnostics for
-	broken System.Drawing installations.
-
-2007-09-19  Jb Evain  <jbevain at novell.com>
-
-	* configure.in: if there's a olive directory in the same folder
-	as mono, we now override its config.make, so that we don't build
-	the olive moonlight assemblies if mono is not build with moonlight
-	support.
-
-2007-09-18  Andreas Faerber  <andreas.faerber at web.de>
-
-	* configure.in: Add support for building on Linux/ppc64 host.
-
-2007-09-18  Marek Habersack  <mhabersack at novell.com>
-
-	* configure.in: added additional Makefile to be generated in the
-	mono/tests/assemblyresolve/ subdir.
-
-2007-09-17  Zoltan Varga  <vargaz at gmail.com>
-
-	* docs/memory-management.txt: A new file describing metadata memory management.
-
-2007-09-14  Jonathan Chambers  <joncham at gmail.com>
-
-	* winconfig.h: Define WINVER and _WIN32_WINNT for VS
-	build.
-	
-	Contributed under MIT/X11 license.
-
-2007-09-14  Jonathan Chambers  <joncham at gmail.com>
-
-	* winconfig.h: Don't define HAVE_UNISTD_H on MSVC build.
-	
-	Contributed under MIT/X11 license.
-
-2007-09-03  Atsushi Enomoto  <atsushi at ximian.com>
-
-	* configure.in : On windows, require advapi32.dll.
-
-2007-08-23  Robert Jordan  <robertj at gmx.net>
-
-	* configure.in: add get|setpriority detection.
-
-Mon Aug 20 15:23:01 CEST 2007 Paolo Molaro <lupus at ximian.com>
-
-	* configure.in: use more symbol renaming fo OSX (bug #82463).
-
-2007-08-20  Jb Evain  <jbevain at novell.com>
-
-	* scripts/smcs.in: use --runtime=moonlight instead of
-	forcing MONO_PATH.
-
-Mon Aug 20 12:34:36 CEST 2007 Paolo Molaro <lupus at ximian.com>
-
-	* configure.in: check for gerusage().
-
-Mon Jul 30 17:59:04 CEST 2007 Paolo Molaro <lupus at ximian.com>
-
-	* configure.in: Enable sigaltstack handling check by default to get
-	wider testing.
-
-2007-07-26  Jb Evain  <jbevain at novell.com>
-
-	* scripts/smcs.in: use smcs.exe.
-
-2007-07-24  Wade Berrier  <wberrier at novell.com>
-
-	* configure.in: version bump -> 1.2.5
-
-2007-07-17  Jb Evain  <jbevain at novell.com>
-
-	* scripts/Makefile.am: new monolinker script.
-
-2007-07-11  Jb Evain  <jbevain at novell.com>
-
-	* scripts/smcs.in, scripts/Makefile.am: new smcs script.
-
-2007-07-05  Wade Berrier  <wberrier at novell.com>
-
-	* scripts/mono-find-requires.in: add special 64bit case for ia64.
-	(rpm used to provide libname as well as libname()(64bit) on ia64, but 
-	now it only provides the first.)
-
-2007-06-28  Jonathan Pryor  <jonpryor at vt.edu>
-
-	* configure.in: Add a check for `struct utimbuf'; needed by MonoPosixHelper.
-
-2007-06-15  Wade Berrier  <wberrier at novell.com>
-
-	* scripts/mono-find-requires.in: revert back to using package names
-	for .config file dep scanning.  This is because noarch packages can be
-	built on either 32 or 64 bit arches, depending on either a 32bit or 64bit
-	library, which is wrong.
-
-2007-06-13  Randolph Chung  <tausq at debian.org>
-
-	* configure.in: Add hppa-linux target.
-	Contributed under the X11 license (http://bugzilla.ximian.com/show_bug.cgi?id=81866).
-
-2007-06-13  Randolph Chung  <tausq at debian.org>
-
-	* configure.in: Add AM_PROG_AS, needed for handling assembly file
-	targets.
-
-2007-06-09  Wade Berrier  <wberrier at novell.com>
-
-	* scripts/mono-find-requires.in: use lib name instead of package name 
-	for deps found in .config files. suse's rpmlint prefers it that way.
-
-2007-05-29  Robert Jordan  <robertj at gmx.net>
-
-	* data/config.in: add mono_win32_compat entries.
-
-2007-05-11  Raja R Harinath  <rharinath at novell.com>
-
-	* Makefile.am (get-monolite-latest): Redirect wget output too.
-
-2007-05-07  Wade Berrier  <wberrier at novell.com>
-
-	* scripts/mono-find-requires.in: don't use length() on arrays;
-	doesn't work on older gawk versions.  Calculate size manually instead.
-
-2007-05-07  Raja R Harinath  <rharinath at novell.com>
-
-	Fix parallel make.
-	* runtime/Makefile.am (test-support-file): Remove.  Move rules ...
-	(_tmpinst/bin/mcs, _tmpinst/bin/gmcs, _tmpinst/bin/ilasm): ... here.
-	Reported by "Stephen A. Jazdzewski" <steve at jazd.com>
-
-2007-05-05  Wade Berrier  <wberrier at novell.com>
-
-	* scripts/mono-find-provides.in: don't use 'which' anymore (never solved
-	anything since it broke symlinks)
-	* scripts/mono-find-requires.in: also don't use 'which'
-	Parse .config files to look for native libs.  Honor 'os' attributes for
-	dllmaps.  Query rpm db for package that provides this lib.  Support 64bit
-	rpm configurations, as well as 32bit running on 64bit.
-
-2007-04-27  Marek Habersack  <mhabersack at novell.com>
-
-	* data/net_2_0/web.config: use fully qualified assembly names in
-	<compilation><assemblies>.
-
-2007-04-19  Wade Berrier  <wberrier at novell.com>
-
-	* configure.in: version bump -> 1.2.4
-
-2007-04-15  Marek Habersack  <mhabersack at novell.com>
-
-	* data/net_2_0/web.config: add the default build providers
-	configuration.
-
-2007-04-06  Andreas Faerber  <andreas.faerber at web.de>
-
-	* configure.in: Added support for Solaris/amd64. Fixes bug #81325
-
-2007-04-06  Marek Habersack  <mhabersack at novell.com>
-
-	* data/net_2_0/machine.config: corrected the xhtmlConformance
-	entry to reference correct type.
-
-	* data/net_2_0/web.config: siteMap must be enabled by
-	default. Fixes bug #80611
-
-2007-04-05  Marek Habersack  <mhabersack at novell.com>
-
-	* data/browscap.ini: updated to the latest version.
-	Applied Mono-specific changes.
-
-2007-03-28  Raja R Harinath  <rharinath at novell.com>
-
-	* runtime/mono-wrapper.in (PATH): Include _tmpinst/bin.  Ensure
-	that library invocations of 'mcs' and 'gmcs' pick the in-tree versions.
-	* runtime/Makefile.am (mcs-do-run-test-profiles): Don't set PATH.
-	(all-local, install-local): Depend on TEST_SUPPORT_FILES too.
-	(test-support-files): Move creation of _tmpinst/bin directory ...
-	($(tmpinst)/bin/mono): ... here.
-	($(tmpinst)/bin/mbas, $(tmpinst)/bin/pedump): Remove.
-	(test-support-file): Depend on $(tmpinst)/bin/mono.
-
-2007-03-22  Marek Habersack  <mhabersack at novell.com>
-
-	* data/net_2_0/machine.config: added a few missing sections, added
-	missing allowDefinition and allowLocation attributes.
-
-2007-03-16  Wade Berrier  <wberrier at novell.com>
-
-	* configure.in: version bump -> 1.2.3.50 (RaceToLinux special release)
-
-2007-03-16  Marek Habersack  <mhabersack at novell.com>
-
-	* data/net_2_0/machine.config: added default profile provider
-	configuration.
-
-2007-03-15  Marek Habersack  <grendello at gmail.com>
-
-	* runtime/Makefile.am: add browscap.ini to symlinks
-
-	* configure.in: make sure browscap.ini is symlinked to from
-	runtime/etc/ so that no web tests that depend on the file's
-	presence fail.
-
-2007-03-15  Jonathan Chambers  <joncham at gmail.com>
-
-	* winconfig.h: Don't use MONO_XEN_OPT on windows.
-	Contributed under MIT/X11 license.
-
-2007-03-14  Marek Habersack  <mhabersack at novell.com>
-
-	* data/net_2_0/machine.config: add two missing section handlers.
-
-2007-03-13  Wade Berrier  <wberrier at novell.com>
-
-	* Makefile.am:
-	* msvc/Makefile.am:
-	Update EXTRA_DIST to take into account .vcproj file moves
-
-2007-03-13  Jonathan Chambers  <joncham at gmail.com>
-
-	* mono.sln, libmono.vcproj, mono.vcproj, genmdesc.vcproj, winsetup.bat,
-	mono/monodiet.vcproj, mono/pedump.vcproj: Move to msvc directory.
-	
-2007-03-13  Jonathan Chambers  <joncham at gmail.com>
-
-	* libmono.vcproj, mono.vcproj, genmdesc.vcproj, mono/monodiet.vcproj,
-	mono/pedump.vcproj: Fix	Release build target, add define to remove CRT warnings, 
-	structure output folders a bit better, begin WIN64 port, and change 
-	libmono to build a DLL instead	of a static library.
-	* mono.sln: Begin x64 target support.
-	
-Fri Mar 9 18:57:47 CET 2007 Paolo Molaro <lupus at ximian.com>
-
-	* Makefile.am, configure.in, msvc: add msvc directory to the
-	distribution.
-	* msvc/create-windef.pl, msvc/mono.def: added def file for exported
-	functions.
-
-2007-03-09  Zoltan Varga  <vargaz at gmail.com>
-
-	* docs/aot-compiler.txt: Update 'future work'.
-
-2007-03-07  Zoltan Varga  <vargaz at gmail.com>
-
-	* docs/aot-compiler.txt: Add into about the PLT.
-	
-	* docs/aot-compiler.txt: Update a bit to reflect recent changes.
-
-2007-02-24  Raja R Harinath  <rharinath at novell.com>
-
-	* data/config.in (odbc32.dll) [os=osx]: Fix misplaced ".
-
-2007-02-20  Wade Berrier  <wberrier at novell.com>
-
-	* scripts/Makefile.am: Add api-info and api-diff wrappers
-
-2007-02-15  Marek Habersack  <grendello at gmail.com>
-
-	* data/net_2_0/machine.config: add default provider factories.
-
-2007-02-01  Geoff Norton  <gnorton at customerdna.com>
-
-        * configure.in:  Support NetBSD GC.
-		
-Thu Feb 1 12:29:23 CET 2007 Paolo Molaro <lupus at ximian.com>
-
-	* configure.in: include LIBS in libmono_ldflags on all archs.
-	* mint.pc.in, mono-uninstalled.pc.in, mono.pc.in: removed extra -lm.
-
-2007-02-01  Miguel de Icaza  <miguel at novell.com>
-
-	* configure.in: Naive attempt at getting -ldl in mono.pc
-
-2007-01-31  Marek Habersack  <grendello at gmail.com>
-
-	* data/net_2_0/machine.config: prepare the configuration for the
-	Mainsoft.Web administrative application.
-
-2007-01-31  Atsushi Enomoto  <atsushi at ximian.com>
-
-	* configure.in : w32 build fix; add -lwinmm as Tor suggested.
-
-Mon Jan 29 12:04:38 CET 2007 Paolo Molaro <lupus at ximian.com>
-
-	* configure.in, mint.pc.in mono-uninstalled.pc.in mono.pc.in:
-	put back the flag to export symbols from the binary which is
-	no more provided by gmodule (thanks to Robert Jordan <robertj at gmx.net>
-	for noticing).
-
-2007-01-29  Robert Jordan  <robertj at gmx.net>
-
-	* libmono.vcproj, winconfig.h: Reflect recent changes.
-
-2007-01-12  Gert Driesen  <drieseng at users.sourceforge.net>
-
-	* scripts/Makefile.am: Added 'al2'.
-
-2007-01-11  Dick Porter  <dick at ximian.com>
-
-	* acconfig.h: 
-	* configure.in: Check for IP_DONTFRAGMENT and IP_MTU_DISCOVER.
-
-2007-01-11  Marek Habersack  <grendello at gmail.com>
-
-	* data/net_2_0/machine.config: Added the DbProviderFactories
-	section, together with the first entry - for SQLite.
-
-2007-01-03  Wade Berrier  <wberrier at novell.com>
-
-	* scripts/mono-find-provides.in:
-	* scripts/mono-find-requires.in: error out if monodis isn't
-	functioning properly.  Otherwise when building rpms, 
-	the provides/requires isn't generated correctly if monodis 
-	isn't present. 
-
-	Fixes: bnc #227362
-
-2007-01-01  Miguel de Icaza  <miguel at novell.com>
-
-	* configure.in (darwin.CPPFLAGS): Temporary workaround for the bug
-	reported in 77324.  When we get a linker script for MacOS we can
-	take this out, but for now lets keep it in here.
-
-	* scripts/mono-service.in (debug): Add --debug, --no-daemonize and
-	make sure that this works with 2.0 (wrong binary was being
-	refereced).
-
-	Fixes: #80309
-
-Mon Dec 18 18:19:50 CET 2006 Paolo Molaro <lupus at ximian.com>
-
-	* configure.in: fixed compiler/linker options when
-	configuring under hpux/ia64 (patch from warren at warrenandrachel.com
-	(Warren Smith)).
-
-Mon Dec 18 15:28:49 CET 2006 Paolo Molaro <lupus at ximian.com>
-
-	* configure.in: detection code for dlopen ().
-
-Mon Dec 11 10:23:18 CET 2006 Paolo Molaro <lupus at ximian.com>
-
-	* configure.in, mono.pc.in, */Makefile.am: istall the header
-	files in a API version specific directory.
-
-2006-12-07  Vladimir Krasnov  <vladimirk at mainsoft.com>
-
-	* data/browscap.ini: added msdomversion for ie6/7,
-	fixed ecmascriptversion in ie6/7
-
-2006-11-28  Marek Habersack  <grendello at gmail.com>
-
-	* data/net_2_0/web.config: Added the imported namespaces statement
-	for ASP.NET compilation.
-
-2006-11-17  Wade Berrier  <wberrier at novell.com>
-
-	* configure.in: version bump to 1.2.1
-
-Thu Nov 16 12:59:50 CET 2006 Paolo Molaro <lupus at ximian.com>
-
-	* configure.in: added --disable-mcs-build for use
-	with embedded systems or other cases where we don't want
-	or can't to spend time compiling the managed part of the runtime.
-
-2006-11-02  Wade Berrier  <wberrier at novell.com>
-
-	* configure.in: version bump to 1.2
-
-2006-11-02 Michael Hutchinson <m.j.hutchinson at gmail.com>
-
-	* data/net_2_0/machine.config: defaultProxy section is no longer 
-	  necessary, so remove.
-
-2006-11-01  Jonathan Pryor  <jonpryor at vt.edu>
-
-	* configure.in: Add type checks for blkcnt_t, blksize_t, suseconds_t.  Some
-	  versions of Mac OS X don't define these, needed by support/map.c.
-
-2006-10-26  Jonathan Pryor  <jonpryor at vt.edu>
-
-	* configure.in: Add type checks for structs pollfd, stat, timeval, timezone.
-	  This is so that support/map.c can use HAVE_STRUCT_... wrappers around
-	  structure conversion functions, allowing them to be omitted from the Win32
-	  build.
-
-2006-10-16  Kornél Pál  <kornelpal at gmail.com>
-
-	* libmono.vcproj: Removed unicode.h and unicode.c. Changed absolute
-	  path in AdditionalLibraryDirectories to relative.
-
-2006-10-13  Joe Shaw  <joeshaw at novell.com>
-
-	* samples/size/size.c: Flesh this out quite a bit more so that
-	its results are more accurate.
-	* samples/size/sample.cs: Add a few more test cases.
-
-2006-10-12  Zoltan Varga  <vargaz at freemail.hu>
-
-	* configure.in: Disable visibility("hidden") on cygwin as well.
-
-2006-10-10  Zoltan Varga  <vargaz at gmail.com>
-
-	* configure.in: Get rid of --with-nptl.
-
-Sat Sep 30 12:11:56 CEST 2006 Paolo Molaro <lupus at ximian.com>
-
-	* configure.in: link to libnsl only if needed.
-
-2006-09-19  Raja R Harinath  <rharinath at novell.com>
-
-	* runtime/Makefile.am (etc/mono/config): Fix rule to avoid writing
-	into a symlink created by the 2006-09-13 change below.
-
-2006-09-17  Zoltan Varga  <vargaz at gmail.com>
-
-	* docs/thread-safety.txt: Moved here from mono/metadata.
-
-2006-09-16  Zoltan Varga  <vargaz at freemail.hu>
-
-	* configure.in: Avoid non-static build warning on windows.
-
-2006-09-16  Raja R Harinath  <rharinath at novell.com>
-
-	Fix srcdir!=builddir issue.
-	* configure.in (runtime/etc/mono/config): Remove erroneous code.
-	* runtime/Makefile.am (etc/mono/config): Rename from wrapper-config.
-	* runtime/mono-wrapper.in: Update.
-
-2006-09-15  Jonathan Pryor  <jonpryor at vt.edu>
-
-	* configure.in: Remove check for setkey(3).
-
-2006-09-13  Jonathan Pryor  <jonpryor at vt.edu>
-
-	* configure.in: Add command to create runtime/etc/mono/config.  This is
-	  needed so that programs which use the bootstrap mono build get the
-	  appropriate <dllmap/> entries (in particular, the mono-shlib-cop unit
-	  tests requires that a $prefix/etc/mono/config be present to run).
-	* runtime/Makefile.am: Create runtime/etc/mono/config.
-
-2006-09-11  Zoltan Varga  <vargaz at gmail.com>
-
-	* mono.vcproj: Fix VC build.
-
-2006-09-01  Zoltan Varga  <vargaz at gmail.com>
-
-	* configure.in: More alpha updates from Sergey Tikhonov <tsv at solvo.ru>.
-
-2006-08-31  Zoltan Varga  <vargaz at freemail.hu>
-
-	* samples/embed/test-invoke.vcproj samples/embed/teste.vcproj: Fix include paths for newer glib versions.
-
-	* genmdesc.vcproj: Fix include paths for newer glib versions.
-
-	* libmono.vcproj: Add further missing sources, fix include paths for newer glib versions.
-	
-	* libmono.vcproj: Add aot-compiler.c and aot-runtime.c as source files.
-
-	* README.vsnet: Fix a typo.
-
-2006-08-31  Zoltan Varga  <vargaz at gmail.com>
-
-	* configure.in (PLATFORM_WIN32): Add -mno-cygwin to libmono_cflags/ldflags. Fixes
-	#79180.
-
-2006-08-15  Miguel de Icaza  <miguel at novell.com>
-
-	* configure.in: Add support for an altenative version of glib.
-
-2006-08-29 Wade Berrier <wberrier at novell.com>
-
-	* configure.in: Add required CFLAGS for s390[x] (-mbackchain)
-
-2006-08-23 Gonzalo Paniagua Javier <gonzalo at ximian.com>
-
-	* configure.in: check for mkstemp.
-
-2006-08-22  Raja R Harinath  <rharinath at novell.com>
-
-	* runtime/Makefile.am (mcs-compileall): Remove mention of Microsoft.VisualBasic.
-
-2006-07-25 Gonzalo Paniagua Javier <gonzalo at ximian.com>
-
-	* configure.in: add check for sys/syscall.h. Remove aio_* detection as
-	it has not been used for a while now.
-
-2006-07-19  Wade Berrier <wberrier at novell.com>
-
-	* scripts/mono-find-provides.in: Remove support for only scanning files in the gac.
-	The problem is that mono apps are often broken up into subpackages, and deps can only
-	be resolved if the assemblies are in the gac, even when they sometimes shouldn't be.
-	(See https://bugzilla.novell.com/show_bug.cgi?id=144655)
-
-2006-07-19  Zoltan Varga  <vargaz at gmail.com>
-
-	* configure.in: Applied patch from Sergey Tikhonov <tsv at solvo.ru>. Beginning
-	of alpha support.
-
-2006-07-17  Wade Berrier <wberrier at novell.com>
-
-	* scripts/mono-find-requires.in: Change rpm requires to >= 1.0.3300.0 instead of
-	=, since we don't explicitly provide 1.0.3300.0 versions.
-
-2006-07-09  Zoltan Varga  <vargaz at gmail.com>
-
-	* docs/exception-handling.txt: Update libunwind status since it is not really
-	dead.
-	
-	* docs/exception-handling.txt: Note the changes in the handling of SIGSEGV
-	received while in native code.
-
-2006-07-04  Zoltan Varga  <vargaz at gmail.com>
-
-	* configure.in: Add the contents of LIBS to libmono_ldflags on sol-x86 too.
-
-2006-07-01  Zoltan Varga  <vargaz at gmail.com>
-
-	* configure.in: Add the contents of LIBS to libmono_ldflags instead on solaris.
-
-2006-06-30  Zoltan Varga  <vargaz at gmail.com>
-
-	* configure.in: Add -lsocket -lnsl to libmono_ldflags on solaris to fix the
-	mkbundle tests.
-
-2006-06-27  Zoltan Varga  <vargaz at gmail.com>
-
-	* configure.in: Disable --with-tls=__thread on solaris/x86.
-
-2006-06-24  Zoltan Varga  <vargaz at gmail.com>
-
-	* configure.in: Always pass CPPFLAGS to libgc configure.
-
-2006-06-22  Sebastien Pouliot  <sebastien at ximian.com>
-
-	* configure.in: Add the Makefile to create in order to run the CAS
-	tests.
-
-2006-06-14  Sebastien Pouliot  <sebastien at ximian.com>
-
-	* README.vsnet: Make it clear that building Mono under cygwin is a
-	pre-requirement to using the VS.NET solution (with the supplied
-	instructions).
-
-2006-06-01 Zac Bowling <zac at zacbowling.com>
-	* configure.in, fix typo breaking build (test instead of text on last
-	line)
-
-2006-05-24  Andrew Skiba <andrews at mainsoft.com>
-
-	* configure.in, runtime/Makefile.am: create a symlink at
-	mono/runtime/etc/mono/2.0/web.config similar to machine.config
-	
-2006-05-24  Raja R Harinath  <rharinath at novell.com>
-
-	* scripts/Makefile.am (scripts_1_0, scripts_2_0): Move
-	nunit-console ...
-	(scripts_nunit): ... here.
-	(REWRITE1_DEBUG, REWRITE2_DEBUG): New defines that pass a --debug
-	to the mono runtime.
-	(nunit-console, nunit-console2): New targets.  Use them.
-
-2006-05-23  Zoltan Varga  <vargaz at gmail.com>
-
-	* libatomic_ops: Remove this, as using it didn't work out.
-
-2006-05-23  Martin Baulig  <martin at ximian.com>
-
-	* configure.in: Disable the debugger if we're not using the
-	included gc.
-
-2006-05-10  Atsushi Enomoto  <atsushi at ximian.com>
-
-	* data/net_2_0/machine.config : updated webRequestModules,
-	  defaultProxy and connectionManagement handlers.
-
-2006-05-10  Zoltan Varga  <vargaz at gmail.com>
-
-	* configure.in: Disable usage of visibility(hidden) on solaris x86.
-
-2006-05-07  Zoltan Varga  <vargaz at gmail.com>
-
-	* data/mono.supp: Applied patch from Matt Hargett (matt at use.net).
-	Generalize path to the mono executable.
-
-2006-05-02  Jonathan Chambers  <jonathan.chambers at ansys.com>
-
-        * configure.in: Add oleaut32 on Win32 builds for BSTR support
-
-2006-05-01  Chris Toshok  <toshok at ximian.com>
-
-	* data/net_2_0/machine.config: add connectionStringName's
-	parameters to the role/membership providers.
-
-2006-04-30  Raja R Harinath  <harinath at gmail.com>
-
-	* Makefile.am (mcs-do-clean, mcs-do-compiler-tests): Clean
-	and run tests in mono/tests too.
-
-2006-04-25  Wade Berrier <wberrier at novell.com>
-
-	* scripts/mono-find-provides.in: Only scan files that are in the gac.
-	This allows packages to contain private assemblies that won't conflict 
-	with other packages. Fixes bugzilla.novell.com #144655.
-
-2006-04-21  Alp Toker  <alp at atoker.com>
-
-	* scripts/mono-service.in: Usage info fixes:
-	Lock file was referred to as .log instead of .lock. Fixes #75724.
-	$0 was in single-quoted, so not interpreted.
-
-2006-04-13  Chris Toshok  <toshok at ximian.com>
-
-	* data/net_2_0/machine.config: add system.data section listing the
-	SqlClient provider.  Also add system.web section listing the
-	membership and role providers.  This is here instead of in
-	web.config because the providers are meant to be available to
-	non-web applications as well.
-
-2006-04-11  Chris Toshok  <toshok at ximian.com>
-
-	* data/net_2_0/web.config: add the builtin expression builders.
-
-2006-04-11  Gert Driesen  <gert.driesen at telenet.be>
-
-	* scripts/Makefile.am (scripts_2_0): Add 'resgen2'.
-
-2006-04-07  Chris Toshok  <toshok at ximian.com>
-
-	* data/net_2_0/machine.config: oh, and
-	system.web/anonymousIdentification.
-
-2006-04-07  Chris Toshok  <toshok at ximian.com>
-
-	* data/net_2_0/machine.config: add system.web/membership and
-	system.web/xhtmlConformance config sections.
-
-2006-04-04  Zoltan Varga  <vargaz at gmail.com>
-
-        * configure.in: Add a check and a helpful error message when 'ar' is not found on solaris.
-
-2006-04-01  Zoltan Varga  <vargaz at gmail.com>
-
-	* data/mono.supp: Add "Use of uninitialized value of size 8" too.
-
-2006-03-31  Massimiliano Mantione  <massi at ximian.com>
-
-        * docs/tree-mover.txt: Added tree mover documentation.
-
-Wed, 29 Mar 2006 20:54:05 +0200 Paolo Molaro <lupus at ximian.com>
-
-	* configure.in, mono/Makefile.am: remove the now unused handles dir
-	from the build.
-
-2006-03-22  Chris Toshok  <toshok at ximian.com>
-
-	* data/net_2_0/web.config: add RoleManagerModule to httpModules.
-
-	* data/net_2_0/machine.config: add system.web/roleManager section
-	handler.
-
-2006-03-20  Zoltan Varga  <vargaz at gmail.com>
-
-	* libmono.vcproj: Add some newly added source files.
-
-2006-03-17  Zoltan Varga  <vargaz at gmail.com>
-
-	* libmono.vcproj: Remove os/win32/util.h.
-
-2006-03-09  Vladimir Krasnov  <vladimirk at mainsoft.com>
-
-	* Added data/net_1_1/DefaultWsdlHelpGenerator.jvm.aspx
-	with removed proxy class generation for Grasshopper
-
-2006-03-08  Chris Toshok  <toshok at ximian.com>
-
-	* data/net_2_0/web.config: add a default siteMap section with the
-	AspNetXmlSiteMapProvider provider.
-
-	* data/net_2_0/machine.config: add system.web/siteMap section
-	info.
-
-2006-03-03  Zoltan Varga  <vargaz at gmail.com>
-
-	* configure.in mono/os: Merge the contents of libmonoos to metadata/assembly.c and
-	get rid of os/unix and os/win32.
-
-Wed Mar 1 12:37:43 CET 2006 Paolo Molaro <lupus at ximian.com>
-
-	* configure.in: added checks for visibility attribute,
-	option to disable generics, disabled options string define.
-
-2006-02-27  Raja R Harinath  <rharinath at novell.com>
-
-	* configure.in (runtime/etc/mono/{1.0,2.0}/machine.config):
-	Fix m4-quoting.
-
-Sat Feb 25 11:53:30 CET 2006 Paolo Molaro <lupus at ximian.com>
-
-	* configure.in: more feature for --enable-minimal flags.
-
-2006-02-24 Gonzalo Paniagua Javier <gonzalo at ximian.com>
-
-	* configure.in: define PLATFORM_BSD.
-
-2006-02-17  Zoltan Varga  <vargaz at gmail.com>
-
-	* Makefile.am: Avoid installing mint.pc if mint is not compiled.
-
-2006-02-07  Chris Toshok  <toshok at ximian.com>
-
-	* data/net_2_0/Makefile.am (EXTRA_DIST): add web.config
-	(mono_DATA): same.
-
-	* data/net_2_0/machine.config: remove the system.web section from
-	here.
-
-	* data/net_2_0/web.config: and add it here.
-
-2006-02-02  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* data/net_2_0/machine.config: Add FtpRequestCreator
-	to create new instances of System.Net.FtpWebWebRequest.
-
-2006-02-01  Sebastien Pouliot  <sebastien at ximian.com> 
- 
-	* libmono.vcproj: Added new files to the VS.NET build.
-	* README.vsnet: Updated VS.NET build instructions.
-
-2006-01-26  Chris Toshok  <toshok at ximian.com>
-
-	* data/net_2_0/machine.config: ignore runtime and startup
-	sections.
-
-2006-01-25  Chris Toshok  <toshok at ximian.com>
-
-	* data/net_2_0/machine.config: ignore mscorlib,
-	system.runtime.remoting, and strongNames sections.
-
-2006-01-25  Chris Toshok  <toshok at ximian.com>
-
-	* data/net_2_0/machine.config: for system.web, add default
-	<authorization> section that allows everything.  also, add
-	System.Configuration to system.web/compilation/assemblies.
-
-2006-01-23  Chris Toshok  <toshok at ximian.com>
-
-	* data/net_2_0/machine.config: add System.Configuration to the
-	list of assemblies in system.web/compilation.
-
-2006-01-23  Martin Baulig  <martin at ximian.com>
-
-	* configure.in: Added configure check whether the Mono Debugger is
-	supported on this platform; AC_DEFINE(MONO_DEBUGGER_SUPPORTED) and
-	also added a `MONO_DEBUGGER_SUPPORTED' automake conditional.
-
-2006-01-13  Raja R Harinath  <rharinath at novell.com>
-
-	* data/net_2_0/machine.config: Fix a couple of typos in type names.
-
-2006-01-10  Raja R Harinath  <rharinath at novell.com>
-
-	* scripts/Makefile.am (scripts_2_0): Add nunit-console2.
-
-2006-01-09  Chris Toshok  <toshok at ximian.com>
-
-	* data/net_2_0/machine.config: switch over to the 2.0
-	configuration sections for System.Web and System.Web.Services.
-	Also, add the configProtectedData stuff so we can encrypt config
-	sections.
-
-2006-01-08  Robert Jordan  <robertj at gmx.net>
-
-	* man/mkbundle.1: Documented environment variables and Windows issues.
-
-2006-01-06  Jonathan Pryor  <jonpryor at vt.edu>
-
-	* data/config.in: s/libintl/intl/g.  Mono.Unix.Catalog DllImports "intl"
-	  now, as intl.dll is the file actually shipped/available on Windows.
-
-2006-01-04  Zoltan Varga  <vargaz at gmail.com>
-
-	* configure.in: Add a CFLAGS_FOR_BUILD autoconf variable.
-
-2006-01-03  Jonathan Pryor  <jonpryor at vt.edu>
-
-	* configure.in: Add check for lutimes(2).  Mac OS X doesn't provide this.
-
-2005-12-28  Kornél Pál  <kornelpal at hotmail.com>
-
-	* runtime/Makefile.am (all-local): Enclose CC by apostrophes to fix
-	  build when CC contains spaces.
-
-2005-12-27  Jonathan Pryor  <jonpryor at vt.edu>
-
-	* configure.in: Add check for <sys/mman.h>.  Fixes #77091.
-	  Thanks to Ben Gamari for the patch.
-
-2005-12-26  Zoltan Varga  <vargaz at gmail.com>
-
-	* configure.in: Add support for solaris/x86.
-
-	* runtime/Makefile.am (all-local): Pass CC to the mcs makefile.
-
-2005-12-21  Wade Berrier <wberrier at novell.com>
-
-	* mono-cairo.pc.in: use $prefix/lib instead of $libdir, 
-	otherwise the cairo.dll can't be found on 64 bit architectures
-
-2005-12-18  Raja R Harinath  <harinath at gmail.com>
-
-	* configure.in (config.make): Don't blindly copy over $INSTALL,
-	since it can be relative to the mono tree.  Use the same trick as
-	ac_INSTALL, but against an absolute path.
-
-2005-12-16 Wade Berrier <wberrier at novell.com>
-
-	* configure.in: Unset AC_DISABLE_FAST_INSTALL
-	This caused some weird monodis linking errors
-
-2005-12-12 Mike Kestner <mkestner at novell.com>
-
-	* mono-cairo.pc.in: pkgconfig support for Mono.Cairo. Mono.Cairo.dll
-	and this file can be extracted post-build to be packaged separately 
-	on win32.
-	* configure.in: expand mono-cairo.pc
-	* Makefile.am: dist and install mono-cairo.pc
-
-2005-12-01  Jonathan Pryor  <jonpryor at vt.edu>
-
-	* configure.in: Check for setkey(3) in -lcrypt and define CRYPT_LIBS
-	  accordingly.
-
-2005-12-01 Mike Kestner <mkestner at novell.com>
-
-	* scripts/mono-find-provides.in: support policy assemblies.
-
-2005-11-29 Gonzalo Paniagua Javier <gonzalo at ximian.com>
-
-	* configure.in: define PLATFORM_MACOSX.
-
-2005-11-24  Dick Porter  <dick at ximian.com>
-
-	* configure.in: Test for GetProcessId() on windows
-
-2005-11-21  Raja R Harinath  <rharinath at novell.com>
-
-	* scripts/Makefile.am (bin_SCRIPTS): Move 'gmcs' to ...
-	(scripts_2_0): ... here.
-	(gmcs): Remove special-case rule.
-
-2005-11-09 Michael Hutchinson <m.j.hutchinson at gmail.com>
-
-	* data/net_1_1/machine.config, data/net_2_0/machine.config: Set 
-	default values for http proxy
-
-2005-11-07  Zoltan Varga  <vargaz at gmail.com>
-
-	* docs/jit-regalloc: Merge forgotten documentation updates from
-	the mini-xp-local-regalloc branch.
-
-2005-10-28  Wade Berrier <wberrier at novell.com>
-
-	* mono.pc.in, mint.pc.in, configure.in: Make these relocatable.
-	* scripts: Makefile.am mono-nunit.pc.in script.in mono-service.in 
-	Make all the wrappers relocatable.
-
-2005-10-21  Zoltan Varga  <vargaz at gmail.com>
-
-	* configure.in: Add test for execinfo.h.
-
-2005-10-20  Raja R Harinath  <rharinath at novell.com>
-
-	* Makefile.am (DISTCHECK_CONFIGURE_FLAGS): New.  Make 'distcheck'
-	compile with the 'monolite' in the distribution tarball.
-	(compiler-tests-net_2_0): Avoid deleting
-	$(mcs_topdir)/build/common/Consts.cs.
-
-2005-10-20  Robert Jordan  <robertj at gmx.net>
-
-	* data/net_2_0/machine.config: Added IPC channel templates.
-
-2005-10-11  John Luke  <john.luke at gmail.com>
-
-	* man/monop.1: update for new monop options
-	
-2005-10-04  Zoltan Varga  <vargaz at freemail.hu>
-
-	* configure.in: Fix up problems with the latest libtool on win32.
-
-2005-10-04  Zoltan Varga  <vargaz at gmail.com>
-
-	* configure.in: Remove 'Globalization:' entry from final message.
-
-2005-09-27  Raja R Harinath  <rharinath at novell.com>
-
-	* configure.in (BUILD_MCS): New automake conditional.  Used to
-	disable building the mcs/ tree if cross-compiling.
-	(CROSS_COMPILING): New automake conditional.
-	($mcsdir/build/config.make): Don't clobber when cross-compiling.
-	(GLIB_CFLAGS, GLIB_LIBS, GMODULE_CFLAGS, GMODULE_LIBS):
-	Define even when cross-compiling.
-	* runtime/Makefile.am (all-local, install, uninstall, clean-local):
-	Disable building in the mcs/ tree if !BUILD_MCS.
-
-2005-09-22  Raja R Harinath  <rharinath at novell.com>
-
-	* configure.in (MONO_VERSION): Emit it into config.make.  Don't
-	build Consts.cs.
-
-2005-09-19  Zoltan Varga  <vargaz at gmail.com>
-
-	* docs/exception-handling.txt: Add section about libunwind.
-	
-	* docs/exception-handling.txt: New file.
-
-2005-09-16  Raja R Harinath  <rharinath at novell.com>
-
-	* runtime/Makefile.am (all-local, install-exec, uninstall)
-	(mcs-do-test-profiles, mcs-do-run-test-profiles, mcs-compileall):
-	Don't call semdel-wrapper.
-
-2005-09-06  Chris Toshok  <toshok at ximian.com>
-
-	* data/browscap.ini: Add the ecmascriptversion/w3cdomversion
-	attributes required for ASP.Net client side validation to the
-	capabilities for Mozilla 1.[78], IE 5.5 & 6.0, Safari, and Firefox
-	0.9 & 1.0 browsers.
-
-2005-08-26  Zoltan Varga  <vargaz at gmail.com>
-
-	* configure.in: Add ability to cross-compile from linux to win32.
-
-2005-08-26  Kornél Pál  <kornelpal at hotmail.com>
-
-	* configure.in: Generating Consts.cs from Consts.cs.in instead of MonoVersion.cs.
-
-2005-08-25  Zoltan Varga  <vargaz at gmail.com>
-
-	* configure.in: Use CC instead of gcc for __thread tests.
-
-2005-08-25  Zoltan Varga  <vargaz at freemail.hu>
-
-	* configure.in: Pass --enable-win32-dllmain to libgc configure. Build the runtime as a dll under windows.
-
-2005-08-24  Zoltan Varga  <vargaz at gmail.com>
-
-	* configure.in: Add -lunwind to ldflags on IA64.
-
-2005-08-22  Zoltan Varga  <vargaz at freemail.hu>
-
-	* configure.in: Patch libtool to get rid of 'cyg' prefixes in library names.
-
-2005-08-11  Zoltan Varga  <vargaz at freemail.hu>
-
-	* libmono.vcproj: Fix VC build.
-
-Thu Aug 4 19:55:33 BST 2005 Paolo Molaro <lupus at ximian.com>
-
-	* configure.in: enable the ARM jit port.
-
-2005-08-02  Zoltan Varga  <vargaz at freemail.hu>
-
-	* acconfig.h configure.in: Applied patch from Julien Puydt (julien.puydt at laposte.net). Add check for IPV6_PKTINFO.
-
-2005-07-19  Zoltan Varga  <vargaz at freemail.hu>
-
-	* configure.in: Fix definition of LIBC for ia64.
-
-2005-07-12  Daniel Drake  <dsd at gentoo.org>
-
-	* configure.in: Add check for libattr's <attr/attr.h>
-
-2005-07-11  Raja R Harinath  <rharinath at novell.com>
-
-	* scripts/script.in: Add @framework_version@ blank.
-	* scripts/script2.in: Remove.
-	* scripts/Makefile.am: Update.  Use wsdl.exe for wsdl2 and
-	monop.exe for monop2.
-
-2005-07-04  Raja R Harinath  <rharinath at novell.com>
-
-	* Makefile.am (EXTRA_DIST): Distribute mono-uninstalled.pc.in.
-	(noinst_DATA): Build mono-uninstalled.pc.
-	* mono-uninstalled.pc.in (Libs): Avoid ${pc_top_builddir}.
-	(Cflags): Likewise.  Let $(srcdir) to be absolute.
-
-2005-07-03  Ben Maurer  <bmaurer at ximian.com>
-
-	* scripts/Makefile.am (bin2_SCRIPTS): Add monop2
-
-2005-07-01  Daniel Drake  <dsd at gentoo.org>
-
-	* configure.in: Add check for FreeBSD's sys/extattr.h
-
-2005-07-01  Raja R Harinath  <rharinath at novell.com>
-
-	Avoid resource leakage on 'make clean' (see #75424).
-	* configure.in (AC_CONFIG_FILES): Add runtime/semdel-wrapper.
-	* runtime/semdel-wrapper.in: New.
-	* runtime/Makefile.am (clean-local): Use the semdel program before
-	nuking the .wapi directory.
-	(noinst_SCRIPTS): Add semdel-wrapper.
-	(MYDISTFILES, distdir): Use automake variable to get the list of
-	files to distribute.
-	(all-local, install-exec, uninstall): Call semdel-wrapper.
-	(mcs-do-test-profiles, mcs-do-run-test-profiles, mcs-compileall):
-	Likewise.
-
-2005-06-27  Geoff Norton  <gnorton at customerdna.com>
-
-	* configure.in: Add support for X86 darwin.
-
-2005-06-22  Zoltan Varga  <vargaz at freemail.hu>
-
-	* configure.in: Add support for ia64.
-
-2005-06-20 Gonzalo Paniagua Javier <gonzalo at ximian.com>
-
-	* configure.in: enabled the use of mmap/munmap for solaris and linux.
-	It seems to help with memory usage.
-
-2005-06-15  Ben Maurer  <bmaurer at ximian.com>
-
-	* configure.in: Another attempt at the portable "find libX11.so"
-	Hopefully, this one has no code paths where we are worse off than
-	what we had before any of this mess.
-	
-	* configure.in: What I hope is a more portable version hack.
-
-2005-06-14  Ben Maurer  <bmaurer at ximian.com>
-
-	* configure.in: echo the version number to
-	mcs/build/common/MonoVersion.cs. This allows us to not need to
-	update AssemblyInfo.cs every time we bump the version number.
-
-	* mono-uninstalled.pc.in: pc file that handles mono when it is not
-	installed. This lets us have mkbundle work inside the tree.
-
-	* configure.in: Create the .pc file above.
-
-2005-06-13  Jonathan Pryor <jonpryor at vt.edu>
-
-	* man/mono-shlib-cop.1: Add man page for mono-shlib-cop program.
-
-2005-06-13  Jonathan Pryor <jonpryor at vt.edu>
-
-	* data/config.in: Fix generated XML.
-
-2005-06-13  Jonathan Pryor <jonpryor at vt.edu>
-
-	* scripts/Makefile.am: Add mono-shlib-cop.
-
-2005-06-09  Ben Maurer  <bmaurer at ximian.com>
-
-	* configure.in: Handle more gracefully if objdump or X isn't
-	there. Warn the user about possible breakage.
-
-2005-06-08  Ben Maurer  <bmaurer at ximian.com>
-
-	* configure.in: read the SONAME from libX11. This is the same
-	thing as will be used by a shared library, so it will really
-	work.
-
-	This will have us get libX11.so.6 rather than libX11.so.6.2.
-
-2005-06-07 Gonzalo Paniagua Javier <gonzalo at ximian.com>
-
-	* configure.in: make automake 1.9 happy about LARGE_FILES.
-
-2005-06-06  Jonathan Pryor  <jonpryor at vt.edu>
-
-	* configure.in: Add checks for mremap, remap_file_pages.
-
-2005-06-06  Ben Maurer  <bmaurer at ximian.com>
-
-	* mono.spec.in: Remove. This is horribly out of date. A real spec
-	file is generated in the release module.
-
-	* scripts/Makefile.am: Add mono-find-*
-
-	* scripts/mono-find-*.in: provides/requires stuff for rpm is now
-	done with monodis. This makes packaging easier as it doesn't
-	depend on the gac ind DESTDIR.
-
-	* configure.in: changes for the above
-
-2005-05-30 Gonzalo Paniagua Javier <gonzalo at ximian.com>
-
-	* configure.in: added test for SIOCGIFCONF.
-
-2005-05-26  Sebastien Pouliot  <sebastien at ximian.com> 
- 
-	* README.vsnet: Instructions about the VS.NET build.
-	* mono.sln: Mono solution file for VS.NET 2005.
-	* genmdesc.vcproj: Project file for genmdesc.
-	* libmono.vcproj: Project file for libmono.
-	* mono.vcproj: Project file for mono executable.
-
-2005-05-25  Ben Maurer  <bmaurer at ximian.com>
-
-	* configure.in: Do a test for libX11.so that really works :-).
-
-2005-05-22  Ben Maurer  <bmaurer at ximian.com>
-
-	* configure.in: Add config stuff for libsqlite{,3} and
-	libX11.
-
-	* data/config.in: Add dllmaps for above mentioned libs. This means
-	that the devel packages are not needed.
-
-2005-05-17  Zoltan Varga  <vargaz at freemail.hu>
-
-	* man/mono.1: Document the new MONO_DEBUG options.
-
-2005-05-16  Raja R Harinath  <rharinath at novell.com>
-
-	* configure.in (AC_OUTPUT): Add mono/arch/ia64/Makefile.
-
-2005-05-08  Ben Maurer  <bmaurer at ximian.com>
-
-	* scripts/Makefile.am (bin_SCRIPTS): monoresgen.exe is not
-	installed, therefore, don't make a script for it.
-
-2005-05-05  Zoltan Varga  <vargaz at freemail.hu>
-
-	* configure.in: Applied patch from Jakub Bogusz <qboosh at pld-linux.org>.
-	Fix library names on sparc-linux and alpha-linux.
-
-2005-05-04  Zoltan Varga  <vargaz at freemail.hu>
-
-	* runtime/Makefile.am: Pass the prefix to the mcs makefiles.
-
-2005-04-28  James Willcox  <james at ximian.com>
-
-	* man/mkbundle.1: add --config-dir flag
-
-2005-04-27  Raja R Harinath  <rharinath at novell.com>
-
-	* configure.in (AC_DISABLE_FAST_INSTALL): Set.
-
-2005-04-25  Ben Maurer  <bmaurer at ximian.com>
-
-	* configure.in: Version bumpage
-
-2005-04-25  Raja R Harinath  <rharinath at novell.com>
-
-	Fix #74692.
-	* configure.in ($mcsdir/build/config.make): Point RUNTIME and
-	ILDISASM to the in-tree versions of mono and monodis.  Propagate
-	value of INSTALL to mcs too.
-	* runtime/Makefile.am: Avoid passing RUNTIME and ILDISASM to each
-	sub-make, now that 'configure' sets up the 'mcs' tree.
-
-2005-04-23  Zoltan Varga  <vargaz at freemail.hu>
-
-	* doc: Remove unused directory.
-	
-	* configure.in: Remove --with-icu option to prevent people from using
-	it by mistake.
-
-2005-04-21  Raja R Harinath  <rharinath at novell.com>
-
-	* runtime/Makefile.am: Update.  Pass 'monodis-wrapper' as ILDISASM
-	to sub-makes.
-	(mcs-compileall): Verify the fixed-up dll too.
-	* runtime/monodis-wrapper.in: New file.
-	* configure.in (runtime/monodis-wrapper): Create.
-	($mcsdir/build/config.make): Don't be over-eager in the definition
-	and evaluation of '$exec_prefix'.
-
-2005-04-20  Rafael Teixeira <rafaelteixeirabr at hotmail.com>
-	* data/net_1_1/machine.config, data/net_2_0/machine.config: 
-	added ' explicit="true" strict="false" ' to system.web/compilation 
-	element as in MS. Part of fix for Bug #74671
-	
-2005-04-19  Jonathan Pryor  <jonpryor at vt.edu>
-
-	* configure.in: Add check for <sys/xattr.h>.
-	  Thanks to Daniel Drake <dsd at gentoo.org> for the patch.
-
-2005-04-18  Zoltan Varga  <vargaz at freemail.hu>
-
-	* configure.in: Applied another freebsd patch from Bill Middleton (flashdict at gmail.com).
-
-2005-04-16  Miguel de Icaza  <miguel at novell.com>
-
-	* configure.in (PTHREAD_POINTER_ID): Patch from Jonathan Pryor to
-	fix the Mono build on Solaris (bug #72818)
-
-2005-04-16  Bill Middleton  <flashdict at gmail.com>
-
-	* configure.in (PREVIEW): Allow --without-preview to work.
-	From #74615.
-
-2005-04-15  Zoltan Varga  <vargaz at freemail.hu>
-
-	* configure.in: Applied another freebsd patch from Bill Middleton (flashdict at gmail.com).
-
-2005-04-14  Raja R Harinath  <rharinath at novell.com>
-
-	* mono/Makefile.am (DIST_SUBDIRS): Add 'handles' directory.
-	* configure.in (AC_OUTPUT): Add back 'mono/handles' directory.
-
-2005-04-13  Raja R Harinath  <rharinath at novell.com>
-
-	* configure.in (AC_OUTPUT): Remove 'mono/handles' directory.
-
-2005-04-12 Gonzalo Paniagua Javier <gonzalo at ximian.com>
-
-	* configure.in: added checks for epoll().
-
-2005-04-12  Geoff Norton  <gnorton at customerdna.com>
-
-	* configure.in: Disable -O2 on PPC until #74562 is fixed.
-
-2005-04-11  James Willcox  <james at ximian.com>
-
-	* man/mkbundle.1: add --static option
-
-2005-04-11  Zoltan Varga  <vargaz at freemail.hu>
-
-	* configure.in: Applied some freebsd patch from Bill Middleton <flashdict at gmail.com>.
-
-2005-04-09  Zoltan Varga  <vargaz at freemail.hu>
-
-	* configure.in: Add --with-large-heap option to enable support for
-	GC heaps larger than 3GB. Hopefully fixes #73882.
-
-2005-04-08 Gonzalo Paniagua Javier <gonzalo at ximian.com>
-
-	* configure.in: define FD_SETSIZE=1024 on windows (the default is only
-	64). Re-add aio_* stuff. Shouldn't have removed it.
-
-2005-04-07 Gonzalo Paniagua Javier <gonzalo at ximian.com>
-
-	* configure.in: no more checks for aio_*.
-
-2005-04-05  Zoltan Varga  <vargaz at freemail.hu>
-
-	* configure.in: Fix isinf detection on solaris.
-
-2005-04-02  Raja R Harinath  <harinath at gmail.com>
-
-	* configure.in (pkg_config_path): Rename from PKG_PATH.  Fix build
-	with pkgconfig 0.16.0.
-
-2005-04-01  Zoltan Varga  <vargaz at freemail.hu>
-
-	* configure.in: Fix sigaltstack detection on solaris.
-
-2005-03-27  Raja R Harinath  <harinath at gmail.com>
-
-	* configure.in: Define mono_libdir using $(exec_prefix), seeing
-	that it uses .../lib.
-
-2005-03-26  Ben Maurer  <bmaurer at ximian.com>
-
-	* configure.in: Use mono_libdir rather than libdir in
-	config.make. This fixes confusion for amd builds in buildbuddy.
-
-	* configure.in, */Makefile.am: fix up lib/lib64 type stuff
-
-2005-03-24  Raja R Harinath  <rharinath at novell.com>
-
-	* configure.in (libgdiplus): Make more intuitive.
-	* runtime/Makefile.am (wrapper-config): Remove temporary file.
-	Update to change.
-
-2005-03-23  Raja R Harinath  <rharinath at novell.com>
-
-	Allow testing of System.Drawing with a libgdiplus snapshot.
-	* configure.in (libgdiplus): New --with-libgdiplus option.  Allow
-	the location of libgdiplus to be overridden.
-	* runtime/Makefile.am (wrapper-config): Override location of
-	libgdiplus if requested.
-
-2005-03-14  Raja R Harinath  <rharinath at novell.com>
-
-	* runtime/Makefile.am (clean_profiles): Remove.
-	(clean-local): Use $(build_profiles).
-	(install-local, uninstall-local): Don't override $(prefix).
-	(SUPPORT_FILES): New.  List of dependencies from ...
-	(all-local): ... here.  Use it.
-	(install-local): Depend on $(SUPPORT_FILES).
-
-2005-03-02  Zoltan Varga  <vargaz at freemail.hu>
-
-	* docs/aot-compiler.txt: Add some more documentation.
-
-2005-02-25  Raja R Harinath  <rharinath at novell.com>
-
-	* runtime/Makefile.am (centum_nunit_tests): Remove.  The
-	functionality has been moved to mcs/Makefile.
-	(test_select): Set ONLY_CENTUM_TESTS.
-
-Thu Feb 24 15:16:18 CET 2005 Paolo Molaro <lupus at ximian.com>
-
-	* configure.in: add a check for compiler support of the
-	tls_model sttribute.
-
-Mon Feb 21 17:14:34 CET 2005 Paolo Molaro <lupus at ximian.com>
-
-	* configure.in: don't imply that enabling ICU support is a good
-	thing to do.
-
-2005-02-21  Michal Moskal  <malekith at pld-linux.org>
-	    Raja R Harinath  <rharinath at novell.com>
-
-	* configure.in: Emit exec_prefix and libdir into mcs/build/config.make.
-
-2005-02-17  Raja R Harinath  <rharinath at novell.com>
-
-	* runtime/Makefile.am (cur_dir_cmd): New.  Use cygpath to get the
-	current directory in non-Cygwin form.
-	(PLATFORM_PATH_SEPARATOR): New.  $(PATH_SEPARATOR) has the "wrong"
-	value on cygwin. 
-	(mcs-compileall): Use them.
-
-2005-02-15  Raja R Harinath  <rharinath at novell.com>
-
-	* scripts/Makefile.am ($(bin_SCRIPTS)): Depend on Makefile, so
-	that it picks up any changes in $prefix.
-	($(bin2_SCRIPTS)): Likewise.
-
-2005-02-13  Zoltan Varga  <vargaz at freemail.hu>
-
-	* scripts/dtd2xsd: Remove generated file from SVN.
-
-2005-02-12  Cesar Lopez Nataren  <cnataren at novell.com>
-
-	* scripts/Makefile.am (bin_SCRIPTS): added mjs
-
-2005-02-12  Ben Maurer  <bmaurer at ximian.com>
-
-	* runtime/Makefile.am (centum_nunit_tests): Add corlib! Thanks to
-	nickd, miguel, et al. 
-
-2005-02-07  Zoltan Varga  <vargaz at freemail.hu>
-
-	* configure.in: Add -Wdeclaration-after-statement option to CFLAGS if
-	gcc supports it to weed out pre ISO C99 code.
-
-2005-02-07  Lluis Sanchez Gual  <lluis at novell.com>
-
-	* data/net_1_1/DefaultWsdlHelpGenerator.aspx:
-	* data/net_2_0/DefaultWsdlHelpGenerator.aspx: Don't use databinding where
-	not needed.
-
-2005-02-04  Zoltan Varga  <vargaz at freemail.hu>
-
-	* configure.in: Check for curses.h.
-
-2005-02-04 Gonzalo Paniagua Javier <gonzalo at ximian.com>
-
-	* configure.in: define SOLARIS_CURSES when compiling for *solaris.
-	* mono/metadata/console-io.c: <curses.h> is needed by term.h on solaris.
-
-2005-02-04  Raja R Harinath  <rharinath at novell.com>
-
-	* runtime/Makefile.am (wrapper-config): Elevated from being a test
-	support file called $(tmpinst)/config.
-	($(tmpinst)/bin/mono): Simplify.
-	(mcs-do-compiler-tests,mcs-compileall): Update.
-	* runtime/mono-wrapper.in: Use wrapper-config.
-	
-	* Makefile.am (DIST_SUBDIRS): Sync with $(SUBDIRS).
-
-	* runtime/Makefile.am (verify_profiles): Remove.
-	(mcs-compileall): Use $(build_profiles) directly.  It now works on
-	the net_2_0 profile too.
-
-2005-02-01  Raja R Harinath  <rharinath at novell.com>
-
-	* runtime/Makefile.am (test-support-files): New target.
-	(mcs-do-compiler-tests): Use it.
-	(mcs-compileall): Likewise.  Set MONO_PATH.  Remove
-	reference to #71963, since it's fixed, and it's breaking elsewhere.
-	Don't exit out on the first failing DLL.
-	($(tmpinst)/config): Update to changes in data/config.in.
-
-2005-01-31  Jonathan Pryor  <jonpryor at vt.edu>
-
-	* data/config.in: Add libraries msvcrt and MonoPosixHelper for use by
-	  Mono.Posix.dll.
-
-2005-01-31 Gonzalo Paniagua Javier <gonzalo at ximian.com>
-
-	* configure.in: check for term.h and termios.h
-
-2005-01-30  Zoltan Varga  <vargaz at freemail.hu>
-
-	* runtime/Makefile.am (mcs-compileall): Disable this for the 2.0
-	profile because of bug #71963.
-
-2005-01-28  Zoltan Varga  <vargaz at freemail.hu>
-
-	* runtime/Makefile.am (mcs-compileall): New test to compile all methods
-	in our assemblies.
-
-2005-01-25  Raja R Harinath  <rharinath at novell.com>
-
-	* runtime/Makefile.am ($(tmpinst)/config): New test support file.
-	Map 'MonoPosixHelper' to in-tree version.
-	($(tmpinst)/bin/mono): Use it.
-	(mcs-do-run-test-profiles): Use $(tmpinst)/bin/mono as the RUNTIME.
-
-2005-01-20  Jonathan Pryor  <jonpryor at vt.edu>
-
-	* runtime/Makefile.am (centum_nunit_tests): Add class/Mono.Posix and
-	  class/System, both of which pass all their unit tests.
-
-2005-01-20  Raja R Harinath  <rharinath at novell.com>
-
-	* runtime/Makefile.am (centum_nunit_tests): New.  List of NUnit
-	tests that are currently passing 100%.
-	(test_select): Run those on 'make check'.
-
-2005-01-20  Atsushi Enomoto  <atsushi at ximian.com>
-
-	* Makefile.am : removed nsys4cygwin.zip which has been 404 for a while.
-
-2005-01-19  Zoltan Varga  <vargaz at freemail.hu>
-
-	* Makefile.am (DIST_SUBDIRS): Distribute ikvm-native.
-
-2005-01-15  Zoltan Varga  <vargaz at freemail.hu>
-
-	* scripts/Makefile.am (bin_SCRIPTS): Remove whitespace after \.
-
-2005-01-13  Zoltan Varga  <vargaz at freemail.hu>
-
-	* configure.in Makefile.am: Resurrect ikvm-jni.
-
-	* ikvm-native: New directory which contains a copy of the 'native'
-	module in IKVM cvs.
-
-2005-01-05  Jonathan Pryor  <jonpryor at vt.edu>
-
-	* configure.in: Add check for <checklist.h>.
-
-2005-01-04  Jonathan Pryor  <jonpryor at vt.edu>
-
-	* configure.in: Add check for vsnprintf.
-
-2005-01-04  Raja R Harinath  <rharinath at novell.com>
-
-	* runtime/Makefile.am (TEST_SUPPORT_FILES): Add	$(tmpinst)/bin/mono.
-	($(tmpinst)/bin/mono): New.
-
-2005-01-03  Ben Maurer  <bmaurer at ximian.com>
-
-	* configure.in: Add mono-nunit to output
-	
-2005-01-03  Jonathan Pryor  <jonpryor at vt.edu>
-
-	* Makefile.am: Change build order so that support is built before runtime.
-	  This is primarily so that I don't have to wait N hours for mcs to finish
-	  building to find out if I broke the sparc build (again).
-
-2005-01-03  Jonathan Pryor  <jonpryor at vt.edu>
-
-	* configure.in: Add checks for getdomainname and setdomainname.
-
-2005-01-03  Jonathan Pryor  <jonpryor at vt.edu>
-
-	* configure.in: Add checks for <fstab.h> and <sys/vfstab.h>.
-
-2005-01-02  Zoltan Varga  <vargaz at freemail.hu>
-
-	* configure.in ikvm-jni Makefile.am: Remove ikvm-jni, since IKVM CVS
-	now includes its own version.
-
-2004-12-29  Duncan Mak  <duncan at ximian.com>
-
-	* man/monop.1: Add docs on the new "--search" flag.
-
-2004-12-28  Jonathan Pryor  <jonpryor at vt.edu>
-
-	* configure.in: Add header & function checks for MonoPosixHelper.
-
-2004-12-20  Raja R Harinath  <rharinath at novell.com>
-
-	* configure.in: Change from 'pax' format to 'ustar' format for the
-	tarfile, so that we can create packages on SuSE 9.0.
-
-2004-12-15 Gonzalo Paniagua Javier <gonzalo at ximian.com>
-
-	* configure.in: isinf can be a macro and the test from AC_CHECK_FUNCTION
-	#undefines it before testing...
-
-2004-12-15 Gonzalo Paniagua Javier <gonzalo at ximian.com>
-
-	* configure.in: check for ieeefp.h and isinf.
-
-2004-12-15  Raja R Harinath  <rharinath at novell.com>
-
-	* configure.in ($mcsdir/build/config.make): Use $mcsdir relative
-	to the $srcdir.  Fix definition of 'prefix'.
-
-2004-12-14  Raja R Harinath  <rharinath at novell.com>
-
-	* runtime/mono-wrapper.in (MONO_SHARED_DIR): Set.  Ensures that
-	state isn't shared between an installed runtime and the in-tree
-	runtime, and also ensure that both 'make check' and 'make
-	distcheck' can run in parallel.
-	* runtime/Makefile.am (clean-local): Remove the .wapi directory.
-
-2004-12-09  Raja R Harinath  <rharinath at novell.com>
-
-	* README: Update with details about the new build setup.
-
-2004-12-08  Raja R Harinath  <rharinath at novell.com>
-
-	* Makefile.am (get-monolite-latest): Update to new location of
-	bootstrap files in the mcs/ tree.
-
-2004-12-07  Raja R Harinath  <rharinath at novell.com>
-
-	* configure.in: Set 'tar-pax' option for automake-1.9.
-
-2004-12-07  Raja R Harinath  <rharinath at novell.com>
-
-	* runtime/Makefile.am (uninstall): New.
-
-2004-12-06  Zoltan Varga  <vargaz at freemail.hu>
-
-	* configure.in: Disable -Wcast-align on sparc.
-
-Mon Dec 6 15:00:53 CET 2004 Paolo Molaro <lupus at ximian.com>
-
-	* configure.in: add option to disable some features of
-	the runtime to create a smaller binary.
-
-2004-12-03  Raja R Harinath  <rharinath at novell.com>
-
-	* configure.in (ENABLE_NUNIT_TESTS): New.
-	* runtime/Makefile.am (check-local): Use it to disable nunit
-	tests.  Ensure that the test dlls are always built, however.
-
-2004-12-03  Raja R Harinath  <rharinath at novell.com>
-
-	* Makefile.am (dist-hook): Ensure we use the 'default' profile.
-	* mono/Makefile.am (HANDLES): New.  Disable 'handles' dir on Win32.
-	(SUBDIRS): Use it.  Move 'cil' before 'metadata'.
-	* runtime/Makefile.am (install-exec): Pass
-	RUNTIME_HAS_CONSISTENT_GACDIR to the mcs/ build.
-
-2004-12-01  Neale Ferguson <Neale.Ferguson at SoftwareAG-usa.com>
-
-	* configure.in : Add a flag for systems which pass parameters in
-	registers as well as the stack.
-
-2004-11-30  Raja R Harinath  <rharinath at novell.com>
-
-	* configure.in (AC_OUTPUT): Move runtime/Makefile to the end to
-	workaround a bug in automake 1.7.x.
-	* runtime/Makefile.am ($(symlinks)): Don't depend on config.status.
-
-2004-11-27  Miguel de Icaza  <miguel at ximian.com>
-
-	* configure.in: Removed support for configured-based bundles. 
-
-2004-11-26  Raja R Harinath  <rharinath at novell.com>
-
-	* runtime/Makefile.am ($(symlinks)): Depend on config.status too.
-	* configure.in (runtime/etc/mono/1.0/machine.config): Use custom
-	command to create.
-	(runtime/etc/mono/2.0/machine.config): Likewise.
-	* Makefile.am (get-monolite-latest): Update to new style of
-	handling the "basic" profile.
-
-2004-11-25  Raja R Harinath  <rharinath at novell.com>
-
-	* runtime/Makefile.am (all-local): Make mcs/ tree writeable if
-	necessary.
-	(distdir): New.  Using 'cygnus' option disables the automake rule.
-
-2004-11-25  Raja R Harinath  <rharinath at novell.com>
-
-	* runtime/Makefile.am (check-local): Use $(mkinstalldirs).
-
-2004-11-24  Raja R Harinath  <rharinath at novell.com>
-
-	* runtime/Makefile.am (AUTOMAKE_OPTIONS): Set to 'cygnus'. 
-	Prevent a redundant 'make all' pass during 'make check'.
-	(build_profiles): Rename from install_profiles.
-	(check_profiles): New.
-	(TEST_SUPPORT_FILES): Don't include 'gmcs' if we're not building
-	the .NET2.0 profile.
-	(all-local,check-local): Use them.
-	(install,install-exec,install-data): Override automake rules to
-	prevent a redundant 'make all' pass.
-	
-2004-11-23  Chris Toshok  <toshok at ximian.com>
-
-	* Makefile.am (bootstrap): echo -> @echo.
-
-2004-11-23  Raja R Harinath  <rharinath at novell.com>
-
-	Simplify 'make all' build.
-	* configure.in (mono_build_root, mono_runtime, mono_cfg_dir):
-	New AC_SUBSTed variables.
-	(runtime/mono-wrapper): New generated file.
-	(runtime/etc/mono/1.0/machine.config, runtime/etc/mono/2.0/machine.config):
-	New symlinks.
-	(AC_OUTPUT): Don't mention runtime/net_1_1 and runtime/net_2_0.
-	* Makefile.am (SUBDIRS): Remove '.'.
-	(tmpinst): Remove.
-	(get-monolite-latest): Update.
-	(populate-runtime-subdirs): Remove.
-	(all-local, check-local): Move rules related to building in the mcs/ tree ...
-	* runtime/Makefile.am: ... here.  Completely re-write file.
-	(install-exec-local): Transfer ownership of installing .exes and
-	.dlls to the Makefiles in the mcs/ tree.
-	(_tmpinst): Use tmpinst tree only during testing.
-	(SUBDIRS): Remove.
-	* runtime/mono-wrapper.in: New.  Template for generated file.
-	* runtime/net_1_1/Makefile.am, runtime/net_2_0/Makefile.am: Remove.
-
-2004-11-22  Raja R Harinath  <rharinath at novell.com>
-
-	* Makefile.am (bootstrap): Add a transitional target.
-
-2004-11-19  Raja R Harinath  <rharinath at novell.com>
-
-	Integrate bootstrap build into 'make all'.  Most of the bootstrap
-	targets are gone.
-	* Makefile.am (SUBDIRS): Build current directory before 'runtime'.
-	(tmpinst): Change location.
-	(all-local): New.  Just invokes the build in mcs.
-	(check-local): New.  Invokes 'run-test-profiles' in mcs.
-	(get-monolite-latest): Update.  Move the unpacking code here,
-	since 'monolite-bootstrap' is no more.
-	(mcs-do-full-build): Don't set PATH.
-	(tmpinst-dir-contents): Remove mcs.
-	($(tmpinst)/bin/mcs): Now used only during 'make check'.
-	($(tmpinst)/bin/mono): Don't set MONO_PATH.
-	* README: Update to changes.
-
-2004-11-18  Zoltan Varga  <vargaz at freemail.hu>
-
-	* configure.in: Disable static linking of mono if --disable-static is
-	given. Fixes #69466.
-
-2004-11-15  Martin Baulig  <martin at ximian.com>
-
-	* runtime/net_2_0/Makefile.am (gac_assemblies_list): Added Mono.C5.
-
-Fri Nov 12 17:56:26 CET 2004 Paolo Molaro <lupus at ximian.com>
-
-	* configure.in, mono/mini/Makefile.am: control static
-	linking of the mono binary with a configure option.
-
-2004-11-12  Jonathan Pryor <jonpryor at vt.edu>
-
-	* configure.in: Check for `struct dirent' members which don't
-	  exist across all Unix platforms.
-
-2004-11-08  Jonathan Pryor <jonpryor at vt.edu>
-
-	* configure.in: Add new function/header/type checks for use by
-	  MonoPosixHelper (the support directory).
-
-2004-11-08  Raja R Harinath  <rharinath at novell.com>
-
-	* configure.in (mcs_topdir, mcs_topdir_from_srcdir): New 'subst'ed
-	variables.  Used to support both an in-tree mcs/ and a sibling
-	mcs/ directory.
-	* Makefile.am (mcs_topdir): Remove.
-	(dist-hook): Distribute mcs/ as a subdirectory.
-	* runtime/Makefile.am ($(monoone_DATA) $(monotwo_DATA) $(monobins_DATA)):
-	Use mcs_topdir and mcs_topdir_from_srcdir.
-	* runtime/net_1_1/Makefile.am (mscorlib.dll $(gac_assemblies) $(mdb_files)): 
-	Likewise.
-	(all-local): Depend on $(mdb_files) too.
-	* runtime/net_2_0/Makefile.am: Likewise.
-	
-2004-11-05  Zoltan Varga  <vargaz at freemail.hu>
-
-	* runtime/net_2_0/Makefile.am (install-data-local): 
-	* runtime/net_1_1/Makefile.am (install-data-local): Applied patch
-	from Götz Waschk (waschk at informatik.uni-rostock.de). Make this work 
-	with DESTDIR.
-
-2004-10-31  Zoltan Varga  <vargaz at freemail.hu>
-
-	* configure.in: Fix up --with-jit=no so it actually works. Fixes 
-	#61320.
-
-2004-10-29 Gonzalo Paniagua Javier <gonzalo at ximian.com>
-
-	* man/mono.1: documented MONO_THREADS_PER_CPU.
-
-2004-10-29  Zoltan Varga  <vargaz at freemail.hu>
-
-	* configure.in: Add INCLUDED_LIBGC automake conditional.
-
-2004-10-24  Jonathan Pryor <jonpryor at vt.edu>
-
-	* man/mono.1: Add documentation for the MONO_TRACE environment variable.
-
-2004-10-14  Joe Shaw  <joeshaw at novell.com>
-
-	* man/mono.1: Fix the syntax of the M: trace syntax
-
-2004-10-10  Zoltan Varga  <vargaz at freemail.hu>
-
-	* configure.in: Add some checks for cygwin weirdness.
-
-2004-10-08  Zoltan Varga  <vargaz at freemail.hu>
-
-	* support/Makefile.am (libMonoPosixHelper_la_SOURCES): Do not build
-	zlib_macros if zlib.h is not found.
-
-	* configure.in: Add check for zlib.h.
-
-2004-09-28  Neale Ferguson <Neale.Ferguson at SoftwareAG-usa.com>
-
-	* mini-s390.c: Fix AND_IMM/OR_IMM/DIV_IMM/REM_IMM
-
-2004-09-28  Raja R Harinath  <rharinath at novell.com>
-
-	* Makefile.am ($(tmpinst)/bin/pedump): New.
-	(mcs-do-run-test-profiles): Depend on it.
-
-2004-09-27  Raja R Harinath  <rharinath at novell.com>
-
-	* Makefile.am (mono-do-testjit): New target, unused for now.  Runs
-	the mono testsuite in tests/.
-	(tmpinst-dir): Create etc/mono/2.0.
-	($(tmpinst)/bin/ilasm, $(tmpinst)/etc/mono/2.0/machine.config): New.
-
-2004-09-21 Neale Ferguson <Neale.Ferguson at SoftwareAG-usa.com>
-
-	* configure.in: Cater for S/390 on Linux
-
-2004-09-21    <vargaz at freemail.hu>
-
-	* configure.in: Link with ole32 on windows.
-
-2004-09-20  Jackson Harper  <jackson at ximian.com>
-
-	* support/map.c/h: Add poll events map functions. Use values
-	instead of names for defines.
-	
-2004-09-17  Martin Baulig  <martin at ximian.com>
-
-	* Makefile.am (mcs-do-compiler-tests): Reverted Raja's latest
-	change in this target.
-
-2004-09-14  Raja R Harinath  <rharinath at novell.com>
-
-	* Makefile.am (mcs-do-full-build): Pass NO_SIGN_ASSEMBLIES=yes to
-	reduce the number of passes.  We will get the assemblies signed in
-	the 'populate-runtime-subdir' phase.
-	(mcs-do-run-test-profiles): Rename from mcs-do-run-tests.  Use
-	'test-profiles' to test all profiles.
-	(mcs-do-compiler-tests): Use 'compiler-tests' target in mcs/.
-	(bootstrap-check): Update.
-	* runtime/Makefile.am ($(monoone_DATA) $(monotwo_DATA) $(monobins_DATA)): 
-	Simplify.
-
-2004-09-10  Zoltan Varga  <vargaz at freemail.hu>
-
-	* Makefile.am (populate-runtime-subdir): Avoid -path argument to find
-	since it is not supported on solaris.
-
-2004-09-03  Martin Baulig  <martin at ximian.com>
-
-	* Makefile.am (bootstrap-world): New target.
-
-2004-09-02  Martin Baulig  <martin at ximian.com>
-
-	* runtime/net_1_1/Makefile.am (install-data-local): Install
-	mscorlib.dll.mdb into $(corlibdir).
-
-	* runtime/net_2_0/Makefile.am: Likewise.
-
-2004-08-30  Zoltan Varga  <vargaz at freemail.hu>
-
-	* scripts/mcs.in: Remove obsolete comment.
-
-2004-08-27  Lluis Sanchez Gual  <lluis at novell.com>
-
-	* data/net_1_1/DefaultWsdlHelpGenerator.aspx: Little fix.
-	* data/net_2_0/DefaultWsdlHelpGenerator.aspx: Added information about
-	  basic profile compliance.
-	* data/net_2_0/machine.config: Use 2.0 assembly versions.
-
-2004-08-26  Raja R Harinath  <rharinath at novell.com>
-
-	* Makefile.am (mcs-do-run-test): Depend on '$(tmpinst)/bin/mbas'.
-	($(tmpinst)/bin/mbas): Create temporary wrapper file, so that the
-	testcases pick the built 'mbas.exe'.
-
-2004-08-17  Zoltan Varga  <vargaz at freemail.hu>
-
-	* mono/os/gc_wrapper.h: Only use thread local alloc if using the included libgc, since the
-	stock one has broken headers.
-
-	* configure.in (PLATFORM_WIN32): Make the included libgc the default on windows.
-
-2004-08-17  Dick Porter  <dick at ximian.com>
-
-	* configure.in: Correct intl library for FreeBSD and OpenBSD.
-	Fixes bug 62884, patch by Tom McLaughlin (tmclaugh at sdf.lonestar.org).
-
-2004-08-16  Zoltan Varga  <vargaz at freemail.hu>
-
-	* configure.in: Set new automake variable LIBGC_STATIC_LIBS.
-
-2004-08-14  Zoltan Varga  <vargaz at freemail.hu>
-
-	* configure.in (HAVE_KW_THREAD): Pass USE_COMPILER_TLS to libgc if
-	__thread works.
-
-2004-08-11  Zoltan Varga  <vargaz at freemail.hu>
-
-	* configure.in: Fix __thread test.
-
-2004-08-07  Zoltan Varga  <vargaz at freemail.hu>
-
-	* configure.in: Add proper checks for the 'undefined reference to '__tls_get_addr' problem.
-
-2004-08-06  Geoff Norton  <gnorton at customerdna.com>
-
-	* configure.in: Add a kqueue check
-
-2004-08-03  Neale Ferguson <Neale.Ferguson at SoftwareAG-usa.com>
-
-	* configure.in: Enable S/390 64-bit JIT.
-
-2004-07-31  Zoltan Varga  <vargaz at freemail.hu>
-
-	* configure.in: Enable AMD64 JIT.
-
-2004-07-30  Martin Baulig  <martin at ximian.com>
-
-	* Makefile.am: The symbol writer is now called
-	Mono.CompilerServices.SymbolWriter.dll.	
-
-2004-07-30  Raja R Harinath  <rharinath at novell.com>
-
-	* runtime/Makefile.am (monoone_DATA): Add mcs.exe.config.
-	(gmcs_exe): Add gmcs.exe.config.
-	($(monoone_DATA) $(monotwo_DATA) ...): Add location of the .config
-	files too.
-
-2004-07-29  Lluis Sanchez Gual  <lluis at novell.com>
-
-	* Makefile.am: Copy machine.config in the correct _tmpinst subdirectory.
-
-2004-07-28  Lluis Sanchez Gual  <lluis at novell.com>
-
-	* configure.in: Added data/net_1_1 and data/net_2_0 to the build.
-	* data/Makefile.am: Removed installation of machine.config and
-	  DefaultWsdlHelpGenerator.aspx. Those now are in a version-specific
-	  directory.
-	* data/net_1_1/Makefile.am, data/net_2_0/Makefile.am: new makefiles for
-	  installing 1.1 and 2.0 makefiles.
-	* runtime/net_1_1/Makefile.am, runtime/net_2_0/Makefile.am: Install mscorlib
-	  at the correct version specific directory.
-
-2004-07-27  John Merryweather Cooper <john_m_cooper at yahoo.com>
-	* configure.in: Disable __thread test (TLS) for FreeBSD as
-	it succeeds on FreeBSD 5.x when it should fail.  Fix pthread
-	library detection for FreeBSD 4.x since pthread is embedded
-	in libc_r on this platform.  Fix some typos in my host
-	regexes for freebsd.
-
-2004-07-23  Dick Porter  <dick at ximian.com>
-
-	* configure.in: Changes for FreeBSD thread support by John
-	Merryweather Cooper <john_m_cooper at yahoo.com>.
-
-2004-07-15  Jackson Harper  <jackson at ximian.com>
-
-	* man/gacutil.1: MONO_GAC_PREFIX not MONO_GAC_PATH
-	
-2004-07-12  Massimiliano Mantione  <massi at ximian.com>
-
-	* docs/abc-removal.txt: Updated documentation for ABC removal.
-
-2004-07-12  Massimiliano Mantione  <massi at ximian.com>
-
-	* mono/mini/abcremoval.c: Rewritten most of ABC removal.
-	* mono/mini/abcremoval.h: Rewritten most of ABC removal.
-	* mono/mini/build_relations_propagation_table.pl: Deleted (unneeded after the rewrite).
-	* mono/mini/propagated_relations_table.def: Deleted (unneeded after the rewrite).
-
-2004-07-03  Zoltan Varga  <vargaz at freemail.hu>
-
-	* configure.in: Add --with-tls option to replace the misnamed 
-	--with-nptl option.
-
-2004-07-02  Raja R Harinath  <rharinath at novell.com>
-
-	* Makefile.am (mcs-do-basic-build, mcs-do-short-build):
-	Pass NO_SIGN_ASSEMBLY=yes to sub-make.
-	($(tmpinst)/bin/mono) [PLATFORM_WIN32]: Make it work.
-
-2004-07-02  Zoltan Varga  <vargaz at freemail.hu>
-
-	* man/mono.1: Added 'aot' to trace options.
-
-2004-06-30  Zoltan Varga  <vargaz at freemail.hu>
-
-	* configure.in: Fix trunc check + add SPARC64 defines.
-
-2004-06-29  Jackson Harper  <jackson at ximian.com>
-
-	* man/gacutil.1: Update man with new command line options.
-	
-2004-06-29  Raja R Harinath  <rharinath at novell.com>
-            Atsushi Enomoto  <atsushi at ximian.com>
-
-	* runtime/net_1_1/Makefile.am (GAC_ROOT_DIR): Renamed from GAC_DIR.
-	(GAC_DIR): New define that doesn't include $(DESTDIR).
-	(install-data-local,uninstall-local): Use them.  Use in-tree mono
-	runtime, not the installed one.
-
-2004-06-29  Raja R Harinath  <rharinath at novell.com>
-
-	* runtime/Makefile.am (gmcs_exe): New.  Set only if not W32.
-	(monotwo_DATA): Use it.
-	From Atsushi Enomoto.
-
-2004-06-24  Raja R Harinath  <rharinath at novell.com>
-
-	* runtime/net_2_0/Makefile.am (gac_assemblies_list): Put back
-	ICSharpCode.SharpZipLib, not that it has a different version.
-
-2004-06-24  Raja R Harinath  <rharinath at novell.com>
-
-	* Makefile.am (MCS_DIRS, MCS_FILES): Add back Mono.CSharp.Debugger.
-	(tmpinst-dir-contents, $(tmpinst)/bin/mono.bat): Remove mono.bat
-	in W32.  Use 'mono' and 'mcs' in W32 too.
-	(bootstrap) [PLATFORM_WIN32]: Back to single stage bootstrap.
-	* runtime/net_2_0/Makefile.am (gac_assemblies_list): Don't mention
-	nunit.*, IBM.Data.DB2, ICSharpCode.SharpZipLib.
-	Fix for #60443, the GAC .DLL-Hell.
-
-2004-06-22  Raja R Harinath  <rharinath at novell.com>
-
-	* Makefile.am (bootstrap) [PLATFORM_WIN32]: Make two-stage.
-
-2004-06-18  Jackson Harper  <jackson at ximian.com>
-
-	* man/mono.1: Add MONO_LOG_LEVEL and MONO_LOG_MASK. Add
-	instructions on setting multiple mask values.
-		
-Fri Jun 18 19:39:09 CEST 2004 Paolo Molaro <lupus at ximian.com>
-
-	* Makefile.am: process data before runtime, so the config file is
-	installed and gacutil has a chance to work (finding symlink).
-
-2004-06-18  Raja R Harinath  <rharinath at novell.com>
-
-	* runtime/Makefile.am ($(monoone_DATA) $(monotwo_DATA) $(monobins_DATA)): 
-	Test if files exist in the mcs/ tree before creating symlinks.
-	Remove symlinks before creating them again.
-	* runtime/net_1_1/Makefile.am (mscorlib.dll $(gac_assemblies)): Likewise.
-	* runtime/net_2_0/Makefile.am (mscorlib.dll $(gac_assemblies)): Likewise.
-
-2004-06-18  Raja R Harinath  <rharinath at novell.com>
-
-	* scripts/Makefile.am (REWRITE): New.  Common rewriting 'sed' command.
-	(bin_SCRIPTS): Unify all the script generating rules into one.
-
-2004-06-16  Raja R Harinath  <rharinath at novell.com>
-
-	* Makefile.am (bootstrap) [PLATFORM_WIN32]: Open code.  Don't
-	build and populate net_2_0 profile.
-	(populate-runtime-subdir): Make into subroutine that takes list of
-	profiles to populate.
-	(faststrap): Update.
-	(MCS_DIRS, MCS_FILES, MONO_CSHARP_DEBUGGER_DIR,	MONO_CSHARP_DEBUGGER_FILE): 
-	Avoid automake conditional/+= problems.
-	(populate-runtime-subdir): Rewrite sanity check.
-
-2004-06-16  Raja R Harinath  <rharinath at novell.com>
-
-	Include prototype completely-untested 'make bootstrap' support for W32.
-	* Makefile.am (bootstrap): Define to fasterstrap for W32.
-	(MCS_DIRS, MCS_FILES): Don't refer to Mono.CSharp.Debugger in W32.
-	(tmpinst-dir): Change sub-make invoke to ...
-	(tmpinst-dir-contents): ... this.  Build 'mono.bat' in W32 instead
-	of 'mono' and 'mcs'.
-	($(tmpinst)/bin/mono.bat): New.
-
-2004-06-15  Dick Porter  <dick at ximian.com>
-
-	* configure.in: Check for struct ip_mreqn and struct ip_mreq on
-	windows too.  Fixes bug 55040.
-
-Mon Jun 14 18:38:34 CEST 2004 Paolo Molaro <lupus at ximian.com>
-
-	* configure.in: better explain that --with-nptl is not related to
-	NPTL, but to __thread support. Set sigaltstack support to off by
-	default.
-
-2004-06-12  Raja R Harinath  <harinath at acm.org>
-
-	* Makefile.am (populate-runtime-subdir): Add _tmpinst directory
-	to the PATH.
-
-2004-06-11  Jackson Harper  <jackson at ximian.com>
-
-	* runtime/net_2_0/Makefile.am:
-	* runtime/net_1_1/Makefile.am: Remove signing patches
-	
-2004-06-11  Jackson Harper  <jackson at ximian.com>
-
-	* man/mono.1: Add documentation for MONO_GAC_PREFIX.
-	* runtime/net_2_0/Makefile.am: 
-	* runtime/net_1_1/Makefile.am: Sign assemblies before
-	installing. Do not sign ziplib, npgsql, or nunit assemblies. Sign mscorlib.
-	
-2004-06-11  Raja R Harinath  <rharinath at novell.com>
-
-	* Makefile.am (populate-runtime-subdir): New target.  Does a
-	controlled "make install" in the 'mcs/' directory to populate the
-	'runtime' directory.
-	(fasterstrap): Use it.
-
-2004-06-10  Raja R Harinath  <rharinath at novell.com>
-
-	* runtime/Makefile.am ($(monoone_DATA),$(monotwo_DATA),$(monobins_DATA)):
-	Don't copy from prefix.  Use $(LN_S) to point to the mcs/ tree.
-	* runtime/net_1_1/Makefile.am (mscorlib.dll,$(gac_assemblies)): 
-	Use $(LN_S) to point to the mcs/ tree, rather than copying.
-	* runtime/net_2_0/Makefile.am (mscorlib.dll,$(gac_assemblies)): Likewise.
-
-2004-06-10  Raja R Harinath  <rharinath at novell.com>	
-
-	Support the new assembly signing setup in mcs/.
-	* Makefile.am (mcs-do-basic-build): Pass 'USE_BOOT_COMPILE' to sub-makes.
-	($(tmpinst)/etc/mono/machine.config): New target.
-	(tmpinst-dir.stamp): Remove and rewrite into ...
-	($(tmpinst)/bin/mcs): ... this and ...
-	($(tmpinst)/bin/mono): ... this.  Update to use the in-tree machine.config.
-	(tmpinst-dir): Rewrite to invoke above $(tmpinst)/... targets directly.
-	* configure.in (AC_PROG_LN_S): New check to define $(LN_S).
-	
-Thu Jun 3 14:39:17 CEST 2004 Paolo Molaro <lupus at ximian.com>
-
-	* configure.in: libc setting for NetBSD (patch from recht at netbsd.org).
-
-2004-06-01  Raja R Harinath  <rharinath at novell.com>
-
-	* Makefile.am (bootstrap,faststrap,fasterstrap): Refactor.
-	Fix 'faststrap' to be corlib-version-change-safe.
-	(one-stage-strap,two-stage-strap,three-stage-strap): Remove.
-	(monolite-bootstrap): Update.
-
-2004-05-31  Gonzalo Paniagua Javier <gonzalo at ximian.com>
-
-	* configure.in: fixlets for windows.
-
-2004-05-29  Zoltan Varga  <vargaz at freemail.hu>
-
-	* configure.in: export CC instead of passing it to libgc/configure.
-
-2004-05-28  Duncan Mak  <duncan at ximian.com>
-
-	* runtime/Makefile.am: 
-	* scripts/Makefile.am: Include mono-find-provides and
-	mono-find-requires.
-	
-	* scripts/mono-find-provides.in:
-	* scripts/mono-find-requires.in: New wrapper scripts.
-
-2004-05-27  Zoltan Varga  <vargaz at freemail.hu>
-
-	* configure.in: Pass CC to libgc configure.
-
-2004-05-27  Gert Driesen (drieseng at users.sourceforge.net)
-
-	* monowiz.win32.nsi: normalized line-endings to unix (LF)
-
-2004-05-27  Gert Driesen (drieseng at users.sourceforge.net)
-
-	* monowiz.win32.nsi: do not include mono subdirectory in
-	MonoConfigDir registry key, to match batch files
-
-2004-05-26  Gonzalo Paniagua Javier <gonzalo at ximian.com>
-
-	* data/DefaultWsdlHelpGenerator.aspx: fixed querystring attribute
-	values. Now they are URlEncoded.
-
-	* data/browscap.ini.gz: updated.
-
-2004-05-26  Raja R Harinath  <rharinath at novell.com>
-
-	* Makefile.am (mcs-do-basic-build): No need to set MCS here.
-	* runtime/net_1_1/Makefile.am (gac_assemblies_list): Update to
-	reflect new names for nunit.util and nunit.framework.  Add
-	nunit.core.
-	* runtime/net_2_0/Makefile.am (gac_assemblies_list): Likewise.
-
-2004-05-25 Ben Maurer  <bmaurer at users.sourceforge.net>
-
-	* config.h.in: remove
-
-2004-05-25 18:30 CET Patrik Torstensson <totte at hiddenpeaks.com>
-
-	* configure.in: Check for trunc instead of truncl (HAVE_TRUNC)
-
-2004-05-21  Gonzalo Paniagua Javier <gonzalo at ximian.com>
-
-	* Makefile.am:
-	* monowiz.win32.nsi: improved windows installer script.
-
-2004-05-21  Raja R Harinath  <rharinath at novell.com>
-
-	* README: Update to include instructions for the various new
-	bootstrap-like targets.
-
-2004-05-20  Raja R Harinath  <rharinath at novell.com>
-
-	* Makefile.am (get-monolite-latest, monolite-bootstrap):
-	New bootstrap targets to build from monolite.
-	Based on idea from Jaroslaw Kowalski <jaak at zd.com.pl>.
-
-2004-05-20  Raja R Harinath  <rharinath at novell.com>
-
-	* configure.in (AC_OUTPUT): Add tools/Makefile and
-	tools/locale-builder/Makefile.
-	* Makefile.am (SUBDIRS): Remove tools.
-	(DIST_SUBDIRS): Add 'tools'.
-	(bootstrap): Rewrite so that we get two new targets.
-	(faststrap): New two-stage build.
-	(fasterstrap): New one-stage build.
-
-2004-05-19  Jackson Harper  <jackson at ximain.com>
-
-	* tools/
-	* tools/Makefile.am: Add tools directory
-	* tools/locale-builder: Add the locale-builder tool, this tool is
-	not built by default as it is only needed by people that wish to
-	moidify culture data.
-	* Makefile.am: Add tools to build
-	
-Wed May 19 13:22:19 EDT 2004 Paolo Molaro <lupus at ximian.com>
-
-	* configure.in: make MacOSX default to use the included libgc.
-
-2004-05-18  Zoltan Varga  <vargaz at freemail.hu>
-
-	* configure.in: Get rid of -DMONO_USE_EXC_TABLES.
-
-2004-05-19  Raja R Harinath  <rharinath at novell.com>
-
-	* configure.in: Use proper autoconf idiom to pass additional
-	arguments to libgc/configure.
-	(PLATFORM_WIN32, NEED_LINK_UNLINK): Use three-argument AC_DEFINE.
-	* acconfig.h: Update to reflect changes.
-
-2004-05-17  Raja R Harinath  <rharinath at novell.com>
-
-	* Makefile.am (tmpinst-dir): Creates _tmpinst tree if
-	necessary. Move body ...
-	(tmpinst-dir.stamp): ... here.
-	(stage3): Don't remove _tmpinst tree.
-	(bootstrap-clean, bootstrap-check): New rules.  They run the
-	corresponding rules in the mcs/ tree.
-
-2004-05-14  Raja R Harinath  <rharinath at novell.com>
-
-	* Makefile.am: Revert unlogged unexplained changes.
-	(stage3): Make 'all-profiles' since the mono source tarball
-	carries all the net_2_0 preview dlls.
-
-2004-05-11  Jackson Harper  <jackson at ximian.com>
-
-	* runtime/net_1_1/Makefile.am:
-	* runtime/net_2_0/Makefile.am: cscompmgd.dll is lowercase now.
-	
-2004-05-10  Raja R Harinath  <rharinath at novell.com>
-
-	* Makefile.am (tmpinst-dir): Always add $tmpinst/lib to MONO_PATH.
-	Fix quoting of commands.
-
-2004-05-08  Gonzalo Paniagua Javier <gonzalo at ximian.com>
-
-	* monowiz.win32.nsi: some changes i made to build the 0.91 win32 setup
-	file.
-
-2004-05-07  Bernie Solomon  <bernard at ugsolutions.com>
-
-	* man/mono.1: mention MONO_EGD_SOCKET
-
-2004-05-07  Raja R Harinath  <rharinath at novell.com>
-
-	Goodbye 'fullbuild', hello 'bootstrap'.
-	* Makefile.am (bootstrap): New target for building from CVS.  New
-	improved version of 'fullbuild' -- does not install any files.
-	(fullbuild): Obsolete target.  Bootstraps and installs tree.
-	(mcs-tree-safe-build,xinstall-runtime,mcs-rest,remove-binaries):
-	Removed.
-	(stage1,stage1-mcs,stage1-mono,stage2,stage3)
-	(tmpinst-dir,tmpinst-runtime): New targets used to implement a
-	two-stage bootstrap.
-
-2004-05-05  Gonzalo Paniagua Javier <gonzalo at ximian.com>
-
-	* configure.in: scandir check is no longer needed.
-
-2004-05-05  Bernie Solomon  <bernard at ugsolutions.com>
-
-	* configure.in: set LIBC on HPUX
-
-2004-05-05  Zoltan Varga  <vargaz at freemail.hu>
-
-	* configure.in: Detect JNI headers in GNU classpath sources as well.
-
-2004-05-05  Raja R Harinath  <rharinath at novell.com>
-
-	* runtime/net_2_0/Makefile.am (install-data-local, uninstall-local): 
-	Only disable this if INSTALL_2_0 is disabled.
-
-2004-05-05  Gonzalo Paniagua Javier <gonzalo at ximian.com>
-
-	* data/DefaultWsdlHelpGenerator.aspx: add any cookie in the request to
-	the request we do for the actual web service.
-
-2004-05-04  Gonzalo Paniagua Javier <gonzalo at ximian.com>
-
-	* configure.in: check for SIGEV_THREAD being defined before checking
-	for AIO support. Fixes compilation under FreeBSD.
-
-2004-05-04  Raja R Harinath  <rharinath at novell.com>
-
-	* runtime/net_1_1/Makefile.am (mono_runtime): Use USE_JIT, not
-	JIT_SUPPORTED.
-	(install-data-local, uninstall-data-local): Run runtime with
-	libtool.
-	* runtime/net_2_0/Makefile.am: Likewise.
-	Report from Urs C Muff <umuff at quark.com>.
-
-2004-05-03  Jackson Harper  <jackson at ximian.com>
-
-	* man/gacutil.1: Basic man page for gacutil. This doesn't include
-	the new non-standard options yet.
-	
-2004-05-03  Gonzalo Paniagua Javier <gonzalo at ximian.com>
-
-	* data/machine.config: added version and publickeytoken.
-
-2004-05-01  Duncan Mak  <duncan at ximian.com>
-
-	* runtime/net_1_1/Makefile.am:
-	* runtime/net_2_0/Makefile.am (gac_assemblies_list): Add NUnit
-	dlls here.
-	(non_gac_assemblies): Removed, every thing is migrated over to gac_assemblies.
-	(EXTRA_DIST): Include only gac_assemblies.
-	(dist_assemblies_DATA): It's referring to $(non_gac_assemblies)
-	and that is no gone now. So remove as well.
-	($(non_gac_assemblies)): Bye bye.
-
-2004-05-01  Duncan Mak  <duncan at ximian.com>
-	
-	* runtime/net_1_1/Makefile.am (gac_assemblies_list): Add
-	System.Web.Services. Someone accidentally took the line out.
-
-2004-04-30  Jackson Harper  <jackson at ximian.com>
-
-	* runtime/net_1_1/Makefile.am:
-	* runtime/net_2_0/Makefile.am: These assemblies are signed now.
-	
-2004-04-30  Raja R Harinath  <rharinath at novell.com>
-
-	* runtime/net_1_1/Makefile.am (gac_assemblies_list): Remove .dll
-	suffix.
-	(gac_assemblies, non_gac_assemblies, corlibdir, dist_corlib_DATA): 
-	New variables.  Use Automake idioms.
-	(dist-hook): Remove.
-	(install-local, uninstall-local): Use mscorlib.dll from current
-	tree when running gacutil.
-	(mono_runtime): New variable.  Points to either JIT compiler or
-	interpreter.  
-	Report from Bernie Solomon <bernard at ugsolutions.com>
-	* runtime/net_2_0/Makefile.am: Likewise.
-	* runtime/Makefile.am (dist_monobins_DATA): Rename from
-	monobins_DATA.
-	(EXTRA_DIST): Remove.
-	* Makefile.am (fullbuild): Update to changes.
-
-2004-04-30  Jackson Harper  <jackson at ximian.com>
-
-	* runtime/net_2_0/Makefile.am:
-	* runtime/net_1_1/Makefile.am: /lib/mono/gac. Dont forget the mono.
-	
-2004-04-30  Duncan Mak  <duncan at ximian.com>
-
-	* runtime/Makefile.am ($(monobins_DATA)): Add sn.exe and sn.
-	
-2004-04-29  Duncan Mak  <duncan at ximian.com>
-
-	* scripts/gmcs.in: New file.
-
-	* scripts/Makefile.am (EXTRA_DIST, bin_SCRIPTS, CLEANFILES): Add
-	gmcs script.
-
-2004-04-29  Jackson Harper  <jackson at ximian.com>
-
-	* runtime/net_2_0/Makefile.am: install 2.0 corlib to its own
-	special little place.
-	
-2004-04-29  Zoltan Varga  <vargaz at freemail.hu>
-
-	* acconfig.h configure.in: Add check for scandir.
-
-2004-04-29  Raja R Harinath  <rharinath at novell.com>
-
-	* runtime/Makefile.am (monobins_DATA): Add gacutil.exe.
-	(SUBDIRS): Build here before building subdirs.
-	* runtime/net_1_1/Makefile.am (all-local): Copy
-	$(gac_assemblies_list) here.
-	(install-data-local): Install dll from $(srcdir).
-	(gacutil): Pick from current tree.
-	* runtime/net_2_0/Makefile.am: Likewise.
-
-	* Makefile.am (fullbuild): Update to changes in tree layout.
-	* runtime/net_1_1/Makefile.am (install-data-local): Allow empty
-	$(gac_assemblies_list).
-	($(gac_assemblies_list)): Pick libraries from 'class/lib/default',
-	not 'class/lib/net_1_1'.
-
-2004-04-28  Jackson Harper  <jackson at ximian.com>
-
-	* runtime/net_1_1/Makefile.am: Grab libs from proper directory, do
-	not assume gacutil is installed.
-	* runtime/net_2_0/Makefile.am: Do not assume gacutil is installed.
-	
-2004-04-28  Jackson Harper  <jackson at ximian.com>
-
-	* configure.in: Add new Makefile.amS
-	* runtime/Makefile.am: libs are now in profile dependant
-	directories.
-	* runtime/net_1_1/Makefile.am: Install and Uninstall the .net 1.1
-	libs to the GAC.
-	* runtime/net_2_0/Makefile.am: Install and Uninstall the .net 2.0
-	libs to the GAC.
-	* data/Makefile.am: cleanup browscap.ini
-	
-2004-04-28  Bernie Solomon  <bernard at ugsolutions.com>
-
-	* configure.in: reword message re EGD support
-	now it is there
-
-2004-04-28  Gonzalo Paniagua Javier <gonzalo at ximian.com>
-
-	* config.h.in:
-	* configure.in: added check for sys/aio.h. Also check the field name
-	in 'union sigval'.
-
-2004-04-28  Jackson Harper  <jackson at ximian.com>
-
-	* scripts/Makefile.am:
-	* scripts/gacutil.in: Add a gacutil script
-
-2004-04-26  Jackson Harper  <jackson at ximian.com>
-
-	* Makefile.am: Grab libraries from lib/default now.
-	* runtime/Makefile.am: Grab libraries from lib/default now.
-	
-2004-04-26  Bernie Solomon  <bernard at ugsolutions.com>
-
-	* configure.in: move setting of NO_VERSION_SCRIPT
-	until after checking for GNU ld
-
-2004-04-22  Urs C Muff <umuff at quark.com>
-
-	move .net assemblies from $prefix/bin/*.exe to $prefix/lib/*.exe on
-	windows/cygwin refactor .nsi to simply maintenance on script/batch
-	generation
-	* runtime/Makefile.am
-	* script/Makefile.am
-	* monowiz.win32.nsi
-
-2004-04-14  Raja R Harinath  <rharinath at novell.com>
-
-	* runtime/Makefile.am ($(assemblies_DATA)): Copy file into
-	$(srcdir).  Clean up output.
-	($(monobins_DATA)): Likewise.
-
-	* Makefile.am (mcs-tree-safe-build): Fix typo.
-
-2004-04-13  Sebastien Pouliot  <sebastien at ximian.com>
-
-	* configure.in: Added rules to check for getgrgid_r, getgrnam_r,
-	getpwnam_r, getpwuid_r, getresuid and setresuid.
-
-2004-04-13  Raja R Harinath  <rharinath at novell.com>
-
-	Allow 'make fullbuild' to work on non-srcdir build.
-	* Makefile.am (mcs_topdir): New variable.
-	(mcs-tree-safe-build,mcs-rest,remove-binaries): Work in non-srcdir
-	build.
-	(xinstall-runtime): Likewise.  Use $(libgc_dir) directly, don't
-	grep for 'libgc'.
-	(fullbuild): Make ordering dependencies explicit.
-	
-2004-04-12  Sachin Kumar <skumar1 at novell.com>
-
-	* Makefile.am: Added 'web' in SUBDIRS
-
-2004-04-07  Gonzalo Paniagua Javier <gonzalo at ximian.com>
-
-	* configure.in: don't try-run the tests for nptl and/or sigaltstack
-	if they are disabled in the command line.
-
-2004-04-05  Jackson Harper  <jackson at ximian.com>
-
-	* man/ilasm.1: Show /output instead of /out as the switch for
-	specifying output file names.
-
-2004-04-05  Zoltan Varga  <vargaz at freemail.hu>
-
-	* configure.in: Check for pthread_getattr_np and pthread_attr_get_np.
-
-2004-04-02  Gonzalo Paniagua Javier <gonzalo at ximian.com>
-
-	* config.h.in: added HAVE_GETPWUID_R
-	* configure.in: check for getpwuid_r.
-
-2004-03-23  Zoltan Varga  <vargaz at freemail.hu>
-
-	* configure.in: Fix GNU ld check.
-
-2004-03-22  Zoltan Varga  <vargaz at freemail.hu>
-
-	* configure.in: Use amd64 instead of x86-64 as directory name. Fixes
-	#55840.
-	
-	* configure.in: Disable -version-script if not using GNU ld. Fixes
-	#55910.
-
-	* configure.in: Speedup successful sigaltstack test.
-
-
-	* configure.in: don't try-run the tests for nptl and/or sigaltstack
-	if they are disabled in the command line.
-
-2004-04-05  Jackson Harper  <jackson at ximian.com>
-
-	* man/ilasm.1: Show /output instead of /out as the switch for
-	specifying output file names.
-
-2004-04-05  Zoltan Varga  <vargaz at freemail.hu>
-
-	* configure.in: Check for pthread_getattr_np and pthread_attr_get_np.
-
-2004-04-02  Gonzalo Paniagua Javier <gonzalo at ximian.com>
-
-	* config.h.in: added HAVE_GETPWUID_R
-	* configure.in: check for getpwuid_r.
-
-2004-03-23  Zoltan Varga  <vargaz at freemail.hu>
-
-	* configure.in: Fix GNU ld check.
-
-2004-03-22  Zoltan Varga  <vargaz at freemail.hu>
-
-	* configure.in: Use amd64 instead of x86-64 as directory name. Fixes
-	#55840.
-	
-	* configure.in: Disable -version-script if not using GNU ld. Fixes
-	#55910.
-
-	* configure.in: Speedup successful sigaltstack test.
-
-2004-03-21  Gonzalo Paniagua Javier <gonzalo at ximian.com>
-
-	* configure.in: this test for sigaltstack works.
-
-2004-03-20  Zoltan Varga  <vargaz at freemail.hu>
-
-	* configure.in: Disable sigaltstack test for now since it can hang.
-	
-	* configure.in: Add test for working sigaltstack.
-2004-03-16  Duncan Mak  <duncan at ximian.com>
-
-	* runtime/Makefile.am
-	(MakeCert.exe, cert2spc.exe, certmgr.exe, setreg.exe):
-	Remember to install them to mono/runtime.
-
-2004-03-14  Zoltan Varga  <vargaz at freemail.hu>
-
-	* configure.in: Enable JIT on sparc.
-
-2004-03-13  Martin Willemoes Hansen  <mwh at sysrq.dk>
-
-	* data/config.in: Changed libgtkhtml-3.0.so.2 to libgtkhtml-3.0.so to fix
-	breakage with gtkhtml-3.0.10
-
-2004-03-10  Zoltan Varga  <vargaz at freemail.hu>
-
-	* configure.in acconfig.h: Add a --with-sigaltstack option for platforms
-	where the sigaltstack based exception handling does not work.
-
-2004-03-08  Zoltan Varga  <vargaz at freemail.hu>
-
-	* configure.in acconfig.h: Add check for aintl function, which is the
-	solaris equivalent of truncl.
-
-2004-02-29  Zoltan Varga  <vargaz at freemail.hu>
-
-	* configure.in: Add check for GC_enable.
-	
-	* configure.in: Remove amd64/Makefile from AC_OUTPUT to fix build.
-
-2004-02-19  Zoltan Varga  <vargaz at freemail.hu>
-
-	* configure.in: Add proper support for --with-nptl for people who
-	have linking problems when it is enabled.
-
-2004-02-18  Zoltan Varga  <vargaz at freemail.hu>
-
-	* configure.in: Add test for __thread keyword and shared libs.
-
-2004-02-16  Zoltan Varga  <vargaz at freemail.hu>
-
-	* configure.in: Enable --with-nptl by default.
-
-2004-02-03  Zoltan Varga  <vargaz at freemail.hu>
-
-	* configure.in: Applied patch from Adrian Bunk (bunk at fs.tum.de). Fix
-	message for failed gethostbyname2_r check.
-
-Fri Jan 23 16:07:05 EST 2004 Paolo Molaro <lupus at ximian.com>
-
-	* configure.in, acconfig.h: check for truncl. Disable 
-	version script on MacOSX (see bug #51590 if a check becomes
-	necessary).
-
-Fri Jan 23 21:26:01 CET 2004 Paolo Molaro <lupus at ximian.com>
-
-	* configure.in, acconfig.h: added check for socklen_t.
-
-2004-01-22  Zoltan Varga  <vargaz at freemail.hu>
-
-	* Makefile.am: Do not install mono.pc on platforms without a JIT.
-
-2004-01-21  Zoltan Varga  <vargaz at freemail.hu>
-
-	* Makefile.am (remove-binaries): Get rid of non-portable >& construct.
-
-2003-12-29  Miguel de Icaza  <miguel at ximian.com>
-
-	* scripts/sn.in: Add sn script.
-
-2004-01-15  Zoltan Varga  <vargaz at freemail.hu>
-
-	* scripts/Makefile.am: Add al.exe.
-
-	* scripts/al.in: New file.
-
-	* runtime/Makefile.am: Add al.exe.
-
-2004-01-10  Jackson Harper <jackson at ximian.com>
-
-	* data/machine.config: Add trace handler (Trace.axd) add trace
-	configuration handlers.
-	
-2004-01-06  Martin Willemoes Hansen  <mwh at sysrq.dk>
-
-	* doc/books: Added books on Web Services and ASP.NET
-
-2004-01-04  Daniel Morgan <danielmorgan at verizon.net>
-
-	* monowiz.win32.nsi: update the NSIS installer script for windows
-	  to support NSIS 2.0 rc1 and Mono 0.29
-
-2003-12-22  Bernie Solomon  <bernard at ugsolutions.com>
-
-	* configure.in: missed in my last change
-
-	* samples/embed/testi.c: interpreter embedding example
-
-	* docs/embedded-api: add info on interpreter embedding
-
-Mon Dec 22 18:27:14 CET 2003 Paolo Molaro <lupus at ximian.com>
-
-	* configure.in, acconfig.h: use mach semaphores on darwin.
-
-2003-12-22  Bernie Solomon  <bernard at ugsolutions.com>
-
-	* Makefile.am: Create mint.pc
-	mint.pc.in: Added for embedding the interpreter
-
-2003-12-16  Martin Baulig  <martin at ximian.com>
-
-	* Makefile.am: In a Makefile.am, comments are started with `#' and
-	not with `dnl' - I must have been an idiot ...
-
-2003-12-10  Todd Berman <tberman at gentoo.org>
-
-	* configure.in: adding libicu url to the ICU: no message.
-
-2003-12-05  John Luke  <jluke at cfl.rr.com>
-
-	* data/config.in: new dll mapping entry for libgstreamer
-	
-2003-12-02  Atsushi Enomoto <ginga at kit.hi-ho.ne.jp>
-
-	* README: tiny fix ;-)
-
-2003-11-26  Zoltan Varga  <vargaz at freemail.hu>
-
-	* configure.in: Add -fno-strict-aliasing to CFLAGS.
-	
-	* configure.in: Applied patch from recht at netbsd.org. Avoid linking in
-	librt if not neccesary.
-
-2003-11-24  Zoltan Varga  <vargaz at freemail.hu>
-
-	* configure.in: Fix signbit check. Fixes #51315.
-
-2003-11-20  Jackson Harper <jackson at ximian.com>
-
-	* data/machine.config: Add OutputCacheModule
-	
-2003-11-19  Jackson Harper <jackson at ximian.com>
-
-	* doc/web/team.xml: New email address and job description
-	* doc/web/team/jackson.png: Picture of me debugging...seems appropriate
-	
-2003-11-14  Jackson Harper <jackson at ximian.com>
-
-	* Makefile.am: delete mscorlib.dll
-	
-2003-11-12 Jackson Harper <jackson at ximian.com>
-
-	* Makefile.am: corlib is now named mscorlib.dll
-	
-2003-11-12  Zoltan Varga  <vargaz at freemail.hu>
-
-	* configure.in acconfig.h: Add check for signbit, which is missing in
-	FreeBSD 4.x.
-
-2003-11-07  Zoltan Varga  <vargaz at freemail.hu>
-
-	* configure.in: Remove debugging junk accidently checked in.
-	
-	* configure.in: Add new --with-nptl option to enable NPTL only
-	features since auto-detection is not reliable.
-
-	* autogen.sh: Fix previous patch and silence noisy GNU which.	
-
-2003-11-07  Bernie Solomon  <bernard at ugsolutions.com>
-
-	* autogen.sh: tweak glibtool check so it works
-	if which doesn't set return code properly
-
-2003-11-07  Zoltan Varga  <vargaz at freemail.hu>
-
-	* autogen.sh: Silence noisy GNU which.
-	
-	* autogen.sh: Applied patch from Peter Teichman (peter at ximian.com). 
-	Use 'glibtool' instead of 'libtool' on OSX. 
-
-2003-11-06  Zoltan Varga  <zovarga at ws-zovarga2>
-
-	* mono/benchmark/pinvoke.cs: New benchmark for testing the performance
-	of the managed/unmanaged boundary.
-
-2003-11-06  Zoltan Varga  <vargaz at freemail.hu>
-
-	* configure.in acconfig.h: Add check for __thread keyword in gcc.
-
-2003-10-29  Dick Porter  <dick at ximian.com>
-
-	* man/mono.1: Document MONO_EXTERNAL_ENCODINGS variable
-
-2003-10-16  Miguel de Icaza  <miguel at ximian.com>
-
-	* man/mono.1: Document new --trace options
-
-2003-10-13  Bernie Solomon  <bernard at ugsolutions.com>
-
-	* configure.in: add hppa support (64bit only)
-	make solaris build work with Forte compiler
-
-2003-10-13  Zoltan Varga  <vargaz at freemail.hu>
-
-	* configure.in: Added check for pthread_attr_setstacksize.
-
-	* mono/tests/ChangeLog: New file.
-	
-2003-10-13  Zoltan Varga  <vargaz at freemail.hu>
-
-	* mono/tests/Makefile.am: Link the tests with the test driver program
-	used for the mini tests.
-
-2003-10-10  Zoltan Varga  <vargaz at freemail.hu>
-
-	* mono/tests/libtest.c (mono_test_marshal_delegate): Added test for
-	stdcall calling convention.
-
-2003-10-09  Dick Porter  <dick at ximian.com>
-
-	* acconfig.h:
-	* configure.in: Check for ICU availability
-
-2003-10-09  Bernie Solomon  <bernard at ugsolutions.com>
-
-	* mono/tests/libtest.c: fix after merge of pinvoke2.cs
-
-2003-10-07  Bernie Solomon  <bernard at ugsolutions.com>
-
-	* mono/tests/Makefile.am mono/tests/libtest.c
-	mono/tests/pinvoke18.cs: new test for bool marshalling.
-
-2003-10-07  Bernie Solomon  <bernard at ugsolutions.com>
-
-	* mono/scripts/Makefile.am mono/scripts/*.in: fix
-	managed .exe paths so they are found under cygwin.
-
-2003-10-07  Zoltan Varga  <vargaz at freemail.hu>
-
-	* mono/tests/pinvoke2.cs mono/tests/libtest.c: Fix array of structs
-	test.
-
-2003-10-06  Bernie Solomon  <bernard at ugsolutions.com>
-
-	* mono/tests/pinvoke2.cs mono/tests/pinvoke11.cs 
-	mono/tests/libtest.c: Add more pass by value struct
-	tests for platforms with more complex calling conventions 
-	(Sparc V9, HPPA 64 bit).
-
-2003-10-06  Zoltan Varga  <vargaz at freemail.hu>
-
-	* mono/tests/pinvoke2.cs mono/tests/libtest.c: Add array of structs
-	marshalling test.
-
-2003-10-04  Bernie Solomon  <bernard at ugsolutions.com>
-
-	* mono/tests/libtest.c: remove warnings except
-	"no previous prototype"
-
-2003-10-03  Bernie Solomon  <bernard at ugsolutions.com>
-
-	* mono/tests/libtest.c: (test_lpwstr_marshal) remove undefined
-	behaviour of increment, (mono_test_marshal_char) = should be ==
-
-2003-09-30  Zoltan Varga  <vargaz at freemail.hu>
-
-	* mono/tests/remoting1.cs: Added test for interface casts on
-	TransparentProxies.
-
-2003-09-24  Bernie Solomon  <bernard at ugsolutions.com>
-
-        * mono/tests/pinvoke*.cs, delegate4.cs, marshal10.cs, marshal4.cs
-          marshal5.cs: remove .so from DllImport of libtest to aid portability.
-
-2003-09-08  Zoltan Varga  <vargaz at freemail.hu>
-
-	* configure.in: Added check for valgrind headers.
-
-2003-09-03  Zoltan Varga  <vargaz at freemail.hu>
-
-	* Makefile.am: Use $(MAKE) in even more places. Patch by Bernie Solomon
-	(bernard at ugsolutions.com).
-	
-2003-08-27  Zoltan Varga  <vargaz at freemail.hu>
-
-	* Makefile.am: Use $(MAKE) instead of make. Patch by Bernie Solomon
-	(bernard at ugsolutions.com).
-
-2003-08-25  Zoltan Varga  <vargaz at freemail.hu>
-
-	* mono.pc.in: Added gthread-2.0.
-
-2003-08-22  Zoltan Varga  <vargaz at freemail.hu>
-
-	* configure.in: Added gthread-2.0 to GLIB_CFLAGS and GLIB_LIBS, so we
-	can call g_thread_init ().
-
-2003-08-21  Zoltan Varga  <vargaz at freemail.hu>
-
-	* mono/tests/threadpool.cs mono/tests/threadpool1.cs: Make increments 
-	of static variables atomic. Fixes bug #47683.
-
-2003-08-21  Johannes Roith  <johannes at jroith.de>
-
-	* mono/Makefile.am: small update. make sure, glib makes it in the build, add optional target for dependencies
-
-2003-08-18  Johannes Roith  <johannes at jroith.de>
-
-	* mono/Makefile.am: add windows build option
-	* mono/monowiz.win32.nsi: add windows build script
-	* mono/mono-win32-light.bmp: add bitmap
-
-2003-08-16  Zoltan Varga  <vargaz at freemail.hu>
-
-	* mono/tests/checked.cs: Added mul.ovf tests.
-
-2003-08-15  Duncan Mak  <duncan at ximian.com>
-
-	* doc/mysql: Change references to ByteFX.Data.MySQLClient to the
-	correct ByteFX.Data.MySqlClient (note the change in
-	capitalization). Thanks to Tom Wagner <Tom.Wagner at wacker.com> for
-	spotting the error.
-
-2003-08-15  Zoltan Varga  <vargaz at freemail.hu>
-
-	* mono/tests/bug-47295.cs: Regression test for bug #47295.
-
-2003-08-11  Duncan Mak  <duncan at ximian.com>
-
-	* runtime/Makefile.am (assemblies_DATA): Add Mono.Cairo.dll.
-
-Sun Aug  3 21:12:13 BST 2003 Malte Hildingson <malte at amy.udd.htu.se>
-
-	* configure.in: added FPU test for ARM.
-
-Thu Jul 31 16:19:07 CEST 2003 Paolo Molaro <lupus at ximian.com>
-
-	* configure.in, etc.: portability fixes and support for
-	buidling outside the srcdir from Laurent Morichetti <l_m at pacbell.net>.
-
-2003-07-22  Duncan Mak  <duncan at ximian.com>
-       
-        * runtime/Makefile.am: Remove sqlsharp as we no longer distribute it.
-
-2003-07-22  Zoltan Varga  <vargaz at freemail.hu>
-
-	* mono/tests/Makefile.am: Add missing test. Make tests interruptable
-	by Ctrl-C. Add testinterp target to run the tests with the interpreter.
-	Do not try to build vararg.cs under mcs.
-
-	* configure.in: Fix detection of GC_gcj_malloc.
-
-2003-07-14  Jerome Laban <jlaban at wanadoo.fr>
-
-	* acconfig.h:
-	* configure.in: Check for gethostbyname2_r availability.
-	* data/machine.config: Added section system.net/settings. Added
-	option for IPv6 availability.	
-
-2003-07-13  Zoltan Varga  <vargaz at freemail.hu>
-
-	* mono/tests/cattr-object.cs: Make it run under both mono and MS.NET.
-
-	* mono/tests/struct.cs: Add test for unboxing trampolines.
-
-	* mono/tests/bug-27420.cs: new regression test.
-
-	* mono/tests/Makefile.am: skip vararg test since it does not compile 
-	under mono. Add testinterp target. Add new tests.
-	
-2003-07-10  Martin Willemoes Hansen
-
-	* doc/web/team.xml : Modified my tasks a bit.
-
-2003-07-01  Paolo Molaro <lupus at ximian.com>
-
-	* acconfig.h, configure.in: added bundle support.
-
-2003-06-10  Dick Porter  <dick at ximian.com>
-
-	* acconfig.h:
-	* configure.in: Check for struct ip_mreq if struct ip_mreqn isn't
-	available.
-
-2003-06-10  Zoltan Varga  <vargaz at freemail.hu>
-
-	* configure.in: Define HAVE_GC_GCJ_MALLOC for included libgc.
-
-2003-06-10  Martin Baulig  <martin at ximian.com>
-
-	* configure.in: Fall back to boehm if we don't have a libgc
-	subdirectory.
-
-2003-06-10  Martin Baulig  <martin at ximian.com>
-
-	* configure.in: Make the libgc stuff actually work; we now create
-	a shared libmonogc.so when using the included libgc.
-
-2003-06-09  Martin Baulig  <martin at ximian.com>
-
-	* configure.in: Only check for gc if --with-gc=boehm.
-
-2003-06-08  Martin Baulig  <martin at ximian.com>
-
-	* configure.in: Tell libgc's configure about our threads library.
-
-2003-06-08  Martin Baulig  <martin at ximian.com>
-
-	* libgc/: Integrate the libgc module here.
-
-	[Note: A simple `cvs update' won't work this time; you either need
-	to re-checkout the `mono' module or manually move the `libgc'
-	module here.]
-
-	* configure.in (--with-gc): Added `included' option to use the
-	included libgc.  This is now also the default.
-	(LIBGC_CFLAGS, LIBGC_LIBS): Put the libgc stuff here and AC_SUBST it.
-	(INCLUDED_LIBGC): New automake conditional.
-	(USE_INCLUDED_LIBGC): #define this if appropriate.
-
-	* autogen.sh: Run libgc/autogen.sh.
-
-	* Makefile.am (SUBDIRS): Added libgc.
-
-2003-06-05  Duncan Mak  <duncan at ximian.com>
-
-	* mono.spec.in (Requires): Add libxml2 and libxslt dependency on
-	the package.
-
-2003-05-19  Dick Porter  <dick at ximian.com>
-
-	* configure.in: Netbsd build fix by marc at informatik.uni-bremen.de.
-
-2003-05-10  Martin Willemoes Hansen <mwh at sysrq.dk>
-
-	* scripts/Makefile.am: Added monoresgen secutil sqlsharp
-	  shell wrapper scripts.
-
-2003-05-08  Zoltan Varga  <vargaz at freemail.hu>
-
-	* mono/tests/Makefile.am: 
-	- Compile with mcs.
-	- Disable some warnings.
-	- Added executables to clean target.
-	- Make testjit the default target.
-	- Print list of failed tests at the end of a test run.
-	- Abort tests when Ctrl-C is pressed.
-
-	* mono/tests/test-driver: Return with a special exit code when 
-	SIGINT is detected.
-
-	* mono/tests/checked.cs: Make it compile.
-	
-2003-05-02  Miguel de Icaza  <miguel at ximian.com>
-
-	* runtime/Makefile.am ($(monobins_DATA)): Use explicit file names
-	for the target exe binaries.
-
-	Copy cilc.exe and secutil.exe from the right paths to the right
-	location.
-
-	Add missing assemblies.
-
-2003-05-02  Alp Toker  <alp at atoker.com>
-
-	* data/config.in: new dll mapping entry for libglade
-
-2003-05-01  Duncan Mak  <duncan at ximian.com>
-
-	* scripts/Makefile.am: 
-	* runtime/Makefile.am: Install cilc and ilasm.
-
-2003-04-29  Dietmar Maurer  <dietmar at ximian.com>
-
-	* mono/tests/Makefile.am (JITTEST_PROG): use mini/mono
-
-2003-04-16  Charles Iliya Krempeaux  <charles at reptile.ca>
-
-	* doc/web/team.xml : Added myself to it.
-
-2003-04-10  Duncan Mak  <duncan at ximian.com>
-
-	* doc/web/render-team-page.cs: Make the names of the element be
-	lowercase instead. BenM says this makes it XHTML compliant; heck,
-	I'm generating this from an XmlDocument already, why not make it
-	XHTML compliant?
-
-2003-04-10  Duncan Mak  <duncan at ximian.com>
-
-	* doc/web/render-team-page.cs (Compare): Correctly fix
-	ContributorComparer.
-	(RenderHtml): Add some SetAttribute loving to make it render prettier.
-
-	* doc/web/team.xml: Revert excessive indenting.
-
-2003-04-07  Martin Baulig  <martin at ximian.com>
-
-	* mono/mini/: Added this directory to the build; install `mini'
-	and `libmini.la'.
-
-2003-04-07  Duncan Mak  <duncan at ximian.com>
-
-	* doc/web/render-team-page.cs: Fix ContributorComparer.
-
-2003-04-04  Duncan Mak  <duncan at ximian.com>
-
-	* doc/web/render-team-page.cs: Make it use 'none.png' if no image
-	are specified in the XML.
-
-	* doc/web/team.xml: Remove the comment.
-
-	* doc/web/render-team-page.cs: Make it not output a full HTML file.
-
-2003-04-04  Duncan Mak  <duncan at ximian.com>
-
-	* doc/web/commands: 
-	* doc/web/makefile: Add team page information.
-
-	* doc/web/team.xml: 
-	* doc/web/render-team-page.cs: Code for rendering a team page.
-
-2003-04-02  Duncan Mak  <duncan at ximian.com>
-
-	* doc/web/makefile: Add a new make target for generating a team
-	page on go-mono.com.
-
-2003-04-04  Zoltan Varga  <vargaz at freemail.hu>
-
-	* configure.in: Added check for GC_gcj_malloc.
-
-2003-04-04  Martin Willemoes Hansen <mwh at sysrq.dk>
-
-	* man/sqlsharp.1: changed pass= to password= for the 
-	  PostgreSql provider.
-
-2003-03-31  Gonzalo Paniagua Javier <gonzalo at ximian.com>
-
-	* data/machine.config: added SessionStateModule to httpModules section.
-
-2003-02-13  Gonzalo Paniagua Javier <gonzalo at ximian.com>
-
-	* data/machine.config: added default sessionState section and handler.
-
-2003-02-17  Daniel Morgan <danmorg at sc.rr.com>
-
-	* doc/provider-factory: add new web page 
-	about Mono.Data's ProviderFactory
-
-	* doc/web/commands
-	* doc/web/makefile: add provider-factory web page to build
-	
-	* doc/ado-net
-	* doc/ibmdb2
-	* doc/postgresql
-	* doc/sqlclient
-	* doc/tdsclient
-	* doc/sybase
-	* doc/mysql
-	* doc/firebird
-	* doc/oracle
-	* doc/oledb
-	* doc/odbc
-	* doc/sqlite: updated web pages
-
-2003-02-16  Martin Baulig  <martin at ximian.com>
-
-	* doc/jit-debug-sample
-	* doc/jit-debug-sample2: Removed.
-
-	* doc/jit-debug: Updated.
-
-2003-02-13  Daniel Morgan <danmorg at sc.rr.com>
-
-	* doc/screenshots
-	* doc/ado-net
-	* doc/oracle
-	* doc/gtk-sharp: update web pages
-	
-2003-02-13  Gonzalo Paniagua Javier <gonzalo at ximian.com>
-
-	* data/machine.config: added sample globalization section.
-
-2003-02-12  Gonzalo Paniagua Javier <gonzalo at ximian.com>
-
-	* data/machine.config: added UrlAuthorizationModule and
-	AuthenticationConfigHandler.
-
-2003-02-11  Tim Coleman <tim at timcoleman.com>
-	* data/config.in: Add mapping for Oracle call interface
-	(OCI) native libraries.
-
-2003-02-04  Gonzalo Paniagua Javier <gonzalo at ximian.com>
-
-	* configure.in: added check for sys/un.h.
-
-2003-01-29  Daniel Morgan <danmorg at sc.rr.com>
-
-	* doc/postgresql
-	* doc/mysql
-	* doc/ado-net: updates to web pages
-	
-	* man/sqlsharp.1: update to man page
-
-2003-01-28  Gonzalo Paniagua Javier <gonzalo at ximian.com>
-
-	* configure.in: added WIN32_THREADS flag when building under windows.
-	It seems that the header files of the gc do not always define it when
-	GC_WIN32_THREADS is defined.
-
-2003-01-26  Daniel Morgan <danmorg at sc.rr.com>
-
-	* doc/index
-	* doc/ado-net
-	* doc/firebird
-	* doc/ibmdb2
-	* doc/mysql
-	* doc/odbc
-	* doc/oledb
-	* doc/oracle
-	* doc/postgresql
-	* doc/sqlclient
-	* doc/sqlite
-	* doc/sybase
-	* doc/tdsclient: corrections
-
-2003-01-26  Duncan Mak  <duncan at ximian.com>
-
-	* doc/jit-debug: Update the links. Thanks for Andy Oliver for the report.
-
-2003-01-22  Martin Baulig  <martin at ximian.com>
-
-	* configure.in: Set version number to 0.19.1.
-
-	Heads up: I'm going to commit some changes to the debugger
-	which'll require you to use this new runtime, so if you update the
-	debugger from CVS, you also need this new runtime.
-
-2003-01-20  Duncan Mak  <duncan at ximian.com>
-
-	* configure.in: Bump the release number to 0.19.
-	  
-2003-01-19  Daniel Morgan <danmorg at sc.rr.com>
-
-	* doc/ibmdb2: added file which is new web page
-	about IBM DB2 data provider at Mono.Data.DB2Client
-	
-	* makefile
-	* commands: added ibmdb2 web page to go-mono web site
-	
-	* doc/ado-net: added a couple more developers email, plus made the
-	email spam resistant, added Mono's DB2 data provider to list,
-	added more info about the ProviderFactory and retrieving data using
-	ADO.NET from ASP.NET, add notes about testing, misc cleanup
-	
-	* doc/mysql
-	* doc/postgresql
-	* doc/sqlclient
-	* doc/oracle
-	* doc/tdsclient
-	* doc/firebird
-	* doc/oledb
-	* doc/odbc
-	* doc/sybase
-	* doc/sqlite: added testing notes and C# examples
-	
-	* doc/gtk-sharp: added links for GTK# for Windows
-	
-	* man/sqlsharp.1: added providers Npgsql and MySQLNet
-
-2003-01-17  Duncan Mak  <duncan at ximian.com>
-
-	* runtime/Makefile.am: Add the new Mono.Data.DB2Client.dll.
-
-2003-01-16  Martin Baulig  <martin at ximian.com>
-
-	* configure.in (GTHREAD_LIBS, GTHREAD_CFLAGS): Removed the gthread
-	check again, we're now using the mono/io-layer for this.
-
-Wed Jan 15 16:20:54 CET 2003 Paolo Molaro <lupus at ximian.com>
-
-	* configure.in: allow MacOSX (from various people).
-
-2003-01-14  Martin Baulig  <martin at ximian.com>
-
-	* configure.in (GTHREAD_LIBS, GTHREAD_CFLAGS): Added check for gthread.
-
-2002-12-27  Jeroen Janssen <japj at darius.demon.nl>
-	* fixed url for System.Windows.Forms in the class status
-	
-2002-12-18  Gonzalo Paniagua Javier <gonzalo at ximian.com>
-
-	* configure.in: moved struct tm field tm_gmtoff check before the check
-	for timezone global variable. This makes Timezone work for me (debian
-	sid, linux, x86, which has both the field and the global variables).
-
-2002-12-10  Daniel Morgan <danmorg at sc.rr.com>
-
-	* doc/oracle: added file which is
-	a new web page oracle.html
-
-	* doc/ado-net: clean up and add link
-	to oracle.html
-	
-	* doc/web/commands
-	* doc/web/makefile: added oracle.html
-
-2002-12-10  Daniel Morgan <danmorg at sc.rr.com>
-
-	* man/Makefile.am: changed sqlsharpcli.1 to sqlsharp.1
-	
-	* man/sqlsharpcli.1: renamed to sqlsharp.1
-
-2002-12-09  Tim Haynes  <thaynes at openlinksw.co.uk>
-
-	* mono/jit/jit.c
-	* mono/metadata/icall.c: added mono_install_get_config_dir() to
-	utilize the MONO_CFG_DIR environment variable for specifying
-	different machine.configs.
-
-2002-12-06  Duncan Mak  <duncan at ximian.com>
-
-	* data/Makefile.am (EXTRA_DIST): Add machine.config
-	(DISTCLEANFILES): Add config.
-
-2002-11-30  Daniel Morgan <danmorg at sc.rr.com>
-
-	* man/sqlsharpcli.1: added file - a man page 
-	for SQL# CLI
-	
-	* man/Makefile.am: added sqlsharpcli.1 to man_MANS
-	
-2002-11-20  Daniel Morgan <danmorg at sc.rr.com>
-
-	* doc/firebird: updated web page
-
-2002-11-19  Mike Kestner <mkestner at speakeasy.net>
-
-	* data/Config.in : added the gtk# dll mapping entries
-
-2002-11-19  Daniel Morgan <danmorg at sc.rr.com>
-
-	* doc/firebird: updated web page based on input
-	from the firebird .net data provider author
-
-Mon Nov 18 16:40:34 CET 2002 Paolo Molaro <lupus at ximian.com>
-
-	* configure.in, mono/os/gc_wrapper.h: check that the gc headers have
-	been installed.
-
-2002-11-12  Daniel Morgan <danmorg at sc.rr.com>
-
-	* doc/oledb
-	* doc/odbc
-	* doc/mysql
-	* doc/sqlite
-	* doc/sqlclient
-	* doc/tdsclient
-	* doc/sybase
-	* doc/firebird: added web pages
-	for each specific data provider
-	
-	* doc/ado-net
-	* doc/postgresql: updated web page
-	with current status
-	
-	* doc/web/commands
-	* doc/web/makefile: updated to include
-	new web pages
-
-2002-11-06  Gonzalo Paniagua Javier <gonzalo at ximian.com>
-
-	* autogen.sh: make it work when MONO_PATH is set and it has more than
-	one directory or ends in ":". Also check that the directory added to
-	ACLOCAL_FLAGS and PATH exist (aclocal fails if they don't).
-
-2002-10-22  Miguel de Icaza  <miguel at ximian.com>
-
-	* configure.in: Also allow the miss-spelled bohem.
-
-2002-10-18  Daniel Morgan <danmorg at sc.rr.com>
-
-	* doc/ado-net
-	* doc/postgresql
-	* doc/tds-providers: cleaned up the web pages
-	
-	* doc/web/commands: postgresql.html page was mistyped
-
-2002-10-18  Daniel Morgan <danmorg at sc.rr.com>
-
-	* doc/ado-net: updated status of
-	the ADO.NET functionality and providers
-	and added link to tds-providers.html
-
-	* doc/tds-providers: added file to
-	describe the design	and status of 
-	the SqlClient, SybaseClient, and TdsClient
-	ADO.NET providers.
-
-	* doc/web/makefile
-	* doc/web/command: added new web page 
-	tds-providers.html to build of 	www.go-mono.com web site
-	
-2002-10-17  Daniel Morgan <danmorg at sc.rr.com>
-
-	* doc/web/makefile
-	* doc/web/commands:	web page 
-	postgresql needed to be added
-
-2002-10-13  Mark Crichton <crichton at gimp.org>
-
-	* doc/index: Even more spelling errors fixed.
-
-2002-10-13  Daniel Morgan <danmorg at sc.rr.com>
-
-	* doc/adonet: updated status of all providers, added links, 
-	  and added information
-	  about the Mono.Data.SqliteClient provider that 
-	  Vladimir Vukicevic contributed. Added Brian Ritchie's 
-	  and Vladimir Vukicevic's email addresses as
-	  people to contact about ADO.NET in Mono.  
-	  Added information about SQL#, configuration tools, 
-	  and an ADO.NET Multiplexor, etc...  
-
-2002-10-10  Daniel Morgan <danmorg at sc.rr.com>
-
-	* doc/index: corrected some mistypes
-	
-	* doc/adonet: updated the status and plans of all the ADO.NET providers
-	  and moved PostgreSQL specific stuff to doc/postgresql
-
-	* doc/postgresql: added new file to detail
-	  the status of the PostgreSQL ADO.NET provider
-	  and provide test notes for setting it up
-
-2002-10-09  Daniel Morgan <danmorg at sc.rr.com>
-
-	* data/config.in: add entry for MySQL native shared libraries
-	  which are different on Windows and Linux
-
-2002-10-04  Diego Sevilla Ruiz  <dsevilla at um.es>
-
-	* doc/ccvs: Fixed some ugly formatting.
-
-2002-10-03  Dick Porter  <dick at ximian.com>
-
-	* acconfig.h:
-	* configure.in:  Freebsd pthread_t is a pointer
-
-2002-10-01  Duncan Mak  <duncan at ximian.com>
-
-	* mono/os/Makefile.am: Add gc_wrapper.h.
-
-	* runtime/Makefile.am: Fix the path for monoresgen.exe.
-
-2002-09-27  Dick Porter  <dick at ximian.com>
-
-	* configure.in: Check for semaphore.h.  Patch for BSD from
-	jmmv at hispabsd.org (Julio Merino).
-
-2002-09-20  Duncan Mak  <duncan at ximian.com>
-
-	* data/config.in: Added reference to libxslt.
-
-2002-09-20  Mark Crichton  <crichton at gimp.org>
-
-	* configure.in: added NEED_LINK_UNLINK to make io-layer more portable.
-	Linux has a "virtual fs" for UNIX sockets, Solaris and BSD don't.
-	For systems that do not have such a virtual FS, define
-	NEED_LINK_UNLINK.
-
-	* acconfig.h: added NEED_LINK_UNLINK
-	
-Wed Sep 4 18:09:58 CEST 2002 Paolo Molaro <lupus at ximian.com>
-
-	* configure.in: add some needed defines to fix support of
-	threads in the GC.
-
-2002-09-19  Mark Crichton  <crichton at gimp.org>
-
-	* configure.in: Added checks for Solaris to use X/Open functionality.
-	Really needed for the io-layer code.
-
-2002-09-15  Andrew Birkett  <andy at nobugs.org>
-
-	* man/mcs.1: --probe is now --expect-error.
-
-2002-09-09  Dick Porter  <dick at ximian.com>
-
-	* acconfig.h: 
-	* configure.in: Simplify thread checks, by using canned rules for
-	particular systems (based on the sleepycat db configure.in).
-	Tested on linux/x86, freebsd and w32.  Solaris also added, but I
-	don't have a solaris machine to try it on.
-
-2002-09-04  Juli Mallett  <jmallett at FreeBSD.org>
-
-	* configure.in: Include <sys/types.h> when checking <sys/un.h> stuff.
-
-2002-09-02  Diego Sevilla Ruiz  <dsevilla at um.es>
-
-	* doc/ccvs: Added how to convert SSH keys (from SSH Communications
-	Security) to the OpenSSH keys required by mono CVS
-	access.
-
-2002-09-01  Juli Mallett  <jmallett at FreeBSD.org>
-
-	* configure.in, mono/interpreter/interp.c,
-	mono/io-layer/handles.c, mono/io-layer/processes.c,
-	mono/io-layer/threads.c, mono/io-layer/timed-thread.c,
-	mono/io-layer/wait.c, mono/jit/helpers.c, mono/jit/jit.c,
-	mono/metadata/appdomain.c, mono/metadata/class.c,
-	mono/metadata/domain.c, mono/metadata/gc.c,
-	mono/metadata/object.c, mono/metadata/reflection.c,
-	mono/metadata/threads.c, mono/os/gc_wrapper.h,
-	mono/utils/mono-hash.c: Add a new header, gc_wrapper.h, to
-	wrap inclusion of gc.h for boehm, since from FreeBSD and
-	OpenBSD ports, gc.h is <gc.h>, but on GNU it seems to be
-	in <gc/gc.h>.  This will reduce the diffs FreeBSD ports has
-	to apply, and also makes it possible for me to build with
-	GC on OpenBSD/macppc built by hand.
-
-2002-09-01  Juli Mallett  <jmallett at FreeBSD.org>
-
-	* configure.in: On BSD don't try to use -ldl, we simply don't use it.
-
-2002-09-01  Juli Mallett  <jmallett at FreeBSD.org>
-
-	* mono/dis/dis-cil.c:
-	* configure.in: Check for <wchar.h> via autoconf, don't use it if
-	it isn't there, as it seems to work fine without it on OpenBSD.
-
-2002-08-28  Dick Porter  <dick at ximian.com>
-
-	* mono/os/win32/util.c: 
-	* mono/os/unix/util.c: 
-	* mono/os/util.h: mono_set_rootdir() doesnt take any args now.
-	(It doesn't do anything on unix builds, and the w32 version no
-	longer needs an arg.)
-
-	* configure.in: Add HOST_CC for w32 builds
-
-Tue Aug 27 18:17:43 CEST 2002 Paolo Molaro <lupus at ximian.com>
-
-	* configure.in: remove iconv checks.
-
-2002-08-24  Juli Mallett  <jmallett at FreeBSD.org>
-
-	* configure.in: Recognise OpenBSD/macppc as PowerPC.
-
-Tue Aug 20 15:15:52 CEST 2002 Paolo Molaro <lupus at ximian.com>
-
-	* configure.in: patch by noa at metamatrix.se (Daniel Resare)
-	to error out if bison is missing.
-
-2002-08-17  Gonzalo Paniagua Javier <gonzalo at ximian.com>
-
-	* configure.in: don't link against libdl on windoze.
-
-2002-08-12  Dick Porter  <dick at ximian.com>
-
-	* mono.pc.in: Add $includedir to Cflags
-
-Fri Jul 19 18:38:38 CEST 2002 Paolo Molaro <lupus at ximian.com>
-
-	* configure.in, Makefile.am, mono.pc.in: add a mono.pc file for use
-	with pkg-config.
-	* */Makefile.am: makefile overhaul to create a shared libmono library.
-	* */*.h: do not include config.h in headers that should be installed.
-
-2002-07-12  Dick Porter  <dick at ximian.com>
-
-	* acconfig.h:
-	* configure.in: Check the size of sockaddr_un.sun_path
-
-2002-06-23  Miguel de Icaza  <miguel at ximian.com>
-
-	* man/Makefile.am (man_MANS): Added new man page
-
-	* man/mono-config.5: New manual page describing the mono-config
-	file format. 
-
-2002-06-10  Jaroslaw Kowalski <jarek at atm.com.pl>
-
-	* configure.in: added checks for MSG_NOSIGNAL
-
-2002-05-30  Daniel Morgan <danmorg at sc.rr.com>
-
-	* doc/ado-net: update the ado-net web page on go-mono.com
-	input parameters support, beginnings of Mono.Data.MySQL 
-	and System.Data.OleDb, updated the sample source code,
-	and output from a PostgresTest
-
-2002-05-21  Martin Baulig  <martin at gnome.org>
-
-	* mono.1: Documented the "--debug-args" debugging arguments.
-
-2002-05-21  Martin Baulig  <martin at gnome.org>
-
-	* mono.1: Updated to reflect my latest changes and beautified this a bit.
-	(FIXME: There are still command line argument which aren't documented here.)
-
-2002-05-19  Daniel Morgan <danmorg at sc.rr.com>
-
-	* doc/ado-net: updated page to include C# code snippets using
-	System.Data.  Update status: handle reading NULL values, DataSet/DataAdapter
-	works, executing/reading multiple results, and stored procedures.
-	And other tweaks about the providers.  
-
-2002-05-19  Martin Baulig  <martin at gnome.org>
-
-	* mono/Makefile.am (SUBDIRS): Added `os', it's referenced by
-	interpreter/Makefile.am.
-
-Wed May 15 12:22:09 CEST 2002 Paolo Molaro <lupus at ximian.com>
-
-	* configure.in: search for pthread functions also in libc_r (patch
-	from Garrett Rooney <rooneg at electricjellyfish.net>).
-
-2002-05-11  Daniel Morgan <danmorg at sc.rr.com>
-
-	* doc/ado-net: added instructions for installing PostgreSQL on Linux
-	and for using nant to re-compile just the System.Data.dll assembly
-	on Windows.
-
-2002-05-10  Rodrigo Moya <rodrigo at ximian.com>
-
-	* doc/ado-net: added instructions for compiling System.Data.dll
-	(a subset of) on Linux.
-
-2002-05-10  Daniel Morgan <danmorg at sc.rr.com>
-
-	* doc/ado-net: added links
-
-2002-05-09  Dick Porter  <dick at ximian.com>
-
-	* configure.in: Set CPPFLAGS not CFLAGS (bug 23767)
-
-2002-05-05  Daniel Morgan <danmorg at sc.rr.com>
-
-	* doc/ado-net: correct formatting
-	* doc/index: added credit i forgot to add
-
-2002-05-05  Daniel Morgan <danmorg at sc.rr.com>
-
-	* doc/ado-net: i did not format it correctly earlier, i 
-	tried added various tags where appropriate.
-	
-	* doc/index: added news item for May 5, 2002 - ado.net able
-	to retrieve data now
-
-2002-05-05  Daniel Morgan <danmorg at sc.rr.com>
-
-	* doc/ado-net: updated the current status which
-	I kept forgetting to do.
-
-2002-05-05  Daniel Morgan <danmorg at sc.rr.com>
-
-	* doc/ado-net: updated to includes an example for
-	running ipc-daemon as a	Windows service.  Thanks
-	to gonzalo.
-
-2002-05-05  Daniel Morgan <danmorg at sc.rr.com>
-
-	* doc/ado-net: updated to include installation of
-	PostgreSQL DBMS under cygwin.  It is a TODO for Linux though.
-	Also included notes on running the System.Data/Test/PostgresTest.cs
-	that should work on a lot of Mono installations that have
-	PostgreSQL installed.  If not please let me, rodrigo, or gonzalo
-	know.
-
-2002-05-01  Rodrigo Moya <rodrigo at ximian.com>
-
-	* doc/ado-net: updated a little bit.
-
-2002-04-30  Jeffrey Stedfast  <fejj at ximian.com>
-
-	* configure.in: Added checks for timezone stuff.
-
-2002-04-30  Dick Porter  <dick at ximian.com>
-
-	* acconfig.h:
-	* configure.in: Added option to disable using shared memory for
-	handles
-
-2002-04-28  Gonzalo Paniagua Javier <gonzalo at ximian.com>
-
-	* configure.in: fix for conditional "THREADS_PTHREAD" was never 
-	defined problem under cygwin with latest version of automake and
-	autoconf. Patch from Jeroen Janssen <japj at darius.demon.nl>.
-
-2002-04-23  Gonzalo Paniagua Javier <gonzalo at ximian.com>
-
-	* configure.in: removed -Wshadow from CFLAGS.
-
-2002-04-12  Rodrigo Moya <rodrigo at ximian.com>
-
-	* status/maintainers.xml: added danmorg and myself for System.Data.*
-	classes.
-
-	* status/class.xml: added System.Data.* classes.
-
-2002-04-08  Dick Porter  <dick at ximian.com>
-
-	* configure.in: Set -mno-cygwin here rather than in the build script
-
-2002-04-05  Dietmar Maurer  <dietmar at ximian.com>
-
-	* mono/tests/remoting2.cs: new test for async invoke of proxy calls
-
-2002-03-29  Martin Baulig  <martin at gnome.org>
-
-	* doc/jit-debug, docs/jit-debug-sample, docs/jit-debug-sample2:
-	New files, added documentation for the debugging code.
-
-	* doc/web/commands: Added the debugging pages.
-
-	* docs/jit-debug: Removed, this is now on the web site.
-
-2002-03-24  Martin Baulig  <martin at gnome.org>
-
-	* man/mcs.1: Documented the new --debug option and added a section
-	about debugging support.
-
-	* man/mono.1: Documented the new --dwarf and --dwarf-plus options.
-
-2002-03-21  Martin Baulig  <martin at gnome.org>
-
-	* configure.in: Added check for <elf.h>.
-
-2002-03-18  Dick Porter  <dick at ximian.com>
-
-	* configure.in: Only look for libgc on the system.  Default to not
-	using GC at all, because it doesn't work with the jit.
-
-2002-03-17  Miguel de Icaza  <miguel at ximian.com>
-
-	* configure.in: Add support for building the included boehm GC.
-
-Thu Mar 7 17:19:44 CET 2002 Paolo Molaro <lupus at ximian.com>
-
-	* configure.in: detect Boehm GC libs and add --with-gc switch.
-	Boehm GC needs to be explicitly enabled since the JIT currently fails
-	in some cases with it.
-
-2002-02-27  Dietmar Maurer  <dietmar at ximian.com>
-
-	* mono/tests/fib.cs: it is now possible to pass a repeat count as
-	command line argument, for example fib.exe 20 runs the test 20
-	times. 
-
-2002-02-25  Sergey Chaban  <serge at wildwestsoftware.com>
-	* configure.in: added support for ARM target arch.
-	Uncommented and modified arm-*-linux* target,
-	added mono/arch/arm/Makefile to AC_OUTPUT list.
-
-2002-02-21  Mark Crichton  <crichton at gimp.org>
-
-	* status/class.xml: Added contact info for RNGCryptoServiceProvider
-	class and Rijndael classes.
-	* status/maintainers.xml: Added contact info to maintainers list.
-
-2002-02-21  Mark Crichton  <crichton at gimp.org>
- 
-        * configure.in: Add checks for a system-provided entropy device
-        * acconfig.h: Added HAVE_CRYPT_RNG and NAME_DEV_RANDOM
-
-2002-02-20  Dick Porter  <dick at ximian.com>
-
-	* acconfig.h:
-	* configure.in: Always build without cygwin support on windows
-
-2002-02-19  Radek Doulik  <rodo at ximian.com>
-
-	* mono/tests/pinvoke.cs: use more pinvoke test methods
-
-2002-02-19  Radek Doulik  <rodo at ximian.com>
-
-	* mono/tests/libtest.c (mono_test_many_short_arguments): new test
-	method
-	(mono_test_many_byte_arguments): ditto
-
-2002-02-18  Radek Doulik  <rodo at ximian.com>
-
-	* mono/tests/Makefile.am: added small test library for pinvoke
-	testing
-
-	* mono/tests/libtest.c (mono_test_many_int_arguments): new file,
-	new function to test pinvoke
-
-	* mono/tests/pinvoke.cs (Test): added pinvoked method with 10 int
-	arguments
-
-	* mono/tests/Makefile.am: display # of passing tests too
-	added simple shared library libtest with testing function for
-	pinvoke
-
-2002-02-17  Radek Doulik  <rodo at ximian.com>
-
-	* mono/tests/Makefile.am (test): display # of failed tests
-
-2002-02-16  Jeffrey Stedfast  <fejj at ximian.com>
-
-	* configure.in: Add checks for SOL_IP, SOL_TCP, and
-	IP_PKTINFO. Also check for struct ip_mreqn.
-
-2002-02-14  Jeffrey Stedfast  <fejj at ximian.com>
-
-	* configure.in: Add checks to see if we need to link to libsocket,
-	libnsl, and/or librt. Also check for inet_pton and inet_aton.
-
-2002-02-13  Jeffrey Stedfast  <fejj at ximian.com>
-
-	* acconfig.h: #undef USE_MONO_MUTEX
-
-	* configure.in: If the system pthread implementation is lacking,
-	default to using mono-mutex.
-
-2002-02-05  Dietmar Maurer  <dietmar at ximian.com>
-
-	* mono/tests/enum2.cs: new file with more enum tests.
-
-2002-02-01  Dietmar Maurer  <dietmar at ximian.com>
-
-	* mono/tests/jit-long.cs: added some SHL/SHR tests
-
-Fri Feb 1 15:32:36 CET 2002 Paolo Molaro <lupus at ximian.com>
-
-	* configure.in: allow PKG_CONFIG_PATH for the build-platform
-	pkg-config invocation.
-
-Fri Feb 1 15:13:25 CET 2002 Paolo Molaro <lupus at ximian.com>
-
-	* configure.in: add some support/fixes for cross-compilation.
-
-2002-01-14  Dietmar Maurer  <dietmar at ximian.com>
-
-	* mono/tests/exception6.cs: new tests for ADD_OVF, MUL_OVF
-	added tests for SUB_OVF, SUB_OVF_UN
-
-2001-12-21  Dietmar Maurer  <dietmar at ximian.com>
-
-	* mono/tests/Makefile.am (TESTSRC): disabled stream-writer test
-
-2001-12-21  Aaron Weber  <aaron at ximian.com>
-
-	* doc/faq (A): added a linebreak that was missing and was causing
-	a heading to appear badly.
-
-2001-12-20  Aaron Weber  <aaron at ximian.com>
-
-	* doc/faq: added <a name=""> nav links, and moved all MSFT-related
-	questions into a single section.
-
-2001-12-17  Aaron Weber  <aaron at ximian.com>
-
-	* doc/faq (Q): Question-by-question, line-by-line revision.
-
-2001-12-17  Dietmar Maurer  <dietmar at ximian.com>
-
-	* mono/tests/time.cs: new test
-
-2001-11-30  Radek Doulik  <rodo at ximian.com>
-
-	* configure.in: remove ACCESS_UNALIGNED="no" from ppc
-
-2001-11-29  Radek Doulik  <rodo at ximian.com>
-
-	* configure.in (ACCESS_UNALIGNED): uncommented and modified
-	powerpc-*-linux* 
-	generate mono/arch/ppc/Makefile
-
-2001-11-26  Dietmar Maurer  <dietmar at ximian.com>
-
-	* mono/tests/exception3.cs: modified the test to show a bug in the
-	current exception handling implementation.
-
-2001-11-13  Dick Porter  <dick at ximian.com>
-
-	* configure.in: Some more tests for pthread features
-	(specifically, glibc 2.1 doesnt define pthread_mutex_timedlock but
-	still needs _GNU_SOURCE for PTHREAD_MUTEX_RECURSIVE)
-
-2001-11-09  Dick Porter  <dick at ximian.com>
-
-	* configure.in: Try and get large file support, but it's not fatal
-	if it's not there (the io-layer just ignores the high word in that
-	case.)
-
-	Check for windows builds, and only bother to look for pthreads and
-	large files if we're not building for cygwin or native win32.  Not
-	having pthread support on Posix systems is now a fatal error.
-
-	* autogen.sh: Fix ACLOCAL_FLAGS - it wasn't being passed to
-	aclocal
-
-2001-10-15  Dietmar Maurer  <dietmar at ximian.com>
-
-	* mono/tests/Makefile.am: removed JITTESTS, simply run all tests for
-	target testjit. 
-
-2001-10-11  Dietmar Maurer  <dietmar at ximian.com>
-
-	* docs/object-layout: more documentation
-
-Mon Oct 8 20:27:50 CEST 2001 Paolo Molaro <lupus at ximian.com>
-
-	* configure.in: define NO_UNALIGNED_ACCESS for platforms that
-	can't read on unaligned boundaries
-
-2001-10-04  Dick Porter  <dick at ximian.com>
-
-	* configure.in: Do some deeper checks on pthreads for some of the
-	more interesting functions
-
-2001-09-24  Dietmar Maurer  <dietmar at ximian.com>
-
-	* mono/tests/Makefile.am (testjit): a new target to test the JITer
-
-	* mono/tests/jit-*: added some test for the JITer
-
-2001-09-23  Dick Porter  <dick at ximian.com>
-
-	* configure.in: Arrange to compile dummy thread support routines
-	if pthread isnt available
-	
-2001-09-23  Dick Porter  <dick at ximian.com>
-
-	* configure.in: Check for pthread.h, so that we can check for the
-	HAVE_PTHREAD_H define in config.h
-
-2001-09-21  Dick Porter  <dick at ximian.com>
-
-	* configure.in: Check for libpthread
-
-2001-09-19  Dietmar Maurer  <dietmar at ximian.com>
-
-	* mono/tests/test-ops.cs: added more tests
-
-Mon Sep 10 20:19:00 CEST 2001 Paolo Molaro <lupus at ximian.com>
-
-	* configure.in: check for sizeof(void*) and for the architecture.
-
-2001-09-05  Dick Porter  <dick at ximian.com>
-
-	* autogen.sh: Fixed the section that adds $ACLOCAL_FLAGS to the
-	aclocal invocation, so putting aclocal files in /usr/local works
-
-2001-08-30  Dietmar Maurer  <dietmar at ximian.com>
-
-	* *: removed the libffi dependency, mono now compiles on cygwin 
-
-	* mono/wrapper/build-dll: new file.
-
-2001-08-28  Dietmar Maurer  <dietmar at ximian.com>
-
-	* mono/tests/console.cs: impl.
-
-	* mono/tests/box.cs: impl.
-
-	* mono/tests/stream-writer.cs: impl.
-
-Mon Aug 27 20:24:26 CEST 2001 Paolo Molaro <lupus at ximian.com>
-
-	* mono/tests/*: New test cases, mostly for virtual method dispatch.
-	Use make testb for the slow benchmarking programs,
-	make test for the usual regression test checks.
-
-2001-08-22  Rodrigo Moya <rodrigo at ximian.com>
-
-	* mono/cil/Makefile.am:
-	* mono/wrapper/Makefile.am: use correct variables for installation
-	directories
-
-Tue Aug 21 18:54:06 CEST 2001 Paolo Molaro <lupus at ximian.com>
-
-	* mono/tests/exceptions*: enhanced and added more tests for
-	exceptions.
-
-2001-08-20  Miguel de Icaza  <miguel at ximian.com>
-
-	* mono/Makefile.am (SUBDIRS): Remove `test' from here to allow us
-	to pass make distcheck
-
-	* mono/wrapper/Makefile.am (EXTRA_DIST): Include genwrapper.pl
-
-	* configure.in, Makefile.am, runtime/Makefile.am (dist-hook,
-	install-data-hook): Added mechanism to distribute and install the
-	dll files.
-
-2001-08-20  Dietmar Maurer  <dietmar at ximian.com>
-
-	* mono/tests/stream.cs: new tests for the Stream class
-
-	* configure.in: I really need LIBTOOL for libmonowrapper.so, so I
-	added it again.
-
-2001-08-16  Alex Graveley  <alex at ximian.com>
-
-	* configure.in: Replace AM_PROG_LIBTOOL with AC_PROG_RANLIB. This
-	removes libtool dependency on all of Mono.
-
-2001-08-10  Dietmar Maurer  <dietmar at ximian.com>
-
-	* mono/tests/array.cs: more array tests
-
-2001-08-09  Dietmar Maurer  <dietmar at ximian.com>
-
-	* mono/tests/array.cs: more array tests
-
-2001-08-06  Dietmar Maurer  <dietmar at ximian.com>
-
-	* mono/tests/pinvoke.cs: we can now print strings ;-)
-
-	* mono/tests/array.cs: new test for arrays
-
-2001-08-02  Alex Graveley  <alex at ximian.com>
-
-        * libffi/*: Import libffi CVS version, with minor changes to make it 
-          compile.
-
-        * mono/interpreter/Makefile.am: Link against 
-          ../../libffi/.libs/libffi.a.
-
-        * Makefile.am: Add libffi
-
-        * autogen.sh: Replace with adapted gnome autogen.sh
-
-        * configure.in: Add AC_CONFIG_SUBDIRS(libffi).
-
-2001-08-02  Dietmar Maurer  <dietmar at ximian.com>
-
-	* mono/tests/pinvoke.cs: impl.
-
-Wed Aug 1 22:34:52 CEST 2001 Paolo Molaro <lupus at ximian.com>
-
-	* configure.in, mono/tests: added some tests for the interpreter.
-
-2001-07-15  Sean MacIsaac  <macisaac at ximian.com>
-
-	* doc/download: added instructions for cygwin
-	
-	* doc/c-sharp: removed bit about compiling
-	
-	* status/compare-assembly.cs: basedir should be there if
-	parameters are provided.
-
-	* status/makefile: made targets to dump info.
-	
-2001-07-15  Joe Shaw  <joe at ximian.com>
-
-	* configure.in: Don't create doc/Makefile as there's nothing there
-	to make.
-
-	* Makefile.am: Don't build the doc directory because there's no
-	Makefile.am there.
-
-	* autogen.sh: Call aclocal with the $ACLOCAL_FLAGS env var.
-
-2001-07-15  Miguel de Icaza  <miguel at ximian.com>
-
-	* doc/class-library (A): Updated FAQ with question on error 1595.
-
-2001-07-14  Miguel de Icaza  <miguel at ximian.com>
-
-	* doc/index: 
-
-Wed Jul 11 00:36:36 CEST 2001 Paolo Molaro <lupus at ximian.com>
-
-	* status/*: scripts and data to create statistics about the
-	class library status.
-
-2001-07-09  Alex Graveley  <alex at ximian.com>
-
-	* doc/makefile (clean): Add clean target.
-	* doc/web/makefile (clean): Ditto.
-
-2001-07-09  Alex Graveley  <alex at ximian.com>
-
-	* doc/makefile (all-docs): Fix typo.
-
-2001-05-30  Miguel de Icaza  <miguel at ximian.com>
-
-	* NEWS: 
diff --git a/LICENSE b/LICENSE
index 0cb310e..f8b52eb 100644
--- a/LICENSE
+++ b/LICENSE
@@ -2,7 +2,7 @@
 Mono is made up of many pieces of code, all of them open source, but
 different pieces of Mono use different licensing terms.
 
-For comments, corrections and updates, please contact mono at novell.com
+For comments, corrections and updates, please contact mono at xamarin.com
 
 * Dual Licensing
 
@@ -22,7 +22,7 @@ For comments, corrections and updates, please contact mono at novell.com
 	Contributions for other modules should be under the same license
 	terms as the rest of the module, or under MIT X11 terms. 
 
-	If you need further information, please contact mono at novell.com
+	If you need further information, please contact mono at xamarin.com
 
 * The Modules
 
@@ -45,7 +45,7 @@ For comments, corrections and updates, please contact mono at novell.com
 	on the distribution and access to the code, a phone platform
 	that prevents end users from upgrading Moonlight).
 	
-	Contact mono at novell.com for details on obtaining the Mono
+	Contact mono at xamarin.com for details on obtaining the Mono
 	runtime under other terms.
 
 ** mono/eglib: Mono's X11 glib implementation
diff --git a/Makefile.am b/Makefile.am
index b507915..a680900 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -1,5 +1,4 @@
-AUTOMAKE_OPTIONS = foreign
-ACLOCAL_AMFLAGS = -I .
+ACLOCAL_AMFLAGS = -I m4
 
 MOONLIGHT_SUBDIRS = $(libgc_dir) eglib/src mono
 
@@ -7,7 +6,7 @@ if CROSS_COMPILING
 SUBDIRS = po $(libgc_dir) eglib mono $(ikvm_native_dir) data runtime scripts man samples msvc $(docs_dir)
 # Keep in sync with SUBDIRS
 ## 'tools' is not normally built
-DIST_SUBDIRS = po libgc eglib mono ikvm-native         data runtime scripts man samples tools msvc docs
+DIST_SUBDIRS = m4 po libgc eglib mono ikvm-native data runtime scripts man samples tools msvc docs
 else
 if ONLY_MOONLIGHT
 SUBDIRS = $(MOONLIGHT_SUBDIRS) runtime
@@ -15,7 +14,7 @@ else
 SUBDIRS = po $(libgc_dir) eglib mono $(ikvm_native_dir) support data runtime scripts man samples msvc $(docs_dir)
 # Keep in sync with SUBDIRS
 ## 'tools' is not normally built
-DIST_SUBDIRS = po libgc eglib mono ikvm-native support data runtime scripts man samples tools msvc docs
+DIST_SUBDIRS = m4 po libgc eglib mono ikvm-native support data runtime scripts man samples tools msvc docs
 endif
 endif
 
@@ -25,10 +24,8 @@ EXTRA_DIST= \
 	    build-mingw32.sh \
 	    mkinstalldirs \
 	    mono-uninstalled.pc.in \
-	    nls.m4 \
-	    po.m4 \
-	    progtest.m4 \
-	    winconfig.h
+	    winconfig.h \
+	    mono-core.spec
 
 DISTCHECK_CONFIGURE_FLAGS = EXTERNAL_MCS=false EXTERNAL_RUNTIME=false
 
@@ -37,7 +34,8 @@ GIT_DIR ?= $(srcdir)/.git
 dist-hook:
 	test -d $(distdir)/mcs || mkdir $(distdir)/mcs
 	d=`cd $(distdir)/mcs && pwd`; cd $(mcs_topdir) && $(MAKE) distdir=$$d dist-recursive
-	test ! -d $(GIT_DIR) || ./scripts/commits-to-changelog.py --root=$(distdir) last-commit-with-compulsory-changelog-entry
+# Disable this for now because it is very slow and causes wrench to timeout:
+#	test ! -d $(GIT_DIR) || ./scripts/commits-to-changelog.py --root=$(distdir) last-commit-with-compulsory-changelog-entry
 
 pkgconfigdir = $(libdir)/pkgconfig
 noinst_DATA = mono-uninstalled.pc
@@ -143,6 +141,7 @@ package-inputs:
 		 read output; echo "      <output>$$output</output>"; \
 		 read built;  echo "      <built_sources>$$built</built_sources>"; \
 		 read libou;  echo "      <library_output>$$libou</library_output>"; \
+		 read fx_ver; echo "      <fx_version>$$fx_ver</fx_version>"; \
 		 read resp;   echo "      <response>$$resp</response>"; \
 		echo "    </project>") >> msvc/scripts/order.xml; \
 	done
diff --git a/Makefile.in b/Makefile.in
index 3a9f865..b7851ca 100644
--- a/Makefile.in
+++ b/Makefile.in
@@ -40,14 +40,16 @@ DIST_COMMON = README $(am__configure_deps) $(srcdir)/Makefile.am \
 	$(srcdir)/Makefile.in $(srcdir)/config.h.in \
 	$(srcdir)/mono-core.spec.in $(srcdir)/mono-uninstalled.pc.in \
 	$(top_srcdir)/configure AUTHORS COPYING.LIB ChangeLog NEWS \
-	config.guess config.sub depcomp install-sh ltmain.sh missing \
-	mkinstalldirs
+	config.guess config.rpath config.sub depcomp install-sh \
+	ltmain.sh missing mkinstalldirs
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/libtool.m4 \
-	$(top_srcdir)/ltoptions.m4 $(top_srcdir)/ltsugar.m4 \
-	$(top_srcdir)/ltversion.m4 $(top_srcdir)/lt~obsolete.m4 \
-	$(top_srcdir)/nls.m4 $(top_srcdir)/po.m4 \
-	$(top_srcdir)/progtest.m4 $(top_srcdir)/acinclude.m4 \
+am__aclocal_m4_deps = $(top_srcdir)/m4/iconv.m4 \
+	$(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
+	$(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \
+	$(top_srcdir)/m4/progtest.m4 $(top_srcdir)/acinclude.m4 \
 	$(top_srcdir)/configure.in
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
@@ -106,8 +108,8 @@ am__relativize = \
     dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \
   done; \
   reldir="$$dir2"
-DIST_ARCHIVES = $(distdir).tar.gz
 GZIP_ENV = --best
+DIST_ARCHIVES = $(distdir).tar.bz2
 distuninstallcheck_listfiles = find . -type f -print
 distcleancheck_listfiles = find . -type f -print
 ACLOCAL = @ACLOCAL@
@@ -119,7 +121,6 @@ AUTOCONF = @AUTOCONF@
 AUTOHEADER = @AUTOHEADER@
 AUTOMAKE = @AUTOMAKE@
 AWK = @AWK@
-BISON = @BISON@
 BOEHM_DEFINES = @BOEHM_DEFINES@
 BUILD_EXEEXT = @BUILD_EXEEXT@
 BUILD_GLIB_CFLAGS = @BUILD_GLIB_CFLAGS@
@@ -173,9 +174,11 @@ INTL = @INTL@
 LD = @LD@
 LDFLAGS = @LDFLAGS@
 LIBC = @LIBC@
-LIBGC_CFLAGS = @LIBGC_CFLAGS@
+LIBGC_CPPFLAGS = @LIBGC_CPPFLAGS@
 LIBGC_LIBS = @LIBGC_LIBS@
 LIBGC_STATIC_LIBS = @LIBGC_STATIC_LIBS@
+LIBICONV = @LIBICONV@
+LIBMONO_LA = @LIBMONO_LA@
 LIBOBJS = @LIBOBJS@
 LIBS = @LIBS@
 LIBTOOL = @LIBTOOL@
@@ -188,6 +191,7 @@ LLVM_LIBS = @LLVM_LIBS@
 LN_S = @LN_S@
 LTCOMPILE = @LTCOMPILE@
 LTCXXCOMPILE = @LTCXXCOMPILE@
+LTLIBICONV = @LTLIBICONV@
 LTLIBOBJS = @LTLIBOBJS@
 MAINT = @MAINT@
 MAKEINFO = @MAKEINFO@
@@ -304,28 +308,27 @@ target_vendor = @target_vendor@
 top_build_prefix = @top_build_prefix@
 top_builddir = @top_builddir@
 top_srcdir = @top_srcdir@
-AUTOMAKE_OPTIONS = foreign
-ACLOCAL_AMFLAGS = -I .
+ACLOCAL_AMFLAGS = -I m4
 MOONLIGHT_SUBDIRS = $(libgc_dir) eglib/src mono
 @CROSS_COMPILING_FALSE@@ONLY_MOONLIGHT_FALSE at SUBDIRS = po $(libgc_dir) eglib mono $(ikvm_native_dir) support data runtime scripts man samples msvc $(docs_dir)
 @CROSS_COMPILING_FALSE@@ONLY_MOONLIGHT_TRUE at SUBDIRS = $(MOONLIGHT_SUBDIRS) runtime
 @CROSS_COMPILING_TRUE at SUBDIRS = po $(libgc_dir) eglib mono $(ikvm_native_dir) data runtime scripts man samples msvc $(docs_dir)
 # Keep in sync with SUBDIRS
- at CROSS_COMPILING_FALSE@@ONLY_MOONLIGHT_FALSE at DIST_SUBDIRS = po libgc eglib mono ikvm-native support data runtime scripts man samples tools msvc docs
+ at CROSS_COMPILING_FALSE@@ONLY_MOONLIGHT_FALSE at DIST_SUBDIRS = m4 po libgc eglib mono ikvm-native support data runtime scripts man samples tools msvc docs
 # Keep in sync with SUBDIRS
- at CROSS_COMPILING_TRUE@DIST_SUBDIRS = po libgc eglib mono ikvm-native         data runtime scripts man samples tools msvc docs
+ at CROSS_COMPILING_TRUE@DIST_SUBDIRS = m4 po libgc eglib mono ikvm-native data runtime scripts man samples tools msvc docs
 EXTRA_DIST = \
 	    LICENSE \
 	    autogen.sh \
 	    build-mingw32.sh \
 	    mkinstalldirs \
 	    mono-uninstalled.pc.in \
-	    nls.m4 \
-	    po.m4 \
-	    progtest.m4 \
-	    winconfig.h
+	    winconfig.h \
+	    mono-core.spec
 
 DISTCHECK_CONFIGURE_FLAGS = EXTERNAL_MCS=false EXTERNAL_RUNTIME=false
+# Disable this for now because it is very slow and causes wrench to timeout:
+#	test ! -d $(GIT_DIR) || ./scripts/commits-to-changelog.py --root=$(distdir) last-commit-with-compulsory-changelog-entry
 pkgconfigdir = $(libdir)/pkgconfig
 noinst_DATA = mono-uninstalled.pc
 DISTCLEANFILES = mono-uninstalled.pc
@@ -612,7 +615,6 @@ distdir: $(DISTFILES)
 dist-gzip: distdir
 	tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz
 	$(am__remove_distdir)
-
 dist-bzip2: distdir
 	tardir=$(distdir) && $(am__tar) | bzip2 -9 -c >$(distdir).tar.bz2
 	$(am__remove_distdir)
@@ -639,7 +641,7 @@ dist-zip: distdir
 	$(am__remove_distdir)
 
 dist dist-all: distdir
-	tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz
+	tardir=$(distdir) && $(am__tar) | bzip2 -9 -c >$(distdir).tar.bz2
 	$(am__remove_distdir)
 
 # This target untars the dist file and tries a VPATH configuration.  Then
@@ -843,7 +845,6 @@ GIT_DIR ?= $(srcdir)/.git
 dist-hook:
 	test -d $(distdir)/mcs || mkdir $(distdir)/mcs
 	d=`cd $(distdir)/mcs && pwd`; cd $(mcs_topdir) && $(MAKE) distdir=$$d dist-recursive
-	test ! -d $(GIT_DIR) || ./scripts/commits-to-changelog.py --root=$(distdir) last-commit-with-compulsory-changelog-entry
 .PHONY: get-monolite-latest 
 get-monolite-latest:
 	-rm -fr $(mcslib)/monolite-*
@@ -936,6 +937,7 @@ package-inputs:
 		 read output; echo "      <output>$$output</output>"; \
 		 read built;  echo "      <built_sources>$$built</built_sources>"; \
 		 read libou;  echo "      <library_output>$$libou</library_output>"; \
+		 read fx_ver; echo "      <fx_version>$$fx_ver</fx_version>"; \
 		 read resp;   echo "      <response>$$resp</response>"; \
 		echo "    </project>") >> msvc/scripts/order.xml; \
 	done
diff --git a/aclocal.m4 b/aclocal.m4
index b87cab3..c1c9ab9 100644
--- a/aclocal.m4
+++ b/aclocal.m4
@@ -1063,12 +1063,16 @@ AC_SUBST([am__tar])
 AC_SUBST([am__untar])
 ]) # _AM_PROG_TAR
 
-m4_include([libtool.m4])
-m4_include([ltoptions.m4])
-m4_include([ltsugar.m4])
-m4_include([ltversion.m4])
-m4_include([lt~obsolete.m4])
-m4_include([nls.m4])
-m4_include([po.m4])
-m4_include([progtest.m4])
+m4_include([m4/iconv.m4])
+m4_include([m4/lib-ld.m4])
+m4_include([m4/lib-link.m4])
+m4_include([m4/lib-prefix.m4])
+m4_include([m4/libtool.m4])
+m4_include([m4/ltoptions.m4])
+m4_include([m4/ltsugar.m4])
+m4_include([m4/ltversion.m4])
+m4_include([m4/lt~obsolete.m4])
+m4_include([m4/nls.m4])
+m4_include([m4/po.m4])
+m4_include([m4/progtest.m4])
 m4_include([acinclude.m4])
diff --git a/autogen.sh b/autogen.sh
index 898b2d8..5d578c0 100755
--- a/autogen.sh
+++ b/autogen.sh
@@ -102,8 +102,8 @@ if grep "^AM_PROG_LIBTOOL" configure.in >/dev/null; then
   fi
 fi
 
-echo "Running aclocal -I . $ACLOCAL_FLAGS ..."
-aclocal -I . $ACLOCAL_FLAGS || {
+echo "Running aclocal -I m4 -I . $ACLOCAL_FLAGS ..."
+aclocal -I m4 -I . $ACLOCAL_FLAGS || {
   echo
   echo "**Error**: aclocal failed. This may mean that you have not"
   echo "installed all of the packages you need, or you may need to"
diff --git a/config.h.in b/config.h.in
index 9f39b43..0a2d7f8 100644
--- a/config.h.in
+++ b/config.h.in
@@ -33,6 +33,9 @@
 /* Disable generics support */
 #undef DISABLE_GENERICS
 
+/* Icall tables disabled */
+#undef DISABLE_ICALL_TABLES
+
 /* Disable the JIT, only full-aot mode will be supported by the runtime. */
 #undef DISABLE_JIT
 
@@ -87,6 +90,12 @@
 /* Enable DTrace probes */
 #undef ENABLE_DTRACE
 
+/* Icall export enabled */
+#undef ENABLE_ICALL_EXPORT
+
+/* Icall symbol map enabled */
+#undef ENABLE_ICALL_SYMBOL_MAP
+
 /* Enable the LLVM back end */
 #undef ENABLE_LLVM
 
@@ -252,6 +261,9 @@
 /* Define to 1 if you have the <grp.h> header file. */
 #undef HAVE_GRP_H
 
+/* Define if you have the iconv() function and it works. */
+#undef HAVE_ICONV
+
 /* Define to 1 if you have the <ieeefp.h> header file. */
 #undef HAVE_IEEEFP_H
 
@@ -297,9 +309,18 @@
 /* Define to 1 if you have the <link.h> header file. */
 #undef HAVE_LINK_H
 
+/* Define to 1 if you have the <linux/magic.h> header file. */
+#undef HAVE_LINUX_MAGIC_H
+
+/* Define to 1 if you have the <linux/netlink.h> header file. */
+#undef HAVE_LINUX_NETLINK_H
+
 /* Define to 1 if you have the <linux/rtc.h> header file. */
 #undef HAVE_LINUX_RTC_H
 
+/* Define to 1 if you have the <linux/rtnetlink.h> header file. */
+#undef HAVE_LINUX_RTNETLINK_H
+
 /* Define to 1 if you have the `lockf' function. */
 #undef HAVE_LOCKF
 
@@ -387,6 +408,9 @@
 /* Define to 1 if you have the <pthread.h> header file. */
 #undef HAVE_PTHREAD_H
 
+/* Define to 1 if you have the `pthread_kill' function. */
+#undef HAVE_PTHREAD_KILL
+
 /* Define to 1 if you have the `pthread_mutex_timedlock' function. */
 #undef HAVE_PTHREAD_MUTEX_TIMEDLOCK
 
@@ -708,6 +732,9 @@
 /* Host Platform is Win32 */
 #undef HOST_WIN32
 
+/* Define as const if the declaration of iconv() needs const. */
+#undef ICONV_CONST
+
 /* Major version of LLVM libraries */
 #undef LLVM_MAJOR_VERSION
 
@@ -809,6 +836,9 @@
 #undef TARGET_BYTE_ORDER
 
 /* ... */
+#undef TARGET_MIPS
+
+/* ... */
 #undef TARGET_NACL
 
 /* ... */
@@ -820,6 +850,9 @@
 /* ... */
 #undef TARGET_PS3
 
+/* ... */
+#undef TARGET_S390X
+
 /* Target OS is Win32/MinGW */
 #undef TARGET_WIN32
 
diff --git a/config.rpath b/config.rpath
new file mode 100755
index 0000000..17298f2
--- /dev/null
+++ b/config.rpath
@@ -0,0 +1,672 @@
+#! /bin/sh
+# Output a system dependent set of variables, describing how to set the
+# run time search path of shared libraries in an executable.
+#
+#   Copyright 1996-2010 Free Software Foundation, Inc.
+#   Taken from GNU libtool, 2001
+#   Originally by Gordon Matzigkeit <gord at gnu.ai.mit.edu>, 1996
+#
+#   This file is free software; the Free Software Foundation gives
+#   unlimited permission to copy and/or distribute it, with or without
+#   modifications, as long as this notice is preserved.
+#
+# The first argument passed to this file is the canonical host specification,
+#    CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM
+# or
+#    CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM
+# The environment variables CC, GCC, LDFLAGS, LD, with_gnu_ld
+# should be set by the caller.
+#
+# The set of defined variables is at the end of this script.
+
+# Known limitations:
+# - On IRIX 6.5 with CC="cc", the run time search patch must not be longer
+#   than 256 bytes, otherwise the compiler driver will dump core. The only
+#   known workaround is to choose shorter directory names for the build
+#   directory and/or the installation directory.
+
+# All known linkers require a `.a' archive for static linking (except MSVC,
+# which needs '.lib').
+libext=a
+shrext=.so
+
+host="$1"
+host_cpu=`echo "$host" | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'`
+host_vendor=`echo "$host" | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'`
+host_os=`echo "$host" | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'`
+
+# Code taken from libtool.m4's _LT_CC_BASENAME.
+
+for cc_temp in $CC""; do
+  case $cc_temp in
+    compile | *[\\/]compile | ccache | *[\\/]ccache ) ;;
+    distcc | *[\\/]distcc | purify | *[\\/]purify ) ;;
+    \-*) ;;
+    *) break;;
+  esac
+done
+cc_basename=`echo "$cc_temp" | sed -e 's%^.*/%%'`
+
+# Code taken from libtool.m4's _LT_COMPILER_PIC.
+
+wl=
+if test "$GCC" = yes; then
+  wl='-Wl,'
+else
+  case "$host_os" in
+    aix*)
+      wl='-Wl,'
+      ;;
+    darwin*)
+      case $cc_basename in
+        xlc*)
+          wl='-Wl,'
+          ;;
+      esac
+      ;;
+    mingw* | cygwin* | pw32* | os2* | cegcc*)
+      ;;
+    hpux9* | hpux10* | hpux11*)
+      wl='-Wl,'
+      ;;
+    irix5* | irix6* | nonstopux*)
+      wl='-Wl,'
+      ;;
+    newsos6)
+      ;;
+    linux* | k*bsd*-gnu)
+      case $cc_basename in
+        ecc*)
+          wl='-Wl,'
+          ;;
+        icc* | ifort*)
+          wl='-Wl,'
+          ;;
+        lf95*)
+          wl='-Wl,'
+          ;;
+        pgcc | pgf77 | pgf90)
+          wl='-Wl,'
+          ;;
+        ccc*)
+          wl='-Wl,'
+          ;;
+        como)
+          wl='-lopt='
+          ;;
+        *)
+          case `$CC -V 2>&1 | sed 5q` in
+            *Sun\ C*)
+              wl='-Wl,'
+              ;;
+          esac
+          ;;
+      esac
+      ;;
+    osf3* | osf4* | osf5*)
+      wl='-Wl,'
+      ;;
+    rdos*)
+      ;;
+    solaris*)
+      wl='-Wl,'
+      ;;
+    sunos4*)
+      wl='-Qoption ld '
+      ;;
+    sysv4 | sysv4.2uw2* | sysv4.3*)
+      wl='-Wl,'
+      ;;
+    sysv4*MP*)
+      ;;
+    sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*)
+      wl='-Wl,'
+      ;;
+    unicos*)
+      wl='-Wl,'
+      ;;
+    uts4*)
+      ;;
+  esac
+fi
+
+# Code taken from libtool.m4's _LT_LINKER_SHLIBS.
+
+hardcode_libdir_flag_spec=
+hardcode_libdir_separator=
+hardcode_direct=no
+hardcode_minus_L=no
+
+case "$host_os" in
+  cygwin* | mingw* | pw32* | cegcc*)
+    # FIXME: the MSVC++ port hasn't been tested in a loooong time
+    # When not using gcc, we currently assume that we are using
+    # Microsoft Visual C++.
+    if test "$GCC" != yes; then
+      with_gnu_ld=no
+    fi
+    ;;
+  interix*)
+    # we just hope/assume this is gcc and not c89 (= MSVC++)
+    with_gnu_ld=yes
+    ;;
+  openbsd*)
+    with_gnu_ld=no
+    ;;
+esac
+
+ld_shlibs=yes
+if test "$with_gnu_ld" = yes; then
+  # Set some defaults for GNU ld with shared library support. These
+  # are reset later if shared libraries are not supported. Putting them
+  # here allows them to be overridden if necessary.
+  # Unlike libtool, we use -rpath here, not --rpath, since the documented
+  # option of GNU ld is called -rpath, not --rpath.
+  hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
+  case "$host_os" in
+    aix[3-9]*)
+      # On AIX/PPC, the GNU linker is very broken
+      if test "$host_cpu" != ia64; then
+        ld_shlibs=no
+      fi
+      ;;
+    amigaos*)
+      hardcode_libdir_flag_spec='-L$libdir'
+      hardcode_minus_L=yes
+      # Samuel A. Falvo II <kc5tja at dolphin.openprojects.net> reports
+      # that the semantics of dynamic libraries on AmigaOS, at least up
+      # to version 4, is to share data among multiple programs linked
+      # with the same dynamic library.  Since this doesn't match the
+      # behavior of shared libraries on other platforms, we cannot use
+      # them.
+      ld_shlibs=no
+      ;;
+    beos*)
+      if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
+        :
+      else
+        ld_shlibs=no
+      fi
+      ;;
+    cygwin* | mingw* | pw32* | cegcc*)
+      # hardcode_libdir_flag_spec is actually meaningless, as there is
+      # no search path for DLLs.
+      hardcode_libdir_flag_spec='-L$libdir'
+      if $LD --help 2>&1 | grep 'auto-import' > /dev/null; then
+        :
+      else
+        ld_shlibs=no
+      fi
+      ;;
+    interix[3-9]*)
+      hardcode_direct=no
+      hardcode_libdir_flag_spec='${wl}-rpath,$libdir'
+      ;;
+    gnu* | linux* | k*bsd*-gnu)
+      if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
+        :
+      else
+        ld_shlibs=no
+      fi
+      ;;
+    netbsd*)
+      ;;
+    solaris*)
+      if $LD -v 2>&1 | grep 'BFD 2\.8' > /dev/null; then
+        ld_shlibs=no
+      elif $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
+        :
+      else
+        ld_shlibs=no
+      fi
+      ;;
+    sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*)
+      case `$LD -v 2>&1` in
+        *\ [01].* | *\ 2.[0-9].* | *\ 2.1[0-5].*)
+          ld_shlibs=no
+          ;;
+        *)
+          if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
+            hardcode_libdir_flag_spec='`test -z "$SCOABSPATH" && echo ${wl}-rpath,$libdir`'
+          else
+            ld_shlibs=no
+          fi
+          ;;
+      esac
+      ;;
+    sunos4*)
+      hardcode_direct=yes
+      ;;
+    *)
+      if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
+        :
+      else
+        ld_shlibs=no
+      fi
+      ;;
+  esac
+  if test "$ld_shlibs" = no; then
+    hardcode_libdir_flag_spec=
+  fi
+else
+  case "$host_os" in
+    aix3*)
+      # Note: this linker hardcodes the directories in LIBPATH if there
+      # are no directories specified by -L.
+      hardcode_minus_L=yes
+      if test "$GCC" = yes; then
+        # Neither direct hardcoding nor static linking is supported with a
+        # broken collect2.
+        hardcode_direct=unsupported
+      fi
+      ;;
+    aix[4-9]*)
+      if test "$host_cpu" = ia64; then
+        # On IA64, the linker does run time linking by default, so we don't
+        # have to do anything special.
+        aix_use_runtimelinking=no
+      else
+        aix_use_runtimelinking=no
+        # Test if we are trying to use run time linking or normal
+        # AIX style linking. If -brtl is somewhere in LDFLAGS, we
+        # need to do runtime linking.
+        case $host_os in aix4.[23]|aix4.[23].*|aix[5-9]*)
+          for ld_flag in $LDFLAGS; do
+            if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then
+              aix_use_runtimelinking=yes
+              break
+            fi
+          done
+          ;;
+        esac
+      fi
+      hardcode_direct=yes
+      hardcode_libdir_separator=':'
+      if test "$GCC" = yes; then
+        case $host_os in aix4.[012]|aix4.[012].*)
+          collect2name=`${CC} -print-prog-name=collect2`
+          if test -f "$collect2name" && \
+            strings "$collect2name" | grep resolve_lib_name >/dev/null
+          then
+            # We have reworked collect2
+            :
+          else
+            # We have old collect2
+            hardcode_direct=unsupported
+            hardcode_minus_L=yes
+            hardcode_libdir_flag_spec='-L$libdir'
+            hardcode_libdir_separator=
+          fi
+          ;;
+        esac
+      fi
+      # Begin _LT_AC_SYS_LIBPATH_AIX.
+      echo 'int main () { return 0; }' > conftest.c
+      ${CC} ${LDFLAGS} conftest.c -o conftest
+      aix_libpath=`dump -H conftest 2>/dev/null | sed -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0  *\(.*\)$/\1/; p; }
+}'`
+      if test -z "$aix_libpath"; then
+        aix_libpath=`dump -HX64 conftest 2>/dev/null | sed -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0  *\(.*\)$/\1/; p; }
+}'`
+      fi
+      if test -z "$aix_libpath"; then
+        aix_libpath="/usr/lib:/lib"
+      fi
+      rm -f conftest.c conftest
+      # End _LT_AC_SYS_LIBPATH_AIX.
+      if test "$aix_use_runtimelinking" = yes; then
+        hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath"
+      else
+        if test "$host_cpu" = ia64; then
+          hardcode_libdir_flag_spec='${wl}-R $libdir:/usr/lib:/lib'
+        else
+          hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath"
+        fi
+      fi
+      ;;
+    amigaos*)
+      hardcode_libdir_flag_spec='-L$libdir'
+      hardcode_minus_L=yes
+      # see comment about different semantics on the GNU ld section
+      ld_shlibs=no
+      ;;
+    bsdi[45]*)
+      ;;
+    cygwin* | mingw* | pw32* | cegcc*)
+      # When not using gcc, we currently assume that we are using
+      # Microsoft Visual C++.
+      # hardcode_libdir_flag_spec is actually meaningless, as there is
+      # no search path for DLLs.
+      hardcode_libdir_flag_spec=' '
+      libext=lib
+      ;;
+    darwin* | rhapsody*)
+      hardcode_direct=no
+      if test "$GCC" = yes ; then
+        :
+      else
+        case $cc_basename in
+          xlc*)
+            ;;
+          *)
+            ld_shlibs=no
+            ;;
+        esac
+      fi
+      ;;
+    dgux*)
+      hardcode_libdir_flag_spec='-L$libdir'
+      ;;
+    freebsd1*)
+      ld_shlibs=no
+      ;;
+    freebsd2.2*)
+      hardcode_libdir_flag_spec='-R$libdir'
+      hardcode_direct=yes
+      ;;
+    freebsd2*)
+      hardcode_direct=yes
+      hardcode_minus_L=yes
+      ;;
+    freebsd* | dragonfly*)
+      hardcode_libdir_flag_spec='-R$libdir'
+      hardcode_direct=yes
+      ;;
+    hpux9*)
+      hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir'
+      hardcode_libdir_separator=:
+      hardcode_direct=yes
+      # hardcode_minus_L: Not really in the search PATH,
+      # but as the default location of the library.
+      hardcode_minus_L=yes
+      ;;
+    hpux10*)
+      if test "$with_gnu_ld" = no; then
+        hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir'
+        hardcode_libdir_separator=:
+        hardcode_direct=yes
+        # hardcode_minus_L: Not really in the search PATH,
+        # but as the default location of the library.
+        hardcode_minus_L=yes
+      fi
+      ;;
+    hpux11*)
+      if test "$with_gnu_ld" = no; then
+        hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir'
+        hardcode_libdir_separator=:
+        case $host_cpu in
+          hppa*64*|ia64*)
+            hardcode_direct=no
+            ;;
+          *)
+            hardcode_direct=yes
+            # hardcode_minus_L: Not really in the search PATH,
+            # but as the default location of the library.
+            hardcode_minus_L=yes
+            ;;
+        esac
+      fi
+      ;;
+    irix5* | irix6* | nonstopux*)
+      hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
+      hardcode_libdir_separator=:
+      ;;
+    netbsd*)
+      hardcode_libdir_flag_spec='-R$libdir'
+      hardcode_direct=yes
+      ;;
+    newsos6)
+      hardcode_direct=yes
+      hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
+      hardcode_libdir_separator=:
+      ;;
+    openbsd*)
+      if test -f /usr/libexec/ld.so; then
+        hardcode_direct=yes
+        if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
+          hardcode_libdir_flag_spec='${wl}-rpath,$libdir'
+        else
+          case "$host_os" in
+            openbsd[01].* | openbsd2.[0-7] | openbsd2.[0-7].*)
+              hardcode_libdir_flag_spec='-R$libdir'
+              ;;
+            *)
+              hardcode_libdir_flag_spec='${wl}-rpath,$libdir'
+              ;;
+          esac
+        fi
+      else
+        ld_shlibs=no
+      fi
+      ;;
+    os2*)
+      hardcode_libdir_flag_spec='-L$libdir'
+      hardcode_minus_L=yes
+      ;;
+    osf3*)
+      hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
+      hardcode_libdir_separator=:
+      ;;
+    osf4* | osf5*)
+      if test "$GCC" = yes; then
+        hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
+      else
+        # Both cc and cxx compiler support -rpath directly
+        hardcode_libdir_flag_spec='-rpath $libdir'
+      fi
+      hardcode_libdir_separator=:
+      ;;
+    solaris*)
+      hardcode_libdir_flag_spec='-R$libdir'
+      ;;
+    sunos4*)
+      hardcode_libdir_flag_spec='-L$libdir'
+      hardcode_direct=yes
+      hardcode_minus_L=yes
+      ;;
+    sysv4)
+      case $host_vendor in
+        sni)
+          hardcode_direct=yes # is this really true???
+          ;;
+        siemens)
+          hardcode_direct=no
+          ;;
+        motorola)
+          hardcode_direct=no #Motorola manual says yes, but my tests say they lie
+          ;;
+      esac
+      ;;
+    sysv4.3*)
+      ;;
+    sysv4*MP*)
+      if test -d /usr/nec; then
+        ld_shlibs=yes
+      fi
+      ;;
+    sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7* | sco3.2v5.0.[024]*)
+      ;;
+    sysv5* | sco3.2v5* | sco5v6*)
+      hardcode_libdir_flag_spec='`test -z "$SCOABSPATH" && echo ${wl}-R,$libdir`'
+      hardcode_libdir_separator=':'
+      ;;
+    uts4*)
+      hardcode_libdir_flag_spec='-L$libdir'
+      ;;
+    *)
+      ld_shlibs=no
+      ;;
+  esac
+fi
+
+# Check dynamic linker characteristics
+# Code taken from libtool.m4's _LT_SYS_DYNAMIC_LINKER.
+# Unlike libtool.m4, here we don't care about _all_ names of the library, but
+# only about the one the linker finds when passed -lNAME. This is the last
+# element of library_names_spec in libtool.m4, or possibly two of them if the
+# linker has special search rules.
+library_names_spec=      # the last element of library_names_spec in libtool.m4
+libname_spec='lib$name'
+case "$host_os" in
+  aix3*)
+    library_names_spec='$libname.a'
+    ;;
+  aix[4-9]*)
+    library_names_spec='$libname$shrext'
+    ;;
+  amigaos*)
+    library_names_spec='$libname.a'
+    ;;
+  beos*)
+    library_names_spec='$libname$shrext'
+    ;;
+  bsdi[45]*)
+    library_names_spec='$libname$shrext'
+    ;;
+  cygwin* | mingw* | pw32* | cegcc*)
+    shrext=.dll
+    library_names_spec='$libname.dll.a $libname.lib'
+    ;;
+  darwin* | rhapsody*)
+    shrext=.dylib
+    library_names_spec='$libname$shrext'
+    ;;
+  dgux*)
+    library_names_spec='$libname$shrext'
+    ;;
+  freebsd1*)
+    ;;
+  freebsd* | dragonfly*)
+    case "$host_os" in
+      freebsd[123]*)
+        library_names_spec='$libname$shrext$versuffix' ;;
+      *)
+        library_names_spec='$libname$shrext' ;;
+    esac
+    ;;
+  gnu*)
+    library_names_spec='$libname$shrext'
+    ;;
+  hpux9* | hpux10* | hpux11*)
+    case $host_cpu in
+      ia64*)
+        shrext=.so
+        ;;
+      hppa*64*)
+        shrext=.sl
+        ;;
+      *)
+        shrext=.sl
+        ;;
+    esac
+    library_names_spec='$libname$shrext'
+    ;;
+  interix[3-9]*)
+    library_names_spec='$libname$shrext'
+    ;;
+  irix5* | irix6* | nonstopux*)
+    library_names_spec='$libname$shrext'
+    case "$host_os" in
+      irix5* | nonstopux*)
+        libsuff= shlibsuff=
+        ;;
+      *)
+        case $LD in
+          *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") libsuff= shlibsuff= ;;
+          *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") libsuff=32 shlibsuff=N32 ;;
+          *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") libsuff=64 shlibsuff=64 ;;
+          *) libsuff= shlibsuff= ;;
+        esac
+        ;;
+    esac
+    ;;
+  linux*oldld* | linux*aout* | linux*coff*)
+    ;;
+  linux* | k*bsd*-gnu)
+    library_names_spec='$libname$shrext'
+    ;;
+  knetbsd*-gnu)
+    library_names_spec='$libname$shrext'
+    ;;
+  netbsd*)
+    library_names_spec='$libname$shrext'
+    ;;
+  newsos6)
+    library_names_spec='$libname$shrext'
+    ;;
+  nto-qnx*)
+    library_names_spec='$libname$shrext'
+    ;;
+  openbsd*)
+    library_names_spec='$libname$shrext$versuffix'
+    ;;
+  os2*)
+    libname_spec='$name'
+    shrext=.dll
+    library_names_spec='$libname.a'
+    ;;
+  osf3* | osf4* | osf5*)
+    library_names_spec='$libname$shrext'
+    ;;
+  rdos*)
+    ;;
+  solaris*)
+    library_names_spec='$libname$shrext'
+    ;;
+  sunos4*)
+    library_names_spec='$libname$shrext$versuffix'
+    ;;
+  sysv4 | sysv4.3*)
+    library_names_spec='$libname$shrext'
+    ;;
+  sysv4*MP*)
+    library_names_spec='$libname$shrext'
+    ;;
+  sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*)
+    library_names_spec='$libname$shrext'
+    ;;
+  uts4*)
+    library_names_spec='$libname$shrext'
+    ;;
+esac
+
+sed_quote_subst='s/\(["`$\\]\)/\\\1/g'
+escaped_wl=`echo "X$wl" | sed -e 's/^X//' -e "$sed_quote_subst"`
+shlibext=`echo "$shrext" | sed -e 's,^\.,,'`
+escaped_libname_spec=`echo "X$libname_spec" | sed -e 's/^X//' -e "$sed_quote_subst"`
+escaped_library_names_spec=`echo "X$library_names_spec" | sed -e 's/^X//' -e "$sed_quote_subst"`
+escaped_hardcode_libdir_flag_spec=`echo "X$hardcode_libdir_flag_spec" | sed -e 's/^X//' -e "$sed_quote_subst"`
+
+LC_ALL=C sed -e 's/^\([a-zA-Z0-9_]*\)=/acl_cv_\1=/' <<EOF
+
+# How to pass a linker flag through the compiler.
+wl="$escaped_wl"
+
+# Static library suffix (normally "a").
+libext="$libext"
+
+# Shared library suffix (normally "so").
+shlibext="$shlibext"
+
+# Format of library name prefix.
+libname_spec="$escaped_libname_spec"
+
+# Library names that the linker finds when passed -lNAME.
+library_names_spec="$escaped_library_names_spec"
+
+# Flag to hardcode \$libdir into a binary during linking.
+# This must work even if \$libdir does not exist.
+hardcode_libdir_flag_spec="$escaped_hardcode_libdir_flag_spec"
+
+# Whether we need a single -rpath flag with a separated argument.
+hardcode_libdir_separator="$hardcode_libdir_separator"
+
+# Set to yes if using DIR/libNAME.so during linking hardcodes DIR into the
+# resulting binary.
+hardcode_direct="$hardcode_direct"
+
+# Set to yes if using the -LDIR flag during linking hardcodes DIR into the
+# resulting binary.
+hardcode_minus_L="$hardcode_minus_L"
+
+EOF
diff --git a/configure b/configure
index 136178f..193a3bd 100755
--- a/configure
+++ b/configure
@@ -1,6 +1,8 @@
 #! /bin/sh
 # Guess values for system-dependent variables and create Makefiles.
-# Generated by GNU Autoconf 2.68.
+# Generated by GNU Autoconf 2.68 for mono 2.11.
+#
+# Report bugs to <http://bugzilla.xamarin.com/enter_bug.cgi?classification=Mono>.
 #
 #
 # Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001,
@@ -236,10 +238,12 @@ fi
     $as_echo "$0: In particular, zsh $ZSH_VERSION has bugs and should"
     $as_echo "$0: be upgraded to zsh 4.3.4 or later."
   else
-    $as_echo "$0: Please tell bug-autoconf at gnu.org about your system,
-$0: including any error possibly output before this
-$0: message. Then install a modern shell, or manually run
-$0: the script under such a shell if you do have one."
+    $as_echo "$0: Please tell bug-autoconf at gnu.org and
+$0: http://bugzilla.xamarin.com/enter_bug.cgi?classification=Mono
+$0: about your system, including any error possibly output
+$0: before this message. Then install a modern shell, or
+$0: manually run the script under such a shell if you do
+$0: have one."
   fi
   exit 1
 fi
@@ -704,12 +708,12 @@ MFLAGS=
 MAKEFLAGS=
 
 # Identity of this package.
-PACKAGE_NAME=
-PACKAGE_TARNAME=
-PACKAGE_VERSION=
-PACKAGE_STRING=
-PACKAGE_BUGREPORT=
-PACKAGE_URL=
+PACKAGE_NAME='mono'
+PACKAGE_TARNAME='mono'
+PACKAGE_VERSION='2.11'
+PACKAGE_STRING='mono 2.11'
+PACKAGE_BUGREPORT='http://bugzilla.xamarin.com/enter_bug.cgi?classification=Mono'
+PACKAGE_URL=''
 
 ac_unique_file="README"
 # Factoring default headers for most tests.
@@ -798,6 +802,8 @@ MIPS_SGI_FALSE
 MIPS_SGI_TRUE
 MIPS_GCC_FALSE
 MIPS_GCC_TRUE
+INSTALL_MOBILE_FALSE
+INSTALL_MOBILE_TRUE
 INSTALL_MONOTOUCH_FALSE
 INSTALL_MONOTOUCH_TRUE
 INSTALL_MONODROID_FALSE
@@ -816,7 +822,10 @@ OPROFILE_LIBS
 OPROFILE_CFLAGS
 HAVE_OPROFILE_FALSE
 HAVE_OPROFILE_TRUE
+BUILD_MCS_FALSE
+BUILD_MCS_TRUE
 docs_dir
+LIBMONO_LA
 MOONLIGHT_DEFINES
 MONO_DEBUGGER_SUPPORTED_FALSE
 MONO_DEBUGGER_SUPPORTED_TRUE
@@ -855,7 +864,7 @@ BOEHM_DEFINES
 libgc_dir
 LIBGC_STATIC_LIBS
 LIBGC_LIBS
-LIBGC_CFLAGS
+LIBGC_CPPFLAGS
 INCLUDED_LIBGC_FALSE
 INCLUDED_LIBGC_TRUE
 SUPPORT_BOEHM_FALSE
@@ -890,12 +899,12 @@ GETTEXT_MACRO_VERSION
 USE_NLS
 mcs_topdir_from_srcdir
 mcs_topdir
-BUILD_MCS_FALSE
-BUILD_MCS_TRUE
 HAVE_ZLIB_FALSE
 HAVE_ZLIB_TRUE
 NO_VERSION_SCRIPT_FALSE
 NO_VERSION_SCRIPT_TRUE
+LTLIBICONV
+LIBICONV
 export_ldflags
 LTCXXCOMPILE
 LTCOMPILE
@@ -930,7 +939,6 @@ BUILD_EXEEXT
 HOST_CC
 CFLAGS_FOR_BUILD
 CC_FOR_BUILD
-BISON
 am__fastdepCCAS_FALSE
 am__fastdepCCAS_TRUE
 CCASDEPMODE
@@ -1062,12 +1070,13 @@ with_pic
 enable_fast_install
 with_gnu_ld
 enable_libtool_lock
+enable_rpath
+with_libiconv_prefix
 with_mcs_path
 enable_solaris_tar_check
 enable_nls
 with_libgdiplus
 with_crosspkgdir
-with_glib
 with_gc
 with_tls
 with_sigaltstack
@@ -1093,13 +1102,15 @@ enable_nacl_gc
 enable_llvm
 enable_loadedllvm
 with_sgen
-with_jit
-with_interp
 with_x
 enable_mono_debugger
+enable_icall_symbol_map
+enable_icall_export
+enable_icall_tables
 with_profile4
 with_monodroid
 with_monotouch
+with_mobile
 with_oprofile
 with_malloc_mempools
 with_mcs_docs
@@ -1163,7 +1174,7 @@ sharedstatedir='${prefix}/com'
 localstatedir='${prefix}/var'
 includedir='${prefix}/include'
 oldincludedir='/usr/include'
-docdir='${datarootdir}/doc/${PACKAGE}'
+docdir='${datarootdir}/doc/${PACKAGE_TARNAME}'
 infodir='${datarootdir}/info'
 htmldir='${docdir}'
 dvidir='${docdir}'
@@ -1665,7 +1676,7 @@ if test "$ac_init_help" = "long"; then
   # Omit some internal or obsolete options to make the list less imposing.
   # This message is too long to be a string in the A/UX 3.1 sh.
   cat <<_ACEOF
-\`configure' configures this package to adapt to many kinds of systems.
+\`configure' configures mono 2.11 to adapt to many kinds of systems.
 
 Usage: $0 [OPTION]... [VAR=VALUE]...
 
@@ -1713,7 +1724,7 @@ Fine tuning of the installation directories:
   --infodir=DIR           info documentation [DATAROOTDIR/info]
   --localedir=DIR         locale-dependent data [DATAROOTDIR/locale]
   --mandir=DIR            man documentation [DATAROOTDIR/man]
-  --docdir=DIR            documentation root [DATAROOTDIR/doc/PACKAGE]
+  --docdir=DIR            documentation root [DATAROOTDIR/doc/mono]
   --htmldir=DIR           html documentation [DOCDIR]
   --dvidir=DIR            dvi documentation [DOCDIR]
   --pdfdir=DIR            pdf documentation [DOCDIR]
@@ -1739,7 +1750,9 @@ _ACEOF
 fi
 
 if test -n "$ac_init_help"; then
-
+  case $ac_init_help in
+     short | recursive ) echo "Configuration of mono 2.11:";;
+   esac
   cat <<\_ACEOF
 
 Optional Features:
@@ -1755,6 +1768,7 @@ Optional Features:
   --enable-fast-install[=PKGS]
                           optimize for fast installation [default=yes]
   --disable-libtool-lock  avoid locking (might break parallel builds)
+  --disable-rpath         do not hardcode runtime library paths
   --disable-solaris-tar-check    disable solaris tar check
   --disable-nls           do not use Native Language Support
   --disable-mcs-build disable the build of the mcs directory
@@ -1776,6 +1790,9 @@ Optional Features:
   --enable-llvm	Enable the LLVM back-end
   --enable-loadedllvm	Load the LLVM back-end dynamically
   --disable-mono-debugger disable support for the mdb debugger
+ --enable-icall-symbol-map Generate tables which map icall functions to their C symbols
+ --enable-icall-export Export icall functions
+ --disable-icall-tables Disable the runtime lookup of icalls
 
 Optional Packages:
   --with-PACKAGE[=ARG]    use PACKAGE [ARG=yes]
@@ -1783,10 +1800,12 @@ Optional Packages:
   --with-pic              try to use only PIC/non-PIC objects [default=use
                           both]
   --with-gnu-ld           assume the C compiler uses GNU ld [default=no]
+  --with-gnu-ld           assume the C compiler uses GNU ld default=no
+  --with-libiconv-prefix[=DIR]  search for libiconv in DIR/include and DIR/lib
+  --without-libiconv-prefix     don't search for libiconv in includedir and libdir
   --with-mcs-path=/path/to/mcs      Specify an alternate mcs source tree
   --with-libgdiplus=installed|sibling|<path>	Override the libgdiplus used for System.Drawing tests (defaults to installed)
   --with-crosspkgdir=/path/to/pkg-config/dir      Change pkg-config dir to custom dir
-  --with-glib=embedded|system    Choose glib API: system or embedded (default to embedded)
   --with-gc=boehm,included,none  Controls the Boehm GC config, default=included
   --with-tls=__thread,pthread    select Thread Local Storage implementation (defaults to __thread)
   --with-sigaltstack=yes,no      enable/disable support for sigaltstack (defaults to yes)
@@ -1796,12 +1815,11 @@ Optional Packages:
   --with-large-heap=yes,no       Enable support for GC heaps larger than 3GB (defaults to no)
   --with-ikvm-native=yes,no      build the IKVM JNI interface library (defaults to yes)
   --with-sgen=yes,no             Extra Generational GC, default=yes
-  --with-jit=yes,no              If you want to build scripts that default to the JIT (defaults to no)
-  --with-interp=yes,no           If you want to build scripts that default to the interpreter (defaults to no)
   --with-x                use the X Window System
-  --with-profile4=yes,no          If you want to install the 4.0 FX (defaults to yes)
+  --with-profile4=yes,no          If you want to install the 4.x FX (defaults to yes)
   --with-monodroid=yes,no         If you want to build the MonoDroid 2.1 assemblies (defaults to no)
   --with-monotouch=yes,no         If you want to build the MonoTouch 2.1 assemblies (defaults to no)
+  --with-mobile=yes,no            If you want to build the Mobile 2.1 assemblies (defaults to no)
   --with-oprofile=no,<oprofile install dir>   Enable oprofile support (defaults to no)
   --with-malloc-mempools=yes,no  Use malloc for each single mempool allocation (only for runtime debugging, defaults to no)
   --with-mcs-docs=yes,no         If you want to build the documentation under mcs (defaults to yes)
@@ -1827,7 +1845,7 @@ Some influential environment variables:
 Use these variables to override the choices made by `configure' or to help
 it to find libraries and programs with nonstandard names/locations.
 
-Report bugs to the package provider.
+Report bugs to <http://bugzilla.xamarin.com/enter_bug.cgi?classification=Mono>.
 _ACEOF
 ac_status=$?
 fi
@@ -1890,7 +1908,7 @@ fi
 test -n "$ac_init_help" && exit $ac_status
 if $ac_init_version; then
   cat <<\_ACEOF
-configure
+mono configure 2.11
 generated by GNU Autoconf 2.68
 
 Copyright (C) 2010 Free Software Foundation, Inc.
@@ -2356,6 +2374,10 @@ $as_echo "$as_me: WARNING: $2: see the Autoconf documentation" >&2;}
 $as_echo "$as_me: WARNING: $2:     section \"Present But Cannot Be Compiled\"" >&2;}
     { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5
 $as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;}
+( $as_echo "## ---------------------------------------------------------------------------- ##
+## Report this to http://bugzilla.xamarin.com/enter_bug.cgi?classification=Mono ##
+## ---------------------------------------------------------------------------- ##"
+     ) | sed "s/^/$as_me: WARNING:     /" >&2
     ;;
 esac
   { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
@@ -2665,7 +2687,7 @@ cat >config.log <<_ACEOF
 This file contains any messages produced by compilers while
 running configure, to aid debugging if configure makes a mistake.
 
-It was created by $as_me, which was
+It was created by mono $as_me 2.11, which was
 generated by GNU Autoconf 2.68.  Invocation command line was
 
   $ $0 $@
@@ -3013,6 +3035,9 @@ ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $
 ac_compiler_gnu=$ac_cv_c_compiler_gnu
 
 
+
+
+
 ac_aux_dir=
 for ac_dir in "$srcdir" "$srcdir/.." "$srcdir/../.."; do
   if test -f "$ac_dir/install-sh"; then
@@ -3154,12 +3179,11 @@ test -n "$target_alias" &&
   program_prefix=${target_alias}-
 
 
+
 # Gross hack to enable 'make dist' on automake 1.9+tar 1.14.
 # The extra brackets are to foil regex-based scans.
 
 
-ac_config_headers="$ac_config_headers config.h"
-
 am__api_version='1.11'
 
 # Find a good install program.  We prefer a C program (faster),
@@ -3597,8 +3621,8 @@ fi
 
 
 # Define the identity of the package.
- PACKAGE=mono
- VERSION=2.10.8.1
+ PACKAGE='mono'
+ VERSION='2.11'
 
 
 cat >>confdefs.h <<_ACEOF
@@ -3719,6 +3743,8 @@ $as_echo "$am_cv_prog_tar_ustar" >&6; }
 
 
 
+ac_config_headers="$ac_config_headers config.h"
+
 
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to enable maintainer-specific portions of Makefiles" >&5
 $as_echo_n "checking whether to enable maintainer-specific portions of Makefiles... " >&6; }
@@ -3834,13 +3860,23 @@ $as_echo "#define PLATFORM_NO_SYMLINKS 1" >>confdefs.h
 		host_win32=yes
 		if test "x$cross_compiling" = "xno"; then
 			target_win32=yes
-			if test "x$host" == "x$build"; then
+			if test "x$host" == "x$build" -a "x$host" == "x$target"; then
 
 $as_echo "#define TARGET_WIN32 1" >>confdefs.h
 
 			fi
-			CC="gcc -mno-cygwin -g"
-			CXX="g++ -mno-cygwin -g"
+			#
+			# gcc-3/g++-3 are from the gcc-core/gcc-g++ cygwin packages.
+			# Other gcc packages will not work:
+			# - the gcc-4 packages no longer support -mno-cygwin
+			# - the mingw-gcc packages produce executables which depends on a libgcc<...>
+			# dll, which means we would have to distribute that file too.
+			#
+			if test "x$CC" != "x"; then
+				as_fn_error $? "Don't set CC. mono can only be compiled with gcc-3 from the 'gcc-core' package" "$LINENO" 5
+			fi
+			CC="gcc-3.exe -mno-cygwin -g"
+			CXX="g++-3.exe -mno-cygwin -g"
 			# So libgc configure gets -mno-cygwin
 			export CC
 			export CXX
@@ -3967,6 +4003,7 @@ $as_echo "#define TARGET_ANDROID 1" >>confdefs.h
 
 		# to bypass the underscore linker check, can't work when cross-compiling
 		mono_cv_uscore=yes
+		mono_cv_clang=no
 		;;
 	*-*-linux*)
 		host_win32=no
@@ -6550,49 +6587,6 @@ if test "x$CXX" = "xg++"; then
 	fi
 fi
 
-# Extract the first word of "bison", so it can be a program name with args.
-set dummy bison; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_BISON+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  if test -n "$BISON"; then
-  ac_cv_prog_BISON="$BISON" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-    for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
-    ac_cv_prog_BISON="yes"
-    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
-    break 2
-  fi
-done
-  done
-IFS=$as_save_IFS
-
-  test -z "$ac_cv_prog_BISON" && ac_cv_prog_BISON="no"
-fi
-fi
-BISON=$ac_cv_prog_BISON
-if test -n "$BISON"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $BISON" >&5
-$as_echo "$BISON" >&6; }
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
-if test "x$BISON" = "xno";
-then
-	as_fn_error $? "You need to install bison" "$LINENO" 5
-fi
-
 CC_FOR_BUILD=$CC
 CFLAGS_FOR_BUILD=$CFLAGS
 BUILD_EXEEXT=
@@ -7789,13 +7783,13 @@ if ${lt_cv_nm_interface+:} false; then :
 else
   lt_cv_nm_interface="BSD nm"
   echo "int some_variable = 0;" > conftest.$ac_ext
-  (eval echo "\"\$as_me:7792: $ac_compile\"" >&5)
+  (eval echo "\"\$as_me:7786: $ac_compile\"" >&5)
   (eval "$ac_compile" 2>conftest.err)
   cat conftest.err >&5
-  (eval echo "\"\$as_me:7795: $NM \\\"conftest.$ac_objext\\\"\"" >&5)
+  (eval echo "\"\$as_me:7789: $NM \\\"conftest.$ac_objext\\\"\"" >&5)
   (eval "$NM \"conftest.$ac_objext\"" 2>conftest.err > conftest.out)
   cat conftest.err >&5
-  (eval echo "\"\$as_me:7798: output\"" >&5)
+  (eval echo "\"\$as_me:7792: output\"" >&5)
   cat conftest.out >&5
   if $GREP 'External.*some_variable' conftest.out > /dev/null; then
     lt_cv_nm_interface="MS dumpbin"
@@ -8986,7 +8980,7 @@ ia64-*-hpux*)
   ;;
 *-*-irix6*)
   # Find out which ABI we are using.
-  echo '#line 8989 "configure"' > conftest.$ac_ext
+  echo '#line 8983 "configure"' > conftest.$ac_ext
   if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
   (eval $ac_compile) 2>&5
   ac_status=$?
@@ -10790,11 +10784,11 @@ else
    -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
    -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
    -e 's:$: $lt_compiler_flag:'`
-   (eval echo "\"\$as_me:10793: $lt_compile\"" >&5)
+   (eval echo "\"\$as_me:10787: $lt_compile\"" >&5)
    (eval "$lt_compile" 2>conftest.err)
    ac_status=$?
    cat conftest.err >&5
-   echo "$as_me:10797: \$? = $ac_status" >&5
+   echo "$as_me:10791: \$? = $ac_status" >&5
    if (exit $ac_status) && test -s "$ac_outfile"; then
      # The compiler can only warn and ignore the option if not recognized
      # So say no if there are warnings other than the usual output.
@@ -11129,11 +11123,11 @@ else
    -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
    -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
    -e 's:$: $lt_compiler_flag:'`
-   (eval echo "\"\$as_me:11132: $lt_compile\"" >&5)
+   (eval echo "\"\$as_me:11126: $lt_compile\"" >&5)
    (eval "$lt_compile" 2>conftest.err)
    ac_status=$?
    cat conftest.err >&5
-   echo "$as_me:11136: \$? = $ac_status" >&5
+   echo "$as_me:11130: \$? = $ac_status" >&5
    if (exit $ac_status) && test -s "$ac_outfile"; then
      # The compiler can only warn and ignore the option if not recognized
      # So say no if there are warnings other than the usual output.
@@ -11234,11 +11228,11 @@ else
    -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
    -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
    -e 's:$: $lt_compiler_flag:'`
-   (eval echo "\"\$as_me:11237: $lt_compile\"" >&5)
+   (eval echo "\"\$as_me:11231: $lt_compile\"" >&5)
    (eval "$lt_compile" 2>out/conftest.err)
    ac_status=$?
    cat out/conftest.err >&5
-   echo "$as_me:11241: \$? = $ac_status" >&5
+   echo "$as_me:11235: \$? = $ac_status" >&5
    if (exit $ac_status) && test -s out/conftest2.$ac_objext
    then
      # The compiler can only warn and ignore the option if not recognized
@@ -11289,11 +11283,11 @@ else
    -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
    -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
    -e 's:$: $lt_compiler_flag:'`
-   (eval echo "\"\$as_me:11292: $lt_compile\"" >&5)
+   (eval echo "\"\$as_me:11286: $lt_compile\"" >&5)
    (eval "$lt_compile" 2>out/conftest.err)
    ac_status=$?
    cat out/conftest.err >&5
-   echo "$as_me:11296: \$? = $ac_status" >&5
+   echo "$as_me:11290: \$? = $ac_status" >&5
    if (exit $ac_status) && test -s out/conftest2.$ac_objext
    then
      # The compiler can only warn and ignore the option if not recognized
@@ -13657,7 +13651,7 @@ else
   lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
   lt_status=$lt_dlunknown
   cat > conftest.$ac_ext <<_LT_EOF
-#line 13660 "configure"
+#line 13654 "configure"
 #include "confdefs.h"
 
 #if HAVE_DLFCN_H
@@ -13753,7 +13747,7 @@ else
   lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
   lt_status=$lt_dlunknown
   cat > conftest.$ac_ext <<_LT_EOF
-#line 13756 "configure"
+#line 13750 "configure"
 #include "confdefs.h"
 
 #if HAVE_DLFCN_H
@@ -15709,11 +15703,11 @@ else
    -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
    -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
    -e 's:$: $lt_compiler_flag:'`
-   (eval echo "\"\$as_me:15712: $lt_compile\"" >&5)
+   (eval echo "\"\$as_me:15706: $lt_compile\"" >&5)
    (eval "$lt_compile" 2>conftest.err)
    ac_status=$?
    cat conftest.err >&5
-   echo "$as_me:15716: \$? = $ac_status" >&5
+   echo "$as_me:15710: \$? = $ac_status" >&5
    if (exit $ac_status) && test -s "$ac_outfile"; then
      # The compiler can only warn and ignore the option if not recognized
      # So say no if there are warnings other than the usual output.
@@ -15808,11 +15802,11 @@ else
    -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
    -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
    -e 's:$: $lt_compiler_flag:'`
-   (eval echo "\"\$as_me:15811: $lt_compile\"" >&5)
+   (eval echo "\"\$as_me:15805: $lt_compile\"" >&5)
    (eval "$lt_compile" 2>out/conftest.err)
    ac_status=$?
    cat out/conftest.err >&5
-   echo "$as_me:15815: \$? = $ac_status" >&5
+   echo "$as_me:15809: \$? = $ac_status" >&5
    if (exit $ac_status) && test -s out/conftest2.$ac_objext
    then
      # The compiler can only warn and ignore the option if not recognized
@@ -15860,11 +15854,11 @@ else
    -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
    -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
    -e 's:$: $lt_compiler_flag:'`
-   (eval echo "\"\$as_me:15863: $lt_compile\"" >&5)
+   (eval echo "\"\$as_me:15857: $lt_compile\"" >&5)
    (eval "$lt_compile" 2>out/conftest.err)
    ac_status=$?
    cat out/conftest.err >&5
-   echo "$as_me:15867: \$? = $ac_status" >&5
+   echo "$as_me:15861: \$? = $ac_status" >&5
    if (exit $ac_status) && test -s out/conftest2.$ac_objext
    then
      # The compiler can only warn and ignore the option if not recognized
@@ -17134,146 +17128,1127 @@ if test "x$lt_cv_prog_gnu_ld" = "xno"; then
    no_version_script=yes
 fi
 
- if test x$no_version_script = xyes; then
-  NO_VERSION_SCRIPT_TRUE=
-  NO_VERSION_SCRIPT_FALSE='#'
-else
-  NO_VERSION_SCRIPT_TRUE='#'
-  NO_VERSION_SCRIPT_FALSE=
-fi
 
+      if test "X$prefix" = "XNONE"; then
+    acl_final_prefix="$ac_default_prefix"
+  else
+    acl_final_prefix="$prefix"
+  fi
+  if test "X$exec_prefix" = "XNONE"; then
+    acl_final_exec_prefix='${prefix}'
+  else
+    acl_final_exec_prefix="$exec_prefix"
+  fi
+  acl_save_prefix="$prefix"
+  prefix="$acl_final_prefix"
+  eval acl_final_exec_prefix=\"$acl_final_exec_prefix\"
+  prefix="$acl_save_prefix"
 
-for ac_header in sys/filio.h sys/sockio.h netdb.h utime.h sys/utime.h semaphore.h sys/un.h linux/rtc.h sys/syscall.h sys/mkdev.h sys/uio.h sys/param.h
-do :
-  as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
-ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default"
-if eval test \"x\$"$as_ac_Header"\" = x"yes"; then :
-  cat >>confdefs.h <<_ACEOF
-#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
-_ACEOF
 
+# Check whether --with-gnu-ld was given.
+if test "${with_gnu_ld+set}" = set; then :
+  withval=$with_gnu_ld; test "$withval" = no || with_gnu_ld=yes
+else
+  with_gnu_ld=no
 fi
 
-done
-
-for ac_header in sys/param.h sys/socket.h sys/ipc.h sys/sem.h sys/utsname.h alloca.h ucontext.h pwd.h sys/select.h netinet/tcp.h netinet/in.h unistd.h sys/types.h link.h asm/sigcontext.h
-do :
-  as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
-ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default"
-if eval test \"x\$"$as_ac_Header"\" = x"yes"; then :
-  cat >>confdefs.h <<_ACEOF
-#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
-_ACEOF
-
+# Prepare PATH_SEPARATOR.
+# The user is always right.
+if test "${PATH_SEPARATOR+set}" != set; then
+  echo "#! /bin/sh" >conf$$.sh
+  echo  "exit 0"   >>conf$$.sh
+  chmod +x conf$$.sh
+  if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then
+    PATH_SEPARATOR=';'
+  else
+    PATH_SEPARATOR=:
+  fi
+  rm -f conf$$.sh
+fi
+ac_prog=ld
+if test "$GCC" = yes; then
+  # Check if gcc -print-prog-name=ld gives a path.
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ld used by GCC" >&5
+$as_echo_n "checking for ld used by GCC... " >&6; }
+  case $host in
+  *-*-mingw*)
+    # gcc leaves a trailing carriage return which upsets mingw
+    ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;;
+  *)
+    ac_prog=`($CC -print-prog-name=ld) 2>&5` ;;
+  esac
+  case $ac_prog in
+    # Accept absolute paths.
+    [\\/]* | [A-Za-z]:[\\/]*)
+      re_direlt='/[^/][^/]*/\.\./'
+      # Canonicalize the path of ld
+      ac_prog=`echo $ac_prog| sed 's%\\\\%/%g'`
+      while echo $ac_prog | grep "$re_direlt" > /dev/null 2>&1; do
+        ac_prog=`echo $ac_prog| sed "s%$re_direlt%/%"`
+      done
+      test -z "$LD" && LD="$ac_prog"
+      ;;
+  "")
+    # If it fails, then pretend we aren't using GCC.
+    ac_prog=ld
+    ;;
+  *)
+    # If it is relative, then search for the first ld in PATH.
+    with_gnu_ld=unknown
+    ;;
+  esac
+elif test "$with_gnu_ld" = yes; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU ld" >&5
+$as_echo_n "checking for GNU ld... " >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for non-GNU ld" >&5
+$as_echo_n "checking for non-GNU ld... " >&6; }
+fi
+if ${acl_cv_path_LD+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -z "$LD"; then
+  IFS="${IFS= 	}"; ac_save_ifs="$IFS"; IFS="${IFS}${PATH_SEPARATOR-:}"
+  for ac_dir in $PATH; do
+    test -z "$ac_dir" && ac_dir=.
+    if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then
+      acl_cv_path_LD="$ac_dir/$ac_prog"
+      # Check to see if the program is GNU ld.  I'd rather use --version,
+      # but apparently some GNU ld's only accept -v.
+      # Break only if it was the GNU/non-GNU ld that we prefer.
+      case `"$acl_cv_path_LD" -v 2>&1 < /dev/null` in
+      *GNU* | *'with BFD'*)
+        test "$with_gnu_ld" != no && break ;;
+      *)
+        test "$with_gnu_ld" != yes && break ;;
+      esac
+    fi
+  done
+  IFS="$ac_save_ifs"
+else
+  acl_cv_path_LD="$LD" # Let the user override the test with a path.
+fi
 fi
 
-done
-
+LD="$acl_cv_path_LD"
+if test -n "$LD"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LD" >&5
+$as_echo "$LD" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+test -z "$LD" && as_fn_error $? "no acceptable ld found in \$PATH" "$LINENO" 5
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if the linker ($LD) is GNU ld" >&5
+$as_echo_n "checking if the linker ($LD) is GNU ld... " >&6; }
+if ${acl_cv_prog_gnu_ld+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  # I'd rather use --version here, but apparently some GNU ld's only accept -v.
+case `$LD -v 2>&1 </dev/null` in
+*GNU* | *'with BFD'*)
+  acl_cv_prog_gnu_ld=yes ;;
+*)
+  acl_cv_prog_gnu_ld=no ;;
+esac
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $acl_cv_prog_gnu_ld" >&5
+$as_echo "$acl_cv_prog_gnu_ld" >&6; }
+with_gnu_ld=$acl_cv_prog_gnu_ld
 
-for ac_header in sys/user.h
-do :
-  ac_fn_c_check_header_compile "$LINENO" "sys/user.h" "ac_cv_header_sys_user_h" "
-#ifdef HAVE_SYS_PARAM_H
-# include <sys/param.h>
-#endif
 
-"
-if test "x$ac_cv_header_sys_user_h" = xyes; then :
-  cat >>confdefs.h <<_ACEOF
-#define HAVE_SYS_USER_H 1
-_ACEOF
 
-fi
 
-done
+                                                { $as_echo "$as_me:${as_lineno-$LINENO}: checking for shared library run path origin" >&5
+$as_echo_n "checking for shared library run path origin... " >&6; }
+if ${acl_cv_rpath+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
 
+    CC="$CC" GCC="$GCC" LDFLAGS="$LDFLAGS" LD="$LD" with_gnu_ld="$with_gnu_ld" \
+    ${CONFIG_SHELL-/bin/sh} "$ac_aux_dir/config.rpath" "$host" > conftest.sh
+    . ./conftest.sh
+    rm -f ./conftest.sh
+    acl_cv_rpath=done
 
-ac_fn_c_check_header_mongrel "$LINENO" "zlib.h" "ac_cv_header_zlib_h" "$ac_includes_default"
-if test "x$ac_cv_header_zlib_h" = xyes; then :
-  have_zlib=yes
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $acl_cv_rpath" >&5
+$as_echo "$acl_cv_rpath" >&6; }
+  wl="$acl_cv_wl"
+  acl_libext="$acl_cv_libext"
+  acl_shlibext="$acl_cv_shlibext"
+  acl_libname_spec="$acl_cv_libname_spec"
+  acl_library_names_spec="$acl_cv_library_names_spec"
+  acl_hardcode_libdir_flag_spec="$acl_cv_hardcode_libdir_flag_spec"
+  acl_hardcode_libdir_separator="$acl_cv_hardcode_libdir_separator"
+  acl_hardcode_direct="$acl_cv_hardcode_direct"
+  acl_hardcode_minus_L="$acl_cv_hardcode_minus_L"
+    # Check whether --enable-rpath was given.
+if test "${enable_rpath+set}" = set; then :
+  enableval=$enable_rpath; :
 else
-  have_zlib=no
+  enable_rpath=yes
 fi
 
 
-if test x$have_zlib = xyes; then
-   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+
+
+  acl_libdirstem=lib
+  acl_libdirstem2=
+  case "$host_os" in
+    solaris*)
+                                    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for 64-bit host" >&5
+$as_echo_n "checking for 64-bit host... " >&6; }
+if ${gl_cv_solaris_64bit+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
-#include <zlib.h>
-int
-main ()
-{
 
-   #if defined(ZLIB_VERNUM) && (ZLIB_VERNUM >= 0x1230)
-   return 0;
-   #else
-   #error No good zlib found
-   #endif
+#ifdef _LP64
+sixtyfour bits
+#endif
 
-  ;
-  return 0;
-}
 _ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+  $EGREP "sixtyfour bits" >/dev/null 2>&1; then :
+  gl_cv_solaris_64bit=yes
+else
+  gl_cv_solaris_64bit=no
+fi
+rm -f conftest*
 
-	{ $as_echo "$as_me:${as_lineno-$LINENO}: result: Using system zlib" >&5
-$as_echo "Using system zlib" >&6; }
-	zlib_msg="system zlib"
 
-$as_echo "#define HAVE_SYS_ZLIB 1" >>confdefs.h
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_solaris_64bit" >&5
+$as_echo "$gl_cv_solaris_64bit" >&6; }
+      if test $gl_cv_solaris_64bit = yes; then
+        acl_libdirstem=lib/64
+        case "$host_cpu" in
+          sparc*)        acl_libdirstem2=lib/sparcv9 ;;
+          i*86 | x86_64) acl_libdirstem2=lib/amd64 ;;
+        esac
+      fi
+      ;;
+    *)
+      searchpath=`(LC_ALL=C $CC -print-search-dirs) 2>/dev/null | sed -n -e 's,^libraries: ,,p' | sed -e 's,^=,,'`
+      if test -n "$searchpath"; then
+        acl_save_IFS="${IFS= 	}"; IFS=":"
+        for searchdir in $searchpath; do
+          if test -d "$searchdir"; then
+            case "$searchdir" in
+              */lib64/ | */lib64 ) acl_libdirstem=lib64 ;;
+              */../ | */.. )
+                # Better ignore directories of this form. They are misleading.
+                ;;
+              *) searchdir=`cd "$searchdir" && pwd`
+                 case "$searchdir" in
+                   */lib64 ) acl_libdirstem=lib64 ;;
+                 esac ;;
+            esac
+          fi
+        done
+        IFS="$acl_save_IFS"
+      fi
+      ;;
+  esac
+  test -n "$acl_libdirstem2" || acl_libdirstem2="$acl_libdirstem"
 
 
-else
 
-	{ $as_echo "$as_me:${as_lineno-$LINENO}: result: Using embedded zlib" >&5
-$as_echo "Using embedded zlib" >&6; }
-	have_zlib=no
-	zlib_msg="bundled zlib"
 
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
 
- if test x$have_zlib = xyes; then
-  HAVE_ZLIB_TRUE=
-  HAVE_ZLIB_FALSE='#'
-else
-  HAVE_ZLIB_TRUE='#'
-  HAVE_ZLIB_FALSE=
-fi
 
 
-$as_echo "#define HAVE_ZLIB 1" >>confdefs.h
 
 
-# for mono/metadata/debug-symfile.c
-for ac_header in elf.h
-do :
-  ac_fn_c_check_header_mongrel "$LINENO" "elf.h" "ac_cv_header_elf_h" "$ac_includes_default"
-if test "x$ac_cv_header_elf_h" = xyes; then :
-  cat >>confdefs.h <<_ACEOF
-#define HAVE_ELF_H 1
-_ACEOF
 
-fi
 
-done
 
+    use_additional=yes
 
-# for support
-for ac_header in poll.h
-do :
-  ac_fn_c_check_header_mongrel "$LINENO" "poll.h" "ac_cv_header_poll_h" "$ac_includes_default"
-if test "x$ac_cv_header_poll_h" = xyes; then :
-  cat >>confdefs.h <<_ACEOF
-#define HAVE_POLL_H 1
-_ACEOF
+  acl_save_prefix="$prefix"
+  prefix="$acl_final_prefix"
+  acl_save_exec_prefix="$exec_prefix"
+  exec_prefix="$acl_final_exec_prefix"
 
-fi
+    eval additional_includedir=\"$includedir\"
+    eval additional_libdir=\"$libdir\"
 
-done
+  exec_prefix="$acl_save_exec_prefix"
+  prefix="$acl_save_prefix"
 
-for ac_header in sys/poll.h
+
+# Check whether --with-libiconv-prefix was given.
+if test "${with_libiconv_prefix+set}" = set; then :
+  withval=$with_libiconv_prefix;
+    if test "X$withval" = "Xno"; then
+      use_additional=no
+    else
+      if test "X$withval" = "X"; then
+
+  acl_save_prefix="$prefix"
+  prefix="$acl_final_prefix"
+  acl_save_exec_prefix="$exec_prefix"
+  exec_prefix="$acl_final_exec_prefix"
+
+          eval additional_includedir=\"$includedir\"
+          eval additional_libdir=\"$libdir\"
+
+  exec_prefix="$acl_save_exec_prefix"
+  prefix="$acl_save_prefix"
+
+      else
+        additional_includedir="$withval/include"
+        additional_libdir="$withval/$acl_libdirstem"
+        if test "$acl_libdirstem2" != "$acl_libdirstem" \
+           && ! test -d "$withval/$acl_libdirstem"; then
+          additional_libdir="$withval/$acl_libdirstem2"
+        fi
+      fi
+    fi
+
+fi
+
+      LIBICONV=
+  LTLIBICONV=
+  INCICONV=
+  LIBICONV_PREFIX=
+      HAVE_LIBICONV=
+  rpathdirs=
+  ltrpathdirs=
+  names_already_handled=
+  names_next_round='iconv '
+  while test -n "$names_next_round"; do
+    names_this_round="$names_next_round"
+    names_next_round=
+    for name in $names_this_round; do
+      already_handled=
+      for n in $names_already_handled; do
+        if test "$n" = "$name"; then
+          already_handled=yes
+          break
+        fi
+      done
+      if test -z "$already_handled"; then
+        names_already_handled="$names_already_handled $name"
+                        uppername=`echo "$name" | sed -e 'y|abcdefghijklmnopqrstuvwxyz./-|ABCDEFGHIJKLMNOPQRSTUVWXYZ___|'`
+        eval value=\"\$HAVE_LIB$uppername\"
+        if test -n "$value"; then
+          if test "$value" = yes; then
+            eval value=\"\$LIB$uppername\"
+            test -z "$value" || LIBICONV="${LIBICONV}${LIBICONV:+ }$value"
+            eval value=\"\$LTLIB$uppername\"
+            test -z "$value" || LTLIBICONV="${LTLIBICONV}${LTLIBICONV:+ }$value"
+          else
+                                    :
+          fi
+        else
+                              found_dir=
+          found_la=
+          found_so=
+          found_a=
+          eval libname=\"$acl_libname_spec\"    # typically: libname=lib$name
+          if test -n "$acl_shlibext"; then
+            shrext=".$acl_shlibext"             # typically: shrext=.so
+          else
+            shrext=
+          fi
+          if test $use_additional = yes; then
+            dir="$additional_libdir"
+                                    if test -n "$acl_shlibext"; then
+              if test -f "$dir/$libname$shrext"; then
+                found_dir="$dir"
+                found_so="$dir/$libname$shrext"
+              else
+                if test "$acl_library_names_spec" = '$libname$shrext$versuffix'; then
+                  ver=`(cd "$dir" && \
+                        for f in "$libname$shrext".*; do echo "$f"; done \
+                        | sed -e "s,^$libname$shrext\\\\.,," \
+                        | sort -t '.' -n -r -k1,1 -k2,2 -k3,3 -k4,4 -k5,5 \
+                        | sed 1q ) 2>/dev/null`
+                  if test -n "$ver" && test -f "$dir/$libname$shrext.$ver"; then
+                    found_dir="$dir"
+                    found_so="$dir/$libname$shrext.$ver"
+                  fi
+                else
+                  eval library_names=\"$acl_library_names_spec\"
+                  for f in $library_names; do
+                    if test -f "$dir/$f"; then
+                      found_dir="$dir"
+                      found_so="$dir/$f"
+                      break
+                    fi
+                  done
+                fi
+              fi
+            fi
+                        if test "X$found_dir" = "X"; then
+              if test -f "$dir/$libname.$acl_libext"; then
+                found_dir="$dir"
+                found_a="$dir/$libname.$acl_libext"
+              fi
+            fi
+            if test "X$found_dir" != "X"; then
+              if test -f "$dir/$libname.la"; then
+                found_la="$dir/$libname.la"
+              fi
+            fi
+          fi
+          if test "X$found_dir" = "X"; then
+            for x in $LDFLAGS $LTLIBICONV; do
+
+  acl_save_prefix="$prefix"
+  prefix="$acl_final_prefix"
+  acl_save_exec_prefix="$exec_prefix"
+  exec_prefix="$acl_final_exec_prefix"
+  eval x=\"$x\"
+  exec_prefix="$acl_save_exec_prefix"
+  prefix="$acl_save_prefix"
+
+              case "$x" in
+                -L*)
+                  dir=`echo "X$x" | sed -e 's/^X-L//'`
+                                    if test -n "$acl_shlibext"; then
+                    if test -f "$dir/$libname$shrext"; then
+                      found_dir="$dir"
+                      found_so="$dir/$libname$shrext"
+                    else
+                      if test "$acl_library_names_spec" = '$libname$shrext$versuffix'; then
+                        ver=`(cd "$dir" && \
+                              for f in "$libname$shrext".*; do echo "$f"; done \
+                              | sed -e "s,^$libname$shrext\\\\.,," \
+                              | sort -t '.' -n -r -k1,1 -k2,2 -k3,3 -k4,4 -k5,5 \
+                              | sed 1q ) 2>/dev/null`
+                        if test -n "$ver" && test -f "$dir/$libname$shrext.$ver"; then
+                          found_dir="$dir"
+                          found_so="$dir/$libname$shrext.$ver"
+                        fi
+                      else
+                        eval library_names=\"$acl_library_names_spec\"
+                        for f in $library_names; do
+                          if test -f "$dir/$f"; then
+                            found_dir="$dir"
+                            found_so="$dir/$f"
+                            break
+                          fi
+                        done
+                      fi
+                    fi
+                  fi
+                                    if test "X$found_dir" = "X"; then
+                    if test -f "$dir/$libname.$acl_libext"; then
+                      found_dir="$dir"
+                      found_a="$dir/$libname.$acl_libext"
+                    fi
+                  fi
+                  if test "X$found_dir" != "X"; then
+                    if test -f "$dir/$libname.la"; then
+                      found_la="$dir/$libname.la"
+                    fi
+                  fi
+                  ;;
+              esac
+              if test "X$found_dir" != "X"; then
+                break
+              fi
+            done
+          fi
+          if test "X$found_dir" != "X"; then
+                        LTLIBICONV="${LTLIBICONV}${LTLIBICONV:+ }-L$found_dir -l$name"
+            if test "X$found_so" != "X"; then
+                                                        if test "$enable_rpath" = no \
+                 || test "X$found_dir" = "X/usr/$acl_libdirstem" \
+                 || test "X$found_dir" = "X/usr/$acl_libdirstem2"; then
+                                LIBICONV="${LIBICONV}${LIBICONV:+ }$found_so"
+              else
+                                                                                haveit=
+                for x in $ltrpathdirs; do
+                  if test "X$x" = "X$found_dir"; then
+                    haveit=yes
+                    break
+                  fi
+                done
+                if test -z "$haveit"; then
+                  ltrpathdirs="$ltrpathdirs $found_dir"
+                fi
+                                if test "$acl_hardcode_direct" = yes; then
+                                                      LIBICONV="${LIBICONV}${LIBICONV:+ }$found_so"
+                else
+                  if test -n "$acl_hardcode_libdir_flag_spec" && test "$acl_hardcode_minus_L" = no; then
+                                                            LIBICONV="${LIBICONV}${LIBICONV:+ }$found_so"
+                                                            haveit=
+                    for x in $rpathdirs; do
+                      if test "X$x" = "X$found_dir"; then
+                        haveit=yes
+                        break
+                      fi
+                    done
+                    if test -z "$haveit"; then
+                      rpathdirs="$rpathdirs $found_dir"
+                    fi
+                  else
+                                                                                haveit=
+                    for x in $LDFLAGS $LIBICONV; do
+
+  acl_save_prefix="$prefix"
+  prefix="$acl_final_prefix"
+  acl_save_exec_prefix="$exec_prefix"
+  exec_prefix="$acl_final_exec_prefix"
+  eval x=\"$x\"
+  exec_prefix="$acl_save_exec_prefix"
+  prefix="$acl_save_prefix"
+
+                      if test "X$x" = "X-L$found_dir"; then
+                        haveit=yes
+                        break
+                      fi
+                    done
+                    if test -z "$haveit"; then
+                      LIBICONV="${LIBICONV}${LIBICONV:+ }-L$found_dir"
+                    fi
+                    if test "$acl_hardcode_minus_L" != no; then
+                                                                                        LIBICONV="${LIBICONV}${LIBICONV:+ }$found_so"
+                    else
+                                                                                                                                                                                LIBICONV="${LIBICONV}${LIBICONV:+ }-l$name"
+                    fi
+                  fi
+                fi
+              fi
+            else
+              if test "X$found_a" != "X"; then
+                                LIBICONV="${LIBICONV}${LIBICONV:+ }$found_a"
+              else
+                                                LIBICONV="${LIBICONV}${LIBICONV:+ }-L$found_dir -l$name"
+              fi
+            fi
+                        additional_includedir=
+            case "$found_dir" in
+              */$acl_libdirstem | */$acl_libdirstem/)
+                basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e "s,/$acl_libdirstem/"'*$,,'`
+                if test "$name" = 'iconv'; then
+                  LIBICONV_PREFIX="$basedir"
+                fi
+                additional_includedir="$basedir/include"
+                ;;
+              */$acl_libdirstem2 | */$acl_libdirstem2/)
+                basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e "s,/$acl_libdirstem2/"'*$,,'`
+                if test "$name" = 'iconv'; then
+                  LIBICONV_PREFIX="$basedir"
+                fi
+                additional_includedir="$basedir/include"
+                ;;
+            esac
+            if test "X$additional_includedir" != "X"; then
+                                                                                                                if test "X$additional_includedir" != "X/usr/include"; then
+                haveit=
+                if test "X$additional_includedir" = "X/usr/local/include"; then
+                  if test -n "$GCC"; then
+                    case $host_os in
+                      linux* | gnu* | k*bsd*-gnu) haveit=yes;;
+                    esac
+                  fi
+                fi
+                if test -z "$haveit"; then
+                  for x in $CPPFLAGS $INCICONV; do
+
+  acl_save_prefix="$prefix"
+  prefix="$acl_final_prefix"
+  acl_save_exec_prefix="$exec_prefix"
+  exec_prefix="$acl_final_exec_prefix"
+  eval x=\"$x\"
+  exec_prefix="$acl_save_exec_prefix"
+  prefix="$acl_save_prefix"
+
+                    if test "X$x" = "X-I$additional_includedir"; then
+                      haveit=yes
+                      break
+                    fi
+                  done
+                  if test -z "$haveit"; then
+                    if test -d "$additional_includedir"; then
+                                            INCICONV="${INCICONV}${INCICONV:+ }-I$additional_includedir"
+                    fi
+                  fi
+                fi
+              fi
+            fi
+                        if test -n "$found_la"; then
+                                                        save_libdir="$libdir"
+              case "$found_la" in
+                */* | *\\*) . "$found_la" ;;
+                *) . "./$found_la" ;;
+              esac
+              libdir="$save_libdir"
+                            for dep in $dependency_libs; do
+                case "$dep" in
+                  -L*)
+                    additional_libdir=`echo "X$dep" | sed -e 's/^X-L//'`
+                                                                                                                                                                if test "X$additional_libdir" != "X/usr/$acl_libdirstem" \
+                       && test "X$additional_libdir" != "X/usr/$acl_libdirstem2"; then
+                      haveit=
+                      if test "X$additional_libdir" = "X/usr/local/$acl_libdirstem" \
+                         || test "X$additional_libdir" = "X/usr/local/$acl_libdirstem2"; then
+                        if test -n "$GCC"; then
+                          case $host_os in
+                            linux* | gnu* | k*bsd*-gnu) haveit=yes;;
+                          esac
+                        fi
+                      fi
+                      if test -z "$haveit"; then
+                        haveit=
+                        for x in $LDFLAGS $LIBICONV; do
+
+  acl_save_prefix="$prefix"
+  prefix="$acl_final_prefix"
+  acl_save_exec_prefix="$exec_prefix"
+  exec_prefix="$acl_final_exec_prefix"
+  eval x=\"$x\"
+  exec_prefix="$acl_save_exec_prefix"
+  prefix="$acl_save_prefix"
+
+                          if test "X$x" = "X-L$additional_libdir"; then
+                            haveit=yes
+                            break
+                          fi
+                        done
+                        if test -z "$haveit"; then
+                          if test -d "$additional_libdir"; then
+                                                        LIBICONV="${LIBICONV}${LIBICONV:+ }-L$additional_libdir"
+                          fi
+                        fi
+                        haveit=
+                        for x in $LDFLAGS $LTLIBICONV; do
+
+  acl_save_prefix="$prefix"
+  prefix="$acl_final_prefix"
+  acl_save_exec_prefix="$exec_prefix"
+  exec_prefix="$acl_final_exec_prefix"
+  eval x=\"$x\"
+  exec_prefix="$acl_save_exec_prefix"
+  prefix="$acl_save_prefix"
+
+                          if test "X$x" = "X-L$additional_libdir"; then
+                            haveit=yes
+                            break
+                          fi
+                        done
+                        if test -z "$haveit"; then
+                          if test -d "$additional_libdir"; then
+                                                        LTLIBICONV="${LTLIBICONV}${LTLIBICONV:+ }-L$additional_libdir"
+                          fi
+                        fi
+                      fi
+                    fi
+                    ;;
+                  -R*)
+                    dir=`echo "X$dep" | sed -e 's/^X-R//'`
+                    if test "$enable_rpath" != no; then
+                                                                  haveit=
+                      for x in $rpathdirs; do
+                        if test "X$x" = "X$dir"; then
+                          haveit=yes
+                          break
+                        fi
+                      done
+                      if test -z "$haveit"; then
+                        rpathdirs="$rpathdirs $dir"
+                      fi
+                                                                  haveit=
+                      for x in $ltrpathdirs; do
+                        if test "X$x" = "X$dir"; then
+                          haveit=yes
+                          break
+                        fi
+                      done
+                      if test -z "$haveit"; then
+                        ltrpathdirs="$ltrpathdirs $dir"
+                      fi
+                    fi
+                    ;;
+                  -l*)
+                                        names_next_round="$names_next_round "`echo "X$dep" | sed -e 's/^X-l//'`
+                    ;;
+                  *.la)
+                                                                                names_next_round="$names_next_round "`echo "X$dep" | sed -e 's,^X.*/,,' -e 's,^lib,,' -e 's,\.la$,,'`
+                    ;;
+                  *)
+                                        LIBICONV="${LIBICONV}${LIBICONV:+ }$dep"
+                    LTLIBICONV="${LTLIBICONV}${LTLIBICONV:+ }$dep"
+                    ;;
+                esac
+              done
+            fi
+          else
+                                                            LIBICONV="${LIBICONV}${LIBICONV:+ }-l$name"
+            LTLIBICONV="${LTLIBICONV}${LTLIBICONV:+ }-l$name"
+          fi
+        fi
+      fi
+    done
+  done
+  if test "X$rpathdirs" != "X"; then
+    if test -n "$acl_hardcode_libdir_separator"; then
+                        alldirs=
+      for found_dir in $rpathdirs; do
+        alldirs="${alldirs}${alldirs:+$acl_hardcode_libdir_separator}$found_dir"
+      done
+            acl_save_libdir="$libdir"
+      libdir="$alldirs"
+      eval flag=\"$acl_hardcode_libdir_flag_spec\"
+      libdir="$acl_save_libdir"
+      LIBICONV="${LIBICONV}${LIBICONV:+ }$flag"
+    else
+            for found_dir in $rpathdirs; do
+        acl_save_libdir="$libdir"
+        libdir="$found_dir"
+        eval flag=\"$acl_hardcode_libdir_flag_spec\"
+        libdir="$acl_save_libdir"
+        LIBICONV="${LIBICONV}${LIBICONV:+ }$flag"
+      done
+    fi
+  fi
+  if test "X$ltrpathdirs" != "X"; then
+            for found_dir in $ltrpathdirs; do
+      LTLIBICONV="${LTLIBICONV}${LTLIBICONV:+ }-R$found_dir"
+    done
+  fi
+
+
+
+
+
+
+
+
+
+
+
+
+          am_save_CPPFLAGS="$CPPFLAGS"
+
+  for element in $INCICONV; do
+    haveit=
+    for x in $CPPFLAGS; do
+
+  acl_save_prefix="$prefix"
+  prefix="$acl_final_prefix"
+  acl_save_exec_prefix="$exec_prefix"
+  exec_prefix="$acl_final_exec_prefix"
+  eval x=\"$x\"
+  exec_prefix="$acl_save_exec_prefix"
+  prefix="$acl_save_prefix"
+
+      if test "X$x" = "X$element"; then
+        haveit=yes
+        break
+      fi
+    done
+    if test -z "$haveit"; then
+      CPPFLAGS="${CPPFLAGS}${CPPFLAGS:+ }$element"
+    fi
+  done
+
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for iconv" >&5
+$as_echo_n "checking for iconv... " >&6; }
+if ${am_cv_func_iconv+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+
+    am_cv_func_iconv="no, consider installing GNU libiconv"
+    am_cv_lib_iconv=no
+    cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <stdlib.h>
+#include <iconv.h>
+int
+main ()
+{
+iconv_t cd = iconv_open("","");
+       iconv(cd,NULL,NULL,NULL,NULL);
+       iconv_close(cd);
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  am_cv_func_iconv=yes
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+    if test "$am_cv_func_iconv" != yes; then
+      am_save_LIBS="$LIBS"
+      LIBS="$LIBS $LIBICONV"
+      cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <stdlib.h>
+#include <iconv.h>
+int
+main ()
+{
+iconv_t cd = iconv_open("","");
+         iconv(cd,NULL,NULL,NULL,NULL);
+         iconv_close(cd);
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  am_cv_lib_iconv=yes
+        am_cv_func_iconv=yes
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+      LIBS="$am_save_LIBS"
+    fi
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_func_iconv" >&5
+$as_echo "$am_cv_func_iconv" >&6; }
+  if test "$am_cv_func_iconv" = yes; then
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for working iconv" >&5
+$as_echo_n "checking for working iconv... " >&6; }
+if ${am_cv_func_iconv_works+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+
+            am_save_LIBS="$LIBS"
+      if test $am_cv_lib_iconv = yes; then
+        LIBS="$LIBS $LIBICONV"
+      fi
+      if test "$cross_compiling" = yes; then :
+  case "$host_os" in
+           aix* | hpux*) am_cv_func_iconv_works="guessing no" ;;
+           *)            am_cv_func_iconv_works="guessing yes" ;;
+         esac
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+#include <iconv.h>
+#include <string.h>
+int main ()
+{
+  /* Test against AIX 5.1 bug: Failures are not distinguishable from successful
+     returns.  */
+  {
+    iconv_t cd_utf8_to_88591 = iconv_open ("ISO8859-1", "UTF-8");
+    if (cd_utf8_to_88591 != (iconv_t)(-1))
+      {
+        static const char input[] = "\342\202\254"; /* EURO SIGN */
+        char buf[10];
+        const char *inptr = input;
+        size_t inbytesleft = strlen (input);
+        char *outptr = buf;
+        size_t outbytesleft = sizeof (buf);
+        size_t res = iconv (cd_utf8_to_88591,
+                            (char **) &inptr, &inbytesleft,
+                            &outptr, &outbytesleft);
+        if (res == 0)
+          return 1;
+      }
+  }
+  /* Test against Solaris 10 bug: Failures are not distinguishable from
+     successful returns.  */
+  {
+    iconv_t cd_ascii_to_88591 = iconv_open ("ISO8859-1", "646");
+    if (cd_ascii_to_88591 != (iconv_t)(-1))
+      {
+        static const char input[] = "\263";
+        char buf[10];
+        const char *inptr = input;
+        size_t inbytesleft = strlen (input);
+        char *outptr = buf;
+        size_t outbytesleft = sizeof (buf);
+        size_t res = iconv (cd_ascii_to_88591,
+                            (char **) &inptr, &inbytesleft,
+                            &outptr, &outbytesleft);
+        if (res == 0)
+          return 1;
+      }
+  }
+#if 0 /* This bug could be worked around by the caller.  */
+  /* Test against HP-UX 11.11 bug: Positive return value instead of 0.  */
+  {
+    iconv_t cd_88591_to_utf8 = iconv_open ("utf8", "iso88591");
+    if (cd_88591_to_utf8 != (iconv_t)(-1))
+      {
+        static const char input[] = "\304rger mit b\366sen B\374bchen ohne Augenma\337";
+        char buf[50];
+        const char *inptr = input;
+        size_t inbytesleft = strlen (input);
+        char *outptr = buf;
+        size_t outbytesleft = sizeof (buf);
+        size_t res = iconv (cd_88591_to_utf8,
+                            (char **) &inptr, &inbytesleft,
+                            &outptr, &outbytesleft);
+        if ((int)res > 0)
+          return 1;
+      }
+  }
+#endif
+  /* Test against HP-UX 11.11 bug: No converter from EUC-JP to UTF-8 is
+     provided.  */
+  if (/* Try standardized names.  */
+      iconv_open ("UTF-8", "EUC-JP") == (iconv_t)(-1)
+      /* Try IRIX, OSF/1 names.  */
+      && iconv_open ("UTF-8", "eucJP") == (iconv_t)(-1)
+      /* Try AIX names.  */
+      && iconv_open ("UTF-8", "IBM-eucJP") == (iconv_t)(-1)
+      /* Try HP-UX names.  */
+      && iconv_open ("utf8", "eucJP") == (iconv_t)(-1))
+    return 1;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_run "$LINENO"; then :
+  am_cv_func_iconv_works=yes
+else
+  am_cv_func_iconv_works=no
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+  conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+      LIBS="$am_save_LIBS"
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_func_iconv_works" >&5
+$as_echo "$am_cv_func_iconv_works" >&6; }
+    case "$am_cv_func_iconv_works" in
+      *no) am_func_iconv=no am_cv_lib_iconv=no ;;
+      *)   am_func_iconv=yes ;;
+    esac
+  else
+    am_func_iconv=no am_cv_lib_iconv=no
+  fi
+  if test "$am_func_iconv" = yes; then
+
+$as_echo "#define HAVE_ICONV 1" >>confdefs.h
+
+  fi
+  if test "$am_cv_lib_iconv" = yes; then
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to link with libiconv" >&5
+$as_echo_n "checking how to link with libiconv... " >&6; }
+    { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LIBICONV" >&5
+$as_echo "$LIBICONV" >&6; }
+  else
+            CPPFLAGS="$am_save_CPPFLAGS"
+    LIBICONV=
+    LTLIBICONV=
+  fi
+
+
+
+  if test "$am_cv_func_iconv" = yes; then
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for iconv declaration" >&5
+$as_echo_n "checking for iconv declaration... " >&6; }
+    if ${am_cv_proto_iconv+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+
+      cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+#include <stdlib.h>
+#include <iconv.h>
+extern
+#ifdef __cplusplus
+"C"
+#endif
+#if defined(__STDC__) || defined(__cplusplus)
+size_t iconv (iconv_t cd, char * *inbuf, size_t *inbytesleft, char * *outbuf, size_t *outbytesleft);
+#else
+size_t iconv();
+#endif
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  am_cv_proto_iconv_arg1=""
+else
+  am_cv_proto_iconv_arg1="const"
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+      am_cv_proto_iconv="extern size_t iconv (iconv_t cd, $am_cv_proto_iconv_arg1 char * *inbuf, size_t *inbytesleft, char * *outbuf, size_t *outbytesleft);"
+fi
+
+    am_cv_proto_iconv=`echo "$am_cv_proto_iconv" | tr -s ' ' | sed -e 's/( /(/'`
+    { $as_echo "$as_me:${as_lineno-$LINENO}: result:
+         $am_cv_proto_iconv" >&5
+$as_echo "
+         $am_cv_proto_iconv" >&6; }
+
+cat >>confdefs.h <<_ACEOF
+#define ICONV_CONST $am_cv_proto_iconv_arg1
+_ACEOF
+
+  fi
+
+
+ if test x$no_version_script = xyes; then
+  NO_VERSION_SCRIPT_TRUE=
+  NO_VERSION_SCRIPT_FALSE='#'
+else
+  NO_VERSION_SCRIPT_TRUE='#'
+  NO_VERSION_SCRIPT_FALSE=
+fi
+
+
+for ac_header in sys/filio.h sys/sockio.h netdb.h utime.h sys/utime.h semaphore.h sys/un.h linux/rtc.h sys/syscall.h sys/mkdev.h sys/uio.h sys/param.h
+do :
+  as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
+ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default"
+if eval test \"x\$"$as_ac_Header"\" = x"yes"; then :
+  cat >>confdefs.h <<_ACEOF
+#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+
+done
+
+for ac_header in sys/param.h sys/socket.h sys/ipc.h sys/sem.h sys/utsname.h alloca.h ucontext.h pwd.h sys/select.h netinet/tcp.h netinet/in.h unistd.h sys/types.h link.h asm/sigcontext.h
+do :
+  as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
+ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default"
+if eval test \"x\$"$as_ac_Header"\" = x"yes"; then :
+  cat >>confdefs.h <<_ACEOF
+#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+
+done
+
+for ac_header in linux/netlink.h linux/rtnetlink.h
+do :
+  as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
+ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "#include <stddef.h>
+		  #include <sys/socket.h>
+		  #include <linux/socket.h>
+"
+if eval test \"x\$"$as_ac_Header"\" = x"yes"; then :
+  cat >>confdefs.h <<_ACEOF
+#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+
+done
+
+
+for ac_header in sys/user.h
+do :
+  ac_fn_c_check_header_compile "$LINENO" "sys/user.h" "ac_cv_header_sys_user_h" "
+#ifdef HAVE_SYS_PARAM_H
+# include <sys/param.h>
+#endif
+
+"
+if test "x$ac_cv_header_sys_user_h" = xyes; then :
+  cat >>confdefs.h <<_ACEOF
+#define HAVE_SYS_USER_H 1
+_ACEOF
+
+fi
+
+done
+
+
+ac_fn_c_check_header_mongrel "$LINENO" "zlib.h" "ac_cv_header_zlib_h" "$ac_includes_default"
+if test "x$ac_cv_header_zlib_h" = xyes; then :
+  have_zlib=yes
+else
+  have_zlib=no
+fi
+
+
+if test x$have_zlib = xyes; then
+   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <zlib.h>
+int
+main ()
+{
+
+   #if defined(ZLIB_VERNUM) && (ZLIB_VERNUM >= 0x1230)
+   return 0;
+   #else
+   #error No good zlib found
+   #endif
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+
+	{ $as_echo "$as_me:${as_lineno-$LINENO}: result: Using system zlib" >&5
+$as_echo "Using system zlib" >&6; }
+	zlib_msg="system zlib"
+
+$as_echo "#define HAVE_SYS_ZLIB 1" >>confdefs.h
+
+
+else
+
+	{ $as_echo "$as_me:${as_lineno-$LINENO}: result: Using embedded zlib" >&5
+$as_echo "Using embedded zlib" >&6; }
+	have_zlib=no
+	zlib_msg="bundled zlib"
+
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+
+ if test x$have_zlib = xyes; then
+  HAVE_ZLIB_TRUE=
+  HAVE_ZLIB_FALSE='#'
+else
+  HAVE_ZLIB_TRUE='#'
+  HAVE_ZLIB_FALSE=
+fi
+
+
+$as_echo "#define HAVE_ZLIB 1" >>confdefs.h
+
+
+# for mono/metadata/debug-symfile.c
+for ac_header in elf.h
+do :
+  ac_fn_c_check_header_mongrel "$LINENO" "elf.h" "ac_cv_header_elf_h" "$ac_includes_default"
+if test "x$ac_cv_header_elf_h" = xyes; then :
+  cat >>confdefs.h <<_ACEOF
+#define HAVE_ELF_H 1
+_ACEOF
+
+fi
+
+done
+
+
+# for support
+for ac_header in poll.h
+do :
+  ac_fn_c_check_header_mongrel "$LINENO" "poll.h" "ac_cv_header_poll_h" "$ac_includes_default"
+if test "x$ac_cv_header_poll_h" = xyes; then :
+  cat >>confdefs.h <<_ACEOF
+#define HAVE_POLL_H 1
+_ACEOF
+
+fi
+
+done
+
+for ac_header in sys/poll.h
 do :
   ac_fn_c_check_header_mongrel "$LINENO" "sys/poll.h" "ac_cv_header_sys_poll_h" "$ac_includes_default"
 if test "x$ac_cv_header_sys_poll_h" = xyes; then :
@@ -17380,6 +18355,19 @@ fi
 rm -f core conftest.err conftest.$ac_objext \
     conftest$ac_exeext conftest.$ac_ext
 
+# for Linux statfs support
+for ac_header in linux/magic.h
+do :
+  ac_fn_c_check_header_mongrel "$LINENO" "linux/magic.h" "ac_cv_header_linux_magic_h" "$ac_includes_default"
+if test "x$ac_cv_header_linux_magic_h" = xyes; then :
+  cat >>confdefs.h <<_ACEOF
+#define HAVE_LINUX_MAGIC_H 1
+_ACEOF
+
+fi
+
+done
+
 
 # not 64 bit clean in cross-compile
 # The cast to long int works around a bug in the HP C Compiler
@@ -17418,7 +18406,7 @@ _ACEOF
 
 WARN=''
 if test x"$GCC" = xyes; then
-        WARN='-Wall -Wunused -Wmissing-prototypes -Wmissing-declarations -Wstrict-prototypes  -Wmissing-prototypes -Wnested-externs -Wpointer-arith -Wno-cast-qual -Wwrite-strings'
+        WARN='-Wall -Wunused -Wmissing-prototypes -Wmissing-declarations -Wstrict-prototypes  -Wmissing-prototypes -Wnested-externs -Wpointer-arith -Wno-cast-qual -Wwrite-strings -Wno-switch-enum'
 		# The runtime code does not respect ANSI C strict aliasing rules
 		CFLAGS="$CFLAGS -fno-strict-aliasing"
 
@@ -17433,7 +18421,7 @@ int
 main ()
 {
 
-						   void main () { }
+				return 0;
 
   ;
   return 0;
@@ -17465,7 +18453,7 @@ int
 main ()
 {
 
-						   void main () { }
+				return 0;
 
   ;
   return 0;
@@ -17497,6 +18485,44 @@ fi
 CFLAGS="$CFLAGS -g $WARN"
 CFLAGS_FOR_LIBGC="$CFLAGS_FOR_LIBGC -g"
 
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for clang" >&5
+$as_echo_n "checking for clang... " >&6; }
+if ${mono_cv_clang+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+
+	if test "$cross_compiling" = yes; then :
+  { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error $? "cannot run test program while cross compiling
+See \`config.log' for more details" "$LINENO" 5; }
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+		int main () {
+			#ifdef __clang__
+				return 0;
+			#else
+				return 1;
+			#endif
+		}
+
+_ACEOF
+if ac_fn_c_try_run "$LINENO"; then :
+  mono_cv_clang=yes
+else
+  mono_cv_clang=no
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+  conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $mono_cv_clang" >&5
+$as_echo "$mono_cv_clang" >&6; }
+
 # Where's the 'mcs' source tree?
 if test -d $srcdir/mcs; then
   mcsdir=mcs
@@ -17557,16 +18583,6 @@ if test x$cross_compiling$host_win32 = xnoyes; then
   esac
 fi
 
-## Maybe should also disable if mcsdir is invalid.  Let's punt the issue for now.
- if test x$cross_compiling = xno && test x$enable_mcs_build != xno; then
-  BUILD_MCS_TRUE=
-  BUILD_MCS_FALSE='#'
-else
-  BUILD_MCS_TRUE='#'
-  BUILD_MCS_FALSE=
-fi
-
-
 
 
 
@@ -17599,7 +18615,7 @@ $as_echo "$USE_NLS" >&6; }
 
 
 
-      GETTEXT_MACRO_VERSION=0.17
+      GETTEXT_MACRO_VERSION=0.18
 
 
 
@@ -18005,36 +19021,18 @@ if test "${with_crosspkgdir+set}" = set; then :
 fi
 
 
-
-# Check whether --with-glib was given.
-if test "${with_glib+set}" = set; then :
-  withval=$with_glib;
-else
-  with_glib=embedded
-fi
-
-
 ac_configure_args="$ac_configure_args \"CPPFLAGS_FOR_EGLIB=$EGLIB_CPPFLAGS\" \"CFLAGS_FOR_EGLIB=$CFLAGS_FOR_EGLIB\""
 
 
 subdirs="$subdirs eglib"
 
 
-case $with_glib in
-embedded)
-  GLIB_CFLAGS='-I$(top_srcdir)/eglib/src -I$(top_builddir)/eglib/src'
-  GLIB_LIBS='-L$(top_builddir)/eglib/src -leglib -lm'
-  BUILD_GLIB_CFLAGS="$GLIB_CFLAGS"
-  BUILD_GLIB_LIBS="$GLIB_LIBS"
-  GMODULE_CFLAGS="$GLIB_CFLAGS"
-  GMODULE_LIBS="$GLIB_LIBS"
-  ;;
-system)
-  as_fn_error $? "--with-glib=system is no longer supported as of Mono 2.8" "$LINENO" 5
-  ;;
-*)
-  as_fn_error $? "Invalid argument to --with-glib." "$LINENO" 5
-esac
+GLIB_CFLAGS='-I$(top_srcdir)/eglib/src -I$(top_builddir)/eglib/src'
+GLIB_LIBS='-L$(top_builddir)/eglib/src -leglib -lm'
+BUILD_GLIB_CFLAGS="$GLIB_CFLAGS"
+BUILD_GLIB_LIBS="$GLIB_LIBS"
+GMODULE_CFLAGS="$GLIB_CFLAGS"
+GMODULE_LIBS="$GLIB_LIBS"
 
 
 
@@ -18140,7 +19138,7 @@ else
   with_xen_opt=yes
 fi
 
-if test "x$with_xen_opt" = "xyes"; then
+if test "x$with_xen_opt" = "xyes" -a "x$mono_cv_clang" = "xno"; then
 
 $as_echo "#define MONO_XEN_OPT 1" >>confdefs.h
 
@@ -18155,7 +19153,7 @@ int
 main ()
 {
 
-					   void main () { }
+		return 0;
 
   ;
   return 0;
@@ -18435,16 +19433,11 @@ $as_echo_n "checking for visibility __attribute__... " >&6; }
 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 
-int
-main ()
-{
 
-   void __attribute__ ((visibility ("hidden"))) doit (void) {}
-   void main () { doit (); }
+		void __attribute__ ((visibility ("hidden"))) doit (void) {}
+   		int main () { doit (); return 0; }
+
 
-  ;
-  return 0;
-}
 _ACEOF
 if ac_fn_c_try_compile "$LINENO"; then :
 
@@ -18521,7 +19514,7 @@ else
 fi
 
 
-LIBGC_CFLAGS=
+LIBGC_CPPFLAGS=
 LIBGC_LIBS=
 LIBGC_STATIC_LIBS=
 libgc_dir=
@@ -18748,7 +19741,7 @@ $as_echo "#define HAVE_GC_ALLOW_REGISTER_THREADS 1" >>confdefs.h
 		use_included_gc=yes
 		libgc_dir=libgc
 
-		LIBGC_CFLAGS='-I$(top_srcdir)/libgc/include'
+		LIBGC_CPPFLAGS='-I$(top_srcdir)/libgc/include'
 		LIBGC_LIBS='$(top_builddir)/libgc/libmonogc.la'
 		LIBGC_STATIC_LIBS='$(top_builddir)/libgc/libmonogc-static.la'
 
@@ -19278,10 +20271,9 @@ int
 main ()
 {
 
-		int main() {
             int mask = 1;
             sched_setaffinity(0, &mask);
-        }
+			return 0;
 
   ;
   return 0;
@@ -20090,6 +21082,17 @@ _ACEOF
 fi
 done
 
+	for ac_func in pthread_kill
+do :
+  ac_fn_c_check_func "$LINENO" "pthread_kill" "ac_cv_func_pthread_kill"
+if test "x$ac_cv_func_pthread_kill" = xyes; then :
+  cat >>confdefs.h <<_ACEOF
+#define HAVE_PTHREAD_KILL 1
+_ACEOF
+
+fi
+done
+
 	{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for PTHREAD_MUTEX_RECURSIVE" >&5
 $as_echo_n "checking for PTHREAD_MUTEX_RECURSIVE... " >&6; }
 	cat confdefs.h - <<_ACEOF >conftest.$ac_ext
@@ -20288,7 +21291,11 @@ else
 			child ()
 			{
 				struct sigaction sa;
+			#ifdef __APPLE__
+				stack_t sas;
+			#else
 				struct sigaltstack sas;
+			#endif
 				pthread_t id;
 				pthread_attr_t attr;
 
@@ -20300,6 +21307,11 @@ else
 					return;
 				}
 
+				/* x86 darwin deliver segfaults using SIGBUS */
+				if (sigaction (SIGBUS, &sa, NULL) == -1) {
+					perror ("sigaction");
+					return;
+				}
 				sas.ss_sp = malloc (SIGSTKSZ);
 				sas.ss_size = SIGSTKSZ;
 				sas.ss_flags = 0;
@@ -22747,7 +23759,7 @@ fi
    # from LLVM classes.
    LLVM_CXXFLAGS="`$LLVM_CONFIG --cxxflags` -fno-rtti"
    LLVM_LDFLAGS=`$LLVM_CONFIG --ldflags`
-   LLVM_LIBS=`$LLVM_CONFIG --libs core bitwriter jit x86codegen`
+   LLVM_LIBS=`$LLVM_CONFIG --libs core bitwriter jit mcjit x86codegen`
    LLVM_LIBS="$LLVM_LDFLAGS $LLVM_LIBS -lstdc++"
 
    # Should be something like '2.6' or '2.7svn'
@@ -22831,7 +23843,7 @@ X11="libX11.so"
 
 sizeof_register="SIZEOF_VOID_P"
 
-jit_wanted=false
+jit_wanted=true
 interp_wanted=false
 sgen_supported=false
 case "$host" in
@@ -22842,9 +23854,9 @@ case "$host" in
 	mips*)
 		TARGET=MIPS;
 		arch_target=mips;
+		sgen_supported=true
 		ACCESS_UNALIGNED="no"
 		JIT_SUPPORTED=yes
-		jit_wanted=true
 
 		{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for mips n32" >&5
 $as_echo_n "checking for mips n32... " >&6; }
@@ -22855,11 +23867,10 @@ int
 main ()
 {
 
-		void main () {
 		#if _MIPS_SIM != _ABIN32
 		#error Not mips n32
 		#endif
-   		}
+		return 0;
 
   ;
   return 0;
@@ -22883,7 +23894,6 @@ rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
 		TARGET=X86;
 		arch_target=x86;
 		JIT_SUPPORTED=yes
-		jit_wanted=true
 		case $host_os in
 		  solaris*)
 			LIBC="libc.so"
@@ -22904,8 +23914,10 @@ rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
 			# foo.c:6: warning: visibility attribute not supported in this configuration; ignored
 			# ld: fatal: relocation error: R_386_GOTOFF: file /var/tmp//ccxYR96k.o: symbol astruct: relocation must bind locally
 			have_visibility_hidden=no
+			sgen_supported=true
 			;;
 		  cygwin*)
+			sgen_supported=true
 			have_visibility_hidden=no
 			;;
 		  haiku*)
@@ -22915,6 +23927,10 @@ rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
 			sgen_supported=true
 			AOT_SUPPORTED="yes"
 			;;
+		  darwin*)
+			sgen_supported=true
+			AOT_SUPPORTED="yes"
+			;;
 		  darwin*|openbsd*|freebsd*)
 			sgen_supported=true
 		        ;;
@@ -22924,7 +23940,6 @@ rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
 		TARGET=AMD64;
 		arch_target=amd64;
 		JIT_SUPPORTED=yes
-		jit_wanted=true
 		case $host_os in
 		  linux*)
 			sgen_supported=true
@@ -22948,7 +23963,6 @@ $as_echo "#define __mono_ilp32__ 1" >>confdefs.h
 		arch_target=ia64
 		ACCESS_UNALIGNED="no"
 		JIT_SUPPORTED=yes
-		jit_wanted=true
 		LIBC="libc.so.6.1"
 		INTL="libc.so.6.1"
 		{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for _U_dyn_register in -lunwind" >&5
@@ -23015,7 +24029,6 @@ fi
 			LIBC="libc.so"
 			INTL="libintl.so"
 		esac
-		jit_wanted=true
 		if test x"$GCC" = xyes; then
 			# We don't support v8 cpus
 			CFLAGS="$CFLAGS -Wno-cast-align -mcpu=v9"
@@ -23023,12 +24036,12 @@ fi
 		if test x"$AR" = xfalse; then
 			as_fn_error $? "The required utility 'ar' is not found in your PATH. Usually it can be found in /usr/ccs/bin." "$LINENO" 5
 		fi
+		sgen_supported=true
 		;;
        alpha*-*-linux* | alpha*-*-osf*)
 		TARGET=ALPHA;
 		ACCESS_UNALIGNED="no"
 		JIT_SUPPORTED=yes
-		jit_wanted=true
 		arch_target=alpha;
 		CFLAGS="$CFLAGS -mieee -O0"
 		case $host_os in
@@ -23055,7 +24068,6 @@ fi
 		arch_target=hppa;
 		ACCESS_UNALIGNED="no"
 		JIT_SUPPORTED=yes
-		jit_wanted=true
 		;;
 	macppc-*-openbsd* | powerpc*-*-linux* | powerpc-*-openbsd* | \
         powerpc-*-sysv* | powerpc-*-darwin* | powerpc-*-netbsd* | powerpc-*-freebsd* )
@@ -23069,7 +24081,6 @@ fi
 		fi
 		arch_target=ppc;
 		JIT_SUPPORTED=yes
-		jit_wanted=true
 		case $host_os in
 		  linux*|darwin*)
 			sgen_supported=true
@@ -23082,7 +24093,6 @@ fi
 		ACCESS_UNALIGNED="no"
 		JIT_SUPPORTED=yes
 		CPPFLAGS="$CPPFLAGS -DARM_FPU_VFP=1 -D__ARM_EABI__ -DHAVE_ARMV6=1"
-		jit_wanted=true
 		# libgc's gc_locks.h depends on this
 	    NESTED_LIBGC_FLAGS="$NESTED_LIBGC_FLAGS -DHAVE_ARMV6"
 		sgen_supported=true
@@ -23092,15 +24102,14 @@ fi
 		arch_target=arm;
 		ACCESS_UNALIGNED="no"
 		JIT_SUPPORTED=yes
-		jit_wanted=true
 		sgen_supported=true
+		AOT_SUPPORTED="yes"
 		;;
 	s390-*-linux*)
 		TARGET=S390;
 		arch_target=s390;
 		ACCESS_UNALIGNED="yes"
 		JIT_SUPPORTED=yes
-		jit_wanted=true
 		sgen_supported=true
 		# Required CFLAGS for s390[x].  USE_STRING_INLINES is automatic with gcc 4.1
 		CFLAGS="$CFLAGS -mbackchain -D__USE_STRING_INLINES"
@@ -23110,7 +24119,6 @@ fi
 		arch_target=s390x;
 		ACCESS_UNALIGNED="yes"
 		JIT_SUPPORTED=yes
-		jit_wanted=true
 		sgen_supported=true
 		CFLAGS="$CFLAGS -mbackchain -D__USE_STRING_INLINES"
 		;;
@@ -23120,6 +24128,7 @@ if test "x$host" != "x$target"; then
 
 $as_echo "#define MONO_CROSS_COMPILE 1" >>confdefs.h
 
+   enable_mcs_build=no
    case "$target" in
    powerpc64-ps3-linux-gnu)
 		TARGET=POWERPC64
@@ -23161,6 +24170,14 @@ $as_echo "#define __mono_ilp32__ 1" >>confdefs.h
 
 		sizeof_register=8
 		;;
+   *-*-nacl)
+		TARGET=X86
+		arch_target=x86
+
+$as_echo "#define TARGET_X86 1" >>confdefs.h
+
+		sizeof_register=4
+		;;
    armv7l-unknown-linux-gnueabi*)
 		# TEGRA
 		TARGET=ARM;
@@ -23242,6 +24259,16 @@ $as_echo "#define TARGET_POWERPC 1" >>confdefs.h
 $as_echo "#define TARGET_POWERPC64 1" >>confdefs.h
 
 	;;
+S390x)
+
+$as_echo "#define TARGET_S390X 1" >>confdefs.h
+
+	;;
+MIPS)
+
+$as_echo "#define TARGET_MIPS 1" >>confdefs.h
+
+	;;
 esac
 
 if test "x$sizeof_register" = "x4"; then
@@ -23318,32 +24345,6 @@ else
 fi
 
 
-
-# Check whether --with-jit was given.
-if test "${with_jit+set}" = set; then :
-  withval=$with_jit;
-	if test x$withval = xyes; then
-	   jit_wanted=true
-	else
-	   jit_wanted=false
-	fi
-
-fi
-
-
-
-# Check whether --with-interp was given.
-if test "${with_interp+set}" = set; then :
-  withval=$with_interp;
-	if test x$withval = xyes; then
-	   interp_wanted=true
-	else
-	   interp_wanted=false
-	fi
-
-fi
-
-
 USEJIT=false
 if test x$JIT_SUPPORTED = xyes; then
    if $jit_wanted; then
@@ -23624,7 +24625,7 @@ if test "x$TARGET" = "xAMD64" -o "x$TARGET" = "xX86"; then
 		# undefined reference to `__tls_get_addr'
 		#
 		rm -f conftest.c conftest.so conftest
-		echo "static __thread int foo; void main () { foo = 5; }" > conftest.c
+		echo "static __thread int foo; int main () { foo = 5; return 0; }" > conftest.c
 		$CC -fPIC --shared -o conftest.so conftest.c > /dev/null 2>&1
 		$CC -o conftest conftest.so > /dev/null 2>&1
 		if test ! -f conftest; then
@@ -23645,7 +24646,7 @@ else
 fi
 
 if test "x$try_mono_debugger" = "xyes"; then
-	if test "x$TARGET" = "xAMD64" -o "x$TARGET" = "xX86" -o "x$TARGET" = "xALPHA"; then
+	if test "x$TARGET" = "xAMD64" -o "x$TARGET" = "xX86" -o "x$TARGET" = "xALPHA" -o "x$TARGET" = "xS390x"; then
 		if test x$use_included_gc = xyes; then
 			case "$host" in
 			*-*-*linux*)
@@ -23681,6 +24682,45 @@ fi
 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $mono_debugger_supported" >&5
 $as_echo "$mono_debugger_supported" >&6; }
 
+# Check whether --enable-icall-symbol-map was given.
+if test "${enable_icall_symbol_map+set}" = set; then :
+  enableval=$enable_icall_symbol_map; icall_symbol_map=$enableval
+else
+  icall_symbol_map=no
+fi
+
+if test "x$icall_symbol_map" = "xyes"; then
+
+$as_echo "#define ENABLE_ICALL_SYMBOL_MAP 1" >>confdefs.h
+
+fi
+
+# Check whether --enable-icall-export was given.
+if test "${enable_icall_export+set}" = set; then :
+  enableval=$enable_icall_export; icall_export=$enableval
+else
+  icall_export=no
+fi
+
+if test "x$icall_export" = "xyes"; then
+
+$as_echo "#define ENABLE_ICALL_EXPORT 1" >>confdefs.h
+
+fi
+
+# Check whether --enable-icall-tables was given.
+if test "${enable_icall_tables+set}" = set; then :
+  enableval=$enable_icall_tables; icall_tables=$enableval
+else
+  icall_tables=yes
+fi
+
+if test "x$icall_tables" = "xno"; then
+
+$as_echo "#define DISABLE_ICALL_TABLES 1" >>confdefs.h
+
+fi
+
 if test "x$with_tls" = "x__thread"; then
 
 $as_echo "#define HAVE_KW_THREAD 1" >>confdefs.h
@@ -23705,9 +24745,12 @@ if ac_fn_c_try_compile "$LINENO"; then :
 
 			{ $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
 $as_echo "yes" >&6; }
+			# CLANG doesn't support this yet, and it prints warnings about it
+			if test "x$mono_cv_clang" = "xno"; then
 
 $as_echo "#define HAVE_TLS_MODEL_ATTR 1" >>confdefs.h
 
+			fi
 
 else
 
@@ -23722,14 +24765,47 @@ if test ${TARGET} = ARM && test x$cross_compiling = xno && test x$enable_mcs_bui
 				{ $as_echo "$as_me:${as_lineno-$LINENO}: checking which FPU to use" >&5
 $as_echo_n "checking which FPU to use... " >&6; }
 
-	cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+	fpu=NONE
+	if gcc -v 2>&1 | grep -q -- '--with-float=hard'; then
+	   fpu=VFP_HARD
+	fi
+
+	if test x$fpu = xNONE; then
+	   ORIG_CFLAGS=$CFLAGS
+	   CFLAGS="$CFLAGS -mfpu=vfp -mfloat-abi=softfp"
+	   if test "$cross_compiling" = yes; then :
+  { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error $? "cannot run test program while cross compiling
+See \`config.log' for more details" "$LINENO" 5; }
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+				int main () { __asm__ ("faddd	d7, d6, d7"); return 0; }
+
+_ACEOF
+if ac_fn_c_try_run "$LINENO"; then :
+  fpu=VFP
+else
+  fpu=NONE
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+  conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+	   CFLAGS=$ORIG_CFLAGS
+	fi
+
+	if test x$fpu = xNONE; then
+		cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 
 int
 main ()
 {
 
-		__asm__ ("ldfd f0, [r0]");
+			__asm__ ("ldfd f0, [r0]");
 
   ;
   return 0;
@@ -23741,6 +24817,7 @@ else
   fpu=NONE
 fi
 rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+	fi
 
 	{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $fpu" >&5
 $as_echo "$fpu" >&6; }
@@ -23801,15 +24878,15 @@ case "x$gc" in
 		# The problem with this approach, is that during a reconfigure, the main
 		# configure scripts gets invoked with these arguments, so we use separate
 		# variables understood by libgc's configure to pass CPPFLAGS and CFLAGS.
-		LIBGC_CPPFLAGS="$CPPFLAGS $NESTED_LIBGC_FLAGS"
+		TMP_CPPFLAGS="$CPPFLAGS $NESTED_LIBGC_FLAGS"
 		if test x$TARGET = xSPARC -o x$TARGET = xSPARC64; then
-			LIBGC_CPPFLAGS=`echo $LIBGC_CPPFLAGS | sed -e 's/-D_FILE_OFFSET_BITS=64//g'`
+			TMP_CPPFLAGS=`echo $TMP_CPPFLAGS | sed -e 's/-D_FILE_OFFSET_BITS=64//g'`
 		fi
 		# Don't pass -finstrument-for-thread-suspension in,
 		# if these are instrumented it will be very bad news
 		# (infinite recursion, undefined parking behavior, etc)
-		LIBGC_CPPFLAGS=`echo $LIBGC_CPPFLAGS | sed -e 's/-finstrument-for-thread-suspension//g'`
-		ac_configure_args="$ac_configure_args --disable-embed-check --with-libgc-threads=$libgc_threads $libgc_configure_args \"CPPFLAGS_FOR_LIBGC=$LIBGC_CPPFLAGS\" \"CFLAGS_FOR_LIBGC=$CFLAGS_FOR_LIBGC\""
+		TMP_CPPFLAGS=`echo $TMP_CPPFLAGS | sed -e 's/-finstrument-for-thread-suspension//g'`
+		ac_configure_args="$ac_configure_args --disable-embed-check --with-libgc-threads=$libgc_threads $libgc_configure_args \"CPPFLAGS_FOR_LIBGC=$TMP_CPPFLAGS\" \"CFLAGS_FOR_LIBGC=$CFLAGS_FOR_LIBGC\""
 		subdirs="$subdirs libgc"
 
 		;;
@@ -23841,6 +24918,14 @@ else
 fi
 
 
+# Check whether --with-mobile was given.
+if test "${with_mobile+set}" = set; then :
+  withval=$with_mobile;
+else
+  with_mobile=no
+fi
+
+
 OPROFILE=no
 
 # Check whether --with-oprofile was given.
@@ -23930,6 +25015,15 @@ fi
 
 
 
+# When --disable-shared is used, libtool transforms libmono-2.0.la into libmono-2.0.so
+# instead of libmono-static.a
+if test "x$enable_shared" = "xno"; then
+   LIBMONO_LA=.libs/libmono-static.a
+else
+   LIBMONO_LA=libmono-$API_VER.la
+fi
+
+
 if test x$cross_compiling = xyes -o x$enable_mcs_build = xno; then
    DISABLE_MCS_DOCS=yes
 fi
@@ -23941,6 +25035,16 @@ else
 fi
 
 
+## Maybe should also disable if mcsdir is invalid.  Let's punt the issue for now.
+ if test x$cross_compiling = xno && test x$enable_mcs_build != xno; then
+  BUILD_MCS_TRUE=
+  BUILD_MCS_FALSE='#'
+else
+  BUILD_MCS_TRUE='#'
+  BUILD_MCS_FALSE=
+fi
+
+
  if test x$OPROFILE = xyes; then
   HAVE_OPROFILE_TRUE=
   HAVE_OPROFILE_FALSE='#'
@@ -24011,6 +25115,14 @@ else
   INSTALL_MONOTOUCH_FALSE=
 fi
 
+ if test "x$with_mobile" = xyes; then
+  INSTALL_MOBILE_TRUE=
+  INSTALL_MOBILE_FALSE='#'
+else
+  INSTALL_MOBILE_TRUE='#'
+  INSTALL_MOBILE_FALSE=
+fi
+
 
  if test ${TARGET}${ac_cv_c_compiler_gnu} = MIPSyes; then
   MIPS_GCC_TRUE=
@@ -24232,6 +25344,12 @@ ac_config_commands="$ac_config_commands runtime/etc/mono/4.0/machine.config"
 ac_config_commands="$ac_config_commands runtime/etc/mono/4.0/web.config"
 
 
+ac_config_commands="$ac_config_commands runtime/etc/mono/4.5/machine.config"
+
+
+ac_config_commands="$ac_config_commands runtime/etc/mono/4.5/web.config"
+
+
 if test x$enable_quiet_build = xyes; then
    ac_config_commands="$ac_config_commands quiet"
 
@@ -24239,7 +25357,7 @@ if test x$enable_quiet_build = xyes; then
 
 fi
 
-ac_config_files="$ac_config_files Makefile mono-core.spec mono-uninstalled.pc scripts/mono-find-provides scripts/mono-find-requires mono/Makefile mono/utils/Makefile mono/metadata/Makefile mono/dis/Makefile mono/cil/Makefile mono/arch/Makefile mono/arch/x86/Makefile mono/arch/amd64/Makefile mono/arch/hppa/Makefile mono/arch/ppc/Makefile mono/arch/sparc/Makefile mono/arch/s390/Makefile mono/arch/s390x/Makefile mono/arch/arm/Makefile mono/arch/alpha/Makefile mono/arch/ia64/Makefile mono/arch/mips/Makefile mono/interpreter/Makefile mono/tests/Makefile mono/tests/tests-config mono/tests/assemblyresolve/Makefile mono/tests/cas/Makefile mono/tests/cas/assembly/Makefile mono/tests/cas/demand/Makefile mono/tests/cas/inheritance/Makefile mono/tests/cas/linkdemand/Makefile mono/tests/cas/threads/Makefile mono/benchmark/Makefile mono/monograph/Makefile mono/io-layer/Makefile mono/mini/Makefile mono/profiler/Makefile ikvm-native/Makefile scripts/Makefile man/Makefile docs/Makefile data/Makefile data/net_2_0/Makefile data/net_4_0/Makefile data/net_2_0/Browsers/Makefile data/mint.pc data/mono-2.pc data/monosgen-2.pc data/mono.pc data/mono-cairo.pc data/mono-nunit.pc data/mono-options.pc data/mono-lineeditor.pc data/monodoc.pc data/mono.web.pc data/dotnet.pc data/dotnet35.pc data/wcf.pc data/cecil.pc data/system.web.extensions_1.0.pc data/system.web.extensions.design_1.0.pc data/system.web.mvc.pc data/system.web.mvc2.pc samples/Makefile support/Makefile data/config tools/Makefile tools/locale-builder/Makefile tools/sgen/Makefile runtime/Makefile msvc/Makefile po/Makefile"
+ac_config_files="$ac_config_files Makefile mono-core.spec mono-uninstalled.pc scripts/mono-find-provides scripts/mono-find-requires mono/Makefile mono/utils/Makefile mono/metadata/Makefile mono/dis/Makefile mono/cil/Makefile mono/arch/Makefile mono/arch/x86/Makefile mono/arch/amd64/Makefile mono/arch/hppa/Makefile mono/arch/ppc/Makefile mono/arch/sparc/Makefile mono/arch/s390/Makefile mono/arch/s390x/Makefile mono/arch/arm/Makefile mono/arch/alpha/Makefile mono/arch/ia64/Makefile mono/arch/mips/Makefile mono/interpreter/Makefile mono/tests/Makefile mono/tests/tests-config mono/tests/assemblyresolve/Makefile mono/tests/cas/Makefile mono/tests/cas/assembly/Makefile mono/tests/cas/demand/Makefile mono/tests/cas/inheritance/Makefile mono/tests/cas/linkdemand/Makefile mono/tests/cas/threads/Makefile mono/benchmark/Makefile mono/monograph/Makefile mono/io-layer/Makefile mono/mini/Makefile mono/profiler/Makefile m4/Makefile ikvm-native/Makefile scripts/Makefile man/Makefile docs/Makefile data/Makefile data/net_2_0/Makefile data/net_4_0/Makefile data/net_4_5/Makefile data/net_2_0/Browsers/Makefile data/mint.pc data/mono-2.pc data/monosgen-2.pc data/mono.pc data/mono-cairo.pc data/mono-nunit.pc data/mono-options.pc data/mono-lineeditor.pc data/monodoc.pc data/mono.web.pc data/dotnet.pc data/dotnet35.pc data/wcf.pc data/cecil.pc data/system.web.extensions_1.0.pc data/system.web.extensions.design_1.0.pc data/system.web.mvc.pc data/system.web.mvc2.pc samples/Makefile support/Makefile data/config tools/Makefile tools/locale-builder/Makefile tools/sgen/Makefile runtime/Makefile msvc/Makefile po/Makefile"
 
 cat >confcache <<\_ACEOF
 # This file is a shell script that caches the results of configure
@@ -24426,10 +25544,6 @@ if test -z "${HAVE_ZLIB_TRUE}" && test -z "${HAVE_ZLIB_FALSE}"; then
   as_fn_error $? "conditional \"HAVE_ZLIB\" was never defined.
 Usually this means the macro was only invoked conditionally." "$LINENO" 5
 fi
-if test -z "${BUILD_MCS_TRUE}" && test -z "${BUILD_MCS_FALSE}"; then
-  as_fn_error $? "conditional \"BUILD_MCS\" was never defined.
-Usually this means the macro was only invoked conditionally." "$LINENO" 5
-fi
 if test -z "${STATIC_MONO_TRUE}" && test -z "${STATIC_MONO_FALSE}"; then
   as_fn_error $? "conditional \"STATIC_MONO\" was never defined.
 Usually this means the macro was only invoked conditionally." "$LINENO" 5
@@ -24490,6 +25604,10 @@ if test -z "${MONO_DEBUGGER_SUPPORTED_TRUE}" && test -z "${MONO_DEBUGGER_SUPPORT
   as_fn_error $? "conditional \"MONO_DEBUGGER_SUPPORTED\" was never defined.
 Usually this means the macro was only invoked conditionally." "$LINENO" 5
 fi
+if test -z "${BUILD_MCS_TRUE}" && test -z "${BUILD_MCS_FALSE}"; then
+  as_fn_error $? "conditional \"BUILD_MCS\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
 if test -z "${HAVE_OPROFILE_TRUE}" && test -z "${HAVE_OPROFILE_FALSE}"; then
   as_fn_error $? "conditional \"HAVE_OPROFILE\" was never defined.
 Usually this means the macro was only invoked conditionally." "$LINENO" 5
@@ -24522,6 +25640,10 @@ if test -z "${INSTALL_MONOTOUCH_TRUE}" && test -z "${INSTALL_MONOTOUCH_FALSE}";
   as_fn_error $? "conditional \"INSTALL_MONOTOUCH\" was never defined.
 Usually this means the macro was only invoked conditionally." "$LINENO" 5
 fi
+if test -z "${INSTALL_MOBILE_TRUE}" && test -z "${INSTALL_MOBILE_FALSE}"; then
+  as_fn_error $? "conditional \"INSTALL_MOBILE\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
 if test -z "${MIPS_GCC_TRUE}" && test -z "${MIPS_GCC_FALSE}"; then
   as_fn_error $? "conditional \"MIPS_GCC\" was never defined.
 Usually this means the macro was only invoked conditionally." "$LINENO" 5
@@ -25007,7 +26129,7 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
 # report actual input values of CONFIG_FILES etc. instead of their
 # values after options handling.
 ac_log="
-This file was extended by $as_me, which was
+This file was extended by mono $as_me 2.11, which was
 generated by GNU Autoconf 2.68.  Invocation command line was
 
   CONFIG_FILES    = $CONFIG_FILES
@@ -25067,13 +26189,13 @@ $config_headers
 Configuration commands:
 $config_commands
 
-Report bugs to the package provider."
+Report bugs to <http://bugzilla.xamarin.com/enter_bug.cgi?classification=Mono>."
 
 _ACEOF
 cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`"
 ac_cs_version="\\
-config.status
+mono config.status 2.11
 configured by $0, generated by GNU Autoconf 2.68,
   with options \\"\$ac_cs_config\\"
 
@@ -25559,6 +26681,8 @@ LN_S='$LN_S'
 LN_S='$LN_S'
 LN_S='$LN_S'
 LN_S='$LN_S'
+LN_S='$LN_S'
+LN_S='$LN_S'
 shell=$SHELL
 
 _ACEOF
@@ -25583,6 +26707,8 @@ do
     "runtime/etc/mono/2.0/Browsers/Compat.browser") CONFIG_COMMANDS="$CONFIG_COMMANDS runtime/etc/mono/2.0/Browsers/Compat.browser" ;;
     "runtime/etc/mono/4.0/machine.config") CONFIG_COMMANDS="$CONFIG_COMMANDS runtime/etc/mono/4.0/machine.config" ;;
     "runtime/etc/mono/4.0/web.config") CONFIG_COMMANDS="$CONFIG_COMMANDS runtime/etc/mono/4.0/web.config" ;;
+    "runtime/etc/mono/4.5/machine.config") CONFIG_COMMANDS="$CONFIG_COMMANDS runtime/etc/mono/4.5/machine.config" ;;
+    "runtime/etc/mono/4.5/web.config") CONFIG_COMMANDS="$CONFIG_COMMANDS runtime/etc/mono/4.5/web.config" ;;
     "quiet") CONFIG_COMMANDS="$CONFIG_COMMANDS quiet" ;;
     "quiet-libtool") CONFIG_COMMANDS="$CONFIG_COMMANDS quiet-libtool" ;;
     "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;;
@@ -25622,6 +26748,7 @@ do
     "mono/io-layer/Makefile") CONFIG_FILES="$CONFIG_FILES mono/io-layer/Makefile" ;;
     "mono/mini/Makefile") CONFIG_FILES="$CONFIG_FILES mono/mini/Makefile" ;;
     "mono/profiler/Makefile") CONFIG_FILES="$CONFIG_FILES mono/profiler/Makefile" ;;
+    "m4/Makefile") CONFIG_FILES="$CONFIG_FILES m4/Makefile" ;;
     "ikvm-native/Makefile") CONFIG_FILES="$CONFIG_FILES ikvm-native/Makefile" ;;
     "scripts/Makefile") CONFIG_FILES="$CONFIG_FILES scripts/Makefile" ;;
     "man/Makefile") CONFIG_FILES="$CONFIG_FILES man/Makefile" ;;
@@ -25629,6 +26756,7 @@ do
     "data/Makefile") CONFIG_FILES="$CONFIG_FILES data/Makefile" ;;
     "data/net_2_0/Makefile") CONFIG_FILES="$CONFIG_FILES data/net_2_0/Makefile" ;;
     "data/net_4_0/Makefile") CONFIG_FILES="$CONFIG_FILES data/net_4_0/Makefile" ;;
+    "data/net_4_5/Makefile") CONFIG_FILES="$CONFIG_FILES data/net_4_5/Makefile" ;;
     "data/net_2_0/Browsers/Makefile") CONFIG_FILES="$CONFIG_FILES data/net_2_0/Browsers/Makefile" ;;
     "data/mint.pc") CONFIG_FILES="$CONFIG_FILES data/mint.pc" ;;
     "data/mono-2.pc") CONFIG_FILES="$CONFIG_FILES data/mono-2.pc" ;;
@@ -27353,8 +28481,37 @@ _LT_EOF
     $LN_S $reldir/data/net_4_0/web.config web.config
     cd $depth
  ;;
-    "quiet":C) for i in `find mono libgc support -name Makefile.in | sed -e 's/Makefile.in/Makefile/g'`; do if test -f $i; then $srcdir/scripts/patch-quiet.sh $i; fi; done ;;
-    "quiet-libtool":C) sed -e 's/$echo "copying selected/$show "copying selected/g' < libtool > libtool.tmp && mv libtool.tmp libtool && chmod a+x libtool; sed -e 's/$ECHO "copying selected/# "copying selected/g' < libtool > libtool.tmp && mv libtool.tmp libtool && chmod a+x libtool ;;
+    "runtime/etc/mono/4.5/machine.config":C)    depth=../../../..
+    case $srcdir in
+    [\\/$]* | ?:[\\/]* ) reldir=$srcdir ;;
+    .) reldir=$depth ;;
+    *) reldir=$depth/$srcdir ;;
+    esac
+    $ac_aux_dir/install-sh -d runtime/etc/mono/4.5
+    cd runtime/etc/mono/4.5
+    rm -f machine.config
+    $LN_S $reldir/data/net_4_5/machine.config machine.config
+    cd $depth
+ ;;
+    "runtime/etc/mono/4.5/web.config":C)    depth=../../../..
+    case $srcdir in
+    [\\/$]* | ?:[\\/]* ) reldir=$srcdir ;;
+    .) reldir=$depth ;;
+    *) reldir=$depth/$srcdir ;;
+    esac
+    $ac_aux_dir/install-sh -d runtime/etc/mono/4.5
+    cd runtime/etc/mono/4.5
+    rm -f web.config
+    $LN_S $reldir/data/net_4_5/web.config web.config
+    cd $depth
+ ;;
+    "quiet":C)   for i in `find mono libgc support -name Makefile`; do
+   	   if  grep -q 'generated by automake' $i ; then
+	   	  $srcdir/scripts/patch-quiet.sh $i;
+	   fi;
+   done
+ ;;
+    "quiet-libtool":C) sed -e 's/echo "copying selected/# "copying selected/g' < libtool > libtool.tmp && mv libtool.tmp libtool && chmod a+x libtool; sed -e 's/$ECHO "copying selected/# "copying selected/g' < libtool > libtool.tmp && mv libtool.tmp libtool && chmod a+x libtool ;;
 
   esac
 done # for ac_tag
@@ -27569,7 +28726,6 @@ fi
     echo "exec_prefix=$exec_prefix" >> $mcs_topdir/build/config.make
     echo "sysconfdir=$sysconfdir" >> $mcs_topdir/build/config.make
     echo 'mono_libdir=${exec_prefix}/lib' >> $mcs_topdir/build/config.make
-    echo 'MCS_FLAGS = $(PLATFORM_DEBUG_FLAGS)' >> $mcs_topdir/build/config.make
     echo 'IL_FLAGS = /debug' >> $mcs_topdir/build/config.make
     echo "RUNTIME = $mono_build_root/runtime/mono-wrapper" >> $mcs_topdir/build/config.make
     echo "ILDISASM = $mono_build_root/runtime/monodis-wrapper" >> $mcs_topdir/build/config.make
@@ -27605,7 +28761,7 @@ fi
 	   enable_system_aot=no
 	fi
 
-    if test x$host_win32 = xno -a x$platform_darwin != xyes -a x$enable_system_aot = xyes; then
+    if test x$host_win32 = xno -a x$enable_system_aot = xyes; then
       echo "ENABLE_AOT = 1" >> $mcs_topdir/build/config.make
     fi
 
@@ -27617,6 +28773,10 @@ fi
       echo "MOONLIGHT = 1" >> $srcdir/$mcsdir/build/config.make
     fi
 
+    if test x$with_profile4 != xyes; then
+      echo "DEFAULT_PROFILE = net_2_0" >> $srcdir/$mcsdir/build/config.make
+    fi
+
   fi
 
   # if we have an olive folder, override the default settings
@@ -27645,7 +28805,6 @@ echo "
 
    Engine:
 	GC:	       $gc_msg
-	GLIB:	       $with_glib
 	TLS:           $with_tls
 	SIGALTSTACK:   $with_sigaltstack
 	Engine:        $jit_status
@@ -27659,6 +28818,7 @@ echo "
 	Moon Profile:  $with_moonlight ($with_moon_gc)
 	MonoDroid:     $with_monodroid
 	MonoTouch:     $with_monotouch
+	Mobile:        $with_mobile
 	JNI support:   $jdk_headers_found
 	libgdiplus:    $libgdiplus_msg
 	zlib:          $zlib_msg
diff --git a/configure.in b/configure.in
index 7f3664e..c276e93 100644
--- a/configure.in
+++ b/configure.in
@@ -1,12 +1,20 @@
-AC_INIT(README)
+# Process this file with autoconf to produce a configure script.
+#AC_PREREQ([2.62])
+
+AC_INIT(mono, [2.11],
+        [http://bugzilla.xamarin.com/enter_bug.cgi?classification=Mono])
+
+AC_CONFIG_SRCDIR([README])
+AC_CONFIG_MACRO_DIR([m4])
 AC_CANONICAL_SYSTEM
+AC_CANONICAL_HOST
 
 # Gross hack to enable 'make dist' on automake 1.9+tar 1.14.
 # The extra brackets are to foil regex-based scans.
 m4_ifdef([_A][M_PROG_TAR],[_A][M_SET_OPTION([tar-ustar])])
 
-AM_CONFIG_HEADER(config.h)
-AM_INIT_AUTOMAKE(mono,2.10.8.1)
+AM_INIT_AUTOMAKE([1.9 dist-bzip2 tar-ustar no-dist-gzip foreign])
+AM_CONFIG_HEADER([config.h])
 AM_MAINTAINER_MODE
 
 API_VER=2.0
@@ -87,11 +95,21 @@ case "$host" in
 		host_win32=yes
 		if test "x$cross_compiling" = "xno"; then
 			target_win32=yes
-			if test "x$host" == "x$build"; then
+			if test "x$host" == "x$build" -a "x$host" == "x$target"; then
 				AC_DEFINE(TARGET_WIN32,1,[Target OS is Win32])
 			fi
-			CC="gcc -mno-cygwin -g"
-			CXX="g++ -mno-cygwin -g"
+			#
+			# gcc-3/g++-3 are from the gcc-core/gcc-g++ cygwin packages.
+			# Other gcc packages will not work:
+			# - the gcc-4 packages no longer support -mno-cygwin
+			# - the mingw-gcc packages produce executables which depends on a libgcc<...>
+			# dll, which means we would have to distribute that file too.
+			#
+			if test "x$CC" != "x"; then
+				AC_ERROR(Don't set CC. mono can only be compiled with gcc-3 from the 'gcc-core' package)
+			fi
+			CC="gcc-3.exe -mno-cygwin -g"
+			CXX="g++-3.exe -mno-cygwin -g"
 			# So libgc configure gets -mno-cygwin
 			export CC
 			export CXX
@@ -207,6 +225,7 @@ case "$host" in
 
 		# to bypass the underscore linker check, can't work when cross-compiling
 		mono_cv_uscore=yes
+		mono_cv_clang=no
 		;;
 	*-*-linux*)
 		host_win32=no
@@ -357,12 +376,6 @@ if test "x$CXX" = "xg++"; then
 	fi
 fi
 
-AC_CHECK_PROG(BISON, bison,yes,no)
-if test "x$BISON" = "xno";
-then
-	AC_MSG_ERROR([You need to install bison])
-fi
-
 dnl may require a specific autoconf version
 dnl AC_PROG_CC_FOR_BUILD
 dnl CC_FOR_BUILD not automatically detected
@@ -401,10 +414,16 @@ if test "x$lt_cv_prog_gnu_ld" = "xno"; then
    no_version_script=yes
 fi
 
+AM_ICONV()
+
 AM_CONDITIONAL(NO_VERSION_SCRIPT, test x$no_version_script = xyes)
 
 AC_CHECK_HEADERS(sys/filio.h sys/sockio.h netdb.h utime.h sys/utime.h semaphore.h sys/un.h linux/rtc.h sys/syscall.h sys/mkdev.h sys/uio.h sys/param.h)
 AC_CHECK_HEADERS(sys/param.h sys/socket.h sys/ipc.h sys/sem.h sys/utsname.h alloca.h ucontext.h pwd.h sys/select.h netinet/tcp.h netinet/in.h unistd.h sys/types.h link.h asm/sigcontext.h)
+AC_CHECK_HEADERS([linux/netlink.h linux/rtnetlink.h],
+                  [], [], [#include <stddef.h>
+		  #include <sys/socket.h>
+		  #include <linux/socket.h>])
 
 AC_CHECK_HEADERS(sys/user.h, [], [],
 [
@@ -459,21 +478,23 @@ AC_TRY_LINK([#include <math.h>], [
 	AC_MSG_RESULT(no)
 ])
 
+# for Linux statfs support
+AC_CHECK_HEADERS(linux/magic.h)
 
 # not 64 bit clean in cross-compile
 AC_CHECK_SIZEOF(void *, 4)
 
 WARN=''
 if test x"$GCC" = xyes; then
-        WARN='-Wall -Wunused -Wmissing-prototypes -Wmissing-declarations -Wstrict-prototypes  -Wmissing-prototypes -Wnested-externs -Wpointer-arith -Wno-cast-qual -Wwrite-strings'
+        WARN='-Wall -Wunused -Wmissing-prototypes -Wmissing-declarations -Wstrict-prototypes  -Wmissing-prototypes -Wnested-externs -Wpointer-arith -Wno-cast-qual -Wwrite-strings -Wno-switch-enum'
 		# The runtime code does not respect ANSI C strict aliasing rules
 		CFLAGS="$CFLAGS -fno-strict-aliasing"
 
 		ORIG_CFLAGS=$CFLAGS
 		CFLAGS="$CFLAGS -Wdeclaration-after-statement"
 		AC_MSG_CHECKING(for -Wdeclaration-after-statement option to gcc)
-		AC_TRY_COMPILE([], [
-						   void main () { }
+		AC_TRY_COMPILE([],[
+				return 0;
 		], [
 		   AC_MSG_RESULT(yes)
 		], [
@@ -485,8 +506,8 @@ if test x"$GCC" = xyes; then
 		# Check for the normal version, since gcc ignores unknown -Wno options
 		CFLAGS="$CFLAGS -Wunused-but-set-variable"
 		AC_MSG_CHECKING(for -Wno-unused-but-set-variable option to gcc)
-		AC_TRY_COMPILE([], [
-						   void main () { }
+		AC_TRY_COMPILE([],[
+				return 0;
 		], [
 		   AC_MSG_RESULT(yes)
 		   CFLAGS="$ORIG_CFLAGS -Wno-unused-but-set-variable"
@@ -506,6 +527,22 @@ fi
 CFLAGS="$CFLAGS -g $WARN"
 CFLAGS_FOR_LIBGC="$CFLAGS_FOR_LIBGC -g"
 
+AC_CACHE_CHECK([for clang],
+	mono_cv_clang,[
+	AC_TRY_RUN([
+		int main () {
+			#ifdef __clang__
+				return 0;
+			#else
+				return 1;
+			#endif
+		}
+	],
+	[mono_cv_clang=yes],
+	[mono_cv_clang=no],
+	[])
+])
+
 # Where's the 'mcs' source tree?
 if test -d $srcdir/mcs; then
   mcsdir=mcs
@@ -556,9 +593,6 @@ if test x$cross_compiling$host_win32 = xnoyes; then
   esac
 fi
 
-## Maybe should also disable if mcsdir is invalid.  Let's punt the issue for now.
-AM_CONDITIONAL(BUILD_MCS, [test x$cross_compiling = xno && test x$enable_mcs_build != xno])
-
 AC_SUBST([mcs_topdir])
 AC_SUBST([mcs_topdir_from_srcdir])
 
@@ -612,28 +646,15 @@ AC_ARG_WITH(crosspkgdir, [  --with-crosspkgdir=/path/to/pkg-config/dir      Chan
 	fi
 )
 
-AC_ARG_WITH([glib],
-	[  --with-glib=embedded|system    Choose glib API: system or embedded (default to embedded)],
-	[], [with_glib=embedded])
-
 ac_configure_args="$ac_configure_args \"CPPFLAGS_FOR_EGLIB=$EGLIB_CPPFLAGS\" \"CFLAGS_FOR_EGLIB=$CFLAGS_FOR_EGLIB\""
 AC_CONFIG_SUBDIRS(eglib)
 
-case $with_glib in
-embedded) 
-  GLIB_CFLAGS='-I$(top_srcdir)/eglib/src -I$(top_builddir)/eglib/src'
-  GLIB_LIBS='-L$(top_builddir)/eglib/src -leglib -lm'
-  BUILD_GLIB_CFLAGS="$GLIB_CFLAGS"
-  BUILD_GLIB_LIBS="$GLIB_LIBS"
-  GMODULE_CFLAGS="$GLIB_CFLAGS"
-  GMODULE_LIBS="$GLIB_LIBS"
-  ;;
-system)
-  AC_MSG_ERROR([--with-glib=system is no longer supported as of Mono 2.8])
-  ;;
-*)
-  AC_MSG_ERROR([Invalid argument to --with-glib.])
-esac
+GLIB_CFLAGS='-I$(top_srcdir)/eglib/src -I$(top_builddir)/eglib/src'
+GLIB_LIBS='-L$(top_builddir)/eglib/src -leglib -lm'
+BUILD_GLIB_CFLAGS="$GLIB_CFLAGS"
+BUILD_GLIB_LIBS="$GLIB_LIBS"
+GMODULE_CFLAGS="$GLIB_CFLAGS"
+GMODULE_LIBS="$GLIB_LIBS"
   
 AC_SUBST(GLIB_CFLAGS)
 AC_SUBST(GLIB_LIBS)
@@ -677,13 +698,13 @@ AM_CONDITIONAL(SHARED_MONO, test x$with_shared_mono != xno)
 AC_ARG_ENABLE(mcs-build, [  --disable-mcs-build disable the build of the mcs directory], try_mcs_build=$enableval, enable_mcs_build=yes)
 
 AC_ARG_WITH(xen_opt,   [  --with-xen_opt=yes,no          Enable Xen-specific behaviour (defaults to yes)],[],[with_xen_opt=yes])
-if test "x$with_xen_opt" = "xyes"; then
+if test "x$with_xen_opt" = "xyes" -a "x$mono_cv_clang" = "xno"; then
 	AC_DEFINE(MONO_XEN_OPT, 1, [Xen-specific behaviour])
 	ORIG_CFLAGS=$CFLAGS
 	CFLAGS="$CFLAGS -mno-tls-direct-seg-refs"
 	AC_MSG_CHECKING(for -mno-tls-direct-seg-refs option to gcc)
 	AC_TRY_COMPILE([], [
-					   void main () { }
+		return 0;
 	], [
 	   AC_MSG_RESULT(yes)
 	   # Pass it to libgc as well
@@ -839,9 +860,11 @@ if test "x$mono_feature_disable_shared_perfcounters" = "xyes"; then
 fi
 
 AC_MSG_CHECKING(for visibility __attribute__)
-AC_TRY_COMPILE([], [
-   void __attribute__ ((visibility ("hidden"))) doit (void) {}
-   void main () { doit (); }
+AC_COMPILE_IFELSE([
+	AC_LANG_SOURCE([[
+		void __attribute__ ((visibility ("hidden"))) doit (void) {}
+   		int main () { doit (); return 0; }
+   	]])
 ], [
    have_visibility_hidden=yes
    AC_MSG_RESULT(yes)
@@ -875,7 +898,7 @@ AM_CONDITIONAL(SUPPORT_BOEHM, test x$support_boehm = xyes)
 dnl
 dnl Boehm GC configuration
 dnl
-LIBGC_CFLAGS=
+LIBGC_CPPFLAGS=
 LIBGC_LIBS=
 LIBGC_STATIC_LIBS=
 libgc_dir=
@@ -924,7 +947,7 @@ case "x$gc" in
 		use_included_gc=yes
 		libgc_dir=libgc
 
-		LIBGC_CFLAGS='-I$(top_srcdir)/libgc/include'
+		LIBGC_CPPFLAGS='-I$(top_srcdir)/libgc/include'
 		LIBGC_LIBS='$(top_builddir)/libgc/libmonogc.la'
 		LIBGC_STATIC_LIBS='$(top_builddir)/libgc/libmonogc-static.la'
 
@@ -959,7 +982,7 @@ if test "x$large_heap" = "xyes"; then
 fi
 
 AM_CONDITIONAL(INCLUDED_LIBGC, test x$use_included_gc = xyes)
-AC_SUBST(LIBGC_CFLAGS)
+AC_SUBST(LIBGC_CPPFLAGS)
 AC_SUBST(LIBGC_LIBS)
 AC_SUBST(LIBGC_STATIC_LIBS)
 AC_SUBST(libgc_dir)
@@ -1073,10 +1096,9 @@ if test x$target_win32 = xno; then
 	dnl ****************************************************************
 	AC_MSG_CHECKING(for sched_setaffinity from glibc < 2.3.4)
 	AC_TRY_COMPILE([#include <sched.h>], [
-		int main() {
             int mask = 1; 
             sched_setaffinity(0, &mask);
-        }
+			return 0;
 	], [
 		# Yes, we have it...
 		AC_MSG_RESULT(yes)
@@ -1370,6 +1392,7 @@ if test x$target_win32 = xno; then
 	AC_CHECK_HEADERS(pthread.h)
 	AC_CHECK_FUNCS(pthread_mutex_timedlock)
 	AC_CHECK_FUNCS(pthread_getattr_np pthread_attr_get_np)
+	AC_CHECK_FUNCS(pthread_kill)
 	AC_MSG_CHECKING(for PTHREAD_MUTEX_RECURSIVE)
 	AC_TRY_COMPILE([ #include <pthread.h>], [
 		pthread_mutexattr_t attr;
@@ -1470,7 +1493,11 @@ if test x$target_win32 = xno; then
 			child ()
 			{
 				struct sigaction sa;
+			#ifdef __APPLE__
+				stack_t sas;
+			#else
 				struct sigaltstack sas;
+			#endif
 				pthread_t id;
 				pthread_attr_t attr;
 
@@ -1482,6 +1509,11 @@ if test x$target_win32 = xno; then
 					return;
 				}
 
+				/* x86 darwin deliver segfaults using SIGBUS */
+				if (sigaction (SIGBUS, &sa, NULL) == -1) {
+					perror ("sigaction");
+					return;
+				}
 				sas.ss_sp = malloc (SIGSTKSZ);
 				sas.ss_size = SIGSTKSZ;
 				sas.ss_flags = 0;
@@ -2098,7 +2130,7 @@ if test "x$enable_llvm" = "xyes"; then
    # from LLVM classes.
    LLVM_CXXFLAGS="`$LLVM_CONFIG --cxxflags` -fno-rtti"
    LLVM_LDFLAGS=`$LLVM_CONFIG --ldflags`
-   LLVM_LIBS=`$LLVM_CONFIG --libs core bitwriter jit x86codegen`
+   LLVM_LIBS=`$LLVM_CONFIG --libs core bitwriter jit mcjit x86codegen`
    LLVM_LIBS="$LLVM_LDFLAGS $LLVM_LIBS -lstdc++"
 
    # Should be something like '2.6' or '2.7svn'
@@ -2148,7 +2180,7 @@ X11="libX11.so"
 
 sizeof_register="SIZEOF_VOID_P"
 
-jit_wanted=false
+jit_wanted=true
 interp_wanted=false
 sgen_supported=false
 case "$host" in
@@ -2159,17 +2191,16 @@ case "$host" in
 	mips*)
 		TARGET=MIPS;
 		arch_target=mips;
+		sgen_supported=true
 		ACCESS_UNALIGNED="no"
 		JIT_SUPPORTED=yes
-		jit_wanted=true
 
 		AC_MSG_CHECKING(for mips n32)
-		AC_TRY_COMPILE([], [
-		void main () {
+		AC_TRY_COMPILE([],[
 		#if _MIPS_SIM != _ABIN32
 		#error Not mips n32
 		#endif
-   		}
+		return 0;
 		],[
 		AC_MSG_RESULT(yes)
 		sizeof_register=8
@@ -2181,7 +2212,6 @@ case "$host" in
 		TARGET=X86;
 		arch_target=x86;
 		JIT_SUPPORTED=yes
-		jit_wanted=true
 		case $host_os in
 		  solaris*)
 			LIBC="libc.so"
@@ -2202,8 +2232,10 @@ case "$host" in
 			# foo.c:6: warning: visibility attribute not supported in this configuration; ignored
 			# ld: fatal: relocation error: R_386_GOTOFF: file /var/tmp//ccxYR96k.o: symbol astruct: relocation must bind locally
 			have_visibility_hidden=no
+			sgen_supported=true
 			;;
 		  cygwin*)
+			sgen_supported=true
 			have_visibility_hidden=no		  
 			;;
 		  haiku*)
@@ -2213,6 +2245,10 @@ case "$host" in
 			sgen_supported=true
 			AOT_SUPPORTED="yes"
 			;;
+		  darwin*)
+			sgen_supported=true
+			AOT_SUPPORTED="yes"
+			;;
 		  darwin*|openbsd*|freebsd*)
 			sgen_supported=true
 		        ;;
@@ -2222,7 +2258,6 @@ case "$host" in
 		TARGET=AMD64;
 		arch_target=amd64;
 		JIT_SUPPORTED=yes
-		jit_wanted=true
 		case $host_os in
 		  linux*)
 			sgen_supported=true
@@ -2244,7 +2279,6 @@ case "$host" in
 		arch_target=ia64
 		ACCESS_UNALIGNED="no"
 		JIT_SUPPORTED=yes
-		jit_wanted=true
 		LIBC="libc.so.6.1"
 		INTL="libc.so.6.1"
 		AC_CHECK_LIB(unwind, _U_dyn_register, [], [AC_MSG_ERROR(library libunwind not found)])
@@ -2265,7 +2299,6 @@ case "$host" in
 			LIBC="libc.so"
 			INTL="libintl.so"
 		esac
-		jit_wanted=true
 		if test x"$GCC" = xyes; then
 			# We don't support v8 cpus
 			CFLAGS="$CFLAGS -Wno-cast-align -mcpu=v9"
@@ -2273,12 +2306,12 @@ case "$host" in
 		if test x"$AR" = xfalse; then
 			AC_MSG_ERROR([The required utility 'ar' is not found in your PATH. Usually it can be found in /usr/ccs/bin.])
 		fi
+		sgen_supported=true
 		;;
        alpha*-*-linux* | alpha*-*-osf*)
 		TARGET=ALPHA;
 		ACCESS_UNALIGNED="no"
 		JIT_SUPPORTED=yes
-		jit_wanted=true
 		arch_target=alpha;
 		CFLAGS="$CFLAGS -mieee -O0"
 		case $host_os in
@@ -2305,7 +2338,6 @@ case "$host" in
 		arch_target=hppa; 
 		ACCESS_UNALIGNED="no"
 		JIT_SUPPORTED=yes
-		jit_wanted=true
 		;;
 	macppc-*-openbsd* | powerpc*-*-linux* | powerpc-*-openbsd* | \
         powerpc-*-sysv* | powerpc-*-darwin* | powerpc-*-netbsd* | powerpc-*-freebsd* )
@@ -2319,7 +2351,6 @@ case "$host" in
 		fi
 		arch_target=ppc;
 		JIT_SUPPORTED=yes
-		jit_wanted=true
 		case $host_os in
 		  linux*|darwin*)
 			sgen_supported=true
@@ -2332,7 +2363,6 @@ case "$host" in
 		ACCESS_UNALIGNED="no"
 		JIT_SUPPORTED=yes
 		CPPFLAGS="$CPPFLAGS -DARM_FPU_VFP=1 -D__ARM_EABI__ -DHAVE_ARMV6=1"
-		jit_wanted=true
 		# libgc's gc_locks.h depends on this
 	    NESTED_LIBGC_FLAGS="$NESTED_LIBGC_FLAGS -DHAVE_ARMV6"
 		sgen_supported=true
@@ -2342,15 +2372,14 @@ case "$host" in
 		arch_target=arm;
 		ACCESS_UNALIGNED="no"
 		JIT_SUPPORTED=yes
-		jit_wanted=true
 		sgen_supported=true
+		AOT_SUPPORTED="yes"
 		;;
 	s390-*-linux*)
 		TARGET=S390;
 		arch_target=s390;
 		ACCESS_UNALIGNED="yes"
 		JIT_SUPPORTED=yes
-		jit_wanted=true
 		sgen_supported=true
 		# Required CFLAGS for s390[x].  USE_STRING_INLINES is automatic with gcc 4.1
 		CFLAGS="$CFLAGS -mbackchain -D__USE_STRING_INLINES"
@@ -2360,7 +2389,6 @@ case "$host" in
 		arch_target=s390x;
 		ACCESS_UNALIGNED="yes"
 		JIT_SUPPORTED=yes
-		jit_wanted=true
 		sgen_supported=true
 		CFLAGS="$CFLAGS -mbackchain -D__USE_STRING_INLINES"
 		;;
@@ -2368,6 +2396,7 @@ esac
 
 if test "x$host" != "x$target"; then
    AC_DEFINE(MONO_CROSS_COMPILE,1,[The runtime is compiled for cross-compiling mode])
+   enable_mcs_build=no
    case "$target" in
    powerpc64-ps3-linux-gnu)
 		TARGET=POWERPC64
@@ -2397,6 +2426,12 @@ if test "x$host" != "x$target"; then
 		AC_DEFINE(__mono_ilp32__, 1, [64 bit mode with 4 byte longs and pointers])
 		sizeof_register=8
 		;;
+   *-*-nacl)
+		TARGET=X86
+		arch_target=x86
+		AC_DEFINE(TARGET_X86, 1, [...])
+		sizeof_register=4
+		;;
    armv7l-unknown-linux-gnueabi*)
 		# TEGRA
 		TARGET=ARM;
@@ -2458,6 +2493,12 @@ POWERPC64)
 	AC_DEFINE(TARGET_POWERPC, 1, [...])
 	AC_DEFINE(TARGET_POWERPC64, 1, [...])
 	;;
+S390x)
+	AC_DEFINE(TARGET_S390X, 1, [...])
+	;;
+MIPS)
+	AC_DEFINE(TARGET_MIPS, 1, [...])
+	;;
 esac
 
 if test "x$sizeof_register" = "x4"; then
@@ -2506,22 +2547,6 @@ fi
 AC_SUBST(SGEN_DEFINES)
 AM_CONDITIONAL(SUPPORT_SGEN, test x$buildsgen = xyes)
 
-AC_ARG_WITH(jit, [  --with-jit=yes,no              If you want to build scripts that default to the JIT (defaults to no)],[
-	if test x$withval = xyes; then
-	   jit_wanted=true
-	else
-	   jit_wanted=false
-	fi
-])
-
-AC_ARG_WITH(interp, [  --with-interp=yes,no           If you want to build scripts that default to the interpreter (defaults to no)],[
-	if test x$withval = xyes; then
-	   interp_wanted=true
-	else
-	   interp_wanted=false
-	fi
-])
-
 USEJIT=false
 if test x$JIT_SUPPORTED = xyes; then
    if $jit_wanted; then
@@ -2600,7 +2625,7 @@ if test "x$TARGET" = "xAMD64" -o "x$TARGET" = "xX86"; then
 		# undefined reference to `__tls_get_addr'
 		#
 		rm -f conftest.c conftest.so conftest
-		echo "static __thread int foo; void main () { foo = 5; }" > conftest.c
+		echo "static __thread int foo; int main () { foo = 5; return 0; }" > conftest.c
 		$CC -fPIC --shared -o conftest.so conftest.c > /dev/null 2>&1
 		$CC -o conftest conftest.so > /dev/null 2>&1
 		if test ! -f conftest; then
@@ -2614,7 +2639,7 @@ fi
 mono_debugger_supported=no
 AC_ARG_ENABLE(mono-debugger, [  --disable-mono-debugger disable support for the mdb debugger], try_mono_debugger=$enableval, try_mono_debugger=yes)
 if test "x$try_mono_debugger" = "xyes"; then
-	if test "x$TARGET" = "xAMD64" -o "x$TARGET" = "xX86" -o "x$TARGET" = "xALPHA"; then
+	if test "x$TARGET" = "xAMD64" -o "x$TARGET" = "xX86" -o "x$TARGET" = "xALPHA" -o "x$TARGET" = "xS390x"; then
 		if test x$use_included_gc = xyes; then
 			case "$host" in
 			*-*-*linux*)
@@ -2641,6 +2666,21 @@ fi
 AM_CONDITIONAL(MONO_DEBUGGER_SUPPORTED, test x$mono_debugger_supported = xyes)
 AC_MSG_RESULT($mono_debugger_supported)
 
+AC_ARG_ENABLE(icall-symbol-map,[ --enable-icall-symbol-map Generate tables which map icall functions to their C symbols], icall_symbol_map=$enableval, icall_symbol_map=no)
+if test "x$icall_symbol_map" = "xyes"; then
+   AC_DEFINE(ENABLE_ICALL_SYMBOL_MAP, 1, [Icall symbol map enabled])
+fi
+
+AC_ARG_ENABLE(icall-export,[ --enable-icall-export Export icall functions], icall_export=$enableval, icall_export=no)
+if test "x$icall_export" = "xyes"; then
+   AC_DEFINE(ENABLE_ICALL_EXPORT, 1, [Icall export enabled])
+fi
+
+AC_ARG_ENABLE(icall-tables,[ --disable-icall-tables Disable the runtime lookup of icalls], icall_tables=$enableval, icall_tables=yes)
+if test "x$icall_tables" = "xno"; then
+   AC_DEFINE(DISABLE_ICALL_TABLES, 1, [Icall tables disabled])
+fi
+
 if test "x$with_tls" = "x__thread"; then
 	AC_DEFINE(HAVE_KW_THREAD, 1, [Have __thread keyword])
 	# Pass the information to libgc
@@ -2649,7 +2689,10 @@ if test "x$with_tls" = "x__thread"; then
 	AC_TRY_COMPILE([static __thread int foo __attribute__((tls_model("initial-exec")));], [
 		], [
 			AC_MSG_RESULT(yes)
-			AC_DEFINE(HAVE_TLS_MODEL_ATTR, 1, [tld_model available])
+			# CLANG doesn't support this yet, and it prints warnings about it
+			if test "x$mono_cv_clang" = "xno"; then
+				AC_DEFINE(HAVE_TLS_MODEL_ATTR, 1, [tld_model available])
+			fi
 		], [
 			AC_MSG_RESULT(no)
 	])
@@ -2661,9 +2704,25 @@ if test ${TARGET} = ARM && test x$cross_compiling = xno && test x$enable_mcs_bui
 	dnl ******************************************
 	AC_MSG_CHECKING(which FPU to use)
 
-	AC_TRY_COMPILE([], [
-		__asm__ ("ldfd f0, [r0]");
-		], fpu=FPA, fpu=NONE)
+	fpu=NONE
+	if gcc -v 2>&1 | grep -q -- '--with-float=hard'; then
+	   fpu=VFP_HARD
+	fi
+
+	if test x$fpu = xNONE; then
+	   ORIG_CFLAGS=$CFLAGS
+	   CFLAGS="$CFLAGS -mfpu=vfp -mfloat-abi=softfp"
+	   AC_TRY_RUN([
+				int main () { __asm__ ("faddd	d7, d6, d7"); return 0; }
+				], fpu=VFP, fpu=NONE)
+	   CFLAGS=$ORIG_CFLAGS
+	fi
+
+	if test x$fpu = xNONE; then
+		AC_TRY_COMPILE([], [
+			__asm__ ("ldfd f0, [r0]");
+			], fpu=FPA, fpu=NONE)
+	fi
 
 	AC_MSG_RESULT($fpu)
 	CPPFLAGS="$CPPFLAGS -DARM_FPU_$fpu=1"
@@ -2700,23 +2759,24 @@ case "x$gc" in
 		# The problem with this approach, is that during a reconfigure, the main
 		# configure scripts gets invoked with these arguments, so we use separate
 		# variables understood by libgc's configure to pass CPPFLAGS and CFLAGS.
-		LIBGC_CPPFLAGS="$CPPFLAGS $NESTED_LIBGC_FLAGS"
+		TMP_CPPFLAGS="$CPPFLAGS $NESTED_LIBGC_FLAGS"
 		if test x$TARGET = xSPARC -o x$TARGET = xSPARC64; then
-			LIBGC_CPPFLAGS=`echo $LIBGC_CPPFLAGS | sed -e 's/-D_FILE_OFFSET_BITS=64//g'`
+			TMP_CPPFLAGS=`echo $TMP_CPPFLAGS | sed -e 's/-D_FILE_OFFSET_BITS=64//g'`
 		fi
 		# Don't pass -finstrument-for-thread-suspension in, 
 		# if these are instrumented it will be very bad news 
 		# (infinite recursion, undefined parking behavior, etc)
-		LIBGC_CPPFLAGS=`echo $LIBGC_CPPFLAGS | sed -e 's/-finstrument-for-thread-suspension//g'`
-		ac_configure_args="$ac_configure_args --disable-embed-check --with-libgc-threads=$libgc_threads $libgc_configure_args \"CPPFLAGS_FOR_LIBGC=$LIBGC_CPPFLAGS\" \"CFLAGS_FOR_LIBGC=$CFLAGS_FOR_LIBGC\""
+		TMP_CPPFLAGS=`echo $TMP_CPPFLAGS | sed -e 's/-finstrument-for-thread-suspension//g'`
+		ac_configure_args="$ac_configure_args --disable-embed-check --with-libgc-threads=$libgc_threads $libgc_configure_args \"CPPFLAGS_FOR_LIBGC=$TMP_CPPFLAGS\" \"CFLAGS_FOR_LIBGC=$CFLAGS_FOR_LIBGC\""
 		AC_CONFIG_SUBDIRS(libgc)
 		;;
 esac
 
 #AC_ARG_WITH(profile2,  [  --with-profile2=yes,no          If you want to install the 2.0 FX (defaults to yes)],                 [], [with_profile2=yes])
-AC_ARG_WITH(profile4,  [  --with-profile4=yes,no          If you want to install the 4.0 FX (defaults to yes)],                  [], [with_profile4=yes])
+AC_ARG_WITH(profile4,  [  --with-profile4=yes,no          If you want to install the 4.x FX (defaults to yes)],                  [], [with_profile4=yes])
 AC_ARG_WITH(monodroid, [  --with-monodroid=yes,no         If you want to build the MonoDroid 2.1 assemblies (defaults to no)], [], [with_monodroid=no])
 AC_ARG_WITH(monotouch, [  --with-monotouch=yes,no         If you want to build the MonoTouch 2.1 assemblies (defaults to no)], [], [with_monotouch=no])
+AC_ARG_WITH(mobile,    [  --with-mobile=yes,no            If you want to build the Mobile 2.1 assemblies (defaults to no)], [], [with_mobile=no])
 
 OPROFILE=no
 AC_ARG_WITH(oprofile,[  --with-oprofile=no,<oprofile install dir>   Enable oprofile support (defaults to no)],[
@@ -2769,6 +2829,15 @@ AC_CHECK_HEADER([malloc.h],
 		[AC_DEFINE([HAVE_USR_INCLUDE_MALLOC_H], [1], 
 			[Define to 1 if you have /usr/include/malloc.h.])],,)
 
+# When --disable-shared is used, libtool transforms libmono-2.0.la into libmono-2.0.so
+# instead of libmono-static.a
+if test "x$enable_shared" = "xno"; then
+   LIBMONO_LA=.libs/libmono-static.a
+else
+   LIBMONO_LA=libmono-$API_VER.la
+fi
+AC_SUBST(LIBMONO_LA)
+
 dnl
 dnl Consistency settings
 dnl
@@ -2783,6 +2852,9 @@ else
 fi
 AC_SUBST(docs_dir)
 
+## Maybe should also disable if mcsdir is invalid.  Let's punt the issue for now.
+AM_CONDITIONAL(BUILD_MCS, [test x$cross_compiling = xno && test x$enable_mcs_build != xno])
+
 AM_CONDITIONAL(HAVE_OPROFILE, test x$OPROFILE = xyes)
 AC_SUBST(OPROFILE_CFLAGS)
 AC_SUBST(OPROFILE_LIBS)
@@ -2797,6 +2869,7 @@ AM_CONDITIONAL(MOONLIGHT_SGEN, [test "x$with_moon_gc" = "xsgen"])
 AM_CONDITIONAL(INSTALL_4_0, [test "x$with_profile4" = xyes])
 AM_CONDITIONAL(INSTALL_MONODROID, [test "x$with_monodroid" = xyes])
 AM_CONDITIONAL(INSTALL_MONOTOUCH, [test "x$with_monotouch" = xyes])
+AM_CONDITIONAL(INSTALL_MOBILE, [test "x$with_mobile" = xyes])
 
 AM_CONDITIONAL(MIPS_GCC, test ${TARGET}${ac_cv_prog_gcc} = MIPSyes)
 AM_CONDITIONAL(MIPS_SGI, test ${TARGET}${ac_cv_prog_gcc} = MIPSno)
@@ -2955,9 +3028,43 @@ AC_CONFIG_COMMANDS([runtime/etc/mono/4.0/web.config],
     cd $depth
 ],[LN_S='$LN_S'])
 
+AC_CONFIG_COMMANDS([runtime/etc/mono/4.5/machine.config],
+[   depth=../../../..
+    case $srcdir in
+    [[\\/$]]* | ?:[[\\/]]* ) reldir=$srcdir ;;
+    .) reldir=$depth ;;
+    *) reldir=$depth/$srcdir ;;
+    esac
+    $ac_aux_dir/install-sh -d runtime/etc/mono/4.5
+    cd runtime/etc/mono/4.5
+    rm -f machine.config
+    $LN_S $reldir/data/net_4_5/machine.config machine.config
+    cd $depth
+],[LN_S='$LN_S'])
+
+AC_CONFIG_COMMANDS([runtime/etc/mono/4.5/web.config],
+[   depth=../../../..
+    case $srcdir in
+    [[\\/$]]* | ?:[[\\/]]* ) reldir=$srcdir ;;
+    .) reldir=$depth ;;
+    *) reldir=$depth/$srcdir ;;
+    esac
+    $ac_aux_dir/install-sh -d runtime/etc/mono/4.5
+    cd runtime/etc/mono/4.5
+    rm -f web.config
+    $LN_S $reldir/data/net_4_5/web.config web.config
+    cd $depth
+],[LN_S='$LN_S'])
+
 if test x$enable_quiet_build = xyes; then
-   AC_CONFIG_COMMANDS([quiet], [for i in `find mono libgc support -name Makefile.in | sed -e 's/Makefile.in/Makefile/g'`; do if test -f $i; then $srcdir/scripts/patch-quiet.sh $i; fi; done], [shell=$SHELL])
-   AC_CONFIG_COMMANDS([quiet-libtool], [sed -e 's/$echo "copying selected/$show "copying selected/g' < libtool > libtool.tmp && mv libtool.tmp libtool && chmod a+x libtool; sed -e 's/$ECHO "copying selected/# "copying selected/g' < libtool > libtool.tmp && mv libtool.tmp libtool && chmod a+x libtool])
+   AC_CONFIG_COMMANDS([quiet],
+[  for i in `find mono libgc support -name Makefile`; do
+   	   if [ grep -q 'generated by automake' $i ]; then
+	   	  $srcdir/scripts/patch-quiet.sh $i;
+	   fi;
+   done
+], [shell=$SHELL])
+   AC_CONFIG_COMMANDS([quiet-libtool], [sed -e 's/echo "copying selected/# "copying selected/g' < libtool > libtool.tmp && mv libtool.tmp libtool && chmod a+x libtool; sed -e 's/$ECHO "copying selected/# "copying selected/g' < libtool > libtool.tmp && mv libtool.tmp libtool && chmod a+x libtool])
 fi
 
 AC_OUTPUT([
@@ -2998,6 +3105,7 @@ mono/monograph/Makefile
 mono/io-layer/Makefile
 mono/mini/Makefile
 mono/profiler/Makefile
+m4/Makefile
 ikvm-native/Makefile
 scripts/Makefile
 man/Makefile
@@ -3005,6 +3113,7 @@ docs/Makefile
 data/Makefile
 data/net_2_0/Makefile
 data/net_4_0/Makefile
+data/net_4_5/Makefile
 data/net_2_0/Browsers/Makefile
 data/mint.pc
 data/mono-2.pc
@@ -3065,7 +3174,6 @@ fi
     echo "exec_prefix=$exec_prefix" >> $mcs_topdir/build/config.make
     echo "sysconfdir=$sysconfdir" >> $mcs_topdir/build/config.make
     echo 'mono_libdir=${exec_prefix}/lib' >> $mcs_topdir/build/config.make
-    echo 'MCS_FLAGS = $(PLATFORM_DEBUG_FLAGS)' >> $mcs_topdir/build/config.make
     echo 'IL_FLAGS = /debug' >> $mcs_topdir/build/config.make
     echo "RUNTIME = $mono_build_root/runtime/mono-wrapper" >> $mcs_topdir/build/config.make
     echo "ILDISASM = $mono_build_root/runtime/monodis-wrapper" >> $mcs_topdir/build/config.make
@@ -3101,7 +3209,7 @@ fi
 	   enable_system_aot=no
 	fi
 
-    if test x$host_win32 = xno -a x$platform_darwin != xyes -a x$enable_system_aot = xyes; then
+    if test x$host_win32 = xno -a x$enable_system_aot = xyes; then
       echo "ENABLE_AOT = 1" >> $mcs_topdir/build/config.make
     fi
 
@@ -3112,6 +3220,10 @@ fi
     if test x$with_moonlight != xno; then
       echo "MOONLIGHT = 1" >> $srcdir/$mcsdir/build/config.make
     fi
+    
+    if test x$with_profile4 != xyes; then
+      echo "DEFAULT_PROFILE = net_2_0" >> $srcdir/$mcsdir/build/config.make
+    fi
 
   fi
 
@@ -3141,7 +3253,6 @@ echo "
 
    Engine:
 	GC:	       $gc_msg 
-	GLIB:	       $with_glib
 	TLS:           $with_tls
 	SIGALTSTACK:   $with_sigaltstack
 	Engine:        $jit_status
@@ -3155,6 +3266,7 @@ echo "
 	Moon Profile:  $with_moonlight ($with_moon_gc)
 	MonoDroid:     $with_monodroid
 	MonoTouch:     $with_monotouch
+	Mobile:        $with_mobile
 	JNI support:   $jdk_headers_found
 	libgdiplus:    $libgdiplus_msg
 	zlib:          $zlib_msg
diff --git a/data/ChangeLog b/data/ChangeLog
index cbe6889..6a017f0 100644
--- a/data/ChangeLog
+++ b/data/ChangeLog
@@ -1,59 +1,3 @@
-2011-06-20  Michael Hutchinson  <m.j.hutchinson at gmail.com>
-
-	Fix the cairo dllmap on OS X
-
-2011-03-28  Andrew Jorgensen  <ajorgensen at novell.com>
-
-	mono-sgen-gdb.py should be installed conditionally
-
-2011-03-13  Gonzalo Paniagua Javier  <gonzalo.mono at gmail.com>
-
-	Add new ignore file.
-
-2011-03-07  Zoltan Varga  <vargaz at gmail.com>
-
-	Fix the previous change.
-
-2011-03-07  Zoltan Varga  <vargaz at gmail.com>
-
-	Fix out-of-tree builds.
-
-2011-03-04  Zoltan Varga  <vargaz at gmail.com>
-
-	Install a mono-sgen-gdb.py as well.
-
-2011-01-19  Mark Probst  <mark.probst at gmail.com>
-
-	[build] pkg-config support for libmonosgen.
-
-2010-12-01  Jonathan Pryor  <jonpryor at vt.edu>
-
-	Add response file suport to Mono.Options.
-
-	Response file support is an "opt-in" feature, performed by adding
-	a ResponseFileSource to the OptionSet initialization logic:
-
-	var p = new OptionSet () { // normal options here... new
-	ResponseFileSource (), };
-
-	Response files make use of the new "ArgumentSource" support, which
-	acts as a low-level argument pre-processor, allowing processing of
-	arguments _before_ Option processing is performed.
-
-2010-11-02  Andrew Jorgensen  <ajorgensen at novell.com>
-
-	Map libcups for mac
-
-	Fixes bnc#649994
-
-2010-10-22  Jb Evain  <jbevain at gmail.com>
-
-	update cecil.pc
-
-2010-08-30  Andrew Jorgensen  <ajorgensen at novell.com>
-
-	Remove obsolete Microsoft.Vsa and Microsoft.JScript
-
 2010-05-17  Zoltan Varga  <vargaz at gmail.com>
 
 	* mono-2.pc.in (Libs): Remove glib dependencies.
diff --git a/data/ChangeLog.old b/data/ChangeLog.old
deleted file mode 100644
index 6a017f0..0000000
--- a/data/ChangeLog.old
+++ /dev/null
@@ -1,15 +0,0 @@
-2010-05-17  Zoltan Varga  <vargaz at gmail.com>
-
-	* mono-2.pc.in (Libs): Remove glib dependencies.
-
-2010-05-07  Zoltan Varga  <vargaz at gmail.com>
-
-	* mono-2.pc (Requires): Remove glib dependencies.
-
-2010-04-02  Jb Evain  <jbevain at novell.com>
-
-	* dotnet35.pc.in: add System.Data.Services.dll.
-
-2010-03-08  Rodrigo Kumpera  <rkumpera at novell.com>
-
-	* mono.supp: Add hazard pointers supressions.
diff --git a/data/Makefile.am b/data/Makefile.am
index 0c41bd2..1e25644 100644
--- a/data/Makefile.am
+++ b/data/Makefile.am
@@ -1,7 +1,7 @@
 SUBDIRS = net_2_0
 
 if INSTALL_4_0
-SUBDIRS += net_4_0
+SUBDIRS += net_4_0 net_4_5
 endif
 
 monodir = $(sysconfdir)/mono
@@ -21,10 +21,8 @@ pkgconfigdir = $(libdir)/pkgconfig
 
 if SUPPORT_SGEN
 SGENPCFILE=monosgen-2.pc
-SGENGDBFILE=mono-sgen-gdb.py
 else
 SGENPCFILE=
-SGENGDBFILE=
 endif
 
 if JIT_SUPPORTED
@@ -40,7 +38,7 @@ pkgconfig_DATA= mint.pc mono-nunit.pc mono-cairo.pc mono-options.pc cecil.pc mon
 endif
 
 DISTCLEANFILES= mono-2.pc mono.pc mint.pc dotnet.pc dotnet35.pc wcf.pc mono-nunit.pc mono-cairo.pc mono-options.pc cecil.pc monodoc.pc mono-lineeditor.pc system.web.extensions_1.0.pc \
-		system.web.extensions.design_1.0.pc mono.web.pc system.web.mvc.pc system.web.mvc2.pc monosgen-2.pc mono-sgen-gdb.py
+		system.web.extensions.design_1.0.pc mono.web.pc system.web.mvc.pc system.web.mvc2.pc $(SGENPCFILE) mono-sgen-gdb.py
 
 mono_DATA =  config \
 	     browscap.ini
@@ -50,5 +48,5 @@ gdbdir = $(bindir)
 mono-sgen-gdb.py: gdb/mono-gdb.py
 	cp $< $@
 
-gdb_DATA = gdb/mono-gdb.py $(SGENGDBFILE)
+gdb_DATA = gdb/mono-gdb.py mono-sgen-gdb.py
 
diff --git a/data/Makefile.in b/data/Makefile.in
index def24df..4fb56a5 100644
--- a/data/Makefile.in
+++ b/data/Makefile.in
@@ -35,7 +35,7 @@ POST_UNINSTALL = :
 build_triplet = @build@
 host_triplet = @host@
 target_triplet = @target@
- at INSTALL_4_0_TRUE@am__append_1 = net_4_0
+ at INSTALL_4_0_TRUE@am__append_1 = net_4_0 net_4_5
 subdir = data
 DIST_COMMON = README $(srcdir)/Makefile.am $(srcdir)/Makefile.in \
 	$(srcdir)/cecil.pc.in $(srcdir)/config.in \
@@ -50,11 +50,13 @@ DIST_COMMON = README $(srcdir)/Makefile.am $(srcdir)/Makefile.in \
 	$(srcdir)/system.web.mvc.pc.in $(srcdir)/system.web.mvc2.pc.in \
 	$(srcdir)/wcf.pc.in ChangeLog
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/libtool.m4 \
-	$(top_srcdir)/ltoptions.m4 $(top_srcdir)/ltsugar.m4 \
-	$(top_srcdir)/ltversion.m4 $(top_srcdir)/lt~obsolete.m4 \
-	$(top_srcdir)/nls.m4 $(top_srcdir)/po.m4 \
-	$(top_srcdir)/progtest.m4 $(top_srcdir)/acinclude.m4 \
+am__aclocal_m4_deps = $(top_srcdir)/m4/iconv.m4 \
+	$(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
+	$(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \
+	$(top_srcdir)/m4/progtest.m4 $(top_srcdir)/acinclude.m4 \
 	$(top_srcdir)/configure.in
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
@@ -107,7 +109,7 @@ AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \
 	distdir
 ETAGS = etags
 CTAGS = ctags
-DIST_SUBDIRS = net_2_0 net_4_0
+DIST_SUBDIRS = net_2_0 net_4_0 net_4_5
 DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
 am__relativize = \
   dir0=`pwd`; \
@@ -143,7 +145,6 @@ AUTOCONF = @AUTOCONF@
 AUTOHEADER = @AUTOHEADER@
 AUTOMAKE = @AUTOMAKE@
 AWK = @AWK@
-BISON = @BISON@
 BOEHM_DEFINES = @BOEHM_DEFINES@
 BUILD_EXEEXT = @BUILD_EXEEXT@
 BUILD_GLIB_CFLAGS = @BUILD_GLIB_CFLAGS@
@@ -197,9 +198,11 @@ INTL = @INTL@
 LD = @LD@
 LDFLAGS = @LDFLAGS@
 LIBC = @LIBC@
-LIBGC_CFLAGS = @LIBGC_CFLAGS@
+LIBGC_CPPFLAGS = @LIBGC_CPPFLAGS@
 LIBGC_LIBS = @LIBGC_LIBS@
 LIBGC_STATIC_LIBS = @LIBGC_STATIC_LIBS@
+LIBICONV = @LIBICONV@
+LIBMONO_LA = @LIBMONO_LA@
 LIBOBJS = @LIBOBJS@
 LIBS = @LIBS@
 LIBTOOL = @LIBTOOL@
@@ -212,6 +215,7 @@ LLVM_LIBS = @LLVM_LIBS@
 LN_S = @LN_S@
 LTCOMPILE = @LTCOMPILE@
 LTCXXCOMPILE = @LTCXXCOMPILE@
+LTLIBICONV = @LTLIBICONV@
 LTLIBOBJS = @LTLIBOBJS@
 MAINT = @MAINT@
 MAKEINFO = @MAKEINFO@
@@ -344,8 +348,6 @@ EXTRA_DIST = \
 pkgconfigdir = $(libdir)/pkgconfig
 @SUPPORT_SGEN_FALSE at SGENPCFILE = 
 @SUPPORT_SGEN_TRUE at SGENPCFILE = monosgen-2.pc
- at SUPPORT_SGEN_FALSE@SGENGDBFILE = 
- at SUPPORT_SGEN_TRUE@SGENGDBFILE = mono-sgen-gdb.py
 @INTERP_SUPPORTED_FALSE@@JIT_SUPPORTED_TRUE at pkgconfig_DATA = mono.pc mono-2.pc dotnet.pc dotnet35.pc wcf.pc mono-nunit.pc mono-cairo.pc mono-options.pc cecil.pc monodoc.pc mono-lineeditor.pc system.web.extensions_1.0.pc \
 @INTERP_SUPPORTED_FALSE@@JIT_SUPPORTED_TRUE@		system.web.extensions.design_1.0.pc mono.web.pc system.web.mvc.pc system.web.mvc2.pc $(SGENPCFILE)
 
@@ -354,13 +356,13 @@ pkgconfigdir = $(libdir)/pkgconfig
 
 @JIT_SUPPORTED_FALSE at pkgconfig_DATA = mint.pc mono-nunit.pc mono-cairo.pc mono-options.pc cecil.pc monodoc.pc mono-lineeditor.pc
 DISTCLEANFILES = mono-2.pc mono.pc mint.pc dotnet.pc dotnet35.pc wcf.pc mono-nunit.pc mono-cairo.pc mono-options.pc cecil.pc monodoc.pc mono-lineeditor.pc system.web.extensions_1.0.pc \
-		system.web.extensions.design_1.0.pc mono.web.pc system.web.mvc.pc system.web.mvc2.pc monosgen-2.pc mono-sgen-gdb.py
+		system.web.extensions.design_1.0.pc mono.web.pc system.web.mvc.pc system.web.mvc2.pc $(SGENPCFILE) mono-sgen-gdb.py
 
 mono_DATA = config \
 	     browscap.ini
 
 gdbdir = $(bindir)
-gdb_DATA = gdb/mono-gdb.py $(SGENGDBFILE)
+gdb_DATA = gdb/mono-gdb.py mono-sgen-gdb.py
 all: all-recursive
 
 .SUFFIXES:
@@ -373,9 +375,9 @@ $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__confi
 	      exit 1;; \
 	  esac; \
 	done; \
-	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu data/Makefile'; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign data/Makefile'; \
 	$(am__cd) $(top_srcdir) && \
-	  $(AUTOMAKE) --gnu data/Makefile
+	  $(AUTOMAKE) --foreign data/Makefile
 .PRECIOUS: Makefile
 Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
 	@case '$?' in \
diff --git a/data/cecil.pc.in b/data/cecil.pc.in
index 067872a..59450b4 100644
--- a/data/cecil.pc.in
+++ b/data/cecil.pc.in
@@ -1,5 +1,5 @@
 assemblies_dir=@prefix@/lib/mono
-Libraries=${assemblies_dir}/gac/Mono.Cecil/0.9.4.0__0738eb9f132ed756/Mono.Cecil.dll
+Libraries=${assemblies_dir}/gac/Mono.Cecil/0.9.5.0__0738eb9f132ed756/Mono.Cecil.dll
 
 Name: Mono Internal -- Do not use.
 Description: Mono Internal Libraries -- Do not use 
diff --git a/data/gdb/mono-gdb.py b/data/gdb/mono-gdb.py
index b53f197..c8d921e 100644
--- a/data/gdb/mono-gdb.py
+++ b/data/gdb/mono-gdb.py
@@ -166,6 +166,8 @@ class MonoClassPrinter:
             return "0x0"
         klass = self.val.dereference ()
         class_name = stringify_class_name (klass ["name_space"].string (), klass ["name"].string ())
+        if klass ["generic_class"].cast (gdb.lookup_type ("guint64")) != 0:
+            class_name = "%s<%s>" % (class_name, str (klass ["generic_class"]["context"]["class_inst"]))
         if add_quotes:
             return "\"%s\"" % (class_name)
         else:
@@ -188,6 +190,8 @@ class MonoGenericInstPrinter:
         self.val = val
 
     def to_string(self):
+        if int(self.val.cast (gdb.lookup_type ("guint64"))) == 0:
+            return "0x0"
         inst = self.val.dereference ()
         inst_len = inst ["type_argc"]
         inst_args = inst ["type_argv"]
@@ -280,6 +284,21 @@ class MonoMethodRgctxPrinter:
             inst_str = inst_str + type_printer.to_string ()
         return "MRGCTX[%s, [%s]]" % (klass_printer.to_string(), inst_str)
 
+class MonoVTablePrinter:
+    "Print a MonoVTable structure"
+
+    def __init__(self, val):
+        self.val = val
+
+    def to_string(self):
+        if int(self.val.cast (gdb.lookup_type ("guint64"))) == 0:
+            return "0x0"
+        vtable = self.val.dereference ()
+        klass = vtable ["klass"]
+        klass_printer = MonoClassPrinter (klass)
+
+        return "vtable(%s)" % (klass_printer.to_string ())
+
 def lookup_pretty_printer(val):
     t = str (val.type)
     if t == "object":
@@ -302,6 +321,8 @@ def lookup_pretty_printer(val):
         return MonoGenericClassPrinter (val)
     if t == "MonoMethodRuntimeGenericContext *":
         return MonoMethodRgctxPrinter (val)
+    if t == "MonoVTable *":
+        return MonoVTablePrinter (val)
     return None
 
 def register_csharp_printers(obj):
diff --git a/data/mono-options.pc.in b/data/mono-options.pc.in
index 8c56982..8569ffc 100644
--- a/data/mono-options.pc.in
+++ b/data/mono-options.pc.in
@@ -4,4 +4,4 @@ Sources=${assemblies_dir}/Options.cs
 
 Name: Mono.Options
 Description: Command Line Parsing Library
-Version: 0.2.2
+Version: 0.2.3
diff --git a/data/net_1_1/machine.config b/data/net_1_1/machine.config
index bf48577..2e346ad 100644
--- a/data/net_1_1/machine.config
+++ b/data/net_1_1/machine.config
@@ -214,12 +214,16 @@
 			<cryptoNameMapping>
 				<cryptoClasses>
 					<cryptoClass monoMD2="Mono.Security.Cryptography.MD2Managed, Mono.Security, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=0738eb9f132ed756" />
+					<cryptoClass monoMD4="Mono.Security.Cryptography.MD4Managed, Mono.Security, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=0738eb9f132ed756" />
 				</cryptoClasses>
 				<nameEntry name="MD2" class="monoMD2" />
+				<nameEntry name="MD4" class="monoMD4" />
 			</cryptoNameMapping>
 			<oidMap>
 				<oidEntry OID="1.2.840.113549.2.2" name="MD2" />
 				<oidEntry OID="1.2.840.113549.2.2" name="Mono.Security.Cryptography.MD2Managed" />
+				<oidEntry OID="1.2.840.113549.2.4" name="MD4" />
+				<oidEntry OID="1.2.840.113549.2.4" name="Mono.Security.Cryptography.MD4Managed" />
 			</oidMap>
 		</cryptographySettings>
 	</mscorlib>
diff --git a/data/net_2_0/Browsers/Makefile.in b/data/net_2_0/Browsers/Makefile.in
index cbfb79e..0bc7ff6 100644
--- a/data/net_2_0/Browsers/Makefile.in
+++ b/data/net_2_0/Browsers/Makefile.in
@@ -38,11 +38,13 @@ target_triplet = @target@
 subdir = data/net_2_0/Browsers
 DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ChangeLog
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/libtool.m4 \
-	$(top_srcdir)/ltoptions.m4 $(top_srcdir)/ltsugar.m4 \
-	$(top_srcdir)/ltversion.m4 $(top_srcdir)/lt~obsolete.m4 \
-	$(top_srcdir)/nls.m4 $(top_srcdir)/po.m4 \
-	$(top_srcdir)/progtest.m4 $(top_srcdir)/acinclude.m4 \
+am__aclocal_m4_deps = $(top_srcdir)/m4/iconv.m4 \
+	$(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
+	$(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \
+	$(top_srcdir)/m4/progtest.m4 $(top_srcdir)/acinclude.m4 \
 	$(top_srcdir)/configure.in
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
@@ -85,7 +87,6 @@ AUTOCONF = @AUTOCONF@
 AUTOHEADER = @AUTOHEADER@
 AUTOMAKE = @AUTOMAKE@
 AWK = @AWK@
-BISON = @BISON@
 BOEHM_DEFINES = @BOEHM_DEFINES@
 BUILD_EXEEXT = @BUILD_EXEEXT@
 BUILD_GLIB_CFLAGS = @BUILD_GLIB_CFLAGS@
@@ -139,9 +140,11 @@ INTL = @INTL@
 LD = @LD@
 LDFLAGS = @LDFLAGS@
 LIBC = @LIBC@
-LIBGC_CFLAGS = @LIBGC_CFLAGS@
+LIBGC_CPPFLAGS = @LIBGC_CPPFLAGS@
 LIBGC_LIBS = @LIBGC_LIBS@
 LIBGC_STATIC_LIBS = @LIBGC_STATIC_LIBS@
+LIBICONV = @LIBICONV@
+LIBMONO_LA = @LIBMONO_LA@
 LIBOBJS = @LIBOBJS@
 LIBS = @LIBS@
 LIBTOOL = @LIBTOOL@
@@ -154,6 +157,7 @@ LLVM_LIBS = @LLVM_LIBS@
 LN_S = @LN_S@
 LTCOMPILE = @LTCOMPILE@
 LTCXXCOMPILE = @LTCXXCOMPILE@
+LTLIBICONV = @LTLIBICONV@
 LTLIBOBJS = @LTLIBOBJS@
 MAINT = @MAINT@
 MAKEINFO = @MAKEINFO@
@@ -285,9 +289,9 @@ $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__confi
 	      exit 1;; \
 	  esac; \
 	done; \
-	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu data/net_2_0/Browsers/Makefile'; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign data/net_2_0/Browsers/Makefile'; \
 	$(am__cd) $(top_srcdir) && \
-	  $(AUTOMAKE) --gnu data/net_2_0/Browsers/Makefile
+	  $(AUTOMAKE) --foreign data/net_2_0/Browsers/Makefile
 .PRECIOUS: Makefile
 Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
 	@case '$?' in \
diff --git a/data/net_2_0/ChangeLog b/data/net_2_0/ChangeLog
index ba417db..d925a1e 100644
--- a/data/net_2_0/ChangeLog
+++ b/data/net_2_0/ChangeLog
@@ -1,14 +1,3 @@
-2011-01-25  Marek Habersack  <grendel at twistedcode.net>
-
-	[machine.config] Added the <system.transactions> section
-	definition
-
-2010-11-19  Gonzalo Paniagua Javier  <gonzalo.mono at gmail.com>
-
-	Web service help fix
-
-	Generate the wsdl document with UTF8 encoding.
-
 2009-08-11 Gonzalo Paniagua Javier <gonzalo at novell.com>
 
 	* DefaultWsdlHelpGenerator.aspx: the 'Message Layout' can now handle
diff --git a/data/net_2_0/ChangeLog.old b/data/net_2_0/ChangeLog.old
deleted file mode 100644
index d925a1e..0000000
--- a/data/net_2_0/ChangeLog.old
+++ /dev/null
@@ -1,147 +0,0 @@
-2009-08-11 Gonzalo Paniagua Javier <gonzalo at novell.com>
-
-	* DefaultWsdlHelpGenerator.aspx: the 'Message Layout' can now handle
-	self-referencing types. Fixes bug #529353.
-
-2009-08-05  Atsushi Enomoto  <atsushi at ximian.com>
-
-	* web.config: add WCF assemblies as references at compilation.
-	* machine.config: add some missing WCF sections (new in 3.5).
-
-2009-05-28  Atsushi Enomoto  <atsushi at ximian.com>
-
-	* machine.config: fix WCF diagnostics section name.
-
-2009-03-31  Marek Habersack  <mhabersack at novell.com>
-
-	* DefaultWsdlHelpGenerator.aspx: the link element in <head> must
-	be created using Response.Write, as the code expression in the
-	href attribute is otherwise treated verbatim. This is the same as
-	with .NET. Fixes bug #490497
-
-2009-03-27 Gonzalo Paniagua Javier <gonzalo at novell.com>
-
-	* DefaultWsdlHelpGenerator.aspx: disable the test form
-	when only Soap is supported.
-	Bug #342073 fixed.
-
-2009-01-23  Atsushi Enomoto  <atsushi at ximian.com>
-
-	* web.config : added .svc handler.
-
-2009-01-07  Kornél Pál  <kornelpal at gmail.com>
-
-	* DefaultWsdlHelpGenerator.aspx: Move <script> at the end of <head> that
-	  will make Visual Studio recognize the web service disco reference.
-
-	Contributed under MIT/X11 license.
-
-2008-12-03  Marek Habersack  <mhabersack at novell.com>
-
-	* machine.config: rename serviceModelHostingEnvironment to
-	serviceHostingEnvironment.
-
-2008-11-20 Gonzalo Paniagua Javier <gonzalo at novell.com>
-
-	* machine.config: in 2.0, there's no <connectionManagement> section
-	here. Bug #445991 fixed.
-
-2008-11-14 Gonzalo Paniagua Javier <gonzalo at novell.com>
-
-	* DefaultWsdlHelpGenerator.aspx: use javascript instead of
-	HttpWebRequest to avoid a deadlock if the web service uses Session.
-	Bug #444343 fixed.
-
-2008-10-09 Gonzalo Paniagua Javier <gonzalo at novell.com>
-
-	* web.config: default values for httpRuntime are different in 2.0
-
-2008-10-09  Marek Habersack  <mhabersack at novell.com>
-
-	* web.config: added the default monoSettings section which works around
-	an incompatibility between mcs and csc, mentioned in bug #433806
-
-	* machine.config: added definition of the monoSettings section to 
-	the system.web group
-
-2008-10-06  Marek Habersack  <mhabersack at novell.com>
-
-	* machine.config: added entries to ignore the mobileControls and
-	deviceFilters sections.
-
-2008-09-02  Marek Habersack  <mhabersack at novell.com>
-
-	* web.config: removed System.Web.Extensions.dll from the assemblies
-	(reverting r112073) - it would break all the ASP.NET applications
-	which use System.Web.Extensions other than 3.5.0.0
-
-2008-09-06  Daniel Morgan  <monodanmorg at yahoo.com>
-
-	* machine.config: added Mono.Data.SybaseClient
-	to DbProviderFactories section.
-
-2008-09-02  Atsushi Enomoto  <atsushi at ximian.com>
-
-	* web.config: added System.Web.Extensions.dll to assemblies.
-
-2008-08-28  Zoltan Varga  <vargaz at gmail.com>
-
-	* machine.config: Fix syntax error.
-
-2008-03-23  Dean Brettle  <dean at brettle.com>
-
-	* Makefile.am: added Browsers/Compat.browser
-
-2008-02-29  Marek Habersack  <mhabersack at novell.com>
-
-	* machine.config: added an entry to ignore the browserCaps section.
-
-2007-12-15  Marek Habersack  <mhabersack at novell.com>
-
-	* web.config: compilation/compilers are no longer necessary.
-
-2007-12-08  Marek Habersack  <mhabersack at novell.com>
-
-	* machine.config: updated the LocalSqlServer connection string to
-	match MS.NET and added a new connection string, LocalSqliteServer,
-	to be used by default on Unix.
-	Updated the AspNetSqlMembershipProvider definition to match
-	MS.NET.
-
-	* settings.map: added
-
-	* Makefile.am: added settings.map
-
-2007-10-17  Atsushi Enomoto  <atsushi at ximian.com>
-
-	* web.config, machine.config: moved webSerices section from former
-	  to latter.
-
-2007-09-05  Atsushi Enomoto  <atsushi at ximian.com>
-
-	* machine.config : added WCF sectionGroups.
-
-2007-09-04  Marek Habersack  <mhabersack at novell.com>
-
-	* machine.config: added an entry to ignore the <system.webServer>
-	section. Fixes bug #82535
-
-2007-07-03  Marek Habersack  <mhabersack at novell.com>
-
-	* DefaultWsdlHelpGenerator.aspx: make head server-side, for the
-	service generator to run on sites which use stylesheet themes
-	configured in web.config. Fixes bug #81994
-
-2007-05-01  Marek Habersack  <mhabersack at novell.com>
-
-	* machine.config: added standard data provider factories, or
-	otherwise the SqlDataSource tests will fail.
-
-2007-04-27  Atsushi Enomoto  <atsushi at ximian.com>
-
-	* DefaultWsdlHelpGenerator.aspx :
-	  ProfileViolations could be null, when there is no Binding. So,
-	  don't omit null check.
-
-	  Stop your bad habit of missing ChangeLog. Former changes (as long
-	  as logged) can be seen in ../../ChangeLog.
diff --git a/data/net_2_0/Makefile.in b/data/net_2_0/Makefile.in
index 4f6ff60..953b92d 100644
--- a/data/net_2_0/Makefile.in
+++ b/data/net_2_0/Makefile.in
@@ -38,11 +38,13 @@ target_triplet = @target@
 subdir = data/net_2_0
 DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ChangeLog
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/libtool.m4 \
-	$(top_srcdir)/ltoptions.m4 $(top_srcdir)/ltsugar.m4 \
-	$(top_srcdir)/ltversion.m4 $(top_srcdir)/lt~obsolete.m4 \
-	$(top_srcdir)/nls.m4 $(top_srcdir)/po.m4 \
-	$(top_srcdir)/progtest.m4 $(top_srcdir)/acinclude.m4 \
+am__aclocal_m4_deps = $(top_srcdir)/m4/iconv.m4 \
+	$(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
+	$(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \
+	$(top_srcdir)/m4/progtest.m4 $(top_srcdir)/acinclude.m4 \
 	$(top_srcdir)/configure.in
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
@@ -125,7 +127,6 @@ AUTOCONF = @AUTOCONF@
 AUTOHEADER = @AUTOHEADER@
 AUTOMAKE = @AUTOMAKE@
 AWK = @AWK@
-BISON = @BISON@
 BOEHM_DEFINES = @BOEHM_DEFINES@
 BUILD_EXEEXT = @BUILD_EXEEXT@
 BUILD_GLIB_CFLAGS = @BUILD_GLIB_CFLAGS@
@@ -179,9 +180,11 @@ INTL = @INTL@
 LD = @LD@
 LDFLAGS = @LDFLAGS@
 LIBC = @LIBC@
-LIBGC_CFLAGS = @LIBGC_CFLAGS@
+LIBGC_CPPFLAGS = @LIBGC_CPPFLAGS@
 LIBGC_LIBS = @LIBGC_LIBS@
 LIBGC_STATIC_LIBS = @LIBGC_STATIC_LIBS@
+LIBICONV = @LIBICONV@
+LIBMONO_LA = @LIBMONO_LA@
 LIBOBJS = @LIBOBJS@
 LIBS = @LIBS@
 LIBTOOL = @LIBTOOL@
@@ -194,6 +197,7 @@ LLVM_LIBS = @LLVM_LIBS@
 LN_S = @LN_S@
 LTCOMPILE = @LTCOMPILE@
 LTCXXCOMPILE = @LTCXXCOMPILE@
+LTLIBICONV = @LTLIBICONV@
 LTLIBOBJS = @LTLIBOBJS@
 MAINT = @MAINT@
 MAKEINFO = @MAKEINFO@
@@ -334,9 +338,9 @@ $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__confi
 	      exit 1;; \
 	  esac; \
 	done; \
-	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu data/net_2_0/Makefile'; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign data/net_2_0/Makefile'; \
 	$(am__cd) $(top_srcdir) && \
-	  $(AUTOMAKE) --gnu data/net_2_0/Makefile
+	  $(AUTOMAKE) --foreign data/net_2_0/Makefile
 .PRECIOUS: Makefile
 Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
 	@case '$?' in \
diff --git a/data/net_2_0/machine.config b/data/net_2_0/machine.config
index 73ddbb8..c6d1b2c 100644
--- a/data/net_2_0/machine.config
+++ b/data/net_2_0/machine.config
@@ -197,12 +197,16 @@
 			<cryptoNameMapping>
 				<cryptoClasses>
 					<cryptoClass monoMD2="Mono.Security.Cryptography.MD2Managed, Mono.Security, Version=2.0.0.0, Culture=neutral, PublicKeyToken=0738eb9f132ed756" />
+					<cryptoClass monoMD4="Mono.Security.Cryptography.MD4Managed, Mono.Security, Version=2.0.0.0, Culture=neutral, PublicKeyToken=0738eb9f132ed756" />
 				</cryptoClasses>
 				<nameEntry name="MD2" class="monoMD2" />
+				<nameEntry name="MD4" class="monoMD4" />
 			</cryptoNameMapping>
 			<oidMap>
 				<oidEntry OID="1.2.840.113549.2.2" name="MD2" />
 				<oidEntry OID="1.2.840.113549.2.2" name="Mono.Security.Cryptography.MD2Managed" />
+				<oidEntry OID="1.2.840.113549.2.4" name="MD4" />
+				<oidEntry OID="1.2.840.113549.2.4" name="Mono.Security.Cryptography.MD4Managed" />
 			</oidMap>
 		</cryptographySettings>
 	</mscorlib>
diff --git a/data/net_4_0/ChangeLog b/data/net_4_0/ChangeLog
index 9e1baf3..0f076a9 100644
--- a/data/net_4_0/ChangeLog
+++ b/data/net_4_0/ChangeLog
@@ -1,46 +1,3 @@
-2011-01-25  Marek Habersack  <grendel at twistedcode.net>
-
-	[machine.config] Added the <system.transactions> section
-	definition
-
-2010-12-13  Marek Habersack  <grendel at twistedcode.net>
-
-	[asp.net] .NET 4.0 declares the <system.web.extensions> section in
-	machine.config
-
-2010-11-19  Gonzalo Paniagua Javier  <gonzalo.mono at gmail.com>
-
-	Web service help fix
-
-	Generate the wsdl document with UTF8 encoding.
-
-2010-09-18  Atsushi Eno  <atsushi at ximian.com>
-
-	ProtocolMapping needed config section, default items and support
-	in ServiceHostBase.
-
-2010-09-17  Atsushi Eno  <atsushi at ximian.com>
-
-	Add working .svc handler in 4.0 web.config, fix standard endpoint
-	handling and get xsp4 working.
-
-2010-09-13  Atsushi Eno  <atsushi at ximian.com>
-
-	implemented large parts of WCF standard endpoints and
-	configuration support.
-
-2010-09-07  Gonzalo Paniagua Javier  <gonzalo.mono at gmail.com>
-
-	Add wsdl help generator to the 4.0 files
-
-	Ditto.
-
-	Fixes bug #636841.
-
-2010-08-19  Jb Evain  <jbevain at gmail.com>
-
-	[Fix] update the System.ServiceModel assembly version
-
 2009-08-06  Atsushi Enomoto  <atsushi at ximian.com>
 
 	* web.config: add WCF assemblies as references at compilation.
diff --git a/data/net_4_0/ChangeLog.old b/data/net_4_0/ChangeLog.old
deleted file mode 100644
index 0f076a9..0000000
--- a/data/net_4_0/ChangeLog.old
+++ /dev/null
@@ -1,9 +0,0 @@
-2009-08-06  Atsushi Enomoto  <atsushi at ximian.com>
-
-	* web.config: add WCF assemblies as references at compilation.
-	* machine.config: add some missing WCF sections (new in 3.5).
-
-2009-07-24  Jb Evain  <jbevain at novell.com>
-
-	* Initial import of the net_4_0 specific files.
-
diff --git a/data/net_4_0/Makefile.in b/data/net_4_0/Makefile.in
index 17291d6..2eabd54 100644
--- a/data/net_4_0/Makefile.in
+++ b/data/net_4_0/Makefile.in
@@ -38,11 +38,13 @@ target_triplet = @target@
 subdir = data/net_4_0
 DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ChangeLog
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/libtool.m4 \
-	$(top_srcdir)/ltoptions.m4 $(top_srcdir)/ltsugar.m4 \
-	$(top_srcdir)/ltversion.m4 $(top_srcdir)/lt~obsolete.m4 \
-	$(top_srcdir)/nls.m4 $(top_srcdir)/po.m4 \
-	$(top_srcdir)/progtest.m4 $(top_srcdir)/acinclude.m4 \
+am__aclocal_m4_deps = $(top_srcdir)/m4/iconv.m4 \
+	$(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
+	$(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \
+	$(top_srcdir)/m4/progtest.m4 $(top_srcdir)/acinclude.m4 \
 	$(top_srcdir)/configure.in
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
@@ -125,7 +127,6 @@ AUTOCONF = @AUTOCONF@
 AUTOHEADER = @AUTOHEADER@
 AUTOMAKE = @AUTOMAKE@
 AWK = @AWK@
-BISON = @BISON@
 BOEHM_DEFINES = @BOEHM_DEFINES@
 BUILD_EXEEXT = @BUILD_EXEEXT@
 BUILD_GLIB_CFLAGS = @BUILD_GLIB_CFLAGS@
@@ -179,9 +180,11 @@ INTL = @INTL@
 LD = @LD@
 LDFLAGS = @LDFLAGS@
 LIBC = @LIBC@
-LIBGC_CFLAGS = @LIBGC_CFLAGS@
+LIBGC_CPPFLAGS = @LIBGC_CPPFLAGS@
 LIBGC_LIBS = @LIBGC_LIBS@
 LIBGC_STATIC_LIBS = @LIBGC_STATIC_LIBS@
+LIBICONV = @LIBICONV@
+LIBMONO_LA = @LIBMONO_LA@
 LIBOBJS = @LIBOBJS@
 LIBS = @LIBS@
 LIBTOOL = @LIBTOOL@
@@ -194,6 +197,7 @@ LLVM_LIBS = @LLVM_LIBS@
 LN_S = @LN_S@
 LTCOMPILE = @LTCOMPILE@
 LTCXXCOMPILE = @LTCXXCOMPILE@
+LTLIBICONV = @LTLIBICONV@
 LTLIBOBJS = @LTLIBOBJS@
 MAINT = @MAINT@
 MAKEINFO = @MAKEINFO@
@@ -334,9 +338,9 @@ $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__confi
 	      exit 1;; \
 	  esac; \
 	done; \
-	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu data/net_4_0/Makefile'; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign data/net_4_0/Makefile'; \
 	$(am__cd) $(top_srcdir) && \
-	  $(AUTOMAKE) --gnu data/net_4_0/Makefile
+	  $(AUTOMAKE) --foreign data/net_4_0/Makefile
 .PRECIOUS: Makefile
 Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
 	@case '$?' in \
diff --git a/data/net_4_0/machine.config b/data/net_4_0/machine.config
index 2957a3c..b98a4d3 100644
--- a/data/net_4_0/machine.config
+++ b/data/net_4_0/machine.config
@@ -214,12 +214,16 @@
 			<cryptoNameMapping>
 				<cryptoClasses>
 					<cryptoClass monoMD2="Mono.Security.Cryptography.MD2Managed, Mono.Security, Version=4.0.0.0, Culture=neutral, PublicKeyToken=0738eb9f132ed756" />
+					<cryptoClass monoMD4="Mono.Security.Cryptography.MD4Managed, Mono.Security, Version=4.0.0.0, Culture=neutral, PublicKeyToken=0738eb9f132ed756" />
 				</cryptoClasses>
 				<nameEntry name="MD2" class="monoMD2" />
+				<nameEntry name="MD4" class="monoMD4" />
 			</cryptoNameMapping>
 			<oidMap>
 				<oidEntry OID="1.2.840.113549.2.2" name="MD2" />
 				<oidEntry OID="1.2.840.113549.2.2" name="Mono.Security.Cryptography.MD2Managed" />
+				<oidEntry OID="1.2.840.113549.2.4" name="MD4" />
+				<oidEntry OID="1.2.840.113549.2.4" name="Mono.Security.Cryptography.MD4Managed" />
 			</oidMap>
 		</cryptographySettings>
 	</mscorlib>
diff --git a/data/net_2_0/DefaultWsdlHelpGenerator.aspx b/data/net_4_5/DefaultWsdlHelpGenerator.aspx
similarity index 100%
copy from data/net_2_0/DefaultWsdlHelpGenerator.aspx
copy to data/net_4_5/DefaultWsdlHelpGenerator.aspx
diff --git a/data/net_4_5/Makefile.am b/data/net_4_5/Makefile.am
new file mode 100644
index 0000000..c45989c
--- /dev/null
+++ b/data/net_4_5/Makefile.am
@@ -0,0 +1,13 @@
+SUBDIRS =
+
+monodir = $(sysconfdir)/mono/4.5
+
+EXTRA_DIST =  machine.config \
+	      web.config \
+	      DefaultWsdlHelpGenerator.aspx \
+	      settings.map
+
+mono_DATA =  machine.config \
+	      web.config \
+	      DefaultWsdlHelpGenerator.aspx \
+	      settings.map
diff --git a/data/net_4_5/Makefile.in b/data/net_4_5/Makefile.in
new file mode 100644
index 0000000..763542b
--- /dev/null
+++ b/data/net_4_5/Makefile.in
@@ -0,0 +1,701 @@
+# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009  Free Software Foundation,
+# Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+ at SET_MAKE@
+
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+target_triplet = @target@
+subdir = data/net_4_5
+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/iconv.m4 \
+	$(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
+	$(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \
+	$(top_srcdir)/m4/progtest.m4 $(top_srcdir)/acinclude.m4 \
+	$(top_srcdir)/configure.in
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+	$(ACLOCAL_M4)
+mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+SOURCES =
+DIST_SOURCES =
+RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \
+	html-recursive info-recursive install-data-recursive \
+	install-dvi-recursive install-exec-recursive \
+	install-html-recursive install-info-recursive \
+	install-pdf-recursive install-ps-recursive install-recursive \
+	installcheck-recursive installdirs-recursive pdf-recursive \
+	ps-recursive uninstall-recursive
+am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
+am__vpath_adj = case $$p in \
+    $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
+    *) f=$$p;; \
+  esac;
+am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
+am__install_max = 40
+am__nobase_strip_setup = \
+  srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
+am__nobase_strip = \
+  for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
+am__nobase_list = $(am__nobase_strip_setup); \
+  for p in $$list; do echo "$$p $$p"; done | \
+  sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
+  $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
+    if (++n[$$2] == $(am__install_max)) \
+      { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
+    END { for (dir in files) print dir, files[dir] }'
+am__base_list = \
+  sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
+  sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
+am__installdirs = "$(DESTDIR)$(monodir)"
+DATA = $(mono_DATA)
+RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive	\
+  distclean-recursive maintainer-clean-recursive
+AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \
+	$(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \
+	distdir
+ETAGS = etags
+CTAGS = ctags
+DIST_SUBDIRS = $(SUBDIRS)
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+am__relativize = \
+  dir0=`pwd`; \
+  sed_first='s,^\([^/]*\)/.*$$,\1,'; \
+  sed_rest='s,^[^/]*/*,,'; \
+  sed_last='s,^.*/\([^/]*\)$$,\1,'; \
+  sed_butlast='s,/*[^/]*$$,,'; \
+  while test -n "$$dir1"; do \
+    first=`echo "$$dir1" | sed -e "$$sed_first"`; \
+    if test "$$first" != "."; then \
+      if test "$$first" = ".."; then \
+        dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \
+        dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \
+      else \
+        first2=`echo "$$dir2" | sed -e "$$sed_first"`; \
+        if test "$$first2" = "$$first"; then \
+          dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \
+        else \
+          dir2="../$$dir2"; \
+        fi; \
+        dir0="$$dir0"/"$$first"; \
+      fi; \
+    fi; \
+    dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \
+  done; \
+  reldir="$$dir2"
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+API_VER = @API_VER@
+AR = @AR@
+AS = @AS@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+BOEHM_DEFINES = @BOEHM_DEFINES@
+BUILD_EXEEXT = @BUILD_EXEEXT@
+BUILD_GLIB_CFLAGS = @BUILD_GLIB_CFLAGS@
+BUILD_GLIB_LIBS = @BUILD_GLIB_LIBS@
+CC = @CC@
+CCAS = @CCAS@
+CCASDEPMODE = @CCASDEPMODE@
+CCASFLAGS = @CCASFLAGS@
+CCDEPMODE = @CCDEPMODE@
+CC_FOR_BUILD = @CC_FOR_BUILD@
+CFLAGS = @CFLAGS@
+CFLAGS_FOR_BUILD = @CFLAGS_FOR_BUILD@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CXX = @CXX@
+CXXCPP = @CXXCPP@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DISABLE_SHARED_HANDLES = @DISABLE_SHARED_HANDLES@
+DLLTOOL = @DLLTOOL@
+DOLT_BASH = @DOLT_BASH@
+DSYMUTIL = @DSYMUTIL@
+DTRACE = @DTRACE@
+DTRACEFLAGS = @DTRACEFLAGS@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+FGREP = @FGREP@
+GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@
+GLIB_CFLAGS = @GLIB_CFLAGS@
+GLIB_LIBS = @GLIB_LIBS@
+GMODULE_CFLAGS = @GMODULE_CFLAGS@
+GMODULE_LIBS = @GMODULE_LIBS@
+GMSGFMT = @GMSGFMT@
+GMSGFMT_015 = @GMSGFMT_015@
+GREP = @GREP@
+HAVE_MSGFMT = @HAVE_MSGFMT@
+HOST_CC = @HOST_CC@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INTL = @INTL@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBC = @LIBC@
+LIBGC_CPPFLAGS = @LIBGC_CPPFLAGS@
+LIBGC_LIBS = @LIBGC_LIBS@
+LIBGC_STATIC_LIBS = @LIBGC_STATIC_LIBS@
+LIBICONV = @LIBICONV@
+LIBMONO_LA = @LIBMONO_LA@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LLVM_CFLAGS = @LLVM_CFLAGS@
+LLVM_CONFIG = @LLVM_CONFIG@
+LLVM_CXXFLAGS = @LLVM_CXXFLAGS@
+LLVM_LDFLAGS = @LLVM_LDFLAGS@
+LLVM_LIBS = @LLVM_LIBS@
+LN_S = @LN_S@
+LTCOMPILE = @LTCOMPILE@
+LTCXXCOMPILE = @LTCXXCOMPILE@
+LTLIBICONV = @LTLIBICONV@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MKDIR_P = @MKDIR_P@
+MONO_DL_NEED_USCORE = @MONO_DL_NEED_USCORE@
+MONO_NACL_ALIGN_MASK_OFF = @MONO_NACL_ALIGN_MASK_OFF@
+MOONLIGHT_DEFINES = @MOONLIGHT_DEFINES@
+MSGFMT = @MSGFMT@
+MSGFMT_015 = @MSGFMT_015@
+MSGMERGE = @MSGMERGE@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OPROFILE_CFLAGS = @OPROFILE_CFLAGS@
+OPROFILE_LIBS = @OPROFILE_LIBS@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PKG_CONFIG = @PKG_CONFIG@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SGEN_DEFINES = @SGEN_DEFINES@
+SHELL = @SHELL@
+SQLITE = @SQLITE@
+SQLITE3 = @SQLITE3@
+STRIP = @STRIP@
+USE_NLS = @USE_NLS@
+VERSION = @VERSION@
+X11 = @X11@
+XATTR_LIB = @XATTR_LIB@
+XGETTEXT = @XGETTEXT@
+XGETTEXT_015 = @XGETTEXT_015@
+XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@
+XMKMF = @XMKMF@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+arch_target = @arch_target@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+docs_dir = @docs_dir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+export_ldflags = @export_ldflags@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+ikvm_native_dir = @ikvm_native_dir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+libgc_dir = @libgc_dir@
+libgdiplus_loc = @libgdiplus_loc@
+libmono_cflags = @libmono_cflags@
+libmono_ldflags = @libmono_ldflags@
+libsuffix = @libsuffix@
+localedir = @localedir@
+localstatedir = @localstatedir@
+lt_ECHO = @lt_ECHO@
+mandir = @mandir@
+mcs_topdir = @mcs_topdir@
+mcs_topdir_from_srcdir = @mcs_topdir_from_srcdir@
+mkdir_p = @mkdir_p@
+mono_build_root = @mono_build_root@
+mono_cfg_dir = @mono_cfg_dir@
+mono_runtime = @mono_runtime@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+reloc_libdir = @reloc_libdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+subdirs = @subdirs@
+sysconfdir = @sysconfdir@
+target = @target@
+target_alias = @target_alias@
+target_cpu = @target_cpu@
+target_os = @target_os@
+target_vendor = @target_vendor@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+SUBDIRS = 
+monodir = $(sysconfdir)/mono/4.5
+EXTRA_DIST = machine.config \
+	      web.config \
+	      DefaultWsdlHelpGenerator.aspx \
+	      settings.map
+
+mono_DATA = machine.config \
+	      web.config \
+	      DefaultWsdlHelpGenerator.aspx \
+	      settings.map
+
+all: all-recursive
+
+.SUFFIXES:
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__configure_deps)
+	@for dep in $?; do \
+	  case '$(am__configure_deps)' in \
+	    *$$dep*) \
+	      ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+	        && { if test -f $@; then exit 0; else break; fi; }; \
+	      exit 1;; \
+	  esac; \
+	done; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign data/net_4_5/Makefile'; \
+	$(am__cd) $(top_srcdir) && \
+	  $(AUTOMAKE) --foreign data/net_4_5/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+	@case '$?' in \
+	  *config.status*) \
+	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+	  *) \
+	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+	esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+mostlyclean-libtool:
+	-rm -f *.lo
+
+clean-libtool:
+	-rm -rf .libs _libs
+install-monoDATA: $(mono_DATA)
+	@$(NORMAL_INSTALL)
+	test -z "$(monodir)" || $(MKDIR_P) "$(DESTDIR)$(monodir)"
+	@list='$(mono_DATA)'; test -n "$(monodir)" || list=; \
+	for p in $$list; do \
+	  if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+	  echo "$$d$$p"; \
+	done | $(am__base_list) | \
+	while read files; do \
+	  echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(monodir)'"; \
+	  $(INSTALL_DATA) $$files "$(DESTDIR)$(monodir)" || exit $$?; \
+	done
+
+uninstall-monoDATA:
+	@$(NORMAL_UNINSTALL)
+	@list='$(mono_DATA)'; test -n "$(monodir)" || list=; \
+	files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
+	test -n "$$files" || exit 0; \
+	echo " ( cd '$(DESTDIR)$(monodir)' && rm -f" $$files ")"; \
+	cd "$(DESTDIR)$(monodir)" && rm -f $$files
+
+# This directory's subdirectories are mostly independent; you can cd
+# into them and run `make' without going through this Makefile.
+# To change the values of `make' variables: instead of editing Makefiles,
+# (1) if the variable is set in `config.status', edit `config.status'
+#     (which will cause the Makefiles to be regenerated when you run `make');
+# (2) otherwise, pass the desired values on the `make' command line.
+$(RECURSIVE_TARGETS):
+	@fail= failcom='exit 1'; \
+	for f in x $$MAKEFLAGS; do \
+	  case $$f in \
+	    *=* | --[!k]*);; \
+	    *k*) failcom='fail=yes';; \
+	  esac; \
+	done; \
+	dot_seen=no; \
+	target=`echo $@ | sed s/-recursive//`; \
+	list='$(SUBDIRS)'; for subdir in $$list; do \
+	  echo "Making $$target in $$subdir"; \
+	  if test "$$subdir" = "."; then \
+	    dot_seen=yes; \
+	    local_target="$$target-am"; \
+	  else \
+	    local_target="$$target"; \
+	  fi; \
+	  ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
+	  || eval $$failcom; \
+	done; \
+	if test "$$dot_seen" = "no"; then \
+	  $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \
+	fi; test -z "$$fail"
+
+$(RECURSIVE_CLEAN_TARGETS):
+	@fail= failcom='exit 1'; \
+	for f in x $$MAKEFLAGS; do \
+	  case $$f in \
+	    *=* | --[!k]*);; \
+	    *k*) failcom='fail=yes';; \
+	  esac; \
+	done; \
+	dot_seen=no; \
+	case "$@" in \
+	  distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
+	  *) list='$(SUBDIRS)' ;; \
+	esac; \
+	rev=''; for subdir in $$list; do \
+	  if test "$$subdir" = "."; then :; else \
+	    rev="$$subdir $$rev"; \
+	  fi; \
+	done; \
+	rev="$$rev ."; \
+	target=`echo $@ | sed s/-recursive//`; \
+	for subdir in $$rev; do \
+	  echo "Making $$target in $$subdir"; \
+	  if test "$$subdir" = "."; then \
+	    local_target="$$target-am"; \
+	  else \
+	    local_target="$$target"; \
+	  fi; \
+	  ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
+	  || eval $$failcom; \
+	done && test -z "$$fail"
+tags-recursive:
+	list='$(SUBDIRS)'; for subdir in $$list; do \
+	  test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \
+	done
+ctags-recursive:
+	list='$(SUBDIRS)'; for subdir in $$list; do \
+	  test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \
+	done
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+	list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	mkid -fID $$unique
+tags: TAGS
+
+TAGS: tags-recursive $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	set x; \
+	here=`pwd`; \
+	if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \
+	  include_option=--etags-include; \
+	  empty_fix=.; \
+	else \
+	  include_option=--include; \
+	  empty_fix=; \
+	fi; \
+	list='$(SUBDIRS)'; for subdir in $$list; do \
+	  if test "$$subdir" = .; then :; else \
+	    test ! -f $$subdir/TAGS || \
+	      set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \
+	  fi; \
+	done; \
+	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	shift; \
+	if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+	  test -n "$$unique" || unique=$$empty_fix; \
+	  if test $$# -gt 0; then \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      "$$@" $$unique; \
+	  else \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      $$unique; \
+	  fi; \
+	fi
+ctags: CTAGS
+CTAGS: ctags-recursive $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	test -z "$(CTAGS_ARGS)$$unique" \
+	  || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+	     $$unique
+
+GTAGS:
+	here=`$(am__cd) $(top_builddir) && pwd` \
+	  && $(am__cd) $(top_srcdir) \
+	  && gtags -i $(GTAGS_ARGS) "$$here"
+
+distclean-tags:
+	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	list='$(DISTFILES)'; \
+	  dist_files=`for file in $$list; do echo $$file; done | \
+	  sed -e "s|^$$srcdirstrip/||;t" \
+	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+	case $$dist_files in \
+	  */*) $(MKDIR_P) `echo "$$dist_files" | \
+			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+			   sort -u` ;; \
+	esac; \
+	for file in $$dist_files; do \
+	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+	  if test -d $$d/$$file; then \
+	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+	    if test -d "$(distdir)/$$file"; then \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+	  else \
+	    test -f "$(distdir)/$$file" \
+	    || cp -p $$d/$$file "$(distdir)/$$file" \
+	    || exit 1; \
+	  fi; \
+	done
+	@list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
+	  if test "$$subdir" = .; then :; else \
+	    test -d "$(distdir)/$$subdir" \
+	    || $(MKDIR_P) "$(distdir)/$$subdir" \
+	    || exit 1; \
+	  fi; \
+	done
+	@list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
+	  if test "$$subdir" = .; then :; else \
+	    dir1=$$subdir; dir2="$(distdir)/$$subdir"; \
+	    $(am__relativize); \
+	    new_distdir=$$reldir; \
+	    dir1=$$subdir; dir2="$(top_distdir)"; \
+	    $(am__relativize); \
+	    new_top_distdir=$$reldir; \
+	    echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \
+	    echo "     am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \
+	    ($(am__cd) $$subdir && \
+	      $(MAKE) $(AM_MAKEFLAGS) \
+	        top_distdir="$$new_top_distdir" \
+	        distdir="$$new_distdir" \
+		am__remove_distdir=: \
+		am__skip_length_check=: \
+		am__skip_mode_fix=: \
+	        distdir) \
+	      || exit 1; \
+	  fi; \
+	done
+check-am: all-am
+check: check-recursive
+all-am: Makefile $(DATA)
+installdirs: installdirs-recursive
+installdirs-am:
+	for dir in "$(DESTDIR)$(monodir)"; do \
+	  test -z "$$dir" || $(MKDIR_P) "$$dir"; \
+	done
+install: install-recursive
+install-exec: install-exec-recursive
+install-data: install-data-recursive
+uninstall: uninstall-recursive
+
+install-am: all-am
+	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-recursive
+install-strip:
+	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	  `test -z '$(STRIP)' || \
+	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+	@echo "This command is intended for maintainers to use"
+	@echo "it deletes files that may require special tools to rebuild."
+clean: clean-recursive
+
+clean-am: clean-generic clean-libtool mostlyclean-am
+
+distclean: distclean-recursive
+	-rm -f Makefile
+distclean-am: clean-am distclean-generic distclean-tags
+
+dvi: dvi-recursive
+
+dvi-am:
+
+html: html-recursive
+
+html-am:
+
+info: info-recursive
+
+info-am:
+
+install-data-am: install-monoDATA
+
+install-dvi: install-dvi-recursive
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-recursive
+
+install-html-am:
+
+install-info: install-info-recursive
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-recursive
+
+install-pdf-am:
+
+install-ps: install-ps-recursive
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-recursive
+	-rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-recursive
+
+mostlyclean-am: mostlyclean-generic mostlyclean-libtool
+
+pdf: pdf-recursive
+
+pdf-am:
+
+ps: ps-recursive
+
+ps-am:
+
+uninstall-am: uninstall-monoDATA
+
+.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) ctags-recursive \
+	install-am install-strip tags-recursive
+
+.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \
+	all all-am check check-am clean clean-generic clean-libtool \
+	ctags ctags-recursive distclean distclean-generic \
+	distclean-libtool distclean-tags distdir dvi dvi-am html \
+	html-am info info-am install install-am install-data \
+	install-data-am install-dvi install-dvi-am install-exec \
+	install-exec-am install-html install-html-am install-info \
+	install-info-am install-man install-monoDATA install-pdf \
+	install-pdf-am install-ps install-ps-am install-strip \
+	installcheck installcheck-am installdirs installdirs-am \
+	maintainer-clean maintainer-clean-generic mostlyclean \
+	mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
+	tags tags-recursive uninstall uninstall-am uninstall-monoDATA
+
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/data/net_4_5/machine.config b/data/net_4_5/machine.config
new file mode 100644
index 0000000..b98a4d3
--- /dev/null
+++ b/data/net_4_5/machine.config
@@ -0,0 +1,310 @@
+<?xml version="1.0" encoding="utf-8"?>
+
+<configuration>
+
+	<configSections>
+		<section name="configProtectedData" type="System.Configuration.ProtectedConfigurationSection, System.Configuration, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
+		<section name="appSettings" type="System.Configuration.AppSettingsSection, System.Configuration, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
+		<section name="connectionStrings" type="System.Configuration.ConnectionStringsSection, System.Configuration, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
+		<section name="mscorlib" type="System.Configuration.IgnoreSection, System.Configuration, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" allowLocation="false"/>
+		<section name="runtime" type="System.Configuration.IgnoreSection, System.Configuration, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" allowLocation="false"/>
+		<section name="assemblyBinding"  type="System.Configuration.IgnoreSection, System.Configuration, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" allowLocation="false" />
+		<section name="satelliteassemblies" type="System.Configuration.IgnoreSection, System.Configuration, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" allowLocation="false" />
+		<section name="startup" type="System.Configuration.IgnoreSection, System.Configuration, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" allowLocation="false"/>
+		<section name="system.codedom" type="System.CodeDom.Compiler.CodeDomConfigurationHandler, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
+		<section name="system.data" type="System.Data.Common.DbProviderFactoriesConfigurationHandler, System.Data, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
+		<section name="system.diagnostics" type="System.Diagnostics.DiagnosticsConfigurationHandler, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
+		<section name="system.runtime.remoting" type="System.Configuration.IgnoreSection, System.Configuration, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" allowLocation="false"/>
+		<section name="system.windows.forms" type="System.Windows.Forms.WindowsFormsSection, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
+		<section name="windows" type="System.Configuration.IgnoreSection, System.Configuration, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" allowLocation="false" />
+		<section name="strongNames" type="System.Configuration.IgnoreSection, System.Configuration, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" allowLocation="false"/>
+		<sectionGroup name="system.web" type="System.Web.Configuration.SystemWebSectionGroup, System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
+			<section name="anonymousIdentification" type="System.Web.Configuration.AnonymousIdentificationSection, System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" allowDefinition="MachineToApplication"/>
+			<section name="authentication" type="System.Web.Configuration.AuthenticationSection, System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" allowDefinition="MachineToApplication"/>
+			<section name="authorization" type="System.Web.Configuration.AuthorizationSection, System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
+			<section name="browserCaps" type="System.Configuration.IgnoreSection, System.Configuration, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
+			<section name="clientTarget" type="System.Web.Configuration.ClientTargetSection, System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
+			<section name="compilation" type="System.Web.Configuration.CompilationSection, System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
+			<section name="customErrors" type="System.Web.Configuration.CustomErrorsSection, System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
+			<section name="deployment" type="System.Web.Configuration.DeploymentSection, System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" allowDefinition="MachineOnly" />
+			<section name="globalization" type="System.Web.Configuration.GlobalizationSection, System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
+			<section name="healthMonitoring" type="System.Web.Configuration.HealthMonitoringSection, System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" allowDefinition="MachineToApplication"/>
+			<section name="hostingEnvironment" type="System.Web.Configuration.HostingEnvironmentSection, System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" allowDefinition="MachineToApplication" />
+			<section name="httpCookies" type="System.Web.Configuration.HttpCookiesSection, System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
+			<section name="httpHandlers" type="System.Web.Configuration.HttpHandlersSection, System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
+			<section name="httpModules" type="System.Web.Configuration.HttpModulesSection, System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
+			<section name="httpRuntime" type="System.Web.Configuration.HttpRuntimeSection, System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
+			<section name="identity" type="System.Web.Configuration.IdentitySection, System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
+			<section name="machineKey" type="System.Web.Configuration.MachineKeySection, System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
+			<section name="membership" type="System.Web.Configuration.MembershipSection, System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
+			<section name="mobileControls" type="System.Configuration.IgnoreSection, System.Configuration, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
+                        <section name="deviceFilters" type="System.Configuration.IgnoreSection, System.Configuration, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
+			<section name="pages" type="System.Web.Configuration.PagesSection, System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
+			<section name="processModel" type="System.Web.Configuration.ProcessModelSection, System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" allowDefinition="MachineOnly" allowLocation="false" />
+			<section name="profile" type="System.Web.Configuration.ProfileSection, System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" allowDefinition="MachineToApplication"/>
+			<section name="roleManager" type="System.Web.Configuration.RoleManagerSection, System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" allowDefinition="MachineToApplication"/>
+			<section name="securityPolicy" type="System.Web.Configuration.SecurityPolicySection, System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" allowDefinition="MachineToApplication" />
+			<section name="sessionPageState" type="System.Web.Configuration.SessionPageStateSection, System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
+			<section name="sessionState" type="System.Web.Configuration.SessionStateSection, System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" allowDefinition="MachineToApplication"/>
+			<section name="siteMap" type="System.Web.Configuration.SiteMapSection, System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" allowDefinition="MachineToApplication"/>
+			<section name="trace" type="System.Web.Configuration.TraceSection, System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
+			<section name="trust" type="System.Web.Configuration.TrustSection, System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" allowDefinition="MachineToApplication" />
+			<section name="urlMappings" type="System.Web.Configuration.UrlMappingsSection, System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" allowDefinition="MachineToApplication"/>
+			<section name="webControls" type="System.Web.Configuration.WebControlsSection, System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
+			<section name="webParts" type="System.Web.Configuration.WebPartsSection, System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
+			<section name="webServices" type="System.Web.Services.Configuration.WebServicesSection, System.Web.Services, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
+			<section name="xhtmlConformance" type="System.Web.Configuration.XhtmlConformanceSection, System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
+			<sectionGroup name="caching" type="System.Web.Configuration.SystemWebCachingSectionGroup, System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
+				<section name="cache" type="System.Web.Configuration.CacheSection, System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" allowDefinition="MachineToApplication"/>
+				<section name="outputCache" type="System.Web.Configuration.OutputCacheSection, System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" allowDefinition="MachineToApplication"/>
+				<section name="outputCacheSettings" type="System.Web.Configuration.OutputCacheSettingsSection, System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" allowDefinition="MachineToApplication"/>
+				<section name="sqlCacheDependency" type="System.Web.Configuration.OutputCacheSettingsSection, System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" allowDefinition="MachineToApplication"/>
+			</sectionGroup>
+			<section name="monoSettings" type="System.Web.Configuration.MonoSettingsSection, System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
+		</sectionGroup>
+		<sectionGroup name="system.web.extensions" type="System.Web.Configuration.SystemWebExtensionsSectionGroup, System.Web.Extensions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35">
+			<sectionGroup name="scripting" type="System.Web.Configuration.ScriptingSectionGroup, System.Web.Extensions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35">
+				<section name="scriptResourceHandler" type="System.Web.Configuration.ScriptingScriptResourceHandlerSection, System.Web.Extensions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" requirePermission="false" allowDefinition="MachineToApplication"/>
+				<sectionGroup name="webServices" type="System.Web.Configuration.ScriptingWebServicesSectionGroup, System.Web.Extensions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35">
+					<section name="jsonSerialization" type="System.Web.Configuration.ScriptingJsonSerializationSection, System.Web.Extensions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" requirePermission="false" allowDefinition="Everywhere"/>
+					<section name="profileService" type="System.Web.Configuration.ScriptingProfileServiceSection, System.Web.Extensions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" requirePermission="false" allowDefinition="MachineToApplication"/>
+					<section name="authenticationService" type="System.Web.Configuration.ScriptingAuthenticationServiceSection, System.Web.Extensions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" requirePermission="false" allowDefinition="MachineToApplication"/>
+					<section name="roleService" type="System.Web.Configuration.ScriptingRoleServiceSection, System.Web.Extensions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" requirePermission="false" allowDefinition="MachineToApplication"/>
+				</sectionGroup>
+			</sectionGroup>
+		</sectionGroup>
+		<sectionGroup name="system.net" type="System.Net.Configuration.NetSectionGroup, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+			<section name="authenticationModules" type="System.Net.Configuration.AuthenticationModulesSection, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
+			<section name="connectionManagement" type="System.Net.Configuration.ConnectionManagementSection, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
+			<section name="defaultProxy" type="System.Net.Configuration.DefaultProxySection, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
+			<sectionGroup name="mailSettings" type="System.Net.Configuration.MailSettingsSectionGroup, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+				<section name="smtp" type="System.Net.Configuration.SmtpSection, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
+			</sectionGroup>
+			<section name="requestCaching" type="System.Net.Configuration.RequestCachingSection, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
+			<section name="settings" type="System.Net.Configuration.SettingsSection, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
+			<section name="webRequestModules" type="System.Net.Configuration.WebRequestModulesSection, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
+		</sectionGroup>
+		<section name="system.drawing" type="System.Configuration.NameValueSectionHandler, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
+		<sectionGroup name="system.serviceModel" type="System.ServiceModel.Configuration.ServiceModelSectionGroup, System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+			<section name="behaviors" type="System.ServiceModel.Configuration.BehaviorsSection, System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
+			<section name="bindings" type="System.ServiceModel.Configuration.BindingsSection, System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
+			<section name="client" type="System.ServiceModel.Configuration.ClientSection, System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
+			<section name="commonBehaviors" type="System.ServiceModel.Configuration.CommonBehaviorsSection, System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
+			<section name="diagnostics" type="System.ServiceModel.Configuration.DiagnosticSection, System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
+			<section name="extensions" type="System.ServiceModel.Configuration.ExtensionsSection, System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
+			<section name="serviceHostingEnvironment" type="System.ServiceModel.Configuration.ServiceHostingEnvironmentSection, System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
+			<section name="services" type="System.ServiceModel.Configuration.ServicesSection, System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
+			<section name="standardEndpoints" type="System.ServiceModel.Configuration.StandardEndpointsSection, System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"/>
+			<section name="routing" type="System.ServiceModel.Routing.Configuration.RoutingSection, System.ServiceModel.Routing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
+			<section name="protocolMapping" type="System.ServiceModel.Configuration.ProtocolMappingSection, System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"/>
+		</sectionGroup>
+		<sectionGroup name="system.transactions" type="System.Transactions.Configuration.TransactionsSectionGroup, System.Transactions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089, Custom=null">
+			<section name="defaultSettings" type="System.Transactions.Configuration.DefaultSettingsSection, System.Transactions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089, Custom=null"/>
+			<section name="machineSettings" type="System.Transactions.Configuration.MachineSettingsSection, System.Transactions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089, Custom=null" allowDefinition="MachineOnly" allowExeDefinition="MachineOnly"/>
+		</sectionGroup>
+		<section name="system.webServer" type="System.Configuration.IgnoreSection, System.Configuration, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
+		<section name="uri" type="System.Configuration.UriSection, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
+		<sectionGroup name="system.runtime.caching" type="System.Runtime.Caching.Configuration.CachingSectionGroup, System.Runtime.Caching, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
+		  <section name="memoryCache" type="System.Runtime.Caching.Configuration.MemoryCacheSection, System.Runtime.Caching, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" allowDefinition="MachineToApplication"/>
+                </sectionGroup>
+	</configSections>
+
+	<connectionStrings>
+		<add name="LocalSqlServer" connectionString="data source=.\SQLEXPRESS;Integrated Security=SSPI;AttachDBFilename=|DataDirectory|aspnetdb.mdf;User Instance=true" providerName="System.Data.SqlClient"/>
+		<add name="LocalSqliteServer" connectionString="Data Source=|DataDirectory|/aspnetdb.sqlite;version=3" providerName="Mono.Data.Sqlite"/>
+	</connectionStrings>
+	
+	<configProtectedData defaultProvider="RsaProtectedConfigurationProvider">
+		<providers>
+			<add name="RsaProtectedConfigurationProvider" type="System.Configuration.RsaProtectedConfigurationProvider, System.Configuration, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"
+                             description="" keyContainerName="MonoFrameworkConfigurationKey" cspProviderName="" useMachineContainer="true" useOAEP="false" />
+			<add name="DataProtectionConfigurationProvider" type="System.Configuration.DpapiProtectedConfigurationProvider, System.Configuration, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"
+                             description="" useMachineProtection="true" keyEntropy="" />
+		</providers>
+	</configProtectedData>
+
+	<system.net>
+		<authenticationModules>
+			<add type="System.Net.BasicClient, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
+			<add type="System.Net.DigestClient, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
+			<add type="System.Net.NtlmClient, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
+		</authenticationModules>
+		<webRequestModules>
+			<add prefix="http" type="System.Net.HttpRequestCreator, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
+			<add prefix="https" type="System.Net.HttpRequestCreator, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
+			<add prefix="file" type="System.Net.FileWebRequestCreator, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
+			<add prefix="ftp" type="System.Net.FtpRequestCreator, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
+		</webRequestModules>
+		<settings>
+			<ipv6 enabled="false"/>
+		</settings>
+	</system.net>
+	
+	<system.runtime.remoting>
+		<application>
+			<channels>
+				<channel ref="http client" displayName="http client (delay loaded)" delayLoadAsClientChannel="true" />
+				<channel ref="tcp client" displayName="tcp client (delay loaded)" delayLoadAsClientChannel="true" />
+				<channel ref="ipc client" displayName="ipc client (delay loaded)" delayLoadAsClientChannel="true" />
+			</channels>
+		</application>
+		<channels>
+			<channel id="http" type="System.Runtime.Remoting.Channels.Http.HttpChannel, System.Runtime.Remoting, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
+			<channel id="http client" type="System.Runtime.Remoting.Channels.Http.HttpClientChannel, System.Runtime.Remoting, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
+			<channel id="http server" type="System.Runtime.Remoting.Channels.Http.HttpServerChannel, System.Runtime.Remoting, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
+			<channel id="tcp" type="System.Runtime.Remoting.Channels.Tcp.TcpChannel, System.Runtime.Remoting, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
+			<channel id="tcp client" type="System.Runtime.Remoting.Channels.Tcp.TcpClientChannel, System.Runtime.Remoting, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
+			<channel id="tcp server" type="System.Runtime.Remoting.Channels.Tcp.TcpServerChannel, System.Runtime.Remoting, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
+			<channel id="ipc" type="System.Runtime.Remoting.Channels.Ipc.IpcChannel, System.Runtime.Remoting, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
+			<channel id="ipc client" type="System.Runtime.Remoting.Channels.Ipc.IpcClientChannel, System.Runtime.Remoting, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
+			<channel id="ipc server" type="System.Runtime.Remoting.Channels.Ipc.IpcServerChannel, System.Runtime.Remoting, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
+		</channels>
+			<channelSinkProviders>
+				<clientProviders>
+					<formatter id="soap" type="System.Runtime.Remoting.Channels.SoapClientFormatterSinkProvider, System.Runtime.Remoting, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
+					<formatter id="binary" type="System.Runtime.Remoting.Channels.BinaryClientFormatterSinkProvider, System.Runtime.Remoting, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
+				</clientProviders>
+				<serverProviders>
+					<formatter id="soap" type="System.Runtime.Remoting.Channels.SoapServerFormatterSinkProvider, System.Runtime.Remoting, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
+					<formatter id="binary" type="System.Runtime.Remoting.Channels.BinaryServerFormatterSinkProvider, System.Runtime.Remoting, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
+					<provider id="wsdl" type="System.Runtime.Remoting.MetadataServices.SdlChannelSinkProvider, System.Runtime.Remoting, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
+				</serverProviders>
+			</channelSinkProviders>
+	</system.runtime.remoting>
+	
+	<appSettings>
+	<!--<add key="yourkey" value="your value" /> -->
+	<!--<remove key="a key defined higher in the hierarchy" /> -->
+	<!--<clear/> Removes all defined settings -->
+	</appSettings>
+	<system.diagnostics>
+		<trace autoflush="false" indentsize="4" />
+	</system.diagnostics>
+        <system.drawing>
+        </system.drawing>
+
+	<system.data>
+	  <DbProviderFactories>
+	    <add name="Mono Sqlite Data Provider"  invariant="Mono.Data.SqliteClient" 
+		 description="Mono Framework Data Provider for SQLite (old version)" 
+		 type="Mono.Data.SqliteClient.SqliteFactory, Mono.Data.SqliteClient, Version=4.0.0.0, Culture=neutral, PublicKeyToken=0738eb9f132ed756"/>
+	    <add name="Mono Sqlite Provider"  invariant="Mono.Data.Sqlite" 
+		 description="Mono Framework Data Provider for SQLite (new version)"
+		 type="Mono.Data.Sqlite.SqliteFactory, Mono.Data.Sqlite, Version=4.0.0.0, Culture=neutral, PublicKeyToken=0738eb9f132ed756"/>
+	    <add name="Odbc Data Provider"         invariant="System.Data.Odbc"         
+		 description=".Net Framework Data Provider for Odbc"      
+		 type="System.Data.Odbc.OdbcFactory, System.Data, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"/>
+            <add name="OleDb Data Provider"        invariant="System.Data.OleDb"        
+		 description=".Net Framework Data Provider for OleDb"     
+		 type="System.Data.OleDb.OleDbFactory, System.Data, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"/>
+            <add name="OracleClient Data Provider" invariant="System.Data.OracleClient" 
+		 description=".Net Framework Data Provider for Oracle"    
+		 type="System.Data.OracleClient.OracleClientFactory, System.Data.OracleClient, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"/>
+            <add name="SqlClient Data Provider"    invariant="System.Data.SqlClient"    
+		 description=".Net Framework Data Provider for SqlServer" 
+		 type="System.Data.SqlClient.SqlClientFactory, System.Data, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"/>
+            <add name="Sybase Data Provider"    invariant="Mono.Data.SybaseClient"    
+		 description=".Net Framework Data Provider for Sybase" 
+		 type="Mono.Data.SybaseClient.SybaseClientFactory, Mono.Data.SybaseClient, Version=4.0.0.0, Culture=neutral, PublicKeyToken=0738eb9f132ed756"/>
+	  </DbProviderFactories>
+	</system.data>
+
+	<mscorlib>
+		<cryptographySettings>
+			<cryptoNameMapping>
+				<cryptoClasses>
+					<cryptoClass monoMD2="Mono.Security.Cryptography.MD2Managed, Mono.Security, Version=4.0.0.0, Culture=neutral, PublicKeyToken=0738eb9f132ed756" />
+					<cryptoClass monoMD4="Mono.Security.Cryptography.MD4Managed, Mono.Security, Version=4.0.0.0, Culture=neutral, PublicKeyToken=0738eb9f132ed756" />
+				</cryptoClasses>
+				<nameEntry name="MD2" class="monoMD2" />
+				<nameEntry name="MD4" class="monoMD4" />
+			</cryptoNameMapping>
+			<oidMap>
+				<oidEntry OID="1.2.840.113549.2.2" name="MD2" />
+				<oidEntry OID="1.2.840.113549.2.2" name="Mono.Security.Cryptography.MD2Managed" />
+				<oidEntry OID="1.2.840.113549.2.4" name="MD4" />
+				<oidEntry OID="1.2.840.113549.2.4" name="Mono.Security.Cryptography.MD4Managed" />
+			</oidMap>
+		</cryptographySettings>
+	</mscorlib>
+
+	<strongNames>
+		<pubTokenMapping>
+			<!-- ECMA key -->
+			<map Token="b77a5c561934e089" PublicKey="002400000480000094000000060200000024000052534131000400000100010079159977d2d03a8e6bea7a2e74e8d1afcc93e8851974952bb480a12c9134474d04062447c37e0e68c080536fcf3c3fbe2ff9c979ce998475e506e8ce82dd5b0f350dc10e93bf2eeecf874b24770c5081dbea7447fddafa277b22de47d6ffea449674a4f9fccf84d15069089380284dbdd35f46cdff12a1bd78e4ef0065d016df" />
+			<!-- Microsoft (final) key -->
+			<map Token="b03f5f7f11d50a3a" PublicKey="002400000480000094000000060200000024000052534131000400000100010079159977d2d03a8e6bea7a2e74e8d1afcc93e8851974952bb480a12c9134474d04062447c37e0e68c080536fcf3c3fbe2ff9c979ce998475e506e8ce82dd5b0f350dc10e93bf2eeecf874b24770c5081dbea7447fddafa277b22de47d6ffea449674a4f9fccf84d15069089380284dbdd35f46cdff12a1bd78e4ef0065d016df" />
+			<!-- Microsoft (Web Service Enhancement) key -->
+			<map Token="31bf3856ad364e35" PublicKey="002400000480000094000000060200000024000052534131000400000100010079159977d2d03a8e6bea7a2e74e8d1afcc93e8851974952bb480a12c9134474d04062447c37e0e68c080536fcf3c3fbe2ff9c979ce998475e506e8ce82dd5b0f350dc10e93bf2eeecf874b24770c5081dbea7447fddafa277b22de47d6ffea449674a4f9fccf84d15069089380284dbdd35f46cdff12a1bd78e4ef0065d016df" />
+			<!-- IBM (DB2 Data Provider) key -->
+			<map Token="7c307b91aa13d208" PublicKey="002400000480000094000000060200000024000052534131000400000100010079159977d2d03a8e6bea7a2e74e8d1afcc93e8851974952bb480a12c9134474d04062447c37e0e68c080536fcf3c3fbe2ff9c979ce998475e506e8ce82dd5b0f350dc10e93bf2eeecf874b24770c5081dbea7447fddafa277b22de47d6ffea449674a4f9fccf84d15069089380284dbdd35f46cdff12a1bd78e4ef0065d016df" />
+			<!-- Silverlight 2.0 key -->
+			<map Token="7cec85d7bea7798e" PublicKey="002400000480000094000000060200000024000052534131000400000100010079159977d2d03a8e6bea7a2e74e8d1afcc93e8851974952bb480a12c9134474d04062447c37e0e68c080536fcf3c3fbe2ff9c979ce998475e506e8ce82dd5b0f350dc10e93bf2eeecf874b24770c5081dbea7447fddafa277b22de47d6ffea449674a4f9fccf84d15069089380284dbdd35f46cdff12a1bd78e4ef0065d016df" />
+			<!-- XNA Framework key -->                                                            
+			<map Token="6d5c3888ef60e27d" PublicKey="0024000004800000940000000602000000240000525341310004000001000100f9a2641bac9847900d92a33d652ccc4e8b529360f908e7af53e57008b2a9a1938c32a160d47f795a23590557608d2c8d0c0e8846a052d070f9298281b8185343dbe5b479bd52de256f73c2a943e1a8a42065b5c918622dc14b1c0151dbd94d9a4543e7cd03e536b1b1d2d6d99af535d227ab9bdac76af9312a21d457bdf817e6" />
+		</pubTokenMapping>
+	</strongNames>
+
+	<system.web>
+		<webServices>
+			<protocols>
+				<add name="HttpSoap"/>
+				<add name="HttpSoap12"/>
+				<add name="HttpPost"/>
+				<add name="HttpGet"/>
+				<add name="Documentation"/>
+			</protocols>
+			<conformanceWarnings>
+				<add name="BasicProfile1_1"/>
+			</conformanceWarnings>
+			<wsdlHelpGenerator href="DefaultWsdlHelpGenerator.aspx" />
+		</webServices>
+
+		<membership>
+			<providers>
+				<add name="AspNetSqlMembershipProvider" type="System.Web.Security.SqlMembershipProvider, System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" connectionStringName="LocalSqlServer" enablePasswordRetrieval="false" enablePasswordReset="true" requiresQuestionAndAnswer="true" applicationName="/" requiresUniqueEmail="false" passwordFormat="Hashed" maxInvalidPasswordAttempts="5" minRequiredPasswordLength="7" minRequiredNonalphanumericCharacters="1" passwordAttemptWindow="10" passwordStrengthRegularExpression=""/>
+				<!-- <add name="AspNetSqlMembershipProvider" type="Mainsoft.Web.Security.GenericMembershipProvider, Mainsoft.Web.Security" applicationName="/" connectionStringName="LocalSqlServer" /> -->
+			</providers>
+		</membership>
+
+		<roleManager>
+			<providers>
+				<add name="AspNetSqlRoleProvider" type="System.Web.Security.SqlRoleProvider, System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" applicationName="/" connectionStringName="LocalSqlServer" />
+				<!-- <add name="AspNetSqlRoleProvider" type="Mainsoft.Web.Security.GenericRoleProvider, Mainsoft.Web.Security" applicationName="/" connectionStringName="LocalSqlServer" /> -->
+			</providers>
+		</roleManager>
+
+		<profile>
+        		<providers>
+            		    <add name="AspNetSqlProfileProvider" connectionStringName="LocalSqlServer" applicationName="/" type="System.Web.Profile.SqlProfileProvider, System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
+		        </providers>
+    		</profile>
+	</system.web>
+
+
+	<system.serviceModel>
+		<extensions>
+			<behaviorExtensions>
+				<add name="enableWebScript" type="System.ServiceModel.Configuration.WebScriptEnablingElement, System.ServiceModel.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
+				<add name="webHttp" type="System.ServiceModel.Configuration.WebHttpElement, System.ServiceModel.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
+			</behaviorExtensions>
+			<bindingElementExtensions>
+				<add name="webMessageEncoding" type="System.ServiceModel.Configuration.WebMessageEncodingElement, System.ServiceModel.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
+			</bindingElementExtensions>
+			<bindingExtensions>
+				<add name="webHttpBinding" type="System.ServiceModel.Configuration.WebHttpBindingCollectionElement, System.ServiceModel.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
+			</bindingExtensions>
+			<endpointExtensions>
+				<add name="dynamicEndpoint" type="System.ServiceModel.Discovery.Configuration.DynamicEndpointCollectionElement, System.ServiceModel.Discovery, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
+				<add name="discoveryEndpoint" type="System.ServiceModel.Discovery.Configuration.DiscoveryEndpointCollectionElement, System.ServiceModel.Discovery, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
+				<add name="udpDiscoveryEndpoint" type="System.ServiceModel.Discovery.Configuration.UdpDiscoveryEndpointCollectionElement, System.ServiceModel.Discovery, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
+				<add name="announcementEndpoint" type="System.ServiceModel.Discovery.Configuration.AnnouncementEndpointCollectionElement, System.ServiceModel.Discovery, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
+				<add name="udpAnnouncementEndpoint" type="System.ServiceModel.Discovery.Configuration.UdpAnnouncementEndpointCollectionElement, System.ServiceModel.Discovery, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
+				<add name="webHttpEndpoint" type="System.ServiceModel.Configuration.WebHttpEndpointCollectionElement, System.ServiceModel.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
+				<add name="webScriptEndpoint" type="System.ServiceModel.Configuration.WebScriptEndpointCollectionElement, System.ServiceModel.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
+			</endpointExtensions>
+		</extensions>
+	</system.serviceModel>
+</configuration>
+
+
diff --git a/data/net_4_0/settings.map b/data/net_4_5/settings.map
similarity index 100%
copy from data/net_4_0/settings.map
copy to data/net_4_5/settings.map
diff --git a/data/net_4_5/web.config b/data/net_4_5/web.config
new file mode 100644
index 0000000..324c529
--- /dev/null
+++ b/data/net_4_5/web.config
@@ -0,0 +1,253 @@
+<?xml version="1.0" encoding="utf-8"?>
+
+<configuration>
+
+  <system.codedom>
+        <compilers>
+            <compiler language="c#;cs;csharp" extension=".cs" warningLevel="4" type="Microsoft.CSharp.CSharpCodeProvider, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+                <providerOption name="CompilerVersion" value="v4.0"/>
+                <providerOption name="WarnAsError" value="false"/>
+            </compiler>
+            <compiler language="vb;vbs;visualbasic;vbscript" extension=".vb" warningLevel="4" type="Microsoft.VisualBasic.VBCodeProvider, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+                <providerOption name="CompilerVersion" value="v4.0"/>
+                <providerOption name="OptionInfer" value="true"/>
+                <providerOption name="WarnAsError" value="false"/>
+            </compiler>
+        </compilers>
+  </system.codedom>
+
+	<system.web>
+		<monoSettings>
+			<compilersCompatibility>
+				<compiler language="c#;cs;csharp" extension=".cs" compilerOptions="/nowarn:0169"
+					  type="Microsoft.CSharp.CSharpCodeProvider, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
+			</compilersCompatibility>
+		</monoSettings>
+		
+		<authorization>
+			<allow users="*" />
+		</authorization>
+		<httpHandlers>
+		  <add path="trace.axd" verb="*" type="System.Web.Handlers.TraceHandler" validate="True" />
+		  <add path="WebResource.axd" verb="GET" type="System.Web.Handlers.AssemblyResourceLoader" validate="True" />
+		  <add verb="*" path="*_AppService.axd" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" validate="False" />
+		  <add verb="GET,HEAD" path="ScriptResource.axd" type="System.Web.Handlers.ScriptResourceHandler, System.Web.Extensions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" validate="False"/>
+		  <add path="*.axd" verb="*" type="System.Web.HttpNotFoundHandler" validate="True" />
+		  <add path="*.aspx" verb="*" type="System.Web.UI.PageHandlerFactory" validate="True" />
+		  <add path="*.ashx" verb="*" type="System.Web.UI.SimpleHandlerFactory" validate="True" />
+		  <add path="*.asmx" verb="*" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" validate="False" />
+		  <add path="*.rem" verb="*" type="System.Runtime.Remoting.Channels.Http.HttpRemotingHandlerFactory, System.Runtime.Remoting, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" validate="False" />
+		  <add path="*.soap" verb="*" type="System.Runtime.Remoting.Channels.Http.HttpRemotingHandlerFactory, System.Runtime.Remoting, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" validate="False" />
+		  <add path="*.asax" verb="*" type="System.Web.HttpForbiddenHandler" validate="True" />
+		  <add path="*.ascx" verb="*" type="System.Web.HttpForbiddenHandler" validate="True" />
+		  <add path="*.master" verb="*" type="System.Web.HttpForbiddenHandler" validate="True" />
+		  <add path="*.skin" verb="*" type="System.Web.HttpForbiddenHandler" validate="True" />
+		  <add path="*.browser" verb="*" type="System.Web.HttpForbiddenHandler" validate="True" />
+		  <add path="*.sitemap" verb="*" type="System.Web.HttpForbiddenHandler" validate="True" />
+		  <add path="*.dll.config" verb="GET,HEAD" type="System.Web.StaticFileHandler" validate="True" />
+		  <add path="*.exe.config" verb="GET,HEAD" type="System.Web.StaticFileHandler" validate="True" />
+		  <add path="*.config" verb="*" type="System.Web.HttpForbiddenHandler" validate="True" />
+		  <add path="*.cs" verb="*" type="System.Web.HttpForbiddenHandler" validate="True" />
+		  <add path="*.csproj" verb="*" type="System.Web.HttpForbiddenHandler" validate="True" />
+		  <add path="*.vb" verb="*" type="System.Web.HttpForbiddenHandler" validate="True" />
+		  <add path="*.vbproj" verb="*" type="System.Web.HttpForbiddenHandler" validate="True" />
+		  <add path="*.webinfo" verb="*" type="System.Web.HttpForbiddenHandler" validate="True" />
+		  <add path="*.licx" verb="*" type="System.Web.HttpForbiddenHandler" validate="True" />
+		  <add path="*.resx" verb="*" type="System.Web.HttpForbiddenHandler" validate="True" />
+		  <add path="*.resources" verb="*" type="System.Web.HttpForbiddenHandler" validate="True" />
+		  <add path="*.mdb" verb="*" type="System.Web.HttpForbiddenHandler" validate="True" />
+		  <add path="*.vjsproj" verb="*" type="System.Web.HttpForbiddenHandler" validate="True" />
+		  <add path="*.java" verb="*" type="System.Web.HttpForbiddenHandler" validate="True" />
+		  <add path="*.jsl" verb="*" type="System.Web.HttpForbiddenHandler" validate="True" />
+		  <add path="*.ldb" verb="*" type="System.Web.HttpForbiddenHandler"  validate="True" />
+		  <add path="*.ad" verb="*" type="System.Web.HttpForbiddenHandler" validate="True" />
+		  <add path="*.dd" verb="*" type="System.Web.HttpForbiddenHandler" validate="True" />
+		  <add path="*.ldd" verb="*" type="System.Web.HttpForbiddenHandler" validate="True" />
+		  <add path="*.sd" verb="*" type="System.Web.HttpForbiddenHandler" validate="True" />
+		  <add path="*.cd" verb="*" type="System.Web.HttpForbiddenHandler" validate="True" />
+		  <add path="*.adprototype" verb="*" type="System.Web.HttpForbiddenHandler" validate="True" />
+		  <add path="*.lddprototype" verb="*" type="System.Web.HttpForbiddenHandler" validate="True" />
+		  <add path="*.sdm" verb="*" type="System.Web.HttpForbiddenHandler" validate="True" />
+		  <add path="*.sdmDocument" verb="*" type="System.Web.HttpForbiddenHandler" validate="True" />
+		  <add path="*.mdf" verb="*" type="System.Web.HttpForbiddenHandler" validate="True" />
+		  <add path="*.ldf" verb="*" type="System.Web.HttpForbiddenHandler" validate="True" />
+		  <add path="*.exclude" verb="*" type="System.Web.HttpForbiddenHandler" validate="True" />
+		  <add path="*.refresh" verb="*" type="System.Web.HttpForbiddenHandler" validate="True" />
+		  <!--
+		  <add path="*.svc" verb="*" type="System.ServiceModel.Activation.HttpHandler, System.ServiceModel.Activation, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" validate="False"/>
+		  -->
+                  <add verb="*" path="*.svc" type="System.ServiceModel.Channels.SvcHttpHandlerFactory, System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
+		  <add path="*.rules" verb="*" type="System.Web.HttpForbiddenHandler" validate="True"/>
+		  <!--
+		  <add path="*.xoml" verb="*" type="System.ServiceModel.Activation.HttpHandler, System.ServiceModel.Activation, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" validate="False"/>
+		  <add path="*.xamlx" verb="*" type="System.Xaml.Hosting.XamlHttpHandlerFactory, System.Xaml.Hosting, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" validate="False"/>
+		  -->
+		  <add path="*" verb="GET,HEAD,POST" type="System.Web.DefaultHttpHandler" validate="True" />
+		  <add path="*" verb="*" type="System.Web.HttpMethodNotAllowedHandler" validate="True" />
+		</httpHandlers>
+		<httpModules>
+		  <add name="OutputCache" type="System.Web.Caching.OutputCacheModule" />
+		  <add name="Session" type="System.Web.SessionState.SessionStateModule" />
+		  <!--
+		  <add name="WindowsAuthentication" type="System.Web.Security.WindowsAuthenticationModule" />
+		  -->
+		  <add name="FormsAuthentication" type="System.Web.Security.FormsAuthenticationModule" />
+		  <!--
+		  <add name="PassportAuthentication" type="System.Web.Security.PassportAuthenticationModule" />
+		  -->
+		  <add name="RoleManager" type="System.Web.Security.RoleManagerModule" />
+		  <add name="UrlAuthorization" type="System.Web.Security.UrlAuthorizationModule" />
+		  <!--
+		  <add name="FileAuthorization" type="System.Web.Security.FileAuthorizationModule" />
+		  -->
+		  <add name="AnonymousIdentification" type="System.Web.Security.AnonymousIdentificationModule" />
+		  <add name="Profile" type="System.Web.Profile.ProfileModule" />
+		  <!--
+		  <add name="ErrorHandlerModule" type="System.Web.Mobile.ErrorHandlerModule, System.Web.Mobile, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
+		  <add name="ServiceModel" type="System.ServiceModel.Activation.HttpModule, System.ServiceModel.Activation, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" />
+		  -->
+		  <add name="UrlRoutingModule-4.0" type="System.Web.Routing.UrlRoutingModule" />
+		  <add name="ScriptModule-4.0" type="System.Web.Handlers.ScriptModule, System.Web.Extensions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
+		</httpModules>
+		<authentication mode="Forms">
+			<forms name=".MONOAUTH" loginUrl="login.aspx" protection="All" timeout="30" path="/">
+				<credentials passwordFormat="Clear">
+					<!--<user name="gonzalo" password="gonz"/>-->
+				</credentials>
+			</forms>
+		</authentication>
+		<machineKey validationKey="AutoGenerate" decryptionKey="AutoGenerate" validation="SHA1" />
+		<globalization  requestEncoding="utf-8"
+				responseEncoding="utf-8"
+				fileEncoding="utf-8"/>
+		<!--
+				culture="en-US"
+				uiculture="en-US" />
+		-->
+		<sessionState mode="InProc" />
+		<pages>
+        		<namespaces>
+            			<add namespace="System" />
+            			<add namespace="System.Collections" />
+            			<add namespace="System.Collections.Specialized" />
+            			<add namespace="System.Configuration" />
+            			<add namespace="System.Text" />
+            			<add namespace="System.Text.RegularExpressions" />
+            			<add namespace="System.Web" />
+            			<add namespace="System.Web.Caching" />
+            			<add namespace="System.Web.SessionState" />
+            			<add namespace="System.Web.Security" />
+            			<add namespace="System.Web.Profile" />
+            			<add namespace="System.Web.UI" />
+            			<add namespace="System.Web.UI.WebControls" />
+            			<!-- <add namespace="System.Web.UI.WebControls.WebParts" /> -->
+            			<add namespace="System.Web.UI.HtmlControls" />
+        		</namespaces>
+        		
+        		<controls>
+				<add tagPrefix="asp" namespace="System.Web.UI.WebControls.WebParts" assembly="System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
+				<add tagPrefix="asp" namespace="System.Web.UI" assembly="System.Web.Extensions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
+				<add tagPrefix="asp" namespace="System.Web.UI.WebControls" assembly="System.Web.Extensions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
+				<add tagPrefix="asp" namespace="System.Web.UI.WebControls.Expressions" assembly="System.Web.Extensions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
+				<add tagPrefix="asp" namespace="System.Web.DynamicData" assembly="System.Web.DynamicData, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
+				<add tagPrefix="asp" namespace="System.Web.UI.WebControls" assembly="System.Web.Entity, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
+			</controls>
+    		</pages>
+		<webControls clientScriptsLocation="/web_scripts" />
+		<compilation debug="false" defaultLanguage="c#" explicit="true" strict="false" >
+			<assemblies>
+				<!-- <add assembly="mscorlib" /> -->
+				<add assembly="Microsoft.CSharp, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
+				<add assembly="System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
+				<add assembly="System.Configuration, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
+				<add assembly="System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
+				<add assembly="System.Data, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
+				<add assembly="System.Web.Services, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
+				<add assembly="System.Xml, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
+				<add assembly="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
+				<add assembly="System.EnterpriseServices, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
+				<!-- <add assembly="System.Web.Mobile, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" /> -->
+				<add assembly="System.IdentityModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
+				<add assembly="System.Runtime.Serialization, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
+				<add assembly="System.Xaml, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
+				<add assembly="System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
+				<!-- <add assembly="System.ServiceModel.Activation, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/> -->
+				<!-- <add assembly="System.ServiceModel.Channels, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/> -->
+				<add assembly="System.ServiceModel.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
+				<!-- <add assembly="System.Activities, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/> -->
+				<!-- <add assembly="System.ServiceModel.Activities, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/> -->
+				<!-- <add assembly="System.WorkflowServices, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/> -->
+				<!-- <add assembly="System.Xaml.Hosting, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/> -->
+				<add assembly="System.Core, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
+				<add assembly="System.Web.Extensions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" />
+				<add assembly="System.Data.DataSetExtensions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
+				<add assembly="System.Xml.Linq, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
+				<add assembly="System.ComponentModel.DataAnnotations, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
+				<add assembly="System.Web.DynamicData, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
+				<!-- <add assembly="System.Data.Entity, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" /> -->
+				<!-- <add assembly="System.Web.Entity, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"/> -->
+				<add assembly="System.Data.Linq, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
+				<!-- <add assembly="System.Data.Entity.Design, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" /> -->
+				<add assembly="System.Web.ApplicationServices, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" />
+				<add assembly="*" /> <!-- Add assemblies in bin directory -->
+			</assemblies>
+			<expressionBuilders>
+				<add expressionPrefix="Resources"
+				     type="System.Web.Compilation.ResourceExpressionBuilder, System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
+				<add expressionPrefix="ConnectionStrings"
+				     type="System.Web.Compilation.ConnectionStringsExpressionBuilder, System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
+				<add expressionPrefix="AppSettings"
+				     type="System.Web.Compilation.AppSettingsExpressionBuilder, System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
+				<add expressionPrefix="RouteUrl" type="System.Web.Compilation.RouteUrlExpressionBuilder"/>
+				<!--
+				<add expressionPrefix="RouteValue" type="System.Web.Compilation.RouteValueExpressionBuilder"/>
+				-->
+			</expressionBuilders>
+			<buildProviders>
+				<add extension=".aspx" type="System.Web.Compilation.PageBuildProvider" />
+				<add extension=".ascx" type="System.Web.Compilation.UserControlBuildProvider" />
+				<add extension=".master" type="System.Web.Compilation.MasterPageBuildProvider" />
+				<add extension=".asmx" type="System.Web.Compilation.WebServiceBuildProvider" />
+				<add extension=".ashx" type="System.Web.Compilation.WebHandlerBuildProvider" />
+				<add extension=".soap" type="System.Web.Compilation.WebServiceBuildProvider" />
+				<add extension=".resx" type="System.Web.Compilation.ResXBuildProvider" />
+				<add extension=".resources" type="System.Web.Compilation.ResourcesBuildProvider" />
+				<add extension=".wsdl" type="System.Web.Compilation.WsdlBuildProvider" />
+				<add extension=".xsd" type="System.Web.Compilation.XsdBuildProvider" />
+				<add extension=".js" type="System.Web.Compilation.ForceCopyBuildProvider" />
+				<add extension=".lic" type="System.Web.Compilation.IgnoreFileBuildProvider" />
+				<add extension=".licx" type="System.Web.Compilation.IgnoreFileBuildProvider" />
+				<add extension=".exclude" type="System.Web.Compilation.IgnoreFileBuildProvider" />
+				<add extension=".refresh" type="System.Web.Compilation.IgnoreFileBuildProvider" />
+				<!--
+				<add extension=".edmx" type="System.Data.Entity.Design.AspNet.EntityDesignerBuildProvider" />
+				<add extension=".xoml" type="System.ServiceModel.Activation.WorkflowServiceBuildProvider, System.WorkflowServices, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
+				<add extension=".svc" type="System.ServiceModel.Activation.ServiceBuildProvider, System.ServiceModel.Activation, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" />
+				<add extension=".xamlx" type="System.Xaml.Hosting.XamlBuildProvider, System.Xaml.Hosting, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" />
+				-->
+			</buildProviders>
+		</compilation>
+		<httpRuntime executionTimeout="110"
+			     maxRequestLength="4096"
+			     useFullyQualifiedRedirectUrl="false"
+			     minFreeThreads="8"
+			     minLocalRequestFreeThreads="4"
+			     appRequestQueueLimit="5000" />
+		<clientTarget>
+			<add alias="ie5" userAgent="Mozilla/4.0 (compatible; MSIE 5.5; Windows NT 4.0)" />
+			<add alias="ie4" userAgent="Mozilla/4.0 (compatible; MSIE 4.0; Windows NT 4.0)" />
+			<add alias="uplevel" userAgent="Mozilla/4.0 (compatible; MSIE 4.0; Windows NT 4.0)" />
+			<add alias="downlevel" userAgent="Unknown" />
+		</clientTarget>
+
+		<siteMap>
+			<providers>
+				<add name="AspNetXmlSiteMapProvider"
+				 description="Default site map provider that reads in .sitemap xml files."
+				 type="System.Web.XmlSiteMapProvider, System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"
+				 siteMapFile="Web.sitemap" />
+			</providers>
+		</siteMap>
+	</system.web>
+
+</configuration>
diff --git a/docs/Makefile.in b/docs/Makefile.in
index b04d7af..105645c 100644
--- a/docs/Makefile.in
+++ b/docs/Makefile.in
@@ -39,11 +39,13 @@ subdir = docs
 DIST_COMMON = README $(srcdir)/Makefile.am $(srcdir)/Makefile.in \
 	ChangeLog TODO
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/libtool.m4 \
-	$(top_srcdir)/ltoptions.m4 $(top_srcdir)/ltsugar.m4 \
-	$(top_srcdir)/ltversion.m4 $(top_srcdir)/lt~obsolete.m4 \
-	$(top_srcdir)/nls.m4 $(top_srcdir)/po.m4 \
-	$(top_srcdir)/progtest.m4 $(top_srcdir)/acinclude.m4 \
+am__aclocal_m4_deps = $(top_srcdir)/m4/iconv.m4 \
+	$(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
+	$(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \
+	$(top_srcdir)/m4/progtest.m4 $(top_srcdir)/acinclude.m4 \
 	$(top_srcdir)/configure.in
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
@@ -86,7 +88,6 @@ AUTOCONF = @AUTOCONF@
 AUTOHEADER = @AUTOHEADER@
 AUTOMAKE = @AUTOMAKE@
 AWK = @AWK@
-BISON = @BISON@
 BOEHM_DEFINES = @BOEHM_DEFINES@
 BUILD_EXEEXT = @BUILD_EXEEXT@
 BUILD_GLIB_CFLAGS = @BUILD_GLIB_CFLAGS@
@@ -140,9 +141,11 @@ INTL = @INTL@
 LD = @LD@
 LDFLAGS = @LDFLAGS@
 LIBC = @LIBC@
-LIBGC_CFLAGS = @LIBGC_CFLAGS@
+LIBGC_CPPFLAGS = @LIBGC_CPPFLAGS@
 LIBGC_LIBS = @LIBGC_LIBS@
 LIBGC_STATIC_LIBS = @LIBGC_STATIC_LIBS@
+LIBICONV = @LIBICONV@
+LIBMONO_LA = @LIBMONO_LA@
 LIBOBJS = @LIBOBJS@
 LIBS = @LIBS@
 LIBTOOL = @LIBTOOL@
@@ -155,6 +158,7 @@ LLVM_LIBS = @LLVM_LIBS@
 LN_S = @LN_S@
 LTCOMPILE = @LTCOMPILE@
 LTCXXCOMPILE = @LTCXXCOMPILE@
+LTLIBICONV = @LTLIBICONV@
 LTLIBOBJS = @LTLIBOBJS@
 MAINT = @MAINT@
 MAKEINFO = @MAKEINFO@
@@ -348,9 +352,9 @@ $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__confi
 	      exit 1;; \
 	  esac; \
 	done; \
-	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu docs/Makefile'; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign docs/Makefile'; \
 	$(am__cd) $(top_srcdir) && \
-	  $(AUTOMAKE) --gnu docs/Makefile
+	  $(AUTOMAKE) --foreign docs/Makefile
 .PRECIOUS: Makefile
 Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
 	@case '$?' in \
diff --git a/docs/deploy/api-style.css b/docs/deploy/api-style.css
deleted file mode 100644
index 910ac49..0000000
--- a/docs/deploy/api-style.css
+++ /dev/null
@@ -1,40 +0,0 @@
-   h3 { 
-       font-size: 18px;
-       padding-bottom: 4pt;
-       border-bottom: 2px solid #dddddd;
-   }
-       
-   .api {
-     border: 1px solid;
-     padding: 10pt;
-     margin: 10pt;
-   } 
-
-   .api-entry { 
-       border-bottom: none;
-       font-size: 18px;
-   }
-
-   .prototype {
-     border: 1px solid;
-     background-color: #f2f2f2;
-     padding: 5pt;
-     margin-top: 5pt;
-     margin-bottom: 5pt;  
-   } 
-
-   .header {
-     border: 1px solid;
-     padding: 0 0 5pt 5pt;
-     margin: 10pt;
-     white-space: pre;
-       font-family: monospace;
-   }
-    
-   .code {
-     border: 1px solid;
-     padding: 0 0 5pt 5pt;
-     margin: 10pt;
-     white-space: pre;
-       font-family: monospace;
-   }
diff --git a/docs/deploy/mono-api-assembly.html b/docs/deploy/mono-api-assembly.html
deleted file mode 100644
index 78d66f4..0000000
--- a/docs/deploy/mono-api-assembly.html
+++ /dev/null
@@ -1,337 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?><span>
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-   <title>mono-api-assembly.html</title>
-   <style type="text/css">
-
-
-   h3 { 
-       font-size: 18px;
-       padding-bottom: 4pt;
-       border-bottom: 2px solid #dddddd;
-   }
-       
-   .api {
-     border: 1px solid;
-     padding: 10pt;
-     margin: 10pt;
-   } 
-
-   .api-entry { 
-       border-bottom: none;
-       font-size: 18px;
-   }
-
-   .prototype {
-     border: 1px solid;
-     background-color: #f2f2f2;
-     padding: 5pt;
-     margin-top: 5pt;
-     margin-bottom: 5pt;  
-   } 
-
-   .header {
-     border: 1px solid;
-     padding: 0 0 5pt 5pt;
-     margin: 10pt;
-     white-space: pre;
-       font-family: monospace;
-   }
-    
-   .code {
-     border: 1px solid;
-     padding: 0 0 5pt 5pt;
-     margin: 10pt;
-     white-space: pre;
-       font-family: monospace;
-   }
-   
-
-</style>
-</head>
-<body>
-<h2>Assemblies</h2>
-
-<h3>Synopsis</h3>
-
-	<div class="header">
-#include <metadata/assembly.h>
-
-typedef struct _MonoImage MonoImage;
-typedef struct _MonoAssembly MonoAssembly;
-
-MonoAssembly*          <a href="#api:mono_assembly_open">mono_assembly_open</a>           (const char *filename, 
-                                                     MonoImageOpenStatus *status);
-void                   <a href="#api:mono_assembly_close">mono_assembly_close</a>          (MonoAssembly *assembly);
-MonoAssembly*          <a href="#api:mono_assembly_load">mono_assembly_load</a>           (MonoAssemblyName *aname, 
-                                                     const char *basedir, 
-                                                     MonoImageOpenStatus *status);
-MonoAssembly*          <a href="#api:mono_assembly_load_full">mono_assembly_load_full</a>      (MonoAssemblyName *aname, 
-                                                     const char *basedir, 
-                                                     MonoImageOpenStatus *status, 
-                                                     gboolean refonly);
-MonoAssembly*          <a href="#api:mono_assembly_loaded">mono_assembly_loaded</a>         (MonoAssemblyName *aname);
-                       <a href="#api:mono_assembly_get_object"></a>                             
-MonoImage*             <a href="#api:mono_assembly_get_image">mono_assembly_get_image</a>      (MonoAssembly *assembly);
-MonoAssembly*          <a href="#api:mono_assembly_get_main">mono_assembly_get_main</a>       (void);
-G_CONST_RETURN gchar * <a href="#api:mono_assembly_getrootdir">mono_assembly_getrootdir</a>     (void);
-void                   <a href="#api:mono_assembly_name_free">mono_assembly_name_free</a>      (MonoAssemblyName *aname);
-char*                  <a href="#api:mono_stringify_assembly_name">mono_stringify_assembly_name</a> (MonoAssemblyName *aname);
-gboolean               <a href="#api:mono_assembly_names_equal">mono_assembly_names_equal</a>    (MonoAssemblyName *l, 
-                                                     MonoAssemblyName *r);
-                       <a href="#api:mono_module_file_get_object"></a>                             
-                       <a href="#api:mono_module_get_object"></a>                             
-
-	
-	</div>
-
-<a name="cil_assembly_load"></a>
-<h3>Assembly Loading</h3>
-
- <a name="api:mono_assembly_open"></a>
- <div class="api">
-    <div class="api-entry">mono_assembly_open</div>
-
-    <div class="prototype">MonoAssembly*
-mono_assembly_open (const char *filename, MonoImageOpenStatus *status)
-
-</div>
-<p />
-<b>Parameters</b>
-<blockquote><dt><i>filename:</i></dt><dd> Opens the assembly pointed out by this name</dd><dt><i>status:</i></dt><dd> where a status code can be returned</dd></blockquote>
-<b>Returns</b>
-<blockquote>	  a pointer to the MonoAssembly if <i>filename</i> contains a valid
-
-	 assembly or NULL on error.  Details about the error are stored in the
-	 <i>status</i> variable.</blockquote>
-<b>Remarks</b>
-<p />	 
-	 mono_assembly_open opens the PE-image pointed by <i>filename</i>, and
-	 loads any external assemblies referenced by it.
-	
-
-</div> <a name="api:mono_assembly_close"></a>
- <div class="api">
-    <div class="api-entry">mono_assembly_close</div>
-
-    <div class="prototype">void
-mono_assembly_close (MonoAssembly *assembly)
-
-</div>
-<p />
-<b>Parameters</b>
-<blockquote><dt><i>assembly:</i></dt><dd> the assembly to release.</dd></blockquote>
-<b>Remarks</b>
-<p />	 
-	 This method releases a reference to the <i>assembly</i>.  The assembly is
-	 only released when all the outstanding references to it are released.
-
-</div> <a name="api:mono_assembly_load"></a>
- <div class="api">
-    <div class="api-entry">mono_assembly_load</div>
-
-    <div class="prototype">MonoAssembly*
-mono_assembly_load (MonoAssemblyName *aname, const char *basedir, MonoImageOpenStatus *status)
-
-</div>
-<p />
-<b>Parameters</b>
-<blockquote><dt><i>aname:</i></dt><dd> A MonoAssemblyName with the assembly name to load.</dd><dt><i>basedir:</i></dt><dd> A directory to look up the assembly at.</dd><dt><i>status:</i></dt><dd> a pointer to a MonoImageOpenStatus to return the status of the load operation</dd></blockquote>
-<b>Returns</b>
-<blockquote>	  the assembly referenced by <i>aname</i> loaded or NULL on error.   On error the
-
-	 value pointed by status is updated with an error code.</blockquote>
-<b>Remarks</b>
-<p />	 
-	 Loads the assembly referenced by <i>aname</i>, if the value of <i>basedir</i> is not NULL, it
-	 attempts to load the assembly from that directory before probing the standard locations.
-	
-
-</div> <a name="api:mono_assembly_load_full"></a>
- <div class="api">
-    <div class="api-entry">mono_assembly_load_full</div>
-
-    <div class="prototype">MonoAssembly*
-mono_assembly_load_full (MonoAssemblyName *aname, const char *basedir, MonoImageOpenStatus *status, gboolean refonly)
-
-</div>
-<p />
-<b>Parameters</b>
-<blockquote><dt><i>aname:</i></dt><dd> A MonoAssemblyName with the assembly name to load.</dd><dt><i>basedir:</i></dt><dd> A directory to look up the assembly at.</dd><dt><i>status:</i></dt><dd> a pointer to a MonoImageOpenStatus to return the status of the load operation</dd><dt><i>refonly:</i></dt><dd> Whether this assembly is being opened in "reflection-only" mode.</dd></blockquote>
-<b>Returns</b>
-<blockquote>	  the assembly referenced by <i>aname</i> loaded or NULL on error.   On error the
-
-	 value pointed by status is updated with an error code.</blockquote>
-<b>Remarks</b>
-<p />	 
-	 Loads the assembly referenced by <i>aname</i>, if the value of <i>basedir</i> is not NULL, it
-	 attempts to load the assembly from that directory before probing the standard locations.
-	
-	 If the assembly is being opened in reflection-only mode (<i>refonly</i> set to TRUE) then no 
-	 assembly binding takes place.
-	
-
-</div> <a name="api:mono_assembly_loaded"></a>
- <div class="api">
-    <div class="api-entry">mono_assembly_loaded</div>
-
-    <div class="prototype">MonoAssembly*
-mono_assembly_loaded (MonoAssemblyName *aname)
-
-</div>
-<p />
-<b>Parameters</b>
-<blockquote><dt><i>aname:</i></dt><dd> an assembly to look for.</dd></blockquote>
-<b>Returns</b>
-<blockquote>	  NULL If the given <i>aname</i> assembly has not been loaded, or a pointer to
-
-	 a MonoAssembly that matches the MonoAssemblyName specified.</blockquote>
-
-</div> <a name="api:mono_assembly_get_object"></a>
- <div class="api">
-    <div class="api-entry">mono_assembly_get_object</div>
-
-    <div class="prototype">Prototype: mono_assembly_get_object</div>
-<p />
-
-
-</div><h3>Working with Assemblies</h3>
-
- <a name="api:mono_assembly_get_image"></a>
- <div class="api">
-    <div class="api-entry">mono_assembly_get_image</div>
-
-    <div class="prototype">MonoImage*
-mono_assembly_get_image (MonoAssembly *assembly)
-
-</div>
-<p />
-<b>Parameters</b>
-<blockquote><dt><i>assembly:</i></dt><dd> The assembly to retrieve the image from</dd></blockquote>
-<b>Returns</b>
-<blockquote>	  the MonoImage associated with this assembly.
-</blockquote>
-
-</div> <a name="api:mono_assembly_get_main"></a>
- <div class="api">
-    <div class="api-entry">mono_assembly_get_main</div>
-
-    <div class="prototype">MonoAssembly*
-mono_assembly_get_main (void)
-
-</div>
-<p />
-<b>Returns</b>
-<blockquote>	  the assembly for the application, the first assembly that is loaded by the VM
-</blockquote>
-
-</div> <a name="api:mono_assembly_getrootdir"></a>
- <div class="api">
-    <div class="api-entry">mono_assembly_getrootdir</div>
-
-    <div class="prototype">G_CONST_RETURN gchar *
-mono_assembly_getrootdir (void)
-
-</div>
-<p />
-<b>Returns</b>
-<blockquote>	  a string with the directory, this string should not be freed.
-</blockquote>
-<b>Remarks</b>
-<p />	 <p />
-
-	 Obtains the root directory used for looking up assemblies.
-	
-
-
-</div><h3>Assembly Names</h3>
-
-	<p />The MonoAssemblyName contains the full identity of an
-	assembly (name, culture, public key, public key token,
-	version and any other flags).
-
-	<p />These unmanaged objects represent the <a href="http://www.mono-project.com/monodoc/T:System.Reflection.AssemblyName">System.Reflection.AssemblyName</a>
-	managed type.
-
- <a name="api:mono_assembly_name_free"></a>
- <div class="api">
-    <div class="api-entry">mono_assembly_name_free</div>
-
-    <div class="prototype">void
-mono_assembly_name_free (MonoAssemblyName *aname)
-
-</div>
-<p />
-<b>Parameters</b>
-<blockquote><dt><i>aname:</i></dt><dd> assembly name to free</dd></blockquote>
-<b>Remarks</b>
-<p />	 <p />
-
-	 Frees the provided assembly name object.
-	 (it does not frees the object itself, only the name members).
-
-</div> <a name="api:mono_stringify_assembly_name"></a>
- <div class="api">
-    <div class="api-entry">mono_stringify_assembly_name</div>
-
-    <div class="prototype">char*
-mono_stringify_assembly_name (MonoAssemblyName *aname)
-
-</div>
-<p />
-<b>Parameters</b>
-<blockquote><dt><i>aname:</i></dt><dd> the assembly name.</dd></blockquote>
-<b>Returns</b>
-<blockquote>	  a newly allocated string with a string representation of
-
-	 the assembly name.</blockquote>
-<b>Remarks</b>
-<p />	 
-	 Convert <i>aname</i> into its string format. The returned string is dynamically
-	 allocated and should be freed by the caller.
-	
-
-</div> <a name="api:mono_assembly_names_equal"></a>
- <div class="api">
-    <div class="api-entry">mono_assembly_names_equal</div>
-
-    <div class="prototype">gboolean
-mono_assembly_names_equal (MonoAssemblyName *l, MonoAssemblyName *r)
-
-</div>
-<p />
-<b>Parameters</b>
-<blockquote><dt><i>l:</i></dt><dd> first assembly</dd><dt><i>r:</i></dt><dd> second assembly.</dd></blockquote>
-<b>Returns</b>
-<blockquote>	  TRUE if both assembly names are equal.
-</blockquote>
-<b>Remarks</b>
-<p />	 
-	 Compares two MonoAssemblyNames and returns whether they are equal.
-	
-	 This compares the names, the cultures, the release version and their
-	 public tokens.
-	
-
-
-</div><h3>Modules</h3>
-
-	<p />An assembly is made up of one or more modules.
-
- <a name="api:mono_module_file_get_object"></a>
- <div class="api">
-    <div class="api-entry">mono_module_file_get_object</div>
-
-    <div class="prototype">Prototype: mono_module_file_get_object</div>
-<p />
-
-</div> <a name="api:mono_module_get_object"></a>
- <div class="api">
-    <div class="api-entry">mono_module_get_object</div>
-
-    <div class="prototype">Prototype: mono_module_get_object</div>
-<p />
-
-</div></body>
-</html>
-</span>
\ No newline at end of file
diff --git a/docs/deploy/mono-api-class.html b/docs/deploy/mono-api-class.html
deleted file mode 100644
index bd3d0f8..0000000
--- a/docs/deploy/mono-api-class.html
+++ /dev/null
@@ -1,797 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?><span>
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-   <title>mono-api-class.html</title>
-   <style type="text/css">
-
-
-   h3 { 
-       font-size: 18px;
-       padding-bottom: 4pt;
-       border-bottom: 2px solid #dddddd;
-   }
-       
-   .api {
-     border: 1px solid;
-     padding: 10pt;
-     margin: 10pt;
-   } 
-
-   .api-entry { 
-       border-bottom: none;
-       font-size: 18px;
-   }
-
-   .prototype {
-     border: 1px solid;
-     background-color: #f2f2f2;
-     padding: 5pt;
-     margin-top: 5pt;
-     margin-bottom: 5pt;  
-   } 
-
-   .header {
-     border: 1px solid;
-     padding: 0 0 5pt 5pt;
-     margin: 10pt;
-     white-space: pre;
-       font-family: monospace;
-   }
-    
-   .code {
-     border: 1px solid;
-     padding: 0 0 5pt 5pt;
-     margin: 10pt;
-     white-space: pre;
-       font-family: monospace;
-   }
-   
-
-</style>
-</head>
-<body>
-<h2>Class Operations</h2>
-
- <a name="api:mono_class_array_element_size"></a>
- <div class="api">
-    <div class="api-entry">mono_class_array_element_size</div>
-
-    <div class="prototype">gint32
-mono_class_array_element_size (MonoClass *klass)
-
-</div>
-<p />
-<b>Parameters</b>
-<blockquote><dt><i>klass:</i></dt><dd> </dd></blockquote>
-<b>Returns</b>
-<blockquote>	  the number of bytes an element of type <i>klass</i>
-
-	 uses when stored into an array.</blockquote>
-
-</div> <a name="api:mono_class_data_size"></a>
- <div class="api">
-    <div class="api-entry">mono_class_data_size</div>
-
-    <div class="prototype">gint32
-mono_class_data_size (MonoClass *klass)
-	
-</div>
-<p />
-<b>Parameters</b>
-<blockquote><dt><i>klass:</i></dt><dd> a class </dd></blockquote>
-<b>Returns</b>
-<blockquote>	  the size of the static class data
-</blockquote>
-<b>Remarks</b>
-<p />	 <p />
-
-
-</div> <a name="api:mono_class_enum_basetype"></a>
- <div class="api">
-    <div class="api-entry">mono_class_enum_basetype</div>
-
-    <div class="prototype">MonoType*
-mono_class_enum_basetype (MonoClass *klass)
-
-</div>
-<p />
-<b>Parameters</b>
-<blockquote><dt><i>klass:</i></dt><dd> the MonoClass to act on</dd></blockquote>
-<b>Returns</b>
-<blockquote>	  the underlying type representation for an enumeration.
-</blockquote>
-
-</div> <a name="api:mono_class_from_generic_parameter"></a>
- <div class="api">
-    <div class="api-entry">mono_class_from_generic_parameter</div>
-
-    <div class="prototype">Prototype: mono_class_from_generic_parameter</div>
-<p />
-
-</div> <a name="api:mono_class_from_mono_type"></a>
- <div class="api">
-    <div class="api-entry">mono_class_from_mono_type</div>
-
-    <div class="prototype">Prototype: mono_class_from_mono_type</div>
-<p />
-
-</div> <a name="api:mono_class_from_name_case"></a>
- <div class="api">
-    <div class="api-entry">mono_class_from_name_case</div>
-
-    <div class="prototype">MonoClass*
-mono_class_from_name_case (MonoImage *image, const char* name_space, const char *name)
-
-</div>
-<p />
-<b>Parameters</b>
-<blockquote><dt><i>image:</i></dt><dd> The MonoImage where the type is looked up in</dd><dt><i>name_space:</i></dt><dd> the type namespace</dd><dt><i>name:</i></dt><dd> the type short name.</dd></blockquote>
-<b>Remarks</b>
-<p />	 
-	 Obtains a MonoClass with a given namespace and a given name which
-	 is located in the given MonoImage.   The namespace and name
-	 lookups are case insensitive.
-
-</div> <a name="api:mono_class_from_name"></a>
- <div class="api">
-    <div class="api-entry">mono_class_from_name</div>
-
-    <div class="prototype">MonoClass*
-mono_class_from_name (MonoImage *image, const char* name_space, const char *name)
-
-</div>
-<p />
-<b>Parameters</b>
-<blockquote><dt><i>image:</i></dt><dd> The MonoImage where the type is looked up in</dd><dt><i>name_space:</i></dt><dd> the type namespace</dd><dt><i>name:</i></dt><dd> the type short name.</dd></blockquote>
-<b>Remarks</b>
-<p />	 
-	 Obtains a MonoClass with a given namespace and a given name which
-	 is located in the given MonoImage.   
-
-</div> <a name="api:mono_class_from_typeref"></a>
- <div class="api">
-    <div class="api-entry">mono_class_from_typeref</div>
-
-    <div class="prototype">Prototype: mono_class_from_typeref</div>
-<p />
-
-</div> <a name="api:mono_class_get_byref_type"></a>
- <div class="api">
-    <div class="api-entry">mono_class_get_byref_type</div>
-
-    <div class="prototype">MonoType*
-mono_class_get_byref_type (MonoClass *klass)
-
-</div>
-<p />
-<b>Parameters</b>
-<blockquote><dt><i>klass:</i></dt><dd> the MonoClass to act on</dd></blockquote>
-<b>Remarks</b>
-<p />	 
-	
-<p />
-
-</div> <a name="api:mono_class_get_element_class"></a>
- <div class="api">
-    <div class="api-entry">mono_class_get_element_class</div>
-
-    <div class="prototype">MonoClass*
-mono_class_get_element_class (MonoClass *klass)
-
-</div>
-<p />
-<b>Parameters</b>
-<blockquote><dt><i>klass:</i></dt><dd> the MonoClass to act on</dd></blockquote>
-<b>Returns</b>
-<blockquote>	  the element class of an array or an enumeration.
-</blockquote>
-
-</div> <a name="api:mono_class_get_events"></a>
- <div class="api">
-    <div class="api-entry">mono_class_get_events</div>
-
-    <div class="prototype">MonoEvent*
-mono_class_get_events (MonoClass* klass, gpointer *iter)
-
-</div>
-<p />
-<b>Parameters</b>
-<blockquote><dt><i>klass:</i></dt><dd> the MonoClass to act on</dd></blockquote>
-<b>Returns</b>
-<blockquote>	  a <i>MonoEvent</i>* on each invocation, or NULL when no more are available.
-</blockquote>
-<b>Remarks</b>
-<p />	 
-	 This routine is an iterator routine for retrieving the properties in a class.
-	
-	 You must pass a gpointer that points to zero and is treated as an opaque handle to
-	 iterate over all of the elements.  When no more values are
-	 available, the return value is NULL.
-	
-
-</div> <a name="api:mono_class_get_event_token"></a>
- <div class="api">
-    <div class="api-entry">mono_class_get_event_token</div>
-
-    <div class="prototype">Prototype: mono_class_get_event_token</div>
-<p />
-
-</div> <a name="api:mono_class_get_field_from_name"></a>
- <div class="api">
-    <div class="api-entry">mono_class_get_field_from_name</div>
-
-    <div class="prototype">MonoClassField*
-mono_class_get_field_from_name (MonoClass *klass, const char *name)
-
-</div>
-<p />
-<b>Parameters</b>
-<blockquote><dt><i>klass:</i></dt><dd> the class to lookup the field.</dd><dt><i>name:</i></dt><dd> the field name</dd></blockquote>
-<b>Returns</b>
-<blockquote>	  the MonoClassField pointer of the named field or NULL
-</blockquote>
-<b>Remarks</b>
-<p />	 
-	 Search the class <i>klass</i> and it's parents for a field with the name <i>name</i>.
-	
-<p />
-
-</div> <a name="api:mono_class_get_field"></a>
- <div class="api">
-    <div class="api-entry">mono_class_get_field</div>
-
-    <div class="prototype">MonoClassField*
-mono_class_get_field (MonoClass *class, guint32 field_token)
-
-</div>
-<p />
-<b>Parameters</b>
-<blockquote><dt><i>class:</i></dt><dd> the class to lookup the field.</dd><dt><i>field_token:</i></dt><dd> the field token</dd></blockquote>
-<b>Returns</b>
-<blockquote>	  A MonoClassField representing the type and offset of
-
-	 the field, or a NULL value if the field does not belong to this
-	 class.</blockquote>
-
-</div> <a name="api:mono_class_get_fields"></a>
- <div class="api">
-    <div class="api-entry">mono_class_get_fields</div>
-
-    <div class="prototype">MonoClassField*
-mono_class_get_fields (MonoClass* klass, gpointer *iter)
-
-</div>
-<p />
-<b>Parameters</b>
-<blockquote><dt><i>klass:</i></dt><dd> the MonoClass to act on</dd></blockquote>
-<b>Returns</b>
-<blockquote>	  a <i>MonoClassField</i>* on each iteration, or NULL when no more fields are available.
-</blockquote>
-<b>Remarks</b>
-<p />	 
-	 This routine is an iterator routine for retrieving the fields in a class.
-	
-	 You must pass a gpointer that points to zero and is treated as an opaque handle to
-	 iterate over all of the elements.  When no more values are
-	 available, the return value is NULL.
-	
-
-</div> <a name="api:mono_class_get_field_token"></a>
- <div class="api">
-    <div class="api-entry">mono_class_get_field_token</div>
-
-    <div class="prototype">guint32
-mono_class_get_field_token (MonoClassField *field)
-
-</div>
-<p />
-<b>Parameters</b>
-<blockquote><dt><i>field:</i></dt><dd> the field we need the token of</dd></blockquote>
-<b>Returns</b>
-<blockquote>	  the token representing the field in the image it was loaded from.
-</blockquote>
-<b>Remarks</b>
-<p />	 
-	 Get the token of a field. Note that the tokesn is only valid for the image
-	 the field was loaded from. Don't use this function for fields in dynamic types.
-	
-<p />
-
-</div> <a name="api:mono_class_get_flags"></a>
- <div class="api">
-    <div class="api-entry">mono_class_get_flags</div>
-
-    <div class="prototype">guint32
-mono_class_get_flags (MonoClass *klass)
-
-</div>
-<p />
-<b>Parameters</b>
-<blockquote><dt><i>klass:</i></dt><dd> the MonoClass to act on</dd></blockquote>
-<b>Returns</b>
-<blockquote>	  the flags from the TypeDef table.
-</blockquote>
-<b>Remarks</b>
-<p />	 
-	 The type flags from the TypeDef table from the metadata.
-	 see the TYPE_ATTRIBUTE_* definitions on tabledefs.h for the
-	 different values.
-	
-
-</div> <a name="api:mono_class_get_full"></a>
- <div class="api">
-    <div class="api-entry">mono_class_get_full</div>
-
-    <div class="prototype">MonoClass*
-mono_class_get_full (MonoImage *image, guint32 type_token, MonoGenericContext *context)
-
-</div>
-<p />
-<b>Parameters</b>
-<blockquote><dt><i>image:</i></dt><dd> the image where the class resides</dd><dt><i>type_token:</i></dt><dd> the token for the class</dd><dt><i>context:</i></dt><dd> the generic context used to evaluate generic instantiations in</dd></blockquote>
-<b>Returns</b>
-<blockquote>	  the MonoClass that represents <i>type_token</i> in <i>image</i>
-</blockquote>
-
-</div> <a name="api:mono_class_get_image"></a>
- <div class="api">
-    <div class="api-entry">mono_class_get_image</div>
-
-    <div class="prototype">Prototype: mono_class_get_image</div>
-<p />
-
-</div> <a name="api:mono_class_get_interfaces"></a>
- <div class="api">
-    <div class="api-entry">mono_class_get_interfaces</div>
-
-    <div class="prototype">MonoClass*
-mono_class_get_interfaces (MonoClass* klass, gpointer *iter)
-
-</div>
-<p />
-<b>Parameters</b>
-<blockquote><dt><i>klass:</i></dt><dd> the MonoClass to act on</dd></blockquote>
-<b>Returns</b>
-<blockquote>	  a <i>Monoclass</i>* on each invocation, or NULL when no more are available.
-</blockquote>
-<b>Remarks</b>
-<p />	 
-	 This routine is an iterator routine for retrieving the interfaces implemented by this class.
-	
-	 You must pass a gpointer that points to zero and is treated as an opaque handle to
-	 iterate over all of the elements.  When no more values are
-	 available, the return value is NULL.
-	
-
-</div> <a name="api:mono_class_get_method_from_name"></a>
- <div class="api">
-    <div class="api-entry">mono_class_get_method_from_name</div>
-
-    <div class="prototype">MonoMethod*
-mono_class_get_method_from_name (MonoClass *klass, const char *name, int param_count)
-
-</div>
-<p />
-<b>Parameters</b>
-<blockquote><dt><i>klass:</i></dt><dd> where to look for the method</dd><dt><i>name_space:</i></dt><dd> name of the method</dd><dt><i>param_count:</i></dt><dd> number of parameters. -1 for any number.</dd></blockquote>
-<b>Remarks</b>
-<p />	 
-	 Obtains a MonoMethod with a given name and number of parameters.
-	 It only works if there are no multiple signatures for any given method name.
-
-</div> <a name="api:mono_class_get_methods"></a>
- <div class="api">
-    <div class="api-entry">mono_class_get_methods</div>
-
-    <div class="prototype">MonoMethod*
-mono_class_get_methods (MonoClass* klass, gpointer *iter)
-
-</div>
-<p />
-<b>Parameters</b>
-<blockquote><dt><i>klass:</i></dt><dd> the MonoClass to act on</dd></blockquote>
-<b>Returns</b>
-<blockquote>	  a MonoMethod on each iteration or NULL when no more methods are available.
-</blockquote>
-<b>Remarks</b>
-<p />	 
-	 This routine is an iterator routine for retrieving the fields in a class.
-	
-	 You must pass a gpointer that points to zero and is treated as an opaque handle to
-	 iterate over all of the elements.  When no more values are
-	 available, the return value is NULL.
-	
-
-</div> <a name="api:mono_class_get"></a>
- <div class="api">
-    <div class="api-entry">mono_class_get</div>
-
-    <div class="prototype">Prototype: mono_class_get</div>
-<p />
-
-</div> <a name="api:mono_class_get_name"></a>
- <div class="api">
-    <div class="api-entry">mono_class_get_name</div>
-
-    <div class="prototype">const char*
-mono_class_get_name (MonoClass *klass)
-
-</div>
-<p />
-<b>Parameters</b>
-<blockquote><dt><i>klass:</i></dt><dd> the MonoClass to act on</dd></blockquote>
-<b>Returns</b>
-<blockquote>	  the name of the class.
-</blockquote>
-
-</div> <a name="api:mono_class_get_namespace"></a>
- <div class="api">
-    <div class="api-entry">mono_class_get_namespace</div>
-
-    <div class="prototype">const char*
-mono_class_get_namespace (MonoClass *klass)
-
-</div>
-<p />
-<b>Parameters</b>
-<blockquote><dt><i>klass:</i></dt><dd> the MonoClass to act on</dd></blockquote>
-<b>Returns</b>
-<blockquote>	  the namespace of the class.
-</blockquote>
-
-</div> <a name="api:mono_class_get_nested_types"></a>
- <div class="api">
-    <div class="api-entry">mono_class_get_nested_types</div>
-
-    <div class="prototype">MonoClass*
-mono_class_get_nested_types (MonoClass* klass, gpointer *iter)
-
-</div>
-<p />
-<b>Parameters</b>
-<blockquote><dt><i>klass:</i></dt><dd> the MonoClass to act on</dd></blockquote>
-<b>Returns</b>
-<blockquote>	  a <i>Monoclass</i>* on each invocation, or NULL when no more are available.
-</blockquote>
-<b>Remarks</b>
-<p />	 
-	 This routine is an iterator routine for retrieving the nested types of a class.
-	 This works only if <i>klass</i> is non-generic, or a generic type definition.
-	
-	 You must pass a gpointer that points to zero and is treated as an opaque handle to
-	 iterate over all of the elements.  When no more values are
-	 available, the return value is NULL.
-	
-
-</div> <a name="api:mono_class_get_nesting_type"></a>
- <div class="api">
-    <div class="api-entry">mono_class_get_nesting_type</div>
-
-    <div class="prototype">Prototype: mono_class_get_nesting_type</div>
-<p />
-
-</div> <a name="api:mono_class_get_parent"></a>
- <div class="api">
-    <div class="api-entry">mono_class_get_parent</div>
-
-    <div class="prototype">MonoClass*
-mono_class_get_parent (MonoClass *klass)
-
-</div>
-<p />
-<b>Parameters</b>
-<blockquote><dt><i>klass:</i></dt><dd> the MonoClass to act on</dd></blockquote>
-<b>Returns</b>
-<blockquote>	  the parent class for this class.
-</blockquote>
-
-</div> <a name="api:mono_class_get_properties"></a>
- <div class="api">
-    <div class="api-entry">mono_class_get_properties</div>
-
-    <div class="prototype">MonoProperty*
-mono_class_get_properties (MonoClass* klass, gpointer *iter)
-
-</div>
-<p />
-<b>Parameters</b>
-<blockquote><dt><i>klass:</i></dt><dd> the MonoClass to act on</dd></blockquote>
-<b>Returns</b>
-<blockquote>	  a <i>MonoProperty</i>* on each invocation, or NULL when no more are available.
-</blockquote>
-<b>Remarks</b>
-<p />	 
-	 This routine is an iterator routine for retrieving the properties in a class.
-	
-	 You must pass a gpointer that points to zero and is treated as an opaque handle to
-	 iterate over all of the elements.  When no more values are
-	 available, the return value is NULL.
-	
-
-</div> <a name="api:mono_class_get_property_from_name"></a>
- <div class="api">
-    <div class="api-entry">mono_class_get_property_from_name</div>
-
-    <div class="prototype">Prototype: mono_class_get_property_from_name</div>
-<p />
-
-</div> <a name="api:mono_class_get_property_token"></a>
- <div class="api">
-    <div class="api-entry">mono_class_get_property_token</div>
-
-    <div class="prototype">Prototype: mono_class_get_property_token</div>
-<p />
-
-</div> <a name="api:mono_class_get_rank"></a>
- <div class="api">
-    <div class="api-entry">mono_class_get_rank</div>
-
-    <div class="prototype">int
-mono_class_get_rank (MonoClass *klass)
-
-</div>
-<p />
-<b>Parameters</b>
-<blockquote><dt><i>klass:</i></dt><dd> the MonoClass to act on</dd></blockquote>
-<b>Returns</b>
-<blockquote>	  the rank for the array (the number of dimensions).
-</blockquote>
-
-</div> <a name="api:mono_class_get_type"></a>
- <div class="api">
-    <div class="api-entry">mono_class_get_type</div>
-
-    <div class="prototype">MonoType*
-mono_class_get_type (MonoClass *klass)
-
-</div>
-<p />
-<b>Parameters</b>
-<blockquote><dt><i>klass:</i></dt><dd> the MonoClass to act on</dd></blockquote>
-<b>Returns</b>
-<blockquote>	  the MonoType from the class.
-</blockquote>
-<b>Remarks</b>
-<p />	 
-	 This method returns the internal Type representation for the class.
-	
-
-</div> <a name="api:mono_class_inflate_generic_method"></a>
- <div class="api">
-    <div class="api-entry">mono_class_inflate_generic_method</div>
-
-    <div class="prototype">Prototype: mono_class_inflate_generic_method</div>
-<p />
-
-</div> <a name="api:mono_class_inflate_generic_type"></a>
- <div class="api">
-    <div class="api-entry">mono_class_inflate_generic_type</div>
-
-    <div class="prototype">Prototype: mono_class_inflate_generic_type</div>
-<p />
-
-</div> <a name="api:mono_class_init"></a>
- <div class="api">
-    <div class="api-entry">mono_class_init</div>
-
-    <div class="prototype">gboolean
-mono_class_init (MonoClass *class)
-
-</div>
-<p />
-<b>Parameters</b>
-<blockquote><dt><i>class:</i></dt><dd> the class to initialize</dd></blockquote>
-<b>Remarks</b>
-<p />	 
-	   Compute the instance_size, class_size and other infos that cannot be 
-	 computed at mono_class_get() time. Also compute vtable_size if possible. 
-	 Returns TRUE on success or FALSE if there was a problem in loading
-	 the type (incorrect assemblies, missing assemblies, methods, etc). 
-	
-	 LOCKING: Acquires the loader lock.
-
-</div> <a name="api:mono_class_instance_size"></a>
- <div class="api">
-    <div class="api-entry">mono_class_instance_size</div>
-
-    <div class="prototype">gint32
-mono_class_instance_size (MonoClass *klass)
-	
-</div>
-<p />
-<b>Parameters</b>
-<blockquote><dt><i>klass:</i></dt><dd> a class </dd></blockquote>
-<b>Returns</b>
-<blockquote>	  the size of an object instance
-</blockquote>
-<b>Remarks</b>
-<p />	 <p />
-
-
-</div> <a name="api:mono_class_is_assignable_from"></a>
- <div class="api">
-    <div class="api-entry">mono_class_is_assignable_from</div>
-
-    <div class="prototype">gboolean
-mono_class_is_assignable_from (MonoClass *klass, MonoClass *oklass)
-
-</div>
-<p />
-<b>Parameters</b>
-<blockquote><dt><i>klass:</i></dt><dd> the class to be assigned to</dd><dt><i>oklass:</i></dt><dd> the source class</dd></blockquote>
-<b>Returns</b>
-<blockquote>	  true if an instance of object oklass can be assigned to an
-
-	 instance of object <i>klass</i></blockquote>
-
-</div> <a name="api:mono_class_is_enum"></a>
- <div class="api">
-    <div class="api-entry">mono_class_is_enum</div>
-
-    <div class="prototype">gboolean
-mono_class_is_enum (MonoClass *klass)
-
-</div>
-<p />
-<b>Parameters</b>
-<blockquote><dt><i>klass:</i></dt><dd> the MonoClass to act on</dd></blockquote>
-<b>Returns</b>
-<blockquote>	  true if the MonoClass represents an enumeration.
-</blockquote>
-
-</div> <a name="api:mono_class_is_subclass_of"></a>
- <div class="api">
-    <div class="api-entry">mono_class_is_subclass_of</div>
-
-    <div class="prototype">Prototype: mono_class_is_subclass_of</div>
-<p />
-
-</div> <a name="api:mono_class_is_valuetype"></a>
- <div class="api">
-    <div class="api-entry">mono_class_is_valuetype</div>
-
-    <div class="prototype">gboolean
-mono_class_is_valuetype (MonoClass *klass)
-
-</div>
-<p />
-<b>Parameters</b>
-<blockquote><dt><i>klass:</i></dt><dd> the MonoClass to act on</dd></blockquote>
-<b>Returns</b>
-<blockquote>	  true if the MonoClass represents a ValueType.
-</blockquote>
-
-</div> <a name="api:mono_class_min_align"></a>
- <div class="api">
-    <div class="api-entry">mono_class_min_align</div>
-
-    <div class="prototype">gint32
-mono_class_min_align (MonoClass *klass)
-	
-</div>
-<p />
-<b>Parameters</b>
-<blockquote><dt><i>klass:</i></dt><dd> a class </dd></blockquote>
-<b>Returns</b>
-<blockquote>	  minimm alignment requirements 
-</blockquote>
-<b>Remarks</b>
-<p />	 <p />
-
-
-</div> <a name="api:mono_class_num_events"></a>
- <div class="api">
-    <div class="api-entry">mono_class_num_events</div>
-
-    <div class="prototype">int
-mono_class_num_events (MonoClass *klass)
-
-</div>
-<p />
-<b>Parameters</b>
-<blockquote><dt><i>klass:</i></dt><dd> the MonoClass to act on</dd></blockquote>
-<b>Returns</b>
-<blockquote>	  the number of events in the class.
-</blockquote>
-
-</div> <a name="api:mono_class_num_fields"></a>
- <div class="api">
-    <div class="api-entry">mono_class_num_fields</div>
-
-    <div class="prototype">int
-mono_class_num_fields (MonoClass *klass)
-
-</div>
-<p />
-<b>Parameters</b>
-<blockquote><dt><i>klass:</i></dt><dd> the MonoClass to act on</dd></blockquote>
-<b>Returns</b>
-<blockquote>	  the number of static and instance fields in the class.
-</blockquote>
-
-</div> <a name="api:mono_class_num_methods"></a>
- <div class="api">
-    <div class="api-entry">mono_class_num_methods</div>
-
-    <div class="prototype">int
-mono_class_num_methods (MonoClass *klass)
-
-</div>
-<p />
-<b>Parameters</b>
-<blockquote><dt><i>klass:</i></dt><dd> the MonoClass to act on</dd></blockquote>
-<b>Returns</b>
-<blockquote>	  the number of methods in the class.
-</blockquote>
-
-</div> <a name="api:mono_class_num_properties"></a>
- <div class="api">
-    <div class="api-entry">mono_class_num_properties</div>
-
-    <div class="prototype">int
-mono_class_num_properties (MonoClass *klass)
-
-</div>
-<p />
-<b>Parameters</b>
-<blockquote><dt><i>klass:</i></dt><dd> the MonoClass to act on</dd></blockquote>
-<b>Returns</b>
-<blockquote>	  the number of properties in the class.
-</blockquote>
-
-</div> <a name="api:mono_class_value_size"></a>
- <div class="api">
-    <div class="api-entry">mono_class_value_size</div>
-
-    <div class="prototype">gint32
-mono_class_value_size      (MonoClass *klass, guint32 *align)
-
-</div>
-<p />
-<b>Parameters</b>
-<blockquote><dt><i>klass:</i></dt><dd> a class </dd></blockquote>
-<b>Returns</b>
-<blockquote>	  the size of a value of kind <i>klass</i>
-</blockquote>
-<b>Remarks</b>
-<p />	 
-	 This function is used for value types, and return the
-	 space and the alignment to store that kind of value object.
-	
-
-</div> <a name="api:mono_class_vtable"></a>
- <div class="api">
-    <div class="api-entry">mono_class_vtable</div>
-
-    <div class="prototype">MonoVTable*
-mono_class_vtable (MonoDomain *domain, MonoClass *class)
-
-</div>
-<p />
-<b>Parameters</b>
-<blockquote><dt><i>domain:</i></dt><dd> the application domain</dd><dt><i>class:</i></dt><dd> the class to initialize</dd></blockquote>
-<b>Remarks</b>
-<p />	 
-	 VTables are domain specific because we create domain specific code, and 
-	 they contain the domain specific static class data.
-	 On failure, NULL is returned, and class->exception_type is set.
-
-</div> <a name="api:mono_class_get_method_from_name_flags"></a>
- <div class="api">
-    <div class="api-entry">mono_class_get_method_from_name_flags</div>
-
-    <div class="prototype">MonoMethod*
-mono_class_get_method_from_name_flags (MonoClass *klass, const char *name, int param_count, int flags)
-
-</div>
-<p />
-<b>Parameters</b>
-<blockquote><dt><i>klass:</i></dt><dd> where to look for the method</dd><dt><i>name_space:</i></dt><dd> name of the method</dd><dt><i>param_count:</i></dt><dd> number of parameters. -1 for any number.</dd><dt><i>flags:</i></dt><dd> flags which must be set in the method</dd></blockquote>
-<b>Remarks</b>
-<p />	 
-	 Obtains a MonoMethod with a given name and number of parameters.
-	 It only works if there are no multiple signatures for any given method name.
-
-</div></body>
-</html>
-</span>
\ No newline at end of file
diff --git a/docs/deploy/mono-api-codegen.html b/docs/deploy/mono-api-codegen.html
deleted file mode 100644
index ef2db8f..0000000
--- a/docs/deploy/mono-api-codegen.html
+++ /dev/null
@@ -1,162 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?><span>
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-   <title>mono-api-codegen.html</title>
-   <style type="text/css">
-
-
-   h3 { 
-       font-size: 18px;
-       padding-bottom: 4pt;
-       border-bottom: 2px solid #dddddd;
-   }
-       
-   .api {
-     border: 1px solid;
-     padding: 10pt;
-     margin: 10pt;
-   } 
-
-   .api-entry { 
-       border-bottom: none;
-       font-size: 18px;
-   }
-
-   .prototype {
-     border: 1px solid;
-     background-color: #f2f2f2;
-     padding: 5pt;
-     margin-top: 5pt;
-     margin-bottom: 5pt;  
-   } 
-
-   .header {
-     border: 1px solid;
-     padding: 0 0 5pt 5pt;
-     margin: 10pt;
-     white-space: pre;
-       font-family: monospace;
-   }
-    
-   .code {
-     border: 1px solid;
-     padding: 0 0 5pt 5pt;
-     margin: 10pt;
-     white-space: pre;
-       font-family: monospace;
-   }
-   
-
-</style>
-</head>
-<body>
-<h3>Code manager</h3>
-
- <a name="api:mono_code_manager_commit"></a>
- <div class="api">
-    <div class="api-entry">mono_code_manager_commit</div>
-
-    <div class="prototype">void
-mono_code_manager_commit (MonoCodeManager *cman, void *data, int size, int newsize)
-
-</div>
-<p />
-<b>Parameters</b>
-<blockquote><dt><i>cman:</i></dt><dd> a code manager</dd><dt><i>data:</i></dt><dd> the pointer returned by mono_code_manager_reserve ()</dd><dt><i>size:</i></dt><dd> the size requested in the call to mono_code_manager_reserve ()</dd><dt><i>newsize:</i></dt><dd> the new size to reserve</dd></blockquote>
-<b>Remarks</b>
-<p />	 
-	 If we reserved too much room for a method and we didn't allocate
-	 already from the code manager, we can get back the excess allocation
-	 for later use in the code manager.
-
-</div> <a name="api:mono_code_manager_destroy"></a>
- <div class="api">
-    <div class="api-entry">mono_code_manager_destroy</div>
-
-    <div class="prototype">void
-mono_code_manager_destroy (MonoCodeManager *cman)
-
-</div>
-<p />
-<b>Parameters</b>
-<blockquote><dt><i>cman:</i></dt><dd> a code manager</dd></blockquote>
-<b>Remarks</b>
-<p />	 
-	 Free all the memory associated with the code manager <i>cman</i>.
-
-</div> <a name="api:mono_code_manager_foreach"></a>
- <div class="api">
-    <div class="api-entry">mono_code_manager_foreach</div>
-
-    <div class="prototype">void
-mono_code_manager_foreach (MonoCodeManager *cman, MonoCodeManagerFunc func, void *user_data)
-
-</div>
-<p />
-<b>Parameters</b>
-<blockquote><dt><i>cman:</i></dt><dd> a code manager</dd><dt><i>func:</i></dt><dd> a callback function pointer</dd><dt><i>user_data:</i></dt><dd> additional data to pass to <i>func</i></dd></blockquote>
-<b>Remarks</b>
-<p />	 
-	 Invokes the callback <i>func</i> for each different chunk of memory allocated
-	 in the code manager <i>cman</i>.
-
-</div> <a name="api:mono_code_manager_invalidate"></a>
- <div class="api">
-    <div class="api-entry">mono_code_manager_invalidate</div>
-
-    <div class="prototype">void             
-mono_code_manager_invalidate (MonoCodeManager *cman)
-
-</div>
-<p />
-<b>Parameters</b>
-<blockquote><dt><i>cman:</i></dt><dd> a code manager</dd></blockquote>
-<b>Remarks</b>
-<p />	 
-	 Fill all the memory with an invalid native code value
-	 so that any attempt to execute code allocated in the code
-	 manager <i>cman</i> will fail. This is used for debugging purposes.
-
-</div> <a name="api:mono_code_manager_new_dynamic"></a>
- <div class="api">
-    <div class="api-entry">mono_code_manager_new_dynamic</div>
-
-    <div class="prototype">MonoCodeManager* 
-mono_code_manager_new_dynamic (void)
-
-</div>
-<p />
-<b>Returns</b>
-<blockquote>	  the new code manager
-</blockquote>
-<b>Remarks</b>
-<p />	 
-	 Creates a new code manager suitable for holding native code that can be
-	 used for single or small methods that need to be deallocated independently
-	 of other native code.
-	
-
-</div> <a name="api:mono_code_manager_new"></a>
- <div class="api">
-    <div class="api-entry">mono_code_manager_new</div>
-
-    <div class="prototype">MonoCodeManager* 
-mono_code_manager_new (void)
-
-</div>
-<p />
-<b>Returns</b>
-<blockquote>	  the new code manager
-</blockquote>
-<b>Remarks</b>
-<p />	 
-	 Creates a new code manager. A code manager can be used to allocate memory
-	 suitable for storing native code that can be later executed.
-	 A code manager allocates memory from the operating system in large chunks
-	 (typically 64KB in size) so that many methods can be allocated inside them
-	 close together, improving cache locality.
-	
-
-</div></body>
-</html>
-</span>
\ No newline at end of file
diff --git a/docs/deploy/mono-api-counters.html b/docs/deploy/mono-api-counters.html
deleted file mode 100644
index 886c38a..0000000
--- a/docs/deploy/mono-api-counters.html
+++ /dev/null
@@ -1,126 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?><span>
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-   <title>mono-api-counters.html</title>
-   <style type="text/css">
-
-
-   h3 { 
-       font-size: 18px;
-       padding-bottom: 4pt;
-       border-bottom: 2px solid #dddddd;
-   }
-       
-   .api {
-     border: 1px solid;
-     padding: 10pt;
-     margin: 10pt;
-   } 
-
-   .api-entry { 
-       border-bottom: none;
-       font-size: 18px;
-   }
-
-   .prototype {
-     border: 1px solid;
-     background-color: #f2f2f2;
-     padding: 5pt;
-     margin-top: 5pt;
-     margin-bottom: 5pt;  
-   } 
-
-   .header {
-     border: 1px solid;
-     padding: 0 0 5pt 5pt;
-     margin: 10pt;
-     white-space: pre;
-       font-family: monospace;
-   }
-    
-   .code {
-     border: 1px solid;
-     padding: 0 0 5pt 5pt;
-     margin: 10pt;
-     white-space: pre;
-       font-family: monospace;
-   }
-   
-
-</style>
-</head>
-<body>
-<h2>Counters</h2>
-	
-	<p />Counters is a Mono API for flexible statistics collection
-	and is used to track different events inside the JIT.
-
-        <p />You would typically register an address with the
-        <tt>mono_counters_register</tt> routine and increment the
-        counters from your application as you go.   At the end of the
-        program you would call mono_counters_dump which will display
-        all the registered counters.
-
-	<p />If you need more complicated counter computation, a
-        function can be provided instead of an address.  In that case
-        the <tt>MONO_COUNTER_CALLBACK</tt> flag must be ored in the
-        type request. 
-
-	<p />The types that can be rendered are:
-		
-<pre>
-       MONO_COUNTER_INT
-       MONO_COUNTER_UINT
-       MONO_COUNTER_WORD
-       MONO_COUNTER_LONG
-       MONO_COUNTER_ULONG
-       MONO_COUNTER_DOUBLE
-       MONO_COUNTER_STRING
-</pre>
-	
-	<p />To organize the output, you register also a section where
-	the counter will be displayed, or one of the following values
-	when you register your counter:
-
-<pre>
-
-       MONO_COUNTER_JIT
-       MONO_COUNTER_GC
-       MONO_COUNTER_METADATA
-       MONO_COUNTER_GENERICS
-       MONO_COUNTER_SECURITY
-</pre>
-	
- <a name="api:mono_counters_dump"></a>
- <div class="api">
-    <div class="api-entry">mono_counters_dump</div>
-
-    <div class="prototype">void
-mono_counters_dump (int section_mask, FILE *outfile)
-
-</div>
-<p />
-<b>Parameters</b>
-<blockquote><dt><i>section_mask:</i></dt><dd> The sections to dump counters for</dd><dt><i>outfile:</i></dt><dd> a FILE to dump the results to</dd></blockquote>
-<b>Remarks</b>
-<p />	 
-	 Displays the counts of all the enabled counters registered. 
-
-</div> <a name="api:mono_counters_enable"></a>
- <div class="api">
-    <div class="api-entry">mono_counters_enable</div>
-
-    <div class="prototype">void
-mono_counters_enable (int section_mask)
-
-</div>
-<p />
-<b>Parameters</b>
-<blockquote><dt><i>section_mask:</i></dt><dd> a mask listing the sections that will be displayed</dd></blockquote>
-<b>Remarks</b>
-<p />	 
-	 This is used to track which counters will be displayed.
-
-</div></body>
-</html>
-</span>
\ No newline at end of file
diff --git a/docs/deploy/mono-api-debug.html b/docs/deploy/mono-api-debug.html
deleted file mode 100644
index 78b31a3..0000000
--- a/docs/deploy/mono-api-debug.html
+++ /dev/null
@@ -1,180 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?><span>
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-   <title>mono-api-debug.html</title>
-   <style type="text/css">
-
-
-   h3 { 
-       font-size: 18px;
-       padding-bottom: 4pt;
-       border-bottom: 2px solid #dddddd;
-   }
-       
-   .api {
-     border: 1px solid;
-     padding: 10pt;
-     margin: 10pt;
-   } 
-
-   .api-entry { 
-       border-bottom: none;
-       font-size: 18px;
-   }
-
-   .prototype {
-     border: 1px solid;
-     background-color: #f2f2f2;
-     padding: 5pt;
-     margin-top: 5pt;
-     margin-bottom: 5pt;  
-   } 
-
-   .header {
-     border: 1px solid;
-     padding: 0 0 5pt 5pt;
-     margin: 10pt;
-     white-space: pre;
-       font-family: monospace;
-   }
-    
-   .code {
-     border: 1px solid;
-     padding: 0 0 5pt 5pt;
-     margin: 10pt;
-     white-space: pre;
-       font-family: monospace;
-   }
-   
-
-</style>
-</head>
-<body>
- <a name="api:mono_debug_il_offset_from_address"></a>
- <div class="api">
-    <div class="api-entry">mono_debug_il_offset_from_address</div>
-
-    <div class="prototype">gint32
-mono_debug_il_offset_from_address (MonoMethod *method, MonoDomain *domain, guint32 native_offset)
-
-</div>
-<p />
-<b>Remarks</b>
-<p />	 
-	   Compute the IL offset corresponding to NATIVE_OFFSET inside the native
-	 code of METHOD in DOMAIN.
-
-</div> <a name="api:mono_debug_add_method"></a>
- <div class="api">
-    <div class="api-entry">mono_debug_add_method</div>
-
-    <div class="prototype">Prototype: mono_debug_add_method</div>
-<p />
-
-</div> <a name="api:mono_debug_close_mono_symbol_file"></a>
- <div class="api">
-    <div class="api-entry">mono_debug_close_mono_symbol_file</div>
-
-    <div class="prototype">Prototype: mono_debug_close_mono_symbol_file</div>
-<p />
-
-</div> <a name="api:mono_debug_find_method"></a>
- <div class="api">
-    <div class="api-entry">mono_debug_find_method</div>
-
-    <div class="prototype">Prototype: mono_debug_find_method</div>
-<p />
-
-</div> <a name="api:mono_debug_using_mono_debugger"></a>
- <div class="api">
-    <div class="api-entry">mono_debug_using_mono_debugger</div>
-
-    <div class="prototype">Prototype: mono_debug_using_mono_debugger</div>
-<p />
-
-
-</div><h3>Mono Debugger Interface</h3>
-
-	<p />These are methods that are invoked by the debugger at
-	runtime.
-	
- <a name="api:mono_debugger_breakpoint_callback"></a>
- <div class="api">
-    <div class="api-entry">mono_debugger_breakpoint_callback</div>
-
-    <div class="prototype">Prototype: mono_debugger_breakpoint_callback</div>
-<p />
-
-</div> <a name="api:mono_debugger_check_runtime_version"></a>
- <div class="api">
-    <div class="api-entry">mono_debugger_check_runtime_version</div>
-
-    <div class="prototype">Prototype: mono_debugger_check_runtime_version</div>
-<p />
-
-</div> <a name="api:mono_debugger_event"></a>
- <div class="api">
-    <div class="api-entry">mono_debugger_event</div>
-
-    <div class="prototype">Prototype: mono_debugger_event</div>
-<p />
-
-</div> <a name="api:mono_debugger_handle_exception"></a>
- <div class="api">
-    <div class="api-entry">mono_debugger_handle_exception</div>
-
-    <div class="prototype">Prototype: mono_debugger_handle_exception</div>
-<p />
-
-</div> <a name="api:mono_debugger_insert_breakpoint_full"></a>
- <div class="api">
-    <div class="api-entry">mono_debugger_insert_breakpoint_full</div>
-
-    <div class="prototype">Prototype: mono_debugger_insert_breakpoint_full</div>
-<p />
-
-</div> <a name="api:mono_debugger_insert_breakpoint"></a>
- <div class="api">
-    <div class="api-entry">mono_debugger_insert_breakpoint</div>
-
-    <div class="prototype">Prototype: mono_debugger_insert_breakpoint</div>
-<p />
-
-</div> <a name="api:mono_debugger_lock"></a>
- <div class="api">
-    <div class="api-entry">mono_debugger_lock</div>
-
-    <div class="prototype">Prototype: mono_debugger_lock</div>
-<p />
-
-</div> <a name="api:mono_debugger_method_has_breakpoint"></a>
- <div class="api">
-    <div class="api-entry">mono_debugger_method_has_breakpoint</div>
-
-    <div class="prototype">Prototype: mono_debugger_method_has_breakpoint</div>
-<p />
-
-</div> <a name="api:mono_debugger_remove_breakpoint"></a>
- <div class="api">
-    <div class="api-entry">mono_debugger_remove_breakpoint</div>
-
-    <div class="prototype">Prototype: mono_debugger_remove_breakpoint</div>
-<p />
-
-</div> <a name="api:mono_debugger_runtime_invoke"></a>
- <div class="api">
-    <div class="api-entry">mono_debugger_runtime_invoke</div>
-
-    <div class="prototype">Prototype: mono_debugger_runtime_invoke</div>
-<p />
-
-</div> <a name="api:mono_debugger_unlock"></a>
- <div class="api">
-    <div class="api-entry">mono_debugger_unlock</div>
-
-    <div class="prototype">Prototype: mono_debugger_unlock</div>
-<p />
-
-</div></body>
-</html>
-</span>
\ No newline at end of file
diff --git a/docs/deploy/mono-api-domains.html b/docs/deploy/mono-api-domains.html
deleted file mode 100644
index 3966740..0000000
--- a/docs/deploy/mono-api-domains.html
+++ /dev/null
@@ -1,307 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?><span>
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-   <title>mono-api-domains.html</title>
-   <style type="text/css">
-
-
-   h3 { 
-       font-size: 18px;
-       padding-bottom: 4pt;
-       border-bottom: 2px solid #dddddd;
-   }
-       
-   .api {
-     border: 1px solid;
-     padding: 10pt;
-     margin: 10pt;
-   } 
-
-   .api-entry { 
-       border-bottom: none;
-       font-size: 18px;
-   }
-
-   .prototype {
-     border: 1px solid;
-     background-color: #f2f2f2;
-     padding: 5pt;
-     margin-top: 5pt;
-     margin-bottom: 5pt;  
-   } 
-
-   .header {
-     border: 1px solid;
-     padding: 0 0 5pt 5pt;
-     margin: 10pt;
-     white-space: pre;
-       font-family: monospace;
-   }
-    
-   .code {
-     border: 1px solid;
-     padding: 0 0 5pt 5pt;
-     margin: 10pt;
-     white-space: pre;
-       font-family: monospace;
-   }
-   
-
-</style>
-</head>
-<body>
-<h2>Application Domains</h2>
-
-<h3>Synopsis</h3>
-
-<div class="header">
-#include <metadata/appdomain.h>
-
-/* Managed AppDomain */
-typedef struct _MonoAppDomain MonoAppDomain;
-
-/* Unmanaged representation */
-typedef struct _MonoDomain MonoDomain;
-
-/* Represents System.Runtime.Remoting.Contexts.Context */
-typedef struct _MonoAppContext MonoAppContext
-MonoAssembly*           <a href="#api:mono_domain_assembly_open">mono_domain_assembly_open</a>    (MonoDomain *domain, 
-                                                      const char *name);
-                        <a href="#api:mono_domain_create"></a>                             
-gboolean                <a href="#api:mono_domain_finalize">mono_domain_finalize</a>         (MonoDomain *domain, 
-                                                      guint32 timeout) ;
-                        <a href="#api:mono_domain_foreach"></a>                             
-                        <a href="#api:mono_domain_free"></a>                             
-                        <a href="#api:mono_domain_get_by_id"></a>                             
-MonoDomain*             <a href="#api:mono_domain_get_id">mono_domain_get_by_id</a>        (gint32 domainid) ;
-MonoDomain*             <a href="#api:mono_domain_get">mono_domain_get</a>              ();
-gboolean                <a href="#api:mono_domain_has_type_resolve">mono_domain_has_type_resolve</a> (MonoDomain *domain);
-                        <a href="#api:mono_domain_is_unloading"></a>                             
-void                    <a href="#api:mono_domain_set_internal">mono_domain_set_internal</a>     (MonoDomain *domain);
-gboolean                <a href="#api:mono_domain_set">mono_domain_set</a>              (MonoDomain *domain, 
-                                                      gboolean force);
-MonoReflectionAssembly* <a href="#api:mono_domain_try_type_resolve">mono_domain_try_type_resolve</a> (MonoDomain *domain, 
-                                                      char *name, 
-                                                      MonoObject *tb);
-gboolean                <a href="#api:mono_domain_owns_vtable_slot">mono_domain_owns_vtable_slot</a> (MonoDomain *domain, 
-                                                      gpointer vtable_slot);
-                        <a href="#api:mono_context_get"></a>                             
-                        <a href="#api:mono_context_set"></a>                             
-
-</div>
-
-	<p />Application domains are used to isolate multiple
-	applications on a single Mono virtual machine.  They are
-	conceptually similiar to processes, the difference is that
-	processes are managed by the operating system, while
-	application domains are managed by the Mono virtual machine.
-
-	<p />For more information on applications domains see the <a href="http://www.gotdotnet.com/team/clr/AppdomainFAQ.aspx">AppDomain FAQ</a>.
-		
-	<p />The <tt>MonoDomain</tt> is the unmanaged representation of
-	the <a href="http://www.mono-project.com/monodoc/T:System.AppDomain">System.AppDomain</a>
-	managed type, while the <tt>MonoAppDomain</tt> type represents
-	the managed version (<tt>MonoAppDomain</tt> has a pointer to
-	a <tt>MonoDomain</tt>).
-
- <a name="api:mono_domain_assembly_open"></a>
- <div class="api">
-    <div class="api-entry">mono_domain_assembly_open</div>
-
-    <div class="prototype">MonoAssembly*
-mono_domain_assembly_open (MonoDomain *domain, const char *name)
-
-</div>
-<p />
-<b>Parameters</b>
-<blockquote><dt><i>domain:</i></dt><dd> the application domain</dd><dt><i>name:</i></dt><dd> file name of the assembly</dd></blockquote>
-<b>Remarks</b>
-<p />	 
-	 fixme: maybe we should integrate this with mono_assembly_open ??
-
-</div> <a name="api:mono_domain_create"></a>
- <div class="api">
-    <div class="api-entry">mono_domain_create</div>
-
-    <div class="prototype">Prototype: mono_domain_create</div>
-<p />
-
-</div> <a name="api:mono_domain_finalize"></a>
- <div class="api">
-    <div class="api-entry">mono_domain_finalize</div>
-
-    <div class="prototype">
-gboolean
-mono_domain_finalize (MonoDomain *domain, guint32 timeout) 
-
-</div>
-<p />
-<b>Parameters</b>
-<blockquote><dt><i>domain:</i></dt><dd> the domain to finalize</dd><dt><i>timeout:</i></dt><dd> msects to wait for the finalization to complete, -1 to wait indefinitely</dd></blockquote>
-<b>Returns</b>
-<blockquote>	  TRUE if succeeded, FALSE if there was a timeout
-</blockquote>
-<b>Remarks</b>
-<p />	 
-	  Request finalization of all finalizable objects inside <i>domain</i>. Wait
-	 <i>timeout</i> msecs for the finalization to complete.
-	
-
-</div> <a name="api:mono_domain_foreach"></a>
- <div class="api">
-    <div class="api-entry">mono_domain_foreach</div>
-
-    <div class="prototype">Prototype: mono_domain_foreach</div>
-<p />
-
-</div> <a name="api:mono_domain_free"></a>
- <div class="api">
-    <div class="api-entry">mono_domain_free</div>
-
-    <div class="prototype">Prototype: mono_domain_free</div>
-<p />
-
-</div> <a name="api:mono_domain_get_by_id"></a>
- <div class="api">
-    <div class="api-entry">mono_domain_get_by_id</div>
-
-    <div class="prototype">Prototype: mono_domain_get_by_id</div>
-<p />
-
-</div> <a name="api:mono_domain_get_id"></a>
- <div class="api">
-    <div class="api-entry">mono_domain_get_id</div>
-
-    <div class="prototype">MonoDomain* 
-mono_domain_get_by_id (gint32 domainid) 
-
-</div>
-<p />
-<b>Parameters</b>
-<blockquote><dt><i>domainid:</i></dt><dd> the ID</dd></blockquote>
-<b>Returns</b>
-<blockquote>	  the a domain for a specific domain id.
-</blockquote>
-
-</div> <a name="api:mono_domain_get"></a>
- <div class="api">
-    <div class="api-entry">mono_domain_get</div>
-
-    <div class="prototype">MonoDomain*
-mono_domain_get ()
-
-</div>
-<p />
-<b>Returns</b>
-<blockquote>	  the current domain, to obtain the root domain use
-
-	 mono_get_root_domain().</blockquote>
-
-</div> <a name="api:mono_domain_has_type_resolve"></a>
- <div class="api">
-    <div class="api-entry">mono_domain_has_type_resolve</div>
-
-    <div class="prototype">gboolean
-mono_domain_has_type_resolve (MonoDomain *domain)
-
-</div>
-<p />
-<b>Parameters</b>
-<blockquote><dt><i>domain:</i></dt><dd> application domains being looked up</dd></blockquote>
-<b>Remarks</b>
-<p />	 
-	 Returns true if the AppDomain.TypeResolve field has been
-	 set.
-
-</div> <a name="api:mono_domain_is_unloading"></a>
- <div class="api">
-    <div class="api-entry">mono_domain_is_unloading</div>
-
-    <div class="prototype">Prototype: mono_domain_is_unloading</div>
-<p />
-
-</div> <a name="api:mono_domain_set_internal"></a>
- <div class="api">
-    <div class="api-entry">mono_domain_set_internal</div>
-
-    <div class="prototype">void
-mono_domain_set_internal (MonoDomain *domain)
-
-</div>
-<p />
-<b>Parameters</b>
-<blockquote><dt><i>domain:</i></dt><dd> the new domain</dd></blockquote>
-<b>Remarks</b>
-<p />	 
-	 Sets the current domain to <i>domain</i>.
-
-</div> <a name="api:mono_domain_set"></a>
- <div class="api">
-    <div class="api-entry">mono_domain_set</div>
-
-    <div class="prototype">gboolean
-mono_domain_set (MonoDomain *domain, gboolean force)
-
-</div>
-<p />
-<b>Parameters</b>
-<blockquote><dt><i>domain:</i></dt><dd> domain</dd><dt><i>force:</i></dt><dd> force setting.</dd></blockquote>
-<b>Returns</b>
-<blockquote>	 
-
-	   TRUE on success;
-	   FALSE if the domain is unloaded</blockquote>
-<b>Remarks</b>
-<p />	 
-	 Set the current appdomain to <i>domain</i>. If <i>force</i> is set, set it even
-	 if it is being unloaded.
-	
-
-</div> <a name="api:mono_domain_try_type_resolve"></a>
- <div class="api">
-    <div class="api-entry">mono_domain_try_type_resolve</div>
-
-    <div class="prototype">MonoReflectionAssembly*
-mono_domain_try_type_resolve (MonoDomain *domain, char *name, MonoObject *tb)
-
-</div>
-<p />
-<b>Parameters</b>
-<blockquote><dt><i>domain:</i></dt><dd> application domainwhere the name where the type is going to be resolved</dd><dt><i>name:</i></dt><dd> the name of the type to resolve or NULL.</dd><dt><i>tb:</i></dt><dd> A System.Reflection.Emit.TypeBuilder, used if name is NULL.</dd></blockquote>
-<b>Returns</b>
-<blockquote>	  A MonoReflectionAssembly or NULL if not found
-</blockquote>
-<b>Remarks</b>
-<p />	 
-	 This routine invokes the internal System.AppDomain.DoTypeResolve and returns
-	 the assembly that matches name.
-	
-	 If <i>name</i> is null, the value of ((TypeBuilder)tb).FullName is used instead
-	
-
-</div> <a name="api:mono_domain_owns_vtable_slot"></a>
- <div class="api">
-    <div class="api-entry">mono_domain_owns_vtable_slot</div>
-
-    <div class="prototype">gboolean
-mono_domain_owns_vtable_slot (MonoDomain *domain, gpointer vtable_slot)
-
-</div>
-<p />
-<b>Remarks</b>
-<p />	 
-	  Returns whenever VTABLE_SLOT is inside a vtable which belongs to DOMAIN.
-
-
-</div><h3>Contexts</h3>
-
- <a name="api:mono_context_get"></a>
- <div class="api">
-    <div class="api-entry">mono_context_get</div>
-
-    <div class="prototype">Prototype: mono_context_get</div>
-<p />
-
-</div></body>
-</html>
-</span>
\ No newline at end of file
diff --git a/docs/deploy/mono-api-dynamic-codegen.html b/docs/deploy/mono-api-dynamic-codegen.html
deleted file mode 100644
index e97ef81..0000000
--- a/docs/deploy/mono-api-dynamic-codegen.html
+++ /dev/null
@@ -1,362 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?><span>
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-   <title>mono-api-dynamic-codegen.html</title>
-   <style type="text/css">
-
-
-   h3 { 
-       font-size: 18px;
-       padding-bottom: 4pt;
-       border-bottom: 2px solid #dddddd;
-   }
-       
-   .api {
-     border: 1px solid;
-     padding: 10pt;
-     margin: 10pt;
-   } 
-
-   .api-entry { 
-       border-bottom: none;
-       font-size: 18px;
-   }
-
-   .prototype {
-     border: 1px solid;
-     background-color: #f2f2f2;
-     padding: 5pt;
-     margin-top: 5pt;
-     margin-bottom: 5pt;  
-   } 
-
-   .header {
-     border: 1px solid;
-     padding: 0 0 5pt 5pt;
-     margin: 10pt;
-     white-space: pre;
-       font-family: monospace;
-   }
-    
-   .code {
-     border: 1px solid;
-     padding: 0 0 5pt 5pt;
-     margin: 10pt;
-     white-space: pre;
-       font-family: monospace;
-   }
-   
-
-</style>
-</head>
-<body>
-<h2>Dynamic Code Generation</h2>
-
-	<p />The dynamic code generation interface inside the Mono
-	runtime is similar to the API exposed by
-	System.Reflection.Emit.
-
-	<p />This interface is used by Mono internally to generate code
-	on the flight in a cross-platform fashion.  For example,
-	P/Invoke marshalling in Mono is implemented in terms of this
-	interface, but it is also used in various other parts of the
-	runtime.
-
-	<p />Unlike Reflection.Emit, the dynamic code generation
-	interface does not start with an assembly builder.   The code
-	generation interface starts directly at the method level,
-	which is represented by a pointer to the MonoMethodBuilder
-	structure.
-
-	<p />To JIT this method, the process is this:
-
-	<ul>
-		<li>Create a <tt>MonoMethodBuilder</tt> object using
-		the <tt>mono_mb_new</tt> method.  The method's class
-		is specified as the first argument.
-
-		<li>Create the method signature, using
-		<tt>mono_metadata_signature_alloc</tt>.  The call
-		takes the number of arguments that the method takes.
-		Then you must initialize the types for each one of the
-		parameters.
-
-		<li>Emit the CIL code, using one of the
-		<tt>mono_mb_emit_*</tt> functions.   There are some
-		helper routines that you can use.
-
-		<li>Create the <tt>MonoMethod</tt> from the
-		<tt>MethodBuilder</tt> using
-		<tt>mono_mb_create_method</tt>.
-
-		<li>Release the <tt>MonoMethodBuilder</tt> resources
-		using mono_mb_free. 
-	</li></li></li></li></li></ul>
-
-	<p />The result of this process is a <tt>MonoMethod</tt> which
-	can be called using <tt><a href="api:mono_create_jit_trampoline">mono_create_jit_trampoline</a></tt>
-	routine or can be passed to any other functions that require
-	the MonoMethod.
-
-	<p />Example:
-
-	<pre>
-MonoMethod *adder ()
-{
-    MonoMethodBuilder *mb;
-    MonoMethodSignature *sig;
-    MonoMethod *method;
-    
-    mb = mono_mb_new (mono_defaults.object_class, "adder", MONO_WRAPPER_NONE);
-
-    /* Setup method signature */
-    sig = mono_metadata_signature_alloc (2);
-    sig->ret = &mono_get_int32_class ()->byval_arg;
-    sig->params [0] = &mono_get_int32_class ()->byval_arg;
-    sig->params [1] = &mono_defaults.int32_class->byval_arg;
-
-    /* Emit CIL code */
-    mono_mb_emit_ldarg (mb, 0);
-    mono_mb_emit_ldarg (mb, 1);
-    mono_mb_emit_byte (mb, CEE_ADD);
-    mono_mb_emit_byte (mb, CEE_RET);
-
-    /* Get the method */
-    method = mono_mb_create_method (mb, sig, max_stack);
-    
-    /* Cleanup */
-    mono_mb-free (mb);
-    return method;
-}
-	</pre>
-	
- <a name="api:mono_mb_new"></a>
- <div class="api">
-    <div class="api-entry">mono_mb_new</div>
-
-    <div class="prototype">Prototype: mono_mb_new</div>
-<p />
-
-
-	<p />The possible values for the <i>type</i> argument are:
-
-<pre>
-        MONO_WRAPPER_NONE
-        MONO_WRAPPER_DELEGATE_INVOKE
-        MONO_WRAPPER_DELEGATE_BEGIN_INVOKE
-        MONO_WRAPPER_DELEGATE_END_INVOKE
-        MONO_WRAPPER_RUNTIME_INVOKE
-        MONO_WRAPPER_NATIVE_TO_MANAGED
-        MONO_WRAPPER_MANAGED_TO_NATIVE
-        MONO_WRAPPER_REMOTING_INVOKE
-        MONO_WRAPPER_REMOTING_INVOKE_WITH_CHECK
-        MONO_WRAPPER_XDOMAIN_INVOKE
-        MONO_WRAPPER_XDOMAIN_DISPATCH
-        MONO_WRAPPER_LDFLD
-        MONO_WRAPPER_STFLD
-        MONO_WRAPPER_LDFLD_REMOTE
-        MONO_WRAPPER_STFLD_REMOTE
-        MONO_WRAPPER_SYNCHRONIZED
-        MONO_WRAPPER_DYNAMIC_METHOD
-        MONO_WRAPPER_ISINST
-        MONO_WRAPPER_CASTCLASS
-        MONO_WRAPPER_PROXY_ISINST
-        MONO_WRAPPER_STELEMREF
-        MONO_WRAPPER_UNBOX
-        MONO_WRAPPER_LDFLDA
-        MONO_WRAPPER_UNKNOWN
-</pre>
-
-</div><h3>Emitting IL</h3>
-
-	<p />Functions that can be used to generate IL on the flight,
-	similar in spirit to System.Reflection.Emit.ILGenerator.
-	
- <a name="api:mono_mb_emit_add_to_local"></a>
- <div class="api">
-    <div class="api-entry">mono_mb_emit_add_to_local</div>
-
-    <div class="prototype">Prototype: mono_mb_emit_add_to_local</div>
-<p />
-
-</div> <a name="api:mono_mb_emit_branch"></a>
- <div class="api">
-    <div class="api-entry">mono_mb_emit_branch</div>
-
-    <div class="prototype">Prototype: mono_mb_emit_branch</div>
-<p />
-
-</div> <a name="api:mono_mb_emit_byte"></a>
- <div class="api">
-    <div class="api-entry">mono_mb_emit_byte</div>
-
-    <div class="prototype">Prototype: mono_mb_emit_byte</div>
-<p />
-
-</div> <a name="api:mono_mb_emit_exception"></a>
- <div class="api">
-    <div class="api-entry">mono_mb_emit_exception</div>
-
-    <div class="prototype">Prototype: mono_mb_emit_exception</div>
-<p />
-
-</div> <a name="api:mono_mb_emit_i2"></a>
- <div class="api">
-    <div class="api-entry">mono_mb_emit_i2</div>
-
-    <div class="prototype">Prototype: mono_mb_emit_i2</div>
-<p />
-
-</div> <a name="api:mono_mb_emit_i4"></a>
- <div class="api">
-    <div class="api-entry">mono_mb_emit_i4</div>
-
-    <div class="prototype">Prototype: mono_mb_emit_i4</div>
-<p />
-
-</div> <a name="api:mono_mb_emit_icon"></a>
- <div class="api">
-    <div class="api-entry">mono_mb_emit_icon</div>
-
-    <div class="prototype">Prototype: mono_mb_emit_icon</div>
-<p />
-
-</div> <a name="api:mono_mb_emit_ldarg_addr"></a>
- <div class="api">
-    <div class="api-entry">mono_mb_emit_ldarg_addr</div>
-
-    <div class="prototype">Prototype: mono_mb_emit_ldarg_addr</div>
-<p />
-
-</div> <a name="api:mono_mb_emit_ldarg"></a>
- <div class="api">
-    <div class="api-entry">mono_mb_emit_ldarg</div>
-
-    <div class="prototype">Prototype: mono_mb_emit_ldarg</div>
-<p />
-
-</div> <a name="api:mono_mb_emit_ldflda"></a>
- <div class="api">
-    <div class="api-entry">mono_mb_emit_ldflda</div>
-
-    <div class="prototype">Prototype: mono_mb_emit_ldflda</div>
-<p />
-
-</div> <a name="api:mono_mb_emit_ldloc_addr"></a>
- <div class="api">
-    <div class="api-entry">mono_mb_emit_ldloc_addr</div>
-
-    <div class="prototype">Prototype: mono_mb_emit_ldloc_addr</div>
-<p />
-
-</div> <a name="api:mono_mb_emit_ldloc"></a>
- <div class="api">
-    <div class="api-entry">mono_mb_emit_ldloc</div>
-
-    <div class="prototype">Prototype: mono_mb_emit_ldloc</div>
-<p />
-
-</div> <a name="api:mono_mb_emit_ldstr"></a>
- <div class="api">
-    <div class="api-entry">mono_mb_emit_ldstr</div>
-
-    <div class="prototype">Prototype: mono_mb_emit_ldstr</div>
-<p />
-
-</div> <a name="api:mono_mb_emit_managed_call"></a>
- <div class="api">
-    <div class="api-entry">mono_mb_emit_managed_call</div>
-
-    <div class="prototype">Prototype: mono_mb_emit_managed_call</div>
-<p />
-
-</div> <a name="api:mono_mb_emit_native_call"></a>
- <div class="api">
-    <div class="api-entry">mono_mb_emit_native_call</div>
-
-    <div class="prototype">Prototype: mono_mb_emit_native_call</div>
-<p />
-
-</div> <a name="api:mono_mb_emit_stloc"></a>
- <div class="api">
-    <div class="api-entry">mono_mb_emit_stloc</div>
-
-    <div class="prototype">Prototype: mono_mb_emit_stloc</div>
-<p />
-
-
-</div><h3>Local variables and Methods</h3>
- <a name="api:mono_mb_create_method"></a>
- <div class="api">
-    <div class="api-entry">mono_mb_create_method</div>
-
-    <div class="prototype">MonoMethod*
-mono_mb_create_method (MonoMethodBuilder *mb, MonoMethodSignature *signature, int max_stack)
-
-</div>
-<p />
-<b>Returns</b>
-<blockquote>	  the newly created method.
-
-	
-	 LOCKING: Takes the loader lock.</blockquote>
-<b>Remarks</b>
-<p />	 
-	 Create a MonoMethod from this method builder.
-
-</div> <a name="api:mono_mb_add_data"></a>
- <div class="api">
-    <div class="api-entry">mono_mb_add_data</div>
-
-    <div class="prototype">Prototype: mono_mb_add_data</div>
-<p />
-
-</div> <a name="api:mono_mb_add_local"></a>
- <div class="api">
-    <div class="api-entry">mono_mb_add_local</div>
-
-    <div class="prototype">Prototype: mono_mb_add_local</div>
-<p />
-
-</div> <a name="api:mono_mb_free"></a>
- <div class="api">
-    <div class="api-entry">mono_mb_free</div>
-
-    <div class="prototype">Prototype: mono_mb_free</div>
-<p />
-
-
-</div><h3>Patching Addresses</h3>
- <a name="api:mono_mb_patch_addr"></a>
- <div class="api">
-    <div class="api-entry">mono_mb_patch_addr</div>
-
-    <div class="prototype">Prototype: mono_mb_patch_addr</div>
-<p />
-
-</div> <a name="api:mono_mb_patch_addr_s"></a>
- <div class="api">
-    <div class="api-entry">mono_mb_patch_addr_s</div>
-
-    <div class="prototype">Prototype: mono_mb_patch_addr_s</div>
-<p />
-
-
-</div><h3>Method Signatures</h3>
- <a name="api:mono_metadata_signature_alloc"></a>
- <div class="api">
-    <div class="api-entry">mono_metadata_signature_alloc</div>
-
-    <div class="prototype">Prototype: mono_metadata_signature_alloc</div>
-<p />
-
-</div> <a name="api:mono_metadata_signature_dup"></a>
- <div class="api">
-    <div class="api-entry">mono_metadata_signature_dup</div>
-
-    <div class="prototype">Prototype: mono_metadata_signature_dup</div>
-<p />
-
-</div></body>
-</html>
-</span>
\ No newline at end of file
diff --git a/docs/deploy/mono-api-embedding.html b/docs/deploy/mono-api-embedding.html
deleted file mode 100644
index 1c4cef5..0000000
--- a/docs/deploy/mono-api-embedding.html
+++ /dev/null
@@ -1,428 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?><span>
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-   <title>mono-api-embedding.html</title>
-   <style type="text/css">
-
-
-   h3 { 
-       font-size: 18px;
-       padding-bottom: 4pt;
-       border-bottom: 2px solid #dddddd;
-   }
-       
-   .api {
-     border: 1px solid;
-     padding: 10pt;
-     margin: 10pt;
-   } 
-
-   .api-entry { 
-       border-bottom: none;
-       font-size: 18px;
-   }
-
-   .prototype {
-     border: 1px solid;
-     background-color: #f2f2f2;
-     padding: 5pt;
-     margin-top: 5pt;
-     margin-bottom: 5pt;  
-   } 
-
-   .header {
-     border: 1px solid;
-     padding: 0 0 5pt 5pt;
-     margin: 10pt;
-     white-space: pre;
-       font-family: monospace;
-   }
-    
-   .code {
-     border: 1px solid;
-     padding: 0 0 5pt 5pt;
-     margin: 10pt;
-     white-space: pre;
-       font-family: monospace;
-   }
-   
-
-</style>
-</head>
-<body>
-<h2>Embedding Mono</h2>
-
-	<p />The simplest way of embedding Mono is illustrated here:
-<pre>
-int main (int argc, char *argv)
-{
-	/*
-	 * Load the default Mono configuration file, this is needed
-	 * if you are planning on using the dllmaps defined on the
-	 * system configuration
-	 */
-	mono_config_parse (NULL);
-
-	/*
-	 * mono_jit_init() creates a domain: each assembly is
-	 * loaded and run in a MonoDomain.
-	 */
-	MonoDomain *domain = mono_jit_init ("startup.exe");
-
-	/*
-	 * Optionally, add an internal call that your startup.exe
-	 * code can call, this will bridge startup.exe to Mono
-	 */
-	mono_add_internal_call ("Sample::GetMessage", getMessage);
-
-	/*
-	 * Open the executable, and run the Main method declared
-	 * in the executable
-	 */
-	MonoAssembly *assembly = mono_domain_assembly_open (domain, "startup.exe");
-
-	if (!assembly)
-		exit (2);
-	/*
-	 * mono_jit_exec() will run the Main() method in the assembly.
-	 * The return value needs to be looked up from
-	 * System.Environment.ExitCode.
-	 */
-	mono_jit_exec (domain, assembly, argc, argv);
-}
-
-/* The C# signature for this method is: string GetMessage () in class Sample */
-MonoString*
-getMessage ()
-{
-	return mono_string_new (mono_domain_get (), "Hello, world");
-}
-</pre>
-
- <a name="api:mono_jit_init"></a>
- <div class="api">
-    <div class="api-entry">mono_jit_init</div>
-
-    <div class="prototype">Prototype: mono_jit_init</div>
-<p />
-
-</div> <a name="api:mono_jit_exec"></a>
- <div class="api">
-    <div class="api-entry">mono_jit_exec</div>
-
-    <div class="prototype">int 
-mono_jit_exec (MonoDomain *domain, MonoAssembly *assembly, int argc, char *argv[])
-
-</div>
-<p />
-<b>Parameters</b>
-<blockquote><dt><i>assembly:</i></dt><dd> reference to an assembly</dd><dt><i>argc:</i></dt><dd> argument count</dd><dt><i>argv:</i></dt><dd> argument vector</dd></blockquote>
-<b>Remarks</b>
-<p />	 
-	 Start execution of a program.
-
-</div> <a name="api:mono_set_dirs"></a>
- <div class="api">
-    <div class="api-entry">mono_set_dirs</div>
-
-    <div class="prototype">void
-mono_set_dirs (const char *assembly_dir, const char *config_dir)
-
-</div>
-<p />
-<b>Parameters</b>
-<blockquote><dt><i>assembly_dir:</i></dt><dd> the base directory for assemblies</dd><dt><i>config_dir:</i></dt><dd> the base directory for configuration files</dd></blockquote>
-<b>Remarks</b>
-<p />	 
-	 This routine is used internally and by developers embedding
-	 the runtime into their own applications.
-	
-	 There are a number of cases to consider: Mono as a system-installed
-	 package that is available on the location preconfigured or Mono in
-	 a relocated location.
-	
-	 If you are using a system-installed Mono, you can pass NULL
-	 to both parameters.  If you are not, you should compute both
-	 directory values and call this routine.
-	
-	 The values for a given PREFIX are:
-	
-	    assembly_dir: PREFIX/lib
-	    config_dir:   PREFIX/etc
-	
-	 Notice that embedders that use Mono in a relocated way must
-	 compute the location at runtime, as they will be in control
-	 of where Mono is installed.
-
-</div> <a name="api:mono_main"></a>
- <div class="api">
-    <div class="api-entry">mono_main</div>
-
-    <div class="prototype">int
-mono_main (int argc, char* argv[])
-
-</div>
-<p />
-<b>Parameters</b>
-<blockquote><dt><i>argc:</i></dt><dd> number of arguments in the argv array</dd><dt><i>argv:</i></dt><dd> array of strings containing the startup arguments</dd></blockquote>
-<b>Remarks</b>
-<p />	 
-	 Launches the Mono JIT engine and parses all the command line options
-	 in the same way that the mono command line VM would.
-
-</div> <a name="api:mono_parse_default_optimizations"></a>
- <div class="api">
-    <div class="api-entry">mono_parse_default_optimizations</div>
-
-    <div class="prototype">Prototype: mono_parse_default_optimizations</div>
-<p />
-
-
-</div> <a name="api:mono_jit_cleanup"></a>
- <div class="api">
-    <div class="api-entry">mono_jit_cleanup</div>
-
-    <div class="prototype">Prototype: mono_jit_cleanup</div>
-<p />
-
-</div> <a name="api:mono_set_defaults"></a>
- <div class="api">
-    <div class="api-entry">mono_set_defaults</div>
-
-    <div class="prototype">Prototype: mono_set_defaults</div>
-<p />
-
-
-</div><h3>Internal Calls</h3>
-
-	<p />The Mono runtime provides two mechanisms to expose C code
-	to the CIL universe: internal calls and native C
-	code. Internal calls are tightly integrated with the runtime,
-	and have the least overhead, as they use the same data types
-	that the runtime uses.
-
-	<p />The other option is to use the Platform Invoke (P/Invoke)
-	to call C code from the CIL universe, using the standard
-	<a href="http://www.mono-project.com/Interop_with_Native_Libraries">P/Invoke</a>
-	mechanisms.
-
-	<p />To register an internal call, use this call you use the
-	<a href="#api:mono_add_internal_call"><tt>mono_add_internal_call</tt>
-	routine.
-
- <a name="api:mono_add_internal_call"></a>
- <div class="api">
-    <div class="api-entry">mono_add_internal_call</div>
-
-    <div class="prototype">Prototype: mono_add_internal_call</div>
-<p />
-
-
-</div><h3>P/Invoke with embedded applications</h3>
-
-	<p />Unlike internal calls, Platform/Invoke is easier to use and
-	more portable.  It allows you to share code with Windows and
-	.NET that have a different setup for internal calls to their
-	own runtime.
-
-	<p />Usually P/Invoke declarations reference external libraries
-	like:
-
-	<pre>
-	[DllImport ("opengl")]
-	void glBegin (GLEnum mode)
-	</pre>
-
-	<p />Mono extends P/Invoke to support looking up symbols not in
-	an external library, but looking up those symbols into the
-	same address space as your program, to do this, use the
-	special library name "__Internal".   This will direct Mono to
-	lookup the method in your own process.
-
-	<p />There are situations where the host operating system does
-	not support looking up symbols on the process address space.
-	For situations like this you can use
-	the <a href="#api:mono_dl_register_library">mono_dl_register_library</a>. 
-
-<h4><a name="api:mono_dl_register_library">mono_dl_register_library</a></h4>
-	
-<h3>Data Marshalling</h3>
-
-	<p />Managed objects are represented as <tt>MonoObject*</tt>
-	types.  Those objects that the runtime consumes directly have
-	more specific C definitions (for example strings are of type
-	<tt>MonoString *</tt>, delegates are of type
-	<tt>MonoDelegate*</tt> but they are still <tt>MonoObject
-	*</tt>s).
-
-	<p />As of Mono 1.2.x types defined in mscorlib.dll do not have
-	their fields reordered in any way.   But other libraries might
-	have their fields reordered.   In these cases, Managed
-	structures and objects have the same layout in the C# code as
-	they do in the unmanaged world.
-
-	<p />Structures defined outside corlib must have a specific
-	StructLayout definition, and have it set as sequential if you
-	plan on accessing these fields directly from C code.
-
-	<p /><b>Important</b> Internal calls do not provide support for
-	marshalling structures.  This means that any API calls that
-	take a structure (excluding the system types like int32,
-	int64, etc) must be passed as a pointer, in C# this means
-	passing the value as a "ref" or "out" parameter.
-
-<h3>Mono Runtime Configuration</h3>
-
-	<p />Certain features of the Mono runtime, like DLL mapping, are
-	available through a configuration file that is loaded at
-	runtime.   The default Mono implementation loads the
-	configuration file from <tt>$sysconfig/mono/config</tt>
-	(typically this is <tt>/etc/mono/config</tt>).
-
-	<p />See the <tt>mono-config(5)</tt> man page for more details
-	on what goes in this file.
-
-	<p />The following APIs expose this functionality:
-	
- <a name="api:mono_config_parse"></a>
- <div class="api">
-    <div class="api-entry">mono_config_parse</div>
-
-    <div class="prototype">void
-mono_config_parse (const char *filename)
-</div>
-<p />
-<b>Parameters</b>
-<blockquote><dt><i>filename:</i></dt><dd> the filename to load the configuration variables from.</dd></blockquote>
-<b>Remarks</b>
-<p />	 
-	 Pass a NULL filename to parse the default config files
-	 (or the file in the MONO_CONFIG env var).
-
-</div> <a name="api:mono_config_parse_memory"></a>
- <div class="api">
-    <div class="api-entry">mono_config_parse_memory</div>
-
-    <div class="prototype">void
-mono_config_parse_memory (const char *buffer)
-
-</div>
-<p />
-<b>Parameters</b>
-<blockquote><dt><i>buffer:</i></dt><dd> a pointer to an string XML representation of the configuration</dd></blockquote>
-<b>Remarks</b>
-<p />	 
-	 Parses the configuration from a buffer
-
-</div> <a name="api:mono_get_config_dir"></a>
- <div class="api">
-    <div class="api-entry">mono_get_config_dir</div>
-
-    <div class="prototype">Prototype: mono_get_config_dir</div>
-<p />
-
-
-</div><h3>Function Pointers</h3>
-
-	<p />To wrap a function pointer into something that the Mono
-	runtime can consume, you should use the mono_create_ftnptr.
-	This is only important if you plan on running on the IA64
-	architecture.   Otherwise you can just use the function
-	pointer address.
-	
- <a name="api:mono_create_ftnptr"></a>
- <div class="api">
-    <div class="api-entry">mono_create_ftnptr</div>
-
-    <div class="prototype">Prototype: mono_create_ftnptr</div>
-<p />
-
-
-</div><h3>Advanced Execution Setups</h3>
-
-	<p />These are not recommended ways of initializing Mono, they
-	are done internally by mono_jit_init, but are here to explain
-	what happens internally.
-	
- <a name="api:mono_runtime_exec_managed_code"></a>
- <div class="api">
-    <div class="api-entry">mono_runtime_exec_managed_code</div>
-
-    <div class="prototype">void
-mono_runtime_exec_managed_code (MonoDomain *domain,
-				MonoMainThreadFunc main_func,
-				gpointer main_args)
-
-</div>
-<p />
-<b>Parameters</b>
-<blockquote><dt><i>domain:</i></dt><dd> Application domain</dd><dt><i>main_func:</i></dt><dd> function to invoke from the execution thread</dd><dt><i>main_args:</i></dt><dd> parameter to the main_func</dd></blockquote>
-<b>Remarks</b>
-<p />	 
-	 Launch a new thread to execute a function
-	
-	 main_func is called back from the thread with main_args as the
-	 parameter.  The callback function is expected to start Main()
-	 eventually.  This function then waits for all managed threads to
-	 finish.
-	 It is not necesseray anymore to execute managed code in a subthread,
-	 so this function should not be used anymore by default: just
-	 execute the code and then call mono_thread_manage ().
-
-</div> <a name="api:mono_runtime_exec_main"></a>
- <div class="api">
-    <div class="api-entry">mono_runtime_exec_main</div>
-
-    <div class="prototype">Prototype: mono_runtime_exec_main</div>
-<p />
-
-</div> <a name="api:mono_init_from_assembly"></a>
- <div class="api">
-    <div class="api-entry">mono_init_from_assembly</div>
-
-    <div class="prototype">MonoDomain*
-mono_init_from_assembly (const char *domain_name, const char *filename)
-
-</div>
-<p />
-<b>Parameters</b>
-<blockquote><dt><i>domain_name:</i></dt><dd> name to give to the initial domain</dd><dt><i>filename:</i></dt><dd> filename to load on startup</dd></blockquote>
-<b>Returns</b>
-<blockquote>	  the initial domain.
-</blockquote>
-<b>Remarks</b>
-<p />	 
-	 Used by the runtime, users should use mono_jit_init instead.
-	
-	 Creates the initial application domain and initializes the mono_defaults
-	 structure.
-	 This function is guaranteed to not run any IL code.
-	 The runtime is initialized using the runtime version required by the
-	 provided executable. The version is determined by looking at the exe 
-	 configuration file and the version PE field)
-	
-
-</div> <a name="api:mono_init"></a>
- <div class="api">
-    <div class="api-entry">mono_init</div>
-
-    <div class="prototype">MonoDomain*
-mono_init (const char *domain_name)
-
-</div>
-<p />
-<b>Returns</b>
-<blockquote>	  the initial domain.
-</blockquote>
-<b>Remarks</b>
-<p />	 <p />
-
-	 Creates the initial application domain and initializes the mono_defaults
-	 structure.
-	 This function is guaranteed to not run any IL code.
-	 The runtime is initialized using the default runtime version.
-	
-
-</div></a></body>
-</html>
-</span>
\ No newline at end of file
diff --git a/docs/deploy/mono-api-exc.html b/docs/deploy/mono-api-exc.html
deleted file mode 100644
index 774a8a6..0000000
--- a/docs/deploy/mono-api-exc.html
+++ /dev/null
@@ -1,694 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?><span>
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-   <title>mono-api-exc.html</title>
-   <style type="text/css">
-
-
-   h3 { 
-       font-size: 18px;
-       padding-bottom: 4pt;
-       border-bottom: 2px solid #dddddd;
-   }
-       
-   .api {
-     border: 1px solid;
-     padding: 10pt;
-     margin: 10pt;
-   } 
-
-   .api-entry { 
-       border-bottom: none;
-       font-size: 18px;
-   }
-
-   .prototype {
-     border: 1px solid;
-     background-color: #f2f2f2;
-     padding: 5pt;
-     margin-top: 5pt;
-     margin-bottom: 5pt;  
-   } 
-
-   .header {
-     border: 1px solid;
-     padding: 0 0 5pt 5pt;
-     margin: 10pt;
-     white-space: pre;
-       font-family: monospace;
-   }
-    
-   .code {
-     border: 1px solid;
-     padding: 0 0 5pt 5pt;
-     margin: 10pt;
-     white-space: pre;
-       font-family: monospace;
-   }
-   
-
-</style>
-</head>
-<body>
-<h2>Exception Handling</h2>
-
-<div class="header">
-void           <a href="#api:mono_raise_exception">mono_raise_exception</a>                       (MonoException *ex) ;
-void           <a href="#api:mono_unhandled_exception">mono_unhandled_exception</a>                   (MonoObject *exc);
-void           <a href="#api:mono_print_unhandled_exception">mono_print_unhandled_exception</a>             (MonoObject *exc);
-MonoException* <a href="#api:mono_exception_from_name_domain">mono_exception_from_name_domain</a>            (MonoDomain *domain, 
-                                                           MonoImage *image, 
-                                                           ;
-MonoException* <a href="#api:mono_exception_from_name">mono_exception_from_name</a>                   (MonoImage *image, 
-                                                           const char *name_space;
-MonoException* <a href="#api:mono_exception_from_name_msg">mono_exception_from_name_msg</a>               (MonoImage *image, 
-                                                           const char *name_space;
-MonoException* <a href="#api:mono_exception_from_name_two_strings">mono_exception_from_name_two_strings</a>       (MonoImage *image, 
-                                                           const char *name_space;
-MonoException* <a href="#api:mono_get_exception_appdomain_unloaded">mono_get_exception_appdomain_unloaded</a>      (void);
-MonoException* <a href="#api:mono_get_exception_argument">mono_get_exception_argument</a>                (const char *arg, 
-                                                           const char *msg);
-MonoException* <a href="#api:mono_get_exception_argument_null">mono_get_exception_argument_null</a>           (const char *arg);
-MonoException* <a href="#api:mono_get_exception_argument_out_of_range">mono_get_exception_argument_out_of_range</a>   (const char *arg);
-MonoException* <a href="#api:mono_get_exception_arithmetic">mono_get_exception_arithmetic</a>              ();
-MonoException* <a href="#api:mono_get_exception_array_type_mismatch">mono_get_exception_array_type_mismatch</a>     ();
-MonoException* <a href="#api:mono_get_exception_bad_image_format">mono_get_exception_bad_image_format</a>        (const char *msg);
-MonoException* <a href="#api:mono_get_exception_cannot_unload_appdomain">mono_get_exception_cannot_unload_appdomain</a> (const char *msg);
-               <a href="#api:mono_get_exception_class"></a>                                           
-MonoException* <a href="#api:mono_get_exception_divide_by_zero">mono_get_exception_divide_by_zero</a>          ();
-MonoException* <a href="#api:mono_get_exception_execution_engine">mono_get_exception_execution_engine</a>        (const char *msg);
-MonoException* <a href="#api:mono_get_exception_file_not_found2">mono_get_exception_file_not_found2</a>         (const char *msg, 
-                                                           MonoString *fname);
-MonoException* <a href="#api:mono_get_exception_file_not_found">mono_get_exception_file_not_found</a>          (MonoString *fname);
-MonoException* <a href="#api:mono_get_exception_index_out_of_range">mono_get_exception_index_out_of_range</a>      ();
-MonoException* <a href="#api:mono_get_exception_invalid_cast">mono_get_exception_invalid_cast</a>            ();
-MonoException* <a href="#api:mono_get_exception_io">mono_get_exception_io</a>                      (const char *msg);
-MonoException* <a href="#api:mono_get_exception_missing_method">mono_get_exception_missing_method</a>          (const char *class_name, 
-                                                           const char *member_name);
-MonoException* <a href="#api:mono_get_exception_not_implemented">mono_get_exception_not_implemented</a>         (const char *msg);
-MonoException* <a href="#api:mono_get_exception_null_reference">mono_get_exception_null_reference</a>          ();
-MonoException* <a href="#api:mono_get_exception_overflow">mono_get_exception_overflow</a>                ();
-MonoException* <a href="#api:mono_get_exception_security">mono_get_exception_security</a>                ();
-MonoException* <a href="#api:mono_get_exception_serialization">mono_get_exception_serialization</a>           (const char *msg);
-MonoException* <a href="#api:mono_get_exception_stack_overflow">mono_get_exception_stack_overflow</a>          (void);
-MonoException* <a href="#api:mono_get_exception_synchronization_lock">mono_get_exception_synchronization_lock</a>    (const char *msg);
-MonoException* <a href="#api:mono_get_exception_thread_abort">mono_get_exception_thread_abort</a>            ();
-MonoException* <a href="#api:mono_get_exception_thread_state">mono_get_exception_thread_state</a>            (const char *msg);
-MonoException* <a href="#api:mono_get_exception_type_initialization">mono_get_exception_type_initialization</a>     (const gchar *type_name, 
-                                                           MonoException *inner);
-MonoException* <a href="#api:mono_get_exception_type_load">mono_get_exception_type_load</a>               (MonoString *class_name, 
-                                                           char *assembly_name);
-MonoException* <a href="#api:mono_get_exception_invalid_operation">mono_get_exception_invalid_operation</a>       (const char *msg);
-MonoException* <a href="#api:mono_get_exception_missing_field">mono_get_exception_missing_field</a>           (const char *class_name, 
-                                                           const char *member_name);
-MonoException* <a href="#api:mono_get_exception_not_supported">mono_get_exception_not_supported</a>           (const char *msg);
-MonoException* <a href="#api:mono_get_exception_reflection_type_load">mono_get_exception_reflection_type_load</a>    (MonoArray *types, 
-                                                           MonoArray *exceptions);
-
-</div>
-
-<h3>Raising and Catching exceptions</h3>
-
- <a name="api:mono_raise_exception"></a>
- <div class="api">
-    <div class="api-entry">mono_raise_exception</div>
-
-    <div class="prototype">void
-mono_raise_exception (MonoException *ex) 
-
-</div>
-<p />
-<b>Parameters</b>
-<blockquote><dt><i>ex:</i></dt><dd> exception object</dd></blockquote>
-<b>Remarks</b>
-<p />	 
-	 Signal the runtime that the exception <i>ex</i> has been raised in unmanaged code.
-
-</div> <a name="api:mono_unhandled_exception"></a>
- <div class="api">
-    <div class="api-entry">mono_unhandled_exception</div>
-
-    <div class="prototype">void
-mono_unhandled_exception (MonoObject *exc)
-
-</div>
-<p />
-<b>Parameters</b>
-<blockquote><dt><i>exc:</i></dt><dd> exception thrown</dd></blockquote>
-<b>Remarks</b>
-<p />	 
-	 This is a VM internal routine.
-	
-	 We call this function when we detect an unhandled exception
-	 in the default domain.
-	
-	 It invokes the * UnhandledException event in AppDomain or prints
-	 a warning to the console 
-
-</div> <a name="api:mono_print_unhandled_exception"></a>
- <div class="api">
-    <div class="api-entry">mono_print_unhandled_exception</div>
-
-    <div class="prototype">void
-mono_print_unhandled_exception (MonoObject *exc)
-
-</div>
-<p />
-<b>Parameters</b>
-<blockquote><dt><i>exc:</i></dt><dd> The exception</dd></blockquote>
-<b>Remarks</b>
-<p />	 
-	 Prints the unhandled exception.
-
-
-
-</div><h3>Exception Types: General API</h3>
-
- <a name="api:mono_exception_from_name_domain"></a>
- <div class="api">
-    <div class="api-entry">mono_exception_from_name_domain</div>
-
-    <div class="prototype">MonoException*
-mono_exception_from_name_domain (MonoDomain *domain, MonoImage *image, 
-				 const char* name_space, const char *name)
-
-</div>
-<p />
-<b>Parameters</b>
-<blockquote><dt><i>domain:</i></dt><dd> Domain where the return object will be created.</dd><dt><i>image:</i></dt><dd> the Mono image where to look for the class</dd><dt><i>name_space:</i></dt><dd> the namespace for the class</dd><dt><i>name:</i></dt><dd> class name</dd></blockquote>
-<b>Returns</b>
-<blockquote>	  the initialized exception instance.
-</blockquote>
-<b>Remarks</b>
-<p />	 
-	 Creates an exception object of the given namespace/name class on
-	 the given domain.
-	
-
-</div> <a name="api:mono_exception_from_name"></a>
- <div class="api">
-    <div class="api-entry">mono_exception_from_name</div>
-
-    <div class="prototype">MonoException*
-mono_exception_from_name (MonoImage *image, const char *name_space,
-			  const char *name)
-
-</div>
-<p />
-<b>Parameters</b>
-<blockquote><dt><i>image:</i></dt><dd> the Mono image where to look for the class</dd><dt><i>name_space:</i></dt><dd> the namespace for the class</dd><dt><i>name:</i></dt><dd> class name</dd></blockquote>
-<b>Returns</b>
-<blockquote>	  the initialized exception instance.
-</blockquote>
-<b>Remarks</b>
-<p />	 
-	 Creates an exception of the given namespace/name class in the
-	 current domain.
-	
-
-</div> <a name="api:mono_exception_from_name_msg"></a>
- <div class="api">
-    <div class="api-entry">mono_exception_from_name_msg</div>
-
-    <div class="prototype">MonoException*
-mono_exception_from_name_msg (MonoImage *image, const char *name_space,
-			      const char *name, const char *msg)
-
-</div>
-<p />
-<b>Parameters</b>
-<blockquote><dt><i>image:</i></dt><dd> the Mono image where to look for the class</dd><dt><i>name_space:</i></dt><dd> the namespace for the class</dd><dt><i>name:</i></dt><dd> class name</dd><dt><i>msg:</i></dt><dd> the message to embed inside the exception</dd></blockquote>
-<b>Returns</b>
-<blockquote>	  the initialized exception instance.
-</blockquote>
-<b>Remarks</b>
-<p />	 
-	 Creates an exception and initializes its message field.
-	
-
-</div> <a name="api:mono_exception_from_name_two_strings"></a>
- <div class="api">
-    <div class="api-entry">mono_exception_from_name_two_strings</div>
-
-    <div class="prototype">MonoException*
-mono_exception_from_name_two_strings (MonoImage *image, const char *name_space,
-				      const char *name, MonoString *a1, MonoString *a2)
-
-</div>
-<p />
-<b>Parameters</b>
-<blockquote><dt><i>image:</i></dt><dd> the Mono image where to look for the class</dd><dt><i>name_space:</i></dt><dd> the namespace for the class</dd><dt><i>name:</i></dt><dd> class name</dd><dt><i>a1:</i></dt><dd> first string argument to pass</dd><dt><i>a2:</i></dt><dd> second string argument to pass</dd></blockquote>
-<b>Returns</b>
-<blockquote>	  the initialized exception instance.
-</blockquote>
-<b>Remarks</b>
-<p />	 
-	 Creates an exception from a constructor that takes two string
-	 arguments.
-	
-
-
-</div><h3>Obtaining Common Exceptions</h3>
-
-	<p />There are a number of common exceptions that are used by
-	the runtime, use the routines in this section to get a copy of
-	those exceptions.
-	
- <a name="api:mono_get_exception_appdomain_unloaded"></a>
- <div class="api">
-    <div class="api-entry">mono_get_exception_appdomain_unloaded</div>
-
-    <div class="prototype">MonoException*
-mono_get_exception_appdomain_unloaded (void)
-
-</div>
-<p />
-<b>Returns</b>
-<blockquote>	  a new instance of the System.AppDomainUnloadedException
-</blockquote>
-
-</div> <a name="api:mono_get_exception_argument"></a>
- <div class="api">
-    <div class="api-entry">mono_get_exception_argument</div>
-
-    <div class="prototype">MonoException*
-mono_get_exception_argument (const char *arg, const char *msg)
-
-</div>
-<p />
-<b>Parameters</b>
-<blockquote><dt><i>arg:</i></dt><dd> the name of the invalid argument.</dd></blockquote>
-<b>Returns</b>
-<blockquote>	  a new instance of the System.ArgumentException
-</blockquote>
-
-</div> <a name="api:mono_get_exception_argument_null"></a>
- <div class="api">
-    <div class="api-entry">mono_get_exception_argument_null</div>
-
-    <div class="prototype">MonoException*
-mono_get_exception_argument_null (const char *arg)
-
-</div>
-<p />
-<b>Parameters</b>
-<blockquote><dt><i>arg:</i></dt><dd> the name of the argument that is null</dd></blockquote>
-<b>Returns</b>
-<blockquote>	  a new instance of the System.ArgumentNullException
-</blockquote>
-
-</div> <a name="api:mono_get_exception_argument_out_of_range"></a>
- <div class="api">
-    <div class="api-entry">mono_get_exception_argument_out_of_range</div>
-
-    <div class="prototype">MonoException*
-mono_get_exception_argument_out_of_range (const char *arg)
-
-</div>
-<p />
-<b>Parameters</b>
-<blockquote><dt><i>arg:</i></dt><dd> the name of the out of range argument.</dd></blockquote>
-<b>Returns</b>
-<blockquote>	  a new instance of the System.ArgumentOutOfRangeException
-</blockquote>
-
-</div> <a name="api:mono_get_exception_arithmetic"></a>
- <div class="api">
-    <div class="api-entry">mono_get_exception_arithmetic</div>
-
-    <div class="prototype">MonoException*
-mono_get_exception_arithmetic ()
-
-</div>
-<p />
-<b>Returns</b>
-<blockquote>	  a new instance of the System.ArithmeticException.
-</blockquote>
-
-</div> <a name="api:mono_get_exception_array_type_mismatch"></a>
- <div class="api">
-    <div class="api-entry">mono_get_exception_array_type_mismatch</div>
-
-    <div class="prototype">MonoException*
-mono_get_exception_array_type_mismatch ()
-
-</div>
-<p />
-<b>Returns</b>
-<blockquote>	  a new instance of the System.ArrayTypeMismatchException
-</blockquote>
-
-</div> <a name="api:mono_get_exception_bad_image_format"></a>
- <div class="api">
-    <div class="api-entry">mono_get_exception_bad_image_format</div>
-
-    <div class="prototype">MonoException*
-mono_get_exception_bad_image_format (const char *msg)
-
-</div>
-<p />
-<b>Parameters</b>
-<blockquote><dt><i>msg:</i></dt><dd> an informative message for the user.</dd></blockquote>
-<b>Returns</b>
-<blockquote>	  a new instance of the System.BadImageFormatException
-</blockquote>
-
-</div> <a name="api:mono_get_exception_cannot_unload_appdomain"></a>
- <div class="api">
-    <div class="api-entry">mono_get_exception_cannot_unload_appdomain</div>
-
-    <div class="prototype">MonoException*
-mono_get_exception_cannot_unload_appdomain (const char *msg)
-
-</div>
-<p />
-<b>Parameters</b>
-<blockquote><dt><i>inner:</i></dt><dd> the inner exception.</dd></blockquote>
-<b>Returns</b>
-<blockquote>	  a new instance of the System.CannotUnloadAppDomainException
-</blockquote>
-
-</div> <a name="api:mono_get_exception_class"></a>
- <div class="api">
-    <div class="api-entry">mono_get_exception_class</div>
-
-    <div class="prototype">Prototype: mono_get_exception_class</div>
-<p />
-
-</div> <a name="api:mono_get_exception_divide_by_zero"></a>
- <div class="api">
-    <div class="api-entry">mono_get_exception_divide_by_zero</div>
-
-    <div class="prototype">MonoException*
-mono_get_exception_divide_by_zero ()
-
-</div>
-<p />
-<b>Returns</b>
-<blockquote>	  a new instance of the System.DivideByZeroException
-</blockquote>
-
-</div> <a name="api:mono_get_exception_execution_engine"></a>
- <div class="api">
-    <div class="api-entry">mono_get_exception_execution_engine</div>
-
-    <div class="prototype">MonoException*
-mono_get_exception_execution_engine (const char *msg)
-
-</div>
-<p />
-<b>Parameters</b>
-<blockquote><dt><i>msg:</i></dt><dd> the message to pass to the user</dd></blockquote>
-<b>Returns</b>
-<blockquote>	  a new instance of the System.ExecutionEngineException
-</blockquote>
-
-</div> <a name="api:mono_get_exception_file_not_found2"></a>
- <div class="api">
-    <div class="api-entry">mono_get_exception_file_not_found2</div>
-
-    <div class="prototype">MonoException*
-mono_get_exception_file_not_found2 (const char *msg, MonoString *fname)
-
-</div>
-<p />
-<b>Parameters</b>
-<blockquote><dt><i>msg:</i></dt><dd> an informative message for the user.</dd><dt><i>fname:</i></dt><dd> the name of the file not found.</dd></blockquote>
-<b>Returns</b>
-<blockquote>	  a new instance of the System.IO.FileNotFoundException
-</blockquote>
-
-</div> <a name="api:mono_get_exception_file_not_found"></a>
- <div class="api">
-    <div class="api-entry">mono_get_exception_file_not_found</div>
-
-    <div class="prototype">MonoException*
-mono_get_exception_file_not_found (MonoString *fname)
-
-</div>
-<p />
-<b>Parameters</b>
-<blockquote><dt><i>fname:</i></dt><dd> the name of the file not found.</dd></blockquote>
-<b>Returns</b>
-<blockquote>	  a new instance of the System.IO.FileNotFoundException
-</blockquote>
-
-</div> <a name="api:mono_get_exception_index_out_of_range"></a>
- <div class="api">
-    <div class="api-entry">mono_get_exception_index_out_of_range</div>
-
-    <div class="prototype">MonoException*
-mono_get_exception_index_out_of_range ()
-
-</div>
-<p />
-<b>Returns</b>
-<blockquote>	  a new instance of the System.IndexOutOfRangeException
-</blockquote>
-
-</div> <a name="api:mono_get_exception_invalid_cast"></a>
- <div class="api">
-    <div class="api-entry">mono_get_exception_invalid_cast</div>
-
-    <div class="prototype">MonoException*
-mono_get_exception_invalid_cast ()
-
-</div>
-<p />
-<b>Returns</b>
-<blockquote>	  a new instance of the System.InvalidCastException
-</blockquote>
-
-</div> <a name="api:mono_get_exception_io"></a>
- <div class="api">
-    <div class="api-entry">mono_get_exception_io</div>
-
-    <div class="prototype">MonoException*
-mono_get_exception_io (const char *msg)
-
-</div>
-<p />
-<b>Parameters</b>
-<blockquote><dt><i>msg:</i></dt><dd> the message to present to the user</dd></blockquote>
-<b>Returns</b>
-<blockquote>	  a new instance of the System.IO.IOException
-</blockquote>
-
-</div> <a name="api:mono_get_exception_missing_method"></a>
- <div class="api">
-    <div class="api-entry">mono_get_exception_missing_method</div>
-
-    <div class="prototype">MonoException*
-mono_get_exception_missing_method (const char *class_name, const char *member_name)
-
-</div>
-<p />
-<b>Parameters</b>
-<blockquote><dt><i>class_name:</i></dt><dd> the class where the lookup was performed.</dd><dt><i>member_name:</i></dt><dd> the name of the missing method.</dd></blockquote>
-<b>Returns</b>
-<blockquote>	  a new instance of the System.MissingMethodException
-</blockquote>
-
-</div> <a name="api:mono_get_exception_not_implemented"></a>
- <div class="api">
-    <div class="api-entry">mono_get_exception_not_implemented</div>
-
-    <div class="prototype">MonoException*
-mono_get_exception_not_implemented (const char *msg)
-
-</div>
-<p />
-<b>Parameters</b>
-<blockquote><dt><i>msg:</i></dt><dd> the message to pass to the user</dd></blockquote>
-<b>Returns</b>
-<blockquote>	  a new instance of the System.NotImplementedException
-</blockquote>
-
-</div> <a name="api:mono_get_exception_null_reference"></a>
- <div class="api">
-    <div class="api-entry">mono_get_exception_null_reference</div>
-
-    <div class="prototype">MonoException*
-mono_get_exception_null_reference ()
-
-</div>
-<p />
-<b>Returns</b>
-<blockquote>	  a new instance of the System.NullReferenceException
-</blockquote>
-
-</div> <a name="api:mono_get_exception_overflow"></a>
- <div class="api">
-    <div class="api-entry">mono_get_exception_overflow</div>
-
-    <div class="prototype">MonoException*
-mono_get_exception_overflow ()
-
-</div>
-<p />
-<b>Returns</b>
-<blockquote>	  a new instance of the System.OverflowException
-</blockquote>
-
-</div> <a name="api:mono_get_exception_security"></a>
- <div class="api">
-    <div class="api-entry">mono_get_exception_security</div>
-
-    <div class="prototype">MonoException*
-mono_get_exception_security ()
-
-</div>
-<p />
-<b>Returns</b>
-<blockquote>	  a new instance of the System.Security.SecurityException
-</blockquote>
-
-</div> <a name="api:mono_get_exception_serialization"></a>
- <div class="api">
-    <div class="api-entry">mono_get_exception_serialization</div>
-
-    <div class="prototype">MonoException*
-mono_get_exception_serialization (const char *msg)
-
-</div>
-<p />
-<b>Parameters</b>
-<blockquote><dt><i>msg:</i></dt><dd> the message to pass to the user</dd></blockquote>
-<b>Returns</b>
-<blockquote>	  a new instance of the System.Runtime.Serialization.SerializationException
-</blockquote>
-
-</div> <a name="api:mono_get_exception_stack_overflow"></a>
- <div class="api">
-    <div class="api-entry">mono_get_exception_stack_overflow</div>
-
-    <div class="prototype">MonoException*
-mono_get_exception_stack_overflow (void)
-
-</div>
-<p />
-<b>Returns</b>
-<blockquote>	  a new instance of the System.StackOverflowException
-</blockquote>
-
-</div> <a name="api:mono_get_exception_synchronization_lock"></a>
- <div class="api">
-    <div class="api-entry">mono_get_exception_synchronization_lock</div>
-
-    <div class="prototype">MonoException*
-mono_get_exception_synchronization_lock (const char *msg)
-
-</div>
-<p />
-<b>Parameters</b>
-<blockquote><dt><i>inner:</i></dt><dd> the inner exception.</dd></blockquote>
-<b>Returns</b>
-<blockquote>	  a new instance of the System.SynchronizationLockException
-</blockquote>
-
-</div> <a name="api:mono_get_exception_thread_abort"></a>
- <div class="api">
-    <div class="api-entry">mono_get_exception_thread_abort</div>
-
-    <div class="prototype">MonoException*
-mono_get_exception_thread_abort ()
-
-</div>
-<p />
-<b>Returns</b>
-<blockquote>	  a new instance of the System.Threading.ThreadAbortException.
-</blockquote>
-
-</div> <a name="api:mono_get_exception_thread_state"></a>
- <div class="api">
-    <div class="api-entry">mono_get_exception_thread_state</div>
-
-    <div class="prototype">MonoException*
-mono_get_exception_thread_state (const char *msg)
-
-</div>
-<p />
-<b>Parameters</b>
-<blockquote><dt><i>msg:</i></dt><dd> the message to present to the user</dd></blockquote>
-<b>Returns</b>
-<blockquote>	  a new instance of the System.Threading.ThreadStateException
-</blockquote>
-
-</div> <a name="api:mono_get_exception_type_initialization"></a>
- <div class="api">
-    <div class="api-entry">mono_get_exception_type_initialization</div>
-
-    <div class="prototype">MonoException*
-mono_get_exception_type_initialization (const gchar *type_name, MonoException *inner)
-
-</div>
-<p />
-<b>Parameters</b>
-<blockquote><dt><i>type_name:</i></dt><dd> the name of the type that failed to initialize.</dd><dt><i>inner:</i></dt><dd> the inner exception.</dd></blockquote>
-<b>Returns</b>
-<blockquote>	  a new instance of the System.TypeInitializationException
-</blockquote>
-
-</div> <a name="api:mono_get_exception_type_load"></a>
- <div class="api">
-    <div class="api-entry">mono_get_exception_type_load</div>
-
-    <div class="prototype">MonoException*
-mono_get_exception_type_load (MonoString *class_name, char *assembly_name)
-
-</div>
-<p />
-<b>Parameters</b>
-<blockquote><dt><i>class_name:</i></dt><dd> the name of the class that could not be loaded</dd><dt><i>assembly_name:</i></dt><dd> the assembly where the class was looked up.</dd></blockquote>
-<b>Returns</b>
-<blockquote>	  a new instance of the System.TypeLoadException.
-</blockquote>
-
-</div> <a name="api:mono_get_exception_invalid_operation"></a>
- <div class="api">
-    <div class="api-entry">mono_get_exception_invalid_operation</div>
-
-    <div class="prototype">MonoException*
-mono_get_exception_invalid_operation (const char *msg)
-
-</div>
-<p />
-<b>Parameters</b>
-<blockquote><dt><i>msg:</i></dt><dd> the message to pass to the user</dd></blockquote>
-<b>Returns</b>
-<blockquote>	  a new instance of the System.InvalidOperationException
-</blockquote>
-
-</div> <a name="api:mono_get_exception_missing_field"></a>
- <div class="api">
-    <div class="api-entry">mono_get_exception_missing_field</div>
-
-    <div class="prototype">MonoException*
-mono_get_exception_missing_field (const char *class_name, const char *member_name)
-
-</div>
-<p />
-<b>Parameters</b>
-<blockquote><dt><i>class_name:</i></dt><dd> the class where the lookup was performed</dd><dt><i>member_name:</i></dt><dd> the name of the missing method.</dd></blockquote>
-<b>Returns</b>
-<blockquote>	  a new instance of the System.MissingFieldException
-</blockquote>
-
-</div> <a name="api:mono_get_exception_not_supported"></a>
- <div class="api">
-    <div class="api-entry">mono_get_exception_not_supported</div>
-
-    <div class="prototype">MonoException*
-mono_get_exception_not_supported (const char *msg)
-
-</div>
-<p />
-<b>Parameters</b>
-<blockquote><dt><i>msg:</i></dt><dd> the message to pass to the user</dd></blockquote>
-<b>Returns</b>
-<blockquote>	  a new instance of the System.NotSupportedException
-</blockquote>
-
-</div></body>
-</html>
-</span>
\ No newline at end of file
diff --git a/docs/deploy/mono-api-gc.html b/docs/deploy/mono-api-gc.html
deleted file mode 100644
index 047b6cf..0000000
--- a/docs/deploy/mono-api-gc.html
+++ /dev/null
@@ -1,119 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?><span>
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-   <title>mono-api-gc.html</title>
-   <style type="text/css">
-
-
-   h3 { 
-       font-size: 18px;
-       padding-bottom: 4pt;
-       border-bottom: 2px solid #dddddd;
-   }
-       
-   .api {
-     border: 1px solid;
-     padding: 10pt;
-     margin: 10pt;
-   } 
-
-   .api-entry { 
-       border-bottom: none;
-       font-size: 18px;
-   }
-
-   .prototype {
-     border: 1px solid;
-     background-color: #f2f2f2;
-     padding: 5pt;
-     margin-top: 5pt;
-     margin-bottom: 5pt;  
-   } 
-
-   .header {
-     border: 1px solid;
-     padding: 0 0 5pt 5pt;
-     margin: 10pt;
-     white-space: pre;
-       font-family: monospace;
-   }
-    
-   .code {
-     border: 1px solid;
-     padding: 0 0 5pt 5pt;
-     margin: 10pt;
-     white-space: pre;
-       font-family: monospace;
-   }
-   
-
-</style>
-</head>
-<body>
-<h1>Garbage Collector Interface</h1>
-
-<h1>Public Interface</h1>
-
-	<p />The public interface of the Mono GC is fairly limited, and
-	its the only one that embedders should be using:
-	
- <a name="api:mono_gc_collect"></a>
- <div class="api">
-    <div class="api-entry">mono_gc_collect</div>
-
-    <div class="prototype">void
-mono_gc_collect (int generation)
-
-</div>
-<p />
-<b>Parameters</b>
-<blockquote><dt><i>generation:</i></dt><dd> GC generation identifier</dd></blockquote>
-<b>Remarks</b>
-<p />	 
-	 Perform a garbage collection for the given generation, higher numbers
-	 mean usually older objects. Collecting a high-numbered generation
-	 implies collecting also the lower-numbered generations.
-	 The maximum value for <i>generation</i> can be retrieved with a call to
-	 mono_gc_max_generation(), so this function is usually called as:
-	
-	 	mono_gc_collect (mono_gc_max_generation ());
-
-</div> <a name="api:mono_gc_max_generation"></a>
- <div class="api">
-    <div class="api-entry">mono_gc_max_generation</div>
-
-    <div class="prototype">int
-mono_gc_max_generation (void)
-
-</div>
-<p />
-<b>Returns</b>
-<blockquote>	  the maximum generation number.
-</blockquote>
-<b>Remarks</b>
-<p />	 
-	 Get the maximum generation number used by the current garbage
-	 collector. The value will be 0 for the Boehm collector, 1 or more
-	 for the generational collectors.
-	
-
-</div> <a name="api:mono_gc_get_heap_size"></a>
- <div class="api">
-    <div class="api-entry">mono_gc_get_heap_size</div>
-
-    <div class="prototype">int64_t
-mono_gc_get_heap_size (void)
-
-</div>
-<p />
-<b>Returns</b>
-<blockquote>	  the size of the heap in bytes
-</blockquote>
-<b>Remarks</b>
-<p />	 
-	 Get the amount of memory used by the garbage collector.
-	
-
-</div></body>
-</html>
-</span>
\ No newline at end of file
diff --git a/docs/deploy/mono-api-gchandle.html b/docs/deploy/mono-api-gchandle.html
deleted file mode 100644
index 84b9fc2..0000000
--- a/docs/deploy/mono-api-gchandle.html
+++ /dev/null
@@ -1,228 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?><span>
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-   <title>mono-api-gchandle.html</title>
-   <style type="text/css">
-
-
-   h3 { 
-       font-size: 18px;
-       padding-bottom: 4pt;
-       border-bottom: 2px solid #dddddd;
-   }
-       
-   .api {
-     border: 1px solid;
-     padding: 10pt;
-     margin: 10pt;
-   } 
-
-   .api-entry { 
-       border-bottom: none;
-       font-size: 18px;
-   }
-
-   .prototype {
-     border: 1px solid;
-     background-color: #f2f2f2;
-     padding: 5pt;
-     margin-top: 5pt;
-     margin-bottom: 5pt;  
-   } 
-
-   .header {
-     border: 1px solid;
-     padding: 0 0 5pt 5pt;
-     margin: 10pt;
-     white-space: pre;
-       font-family: monospace;
-   }
-    
-   .code {
-     border: 1px solid;
-     padding: 0 0 5pt 5pt;
-     margin: 10pt;
-     white-space: pre;
-       font-family: monospace;
-   }
-   
-
-</style>
-</head>
-<body>
-<h1>GC Handles</h1>
-
-<h3>Synopsys</h3>
-
-	<div class="header">
-guint32     <a href="#api:mono_gchandle_new">mono_gchandle_new</a>         (MonoObject *obj, 
-                                       gboolean pinned);
-guint32     <a href="#api:mono_gchandle_new_weakref">mono_gchandle_new_weakref</a> (MonoObject *obj, 
-                                       gboolean track_resurrection);
-MonoObject* <a href="#api:mono_gchandle_get_target">mono_gchandle_get_target</a>  (guint32 gchandle);
-void        <a href="#api:mono_gchandle_free">mono_gchandle_free</a>        (guint32 gchandle);
-
-	</div>
-	
-	<p />GC handles are wrappers that are used to keep references to
-	managed objects in the unmanaged space and preventing the
-	object from being disposed.
-	
-	<p />These are the C equivalents of the <tt>System.GCHandle</tt>
-	structure.
-
-	<p />There are two kinds of GCHandles that can be created:
-
-	<ul>
-		<li>Handles to objects (use <tt><a href="#api:mono_gchandle_new">mono_gchandle_new</a></tt>). 
-
-		<li>Weak handles to objects (use <tt><a href="#api:mono_gchandle_new_weakref">mono_gchandle_new_weakref</a></tt>).
-		Weak handles can have the objects reclaimed by the
-		garbage collector. 
-		
-	</li></li></ul>
-
-	<p />To retrieve the target address of an object pointed to by a
-	<tt>GCHandle</tt> you should use
-	<tt>mono_gchandle_get_target</tt>.
-
-	<p />For example, consider the following C code:
-<div class="code">
-static MonoObject* o = NULL;
-</div>
-
-	<p />The object in `o' will *NOT* be scanned.
-
-	<p />If you need to store an object in a C variable and prevent
-	it from being collected, you need to acquire a GC handle for
-	it.
-
-<div class="code">
-        guint32 handle = mono_gchandle_new (my_object, TRUE);
-</div>
-
-	<p />TRUE means the object will be pinned, so it won't move in
-	memory when we'll use a moving GC. You can access the
-	MonoObject* referenced by a handle with:
-
-<div class="code">
-        MonoObject* obj = mono_gchandle_get_target (handle);
-</div>
-
-	<p />When you don't need the handle anymore you need to call:
-
-<div class="code">
-        mono_gchandle_free (handle);
-</div>
-
-	<p />Note that if you assign a new object to the C var, you need
-	to get a new handle, it's not enough to store a new object in
-	the C var.
-
-	<p />So code that looked like this:
-
-<div class="code">
-        static MonoObject* o = NULL;
-        ...
-        o = mono_object_new (...);
-        /* use o */
-        ...
-        /* when done to allow the GC to collect o */
-        o = NULL;
-</div>
-
-	<p />should now be changed to:
-
-<div class="code">
-        static guint32 o_handle;
-        ...
-        MonoObject *o = mono_object_new (...);
-        o_handle = mono_gchandle_new (o, TRUE);
-        /* use o or mono_gchandle_get_target (o_handle) */
-        ...
-        /* when done to allow the GC to collect o */
-        mono_gchandle_free (o_handle);
-</div>
-		
- <a name="api:mono_gchandle_new"></a>
- <div class="api">
-    <div class="api-entry">mono_gchandle_new</div>
-
-    <div class="prototype">guint32
-mono_gchandle_new (MonoObject *obj, gboolean pinned)
-
-</div>
-<p />
-<b>Parameters</b>
-<blockquote><dt><i>obj:</i></dt><dd> managed object to get a handle for</dd><dt><i>pinned:</i></dt><dd> whether the object should be pinned</dd></blockquote>
-<b>Returns</b>
-<blockquote>	  a handle that can be used to access the object from
-
-	 unmanaged code.</blockquote>
-<b>Remarks</b>
-<p />	 
-	 This returns a handle that wraps the object, this is used to keep a
-	 reference to a managed object from the unmanaged world and preventing the
-	 object from being disposed.
-	
-<p />
-	 If <i>pinned</i> is false the address of the object can not be obtained, if it is
-	 true the address of the object can be obtained.  This will also pin the
-	 object so it will not be possible by a moving garbage collector to move the
-	 object. 
-	
-<p />
-
-</div> <a name="api:mono_gchandle_new_weakref"></a>
- <div class="api">
-    <div class="api-entry">mono_gchandle_new_weakref</div>
-
-    <div class="prototype">guint32
-mono_gchandle_new_weakref (MonoObject *obj, gboolean track_resurrection)
-
-</div>
-<p />
-<b>Parameters</b>
-<blockquote><dt><i>obj:</i></dt><dd> managed object to get a handle for</dd><dt><i>pinned:</i></dt><dd> whether the object should be pinned</dd></blockquote>
-<b>Returns</b>
-<blockquote>	  a handle that can be used to access the object from
-
-	 unmanaged code.</blockquote>
-<b>Remarks</b>
-<p />	 
-	 This returns a weak handle that wraps the object, this is used to
-	 keep a reference to a managed object from the unmanaged world.
-	 Unlike the mono_gchandle_new the object can be reclaimed by the
-	 garbage collector.  In this case the value of the GCHandle will be
-	 set to zero.
-	
-<p />
-	 If <i>pinned</i> is false the address of the object can not be obtained, if it is
-	 true the address of the object can be obtained.  This will also pin the
-	 object so it will not be possible by a moving garbage collector to move the
-	 object. 
-	
-<p />
-
-</div> <a name="api:mono_gchandle_get_target"></a>
- <div class="api">
-    <div class="api-entry">mono_gchandle_get_target</div>
-
-    <div class="prototype">MonoObject*
-mono_gchandle_get_target (guint32 gchandle)
-
-</div>
-<p />
-<b>Parameters</b>
-<blockquote><dt><i>gchandle:</i></dt><dd> a GCHandle's handle.</dd></blockquote>
-<b>Remarks</b>
-<p />	 
-	 The handle was previously created by calling mono_gchandle_new or
-	 mono_gchandle_new_weakref. 
-	
-	 Returns a pointer to the MonoObject represented by the handle or
-	 NULL for a collected object if using a weakref handle.
-
-</div></body>
-</html>
-</span>
\ No newline at end of file
diff --git a/docs/deploy/mono-api-image.html b/docs/deploy/mono-api-image.html
deleted file mode 100644
index cbb8f2d..0000000
--- a/docs/deploy/mono-api-image.html
+++ /dev/null
@@ -1,517 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?><span>
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-   <title>mono-api-image.html</title>
-   <style type="text/css">
-
-
-   h3 { 
-       font-size: 18px;
-       padding-bottom: 4pt;
-       border-bottom: 2px solid #dddddd;
-   }
-       
-   .api {
-     border: 1px solid;
-     padding: 10pt;
-     margin: 10pt;
-   } 
-
-   .api-entry { 
-       border-bottom: none;
-       font-size: 18px;
-   }
-
-   .prototype {
-     border: 1px solid;
-     background-color: #f2f2f2;
-     padding: 5pt;
-     margin-top: 5pt;
-     margin-bottom: 5pt;  
-   } 
-
-   .header {
-     border: 1px solid;
-     padding: 0 0 5pt 5pt;
-     margin: 10pt;
-     white-space: pre;
-       font-family: monospace;
-   }
-    
-   .code {
-     border: 1px solid;
-     padding: 0 0 5pt 5pt;
-     margin: 10pt;
-     white-space: pre;
-       font-family: monospace;
-   }
-   
-
-</style>
-</head>
-<body>
-<h2>Image Manipulation</h2>
-
-	<p />Images are the component of assemblies that actually hold
-	the CIL code and <a href="mono-api-metadata.html">metadata</a>
-	in the extended PE/COFF file.
-
-<h3>Synopsis</h3>
-
-	<div class="header">
-#include <metadata/image.h>
-
-typedef struct _MonoImage MonoImage;
-typedef enum {
-        MONO_IMAGE_OK,
-        MONO_IMAGE_ERROR_ERRNO,
-        MONO_IMAGE_MISSING_ASSEMBLYREF,
-        MONO_IMAGE_IMAGE_INVALID
-} MonoImageOpenStatus;
-
-MonoImage*     <a href="#api:mono_image_open">mono_image_open</a>                   (const char *fname, 
-                                                  MonoImageOpenStatus *status);
-               <a href="#api:mono_image_open_full"></a>                                  
-               <a href="#api:mono_image_open_from_data"></a>                                  
-               <a href="#api:mono_image_open_from_data_full"></a>                                  
-void           <a href="#api:mono_image_close">mono_image_close</a>                  (MonoImage *image);
-void           <a href="#api:mono_image_addref">mono_image_addref</a>                 (MonoImage *image);
-               <a href="#api:mono_image_load_file_for_image"></a>                                  
-               <a href="#api:mono_image_get_guid"></a>                                  
-MonoAssembly*  <a href="#api:mono_image_get_assembly">mono_image_get_assembly</a>           (MonoImage *image);
-guint32        <a href="#api:mono_image_get_entry_point">mono_image_get_entry_point</a>        (MonoImage *image);
-const char*    <a href="#api:mono_image_get_filename">mono_image_get_filename</a>           (MonoImage *image);
-const char*    <a href="#api:mono_image_get_name">mono_image_get_name</a>               (MonoImage *image);
-const char*    <a href="#api:mono_image_get_resource">mono_image_get_resource</a>           (MonoImage *image, 
-                                                  guint32 offset, 
-                                                  guint32 *size);
-               <a href="#api:mono_image_get_table_info"></a>                                  
-               <a href="#api:mono_image_get_table_rows"></a>                                  
-gboolean       <a href="#api:mono_image_is_dynamic">mono_image_is_dynamic</a>             (MonoImage *image);
-               <a href="#api:mono_image_loaded_by_guid"></a>                                  
-MonoImage*     <a href="#api:mono_image_loaded">mono_image_loaded</a>                 (const char *name);
-gpointer       <a href="#api:mono_image_lookup_resource">mono_image_lookup_resource</a>        (MonoImage *image, 
-                                                  guint32 res_id, 
-                                                  guint32 lang_id, 
-                                                  gunichar2 *name);
-const char *   <a href="#api:mono_image_strerror">mono_image_strerror</a>               (MonoImageOpenStatus status);
-guint32        <a href="#api:mono_image_strong_name_position">mono_image_strong_name_position</a>   (MonoImage *image, 
-                                                  guint32 *size);
-const char*    <a href="#api:mono_image_get_public_key">mono_image_get_public_key</a>         (MonoImage *image, 
-                                                  guint32 *size);
-const char*    <a href="#api:mono_image_get_strong_name">mono_image_get_strong_name</a>        (MonoImage *image, 
-                                                  guint32 *size);
-gboolean       <a href="#api:mono_image_has_authenticode_entry">mono_image_has_authenticode_entry</a> (MonoImage *image);
-               <a href="#api:mono_image_rva_map"></a>                                  
-int            <a href="#api:mono_image_ensure_section_idx">mono_image_ensure_section_idx</a>     (MonoImage *image, 
-                                                  int section);
-int            <a href="#api:mono_image_ensure_section">mono_image_ensure_section</a>         (MonoImage *image, 
-                                                  const char *section);
-
-	</div>
-
-<h3>Image APIs</h3>
-
-	<p />Images are the actual elements in the runtime that contain
-	the actual code being executed. 
-
-<a name="cil_image_open"></a>
-<h3>Opening and closing MonoImages</h3>
-
- <a name="api:mono_image_open"></a>
- <div class="api">
-    <div class="api-entry">mono_image_open</div>
-
-    <div class="prototype">MonoImage*
-mono_image_open (const char *fname, MonoImageOpenStatus *status)
-
-</div>
-<p />
-<b>Parameters</b>
-<blockquote><dt><i>fname:</i></dt><dd> filename that points to the module we want to open</dd><dt><i>status:</i></dt><dd> An error condition is returned in this field</dd></blockquote>
-<b>Returns</b>
-<blockquote>	  An open image of type %MonoImage or NULL on error. 
-
-	 The caller holds a temporary reference to the returned image which should be cleared 
-	 when no longer needed by calling mono_image_close ().
-	 if NULL, then check the value of <i>status</i> for details on the error</blockquote>
-
-</div> <a name="api:mono_image_open_full"></a>
- <div class="api">
-    <div class="api-entry">mono_image_open_full</div>
-
-    <div class="prototype">Prototype: mono_image_open_full</div>
-<p />
-
-</div> <a name="api:mono_image_open_from_data"></a>
- <div class="api">
-    <div class="api-entry">mono_image_open_from_data</div>
-
-    <div class="prototype">Prototype: mono_image_open_from_data</div>
-<p />
-
-</div> <a name="api:mono_image_open_from_data_full"></a>
- <div class="api">
-    <div class="api-entry">mono_image_open_from_data_full</div>
-
-    <div class="prototype">Prototype: mono_image_open_from_data_full</div>
-<p />
-
-</div> <a name="api:mono_image_close"></a>
- <div class="api">
-    <div class="api-entry">mono_image_close</div>
-
-    <div class="prototype">void
-mono_image_close (MonoImage *image)
-
-</div>
-<p />
-<b>Parameters</b>
-<blockquote><dt><i>image:</i></dt><dd> The image file we wish to close</dd></blockquote>
-<b>Remarks</b>
-<p />	 
-	 Closes an image file, deallocates all memory consumed and
-	 unmaps all possible sections of the file
-
-</div> <a name="api:mono_image_addref"></a>
- <div class="api">
-    <div class="api-entry">mono_image_addref</div>
-
-    <div class="prototype">void
-mono_image_addref (MonoImage *image)
-
-</div>
-<p />
-<b>Parameters</b>
-<blockquote><dt><i>image:</i></dt><dd> The image file we wish to add a reference to</dd></blockquote>
-<b>Remarks</b>
-<p />	 
-	  Increases the reference count of an image.
-
-</div> <a name="api:mono_image_load_file_for_image"></a>
- <div class="api">
-    <div class="api-entry">mono_image_load_file_for_image</div>
-
-    <div class="prototype">Prototype: mono_image_load_file_for_image</div>
-<p />
-
-
-</div><h3>Image Information</h3>
-
- <a name="api:mono_image_get_guid"></a>
- <div class="api">
-    <div class="api-entry">mono_image_get_guid</div>
-
-    <div class="prototype">Prototype: mono_image_get_guid</div>
-<p />
-
-</div> <a name="api:mono_image_get_assembly"></a>
- <div class="api">
-    <div class="api-entry">mono_image_get_assembly</div>
-
-    <div class="prototype">MonoAssembly* 
-mono_image_get_assembly (MonoImage *image)
-
-</div>
-<p />
-<b>Parameters</b>
-<blockquote><dt><i>image:</i></dt><dd> the MonoImage.</dd></blockquote>
-<b>Returns</b>
-<blockquote>	  the assembly that holds this image.
-</blockquote>
-<b>Remarks</b>
-<p />	 
-	 Use this routine to get the assembly that owns this image.
-	
-
-</div> <a name="api:mono_image_get_entry_point"></a>
- <div class="api">
-    <div class="api-entry">mono_image_get_entry_point</div>
-
-    <div class="prototype">guint32
-mono_image_get_entry_point (MonoImage *image)
-
-</div>
-<p />
-<b>Parameters</b>
-<blockquote><dt><i>image:</i></dt><dd> the image where the entry point will be looked up.</dd></blockquote>
-<b>Returns</b>
-<blockquote>	  the token for the entry point method in the image
-</blockquote>
-<b>Remarks</b>
-<p />	 
-	 Use this routine to determine the metadata token for method that
-	 has been flagged as the entry point.
-	
-
-</div> <a name="api:mono_image_get_filename"></a>
- <div class="api">
-    <div class="api-entry">mono_image_get_filename</div>
-
-    <div class="prototype">const char*
-mono_image_get_filename (MonoImage *image)
-
-</div>
-<p />
-<b>Parameters</b>
-<blockquote><dt><i>image:</i></dt><dd> a MonoImage</dd></blockquote>
-<b>Returns</b>
-<blockquote>	  the filename.
-</blockquote>
-<b>Remarks</b>
-<p />	 
-	 Used to get the filename that hold the actual MonoImage
-	
-
-</div> <a name="api:mono_image_get_name"></a>
- <div class="api">
-    <div class="api-entry">mono_image_get_name</div>
-
-    <div class="prototype">const char*
-mono_image_get_name (MonoImage *image)
-
-</div>
-<p />
-<b>Parameters</b>
-<blockquote><dt><i>name:</i></dt><dd> a MonoImage</dd></blockquote>
-<b>Returns</b>
-<blockquote>	  the name of the assembly.
-</blockquote>
-
-</div> <a name="api:mono_image_get_resource"></a>
- <div class="api">
-    <div class="api-entry">mono_image_get_resource</div>
-
-    <div class="prototype">const char*
-mono_image_get_resource (MonoImage *image, guint32 offset, guint32 *size)
-
-</div>
-<p />
-<b>Parameters</b>
-<blockquote><dt><i>image:</i></dt><dd> the image where the resource will be looked up.</dd><dt><i>offset:</i></dt><dd> The offset to add to the resource</dd><dt><i>size:</i></dt><dd> a pointer to an int where the size of the resource will be stored</dd></blockquote>
-<b>Returns</b>
-<blockquote>	  the pointer to the resource whose offset is <i>offset</i>.
-</blockquote>
-<b>Remarks</b>
-<p />	 
-	 This is a low-level routine that fetches a resource from the
-	 metadata that starts at a given <i>offset</i>.  The <i>size</i> parameter is
-	 filled with the data field as encoded in the metadata.
-	
-
-</div> <a name="api:mono_image_get_table_info"></a>
- <div class="api">
-    <div class="api-entry">mono_image_get_table_info</div>
-
-    <div class="prototype">Prototype: mono_image_get_table_info</div>
-<p />
-
-</div> <a name="api:mono_image_get_table_rows"></a>
- <div class="api">
-    <div class="api-entry">mono_image_get_table_rows</div>
-
-    <div class="prototype">Prototype: mono_image_get_table_rows</div>
-<p />
-
-</div> <a name="api:mono_image_is_dynamic"></a>
- <div class="api">
-    <div class="api-entry">mono_image_is_dynamic</div>
-
-    <div class="prototype">gboolean
-mono_image_is_dynamic (MonoImage *image)
-
-</div>
-<p />
-<b>Parameters</b>
-<blockquote><dt><i>image:</i></dt><dd> the MonoImage</dd></blockquote>
-<b>Returns</b>
-<blockquote>	  TRUE if the image was created dynamically, FALSE if not.
-</blockquote>
-<b>Remarks</b>
-<p />	 
-	 Determines if the given image was created dynamically through the
-	 System.Reflection.Emit API
-	
-
-</div> <a name="api:mono_image_loaded_by_guid"></a>
- <div class="api">
-    <div class="api-entry">mono_image_loaded_by_guid</div>
-
-    <div class="prototype">Prototype: mono_image_loaded_by_guid</div>
-<p />
-
-</div> <a name="api:mono_image_loaded"></a>
- <div class="api">
-    <div class="api-entry">mono_image_loaded</div>
-
-    <div class="prototype">MonoImage*
-mono_image_loaded (const char *name)
-
-</div>
-<p />
-<b>Parameters</b>
-<blockquote><dt><i>name:</i></dt><dd> name of the image to load</dd></blockquote>
-<b>Returns</b>
-<blockquote>	  the loaded MonoImage, or NULL on failure.
-</blockquote>
-<b>Remarks</b>
-<p />	 
-	 This routine ensures that the given image is loaded.
-	
-
-</div> <a name="api:mono_image_lookup_resource"></a>
- <div class="api">
-    <div class="api-entry">mono_image_lookup_resource</div>
-
-    <div class="prototype">gpointer
-mono_image_lookup_resource (MonoImage *image, guint32 res_id, guint32 lang_id, gunichar2 *name)
-
-</div>
-<p />
-<b>Parameters</b>
-<blockquote><dt><i>image:</i></dt><dd> the image to look up the resource in</dd><dt><i>res_id:</i></dt><dd> A MONO_PE_RESOURCE_ID_ that represents the resource ID to lookup.</dd><dt><i>lang_id:</i></dt><dd> The language id.</dd><dt><i>name:</i></dt><dd> the resource name to lookup.</dd></blockquote>
-<b>Returns</b>
-<blockquote>	  NULL if not found, otherwise a pointer to the in-memory representation
-
-	 of the given resource. The caller should free it using g_free () when no longer
-	 needed.</blockquote>
-
-</div> <a name="api:mono_image_strerror"></a>
- <div class="api">
-    <div class="api-entry">mono_image_strerror</div>
-
-    <div class="prototype">const char *
-mono_image_strerror (MonoImageOpenStatus status)
-
-</div>
-<p />
-<b>Parameters</b>
-<blockquote><dt><i>status:</i></dt><dd> an code indicating the result from a recent operation</dd></blockquote>
-<b>Returns</b>
-<blockquote>	  a string describing the error
-</blockquote>
-
-
-</div><h3>Public Keys, Strong Names and Certificates</h3>
-
- <a name="api:mono_image_strong_name_position"></a>
- <div class="api">
-    <div class="api-entry">mono_image_strong_name_position</div>
-
-    <div class="prototype">guint32
-mono_image_strong_name_position (MonoImage *image, guint32 *size)
-
-</div>
-<p />
-<b>Parameters</b>
-<blockquote><dt><i>image:</i></dt><dd> a MonoImage</dd><dt><i>size:</i></dt><dd> a guint32 pointer, or NULL.</dd></blockquote>
-<b>Returns</b>
-<blockquote>	  the position within the image file where the strong name
-
-	 is stored.</blockquote>
-<b>Remarks</b>
-<p />	 
-	 If the image has a strong name, and <i>size</i> is not NULL, the value
-	 pointed to by size will have the size of the strong name.
-	
-
-</div> <a name="api:mono_image_get_public_key"></a>
- <div class="api">
-    <div class="api-entry">mono_image_get_public_key</div>
-
-    <div class="prototype">const char*
-mono_image_get_public_key (MonoImage *image, guint32 *size)
-
-</div>
-<p />
-<b>Parameters</b>
-<blockquote><dt><i>image:</i></dt><dd> a MonoImage</dd><dt><i>size:</i></dt><dd> a guint32 pointer, or NULL.</dd></blockquote>
-<b>Returns</b>
-<blockquote>	  NULL if the image does not have a public key, or a pointer
-
-	 to the public key.</blockquote>
-<b>Remarks</b>
-<p />	 
-	 This is used to obtain the public key in the <i>image</i>.
-	
-<p />
-	 If the image has a public key, and <i>size</i> is not NULL, the value
-	 pointed to by size will have the size of the public key.
-	
-<p />
-
-</div> <a name="api:mono_image_get_strong_name"></a>
- <div class="api">
-    <div class="api-entry">mono_image_get_strong_name</div>
-
-    <div class="prototype">const char*
-mono_image_get_strong_name (MonoImage *image, guint32 *size)
-
-</div>
-<p />
-<b>Parameters</b>
-<blockquote><dt><i>image:</i></dt><dd> a MonoImage</dd><dt><i>size:</i></dt><dd> a guint32 pointer, or NULL.</dd></blockquote>
-<b>Returns</b>
-<blockquote>	  NULL if the image does not have a strong name, or a
-
-	 pointer to the public key.</blockquote>
-<b>Remarks</b>
-<p />	 
-	 If the image has a strong name, and <i>size</i> is not NULL, the value
-	 pointed to by size will have the size of the strong name.
-	
-
-</div> <a name="api:mono_image_has_authenticode_entry"></a>
- <div class="api">
-    <div class="api-entry">mono_image_has_authenticode_entry</div>
-
-    <div class="prototype">gboolean
-mono_image_has_authenticode_entry (MonoImage *image)
-
-</div>
-<p />
-<b>Parameters</b>
-<blockquote><dt><i>image:</i></dt><dd> the MonoImage</dd></blockquote>
-<b>Returns</b>
-<blockquote>	  TRUE if the image contains an authenticode entry in the PE
-
-	 directory.</blockquote>
-<b>Remarks</b>
-<p />	 
-	 Use this routine to determine if the image has a Authenticode
-	 Certificate Table.
-	
-
-
-</div><h3>Low-level features</h3>
-
- <a name="api:mono_image_rva_map"></a>
- <div class="api">
-    <div class="api-entry">mono_image_rva_map</div>
-
-    <div class="prototype">Prototype: mono_image_rva_map</div>
-<p />
-
-</div> <a name="api:mono_image_ensure_section_idx"></a>
- <div class="api">
-    <div class="api-entry">mono_image_ensure_section_idx</div>
-
-    <div class="prototype">int
-mono_image_ensure_section_idx (MonoImage *image, int section)
-
-</div>
-<p />
-<b>Parameters</b>
-<blockquote><dt><i>image:</i></dt><dd> The image we are operating on</dd><dt><i>section:</i></dt><dd> section number that we will load/map into memory</dd></blockquote>
-<b>Returns</b>
-<blockquote>	  TRUE on success
-</blockquote>
-<b>Remarks</b>
-<p />	 
-	 This routine makes sure that we have an in-memory copy of
-	 an image section (.text, .rsrc, .data).
-	
-
-</div></body>
-</html>
-</span>
\ No newline at end of file
diff --git a/docs/deploy/mono-api-internal.html b/docs/deploy/mono-api-internal.html
deleted file mode 100644
index eb3b612..0000000
--- a/docs/deploy/mono-api-internal.html
+++ /dev/null
@@ -1,584 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?><span>
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-   <title>mono-api-internal.html</title>
-   <style type="text/css">
-
-
-   h3 { 
-       font-size: 18px;
-       padding-bottom: 4pt;
-       border-bottom: 2px solid #dddddd;
-   }
-       
-   .api {
-     border: 1px solid;
-     padding: 10pt;
-     margin: 10pt;
-   } 
-
-   .api-entry { 
-       border-bottom: none;
-       font-size: 18px;
-   }
-
-   .prototype {
-     border: 1px solid;
-     background-color: #f2f2f2;
-     padding: 5pt;
-     margin-top: 5pt;
-     margin-bottom: 5pt;  
-   } 
-
-   .header {
-     border: 1px solid;
-     padding: 0 0 5pt 5pt;
-     margin: 10pt;
-     white-space: pre;
-       font-family: monospace;
-   }
-    
-   .code {
-     border: 1px solid;
-     padding: 0 0 5pt 5pt;
-     margin: 10pt;
-     white-space: pre;
-       font-family: monospace;
-   }
-   
-
-</style>
-</head>
-<body>
-<h1>Mono Internals</h1>
-
-	<p />This section documents some of the internal APIs used
-	inside Mono that developers extending or altering Mono might
-	want to use.
-
-<h2>Marshalling functions</h2>
-
- <a name="api:mono_marshal_alloc"></a>
- <div class="api">
-    <div class="api-entry">mono_marshal_alloc</div>
-
-    <div class="prototype">Prototype: mono_marshal_alloc</div>
-<p />
-
-</div> <a name="api:mono_marshal_asany"></a>
- <div class="api">
-    <div class="api-entry">mono_marshal_asany</div>
-
-    <div class="prototype">Prototype: mono_marshal_asany</div>
-<p />
-
-</div> <a name="api:mono_marshal_free_array"></a>
- <div class="api">
-    <div class="api-entry">mono_marshal_free_array</div>
-
-    <div class="prototype">Prototype: mono_marshal_free_array</div>
-<p />
-
-</div> <a name="api:mono_marshal_free_asany"></a>
- <div class="api">
-    <div class="api-entry">mono_marshal_free_asany</div>
-
-    <div class="prototype">Prototype: mono_marshal_free_asany</div>
-<p />
-
-</div> <a name="api:mono_marshal_free"></a>
- <div class="api">
-    <div class="api-entry">mono_marshal_free</div>
-
-    <div class="prototype">Prototype: mono_marshal_free</div>
-<p />
-
-</div> <a name="api:mono_marshal_get_castclass"></a>
- <div class="api">
-    <div class="api-entry">mono_marshal_get_castclass</div>
-
-    <div class="prototype">Prototype: mono_marshal_get_castclass</div>
-<p />
-
-</div> <a name="api:mono_marshal_get_delegate_begin_invoke"></a>
- <div class="api">
-    <div class="api-entry">mono_marshal_get_delegate_begin_invoke</div>
-
-    <div class="prototype">Prototype: mono_marshal_get_delegate_begin_invoke</div>
-<p />
-
-</div> <a name="api:mono_marshal_get_delegate_end_invoke"></a>
- <div class="api">
-    <div class="api-entry">mono_marshal_get_delegate_end_invoke</div>
-
-    <div class="prototype">Prototype: mono_marshal_get_delegate_end_invoke</div>
-<p />
-
-</div> <a name="api:mono_marshal_get_delegate_invoke"></a>
- <div class="api">
-    <div class="api-entry">mono_marshal_get_delegate_invoke</div>
-
-    <div class="prototype">Prototype: mono_marshal_get_delegate_invoke</div>
-<p />
-
-</div> <a name="api:mono_marshal_get_icall_wrapper"></a>
- <div class="api">
-    <div class="api-entry">mono_marshal_get_icall_wrapper</div>
-
-    <div class="prototype">Prototype: mono_marshal_get_icall_wrapper</div>
-<p />
-
-</div> <a name="api:mono_marshal_get_isinst"></a>
- <div class="api">
-    <div class="api-entry">mono_marshal_get_isinst</div>
-
-    <div class="prototype">Prototype: mono_marshal_get_isinst</div>
-<p />
-
-</div> <a name="api:mono_marshal_get_ldfld_remote_wrapper"></a>
- <div class="api">
-    <div class="api-entry">mono_marshal_get_ldfld_remote_wrapper</div>
-
-    <div class="prototype">Prototype: mono_marshal_get_ldfld_remote_wrapper</div>
-<p />
-
-</div> <a name="api:mono_marshal_get_ldfld_wrapper"></a>
- <div class="api">
-    <div class="api-entry">mono_marshal_get_ldfld_wrapper</div>
-
-    <div class="prototype">Prototype: mono_marshal_get_ldfld_wrapper</div>
-<p />
-
-</div> <a name="api:mono_marshal_get_managed_wrapper"></a>
- <div class="api">
-    <div class="api-entry">mono_marshal_get_managed_wrapper</div>
-
-    <div class="prototype">Prototype: mono_marshal_get_managed_wrapper</div>
-<p />
-
-</div> <a name="api:mono_marshal_get_native_wrapper"></a>
- <div class="api">
-    <div class="api-entry">mono_marshal_get_native_wrapper</div>
-
-    <div class="prototype">MonoMethod*
-mono_marshal_get_native_wrapper (MonoMethod *method, gboolean check_exceptions, gboolean aot)
-
-</div>
-<p />
-<b>Parameters</b>
-<blockquote><dt><i>method:</i></dt><dd> The MonoMethod to wrap.</dd><dt><i>check_exceptions:</i></dt><dd> Whenever to check for pending exceptions</dd></blockquote>
-<b>Remarks</b>
-<p />	 
-	 generates IL code for the pinvoke wrapper (the generated method
-	 calls the unmanaged code in piinfo->addr)
-
-</div> <a name="api:mono_marshal_get_proxy_cancast"></a>
- <div class="api">
-    <div class="api-entry">mono_marshal_get_proxy_cancast</div>
-
-    <div class="prototype">Prototype: mono_marshal_get_proxy_cancast</div>
-<p />
-
-</div> <a name="api:mono_marshal_get_ptr_to_struct"></a>
- <div class="api">
-    <div class="api-entry">mono_marshal_get_ptr_to_struct</div>
-
-    <div class="prototype">MonoMethod*
-mono_marshal_get_ptr_to_struct (MonoClass *klass)
-
-</div>
-<p />
-<b>Parameters</b>
-<blockquote><dt><i>klass:</i></dt><dd></dd></blockquote>
-<b>Remarks</b>
-<p />	 
-	 generates IL code for PtrToStructure (IntPtr src, object structure)
-
-</div> <a name="api:mono_marshal_get_remoting_invoke_for_target"></a>
- <div class="api">
-    <div class="api-entry">mono_marshal_get_remoting_invoke_for_target</div>
-
-    <div class="prototype">Prototype: mono_marshal_get_remoting_invoke_for_target</div>
-<p />
-
-</div> <a name="api:mono_marshal_get_remoting_invoke"></a>
- <div class="api">
-    <div class="api-entry">mono_marshal_get_remoting_invoke</div>
-
-    <div class="prototype">Prototype: mono_marshal_get_remoting_invoke</div>
-<p />
-
-</div> <a name="api:mono_marshal_get_remoting_invoke_with_check"></a>
- <div class="api">
-    <div class="api-entry">mono_marshal_get_remoting_invoke_with_check</div>
-
-    <div class="prototype">Prototype: mono_marshal_get_remoting_invoke_with_check</div>
-<p />
-
-</div> <a name="api:mono_marshal_get_runtime_invoke"></a>
- <div class="api">
-    <div class="api-entry">mono_marshal_get_runtime_invoke</div>
-
-    <div class="prototype">Prototype: mono_marshal_get_runtime_invoke</div>
-<p />
-
-</div> <a name="api:mono_marshal_get_stelemref"></a>
- <div class="api">
-    <div class="api-entry">mono_marshal_get_stelemref</div>
-
-    <div class="prototype">Prototype: mono_marshal_get_stelemref</div>
-<p />
-
-</div> <a name="api:mono_marshal_get_stfld_remote_wrapper"></a>
- <div class="api">
-    <div class="api-entry">mono_marshal_get_stfld_remote_wrapper</div>
-
-    <div class="prototype">Prototype: mono_marshal_get_stfld_remote_wrapper</div>
-<p />
-
-</div> <a name="api:mono_marshal_get_stfld_wrapper"></a>
- <div class="api">
-    <div class="api-entry">mono_marshal_get_stfld_wrapper</div>
-
-    <div class="prototype">Prototype: mono_marshal_get_stfld_wrapper</div>
-<p />
-
-</div> <a name="api:mono_marshal_get_struct_to_ptr"></a>
- <div class="api">
-    <div class="api-entry">mono_marshal_get_struct_to_ptr</div>
-
-    <div class="prototype">MonoMethod*
-mono_marshal_get_struct_to_ptr (MonoClass *klass)
-
-</div>
-<p />
-<b>Parameters</b>
-<blockquote><dt><i>klass:</i></dt><dd></dd></blockquote>
-<b>Remarks</b>
-<p />	 
-	 generates IL code for StructureToPtr (object structure, IntPtr ptr, bool fDeleteOld)
-
-</div> <a name="api:mono_marshal_get_synchronized_wrapper"></a>
- <div class="api">
-    <div class="api-entry">mono_marshal_get_synchronized_wrapper</div>
-
-    <div class="prototype">Prototype: mono_marshal_get_synchronized_wrapper</div>
-<p />
-
-</div> <a name="api:mono_marshal_get_unbox_wrapper"></a>
- <div class="api">
-    <div class="api-entry">mono_marshal_get_unbox_wrapper</div>
-
-    <div class="prototype">Prototype: mono_marshal_get_unbox_wrapper</div>
-<p />
-
-</div> <a name="api:mono_marshal_get_xappdomain_invoke"></a>
- <div class="api">
-    <div class="api-entry">mono_marshal_get_xappdomain_invoke</div>
-
-    <div class="prototype">Prototype: mono_marshal_get_xappdomain_invoke</div>
-<p />
-
-</div> <a name="api:mono_marshal_load_type_info"></a>
- <div class="api">
-    <div class="api-entry">mono_marshal_load_type_info</div>
-
-    <div class="prototype">MonoMarshalType*
-mono_marshal_load_type_info (MonoClass* klass)
-
-</div>
-<p />
-<b>Remarks</b>
-<p />	 
-	  Initialize klass->marshal_info using information from metadata. This function can
-	 recursively call itself, and the caller is responsible to avoid that by calling 
-	 mono_marshal_is_loading_type_info () beforehand.
-	
-	 LOCKING: Acquires the loader lock.
-
-</div> <a name="api:mono_marshal_method_from_wrapper"></a>
- <div class="api">
-    <div class="api-entry">mono_marshal_method_from_wrapper</div>
-
-    <div class="prototype">Prototype: mono_marshal_method_from_wrapper</div>
-<p />
-
-</div> <a name="api:mono_marshal_realloc"></a>
- <div class="api">
-    <div class="api-entry">mono_marshal_realloc</div>
-
-    <div class="prototype">Prototype: mono_marshal_realloc</div>
-<p />
-
-</div> <a name="api:mono_marshal_set_last_error"></a>
- <div class="api">
-    <div class="api-entry">mono_marshal_set_last_error</div>
-
-    <div class="prototype">void
-mono_marshal_set_last_error (void)
-
-</div>
-<p />
-<b>Remarks</b>
-<p />	 
-	 This function is invoked to set the last error value from a P/Invoke call
-	 which has SetLastError set.
-
-</div> <a name="api:mono_marshal_type_size"></a>
- <div class="api">
-    <div class="api-entry">mono_marshal_type_size</div>
-
-    <div class="prototype">Prototype: mono_marshal_type_size</div>
-<p />
-
-
-</div><h2>Metadata Loading Errors</h2>
-
-	<p />The routines in this section are used to cope with errors
-	during metadata loading.  Errors in metadata handling can
-	happen for many reason, and these include (this is not an
-	exhaustive list).
-
-	<ul>
-		<li>An assembly referenced is missing.
-		<li>Fields referenced are missing.
-		<li>Methods referenced are missing.
-	</li></li></li></ul>
-
-	<p />The <tt>mono_loader_set_*</tt> routines are invoked during
-	metadata loading to flag that an error has happened.  The
-	class loading errros are flagged in a per-thread basis.
-
-	<p />In various spots in the runtime the
-	<tt>mono_loader_get_last_error</tt> routine is called to check
-	if there was a problem, and then errors are propagated upwards
-	on the stack until we reach a point where an exception can be
-	raised and no runtime locks are held.
-
-	<p />The <tt>mono_loader_error_prepare_exception</tt> takes a
-	<tt>MonoLoaderError</tt> structure (the value returned from
-	<tt>mono_loader_get_last_error</tt>), turns that into an
-	exception and clears the error condition from the current
-	thread. 
-	
- <a name="api:mono_loader_set_error_field_load"></a>
- <div class="api">
-    <div class="api-entry">mono_loader_set_error_field_load</div>
-
-    <div class="prototype">Prototype: mono_loader_set_error_field_load</div>
-<p />
-
-</div> <a name="api:mono_loader_set_error_method_load"></a>
- <div class="api">
-    <div class="api-entry">mono_loader_set_error_method_load</div>
-
-    <div class="prototype">Prototype: mono_loader_set_error_method_load</div>
-<p />
-
-</div> <a name="api:mono_loader_set_error_type_load"></a>
- <div class="api">
-    <div class="api-entry">mono_loader_set_error_type_load</div>
-
-    <div class="prototype">void
-mono_loader_set_error_type_load (const char *class_name, const char *assembly_name)
-
-</div>
-<p />
-<b>Remarks</b>
-<p />	 
-	 Set the loader error for this thread. 
-
-
-</div> <a name="api:mono_loader_get_last_error"></a>
- <div class="api">
-    <div class="api-entry">mono_loader_get_last_error</div>
-
-    <div class="prototype">Prototype: mono_loader_get_last_error</div>
-<p />
-
-</div> <a name="api:mono_loader_clear_error"></a>
- <div class="api">
-    <div class="api-entry">mono_loader_clear_error</div>
-
-    <div class="prototype">void
-mono_loader_clear_error (void)
-
-</div>
-<p />
-<b>Remarks</b>
-<p />	 
-	 Disposes any loader error messages on this thread
-
-</div> <a name="api:mono_loader_error_prepare_exception"></a>
- <div class="api">
-    <div class="api-entry">mono_loader_error_prepare_exception</div>
-
-    <div class="prototype">MonoException*
-mono_loader_error_prepare_exception (MonoLoaderError *error)
-
-</div>
-<p />
-<b>Parameters</b>
-<blockquote><dt><i>error:</i></dt><dd> The MonoLoaderError to turn into an exception</dd></blockquote>
-<b>Remarks</b>
-<p />	 
-	 This turns a MonoLoaderError into an exception that can be thrown
-	 and resets the Mono Loader Error state during this process.
-	
-
-
-</div><h2>Metadata Loader Locking: Internals</h2>
-
-	<p />The locking functions here are used by code in class.c and
-	metadata.c to lock access to the shared hashtables inside the
-	MonoImage.
-	
- <a name="api:mono_loader_lock"></a>
- <div class="api">
-    <div class="api-entry">mono_loader_lock</div>
-
-    <div class="prototype">void
-mono_loader_lock (void)
-
-</div>
-<p />
-<b>Remarks</b>
-<p />	 
-	 See docs/thread-safety.txt for the locking strategy.
-
-</div> <a name="api:mono_loader_unlock"></a>
- <div class="api">
-    <div class="api-entry">mono_loader_unlock</div>
-
-    <div class="prototype">Prototype: mono_loader_unlock</div>
-<p />
-
-
-</div><h2>Garbage Collector Internal Interface</h2>
-
-	<p />The internal interface of the Mono GC is the interface used
-	between the runtime engine and the garbage collector.
-	
- <a name="api:mono_gc_disable"></a>
- <div class="api">
-    <div class="api-entry">mono_gc_disable</div>
-
-    <div class="prototype">Prototype: mono_gc_disable</div>
-<p />
-
-</div> <a name="api:mono_gc_enable"></a>
- <div class="api">
-    <div class="api-entry">mono_gc_enable</div>
-
-    <div class="prototype">Prototype: mono_gc_enable</div>
-<p />
-
-</div> <a name="api:mono_gc_is_finalizer_thread"></a>
- <div class="api">
-    <div class="api-entry">mono_gc_is_finalizer_thread</div>
-
-    <div class="prototype">gboolean
-mono_gc_is_finalizer_thread (MonoThread *thread)
-
-</div>
-<p />
-<b>Parameters</b>
-<blockquote><dt><i>thread:</i></dt><dd> the thread to test.</dd></blockquote>
-<b>Remarks</b>
-<p />	 
-	 In Mono objects are finalized asynchronously on a separate thread.
-	 This routine tests whether the <i>thread</i> argument represents the
-	 finalization thread.
-	
-<p />
-	 Returns true if <i>thread</i> is the finalization thread.
-
-</div> <a name="api:mono_gc_out_of_memory"></a>
- <div class="api">
-    <div class="api-entry">mono_gc_out_of_memory</div>
-
-    <div class="prototype">Prototype: mono_gc_out_of_memory</div>
-<p />
-
-</div> <a name="api:mono_gc_start_world"></a>
- <div class="api">
-    <div class="api-entry">mono_gc_start_world</div>
-
-    <div class="prototype">Prototype: mono_gc_start_world</div>
-<p />
-
-</div> <a name="api:mono_gc_stop_world"></a>
- <div class="api">
-    <div class="api-entry">mono_gc_stop_world</div>
-
-    <div class="prototype">Prototype: mono_gc_stop_world</div>
-<p />
-
-</div> <a name="api:mono_gc_alloc_fixed"></a>
- <div class="api">
-    <div class="api-entry">mono_gc_alloc_fixed</div>
-
-    <div class="prototype">Prototype: mono_gc_alloc_fixed</div>
-<p />
-
-</div> <a name="api:mono_gc_enable_events"></a>
- <div class="api">
-    <div class="api-entry">mono_gc_enable_events</div>
-
-    <div class="prototype">Prototype: mono_gc_enable_events</div>
-<p />
-
-</div> <a name="api:mono_gc_free_fixed"></a>
- <div class="api">
-    <div class="api-entry">mono_gc_free_fixed</div>
-
-    <div class="prototype">Prototype: mono_gc_free_fixed</div>
-<p />
-
-</div> <a name="api:mono_gc_make_descr_from_bitmap"></a>
- <div class="api">
-    <div class="api-entry">mono_gc_make_descr_from_bitmap</div>
-
-    <div class="prototype">Prototype: mono_gc_make_descr_from_bitmap</div>
-<p />
-
-
-
-</div> <a name="api:mono_gc_base_init"></a>
- <div class="api">
-    <div class="api-entry">mono_gc_base_init</div>
-
-    <div class="prototype">Prototype: mono_gc_base_init</div>
-<p />
-
-</div> <a name="api:mono_gc_invoke_finalizers"></a>
- <div class="api">
-    <div class="api-entry">mono_gc_invoke_finalizers</div>
-
-    <div class="prototype">Prototype: mono_gc_invoke_finalizers</div>
-<p />
-
-</div> <a name="api:mono_gc_is_gc_thread"></a>
- <div class="api">
-    <div class="api-entry">mono_gc_is_gc_thread</div>
-
-    <div class="prototype">Prototype: mono_gc_is_gc_thread</div>
-<p />
-
-</div> <a name="api:mono_gc_pending_finalizers"></a>
- <div class="api">
-    <div class="api-entry">mono_gc_pending_finalizers</div>
-
-    <div class="prototype">Prototype: mono_gc_pending_finalizers</div>
-<p />
-
-</div> <a name="api:mono_gc_register_thread"></a>
- <div class="api">
-    <div class="api-entry">mono_gc_register_thread</div>
-
-    <div class="prototype">Prototype: mono_gc_register_thread</div>
-<p />
-
-</div></body>
-</html>
-</span>
\ No newline at end of file
diff --git a/docs/deploy/mono-api-jit.html b/docs/deploy/mono-api-jit.html
deleted file mode 100644
index 471c46c..0000000
--- a/docs/deploy/mono-api-jit.html
+++ /dev/null
@@ -1,141 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?><span>
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-   <title>mono-api-jit.html</title>
-   <style type="text/css">
-
-
-   h3 { 
-       font-size: 18px;
-       padding-bottom: 4pt;
-       border-bottom: 2px solid #dddddd;
-   }
-       
-   .api {
-     border: 1px solid;
-     padding: 10pt;
-     margin: 10pt;
-   } 
-
-   .api-entry { 
-       border-bottom: none;
-       font-size: 18px;
-   }
-
-   .prototype {
-     border: 1px solid;
-     background-color: #f2f2f2;
-     padding: 5pt;
-     margin-top: 5pt;
-     margin-bottom: 5pt;  
-   } 
-
-   .header {
-     border: 1px solid;
-     padding: 0 0 5pt 5pt;
-     margin: 10pt;
-     white-space: pre;
-       font-family: monospace;
-   }
-    
-   .code {
-     border: 1px solid;
-     padding: 0 0 5pt 5pt;
-     margin: 10pt;
-     white-space: pre;
-       font-family: monospace;
-   }
-   
-
-</style>
-</head>
-<body>
-<h2>Synopsis</h2>
-
-<div class="header">
-G_GNUC_UNUSED char * <a href="#api:mono_pmip">mono_pmip</a>                        (void *ip);
-void                 <a href="#api:mono_print_method_from_ip">mono_print_method_from_ip</a>        (void *ip);
-                     <a href="#api:mono_print_thread_dump"></a>                                 
-void                 <a href="#api:mono_threads_request_thread_dump">mono_threads_request_thread_dump</a> (void);
-                     <a href="#api:mono_inst_name"></a>                                 
-
-</div>
-
-<h3>Useful Debugging Functions</h3>
-
-	<p />These functions are useful when running the Mono VM inside
-	a debugger.
-
- <a name="api:mono_pmip"></a>
- <div class="api">
-    <div class="api-entry">mono_pmip</div>
-
-    <div class="prototype">G_GNUC_UNUSED char *
-mono_pmip (void *ip)
-
-</div>
-<p />
-<b>Parameters</b>
-<blockquote><dt><i>ip:</i></dt><dd> an instruction pointer address</dd></blockquote>
-<b>Returns</b>
-<blockquote>	  the name of the method at address <i>ip</i>.
-</blockquote>
-<b>Remarks</b>
-<p />	 
-	 This method is used from a debugger to get the name of the
-	 method at address <i>ip</i>.   This routine is typically invoked from
-	 a debugger like this:
-	
-	 (gdb) print mono_pmip ($pc)
-	
-
-</div> <a name="api:mono_print_method_from_ip"></a>
- <div class="api">
-    <div class="api-entry">mono_print_method_from_ip</div>
-
-    <div class="prototype">#ifdef __GNUC__
-/* Prevent the linker from optimizing this away in embedding setups to help debugging */
- __attribute__((used))
-#endif
-void
-mono_print_method_from_ip (void *ip)
-
-</div>
-<p />
-<b>Parameters</b>
-<blockquote><dt><i>ip:</i></dt><dd> an instruction pointer address</dd></blockquote>
-<b>Remarks</b>
-<p />	 
-	 This method is used from a debugger to get the name of the
-	 method at address <i>ip</i>.
-	
-	 This prints the name of the method at address <i>ip</i> in the standard
-	 output.  Unlike mono_pmip which returns a string, this routine
-	 prints the value on the standard output. 
-
-</div> <a name="api:mono_print_thread_dump"></a>
- <div class="api">
-    <div class="api-entry">mono_print_thread_dump</div>
-
-    <div class="prototype">Prototype: mono_print_thread_dump</div>
-<p />
-
-</div> <a name="api:mono_threads_request_thread_dump"></a>
- <div class="api">
-    <div class="api-entry">mono_threads_request_thread_dump</div>
-
-    <div class="prototype">void
-mono_threads_request_thread_dump (void)
-
-</div>
-<p />
-<b>Remarks</b>
-<p />	 
-	   Ask all threads except the current to print their stacktrace to stdout.
-
-
-</div><h3>Helper Tools For Native Ports</h3>
-
-</body>
-</html>
-</span>
\ No newline at end of file
diff --git a/docs/deploy/mono-api-jitinternal.html b/docs/deploy/mono-api-jitinternal.html
deleted file mode 100644
index 476c9d7..0000000
--- a/docs/deploy/mono-api-jitinternal.html
+++ /dev/null
@@ -1,247 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?><span>
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-   <title>mono-api-jitinternal.html</title>
-   <style type="text/css">
-
-
-   h3 { 
-       font-size: 18px;
-       padding-bottom: 4pt;
-       border-bottom: 2px solid #dddddd;
-   }
-       
-   .api {
-     border: 1px solid;
-     padding: 10pt;
-     margin: 10pt;
-   } 
-
-   .api-entry { 
-       border-bottom: none;
-       font-size: 18px;
-   }
-
-   .prototype {
-     border: 1px solid;
-     background-color: #f2f2f2;
-     padding: 5pt;
-     margin-top: 5pt;
-     margin-bottom: 5pt;  
-   } 
-
-   .header {
-     border: 1px solid;
-     padding: 0 0 5pt 5pt;
-     margin: 10pt;
-     white-space: pre;
-       font-family: monospace;
-   }
-    
-   .code {
-     border: 1px solid;
-     padding: 0 0 5pt 5pt;
-     margin: 10pt;
-     white-space: pre;
-       font-family: monospace;
-   }
-   
-
-</style>
-</head>
-<body>
-<h1>Notification Interface</h1>
-
-	<p />This is an internal profiler interface.   In general, users
-	would not be using this interface, but would be using the
-	profiler interface. 
-
-	<p />These methods must be called to notify the profiler of an
-	event that must be recorded.   Mono's JIT engine currently
-	calls these routines, but if you are extending Mono in some
-	way these are the methods that you might invoke to notify the
-	profiler of an event.
-
- <a name="api:mono_profiler_load"></a>
- <div class="api">
-    <div class="api-entry">mono_profiler_load</div>
-
-    <div class="prototype">void 
-mono_profiler_load (const char *desc)
-
-</div>
-<p />
-<b>Parameters</b>
-<blockquote><dt><i>desc:</i></dt><dd> arguments to configure the profiler</dd></blockquote>
-<b>Remarks</b>
-<p />	 
-	 Invoke this method to initialize the profiler.   This will drive the
-	 loading of the internal ("default") or any external profilers.
-	
-	 This routine is invoked by Mono's driver, but must be called manually
-	 if you embed Mono into your application.
-
-</div> <a name="api:mono_profiler_allocation"></a>
- <div class="api">
-    <div class="api-entry">mono_profiler_allocation</div>
-
-    <div class="prototype">Prototype: mono_profiler_allocation</div>
-<p />
-
-</div> <a name="api:mono_profiler_stat_hit"></a>
- <div class="api">
-    <div class="api-entry">mono_profiler_stat_hit</div>
-
-    <div class="prototype">Prototype: mono_profiler_stat_hit</div>
-<p />
-
-</div> <a name="api:mono_profiler_thread_start"></a>
- <div class="api">
-    <div class="api-entry">mono_profiler_thread_start</div>
-
-    <div class="prototype">Prototype: mono_profiler_thread_start</div>
-<p />
-
-</div> <a name="api:mono_profiler_thread_end"></a>
- <div class="api">
-    <div class="api-entry">mono_profiler_thread_end</div>
-
-    <div class="prototype">Prototype: mono_profiler_thread_end</div>
-<p />
-
-</div> <a name="api:mono_profiler_appdomain_event"></a>
- <div class="api">
-    <div class="api-entry">mono_profiler_appdomain_event</div>
-
-    <div class="prototype">Prototype: mono_profiler_appdomain_event</div>
-<p />
-
-</div> <a name="api:mono_profiler_appdomain_loaded"></a>
- <div class="api">
-    <div class="api-entry">mono_profiler_appdomain_loaded</div>
-
-    <div class="prototype">Prototype: mono_profiler_appdomain_loaded</div>
-<p />
-
-</div> <a name="api:mono_profiler_assembly_event"></a>
- <div class="api">
-    <div class="api-entry">mono_profiler_assembly_event</div>
-
-    <div class="prototype">Prototype: mono_profiler_assembly_event</div>
-<p />
-
-</div> <a name="api:mono_profiler_assembly_loaded"></a>
- <div class="api">
-    <div class="api-entry">mono_profiler_assembly_loaded</div>
-
-    <div class="prototype">Prototype: mono_profiler_assembly_loaded</div>
-<p />
-
-</div> <a name="api:mono_profiler_class_event"></a>
- <div class="api">
-    <div class="api-entry">mono_profiler_class_event</div>
-
-    <div class="prototype">Prototype: mono_profiler_class_event</div>
-<p />
-
-</div> <a name="api:mono_profiler_class_loaded"></a>
- <div class="api">
-    <div class="api-entry">mono_profiler_class_loaded</div>
-
-    <div class="prototype">Prototype: mono_profiler_class_loaded</div>
-<p />
-
-</div> <a name="api:mono_profiler_code_transition"></a>
- <div class="api">
-    <div class="api-entry">mono_profiler_code_transition</div>
-
-    <div class="prototype">Prototype: mono_profiler_code_transition</div>
-<p />
-
-</div> <a name="api:mono_profiler_method_end_jit"></a>
- <div class="api">
-    <div class="api-entry">mono_profiler_method_end_jit</div>
-
-    <div class="prototype">Prototype: mono_profiler_method_end_jit</div>
-<p />
-
-</div> <a name="api:mono_profiler_method_enter"></a>
- <div class="api">
-    <div class="api-entry">mono_profiler_method_enter</div>
-
-    <div class="prototype">Prototype: mono_profiler_method_enter</div>
-<p />
-
-</div> <a name="api:mono_profiler_method_jit"></a>
- <div class="api">
-    <div class="api-entry">mono_profiler_method_jit</div>
-
-    <div class="prototype">Prototype: mono_profiler_method_jit</div>
-<p />
-
-</div> <a name="api:mono_profiler_method_leave"></a>
- <div class="api">
-    <div class="api-entry">mono_profiler_method_leave</div>
-
-    <div class="prototype">Prototype: mono_profiler_method_leave</div>
-<p />
-
-</div> <a name="api:mono_profiler_module_event"></a>
- <div class="api">
-    <div class="api-entry">mono_profiler_module_event</div>
-
-    <div class="prototype">Prototype: mono_profiler_module_event</div>
-<p />
-
-</div> <a name="api:mono_profiler_module_loaded"></a>
- <div class="api">
-    <div class="api-entry">mono_profiler_module_loaded</div>
-
-    <div class="prototype">Prototype: mono_profiler_module_loaded</div>
-<p />
-
-</div> <a name="api:mono_profiler_shutdown"></a>
- <div class="api">
-    <div class="api-entry">mono_profiler_shutdown</div>
-
-    <div class="prototype">Prototype: mono_profiler_shutdown</div>
-<p />
-
-</div> <a name="api:mono_profiler_startup"></a>
- <div class="api">
-    <div class="api-entry">mono_profiler_startup</div>
-
-    <div class="prototype">Prototype: mono_profiler_startup</div>
-<p />
-
-</div> <a name="api:mono_profiler_gc_event"></a>
- <div class="api">
-    <div class="api-entry">mono_profiler_gc_event</div>
-
-    <div class="prototype">Prototype: mono_profiler_gc_event</div>
-<p />
-
-</div> <a name="api:mono_profiler_gc_heap_resize"></a>
- <div class="api">
-    <div class="api-entry">mono_profiler_gc_heap_resize</div>
-
-    <div class="prototype">Prototype: mono_profiler_gc_heap_resize</div>
-<p />
-
-</div> <a name="api:mono_profiler_gc_event"></a>
- <div class="api">
-    <div class="api-entry">mono_profiler_gc_event</div>
-
-    <div class="prototype">Prototype: mono_profiler_gc_event</div>
-<p />
-
-</div> <a name="api:mono_profiler_gc_heap_resize"></a>
- <div class="api">
-    <div class="api-entry">mono_profiler_gc_heap_resize</div>
-
-    <div class="prototype">Prototype: mono_profiler_gc_heap_resize</div>
-<p />
-
-</div></body>
-</html>
-</span>
\ No newline at end of file
diff --git a/docs/deploy/mono-api-marshal.html b/docs/deploy/mono-api-marshal.html
deleted file mode 100644
index 22d1b8f..0000000
--- a/docs/deploy/mono-api-marshal.html
+++ /dev/null
@@ -1,78 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?><span>
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-   <title>mono-api-marshal.html</title>
-   <style type="text/css">
-
-
-   h3 { 
-       font-size: 18px;
-       padding-bottom: 4pt;
-       border-bottom: 2px solid #dddddd;
-   }
-       
-   .api {
-     border: 1px solid;
-     padding: 10pt;
-     margin: 10pt;
-   } 
-
-   .api-entry { 
-       border-bottom: none;
-       font-size: 18px;
-   }
-
-   .prototype {
-     border: 1px solid;
-     background-color: #f2f2f2;
-     padding: 5pt;
-     margin-top: 5pt;
-     margin-bottom: 5pt;  
-   } 
-
-   .header {
-     border: 1px solid;
-     padding: 0 0 5pt 5pt;
-     margin: 10pt;
-     white-space: pre;
-       font-family: monospace;
-   }
-    
-   .code {
-     border: 1px solid;
-     padding: 0 0 5pt 5pt;
-     margin: 10pt;
-     white-space: pre;
-       font-family: monospace;
-   }
-   
-
-</style>
-</head>
-<body>
-
-
- <a name="api:mono_delegate_free_ftnptr"></a>
- <div class="api">
-    <div class="api-entry">mono_delegate_free_ftnptr</div>
-
-    <div class="prototype">Prototype: mono_delegate_free_ftnptr</div>
-<p />
-
-</div> <a name="api:mono_delegate_to_ftnptr"></a>
- <div class="api">
-    <div class="api-entry">mono_delegate_to_ftnptr</div>
-
-    <div class="prototype">Prototype: mono_delegate_to_ftnptr</div>
-<p />
-
-</div> <a name="api:mono_ftnptr_to_delegate"></a>
- <div class="api">
-    <div class="api-entry">mono_ftnptr_to_delegate</div>
-
-    <div class="prototype">Prototype: mono_ftnptr_to_delegate</div>
-<p />
-
-</div></body>
-</html>
-</span>
\ No newline at end of file
diff --git a/docs/deploy/mono-api-metadata.html b/docs/deploy/mono-api-metadata.html
deleted file mode 100644
index 39d59d5..0000000
--- a/docs/deploy/mono-api-metadata.html
+++ /dev/null
@@ -1,1313 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?><span>
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-   <title>mono-api-metadata.html</title>
-   <style type="text/css">
-
-
-   h3 { 
-       font-size: 18px;
-       padding-bottom: 4pt;
-       border-bottom: 2px solid #dddddd;
-   }
-       
-   .api {
-     border: 1px solid;
-     padding: 10pt;
-     margin: 10pt;
-   } 
-
-   .api-entry { 
-       border-bottom: none;
-       font-size: 18px;
-   }
-
-   .prototype {
-     border: 1px solid;
-     background-color: #f2f2f2;
-     padding: 5pt;
-     margin-top: 5pt;
-     margin-bottom: 5pt;  
-   } 
-
-   .header {
-     border: 1px solid;
-     padding: 0 0 5pt 5pt;
-     margin: 10pt;
-     white-space: pre;
-       font-family: monospace;
-   }
-    
-   .code {
-     border: 1px solid;
-     padding: 0 0 5pt 5pt;
-     margin: 10pt;
-     white-space: pre;
-       font-family: monospace;
-   }
-   
-
-</style>
-</head>
-<body>
-<h1>Metadata Reading</h1>
-
-	<p />The Metadata API gives developers low-level access to the
-	information encoded in CLI modules: type and
-	methods definitions encoded in metadata as well as access to
-	the CIL code and embedded resources.
-
-	<p />Managed developers access this information using either the
-	System.Reflection API or a library
-	like <a href="http://www.mono-project.com/Cecil">Cecil</a>.
-
-	<p />To start using the Metadata API it is necessary
-	to <a href="mono-api-assembly.html#cil_assembly_load">open an
-	assembly</a> or a CIL image (a .dll or .exe file) using one of
-	the
-	<a href="mono-api-image.html#cil_image_open">CIL image
-	opening</a> API calls.
-
-<h2>Metadata Heaps</h2>
-
-	<p />ECMA CLI images contain four heaps that store different
-	kinds of information, these are:
-
-	<ul>
-		<li>GUID heap (called #GUID) contains 128-bit GUIDs,
-		you can get pointer to a GUID value by
-		calling <a href="#api:mono_metadata_guid_heap">mono_metadata_guid_heap</a>.
-
-		<li>User string heap (called #US), it contains user
-		visible strings, you can fetch a string from this heap
-		by calling
-		<a href="#api:mono_metadata_user_string">mono_metadata_user_string</a>.
-
-		<li>Blob heap (called #blob), it contains binary
-		blobs of data, you can get a blob
-		by <a href="#api:mono_metadata_blob_heap">mono_metadata_blob_heap</a>.
-		You can determine the size of the blob using
-		the <a href="#api:mono_metadata_decode_blob_size">mono_metadata_decode_blob_size</a>. 
-	
-	</li></li></li></ul>
-
-	<p />The ECMA file format also has an extra section called the
-	"#~" stream, this stream is the one that holds the metadata
-	tables.   There is a high-level API to get access to the
-	contents of this API, described in the
-	section <a href="#metadata-tables">Metadata Tables</a>.
-	
- <a name="api:mono_metadata_guid_heap"></a>
- <div class="api">
-    <div class="api-entry">mono_metadata_guid_heap</div>
-
-    <div class="prototype">const char *
-mono_metadata_guid_heap (MonoImage *meta, guint32 index)
-
-</div>
-<p />
-<b>Parameters</b>
-<blockquote><dt><i>meta:</i></dt><dd> metadata context</dd><dt><i>index:</i></dt><dd> index into the guid heap.</dd></blockquote>
-<b>Returns</b>
-<blockquote>	  an in-memory pointer to the <i>index</i> in the guid heap.
-</blockquote>
-
-</div> <a name="api:mono_metadata_string_heap"></a>
- <div class="api">
-    <div class="api-entry">mono_metadata_string_heap</div>
-
-    <div class="prototype">const char *
-mono_metadata_string_heap (MonoImage *meta, guint32 index)
-
-</div>
-<p />
-<b>Parameters</b>
-<blockquote><dt><i>meta:</i></dt><dd> metadata context</dd><dt><i>index:</i></dt><dd> index into the string heap.</dd></blockquote>
-<b>Returns</b>
-<blockquote>	  an in-memory pointer to the <i>index</i> in the string heap.
-</blockquote>
-
-</div> <a name="api:mono_metadata_blob_heap"></a>
- <div class="api">
-    <div class="api-entry">mono_metadata_blob_heap</div>
-
-    <div class="prototype">const char *
-mono_metadata_blob_heap (MonoImage *meta, guint32 index)
-
-</div>
-<p />
-<b>Parameters</b>
-<blockquote><dt><i>meta:</i></dt><dd> metadata context</dd><dt><i>index:</i></dt><dd> index into the blob.</dd></blockquote>
-<b>Returns</b>
-<blockquote>	  an in-memory pointer to the <i>index</i> in the Blob heap.
-</blockquote>
-
-</div> <a name="api:mono_metadata_user_string"></a>
- <div class="api">
-    <div class="api-entry">mono_metadata_user_string</div>
-
-    <div class="prototype">const char *
-mono_metadata_user_string (MonoImage *meta, guint32 index)
-
-</div>
-<p />
-<b>Parameters</b>
-<blockquote><dt><i>meta:</i></dt><dd> metadata context</dd><dt><i>index:</i></dt><dd> index into the user string heap.</dd></blockquote>
-<b>Returns</b>
-<blockquote>	  an in-memory pointer to the <i>index</i> in the user string heap ("<i>US</i>").
-</blockquote>
-
-</div> <a name="api:mono_metadata_decode_blob_size"></a>
- <div class="api">
-    <div class="api-entry">mono_metadata_decode_blob_size</div>
-
-    <div class="prototype">guint32
-mono_metadata_decode_blob_size (const char *xptr, const char **rptr)
-
-</div>
-<p />
-<b>Parameters</b>
-<blockquote><dt><i>ptr:</i></dt><dd> pointer to a blob object</dd><dt><i>rptr:</i></dt><dd> the new position of the pointer</dd></blockquote>
-<b>Returns</b>
-<blockquote>	  the size of the blob object
-</blockquote>
-<b>Remarks</b>
-<p />	 
-	 This decodes a compressed size as described by 23.1.4 (a blob or user string object)
-	
-
-
-<a name="metadata-tables"></a>
-</div><h2>Metadata Tables</h2>
-
-	<p />Metadata is encoded in a number of tables included on every
-	CIL image.   These tables contain type definitions, member
-	definitions and so on, these constants are defined in the ECMA 335
-	specification Partition II section 22.   The following table
-	shows the C constants defined in the Mono runtime and how they
-	map to the equivalent ECMA CLI metadata table:
-
-	<center>
-	<table border="1">
-	  <thead>
-	    <td>
-	       <b>ECMA CLI Table Name</b>
-	    </td>
-	    <td>
-	    <b>C Constant Name</b>
-	    </td>
-	    <td>
-	       <b>Table Schema (Array Size + Columns Constants)</b>
-	    </td>
-	  </thead>
-<td>Assembly</td><td>MONO_TABLE_ASSEMBLY</td><td>
-Array size: 
-MONO_ASSEMBLY_SIZE
-<ul>
-	<li>MONO_ASSEMBLY_HASH_ALG
-	<li>MONO_ASSEMBLY_MAJOR_VERSION
-	<li>MONO_ASSEMBLY_MINOR_VERSION
-	<li>MONO_ASSEMBLY_BUILD_NUMBER
-	<li>MONO_ASSEMBLY_REV_NUMBER
-	<li>MONO_ASSEMBLY_FLAGS
-	<li>MONO_ASSEMBLY_PUBLIC_KEY
-	<li>MONO_ASSEMBLY_NAME
-	<li>MONO_ASSEMBLY_CULTURE
-</li></li></li></li></li></li></li></li></li></ul>
-</td>
-
-
-<td>AssemblyOS</td><td>MONO_TABLE_ASSEMBLYOS</td><td>
-Array size: 
-MONO_ASSEMBLYOS_SIZE
-<ul>
-	<li>MONO_ASSEMBLYOS_PLATFORM
-	<li>MONO_ASSEMBLYOS_MAJOR_VERSION
-	<li>MONO_ASSEMBLYOS_MINOR_VERSION
-</li></li></li></ul>
-</td>
-
-
-<td>AssemblyProcessor</td><td>MONO_TABLE_ASSEMBLYPROCESSOR</td><td>Array
-size: MONO_ASSEMBLYPROCESSOR_SIZE
-<ul>
-	<li>MONO_ASSEMBLY_PROCESSOR
-</li></ul>
-</td>
-
-
-<td>AssemblyRef</td><td>MONO_TABLE_ASSEMBLYREF</td><td>
-Array size: 
-MONO_ASSEMBLYREF_SIZE
-<ul>
-	<li>MONO_ASSEMBLYREF_MAJOR_VERSION
-	<li>MONO_ASSEMBLYREF_MINOR_VERSION
-	<li>MONO_ASSEMBLYREF_BUILD_NUMBER
-	<li>MONO_ASSEMBLYREF_REV_NUMBER
-	<li>MONO_ASSEMBLYREF_FLAGS
-	<li>MONO_ASSEMBLYREF_PUBLIC_KEY
-	<li>MONO_ASSEMBLYREF_NAME
-	<li>MONO_ASSEMBLYREF_CULTURE
-	<li>MONO_ASSEMBLYREF_HASH_VALUE
-</li></li></li></li></li></li></li></li></li></ul>
-</td>
-
-
-<td>AssemblyRefProcessor</td><td>MONO_TABLE_ASSEMBLYREFPROCESSOR</td><td>Array
-size: MONO_ASSEMBLYREFPROC_SIZE
-<ul>
-	<li>MONO_ASSEMBLYREFPROC_PROCESSOR
-	<li>MONO_ASSEMBLYREFPROC_ASSEMBLYREF
-</li></li></ul>
-</td>
-
-
-<td>AssemblyRefOS</td><td>MONO_TABLE_ASSEMBLYREFOS</td><td>
-Array size: 
-	<li>MONO_ASSEMBLYREFOS_SIZE
-<ul>
-	<li>MONO_ASSEMBLYREFOS_PLATFORM
-	<li>MONO_ASSEMBLYREFOS_MAJOR_VERSION
-	<li>MONO_ASSEMBLYREFOS_MINOR_VERSION
-	<li>MONO_ASSEMBLYREFOS_ASSEMBLYREF
-</li></li></li></li></ul>
-</li></td>
-
-
-<td>ClassLayout</td><td>MONO_TABLE_CLASSLAYOUT</td><td>
-Array size: 
-MONO_CLASSLAYOUT_SIZE
-<ul>
-	<li>MONO_CLASS_LAYOUT_PACKING_SIZE
-	<li>MONO_CLASS_LAYOUT_CLASS_SIZE
-	<li>MONO_CLASS_LAYOUT_PARENT
-</li></li></li></ul>
-</td>
-
-
-<td>Constant</td><td>MONO_TABLE_CONSTANT</td><td>
-Array size: 
-MONO_CONSTANT_SIZE
-<ul>
-	<li>MONO_CONSTANT_TYPE
-	<li>MONO_CONSTANT_PADDING
-	<li>MONO_CONSTANT_PARENT
-	<li>MONO_CONSTANT_VALUE
-</li></li></li></li></ul>
-</td>
-
-
-<td>CustomAttribute</td><td>MONO_TABLE_CUSTOMATTRIBUTE</td><td>
-Array size:
-MONO_CUSTOM_ATTR_SIZE
-<ul>
-	<li>MONO_CUSTOM_ATTR_PARENT
-	<li>MONO_CUSTOM_ATTR_TYPE
-	<li>MONO_CUSTOM_ATTR_VALUE
-</li></li></li></ul>
-</td>
-
-
-<td>DeclSecurity</td><td>MONO_TABLE_DECLSECURITY</td><td>
-Array size: 
-MONO_DECL_SECURITY_SIZE
-<ul>
-	<li>MONO_DECL_SECURITY_ACTION
-	<li>MONO_DECL_SECURITY_PARENT
-	<li>MONO_DECL_SECURITY_PERMISSIONSET
-</li></li></li></ul>
-</td>
-
-
-<td>EventMap</td><td>MONO_TABLE_EVENTMAP</td><td>
-Array size: 
-MONO_EVENT_MAP_SIZE
-<ul>
-	<li>MONO_EVENT_MAP_PARENT
-	<li>MONO_EVENT_MAP_EVENTLIST
-</li></li></ul>
-</td>
-
-
-<td>EventPtr</td><td>MONO_TABLE_EVENT_POINTER</td><td>
-Array size: 
-MONO_EVENT_POINTER_SIZE
-<ul>
-	<li>MONO_EVENT_POINTER_EVENT
-</li></ul>
-</td>
-
-
-<td>Event</td><td>MONO_TABLE_EVENT</td><td>
-Array size:  MONO_EVENT_SIZE
-<ul>
-	<li>MONO_EVENT_FLAGS
-	<li>MONO_EVENT_NAME
-	<li>MONO_EVENT_TYPE
-</li></li></li></ul>
-</td>
-
-
-<td>ExportedType</td><td>MONO_TABLE_EXPORTEDTYPE</td><td>
-Array size: 
-MONO_EXPORTEDTYPE_SIZE
-<ul>
-	<li>MONO_EXP_TYPE_FLAGS
-	<li>MONO_EXP_TYPE_TYPEDEF
-	<li>MONO_EXP_TYPE_NAME
-	<li>MONO_EXP_TYPE_NAMESPACE
-	<li>MONO_EXP_TYPE_IMPLEMENTATION
-</li></li></li></li></li></ul>
-</td>
-
-
-<td>Field</td><td>MONO_TABLE_FIELD</td><td>
-Array size:  MONO_FIELD_SIZE
-<ul>
-	<li>MONO_FIELD_FLAGS
-	<li>MONO_FIELD_NAME
-	<li>MONO_FIELD_SIGNATURE
-</li></li></li></ul>
-</td>
-
-
-<td>FieldLayoutt</td><td>MONO_TABLE_FIELDLAYOUT</td><td>
-Array size: 
-MONO_FIELDLAYOUT_SIZE
-<ul>
-	<li>MONO_FIELD_LAYOUT_OFFSET
-	<li>MONO_FIELD_LAYOUT_FIELD
-</li></li></ul>
-</td>
-
-
-<td>FieldMarshal</td><td>MONO_TABLE_FIELDMARSHAL</td><td>
-Array size: 
-MONO_FIELD_MARSHAL_SIZE
-<ul>
-	<li>MONO_FIELD_MARSHAL_PARENT
-	<li>MONO_FIELD_MARSHAL_NATIVE_TYPE
-</li></li></ul>
-</td>
-
-
-<td>FieldPtr</td><td>MONO_TABLE_FIELD_POINTER</td><td>
-Array size: 
-MONO_FIELD_POINTER_SIZE
-<ul>
-	<li>MONO_FIELD_POINTER_FIELD
-</li></ul>
-</td>
-
-
-<td>FieldRVA</td><td>MONO_TABLE_FIELDRVA</td><td>
-Array size: 
-MONO_FIELDRVA_SIZE
-<ul>
-	<li>MONO_FIELD_RVA_RVA
-	<li>MONO_FIELD_RVA_FIELD
-</li></li></ul>
-</td>
-
-
-<td>File</td><td>MONO_TABLE_FILE</td><td>
-Array size:  MONO_FILE_SIZE
-<ul>
-	<li>MONO_FILE_FLAGS
-	<li>MONO_FILE_NAME
-	<li>MONO_FILE_HASH_VALUE
-</li></li></li></ul>
-</td>
-
-
-<td>GenericParam</td><td>MONO_TABLE_GENERICPARAM</td><td>
-Array size: 
-MONO_GENERICPARAM_SIZE
-<ul>
-	<li>MONO_GENERICPARAM_NUMBER
-	<li>MONO_GENERICPARAM_FLAGS
-	<li>MONO_GENERICPARAM_OWNER
-	<li>MONO_GENERICPARAM_NAME
-</li></li></li></li></ul>
-</td>
-
-
-<td>GenericParamConstraint</td><td>MONO_TABLE_GENERICPARAMCONSTRAINT</td><td>Array
-size: MONO_GENERICPARAMCONSTRAINT_SIZE
-<ul>
-	<li>MONO_GENPARCONSTRAINT_GENERICPAR
-	<li>MONO_GENPARCONSTRAINT_CONSTRAINT
-</li></li></ul>
-</td>
-
-<tr>
-<td>ImplMap</td><td>MONO_TABLE_IMPLMAP</td><td>
-Array size: 
-MONO_IMPLMAP_SIZE
-<ul>
-	<li>MONO_IMPLMAP_FLAGS
-	<li>MONO_IMPLMAP_MEMBER
-	<li>MONO_IMPLMAP_NAME
-	<li>MONO_IMPLMAP_SCOPE
-</li></li></li></li></ul>
-</td>
-</tr>
-
-
-<td>InterfaceImpl</td><td>MONO_TABLE_INTERFACEIMPL</td><td>
-Array size: 
-	<li>MONO_INTERFACEIMPL_SIZE
-<ul>
-	<li>MONO_INTERFACEIMPL_CLASS
-	<li>MONO_INTERFACEIMPL_INTERFACE
-</li></li></ul>
-</li></td>
-
-
-
-<td>ManifestResource</td><td>MONO_TABLE_MANIFESTRESOURCE</td><td>Array
-size: MONO_MANIFESTRESOURCE_SIZE
-<ul>
-	<li>MONO_MANIFEST_OFFSET
-	<li>MONO_MANIFEST_FLAGS
-	<li>MONO_MANIFEST_NAME
-	<li>MONO_MANIFEST_IMPLEMENTATION
-</li></li></li></li></ul>
-</td>
-
-
-<tr>
-<td>MemberRef</td><td>MONO_TABLE_MEMBERREF</td><td>
-Array size: 
-MONO_MEMBERREF_SIZE
-<ul>
-	<li>MONO_MEMBERREF_CLASS
-	<li>MONO_MEMBERREF_NAME
-	<li>MONO_MEMBERREF_SIGNATURE
-</li></li></li></ul>
-</td>
-</tr>
-
-<td>MethodImpl</td><td>MONO_TABLE_METHODIMPL</td><td>
-Array size: 
-MONO_METHODIMPL_SIZE
-<ul>
-	<li>MONO_METHODIMPL_CLASS
-	<li>MONO_METHODIMPL_BODY
-	<li>MONO_METHODIMPL_DECLARATION
-</li></li></li></ul>
-</td>
-
-
-
-<td>MethodSpec</td><td>MONO_TABLE_METHODSPEC</td><td>
-Array size: 
-MONO_METHODSPEC_SIZE
-<ul>
-	<li>MONO_METHODSPEC_METHOD
-	<li>MONO_METHODSPEC_SIGNATURE
-</li></li></ul>
-</td>
-
-<tr>
-<td>MethodSemantics</td><td>MONO_TABLE_METHODSEMANTICS</td><td>Array
-size: MONO_METHOD_SEMA_SIZE
-<ul>
-	<li>MONO_METHOD_SEMA_SEMANTICS
-	<li>MONO_METHOD_SEMA_METHOD
-	<li>MONO_METHOD_SEMA_ASSOCIATION
-</li></li></li></ul>
-</td>
-</tr>
-
-<td>Moduleref</td><td>MONO_TABLE_MODULEREF</td><td>
-Array size: 
-MONO_MODULEREF_SIZE
-<ul>
-	<li>MONO_MODULEREF_NAME
-</li></ul>
-</td>
-
-
-<tr>
-<td>Module</td><td>MONO_TABLE_MODULE</td><td>
-Array size: 
-MONO_MODULE_SIZE
-<br />
-Columns:
-<ul>
-	<li>MONO_MODULE_GENERATION
-	<li>MONO_MODULE_NAME
-	<li>MONO_MODULE_MVID
-	<li>MONO_MODULE_ENC
-	<li>MONO_MODULE_ENCBASE
-</li></li></li></li></li></ul>
-</td>
-</tr>
-
-<td>TypeRef</td><td>MONO_TABLE_TYPEREF</td><td>
-Array size: 
-MONO_TYPEREF_SIZE
-<ul>
-	<li>MONO_TYPEREF_SCOPE
-	<li>MONO_TYPEREF_NAME
-	<li>MONO_TYPEREF_NAMESPACE
-</li></li></li></ul>
-</td>
-
-
-<tr>
-<td>MethodPtr</td><td>MONO_TABLE_METHOD_POINTER</td><td>
-Array size: 
-MONO_METHOD_POINTER_SIZE
-<ul>
-	<li>MONO_METHOD_POINTER_METHOD
-</li></ul>
-</td>
-</tr>
-
-<td>Method</td><td>MONO_TABLE_METHOD</td><td>
-Array size: 
-MONO_METHOD_SIZE
-<ul>
-	<li>MONO_METHOD_RVA
-	<li>MONO_METHOD_IMPLFLAGS
-	<li>MONO_METHOD_FLAGS
-	<li>MONO_METHOD_NAME
-	<li>MONO_METHOD_SIGNATURE
-	<li>MONO_METHOD_PARAMLIST
-</li></li></li></li></li></li></ul>
-</td>
-
-
-<tr>
-<td>NestedClass</td><td>MONO_TABLE_NESTEDCLASS</td><td>
-Array size: 
-MONO_NESTEDCLASS_SIZE
-<ul>
-	<li>MONO_NESTED_CLASS_NESTED
-	<li>MONO_NESTED_CLASS_ENCLOSING
-</li></li></ul>
-</td>
-</tr>
-
-<tr>
-<td>ParamPtr</td><td>MONO_TABLE_PARAM_POINTER</td><td>
-Array size: 
-MONO_PARAM_POINTER_SIZE
-<ul>
-	<li>MONO_PARAM_POINTER_PARAM
-</li></ul>
-</td>
-</tr>
-
-<td>Param</td><td>MONO_TABLE_PARAM</td><td>
-Array size:  MONO_PARAM_SIZE
-<ul>
-	<li>MONO_PARAM_FLAGS
-	<li>MONO_PARAM_SEQUENCE
-	<li>MONO_PARAM_NAME
-</li></li></li></ul>
-</td>
-
-
-<td>PropertyMap</td><td>MONO_TABLE_PROPERTYMAP</td><td>
-Array size: 
-MONO_PROPERTY_MAP_SIZE
-<ul>
-	<li>MONO_PROPERTY_MAP_PARENT
-	<li>MONO_PROPERTY_MAP_PROPERTY_LIST
-</li></li></ul>
-</td>
-
-
-<td>PropertyPtr</td><td>MONO_TABLE_PROPERTY_POINTER</td><td>Array
-size: MONO_PROPERTY_POINTER_SIZE
-<ul>
-	<li>MONO_PROPERTY_POINTER_PROPERTY
-</li></ul>
-</td>
-
-
-<td>Property</td><td>MONO_TABLE_PROPERTY</td><td>
-Array size: 
-MONO_PROPERTY_SIZE
-<ul>
-	<li>MONO_PROPERTY_FLAGS
-	<li>MONO_PROPERTY_NAME
-	<li>MONO_PROPERTY_TYPE
-</li></li></li></ul>
-</td>
-
-<tr>
-<td>StandaloneSig</td><td>MONO_TABLE_STANDALONESIG</td><td>
-Array size: 
-	<li>MONO_STAND_ALONE_SIGNATURE_SIZE
-<ul>
-	<li>MONO_STAND_ALONE_SIGNATURE
-</li></ul>
-</li></td>
-</tr>
-
-<tr>
-<td>TypeDef</td><td>MONO_TABLE_TYPEDEF</td><td>
-Array size: 
-MONO_TYPEDEF_SIZE
-<ul>
-	<li>MONO_TYPEDEF_FLAGS
-	<li>MONO_TYPEDEF_NAME
-	<li>MONO_TYPEDEF_NAMESPACE
-	<li>MONO_TYPEDEF_EXTENDS
-	<li>MONO_TYPEDEF_FIELD_LIST
-	<li>MONO_TYPEDEF_METHOD_LIST
-</li></li></li></li></li></li></ul>
-</td>
-</tr>
-
-<tr>
-<td>TypeSpec</td><td>MONO_TABLE_TYPESPEC</td><td>
-Array size: 
-MONO_TYPESPEC_SIZE
-<ul>
-	<li>MONO_TYPESPEC_SIGNATURE
-</li></ul>
-</td>
-</tr>
-
-	</table>
-	</center>
-
-	<p />Each table can contain zero or more rows, you must call the
-	<a href="#api:mono_metadata_table_rows">mono_metadata_table_rows</a>
-	to obtain the number of rows in a table, and then you can
-	extract individual row values by using
-	the <a href="#api:mono_metadata_decode_row">mono_metadata_decode_row</a>
-	or
-	the <a href="#api:mono_metadata_decode_row_col">mono_metadata_decode_row_col</a>.
-	When decoding rows you must provide an guint32 array large
-	enough to hold as many columns as the table contains.
-	
-	<p />The metadata tables are stored in the MonoImage, you obtain
-	a pointer to the MonoTableInfo by calling
-	the <a href="#api:mono_image_get_table_info">mono_image_get_table_info</a>
-	and then you can scan those tables, for example:
-
-	<pre class="prettyprint">
-	/*
-	 * Dumps a few fields from the AssemblyRef table
-	 */
-	void DumpAssemblyRefs (MonoImage *image)
-	{
-		/* Get a pointer to the AssemblyRef metadata table */
-		MonoTableInfo *t = mono_image_get_table_info (image, MONO_TABLE_ASSEMBLYREF);
-
-		/* Fetch the number of rows available in the table */
-		int rows = mono_table_info_get_rows (t);
-		int i;
-
-		/* For each row, print some of its values */
-		for (i = 0; i < rows; i++){
-			/* Space where we extract one row from the metadata table */
-			guint32 cols [MONO_ASSEMBLYREF_SIZE];
-
-			/* Extract the row into the array cols */
-			mono_metadata_decode_row (t, i, cols, MONO_ASSEMBLYREF_SIZE);
-
-			fprintf (output, "%d: Version=%d.%d.%d.%d\n\tName=%s\n", i + 1,
-                        	cols [MONO_ASSEMBLYREF_MAJOR_VERSION],
-                        	cols [MONO_ASSEMBLYREF_MINOR_VERSION],
-                        	cols [MONO_ASSEMBLYREF_BUILD_NUMBER],
-                        	cols [MONO_ASSEMBLYREF_REV_NUMBER],
-                        	mono_metadata_string_heap (image, cols [MONO_ASSEMBLYREF_NAME]));
-		}
-	}
-	</pre>
-
-	<p />The above program shows the following output when ran on
-	the C# compiler:
-
-	<pre>
-	1: Version=1.0.5000.0
-		Name=mscorlib
-	2: Version=1.0.5000.0
-		Name=System
-	3: Version=1.0.5000.0
-		Name=System.Xml
-	</pre>
-
-	<p />
-
-<h3>Metadata Tables API</h3>
-
-	<p />These are the APIs for dealing with tables:
-
- <a name="api:mono_image_get_table_info"></a>
- <div class="api">
-    <div class="api-entry">mono_image_get_table_info</div>
-
-    <div class="prototype">Prototype: mono_image_get_table_info</div>
-<p />
-
-</div> <a name="api:mono_image_get_table_rows"></a>
- <div class="api">
-    <div class="api-entry">mono_image_get_table_rows</div>
-
-    <div class="prototype">Prototype: mono_image_get_table_rows</div>
-<p />
-
-</div> <a name="api:mono_metadata_get_table"></a>
- <div class="api">
-    <div class="api-entry">mono_metadata_get_table</div>
-
-    <div class="prototype">Prototype: mono_metadata_get_table</div>
-<p />
-
-</div> <a name="api:mono_metadata_decode_row_col"></a>
- <div class="api">
-    <div class="api-entry">mono_metadata_decode_row_col</div>
-
-    <div class="prototype">guint32
-mono_metadata_decode_row_col (const MonoTableInfo *t, int idx, guint col)
-
-</div>
-<p />
-<b>Parameters</b>
-<blockquote><dt><i>t:</i></dt><dd> table to extract information from.</dd><dt><i>idx:</i></dt><dd> index for row in table.</dd><dt><i>col:</i></dt><dd> column in the row.</dd></blockquote>
-<b>Remarks</b>
-<p />	 
-	 This function returns the value of column <i>col</i> from the <i>idx</i>
-	 row in the table <i>t</i>.
-
-</div> <a name="api:mono_metadata_decode_row"></a>
- <div class="api">
-    <div class="api-entry">mono_metadata_decode_row</div>
-
-    <div class="prototype">void
-mono_metadata_decode_row (const MonoTableInfo *t, int idx, guint32 *res, int res_size)
-
-</div>
-<p />
-<b>Parameters</b>
-<blockquote><dt><i>t:</i></dt><dd> table to extract information from.</dd><dt><i>idx:</i></dt><dd> index in table.</dd><dt><i>res:</i></dt><dd> array of <i>res_size</i> cols to store the results in</dd></blockquote>
-<b>Remarks</b>
-<p />	 
-	 This decompresses the metadata element <i>idx</i> in table <i>t</i>
-	 into the guint32 <i>res</i> array that has res_size elements
-
-</div> <a name="api:mono_metadata_compute_size"></a>
- <div class="api">
-    <div class="api-entry">mono_metadata_compute_size</div>
-
-    <div class="prototype">Prototype: mono_metadata_compute_size</div>
-<p />
-
-</div> <a name="api:mono_metadata_custom_attrs_from_index"></a>
- <div class="api">
-    <div class="api-entry">mono_metadata_custom_attrs_from_index</div>
-
-    <div class="prototype">Prototype: mono_metadata_custom_attrs_from_index</div>
-<p />
-
-</div> <a name="api:mono_metadata_decode_signed_value"></a>
- <div class="api">
-    <div class="api-entry">mono_metadata_decode_signed_value</div>
-
-    <div class="prototype">gint32
-mono_metadata_decode_signed_value (const char *ptr, const char **rptr)
-
-</div>
-<p />
-<b>Parameters</b>
-<blockquote><dt><i>ptr:</i></dt><dd> pointer to decode from</dd><dt><i>rptr:</i></dt><dd> the new position of the pointer</dd></blockquote>
-<b>Returns</b>
-<blockquote>	  the decoded value
-</blockquote>
-<b>Remarks</b>
-<p />	 
-	 This routine decompresses 32-bit signed values
-	 (not specified in the spec)
-	
-
-</div> <a name="api:mono_metadata_decode_value"></a>
- <div class="api">
-    <div class="api-entry">mono_metadata_decode_value</div>
-
-    <div class="prototype">guint32
-mono_metadata_decode_value (const char *_ptr, const char **rptr)
-
-</div>
-<p />
-<b>Parameters</b>
-<blockquote><dt><i>ptr:</i></dt><dd> pointer to decode from</dd><dt><i>rptr:</i></dt><dd> the new position of the pointer</dd></blockquote>
-<b>Returns</b>
-<blockquote>	  the decoded value
-</blockquote>
-<b>Remarks</b>
-<p />	 
-	 This routine decompresses 32-bit values as specified in the "Blob and
-	 Signature" section (22.2)
-	
-
-</div> <a name="api:mono_metadata_encode_value"></a>
- <div class="api">
-    <div class="api-entry">mono_metadata_encode_value</div>
-
-    <div class="prototype">Prototype: mono_metadata_encode_value</div>
-<p />
-
-	
-</div><h2>Metadata access API</h2>
-
-	<p />This is the low-level API for accessing the metadata
-	images.
-	
- <a name="api:mono_cli_rva_image_map"></a>
- <div class="api">
-    <div class="api-entry">mono_cli_rva_image_map</div>
-
-    <div class="prototype">Prototype: mono_cli_rva_image_map</div>
-<p />
-
-</div> <a name="api:mono_pe_file_open"></a>
- <div class="api">
-    <div class="api-entry">mono_pe_file_open</div>
-
-    <div class="prototype">MonoImage*
-mono_pe_file_open (const char *fname, MonoImageOpenStatus *status)
-
-</div>
-<p />
-<b>Parameters</b>
-<blockquote><dt><i>fname:</i></dt><dd> filename that points to the module we want to open</dd><dt><i>status:</i></dt><dd> An error condition is returned in this field</dd></blockquote>
-<b>Returns</b>
-<blockquote>	  An open image of type %MonoImage or NULL on error.  if
-
-	 NULL, then check the value of <i>status</i> for details on the error.
-	 This variant for mono_image_open DOES NOT SET UP CLI METADATA.
-	 It's just a PE file loader, used for FileVersionInfo.  It also does
-	 not use the image cache.</blockquote>
-
-</div> <a name="api:mono_metadata_events_from_typedef"></a>
- <div class="api">
-    <div class="api-entry">mono_metadata_events_from_typedef</div>
-
-    <div class="prototype">Prototype: mono_metadata_events_from_typedef</div>
-<p />
-
-</div> <a name="api:mono_metadata_field_info"></a>
- <div class="api">
-    <div class="api-entry">mono_metadata_field_info</div>
-
-    <div class="prototype">Prototype: mono_metadata_field_info</div>
-<p />
-
-</div> <a name="api:mono_metadata_free_array"></a>
- <div class="api">
-    <div class="api-entry">mono_metadata_free_array</div>
-
-    <div class="prototype">Prototype: mono_metadata_free_array</div>
-<p />
-
-</div> <a name="api:mono_metadata_free_marshal_spec"></a>
- <div class="api">
-    <div class="api-entry">mono_metadata_free_marshal_spec</div>
-
-    <div class="prototype">Prototype: mono_metadata_free_marshal_spec</div>
-<p />
-
-</div> <a name="api:mono_metadata_free_mh"></a>
- <div class="api">
-    <div class="api-entry">mono_metadata_free_mh</div>
-
-    <div class="prototype">Prototype: mono_metadata_free_mh</div>
-<p />
-
-</div> <a name="api:mono_metadata_free_type"></a>
- <div class="api">
-    <div class="api-entry">mono_metadata_free_type</div>
-
-    <div class="prototype">Prototype: mono_metadata_free_type</div>
-<p />
-
-</div> <a name="api:mono_metadata_get_constant_index"></a>
- <div class="api">
-    <div class="api-entry">mono_metadata_get_constant_index</div>
-
-    <div class="prototype">Prototype: mono_metadata_get_constant_index</div>
-<p />
-
-</div> <a name="api:mono_metadata_get_marshal_info"></a>
- <div class="api">
-    <div class="api-entry">mono_metadata_get_marshal_info</div>
-
-    <div class="prototype">Prototype: mono_metadata_get_marshal_info</div>
-<p />
-
-</div> <a name="api:mono_metadata_implmap_from_method"></a>
- <div class="api">
-    <div class="api-entry">mono_metadata_implmap_from_method</div>
-
-    <div class="prototype">Prototype: mono_metadata_implmap_from_method</div>
-<p />
-
-</div> <a name="api:mono_metadata_interfaces_from_typedef"></a>
- <div class="api">
-    <div class="api-entry">mono_metadata_interfaces_from_typedef</div>
-
-    <div class="prototype">Prototype: mono_metadata_interfaces_from_typedef</div>
-<p />
-
-</div> <a name="api:mono_metadata_locate"></a>
- <div class="api">
-    <div class="api-entry">mono_metadata_locate</div>
-
-    <div class="prototype">const char *
-mono_metadata_locate (MonoImage *meta, int table, int idx)
-
-</div>
-<p />
-<b>Parameters</b>
-<blockquote><dt><i>meta:</i></dt><dd> metadata context</dd><dt><i>table:</i></dt><dd> table code.</dd><dt><i>idx:</i></dt><dd> index of element to retrieve from <i>table</i>.</dd></blockquote>
-<b>Returns</b>
-<blockquote>	  a pointer to the <i>idx</i> element in the metadata table
-
-	 whose code is <i>table</i>.</blockquote>
-
-</div> <a name="api:mono_metadata_locate_token"></a>
- <div class="api">
-    <div class="api-entry">mono_metadata_locate_token</div>
-
-    <div class="prototype">const char *
-mono_metadata_locate_token (MonoImage *meta, guint32 token)
-
-</div>
-<p />
-<b>Parameters</b>
-<blockquote><dt><i>meta:</i></dt><dd> metadata context</dd><dt><i>token:</i></dt><dd> metadata token</dd></blockquote>
-<b>Returns</b>
-<blockquote>	  a pointer to the data in the metadata represented by the
-
-	 token <i>token</i>.</blockquote>
-
-</div> <a name="api:mono_metadata_methods_from_event"></a>
- <div class="api">
-    <div class="api-entry">mono_metadata_methods_from_event</div>
-
-    <div class="prototype">Prototype: mono_metadata_methods_from_event</div>
-<p />
-
-</div> <a name="api:mono_metadata_methods_from_property"></a>
- <div class="api">
-    <div class="api-entry">mono_metadata_methods_from_property</div>
-
-    <div class="prototype">Prototype: mono_metadata_methods_from_property</div>
-<p />
-
-</div> <a name="api:mono_metadata_nested_in_typedef"></a>
- <div class="api">
-    <div class="api-entry">mono_metadata_nested_in_typedef</div>
-
-    <div class="prototype">Prototype: mono_metadata_nested_in_typedef</div>
-<p />
-
-</div> <a name="api:mono_metadata_nesting_typedef"></a>
- <div class="api">
-    <div class="api-entry">mono_metadata_nesting_typedef</div>
-
-    <div class="prototype">Prototype: mono_metadata_nesting_typedef</div>
-<p />
-
-</div> <a name="api:mono_metadata_packing_from_typedef"></a>
- <div class="api">
-    <div class="api-entry">mono_metadata_packing_from_typedef</div>
-
-    <div class="prototype">Prototype: mono_metadata_packing_from_typedef</div>
-<p />
-
-</div> <a name="api:mono_metadata_properties_from_typedef"></a>
- <div class="api">
-    <div class="api-entry">mono_metadata_properties_from_typedef</div>
-
-    <div class="prototype">Prototype: mono_metadata_properties_from_typedef</div>
-<p />
-
-</div> <a name="api:mono_metadata_token_from_dor"></a>
- <div class="api">
-    <div class="api-entry">mono_metadata_token_from_dor</div>
-
-    <div class="prototype">Prototype: mono_metadata_token_from_dor</div>
-<p />
-
-</div> <a name="api:mono_metadata_typedef_from_field"></a>
- <div class="api">
-    <div class="api-entry">mono_metadata_typedef_from_field</div>
-
-    <div class="prototype">guint32
-mono_metadata_typedef_from_field (MonoImage *meta, guint32 index)
-
-</div>
-<p />
-<b>Parameters</b>
-<blockquote><dt><i>meta:</i></dt><dd> metadata context</dd><dt><i>index:</i></dt><dd> FieldDef token</dd></blockquote>
-<b>Returns</b>
-<blockquote>	  the 1-based index into the TypeDef table of the type that
-
-	 declared the field described by <i>index</i>, or 0 if not found.</blockquote>
-
-</div> <a name="api:mono_metadata_typedef_from_method"></a>
- <div class="api">
-    <div class="api-entry">mono_metadata_typedef_from_method</div>
-
-    <div class="prototype">Prototype: mono_metadata_typedef_from_method</div>
-<p />
-
-</div> <a name="api:mono_metadata_type_equal"></a>
- <div class="api">
-    <div class="api-entry">mono_metadata_type_equal</div>
-
-    <div class="prototype">Prototype: mono_metadata_type_equal</div>
-<p />
-
-</div> <a name="api:mono_metadata_type_hash"></a>
- <div class="api">
-    <div class="api-entry">mono_metadata_type_hash</div>
-
-    <div class="prototype">Prototype: mono_metadata_type_hash</div>
-<p />
-
-</div> <a name="api:mono_metadata_declsec_from_index"></a>
- <div class="api">
-    <div class="api-entry">mono_metadata_declsec_from_index</div>
-
-    <div class="prototype">Prototype: mono_metadata_declsec_from_index</div>
-<p />
-
-</div> <a name="api:mono_metadata_free_method_signature"></a>
- <div class="api">
-    <div class="api-entry">mono_metadata_free_method_signature</div>
-
-    <div class="prototype">Prototype: mono_metadata_free_method_signature</div>
-<p />
-
-
-</div><h3>Retrieving Objects from Tokens</h3>
-
- <a name="api:mono_metadata_parse_custom_mod"></a>
- <div class="api">
-    <div class="api-entry">mono_metadata_parse_custom_mod</div>
-
-    <div class="prototype">Prototype: mono_metadata_parse_custom_mod</div>
-<p />
-
-</div> <a name="api:mono_metadata_parse_field_type"></a>
- <div class="api">
-    <div class="api-entry">mono_metadata_parse_field_type</div>
-
-    <div class="prototype">MonoType*
-mono_metadata_parse_field_type (MonoImage *m, short field_flags, const char *ptr, const char **rptr)
-
-</div>
-<p />
-<b>Parameters</b>
-<blockquote><dt><i>m:</i></dt><dd> metadata context to extract information from</dd><dt><i>ptr:</i></dt><dd> pointer to the field signature</dd><dt><i>rptr:</i></dt><dd> pointer updated to match the end of the decoded stream</dd></blockquote>
-<b>Returns</b>
-<blockquote>	  The MonoType that was extracted from <i>ptr</i>.
-</blockquote>
-<b>Remarks</b>
-<p />	 
-	 Parses the field signature, and returns the type information for it. 
-	
-
-</div> <a name="api:mono_metadata_parse_marshal_spec"></a>
- <div class="api">
-    <div class="api-entry">mono_metadata_parse_marshal_spec</div>
-
-    <div class="prototype">Prototype: mono_metadata_parse_marshal_spec</div>
-<p />
-
-</div> <a name="api:mono_metadata_parse_method_signature_full"></a>
- <div class="api">
-    <div class="api-entry">mono_metadata_parse_method_signature_full</div>
-
-    <div class="prototype">Prototype: mono_metadata_parse_method_signature_full</div>
-<p />
-
-</div> <a name="api:mono_metadata_parse_method_signature"></a>
- <div class="api">
-    <div class="api-entry">mono_metadata_parse_method_signature</div>
-
-    <div class="prototype">Prototype: mono_metadata_parse_method_signature</div>
-<p />
-
-</div> <a name="api:mono_metadata_parse_mh_full"></a>
- <div class="api">
-    <div class="api-entry">mono_metadata_parse_mh_full</div>
-
-    <div class="prototype">Prototype: mono_metadata_parse_mh_full</div>
-<p />
-
-</div> <a name="api:mono_metadata_parse_mh"></a>
- <div class="api">
-    <div class="api-entry">mono_metadata_parse_mh</div>
-
-    <div class="prototype">Prototype: mono_metadata_parse_mh</div>
-<p />
-
-</div> <a name="api:mono_metadata_parse_param"></a>
- <div class="api">
-    <div class="api-entry">mono_metadata_parse_param</div>
-
-    <div class="prototype">MonoType*
-mono_metadata_parse_param (MonoImage *m, const char *ptr, const char **rptr)
-
-</div>
-<p />
-<b>Parameters</b>
-<blockquote><dt><i>m:</i></dt><dd> metadata context to extract information from</dd><dt><i>ptr:</i></dt><dd> pointer to the param signature</dd><dt><i>rptr:</i></dt><dd> pointer updated to match the end of the decoded stream</dd></blockquote>
-<b>Returns</b>
-<blockquote>	  The MonoType that was extracted from <i>ptr</i>.
-</blockquote>
-<b>Remarks</b>
-<p />	 
-	 Parses the param signature, and returns the type information for it. 
-	
-
-</div> <a name="api:mono_metadata_parse_signature"></a>
- <div class="api">
-    <div class="api-entry">mono_metadata_parse_signature</div>
-
-    <div class="prototype">Prototype: mono_metadata_parse_signature</div>
-<p />
-
-</div> <a name="api:mono_metadata_parse_typedef_or_ref"></a>
- <div class="api">
-    <div class="api-entry">mono_metadata_parse_typedef_or_ref</div>
-
-    <div class="prototype">Prototype: mono_metadata_parse_typedef_or_ref</div>
-<p />
-
-</div> <a name="api:mono_metadata_parse_type_full"></a>
- <div class="api">
-    <div class="api-entry">mono_metadata_parse_type_full</div>
-
-    <div class="prototype">Prototype: mono_metadata_parse_type_full</div>
-<p />
-
-</div> <a name="api:mono_metadata_parse_type"></a>
- <div class="api">
-    <div class="api-entry">mono_metadata_parse_type</div>
-
-    <div class="prototype">static MonoType*
-mono_metadata_parse_type_internal (MonoImage *m, MonoGenericContainer *container, MonoParseTypeMode mode,
-								   short opt_attrs, gboolean transient, const char *ptr, const char **rptr)
-
-</div>
-<p />
-<b>Parameters</b>
-<blockquote><dt><i>m:</i></dt><dd> metadata context</dd><dt><i>mode:</i></dt><dd> king of type that may be found at <i>ptr</i></dd><dt><i>opt_attrs:</i></dt><dd> optional attributes to store in the returned type</dd><dt><i>ptr:</i></dt><dd> pointer to the type representation</dd><dt><i>rptr:</i></dt><dd> pointer updated to match the end of the decoded stream</dd><dt><i>transient:</i></dt><dd> whenever to allocate the result from the heap or from a mempool</dd></blockquote>
-<b>Returns</b>
-<blockquote>	  a <i>MonoType</i> structure representing the decoded type.
-</blockquote>
-<b>Remarks</b>
-<p />	 <p />
-
-	 Decode a compressed type description found at <i>ptr</i> in <i>m</i>.
-	 <i>mode</i> can be one of MONO_PARSE_MOD_TYPE, MONO_PARSE_PARAM, MONO_PARSE_RET,
-	 MONO_PARSE_FIELD, MONO_PARSE_LOCAL, MONO_PARSE_TYPE.
-	 This function can be used to decode type descriptions in method signatures,
-	 field signatures, locals signatures etc.
-	
-	 To parse a generic type, `generic_container' points to the current class'es
-	 (the `generic_container' field in the MonoClass) or the current generic method's
-	 (stored in image->property_hash) generic container.
-	 When we encounter any MONO_TYPE_VAR or MONO_TYPE_MVAR's, they're looked up in
-	 this MonoGenericContainer.
-	
-	 LOCKING: Acquires the loader lock.
-	
-
-
-</div><h2>Generics Support</h2>
-
- <a name="api:mono_metadata_generic_class_is_valuetype"></a>
- <div class="api">
-    <div class="api-entry">mono_metadata_generic_class_is_valuetype</div>
-
-    <div class="prototype">Prototype: mono_metadata_generic_class_is_valuetype</div>
-<p />
-
-</div> <a name="api:mono_metadata_inflate_generic_inst"></a>
- <div class="api">
-    <div class="api-entry">mono_metadata_inflate_generic_inst</div>
-
-    <div class="prototype">Prototype: mono_metadata_inflate_generic_inst</div>
-<p />
-
-</div> <a name="api:mono_metadata_load_generic_params"></a>
- <div class="api">
-    <div class="api-entry">mono_metadata_load_generic_params</div>
-
-    <div class="prototype">Prototype: mono_metadata_load_generic_params</div>
-<p />
-
-
-</div><h2>Tokens</h2>
-
- <a name="api:mono_ldtoken"></a>
- <div class="api">
-    <div class="api-entry">mono_ldtoken</div>
-
-    <div class="prototype">Prototype: mono_ldtoken</div>
-<p />
-
-</div> <a name="api:mono_ldstr"></a>
- <div class="api">
-    <div class="api-entry">mono_ldstr</div>
-
-    <div class="prototype">MonoString*
-mono_ldstr (MonoDomain *domain, MonoImage *image, guint32 idx)
-
-</div>
-<p />
-<b>Parameters</b>
-<blockquote><dt><i>domain:</i></dt><dd> the domain where the string will be used.</dd><dt><i>image:</i></dt><dd> a metadata context</dd><dt><i>idx:</i></dt><dd> index into the user string table.</dd></blockquote>
-<b>Returns</b>
-<blockquote>	  a loaded string from the <i>image</i>/<i>idx</i> combination.
-</blockquote>
-<b>Remarks</b>
-<p />	 <p />
-
-	 Implementation for the ldstr opcode.
-
-</div> <a name="api:mono_exception_from_token"></a>
- <div class="api">
-    <div class="api-entry">mono_exception_from_token</div>
-
-    <div class="prototype">MonoException*
-mono_exception_from_token (MonoImage *image, guint32 token)
-
-</div>
-<p />
-<b>Parameters</b>
-<blockquote><dt><i>image:</i></dt><dd> the Mono image where to look for the class</dd><dt><i>token:</i></dt><dd> The type token of the class</dd></blockquote>
-<b>Returns</b>
-<blockquote>	  the initialized exception instance.
-</blockquote>
-<b>Remarks</b>
-<p />	 
-	 Creates an exception of the type given by <i>token</i>.
-	
-
-
-</div><h2>OpCodes</h2>
-
- <a name="api:mono_opcode_name"></a>
- <div class="api">
-    <div class="api-entry">mono_opcode_name</div>
-
-    <div class="prototype">Prototype: mono_opcode_name</div>
-<p />
-
-</div></body>
-</html>
-</span>
\ No newline at end of file
diff --git a/docs/deploy/mono-api-methods.html b/docs/deploy/mono-api-methods.html
deleted file mode 100644
index d8abf6e..0000000
--- a/docs/deploy/mono-api-methods.html
+++ /dev/null
@@ -1,578 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?><span>
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-   <title>mono-api-methods.html</title>
-   <style type="text/css">
-
-
-   h3 { 
-       font-size: 18px;
-       padding-bottom: 4pt;
-       border-bottom: 2px solid #dddddd;
-   }
-       
-   .api {
-     border: 1px solid;
-     padding: 10pt;
-     margin: 10pt;
-   } 
-
-   .api-entry { 
-       border-bottom: none;
-       font-size: 18px;
-   }
-
-   .prototype {
-     border: 1px solid;
-     background-color: #f2f2f2;
-     padding: 5pt;
-     margin-top: 5pt;
-     margin-bottom: 5pt;  
-   } 
-
-   .header {
-     border: 1px solid;
-     padding: 0 0 5pt 5pt;
-     margin: 10pt;
-     white-space: pre;
-       font-family: monospace;
-   }
-    
-   .code {
-     border: 1px solid;
-     padding: 0 0 5pt 5pt;
-     margin: 10pt;
-     white-space: pre;
-       font-family: monospace;
-   }
-   
-
-</style>
-</head>
-<body>
-<h3>Methods</h3>
-
-<h3>Invoking Methods</h3>
-
- <a name="api:mono_runtime_invoke"></a>
- <div class="api">
-    <div class="api-entry">mono_runtime_invoke</div>
-
-    <div class="prototype">MonoObject*
-mono_runtime_invoke (MonoMethod *method, void *obj, void **params, MonoObject **exc)
-
-</div>
-<p />
-<b>Parameters</b>
-<blockquote><dt><i>method:</i></dt><dd> method to invoke</dd><dt><i>obJ:</i></dt><dd> object instance</dd><dt><i>params:</i></dt><dd> arguments to the method</dd><dt><i>exc:</i></dt><dd> exception information.</dd></blockquote>
-<b>Remarks</b>
-<p />	 
-	 Invokes the method represented by <i>method</i> on the object <i>obj</i>.
-	
-	 obj is the 'this' pointer, it should be NULL for static
-	 methods, a MonoObject* for object instances and a pointer to
-	 the value type for value types.
-	
-	 The params array contains the arguments to the method with the
-	 same convention: MonoObject* pointers for object instances and
-	 pointers to the value type otherwise. 
-	
-<p />
-	 From unmanaged code you'll usually use the
-	 mono_runtime_invoke() variant.
-	
-	 Note that this function doesn't handle virtual methods for
-	 you, it will exec the exact method you pass: we still need to
-	 expose a function to lookup the derived class implementation
-	 of a virtual method (there are examples of this in the code,
-	 though).
-	
-<p />
-	 You can pass NULL as the exc argument if you don't want to
-	 catch exceptions, otherwise, *exc will be set to the exception
-	 thrown, if any.  if an exception is thrown, you can't use the
-	 MonoObject* result from the function.
-	
-<p />
-	 If the method returns a value type, it is boxed in an object
-	 reference.
-
-
-If you want to invoke generic methods, you must call the method on the
-"inflated" class, which you can obtain from the
-<tt>mono_object_get_class()</tt>
-
-<div class="code">
-MonoClass *clazz;
-MonoMethod *method;
-
-clazz = mono_object_get_class (obj);
-
-/*
- * If there are more Add methods declared, you
- * may use mono_method_desc_search_in_class (clazz, ":Add(T)"),
- * you must substitute ":Add(T)" with the correct type, for example
- * for List<int>, you would use ":Add(int)".
- */
-method = mono_class_get_method_from_name (clazz, "Add", 1);
-mono_runtime_invoke (method, obj, args, &exception);
-</div>
-
-
-</div> <a name="api:mono_runtime_invoke_array"></a>
- <div class="api">
-    <div class="api-entry">mono_runtime_invoke_array</div>
-
-    <div class="prototype">MonoObject*
-mono_runtime_invoke_array (MonoMethod *method, void *obj, MonoArray *params,
-			   MonoObject **exc)
-
-</div>
-<p />
-<b>Parameters</b>
-<blockquote><dt><i>method:</i></dt><dd> method to invoke</dd><dt><i>obJ:</i></dt><dd> object instance</dd><dt><i>params:</i></dt><dd> arguments to the method</dd><dt><i>exc:</i></dt><dd> exception information.</dd></blockquote>
-<b>Remarks</b>
-<p />	 
-	 Invokes the method represented by <i>method</i> on the object <i>obj</i>.
-	
-	 obj is the 'this' pointer, it should be NULL for static
-	 methods, a MonoObject* for object instances and a pointer to
-	 the value type for value types.
-	
-	 The params array contains the arguments to the method with the
-	 same convention: MonoObject* pointers for object instances and
-	 pointers to the value type otherwise. The _invoke_array
-	 variant takes a C# object[] as the params argument (MonoArray
-	 *params): in this case the value types are boxed inside the
-	 respective reference representation.
-	
-<p />
-	 From unmanaged code you'll usually use the
-	 mono_runtime_invoke() variant.
-	
-	 Note that this function doesn't handle virtual methods for
-	 you, it will exec the exact method you pass: we still need to
-	 expose a function to lookup the derived class implementation
-	 of a virtual method (there are examples of this in the code,
-	 though).
-	
-<p />
-	 You can pass NULL as the exc argument if you don't want to
-	 catch exceptions, otherwise, *exc will be set to the exception
-	 thrown, if any.  if an exception is thrown, you can't use the
-	 MonoObject* result from the function.
-	
-<p />
-	 If the method returns a value type, it is boxed in an object
-	 reference.
-
-</div> <a name="api:mono_runtime_delegate_invoke"></a>
- <div class="api">
-    <div class="api-entry">mono_runtime_delegate_invoke</div>
-
-    <div class="prototype">MonoObject*
-mono_runtime_delegate_invoke (MonoObject *delegate, void **params, MonoObject **exc)
-
-</div>
-<p />
-<b>Parameters</b>
-<blockquote><dt><i>delegate:</i></dt><dd> pointer to a delegate object.</dd><dt><i>params:</i></dt><dd> parameters for the delegate.</dd><dt><i>exc:</i></dt><dd> Pointer to the exception result.</dd></blockquote>
-<b>Remarks</b>
-<p />	 
-	 Invokes the delegate method <i>delegate</i> with the parameters provided.
-	
-	 You can pass NULL as the exc argument if you don't want to
-	 catch exceptions, otherwise, *exc will be set to the exception
-	 thrown, if any.  if an exception is thrown, you can't use the
-	 MonoObject* result from the function.
-
-
-</div> <a name="api:mono_method_body_get_object"></a>
- <div class="api">
-    <div class="api-entry">mono_method_body_get_object</div>
-
-    <div class="prototype">Prototype: mono_method_body_get_object</div>
-<p />
-
-</div> <a name="api:mono_method_desc_free"></a>
- <div class="api">
-    <div class="api-entry">mono_method_desc_free</div>
-
-    <div class="prototype">void
-mono_method_desc_free (MonoMethodDesc *desc)
-
-</div>
-<p />
-<b>Parameters</b>
-<blockquote><dt><i>desc:</i></dt><dd> method description to be released</dd></blockquote>
-<b>Remarks</b>
-<p />	 
-	 Releases the MonoMethodDesc object <i>desc</i>.
-
-</div> <a name="api:mono_method_desc_from_method"></a>
- <div class="api">
-    <div class="api-entry">mono_method_desc_from_method</div>
-
-    <div class="prototype">Prototype: mono_method_desc_from_method</div>
-<p />
-
-</div> <a name="api:mono_method_desc_full_match"></a>
- <div class="api">
-    <div class="api-entry">mono_method_desc_full_match</div>
-
-    <div class="prototype">Prototype: mono_method_desc_full_match</div>
-<p />
-
-</div> <a name="api:mono_method_desc_match"></a>
- <div class="api">
-    <div class="api-entry">mono_method_desc_match</div>
-
-    <div class="prototype">Prototype: mono_method_desc_match</div>
-<p />
-
-</div> <a name="api:mono_method_desc_new"></a>
- <div class="api">
-    <div class="api-entry">mono_method_desc_new</div>
-
-    <div class="prototype">MonoMethodDesc*
-mono_method_desc_new (const char *name, gboolean include_namespace)
-
-</div>
-<p />
-<b>Parameters</b>
-<blockquote><dt><i>name:</i></dt><dd> the method name.</dd><dt><i>include_namespace:</i></dt><dd> whether the name includes a namespace or not.</dd></blockquote>
-<b>Returns</b>
-<blockquote>	  a parsed representation of the method description.
-</blockquote>
-<b>Remarks</b>
-<p />	 
-	 Creates a method description for <i>name</i>, which conforms to the following
-	 specification:
-	
-	 [namespace.]classname:methodname[(args...)]
-	
-	 in all the loaded assemblies.
-	
-	 Both classname and methodname can contain '*' which matches anything.
-	
-
-</div> <a name="api:mono_method_desc_search_in_class"></a>
- <div class="api">
-    <div class="api-entry">mono_method_desc_search_in_class</div>
-
-    <div class="prototype">Prototype: mono_method_desc_search_in_class</div>
-<p />
-
-</div> <a name="api:mono_method_desc_search_in_image"></a>
- <div class="api">
-    <div class="api-entry">mono_method_desc_search_in_image</div>
-
-    <div class="prototype">Prototype: mono_method_desc_search_in_image</div>
-<p />
-
-</div> <a name="api:mono_method_full_name"></a>
- <div class="api">
-    <div class="api-entry">mono_method_full_name</div>
-
-    <div class="prototype">Prototype: mono_method_full_name</div>
-<p />
-
-</div> <a name="api:mono_method_get_class"></a>
- <div class="api">
-    <div class="api-entry">mono_method_get_class</div>
-
-    <div class="prototype">Prototype: mono_method_get_class</div>
-<p />
-
-</div> <a name="api:mono_method_get_flags"></a>
- <div class="api">
-    <div class="api-entry">mono_method_get_flags</div>
-
-    <div class="prototype">Prototype: mono_method_get_flags</div>
-<p />
-
-</div> <a name="api:mono_method_get_last_managed"></a>
- <div class="api">
-    <div class="api-entry">mono_method_get_last_managed</div>
-
-    <div class="prototype">Prototype: mono_method_get_last_managed</div>
-<p />
-
-</div> <a name="api:mono_method_get_marshal_info"></a>
- <div class="api">
-    <div class="api-entry">mono_method_get_marshal_info</div>
-
-    <div class="prototype">Prototype: mono_method_get_marshal_info</div>
-<p />
-
-</div> <a name="api:mono_method_get_name"></a>
- <div class="api">
-    <div class="api-entry">mono_method_get_name</div>
-
-    <div class="prototype">Prototype: mono_method_get_name</div>
-<p />
-
-</div> <a name="api:mono_method_get_object"></a>
- <div class="api">
-    <div class="api-entry">mono_method_get_object</div>
-
-    <div class="prototype">Prototype: mono_method_get_object</div>
-<p />
-
-</div> <a name="api:mono_method_get_param_names"></a>
- <div class="api">
-    <div class="api-entry">mono_method_get_param_names</div>
-
-    <div class="prototype">Prototype: mono_method_get_param_names</div>
-<p />
-
-</div> <a name="api:mono_method_get_param_token"></a>
- <div class="api">
-    <div class="api-entry">mono_method_get_param_token</div>
-
-    <div class="prototype">Prototype: mono_method_get_param_token</div>
-<p />
-
-</div> <a name="api:mono_method_get_signature"></a>
- <div class="api">
-    <div class="api-entry">mono_method_get_signature</div>
-
-    <div class="prototype">Prototype: mono_method_get_signature</div>
-<p />
-
-</div> <a name="api:mono_method_get_index"></a>
- <div class="api">
-    <div class="api-entry">mono_method_get_index</div>
-
-    <div class="prototype">Prototype: mono_method_get_index</div>
-<p />
-
-</div> <a name="api:mono_method_get_signature_full"></a>
- <div class="api">
-    <div class="api-entry">mono_method_get_signature_full</div>
-
-    <div class="prototype">Prototype: mono_method_get_signature_full</div>
-<p />
-
-</div> <a name="api:mono_method_get_token"></a>
- <div class="api">
-    <div class="api-entry">mono_method_get_token</div>
-
-    <div class="prototype">Prototype: mono_method_get_token</div>
-<p />
-
-</div> <a name="api:mono_method_has_marshal_info"></a>
- <div class="api">
-    <div class="api-entry">mono_method_has_marshal_info</div>
-
-    <div class="prototype">Prototype: mono_method_has_marshal_info</div>
-<p />
-
-</div> <a name="api:mono_method_verify"></a>
- <div class="api">
-    <div class="api-entry">mono_method_verify</div>
-
-    <div class="prototype">Prototype: mono_method_verify</div>
-<p />
-
-
-</div><h3>Method Signatures</h3>
-
- <a name="api:mono_method_signature"></a>
- <div class="api">
-    <div class="api-entry">mono_method_signature</div>
-
-    <div class="prototype">MonoMethodSignature*
-mono_method_signature (MonoMethod *m)
-
-</div>
-<p />
-<b>Remarks</b>
-<p />	 
-	 Return the signature of the method M. On failure, returns NULL.
-
-</div> <a name="api:mono_signature_explicit_this"></a>
- <div class="api">
-    <div class="api-entry">mono_signature_explicit_this</div>
-
-    <div class="prototype">gboolean
-mono_signature_explicit_this (MonoMethodSignature *sig)
-
-</div>
-<p />
-<b>Parameters</b>
-<blockquote><dt><i>sig:</i></dt><dd> the method signature inspected</dd></blockquote>
-<b>Returns</b>
-<blockquote>	  <i>TRUE</i> if this the method signature <i>sig</i> has an explicit
-
-	 instance argument. <i>FALSE</i> otherwise.</blockquote>
-
-</div> <a name="api:mono_signature_get_call_conv"></a>
- <div class="api">
-    <div class="api-entry">mono_signature_get_call_conv</div>
-
-    <div class="prototype">guint32
-mono_signature_get_call_conv (MonoMethodSignature *sig)
-
-</div>
-<p />
-<b>Parameters</b>
-<blockquote><dt><i>sig:</i></dt><dd> the method signature inspected</dd></blockquote>
-<b>Returns</b>
-<blockquote>	  the call convention of the method signature <i>sig</i>.
-</blockquote>
-
-</div> <a name="api:mono_signature_get_desc"></a>
- <div class="api">
-    <div class="api-entry">mono_signature_get_desc</div>
-
-    <div class="prototype">Prototype: mono_signature_get_desc</div>
-<p />
-
-</div> <a name="api:mono_signature_get_param_count"></a>
- <div class="api">
-    <div class="api-entry">mono_signature_get_param_count</div>
-
-    <div class="prototype">guint32
-mono_signature_get_param_count (MonoMethodSignature *sig)
-
-</div>
-<p />
-<b>Parameters</b>
-<blockquote><dt><i>sig:</i></dt><dd> the method signature inspected</dd></blockquote>
-<b>Returns</b>
-<blockquote>	  the number of parameters in the method signature <i>sig</i>.
-</blockquote>
-
-</div> <a name="api:mono_signature_get_params"></a>
- <div class="api">
-    <div class="api-entry">mono_signature_get_params</div>
-
-    <div class="prototype">MonoType*
-mono_signature_get_params (MonoMethodSignature *sig, gpointer *iter)
-
-</div>
-<p />
-<b>Parameters</b>
-<blockquote><dt><i>sig:</i></dt><dd> the method signature inspected</dd><dt><i>iter:</i></dt><dd> pointer to an iterator</dd></blockquote>
-<b>Returns</b>
-<blockquote>	  the next parameter type of the method signature <i>sig</i>,
-
-	 <i>NULL</i> when finished.</blockquote>
-<b>Remarks</b>
-<p />	 
-	 Iterates over the parameters for the method signature <i>sig</i>.
-	 A void* pointer must be initualized to <i>NULL</i> to start the iteration
-	 and it's address is passed to this function repeteadly until it returns
-	 <i>NULL</i>.
-	
-
-</div> <a name="api:mono_signature_get_return_type"></a>
- <div class="api">
-    <div class="api-entry">mono_signature_get_return_type</div>
-
-    <div class="prototype">MonoType*
-mono_signature_get_return_type (MonoMethodSignature *sig)
-
-</div>
-<p />
-<b>Parameters</b>
-<blockquote><dt><i>sig:</i></dt><dd> the method signature inspected</dd></blockquote>
-<b>Returns</b>
-<blockquote>	  the return type of the method signature <i>sig</i>
-</blockquote>
-
-</div> <a name="api:mono_signature_hash"></a>
- <div class="api">
-    <div class="api-entry">mono_signature_hash</div>
-
-    <div class="prototype">Prototype: mono_signature_hash</div>
-<p />
-
-</div> <a name="api:mono_signature_is_instance"></a>
- <div class="api">
-    <div class="api-entry">mono_signature_is_instance</div>
-
-    <div class="prototype">gboolean
-mono_signature_is_instance (MonoMethodSignature *sig)
-
-</div>
-<p />
-<b>Parameters</b>
-<blockquote><dt><i>sig:</i></dt><dd> the method signature inspected</dd></blockquote>
-<b>Returns</b>
-<blockquote>	  <i>TRUE</i> if this the method signature <i>sig</i> has an implicit
-
-	 first instance argument. <i>FALSE</i> otherwise.</blockquote>
-
-</div> <a name="api:mono_signature_vararg_start"></a>
- <div class="api">
-    <div class="api-entry">mono_signature_vararg_start</div>
-
-    <div class="prototype">int
-mono_signature_vararg_start (MonoMethodSignature *sig)
-
-</div>
-<p />
-<b>Parameters</b>
-<blockquote><dt><i>sig:</i></dt><dd> the method signature inspected</dd></blockquote>
-<b>Returns</b>
-<blockquote>	  the number of the first vararg parameter in the
-
-	 method signature <i>sig</i>. -1 if this is not a vararg signature.</blockquote>
-
-</div> <a name="api:mono_param_get_objects"></a>
- <div class="api">
-    <div class="api-entry">mono_param_get_objects</div>
-
-    <div class="prototype">Prototype: mono_param_get_objects</div>
-<p />
-
-</div> <a name="api:mono_get_method_full"></a>
- <div class="api">
-    <div class="api-entry">mono_get_method_full</div>
-
-    <div class="prototype">Prototype: mono_get_method_full</div>
-<p />
-
-</div> <a name="api:mono_get_method"></a>
- <div class="api">
-    <div class="api-entry">mono_get_method</div>
-
-    <div class="prototype">Prototype: mono_get_method</div>
-<p />
-
-
-</div><h3>Methods Header Operations</h3>
-
- <a name="api:mono_method_get_header"></a>
- <div class="api">
-    <div class="api-entry">mono_method_get_header</div>
-
-    <div class="prototype">Prototype: mono_method_get_header</div>
-<p />
-
-</div> <a name="api:mono_method_header_get_clauses"></a>
- <div class="api">
-    <div class="api-entry">mono_method_header_get_clauses</div>
-
-    <div class="prototype">Prototype: mono_method_header_get_clauses</div>
-<p />
-
-</div> <a name="api:mono_method_header_get_code"></a>
- <div class="api">
-    <div class="api-entry">mono_method_header_get_code</div>
-
-    <div class="prototype">Prototype: mono_method_header_get_code</div>
-<p />
-
-</div> <a name="api:mono_method_header_get_locals"></a>
- <div class="api">
-    <div class="api-entry">mono_method_header_get_locals</div>
-
-    <div class="prototype">Prototype: mono_method_header_get_locals</div>
-<p />
-
-</div></body>
-</html>
-</span>
\ No newline at end of file
diff --git a/docs/deploy/mono-api-object.html b/docs/deploy/mono-api-object.html
deleted file mode 100644
index 51cdd0d..0000000
--- a/docs/deploy/mono-api-object.html
+++ /dev/null
@@ -1,1134 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?><span>
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-   <title>mono-api-object.html</title>
-   <style type="text/css">
-
-
-   h3 { 
-       font-size: 18px;
-       padding-bottom: 4pt;
-       border-bottom: 2px solid #dddddd;
-   }
-       
-   .api {
-     border: 1px solid;
-     padding: 10pt;
-     margin: 10pt;
-   } 
-
-   .api-entry { 
-       border-bottom: none;
-       font-size: 18px;
-   }
-
-   .prototype {
-     border: 1px solid;
-     background-color: #f2f2f2;
-     padding: 5pt;
-     margin-top: 5pt;
-     margin-bottom: 5pt;  
-   } 
-
-   .header {
-     border: 1px solid;
-     padding: 0 0 5pt 5pt;
-     margin: 10pt;
-     white-space: pre;
-       font-family: monospace;
-   }
-    
-   .code {
-     border: 1px solid;
-     padding: 0 0 5pt 5pt;
-     margin: 10pt;
-     white-space: pre;
-       font-family: monospace;
-   }
-   
-
-</style>
-</head>
-<body>
-<h1>Object API</h1>
-
-	<p />The object API deals with all the operations shared by
-	<a href="#objects">objects</a>, <a href="#valuetypes">value
-	types</a>, <a href="#arrays">arrays</a>.
-
-	<p />The object API has methods for accessing <a href="#fields">fields</a>, <a href="#properties">properties</a>, <a href="#events">events</a>, <a href="#delegates">delegates</a>.
-
-	<p />There are some advanced uses that are useful to document
-	here dealing with <a href="#remote">remote fields</a>.
-	
-<h2>Synopsis</h2>
-
-<div class="header">
-#include <metadata/object.h>
-
-typedef struct MonoVTable MonoVTable;
-typedef struct _MonoThreadsSync MonoThreadsSync;
-
-typedef struct {
-	MonoVTable *vtable;
-	MonoThreadsSync *synchronisation;
-} MonoObject;
-
-typedef struct {
-	guint32 length;
-	guint32 lower_bound;
-} MonoArrayBounds;
-
-typedef struct {
-	MonoObject obj;
-	/* bounds is NULL for szarrays */
-	MonoArrayBounds *bounds;
-	/* total number of elements of the array */
-	guint32 max_length; 
-	/* we use double to ensure proper alignment on platforms that need it */
-	double vector [MONO_ZERO_LEN_ARRAY];
-} MonoArray;
-
-MonoObject* <a href="#api:mono_object_new">mono_object_new</a>                (MonoDomain *domain, 
-                                            MonoClass *klass);
-            <a href="#api:mono_object_new_alloc_specific"></a>                               
-            <a href="#api:mono_object_new_fast"></a>                               
-MonoObject* <a href="#api:mono_object_new_from_token">mono_object_new_from_token</a>      (MonoDomain *domain, 
-                                            MonoImage *image, 
-                                            guint32 token);
-MonoObject* <a href="#api:mono_object_new_specific">mono_object_new_specific</a>       (MonoVTable *vtable);
-MonoObject* <a href="#api:mono_object_clone">mono_object_clone</a>              (MonoObject *obj);
-MonoClass*  <a href="#api:mono_object_get_class">mono_object_get_class</a>          (MonoObject *obj);
-MonoDomain* <a href="#api:mono_object_get_domain">mono_object_get_domain</a>         (MonoObject *obj);
-MonoMethod* <a href="#api:mono_object_get_virtual_method">mono_object_get_virtual_method</a> (MonoObject *obj, 
-                                            MonoMethod *method);
-            <a href="#api:mono_object_isinst_mbyref"></a>                               
-MonoObject* <a href="#api:mono_object_isinst">mono_object_isinst</a>             (MonoObject *obj, 
-                                            MonoClass *klass);
-gpointer    <a href="#api:mono_object_unbox">mono_object_unbox</a>              (MonoObject *obj);
-MonoObject* <a href="#api:mono_object_castclass_mbyref">mono_object_castclass_mbyref</a>   (MonoObject *obj, 
-                                            MonoClass *klass);
-            <a href="#api:mono_object_is_alive"></a>                               
-guint       <a href="#api:mono_object_get_size">mono_object_get_size</a>           (MonoObject* o);
-MonoObject* <a href="#api:mono_value_box">mono_value_box</a>                 (MonoDomain *domain, 
-                                            MonoClass *class, 
-                                            gpointer value);
-            <a href="#api:mono_value_copy"></a>                               
-            <a href="#api:mono_value_copy_array"></a>                               
-MonoArray*  <a href="#api:mono_array_new">mono_array_new</a>                 (MonoDomain *domain, 
-                                            MonoClass *eclass, 
-                                            uintptr_t n);
-MonoArray*  <a href="#api:mono_array_new_full">mono_array_new_full</a>            (MonoDomain *domain, 
-                                            MonoClass *array_class, 
-                                            uintptr_t *lengths, 
-                                            intptr_t *lower_bounds);
-MonoArray*  <a href="#api:mono_array_new_specific">mono_array_new_specific</a>        (MonoVTable *vtable, 
-                                            uintptr_t n);
-MonoClass*  <a href="#api:mono_array_class_get">mono_array_class_get</a>           (MonoClass *eclass, 
-                                            guint32 rank);
-MonoArray*  <a href="#api:mono_array_clone">mono_array_clone</a>               (MonoArray *array);
-            <a href="#api:mono_array_set"></a>                               
-            <a href="#api:mono_array_setref"></a>                               
-uintptr_t   <a href="#api:mono_array_length">mono_array_length</a>              (MonoArray *array);
-            <a href="#api:mono_array_addr"></a>                               
-char*       <a href="#api:mono_array_addr_with_size">mono_array_addr_with_size</a>      (MonoArray *array, 
-                                            int size, 
-                                            uintptr_t idx);
-            <a href="#api:mono_array_get"></a>                               
-gint32      <a href="#api:mono_array_element_size">mono_array_element_size</a>        (MonoClass *ac);
-            <a href="#api:mono_field_from_token"></a>                               
-            <a href="#api:mono_field_get_flags"></a>                               
-const char* <a href="#api:mono_field_get_name">mono_field_get_name</a>            (MonoClassField *field);
-MonoClass*  <a href="#api:mono_field_get_parent">mono_field_get_parent</a>          (MonoClassField *field);
-MonoType*   <a href="#api:mono_field_get_type">mono_field_get_type</a>            (MonoClassField *field);
-void        <a href="#api:mono_field_get_value">mono_field_get_value</a>           (MonoObject *obj, 
-                                            MonoClassField *field, 
-                                            void *value);
-MonoObject* <a href="#api:mono_field_get_value_object">mono_field_get_value_object</a>    (MonoDomain *domain, 
-                                            MonoClassField *field, 
-                                            MonoObject *obj);
-void        <a href="#api:mono_field_set_value">mono_field_set_value</a>           (MonoObject *obj, 
-                                            MonoClassField *field, 
-                                            void *value);
-void        <a href="#api:mono_field_static_get_value">mono_field_static_get_value</a>    (MonoVTable *vt, 
-                                            MonoClassField *field, 
-                                            void *value);
-void        <a href="#api:mono_field_static_set_value">mono_field_static_set_value</a>    (MonoVTable *vt, 
-                                            MonoClassField *field, 
-                                            void *value);
-            <a href="#api:mono_field_get_object"></a>                               
-            <a href="#api:mono_property_get_object"></a>                               
-guint32     <a href="#api:mono_property_get_flags">mono_property_get_flags</a>        (MonoProperty *prop);
-MonoMethod* <a href="#api:mono_property_get_get_method">mono_property_get_get_method</a>   (MonoProperty *prop);
-            <a href="#api:mono_property_get_name"></a>                               
-MonoClass*  <a href="#api:mono_property_get_parent">mono_property_get_parent</a>       (MonoProperty *prop);
-MonoMethod* <a href="#api:mono_property_get_set_method">mono_property_get_set_method</a>   (MonoProperty *prop);
-MonoObject* <a href="#api:mono_property_get_value">mono_property_get_value</a>        (MonoProperty *prop, 
-                                            void *obj, 
-                                            void **params, 
-                                            MonoObject **exc);
-void        <a href="#api:mono_property_set_value">mono_property_set_value</a>        (MonoProperty *prop, 
-                                            void *obj, 
-                                            void **params, 
-                                            MonoObject **exc);
-            <a href="#api:mono_event_get_object"></a>                               
-MonoMethod* <a href="#api:mono_event_get_add_method">mono_event_get_add_method</a>      (MonoEvent *event);
-guint32     <a href="#api:mono_event_get_flags">mono_event_get_flags</a>           (MonoEvent *event);
-const char* <a href="#api:mono_event_get_name">mono_event_get_name</a>            (MonoEvent *event);
-MonoClass*  <a href="#api:mono_event_get_parent">mono_event_get_parent</a>          (MonoEvent *event);
-MonoMethod* <a href="#api:mono_event_get_raise_method">mono_event_get_raise_method</a>    (MonoEvent *event);
-MonoMethod* <a href="#api:mono_event_get_remove_method">mono_event_get_remove_method</a>   (MonoEvent *event);
-gpointer    <a href="#api:mono_load_remote_field">mono_load_remote_field</a>         (MonoObject *this, 
-                                            MonoClass *klass, 
-                                            MonoClassField *field, 
-                                            gpointer *res);
-MonoObject* <a href="#api:mono_load_remote_field_new">mono_load_remote_field_new</a>     (MonoObject *this, 
-                                            MonoClass *klass, 
-                                            MonoClassField *field);
-void        <a href="#api:mono_store_remote_field">mono_store_remote_field</a>        (MonoObject *this, 
-                                            MonoClass *klass, 
-                                            MonoClassField *field, 
-                                            gpointer val);
-void        <a href="#api:mono_store_remote_field_new">mono_store_remote_field_new</a>    (MonoObject *this, 
-                                            MonoClass *klass, 
-                                            MonoClassField *field, 
-                                            MonoObject *arg);
-
-</div>
-
-	<p />MonoObject is the base definition for all managed objects
-	in the Mono runtime, it represents the <a href="http://www.mono-project.com/monodoc/T:System.Object">System.Object</a>
-	managed type.
-
-	<p />All objects that derive from <a href="http://www.mono-project.com/monodoc/T:System.Object">System.Object</a>
-	do have this base definition.  Derived objects are declared
-	following the pattern where the parent class is the first
-	field of a structure definition, for example:
-
-	<div class="code">
-	typedef struct {
-		MonoObject parent;
-		int my_new_field;
-	} MyNewObject
-	</div>
-
-<a name="objects"></a>
-<h2>Core Object Methods</h2>
-
- <a name="api:mono_object_new"></a>
- <div class="api">
-    <div class="api-entry">mono_object_new</div>
-
-    <div class="prototype">MonoObject*
-mono_object_new (MonoDomain *domain, MonoClass *klass)
-
-</div>
-<p />
-<b>Parameters</b>
-<blockquote><dt><i>klass:</i></dt><dd> the class of the object that we want to create</dd></blockquote>
-<b>Returns</b>
-<blockquote>	  a newly created object whose definition is
-
-	 looked up using <i>klass</i>.   This will not invoke any constructors, 
-	 so the consumer of this routine has to invoke any constructors on
-	 its own to initialize the object.
-	
-<p />
-	 It returns NULL on failure.</blockquote>
-
-
-	<p />For example, if you wanted to create an object of type
-	System.Version, you would use a piece of code like this:
-
-	<div class="code">
-MonoClass *version_class;
-MonoObject *result;
-
-/* Get the class from mscorlib */
-version_class = mono_class_from_name (mono_get_corlib (),
-	"System", "Version");
-
-/* Create an object of that class */
-result = mono_object_new (mono_domain_get (), version_class);
-	</div>
-
-</div> <a name="api:mono_object_new_alloc_specific"></a>
- <div class="api">
-    <div class="api-entry">mono_object_new_alloc_specific</div>
-
-    <div class="prototype">Prototype: mono_object_new_alloc_specific</div>
-<p />
-
-</div> <a name="api:mono_object_new_fast"></a>
- <div class="api">
-    <div class="api-entry">mono_object_new_fast</div>
-
-    <div class="prototype">Prototype: mono_object_new_fast</div>
-<p />
-
-</div> <a name="api:mono_object_new_from_token"></a>
- <div class="api">
-    <div class="api-entry">mono_object_new_from_token</div>
-
-    <div class="prototype">MonoObject*
-mono_object_new_from_token  (MonoDomain *domain, MonoImage *image, guint32 token)
-
-</div>
-<p />
-<b>Parameters</b>
-<blockquote><dt><i>image:</i></dt><dd> Context where the type_token is hosted</dd><dt><i>token:</i></dt><dd> a token of the type that we want to create</dd></blockquote>
-<b>Returns</b>
-<blockquote>	  A newly created object whose definition is
-
-	 looked up using <i>token</i> in the <i>image</i> image</blockquote>
-
-</div> <a name="api:mono_object_new_specific"></a>
- <div class="api">
-    <div class="api-entry">mono_object_new_specific</div>
-
-    <div class="prototype">MonoObject*
-mono_object_new_specific (MonoVTable *vtable)
-
-</div>
-<p />
-<b>Parameters</b>
-<blockquote><dt><i>vtable:</i></dt><dd> the vtable of the object that we want to create</dd></blockquote>
-<b>Returns</b>
-<blockquote>	  A newly created object with class and domain specified
-
-	 by <i>vtable</i></blockquote>
-
-</div> <a name="api:mono_object_clone"></a>
- <div class="api">
-    <div class="api-entry">mono_object_clone</div>
-
-    <div class="prototype">MonoObject*
-mono_object_clone (MonoObject *obj)
-
-</div>
-<p />
-<b>Parameters</b>
-<blockquote><dt><i>obj:</i></dt><dd> the object to clone</dd></blockquote>
-<b>Returns</b>
-<blockquote>	  A newly created object who is a shallow copy of <i>obj</i>
-</blockquote>
-
-</div> <a name="api:mono_object_get_class"></a>
- <div class="api">
-    <div class="api-entry">mono_object_get_class</div>
-
-    <div class="prototype">MonoClass*
-mono_object_get_class (MonoObject *obj)
-
-</div>
-<p />
-<b>Parameters</b>
-<blockquote><dt><i>obj:</i></dt><dd> object to query</dd></blockquote>
-<b>Returns</b>
-<blockquote>	  the MonOClass of the object.
-</blockquote>
-<b>Remarks</b>
-<p />	 <p />
-
-
-</div> <a name="api:mono_object_get_domain"></a>
- <div class="api">
-    <div class="api-entry">mono_object_get_domain</div>
-
-    <div class="prototype">MonoDomain*
-mono_object_get_domain (MonoObject *obj)
-
-</div>
-<p />
-<b>Parameters</b>
-<blockquote><dt><i>obj:</i></dt><dd> object to query</dd></blockquote>
-<b>Returns</b>
-<blockquote>	  the MonoDomain where the object is hosted
-</blockquote>
-<b>Remarks</b>
-<p />	 <p />
-
-
-</div> <a name="api:mono_object_get_virtual_method"></a>
- <div class="api">
-    <div class="api-entry">mono_object_get_virtual_method</div>
-
-    <div class="prototype">MonoMethod*
-mono_object_get_virtual_method (MonoObject *obj, MonoMethod *method)
-
-</div>
-<p />
-<b>Parameters</b>
-<blockquote><dt><i>obj:</i></dt><dd> object to operate on.</dd><dt><i>method:</i></dt><dd> method </dd></blockquote>
-<b>Remarks</b>
-<p />	 
-	 Retrieves the MonoMethod that would be called on obj if obj is passed as
-	 the instance of a callvirt of method.
-
-</div> <a name="api:mono_object_isinst_mbyref"></a>
- <div class="api">
-    <div class="api-entry">mono_object_isinst_mbyref</div>
-
-    <div class="prototype">Prototype: mono_object_isinst_mbyref</div>
-<p />
-
-</div> <a name="api:mono_object_isinst"></a>
- <div class="api">
-    <div class="api-entry">mono_object_isinst</div>
-
-    <div class="prototype">MonoObject*
-mono_object_isinst (MonoObject *obj, MonoClass *klass)
-
-</div>
-<p />
-<b>Parameters</b>
-<blockquote><dt><i>obj:</i></dt><dd> an object</dd><dt><i>klass:</i></dt><dd> a pointer to a class </dd></blockquote>
-<b>Returns</b>
-<blockquote>	  <i>obj</i> if <i>obj</i> is derived from <i>klass</i>
-</blockquote>
-
-</div> <a name="api:mono_object_unbox"></a>
- <div class="api">
-    <div class="api-entry">mono_object_unbox</div>
-
-    <div class="prototype">gpointer
-mono_object_unbox (MonoObject *obj)
-
-</div>
-<p />
-<b>Parameters</b>
-<blockquote><dt><i>obj:</i></dt><dd> object to unbox</dd></blockquote>
-<b>Returns</b>
-<blockquote>	  a pointer to the start of the valuetype boxed in this
-
-	 object.
-	
-	 This method will assert if the object passed is not a valuetype.</blockquote>
-<b>Remarks</b>
-<p />	 <p />
-
-
-</div> <a name="api:mono_object_castclass_mbyref"></a>
- <div class="api">
-    <div class="api-entry">mono_object_castclass_mbyref</div>
-
-    <div class="prototype">MonoObject*
-mono_object_castclass_mbyref (MonoObject *obj, MonoClass *klass)
-
-</div>
-<p />
-<b>Parameters</b>
-<blockquote><dt><i>obj:</i></dt><dd> an object</dd><dt><i>klass:</i></dt><dd> a pointer to a class </dd></blockquote>
-<b>Returns</b>
-<blockquote>	  <i>obj</i> if <i>obj</i> is derived from <i>klass</i>, throws an exception otherwise
-</blockquote>
-
-</div> <a name="api:mono_object_is_alive"></a>
- <div class="api">
-    <div class="api-entry">mono_object_is_alive</div>
-
-    <div class="prototype">Prototype: mono_object_is_alive</div>
-<p />
-
-</div> <a name="api:mono_object_get_size"></a>
- <div class="api">
-    <div class="api-entry">mono_object_get_size</div>
-
-    <div class="prototype">guint
-mono_object_get_size (MonoObject* o)
-
-</div>
-<p />
-<b>Parameters</b>
-<blockquote><dt><i>o:</i></dt><dd> object to query</dd></blockquote>
-<b>Returns</b>
-<blockquote>	  the size, in bytes, of <i>o</i>
-</blockquote>
-<b>Remarks</b>
-<p />	 <p />
-
-
-
-<a name="valuetypes"></a>
-</div><h2>Value Types</h2>
-
- <a name="api:mono_value_box"></a>
- <div class="api">
-    <div class="api-entry">mono_value_box</div>
-
-    <div class="prototype">MonoObject*
-mono_value_box (MonoDomain *domain, MonoClass *class, gpointer value)
-
-</div>
-<p />
-<b>Parameters</b>
-<blockquote><dt><i>class:</i></dt><dd> the class of the value</dd><dt><i>value:</i></dt><dd> a pointer to the unboxed data</dd></blockquote>
-<b>Returns</b>
-<blockquote>	  A newly created object which contains <i>value</i>.
-</blockquote>
-
-</div> <a name="api:mono_value_copy"></a>
- <div class="api">
-    <div class="api-entry">mono_value_copy</div>
-
-    <div class="prototype">Prototype: mono_value_copy</div>
-<p />
-
-</div> <a name="api:mono_value_copy_array"></a>
- <div class="api">
-    <div class="api-entry">mono_value_copy_array</div>
-
-    <div class="prototype">Prototype: mono_value_copy_array</div>
-<p />
-
-
-<a name="arrays"></a>
-</div><h2>Array Methods</h2>
-
-	<p />Use the <tt>mono_array_new_*</tt> methods to create arrays
-	of a given type.
-
-	<p />For example, the following code creates an array with two
-	elements of type <tt>System.Byte</tt>, and sets the values
-	0xca and 0xfe on it:
-	
-	<pre class="code">
-
-	MonoArray *CreateByteArray (MonoDomain *domain)
-	{
-	    MonoArray *data;
-
-	    data = mono_array_new (domain, mono_get_byte_class (), 2);
-	    mono_array_set (data, guint8, 0, 0xca);
-	    mono_array_set (data, guint8, 0, 0xfe);
-
-	    return data;
-	}
-
-	</pre>
-
-<h3>Creating Arrays</h3>
-
- <a name="api:mono_array_new"></a>
- <div class="api">
-    <div class="api-entry">mono_array_new</div>
-
-    <div class="prototype">MonoArray*
-mono_array_new (MonoDomain *domain, MonoClass *eclass, uintptr_t n)
-
-</div>
-<p />
-<b>Parameters</b>
-<blockquote><dt><i>domain:</i></dt><dd> domain where the object is created</dd><dt><i>eclass:</i></dt><dd> element class</dd><dt><i>n:</i></dt><dd> number of array elements</dd></blockquote>
-<b>Remarks</b>
-<p />	 
-	 This routine creates a new szarray with <i>n</i> elements of type <i>eclass</i>.
-
-</div> <a name="api:mono_array_new_full"></a>
- <div class="api">
-    <div class="api-entry">mono_array_new_full</div>
-
-    <div class="prototype">MonoArray*
-mono_array_new_full (MonoDomain *domain, MonoClass *array_class, uintptr_t *lengths, intptr_t *lower_bounds)
-
-</div>
-<p />
-<b>Parameters</b>
-<blockquote><dt><i>domain:</i></dt><dd> domain where the object is created</dd><dt><i>array_class:</i></dt><dd> array class</dd><dt><i>lengths:</i></dt><dd> lengths for each dimension in the array</dd><dt><i>lower_bounds:</i></dt><dd> lower bounds for each dimension in the array (may be NULL)</dd></blockquote>
-<b>Remarks</b>
-<p />	 
-	 This routine creates a new array objects with the given dimensions,
-	 lower bounds and type.
-
-</div> <a name="api:mono_array_new_specific"></a>
- <div class="api">
-    <div class="api-entry">mono_array_new_specific</div>
-
-    <div class="prototype">MonoArray*
-mono_array_new_specific (MonoVTable *vtable, uintptr_t n)
-
-</div>
-<p />
-<b>Parameters</b>
-<blockquote><dt><i>vtable:</i></dt><dd> a vtable in the appropriate domain for an initialized class</dd><dt><i>n:</i></dt><dd> number of array elements</dd></blockquote>
-<b>Remarks</b>
-<p />	 
-	 This routine is a fast alternative to mono_array_new() for code which
-	 can be sure about the domain it operates in.
-
-</div> <a name="api:mono_array_class_get"></a>
- <div class="api">
-    <div class="api-entry">mono_array_class_get</div>
-
-    <div class="prototype">MonoClass*
-mono_array_class_get (MonoClass *eclass, guint32 rank)
-
-</div>
-<p />
-<b>Parameters</b>
-<blockquote><dt><i>element_class:</i></dt><dd> element class </dd><dt><i>rank:</i></dt><dd> the dimension of the array class</dd></blockquote>
-<b>Returns</b>
-<blockquote>	  a class object describing the array with element type <i>element_type</i> and 
-
-	 dimension <i>rank</i>. </blockquote>
-
-</div> <a name="api:mono_array_clone"></a>
- <div class="api">
-    <div class="api-entry">mono_array_clone</div>
-
-    <div class="prototype">MonoArray*
-mono_array_clone (MonoArray *array)
-
-</div>
-<p />
-<b>Parameters</b>
-<blockquote><dt><i>array:</i></dt><dd> the array to clone</dd></blockquote>
-<b>Returns</b>
-<blockquote>	  A newly created array who is a shallow copy of <i>array</i>
-</blockquote>
-
-
-</div><h3>Using Arrays</h3>
-
- <a name="api:mono_array_set"></a>
- <div class="api">
-    <div class="api-entry">mono_array_set</div>
-
-    <div class="prototype">Prototype: mono_array_set</div>
-<p />
-
-</div> <a name="api:mono_array_setref"></a>
- <div class="api">
-    <div class="api-entry">mono_array_setref</div>
-
-    <div class="prototype">Prototype: mono_array_setref</div>
-<p />
-
-</div> <a name="api:mono_array_length"></a>
- <div class="api">
-    <div class="api-entry">mono_array_length</div>
-
-    <div class="prototype">uintptr_t
-mono_array_length (MonoArray *array)
-
-</div>
-<p />
-<b>Parameters</b>
-<blockquote><dt><i>array:</i></dt><dd> a MonoArray*</dd></blockquote>
-<b>Remarks</b>
-<p />	 
-	 Returns the total number of elements in the array. This works for
-	 both vectors and multidimensional arrays.
-
-</div> <a name="api:mono_array_addr"></a>
- <div class="api">
-    <div class="api-entry">mono_array_addr</div>
-
-    <div class="prototype">Prototype: mono_array_addr</div>
-<p />
-
-</div> <a name="api:mono_array_addr_with_size"></a>
- <div class="api">
-    <div class="api-entry">mono_array_addr_with_size</div>
-
-    <div class="prototype">char*
-mono_array_addr_with_size (MonoArray *array, int size, uintptr_t idx)
-
-</div>
-<p />
-<b>Parameters</b>
-<blockquote><dt><i>array:</i></dt><dd> a MonoArray*</dd><dt><i>size:</i></dt><dd> size of the array elements</dd><dt><i>idx:</i></dt><dd> index into the array</dd></blockquote>
-<b>Remarks</b>
-<p />	 
-	 Returns the address of the <i>idx</i> element in the array.
-
-</div> <a name="api:mono_array_get"></a>
- <div class="api">
-    <div class="api-entry">mono_array_get</div>
-
-    <div class="prototype">Prototype: mono_array_get</div>
-<p />
-
-</div> <a name="api:mono_array_element_size"></a>
- <div class="api">
-    <div class="api-entry">mono_array_element_size</div>
-
-    <div class="prototype">gint32
-mono_array_element_size (MonoClass *ac)
-
-</div>
-<p />
-<b>Parameters</b>
-<blockquote><dt><i>ac:</i></dt><dd> pointer to a #MonoArrayClass</dd></blockquote>
-<b>Returns</b>
-<blockquote>	  the size of single array element.
-</blockquote>
-
-
-<a name="fields"></a>
-</div><h2>Fields</h2>
-
- <a name="api:mono_field_from_token"></a>
- <div class="api">
-    <div class="api-entry">mono_field_from_token</div>
-
-    <div class="prototype">Prototype: mono_field_from_token</div>
-<p />
-
-</div> <a name="api:mono_field_get_flags"></a>
- <div class="api">
-    <div class="api-entry">mono_field_get_flags</div>
-
-    <div class="prototype">Prototype: mono_field_get_flags</div>
-<p />
-
-</div> <a name="api:mono_field_get_name"></a>
- <div class="api">
-    <div class="api-entry">mono_field_get_name</div>
-
-    <div class="prototype">const char*
-mono_field_get_name (MonoClassField *field)
-
-</div>
-<p />
-<b>Parameters</b>
-<blockquote><dt><i>field:</i></dt><dd> the MonoClassField to act on</dd></blockquote>
-<b>Returns</b>
-<blockquote>	  the name of the field.
-</blockquote>
-
-</div> <a name="api:mono_field_get_parent"></a>
- <div class="api">
-    <div class="api-entry">mono_field_get_parent</div>
-
-    <div class="prototype">MonoClass*
-mono_field_get_parent (MonoClassField *field)
-
-</div>
-<p />
-<b>Parameters</b>
-<blockquote><dt><i>field:</i></dt><dd> the MonoClassField to act on</dd></blockquote>
-<b>Returns</b>
-<blockquote>	  MonoClass where the field was defined.
-</blockquote>
-
-</div> <a name="api:mono_field_get_type"></a>
- <div class="api">
-    <div class="api-entry">mono_field_get_type</div>
-
-    <div class="prototype">MonoType*
-mono_field_get_type (MonoClassField *field)
-
-</div>
-<p />
-<b>Parameters</b>
-<blockquote><dt><i>field:</i></dt><dd> the MonoClassField to act on</dd></blockquote>
-<b>Returns</b>
-<blockquote>	  MonoType of the field.
-</blockquote>
-
-</div> <a name="api:mono_field_get_value"></a>
- <div class="api">
-    <div class="api-entry">mono_field_get_value</div>
-
-    <div class="prototype">void
-mono_field_get_value (MonoObject *obj, MonoClassField *field, void *value)
-
-</div>
-<p />
-<b>Parameters</b>
-<blockquote><dt><i>obj:</i></dt><dd> Object instance</dd><dt><i>field:</i></dt><dd> MonoClassField describing the field to fetch information from</dd><dt><i>value:</i></dt><dd> pointer to the location where the value will be stored</dd></blockquote>
-<b>Remarks</b>
-<p />	 
-	 Use this routine to get the value of the field <i>field</i> in the object
-	 passed.
-	
-	 The pointer provided by value must be of the field type, for reference
-	 types this is a MonoObject*, for value types its the actual pointer to
-	 the value type.
-	
-	 For example:
-	     int i;
-	     mono_field_get_value (obj, int_field, &i);
-
-</div> <a name="api:mono_field_get_value_object"></a>
- <div class="api">
-    <div class="api-entry">mono_field_get_value_object</div>
-
-    <div class="prototype">MonoObject*
-mono_field_get_value_object (MonoDomain *domain, MonoClassField *field, MonoObject *obj)
-	
-</div>
-<p />
-<b>Parameters</b>
-<blockquote><dt><i>domain:</i></dt><dd> domain where the object will be created (if boxing)</dd><dt><i>field:</i></dt><dd> MonoClassField describing the field to fetch information from</dd><dt><i>obj:</i></dt><dd> The object instance for the field.</dd></blockquote>
-<b>Returns</b>
-<blockquote>	  a new MonoObject with the value from the given field.  If the
-
-	 field represents a value type, the value is boxed.
-	</blockquote>
-
-</div> <a name="api:mono_field_set_value"></a>
- <div class="api">
-    <div class="api-entry">mono_field_set_value</div>
-
-    <div class="prototype">void
-mono_field_set_value (MonoObject *obj, MonoClassField *field, void *value)
-
-</div>
-<p />
-<b>Parameters</b>
-<blockquote><dt><i>obj:</i></dt><dd> Instance object</dd><dt><i>field:</i></dt><dd> MonoClassField describing the field to set</dd><dt><i>value:</i></dt><dd> The value to be set</dd></blockquote>
-<b>Remarks</b>
-<p />	 
-	 Sets the value of the field described by <i>field</i> in the object instance <i>obj</i>
-	 to the value passed in <i>value</i>.   This method should only be used for instance
-	 fields.   For static fields, use mono_field_static_set_value.
-	
-	 The value must be on the native format of the field type. 
-
-</div> <a name="api:mono_field_static_get_value"></a>
- <div class="api">
-    <div class="api-entry">mono_field_static_get_value</div>
-
-    <div class="prototype">void
-mono_field_static_get_value (MonoVTable *vt, MonoClassField *field, void *value)
-
-</div>
-<p />
-<b>Parameters</b>
-<blockquote><dt><i>vt:</i></dt><dd> vtable to the object</dd><dt><i>field:</i></dt><dd> MonoClassField describing the field to fetch information from</dd><dt><i>value:</i></dt><dd> where the value is returned</dd></blockquote>
-<b>Remarks</b>
-<p />	 
-	 Use this routine to get the value of the static field <i>field</i> value.
-	
-	 The pointer provided by value must be of the field type, for reference
-	 types this is a MonoObject*, for value types its the actual pointer to
-	 the value type.
-	
-	 For example:
-	     int i;
-	     mono_field_static_get_value (vt, int_field, &i);
-
-</div> <a name="api:mono_field_static_set_value"></a>
- <div class="api">
-    <div class="api-entry">mono_field_static_set_value</div>
-
-    <div class="prototype">void
-mono_field_static_set_value (MonoVTable *vt, MonoClassField *field, void *value)
-
-</div>
-<p />
-<b>Parameters</b>
-<blockquote><dt><i>field:</i></dt><dd> MonoClassField describing the field to set</dd><dt><i>value:</i></dt><dd> The value to be set</dd></blockquote>
-<b>Remarks</b>
-<p />	 
-	 Sets the value of the static field described by <i>field</i>
-	 to the value passed in <i>value</i>.
-	
-	 The value must be on the native format of the field type. 
-
-</div> <a name="api:mono_field_get_object"></a>
- <div class="api">
-    <div class="api-entry">mono_field_get_object</div>
-
-    <div class="prototype">Prototype: mono_field_get_object</div>
-<p />
-
-
-<a name="properties"></a>
-</div><h2>Properties</h2>
-
- <a name="api:mono_property_get_object"></a>
- <div class="api">
-    <div class="api-entry">mono_property_get_object</div>
-
-    <div class="prototype">Prototype: mono_property_get_object</div>
-<p />
-
-</div> <a name="api:mono_property_get_flags"></a>
- <div class="api">
-    <div class="api-entry">mono_property_get_flags</div>
-
-    <div class="prototype">guint32
-mono_property_get_flags (MonoProperty *prop)
-
-</div>
-<p />
-<b>Parameters</b>
-<blockquote><dt><i>prop:</i></dt><dd> the MonoProperty to act on.</dd></blockquote>
-<b>Returns</b>
-<blockquote>	  the flags for the property.
-</blockquote>
-<b>Remarks</b>
-<p />	 
-	 The metadata flags for a property are encoded using the
-	 PROPERTY_ATTRIBUTE_* constants.  See the tabledefs.h file for details.
-	
-
-</div> <a name="api:mono_property_get_get_method"></a>
- <div class="api">
-    <div class="api-entry">mono_property_get_get_method</div>
-
-    <div class="prototype">MonoMethod*
-mono_property_get_get_method (MonoProperty *prop)
-
-</div>
-<p />
-<b>Parameters</b>
-<blockquote><dt><i>prop:</i></dt><dd> the MonoProperty to act on.</dd></blockquote>
-<b>Returns</b>
-<blockquote>	  the setter method of the property (A MonoMethod)
-</blockquote>
-
-</div> <a name="api:mono_property_get_name"></a>
- <div class="api">
-    <div class="api-entry">mono_property_get_name</div>
-
-    <div class="prototype">Prototype: mono_property_get_name</div>
-<p />
-
-</div> <a name="api:mono_property_get_parent"></a>
- <div class="api">
-    <div class="api-entry">mono_property_get_parent</div>
-
-    <div class="prototype">MonoClass*
-mono_property_get_parent (MonoProperty *prop)
-
-</div>
-<p />
-<b>Parameters</b>
-<blockquote><dt><i>prop:</i></dt><dd> the MonoProperty to act on.</dd></blockquote>
-<b>Returns</b>
-<blockquote>	  the MonoClass where the property was defined.
-</blockquote>
-
-</div> <a name="api:mono_property_get_set_method"></a>
- <div class="api">
-    <div class="api-entry">mono_property_get_set_method</div>
-
-    <div class="prototype">MonoMethod*
-mono_property_get_set_method (MonoProperty *prop)
-
-</div>
-<p />
-<b>Parameters</b>
-<blockquote><dt><i>prop:</i></dt><dd> the MonoProperty to act on.</dd></blockquote>
-<b>Returns</b>
-<blockquote>	  the setter method of the property (A MonoMethod)
-</blockquote>
-
-</div> <a name="api:mono_property_get_value"></a>
- <div class="api">
-    <div class="api-entry">mono_property_get_value</div>
-
-    <div class="prototype">MonoObject*
-mono_property_get_value (MonoProperty *prop, void *obj, void **params, MonoObject **exc)
-
-</div>
-<p />
-<b>Parameters</b>
-<blockquote><dt><i>prop:</i></dt><dd> MonoProperty to fetch</dd><dt><i>obj:</i></dt><dd> instance object on which to act</dd><dt><i>params:</i></dt><dd> parameters to pass to the propery</dd><dt><i>exc:</i></dt><dd> optional exception</dd></blockquote>
-<b>Returns</b>
-<blockquote>	  the value from invoking the get method on the property.
-</blockquote>
-<b>Remarks</b>
-<p />	 
-	 Invokes the property's get method with the given arguments on the
-	 object instance obj (or NULL for static properties). 
-	
-<p />
-	 You can pass NULL as the exc argument if you don't want to
-	 catch exceptions, otherwise, *exc will be set to the exception
-	 thrown, if any.  if an exception is thrown, you can't use the
-	 MonoObject* result from the function.
-	
-
-</div> <a name="api:mono_property_set_value"></a>
- <div class="api">
-    <div class="api-entry">mono_property_set_value</div>
-
-    <div class="prototype">void
-mono_property_set_value (MonoProperty *prop, void *obj, void **params, MonoObject **exc)
-
-</div>
-<p />
-<b>Parameters</b>
-<blockquote><dt><i>prop:</i></dt><dd> MonoProperty to set</dd><dt><i>obj:</i></dt><dd> instance object on which to act</dd><dt><i>params:</i></dt><dd> parameters to pass to the propery</dd><dt><i>exc:</i></dt><dd> optional exception</dd></blockquote>
-<b>Remarks</b>
-<p />	 
-	 Invokes the property's set method with the given arguments on the
-	 object instance obj (or NULL for static properties). 
-	
-<p />
-	 You can pass NULL as the exc argument if you don't want to
-	 catch exceptions, otherwise, *exc will be set to the exception
-	 thrown, if any.  if an exception is thrown, you can't use the
-	 MonoObject* result from the function.
-
-
-<a name="events"></a>
-</div><h2>Events</h2>
-
- <a name="api:mono_event_get_object"></a>
- <div class="api">
-    <div class="api-entry">mono_event_get_object</div>
-
-    <div class="prototype">Prototype: mono_event_get_object</div>
-<p />
-
-</div> <a name="api:mono_event_get_add_method"></a>
- <div class="api">
-    <div class="api-entry">mono_event_get_add_method</div>
-
-    <div class="prototype">MonoMethod*
-mono_event_get_add_method (MonoEvent *event)
-
-</div>
-<p />
-<b>Parameters</b>
-<blockquote><dt><i>event:</i></dt><dd> The MonoEvent to act on.</dd></blockquote>
-<b>Returns</b>
-<blockquote>	  the <i>add</i>' method for the event (a MonoMethod).
-</blockquote>
-
-</div> <a name="api:mono_event_get_flags"></a>
- <div class="api">
-    <div class="api-entry">mono_event_get_flags</div>
-
-    <div class="prototype">guint32
-mono_event_get_flags (MonoEvent *event)
-
-</div>
-<p />
-<b>Parameters</b>
-<blockquote><dt><i>event:</i></dt><dd> the MonoEvent to act on.</dd></blockquote>
-<b>Returns</b>
-<blockquote>	  the flags for the event.
-</blockquote>
-<b>Remarks</b>
-<p />	 
-	 The metadata flags for an event are encoded using the
-	 EVENT_* constants.  See the tabledefs.h file for details.
-	
-
-</div> <a name="api:mono_event_get_name"></a>
- <div class="api">
-    <div class="api-entry">mono_event_get_name</div>
-
-    <div class="prototype">const char*
-mono_event_get_name (MonoEvent *event)
-
-</div>
-<p />
-<b>Parameters</b>
-<blockquote><dt><i>event:</i></dt><dd> the MonoEvent to act on</dd></blockquote>
-<b>Returns</b>
-<blockquote>	  the name of the event.
-</blockquote>
-
-</div> <a name="api:mono_event_get_parent"></a>
- <div class="api">
-    <div class="api-entry">mono_event_get_parent</div>
-
-    <div class="prototype">MonoClass*
-mono_event_get_parent (MonoEvent *event)
-
-</div>
-<p />
-<b>Parameters</b>
-<blockquote><dt><i>event:</i></dt><dd> the MonoEvent to act on.</dd></blockquote>
-<b>Returns</b>
-<blockquote>	  the MonoClass where the event is defined.
-</blockquote>
-
-</div> <a name="api:mono_event_get_raise_method"></a>
- <div class="api">
-    <div class="api-entry">mono_event_get_raise_method</div>
-
-    <div class="prototype">MonoMethod*
-mono_event_get_raise_method (MonoEvent *event)
-
-</div>
-<p />
-<b>Parameters</b>
-<blockquote><dt><i>event:</i></dt><dd> The MonoEvent to act on.</dd></blockquote>
-<b>Returns</b>
-<blockquote>	  the <i>raise</i> method for the event (a MonoMethod).
-</blockquote>
-
-</div> <a name="api:mono_event_get_remove_method"></a>
- <div class="api">
-    <div class="api-entry">mono_event_get_remove_method</div>
-
-    <div class="prototype">MonoMethod*
-mono_event_get_remove_method (MonoEvent *event)
-
-</div>
-<p />
-<b>Parameters</b>
-<blockquote><dt><i>event:</i></dt><dd> The MonoEvent to act on.</dd></blockquote>
-<b>Returns</b>
-<blockquote>	  the <i>remove</i> method for the event (a MonoMethod).
-</blockquote>
-
-
-<a name="remote"></a>
-</div><h2>Remote Fields</h2>
- <a name="api:mono_load_remote_field"></a>
- <div class="api">
-    <div class="api-entry">mono_load_remote_field</div>
-
-    <div class="prototype">gpointer
-mono_load_remote_field (MonoObject *this, MonoClass *klass, MonoClassField *field, gpointer *res)
-
-</div>
-<p />
-<b>Parameters</b>
-<blockquote><dt><i>this:</i></dt><dd> pointer to an object</dd><dt><i>klass:</i></dt><dd> klass of the object containing <i>field</i></dd><dt><i>field:</i></dt><dd> the field to load</dd><dt><i>res:</i></dt><dd> a storage to store the result</dd></blockquote>
-<b>Returns</b>
-<blockquote>	  an address pointing to the value of field.
-</blockquote>
-<b>Remarks</b>
-<p />	 
-	 This method is called by the runtime on attempts to load fields of
-	 transparent proxy objects. <i>this</i> points to such TP, <i>klass</i> is the class of
-	 the object containing <i>field</i>. <i>res</i> is a storage location which can be
-	 used to store the result.
-	
-
-</div> <a name="api:mono_load_remote_field_new"></a>
- <div class="api">
-    <div class="api-entry">mono_load_remote_field_new</div>
-
-    <div class="prototype">MonoObject*
-mono_load_remote_field_new (MonoObject *this, MonoClass *klass, MonoClassField *field)
-
-</div>
-<p />
-<b>Parameters</b>
-<blockquote><dt><i>this:</i></dt><dd> </dd><dt><i>klass:</i></dt><dd> </dd><dt><i>field:</i></dt><dd></dd></blockquote>
-<b>Remarks</b>
-<p />	 
-	 Missing documentation.
-
-</div> <a name="api:mono_store_remote_field"></a>
- <div class="api">
-    <div class="api-entry">mono_store_remote_field</div>
-
-    <div class="prototype">void
-mono_store_remote_field (MonoObject *this, MonoClass *klass, MonoClassField *field, gpointer val)
-
-</div>
-<p />
-<b>Parameters</b>
-<blockquote><dt><i>this:</i></dt><dd> pointer to an object</dd><dt><i>klass:</i></dt><dd> klass of the object containing <i>field</i></dd><dt><i>field:</i></dt><dd> the field to load</dd><dt><i>val:</i></dt><dd> the value/object to store</dd></blockquote>
-<b>Remarks</b>
-<p />	 
-	 This method is called by the runtime on attempts to store fields of
-	 transparent proxy objects. <i>this</i> points to such TP, <i>klass</i> is the class of
-	 the object containing <i>field</i>. <i>val</i> is the new value to store in <i>field</i>.
-
-</div></body>
-</html>
-</span>
\ No newline at end of file
diff --git a/docs/deploy/mono-api-profiler.html b/docs/deploy/mono-api-profiler.html
deleted file mode 100644
index c0b89c9..0000000
--- a/docs/deploy/mono-api-profiler.html
+++ /dev/null
@@ -1,268 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?><span>
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-   <title>mono-api-profiler.html</title>
-   <style type="text/css">
-
-
-   h3 { 
-       font-size: 18px;
-       padding-bottom: 4pt;
-       border-bottom: 2px solid #dddddd;
-   }
-       
-   .api {
-     border: 1px solid;
-     padding: 10pt;
-     margin: 10pt;
-   } 
-
-   .api-entry { 
-       border-bottom: none;
-       font-size: 18px;
-   }
-
-   .prototype {
-     border: 1px solid;
-     background-color: #f2f2f2;
-     padding: 5pt;
-     margin-top: 5pt;
-     margin-bottom: 5pt;  
-   } 
-
-   .header {
-     border: 1px solid;
-     padding: 0 0 5pt 5pt;
-     margin: 10pt;
-     white-space: pre;
-       font-family: monospace;
-   }
-    
-   .code {
-     border: 1px solid;
-     padding: 0 0 5pt 5pt;
-     margin: 10pt;
-     white-space: pre;
-       font-family: monospace;
-   }
-   
-
-</style>
-</head>
-<body>
-<h1>Profiling Interface</h1>
-
-<h3>Profiler Operation</h3>
-
-	<p />The following methods can be used by dynamic profiler
-	methods to monitor different aspects of the program.
-
-	<p />A custom profiler will have one public method defined in
-	the shared library which is the entry point that Mono calls at
-	startup, it has the following signature:
-
-	<pre>
-	void mono_profiler_startup (const char *desc)
-	</pre>
-
-	<p />Where "desc" is the set of arguments that were passed from
-	the command line.  This routine will call
-	<tt>mono_profiler_install</tt> to activate the profiler and
-	will install one or more filters (one of the various
-	<tt>mono_profiler_install_</tt> functions).
-
-	<p />In addition, a profiler developer will typically call
-	<tt>mono_profiler_set_events</tt> to register which kinds of
-	traces should be enabled, these can be an OR-ed combination of
-	the following:
-
-	<pre>
-	MONO_PROFILE_NONE
-        MONO_PROFILE_APPDOMAIN_EVENTS
-        MONO_PROFILE_ASSEMBLY_EVENTS
-        MONO_PROFILE_MODULE_EVENTS    
-        MONO_PROFILE_CLASS_EVENTS     
-        MONO_PROFILE_JIT_COMPILATION  
-        MONO_PROFILE_INLINING         
-        MONO_PROFILE_EXCEPTIONS       
-        MONO_PROFILE_ALLOCATIONS      
-        MONO_PROFILE_GC               
-        MONO_PROFILE_THREADS          
-        MONO_PROFILE_REMOTING         
-        MONO_PROFILE_TRANSITIONS      
-        MONO_PROFILE_ENTER_LEAVE      
-        MONO_PROFILE_COVERAGE         
-        MONO_PROFILE_INS_COVERAGE     
-        MONO_PROFILE_STATISTICAL      
-	</pre>
-
-	<p />Developers can change the set of monitored events at
-	runtime by calling <tt>mono_profiler_set_events</tt>.
-	
- <a name="api:mono_profiler_install"></a>
- <div class="api">
-    <div class="api-entry">mono_profiler_install</div>
-
-    <div class="prototype">void
-mono_profiler_install (MonoProfiler *prof, MonoProfileFunc callback)
-
-</div>
-<p />
-<b>Parameters</b>
-<blockquote><dt><i>prof:</i></dt><dd> a MonoProfiler structure pointer, or a pointer to a derived structure.</dd><dt><i>callback:</i></dt><dd> the function to invoke at shutdown</dd></blockquote>
-<b>Remarks</b>
-<p />	 
-	 Use mono_profiler_install to activate profiling in the Mono runtime.
-	 Typically developers of new profilers will create a new structure whose
-	 first field is a MonoProfiler and put any extra information that they need
-	 to access from the various profiling callbacks there.
-	
-
-</div> <a name="api:mono_profiler_install_allocation"></a>
- <div class="api">
-    <div class="api-entry">mono_profiler_install_allocation</div>
-
-    <div class="prototype">Prototype: mono_profiler_install_allocation</div>
-<p />
-
-</div> <a name="api:mono_profiler_install_appdomain"></a>
- <div class="api">
-    <div class="api-entry">mono_profiler_install_appdomain</div>
-
-    <div class="prototype">Prototype: mono_profiler_install_appdomain</div>
-<p />
-
-</div> <a name="api:mono_profiler_install_assembly"></a>
- <div class="api">
-    <div class="api-entry">mono_profiler_install_assembly</div>
-
-    <div class="prototype">Prototype: mono_profiler_install_assembly</div>
-<p />
-
-</div> <a name="api:mono_profiler_install_class"></a>
- <div class="api">
-    <div class="api-entry">mono_profiler_install_class</div>
-
-    <div class="prototype">Prototype: mono_profiler_install_class</div>
-<p />
-
-</div> <a name="api:mono_profiler_install_coverage_filter"></a>
- <div class="api">
-    <div class="api-entry">mono_profiler_install_coverage_filter</div>
-
-    <div class="prototype">Prototype: mono_profiler_install_coverage_filter</div>
-<p />
-
-</div> <a name="api:mono_profiler_install_enter_leave"></a>
- <div class="api">
-    <div class="api-entry">mono_profiler_install_enter_leave</div>
-
-    <div class="prototype">void
-mono_profiler_install_enter_leave (MonoProfileMethodFunc enter, MonoProfileMethodFunc fleave)
-
-</div>
-<p />
-<b>Parameters</b>
-<blockquote><dt><i>enter:</i></dt><dd> the routine to be called on each method entry</dd><dt><i>fleave:</i></dt><dd> the routine to be called each time a method returns</dd></blockquote>
-<b>Remarks</b>
-<p />	 
-	 Use this routine to install routines that will be called everytime
-	 a method enters and leaves.   The routines will receive as an argument
-	 the MonoMethod representing the method that is entering or leaving.
-
-</div> <a name="api:mono_profiler_install_jit_compile"></a>
- <div class="api">
-    <div class="api-entry">mono_profiler_install_jit_compile</div>
-
-    <div class="prototype">void 
-mono_profiler_install_jit_compile (MonoProfileMethodFunc start, MonoProfileMethodResult end)
-
-</div>
-<p />
-<b>Parameters</b>
-<blockquote><dt><i>start:</i></dt><dd> the routine to be called when the JIT process starts.</dd><dt><i>end:</i></dt><dd> the routine to be called when the JIT process ends.</dd></blockquote>
-<b>Remarks</b>
-<p />	 
-	 Use this routine to install routines that will be called when JIT 
-	 compilation of a method starts and completes.
-
-</div> <a name="api:mono_profiler_install_module"></a>
- <div class="api">
-    <div class="api-entry">mono_profiler_install_module</div>
-
-    <div class="prototype">Prototype: mono_profiler_install_module</div>
-<p />
-
-</div> <a name="api:mono_profiler_install_thread"></a>
- <div class="api">
-    <div class="api-entry">mono_profiler_install_thread</div>
-
-    <div class="prototype">Prototype: mono_profiler_install_thread</div>
-<p />
-
-</div> <a name="api:mono_profiler_install_transition"></a>
- <div class="api">
-    <div class="api-entry">mono_profiler_install_transition</div>
-
-    <div class="prototype">Prototype: mono_profiler_install_transition</div>
-<p />
-
-</div> <a name="api:mono_profiler_install_gc"></a>
- <div class="api">
-    <div class="api-entry">mono_profiler_install_gc</div>
-
-    <div class="prototype">Prototype: mono_profiler_install_gc</div>
-<p />
-
-</div> <a name="api:mono_profiler_install_statistical"></a>
- <div class="api">
-    <div class="api-entry">mono_profiler_install_statistical</div>
-
-    <div class="prototype">Prototype: mono_profiler_install_statistical</div>
-<p />
-
-</div> <a name="api:mono_profiler_set_events"></a>
- <div class="api">
-    <div class="api-entry">mono_profiler_set_events</div>
-
-    <div class="prototype">void
-mono_profiler_set_events (MonoProfileFlags events)
-
-</div>
-<p />
-<b>Parameters</b>
-<blockquote><dt><i>events:</i></dt><dd> an ORed set of values made up of MONO_PROFILER_ flags</dd></blockquote>
-<b>Remarks</b>
-<p />	 
-	 The events descriped in the <i>events</i> argument is a set of flags
-	 that represent which profiling events must be triggered.  For
-	 example if you have registered a set of methods for tracking
-	 JIT compilation start and end with mono_profiler_install_jit_compile,
-	 you will want to pass the MONO_PROFILE_JIT_COMPILATION flag to
-	 this routine.
-	
-	 You can call mono_profile_set_events more than once and you can
-	 do this at runtime to modify which methods are invoked.
-
-</div> <a name="api:mono_profiler_get_events"></a>
- <div class="api">
-    <div class="api-entry">mono_profiler_get_events</div>
-
-    <div class="prototype">MonoProfileFlags
-mono_profiler_get_events (void)
-
-</div>
-<p />
-<b>Remarks</b>
-<p />	 
-	 Returns a list of active events that will be intercepted. 
-
-
-</div><h3>Coverage</h3>
-
-	<p />To support profiling modules that need to do code coverage
-	analysis, the following routines is provided:
-	
-</body>
-</html>
-</span>
\ No newline at end of file
diff --git a/docs/deploy/mono-api-reflection.html b/docs/deploy/mono-api-reflection.html
deleted file mode 100644
index e51b28d..0000000
--- a/docs/deploy/mono-api-reflection.html
+++ /dev/null
@@ -1,257 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?><span>
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-   <title>mono-api-reflection.html</title>
-   <style type="text/css">
-
-
-   h3 { 
-       font-size: 18px;
-       padding-bottom: 4pt;
-       border-bottom: 2px solid #dddddd;
-   }
-       
-   .api {
-     border: 1px solid;
-     padding: 10pt;
-     margin: 10pt;
-   } 
-
-   .api-entry { 
-       border-bottom: none;
-       font-size: 18px;
-   }
-
-   .prototype {
-     border: 1px solid;
-     background-color: #f2f2f2;
-     padding: 5pt;
-     margin-top: 5pt;
-     margin-bottom: 5pt;  
-   } 
-
-   .header {
-     border: 1px solid;
-     padding: 0 0 5pt 5pt;
-     margin: 10pt;
-     white-space: pre;
-       font-family: monospace;
-   }
-    
-   .code {
-     border: 1px solid;
-     padding: 0 0 5pt 5pt;
-     margin: 10pt;
-     white-space: pre;
-       font-family: monospace;
-   }
-   
-
-</style>
-</head>
-<body>
-<h2>Fetching Types, and Basic Reflection</h2>
-
- <a name="api:mono_reflection_get_custom_attrs_blob"></a>
- <div class="api">
-    <div class="api-entry">mono_reflection_get_custom_attrs_blob</div>
-
-    <div class="prototype">Prototype: mono_reflection_get_custom_attrs_blob</div>
-<p />
-
-</div> <a name="api:mono_reflection_get_custom_attrs"></a>
- <div class="api">
-    <div class="api-entry">mono_reflection_get_custom_attrs</div>
-
-    <div class="prototype">Prototype: mono_reflection_get_custom_attrs</div>
-<p />
-
-</div> <a name="api:mono_custom_attrs_get_attr"></a>
- <div class="api">
-    <div class="api-entry">mono_custom_attrs_get_attr</div>
-
-    <div class="prototype">Prototype: mono_custom_attrs_get_attr</div>
-<p />
-
-</div> <a name="api:mono_reflection_get_token"></a>
- <div class="api">
-    <div class="api-entry">mono_reflection_get_token</div>
-
-    <div class="prototype">Prototype: mono_reflection_get_token</div>
-<p />
-
-</div> <a name="api:mono_reflection_get_type"></a>
- <div class="api">
-    <div class="api-entry">mono_reflection_get_type</div>
-
-    <div class="prototype">Prototype: mono_reflection_get_type</div>
-<p />
-
-</div> <a name="api:mono_reflection_parse_type"></a>
- <div class="api">
-    <div class="api-entry">mono_reflection_parse_type</div>
-
-    <div class="prototype">Prototype: mono_reflection_parse_type</div>
-<p />
-
-</div> <a name="api:mono_reflection_type_from_name"></a>
- <div class="api">
-    <div class="api-entry">mono_reflection_type_from_name</div>
-
-    <div class="prototype">Prototype: mono_reflection_type_from_name</div>
-<p />
-
-</div> <a name="api:mono_reflection_get_custom_attrs_info"></a>
- <div class="api">
-    <div class="api-entry">mono_reflection_get_custom_attrs_info</div>
-
-    <div class="prototype">Prototype: mono_reflection_get_custom_attrs_info</div>
-<p />
-
-
-</div><h2>Custom Attributes</h2>
-
- <a name="api:mono_custom_attrs_construct"></a>
- <div class="api">
-    <div class="api-entry">mono_custom_attrs_construct</div>
-
-    <div class="prototype">Prototype: mono_custom_attrs_construct</div>
-<p />
-
-</div> <a name="api:mono_custom_attrs_free"></a>
- <div class="api">
-    <div class="api-entry">mono_custom_attrs_free</div>
-
-    <div class="prototype">Prototype: mono_custom_attrs_free</div>
-<p />
-
-</div> <a name="api:mono_custom_attrs_from_assembly"></a>
- <div class="api">
-    <div class="api-entry">mono_custom_attrs_from_assembly</div>
-
-    <div class="prototype">Prototype: mono_custom_attrs_from_assembly</div>
-<p />
-
-</div> <a name="api:mono_custom_attrs_from_class"></a>
- <div class="api">
-    <div class="api-entry">mono_custom_attrs_from_class</div>
-
-    <div class="prototype">Prototype: mono_custom_attrs_from_class</div>
-<p />
-
-</div> <a name="api:mono_custom_attrs_from_event"></a>
- <div class="api">
-    <div class="api-entry">mono_custom_attrs_from_event</div>
-
-    <div class="prototype">Prototype: mono_custom_attrs_from_event</div>
-<p />
-
-</div> <a name="api:mono_custom_attrs_from_field"></a>
- <div class="api">
-    <div class="api-entry">mono_custom_attrs_from_field</div>
-
-    <div class="prototype">Prototype: mono_custom_attrs_from_field</div>
-<p />
-
-</div> <a name="api:mono_custom_attrs_from_index"></a>
- <div class="api">
-    <div class="api-entry">mono_custom_attrs_from_index</div>
-
-    <div class="prototype">MonoCustomAttrInfo*
-mono_custom_attrs_from_index (MonoImage *image, guint32 idx)
-
-</div>
-<p />
-<b>Returns</b>
-<blockquote>	  NULL if no attributes are found or if a loading error occurs.
-</blockquote>
-
-</div> <a name="api:mono_custom_attrs_from_method"></a>
- <div class="api">
-    <div class="api-entry">mono_custom_attrs_from_method</div>
-
-    <div class="prototype">Prototype: mono_custom_attrs_from_method</div>
-<p />
-
-</div> <a name="api:mono_custom_attrs_from_param"></a>
- <div class="api">
-    <div class="api-entry">mono_custom_attrs_from_param</div>
-
-    <div class="prototype">Prototype: mono_custom_attrs_from_param</div>
-<p />
-
-</div> <a name="api:mono_custom_attrs_from_property"></a>
- <div class="api">
-    <div class="api-entry">mono_custom_attrs_from_property</div>
-
-    <div class="prototype">Prototype: mono_custom_attrs_from_property</div>
-<p />
-
-</div> <a name="api:mono_custom_attrs_has_attr"></a>
- <div class="api">
-    <div class="api-entry">mono_custom_attrs_has_attr</div>
-
-    <div class="prototype">Prototype: mono_custom_attrs_has_attr</div>
-<p />
-
-
-</div><h2>
- <a name="api:mono_module_file_get_object"></a>
- <div class="api">
-    <div class="api-entry">mono_module_file_get_object</div>
-
-    <div class="prototype">Prototype: mono_module_file_get_object</div>
-<p />
-
-</div> <a name="api:mono_module_get_object"></a>
- <div class="api">
-    <div class="api-entry">mono_module_get_object</div>
-
-    <div class="prototype">Prototype: mono_module_get_object</div>
-<p />
-
-</div> <a name="api:mono_method_body_get_object"></a>
- <div class="api">
-    <div class="api-entry">mono_method_body_get_object</div>
-
-    <div class="prototype">Prototype: mono_method_body_get_object</div>
-<p />
-
-</div> <a name="api:mono_event_get_object"></a>
- <div class="api">
-    <div class="api-entry">mono_event_get_object</div>
-
-    <div class="prototype">Prototype: mono_event_get_object</div>
-<p />
-
-</div> <a name="api:mono_assembly_get_object"></a>
- <div class="api">
-    <div class="api-entry">mono_assembly_get_object</div>
-
-    <div class="prototype">Prototype: mono_assembly_get_object</div>
-<p />
-
-</div> <a name="api:mono_param_get_objects"></a>
- <div class="api">
-    <div class="api-entry">mono_param_get_objects</div>
-
-    <div class="prototype">Prototype: mono_param_get_objects</div>
-<p />
-
-</div> <a name="api:mono_field_get_object"></a>
- <div class="api">
-    <div class="api-entry">mono_field_get_object</div>
-
-    <div class="prototype">Prototype: mono_field_get_object</div>
-<p />
-
-</div> <a name="api:mono_property_get_object"></a>
- <div class="api">
-    <div class="api-entry">mono_property_get_object</div>
-
-    <div class="prototype">Prototype: mono_property_get_object</div>
-<p />
-
-</div></h2></body>
-</html>
-</span>
\ No newline at end of file
diff --git a/docs/deploy/mono-api-security.html b/docs/deploy/mono-api-security.html
deleted file mode 100644
index 9643964..0000000
--- a/docs/deploy/mono-api-security.html
+++ /dev/null
@@ -1,130 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?><span>
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-   <title>mono-api-security.html</title>
-   <style type="text/css">
-
-
-   h3 { 
-       font-size: 18px;
-       padding-bottom: 4pt;
-       border-bottom: 2px solid #dddddd;
-   }
-       
-   .api {
-     border: 1px solid;
-     padding: 10pt;
-     margin: 10pt;
-   } 
-
-   .api-entry { 
-       border-bottom: none;
-       font-size: 18px;
-   }
-
-   .prototype {
-     border: 1px solid;
-     background-color: #f2f2f2;
-     padding: 5pt;
-     margin-top: 5pt;
-     margin-bottom: 5pt;  
-   } 
-
-   .header {
-     border: 1px solid;
-     padding: 0 0 5pt 5pt;
-     margin: 10pt;
-     white-space: pre;
-       font-family: monospace;
-   }
-    
-   .code {
-     border: 1px solid;
-     padding: 0 0 5pt 5pt;
-     margin: 10pt;
-     white-space: pre;
-       font-family: monospace;
-   }
-   
-
-</style>
-</head>
-<body>
-<h3>Security Manager</h3>
-
- <a name="api:mono_get_context_capture_method"></a>
- <div class="api">
-    <div class="api-entry">mono_get_context_capture_method</div>
-
-    <div class="prototype">Prototype: mono_get_context_capture_method</div>
-<p />
-
-
-</div><h3>Declarative Security</h3>
-
- <a name="api:mono_declsec_flags_from_assembly"></a>
- <div class="api">
-    <div class="api-entry">mono_declsec_flags_from_assembly</div>
-
-    <div class="prototype">Prototype: mono_declsec_flags_from_assembly</div>
-<p />
-
-</div> <a name="api:mono_declsec_flags_from_class"></a>
- <div class="api">
-    <div class="api-entry">mono_declsec_flags_from_class</div>
-
-    <div class="prototype">Prototype: mono_declsec_flags_from_class</div>
-<p />
-
-</div> <a name="api:mono_declsec_flags_from_method"></a>
- <div class="api">
-    <div class="api-entry">mono_declsec_flags_from_method</div>
-
-    <div class="prototype">Prototype: mono_declsec_flags_from_method</div>
-<p />
-
-</div> <a name="api:mono_declsec_get_assembly_action"></a>
- <div class="api">
-    <div class="api-entry">mono_declsec_get_assembly_action</div>
-
-    <div class="prototype">Prototype: mono_declsec_get_assembly_action</div>
-<p />
-
-</div> <a name="api:mono_declsec_get_class_action"></a>
- <div class="api">
-    <div class="api-entry">mono_declsec_get_class_action</div>
-
-    <div class="prototype">Prototype: mono_declsec_get_class_action</div>
-<p />
-
-</div> <a name="api:mono_declsec_get_demands"></a>
- <div class="api">
-    <div class="api-entry">mono_declsec_get_demands</div>
-
-    <div class="prototype">Prototype: mono_declsec_get_demands</div>
-<p />
-
-</div> <a name="api:mono_declsec_get_inheritdemands_class"></a>
- <div class="api">
-    <div class="api-entry">mono_declsec_get_inheritdemands_class</div>
-
-    <div class="prototype">Prototype: mono_declsec_get_inheritdemands_class</div>
-<p />
-
-</div> <a name="api:mono_declsec_get_inheritdemands_method"></a>
- <div class="api">
-    <div class="api-entry">mono_declsec_get_inheritdemands_method</div>
-
-    <div class="prototype">Prototype: mono_declsec_get_inheritdemands_method</div>
-<p />
-
-</div> <a name="api:mono_declsec_get_linkdemands"></a>
- <div class="api">
-    <div class="api-entry">mono_declsec_get_linkdemands</div>
-
-    <div class="prototype">Prototype: mono_declsec_get_linkdemands</div>
-<p />
-
-</div></body>
-</html>
-</span>
\ No newline at end of file
diff --git a/docs/deploy/mono-api-string.html b/docs/deploy/mono-api-string.html
deleted file mode 100644
index 54b012b..0000000
--- a/docs/deploy/mono-api-string.html
+++ /dev/null
@@ -1,405 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?><span>
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-   <title>mono-api-string.html</title>
-   <style type="text/css">
-
-
-   h3 { 
-       font-size: 18px;
-       padding-bottom: 4pt;
-       border-bottom: 2px solid #dddddd;
-   }
-       
-   .api {
-     border: 1px solid;
-     padding: 10pt;
-     margin: 10pt;
-   } 
-
-   .api-entry { 
-       border-bottom: none;
-       font-size: 18px;
-   }
-
-   .prototype {
-     border: 1px solid;
-     background-color: #f2f2f2;
-     padding: 5pt;
-     margin-top: 5pt;
-     margin-bottom: 5pt;  
-   } 
-
-   .header {
-     border: 1px solid;
-     padding: 0 0 5pt 5pt;
-     margin: 10pt;
-     white-space: pre;
-       font-family: monospace;
-   }
-    
-   .code {
-     border: 1px solid;
-     padding: 0 0 5pt 5pt;
-     margin: 10pt;
-     white-space: pre;
-       font-family: monospace;
-   }
-   
-
-</style>
-</head>
-<body>
-<h2>Strings</h2>
-
-	<p />Strings representation inside the Mono runtime.
-
-<h3>Synopsis</h3>
-
-	<div class="header">
-#include <metadata/object.h>
-
-typedef struct {
-	MonoObject object;
-	gint32 length;
-	gunichar2 chars [0];
-} MonoString;
-
-MonoString*    <a href="#api:mono_string_new">mono_string_new</a>            (MonoDomain *domain, 
-                                           const char *text);
-MonoString*    <a href="#api:mono_string_new_len">mono_string_new_len</a>        (MonoDomain *domain, 
-                                           const char *text, 
-                                           guint length);
-MonoString*    <a href="#api:mono_string_new_size">mono_string_new_size</a>       (MonoDomain *domain, 
-                                           gint32 len);
-MonoString*    <a href="#api:mono_string_new_utf16">mono_string_new_utf16</a>      (MonoDomain *domain, 
-                                           const guint16 *text, 
-                                           gint32 len);
-MonoString*    <a href="#api:mono_string_from_utf16">mono_string_from_utf16</a>     (gunichar2 *data);
-mono_unichar2* <a href="#api:mono_string_to_utf16">mono_string_to_utf16</a>       (MonoString *s);
-char*          <a href="#api:mono_string_to_utf8">mono_string_to_utf8</a>        (MonoString *s);
-gboolean       <a href="#api:mono_string_equal">mono_string_equal</a>          (MonoString *s1, 
-                                           MonoString *s2);
-guint          <a href="#api:mono_string_hash">mono_string_hash</a>           (MonoString *s);
-MonoString*    <a href="#api:mono_string_intern">mono_string_intern</a>         (MonoString *str);
-MonoString*    <a href="#api:mono_string_is_interned">mono_string_is_interned</a>    (MonoString *o);
-MonoString*    <a href="#api:mono_string_new_wrapper">mono_string_new_wrapper</a>    (const char *text);
-gunichar2*     <a href="#api:mono_string_chars">mono_string_chars</a>          (MonoString *s);
-int            <a href="#api:mono_string_length">mono_string_length</a>         (MonoString *s);
-gunichar2*     <a href="#api:mono_unicode_from_external">mono_unicode_from_external</a> (const gchar *in, 
-                                           gsize *bytes);
-               <a href="#api:mono_unicode_to_external"></a>                           
-               <a href="#api:mono_utf8_from_external"></a>                           
-
-	</div>
-
-	<p />All of the operations on strings are done on pointers to
-	MonoString objects, like this:
-
-	<div class="code">
-	MonoString *hello = mono_string_new (mono_domain_get (), "hello, world");
-	</div>
-
-	<p />Strings are bound to a particular application domain, which
-	is why it is necessary to pass a MonoDomain argument as the
-	first parameter to all the constructor functions. 
-
-	<p />Typically, you want to create the strings on the current
-	application domain, so a call to <tt>mono_domain_get()</tt> is
-	sufficient.
-	
-<h3>Constructors</h3>
-	
- <a name="api:mono_string_new"></a>
- <div class="api">
-    <div class="api-entry">mono_string_new</div>
-
-    <div class="prototype">MonoString*
-mono_string_new (MonoDomain *domain, const char *text)
-
-</div>
-<p />
-<b>Parameters</b>
-<blockquote><dt><i>text:</i></dt><dd> a pointer to an utf8 string</dd></blockquote>
-<b>Returns</b>
-<blockquote>	  A newly created string object which contains <i>text</i>.
-</blockquote>
-
-</div> <a name="api:mono_string_new_len"></a>
- <div class="api">
-    <div class="api-entry">mono_string_new_len</div>
-
-    <div class="prototype">MonoString*
-mono_string_new_len (MonoDomain *domain, const char *text, guint length)
-
-</div>
-<p />
-<b>Parameters</b>
-<blockquote><dt><i>text:</i></dt><dd> a pointer to an utf8 string</dd><dt><i>length:</i></dt><dd> number of bytes in <i>text</i> to consider</dd></blockquote>
-<b>Returns</b>
-<blockquote>	  A newly created string object which contains <i>text</i>.
-</blockquote>
-
-</div> <a name="api:mono_string_new_size"></a>
- <div class="api">
-    <div class="api-entry">mono_string_new_size</div>
-
-    <div class="prototype">MonoString*
-mono_string_new_size (MonoDomain *domain, gint32 len)
-
-</div>
-<p />
-<b>Parameters</b>
-<blockquote><dt><i>text:</i></dt><dd> a pointer to an utf16 string</dd><dt><i>len:</i></dt><dd> the length of the string</dd></blockquote>
-<b>Returns</b>
-<blockquote>	  A newly created string object of <i>len</i>
-</blockquote>
-
-</div> <a name="api:mono_string_new_utf16"></a>
- <div class="api">
-    <div class="api-entry">mono_string_new_utf16</div>
-
-    <div class="prototype">MonoString*
-mono_string_new_utf16 (MonoDomain *domain, const guint16 *text, gint32 len)
-
-</div>
-<p />
-<b>Parameters</b>
-<blockquote><dt><i>text:</i></dt><dd> a pointer to an utf16 string</dd><dt><i>len:</i></dt><dd> the length of the string</dd></blockquote>
-<b>Returns</b>
-<blockquote>	  A newly created string object which contains <i>text</i>.
-</blockquote>
-
-</div> <a name="api:mono_string_from_utf16"></a>
- <div class="api">
-    <div class="api-entry">mono_string_from_utf16</div>
-
-    <div class="prototype">MonoString*
-mono_string_from_utf16 (gunichar2 *data)
-
-</div>
-<p />
-<b>Parameters</b>
-<blockquote><dt><i>data:</i></dt><dd> the UTF16 string (LPWSTR) to convert</dd></blockquote>
-<b>Returns</b>
-<blockquote>	  a MonoString.
-</blockquote>
-<b>Remarks</b>
-<p />	 
-	 Converts a NULL terminated UTF16 string (LPWSTR) to a MonoString.
-	
-
-
-</div><h3>Conversions</h3>
-
- <a name="api:mono_string_to_utf16"></a>
- <div class="api">
-    <div class="api-entry">mono_string_to_utf16</div>
-
-    <div class="prototype">mono_unichar2*
-mono_string_to_utf16 (MonoString *s)
-
-</div>
-<p />
-<b>Parameters</b>
-<blockquote><dt><i>s:</i></dt><dd> a MonoString</dd></blockquote>
-<b>Remarks</b>
-<p />	 
-	 Return an null-terminated array of the utf-16 chars
-	 contained in <i>s</i>. The result must be freed with g_free().
-	 This is a temporary helper until our string implementation
-	 is reworked to always include the null terminating char.
-
-</div> <a name="api:mono_string_to_utf8"></a>
- <div class="api">
-    <div class="api-entry">mono_string_to_utf8</div>
-
-    <div class="prototype">char*
-mono_string_to_utf8 (MonoString *s)
-
-</div>
-<p />
-<b>Parameters</b>
-<blockquote><dt><i>s:</i></dt><dd> a System.String</dd></blockquote>
-<b>Remarks</b>
-<p />	 
-	 Returns the UTF8 representation for <i>s</i>.
-	 The resulting buffer needs to be freed with mono_free().
-	
-	 <i>deprecated</i> Use mono_string_to_utf8_checked to avoid having an exception arbritraly raised.
-
-
-</div><h3>Methods</h3>
-
- <a name="api:mono_string_equal"></a>
- <div class="api">
-    <div class="api-entry">mono_string_equal</div>
-
-    <div class="prototype">gboolean
-mono_string_equal (MonoString *s1, MonoString *s2)
-
-</div>
-<p />
-<b>Parameters</b>
-<blockquote><dt><i>s1:</i></dt><dd> First string to compare</dd><dt><i>s2:</i></dt><dd> Second string to compare</dd></blockquote>
-<b>Remarks</b>
-<p />	 
-	 Returns FALSE if the strings differ.
-
-</div> <a name="api:mono_string_hash"></a>
- <div class="api">
-    <div class="api-entry">mono_string_hash</div>
-
-    <div class="prototype">guint
-mono_string_hash (MonoString *s)
-
-</div>
-<p />
-<b>Parameters</b>
-<blockquote><dt><i>s:</i></dt><dd> the string to hash</dd></blockquote>
-<b>Remarks</b>
-<p />	 
-	 Returns the hash for the string.
-
-</div> <a name="api:mono_string_intern"></a>
- <div class="api">
-    <div class="api-entry">mono_string_intern</div>
-
-    <div class="prototype">MonoString*
-mono_string_intern (MonoString *str)
-
-</div>
-<p />
-<b>Parameters</b>
-<blockquote><dt><i>o:</i></dt><dd> String to intern</dd></blockquote>
-<b>Returns</b>
-<blockquote>	  The interned string.
-</blockquote>
-<b>Remarks</b>
-<p />	 
-	 Interns the string passed.  
-
-</div> <a name="api:mono_string_is_interned"></a>
- <div class="api">
-    <div class="api-entry">mono_string_is_interned</div>
-
-    <div class="prototype">MonoString*
-mono_string_is_interned (MonoString *o)
-
-</div>
-<p />
-<b>Parameters</b>
-<blockquote><dt><i>o:</i></dt><dd> String to probe</dd></blockquote>
-<b>Remarks</b>
-<p />	 
-	 Returns whether the string has been interned.
-
-</div> <a name="api:mono_string_new_wrapper"></a>
- <div class="api">
-    <div class="api-entry">mono_string_new_wrapper</div>
-
-    <div class="prototype">MonoString*
-mono_string_new_wrapper (const char *text)
-
-</div>
-<p />
-<b>Parameters</b>
-<blockquote><dt><i>text:</i></dt><dd> pointer to utf8 characters.</dd></blockquote>
-<b>Remarks</b>
-<p />	 
-	 Helper function to create a string object from <i>text</i> in the current domain.
-
-</div> <a name="api:mono_string_chars"></a>
- <div class="api">
-    <div class="api-entry">mono_string_chars</div>
-
-    <div class="prototype">gunichar2*
-mono_string_chars (MonoString *s)
-
-</div>
-<p />
-<b>Parameters</b>
-<blockquote><dt><i>s:</i></dt><dd> a MonoString</dd></blockquote>
-<b>Remarks</b>
-<p />	 
-	 Returns a pointer to the UCS16 characters stored in the MonoString
-
-</div> <a name="api:mono_string_length"></a>
- <div class="api">
-    <div class="api-entry">mono_string_length</div>
-
-    <div class="prototype">int
-mono_string_length (MonoString *s)
-
-</div>
-<p />
-<b>Parameters</b>
-<blockquote><dt><i>s:</i></dt><dd> MonoString</dd></blockquote>
-<b>Remarks</b>
-<p />	 
-	 Returns the lenght in characters of the string
-
-
-
-</div><h3>Other Encodings</h3>
-
-	<p />These routines are used when coping with strings that come
-	from Mono's environment, and might be encoded in one or more
-	of the external encodings.
-
-	<p />For example, some file systems might historically contain a
-	mix of file names with both old and new encodings, typically
-	UTF8 for new files, and the old files would be encoded in an 8
-	bit character set (ISO-8859-1 for example).
-	
-	<p />These routines try a number of encodings, those specified
-	in the <tt>MONO_ENCODINGS</tt> environment variable and return
-	unicode strings that can be used internally.
-
-	<p />See the mono(1) man page for more details.
-	
- <a name="api:mono_unicode_from_external"></a>
- <div class="api">
-    <div class="api-entry">mono_unicode_from_external</div>
-
-    <div class="prototype">gunichar2*
-mono_unicode_from_external (const gchar *in, gsize *bytes)
-
-</div>
-<p />
-<b>Parameters</b>
-<blockquote><dt><i>in:</i></dt><dd> pointers to the buffer.</dd><dt><i>bytes:</i></dt><dd> number of bytes in the string.</dd></blockquote>
-<b>Remarks</b>
-<p />	 
-	 Tries to turn a NULL-terminated string into UTF16.
-	
-	 First, see if it's valid UTF8, in which case just turn it directly
-	 into UTF16.  Next, run through the colon-separated encodings in
-	 MONO_EXTERNAL_ENCODINGS and do an iconv conversion on each,
-	 returning the first successful conversion to UTF16.  If no
-	 conversion succeeds, return NULL.
-	
-	 Callers must free the returned string if not NULL. bytes holds the number
-	 of bytes in the returned string, not including the terminator.
-
-</div> <a name="api:mono_unicode_to_external"></a>
- <div class="api">
-    <div class="api-entry">mono_unicode_to_external</div>
-
-    <div class="prototype">gchar*mono_unicode_to_external (const gunichar2 *uni)
-
-</div>
-<p />
-<b>Parameters</b>
-<blockquote><dt><i>uni:</i></dt><dd> an UTF16 string to conver to an external representation.</dd></blockquote>
-<b>Remarks</b>
-<p />	 
-	 Turns NULL-terminated UTF16 into either UTF8, or the first
-	 working item in MONO_EXTERNAL_ENCODINGS if set.  If no conversions
-	 work, then UTF8 is returned.
-	
-	 Callers must free the returned string.
-
-</div></body>
-</html>
-</span>
\ No newline at end of file
diff --git a/docs/deploy/mono-api-threads.html b/docs/deploy/mono-api-threads.html
deleted file mode 100644
index 96fa796..0000000
--- a/docs/deploy/mono-api-threads.html
+++ /dev/null
@@ -1,185 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?><span>
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-   <title>mono-api-threads.html</title>
-   <style type="text/css">
-
-
-   h3 { 
-       font-size: 18px;
-       padding-bottom: 4pt;
-       border-bottom: 2px solid #dddddd;
-   }
-       
-   .api {
-     border: 1px solid;
-     padding: 10pt;
-     margin: 10pt;
-   } 
-
-   .api-entry { 
-       border-bottom: none;
-       font-size: 18px;
-   }
-
-   .prototype {
-     border: 1px solid;
-     background-color: #f2f2f2;
-     padding: 5pt;
-     margin-top: 5pt;
-     margin-bottom: 5pt;  
-   } 
-
-   .header {
-     border: 1px solid;
-     padding: 0 0 5pt 5pt;
-     margin: 10pt;
-     white-space: pre;
-       font-family: monospace;
-   }
-    
-   .code {
-     border: 1px solid;
-     padding: 0 0 5pt 5pt;
-     margin: 10pt;
-     white-space: pre;
-       font-family: monospace;
-   }
-   
-
-</style>
-</head>
-<body>
-<h2>Working with threads</h2>
-
-<h3>Thread API</h3>
- <a name="api:mono_thread_attach"></a>
- <div class="api">
-    <div class="api-entry">mono_thread_attach</div>
-
-    <div class="prototype">Prototype: mono_thread_attach</div>
-<p />
-
-</div> <a name="api:mono_thread_create"></a>
- <div class="api">
-    <div class="api-entry">mono_thread_create</div>
-
-    <div class="prototype">Prototype: mono_thread_create</div>
-<p />
-
-</div> <a name="api:mono_thread_current"></a>
- <div class="api">
-    <div class="api-entry">mono_thread_current</div>
-
-    <div class="prototype">Prototype: mono_thread_current</div>
-<p />
-
-</div> <a name="api:mono_thread_detach"></a>
- <div class="api">
-    <div class="api-entry">mono_thread_detach</div>
-
-    <div class="prototype">Prototype: mono_thread_detach</div>
-<p />
-
-</div> <a name="api:mono_thread_exit"></a>
- <div class="api">
-    <div class="api-entry">mono_thread_exit</div>
-
-    <div class="prototype">Prototype: mono_thread_exit</div>
-<p />
-
-</div> <a name="api:mono_thread_manage"></a>
- <div class="api">
-    <div class="api-entry">mono_thread_manage</div>
-
-    <div class="prototype">Prototype: mono_thread_manage</div>
-<p />
-
-</div> <a name="api:mono_thread_new_init"></a>
- <div class="api">
-    <div class="api-entry">mono_thread_new_init</div>
-
-    <div class="prototype">Prototype: mono_thread_new_init</div>
-<p />
-
-</div> <a name="api:mono_threads_get_default_stacksize"></a>
- <div class="api">
-    <div class="api-entry">mono_threads_get_default_stacksize</div>
-
-    <div class="prototype">Prototype: mono_threads_get_default_stacksize</div>
-<p />
-
-</div> <a name="api:mono_threads_install_cleanup"></a>
- <div class="api">
-    <div class="api-entry">mono_threads_install_cleanup</div>
-
-    <div class="prototype">Prototype: mono_threads_install_cleanup</div>
-<p />
-
-</div> <a name="api:mono_threads_set_default_stacksize"></a>
- <div class="api">
-    <div class="api-entry">mono_threads_set_default_stacksize</div>
-
-    <div class="prototype">Prototype: mono_threads_set_default_stacksize</div>
-<p />
-
-</div> <a name="api:mono_thread_stop"></a>
- <div class="api">
-    <div class="api-entry">mono_thread_stop</div>
-
-    <div class="prototype">Prototype: mono_thread_stop</div>
-<p />
-
-
-</div> <a name="api:mono_thread_get_main"></a>
- <div class="api">
-    <div class="api-entry">mono_thread_get_main</div>
-
-    <div class="prototype">Prototype: mono_thread_get_main</div>
-<p />
-
-</div> <a name="api:mono_thread_set_main"></a>
- <div class="api">
-    <div class="api-entry">mono_thread_set_main</div>
-
-    <div class="prototype">void
-mono_thread_set_main (MonoThread *thread)
-
-</div>
-<p />
-<b>Parameters</b>
-<blockquote><dt><i>thread:</i></dt><dd> thread to set as the main thread</dd></blockquote>
-<b>Remarks</b>
-<p />	 
-	 This function can be used to instruct the runtime to treat <i>thread</i>
-	 as the main thread, ie, the thread that would normally execute the Main()
-	 method. This basically means that at the end of <i>thread</i>, the runtime will
-	 wait for the existing foreground threads to quit and other such details.
-
-</div> <a name="api:mono_pthread_key_for_tls"></a>
- <div class="api">
-    <div class="api-entry">mono_pthread_key_for_tls</div>
-
-    <div class="prototype">Prototype: mono_pthread_key_for_tls</div>
-<p />
-
-
-</div><h3>Monitors</h3>
-
- <a name="api:mono_monitor_enter"></a>
- <div class="api">
-    <div class="api-entry">mono_monitor_enter</div>
-
-    <div class="prototype">Prototype: mono_monitor_enter</div>
-<p />
-
-</div> <a name="api:mono_monitor_exit"></a>
- <div class="api">
-    <div class="api-entry">mono_monitor_exit</div>
-
-    <div class="prototype">Prototype: mono_monitor_exit</div>
-<p />
-
-</div></body>
-</html>
-</span>
\ No newline at end of file
diff --git a/docs/deploy/mono-api-type.html b/docs/deploy/mono-api-type.html
deleted file mode 100644
index 4364e7d..0000000
--- a/docs/deploy/mono-api-type.html
+++ /dev/null
@@ -1,274 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?><span>
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-   <title>mono-api-type.html</title>
-   <style type="text/css">
-
-
-   h3 { 
-       font-size: 18px;
-       padding-bottom: 4pt;
-       border-bottom: 2px solid #dddddd;
-   }
-       
-   .api {
-     border: 1px solid;
-     padding: 10pt;
-     margin: 10pt;
-   } 
-
-   .api-entry { 
-       border-bottom: none;
-       font-size: 18px;
-   }
-
-   .prototype {
-     border: 1px solid;
-     background-color: #f2f2f2;
-     padding: 5pt;
-     margin-top: 5pt;
-     margin-bottom: 5pt;  
-   } 
-
-   .header {
-     border: 1px solid;
-     padding: 0 0 5pt 5pt;
-     margin: 10pt;
-     white-space: pre;
-       font-family: monospace;
-   }
-    
-   .code {
-     border: 1px solid;
-     padding: 0 0 5pt 5pt;
-     margin: 10pt;
-     white-space: pre;
-       font-family: monospace;
-   }
-   
-
-</style>
-</head>
-<body>
-<h2>Type support</h2>
-
-<h3>Synopsis</h3>
-
-	<div class="header">
-#include <metadata/metadata.h>
-#include <metadata/class.h>
-
-typedef struct _MonoType MonoType;
-                     <a href="#api:mono_type_get_object"></a>                         
-                     <a href="#api:mono_type_create_from_typespec"></a>                         
-                     <a href="#api:mono_type_full_name"></a>                         
-MonoArrayType*       <a href="#api:mono_type_get_array_type">mono_type_get_array_type</a> (MonoType *type);
-MonoClass*           <a href="#api:mono_type_get_class">mono_type_get_class</a>      (MonoType *type);
-                     <a href="#api:mono_type_get_desc"></a>                         
-                     <a href="#api:mono_type_get_modifiers"></a>                         
-char*                <a href="#api:mono_type_get_name">mono_type_get_name</a>       (MonoType *type);
-MonoMethodSignature* <a href="#api:mono_type_get_signature">mono_type_get_signature</a>  (MonoType *type);
-int                  <a href="#api:mono_type_get_type">mono_type_get_type</a>       (MonoType *type);
-                     <a href="#api:mono_type_get_underlying_type"></a>                         
-gboolean             <a href="#api:mono_type_is_byref">mono_type_is_byref</a>       (MonoType *type);
-                     <a href="#api:mono_type_size"></a>                         
-                     <a href="#api:mono_type_stack_size"></a>                         
-guint32              <a href="#api:mono_type_to_unmanaged">mono_type_to_unmanaged</a>   (MonoType *type, 
-                                               MonoMarshalSpec *mspec, 
-                                               gboolean as_field;
-                     <a href="#api:mono_type_generic_inst_is_valuetype"></a>                         
-
-	
-	</div>
-
-	<p />The MonoType represents the unmanaged version of
-	System.Type.
-	
- <a name="api:mono_type_get_object"></a>
- <div class="api">
-    <div class="api-entry">mono_type_get_object</div>
-
-    <div class="prototype">Prototype: mono_type_get_object</div>
-<p />
-
-</div> <a name="api:mono_type_create_from_typespec"></a>
- <div class="api">
-    <div class="api-entry">mono_type_create_from_typespec</div>
-
-    <div class="prototype">Prototype: mono_type_create_from_typespec</div>
-<p />
-
-</div> <a name="api:mono_type_full_name"></a>
- <div class="api">
-    <div class="api-entry">mono_type_full_name</div>
-
-    <div class="prototype">Prototype: mono_type_full_name</div>
-<p />
-
-</div> <a name="api:mono_type_get_array_type"></a>
- <div class="api">
-    <div class="api-entry">mono_type_get_array_type</div>
-
-    <div class="prototype">MonoArrayType*
-mono_type_get_array_type (MonoType *type)
-
-</div>
-<p />
-<b>Parameters</b>
-<blockquote><dt><i>type:</i></dt><dd> the MonoType operated on</dd></blockquote>
-<b>Returns</b>
-<blockquote>	  a MonoArrayType struct describing the array type that <i>type</i>
-
-	 represents. The info includes details such as rank, array element type
-	 and the sizes and bounds of multidimensional arrays.</blockquote>
-<b>Remarks</b>
-<p />	 
-	 It is only valid to call this function if <i>type</i> is a MONO_TYPE_ARRAY.
-	
-
-</div> <a name="api:mono_type_get_class"></a>
- <div class="api">
-    <div class="api-entry">mono_type_get_class</div>
-
-    <div class="prototype">MonoClass*
-mono_type_get_class (MonoType *type)
-
-</div>
-<p />
-<b>Parameters</b>
-<blockquote><dt><i>type:</i></dt><dd> the MonoType operated on</dd></blockquote>
-<b>Returns</b>
-<blockquote>	  the MonoClass pointer that describes the class that <i>type</i> represents.
-</blockquote>
-<b>Remarks</b>
-<p />	 
-	 It is only valid to call this function if <i>type</i> is a MONO_TYPE_CLASS or a
-	 MONO_TYPE_VALUETYPE. For more general functionality, use mono_class_from_mono_type (),
-	 instead
-	
-
-</div> <a name="api:mono_type_get_desc"></a>
- <div class="api">
-    <div class="api-entry">mono_type_get_desc</div>
-
-    <div class="prototype">Prototype: mono_type_get_desc</div>
-<p />
-
-</div> <a name="api:mono_type_get_modifiers"></a>
- <div class="api">
-    <div class="api-entry">mono_type_get_modifiers</div>
-
-    <div class="prototype">Prototype: mono_type_get_modifiers</div>
-<p />
-
-</div> <a name="api:mono_type_get_name"></a>
- <div class="api">
-    <div class="api-entry">mono_type_get_name</div>
-
-    <div class="prototype">char*
-mono_type_get_name (MonoType *type)
-
-</div>
-<p />
-<b>Parameters</b>
-<blockquote><dt><i>type:</i></dt><dd> a type</dd></blockquote>
-<b>Returns</b>
-<blockquote>	  the string representation for type as it would be represented in IL code.
-</blockquote>
-
-</div> <a name="api:mono_type_get_signature"></a>
- <div class="api">
-    <div class="api-entry">mono_type_get_signature</div>
-
-    <div class="prototype">MonoMethodSignature*
-mono_type_get_signature (MonoType *type)
-
-</div>
-<p />
-<b>Parameters</b>
-<blockquote><dt><i>type:</i></dt><dd> the MonoType operated on</dd></blockquote>
-<b>Returns</b>
-<blockquote>	  the MonoMethodSignature pointer that describes the signature
-
-	 of the function pointer <i>type</i> represents.</blockquote>
-<b>Remarks</b>
-<p />	 
-	 It is only valid to call this function if <i>type</i> is a MONO_TYPE_FNPTR.
-	
-
-</div> <a name="api:mono_type_get_type"></a>
- <div class="api">
-    <div class="api-entry">mono_type_get_type</div>
-
-    <div class="prototype">int
-mono_type_get_type (MonoType *type)
-
-</div>
-<p />
-<b>Parameters</b>
-<blockquote><dt><i>type:</i></dt><dd> the MonoType operated on</dd></blockquote>
-<b>Returns</b>
-<blockquote>	  the IL type value for <i>type</i>. This is one of the MonoTypeEnum
-
-	 enum members like MONO_TYPE_I4 or MONO_TYPE_STRING.</blockquote>
-
-</div> <a name="api:mono_type_get_underlying_type"></a>
- <div class="api">
-    <div class="api-entry">mono_type_get_underlying_type</div>
-
-    <div class="prototype">Prototype: mono_type_get_underlying_type</div>
-<p />
-
-</div> <a name="api:mono_type_is_byref"></a>
- <div class="api">
-    <div class="api-entry">mono_type_is_byref</div>
-
-    <div class="prototype">gboolean
-mono_type_is_byref (MonoType *type)
-
-</div>
-<p />
-<b>Parameters</b>
-<blockquote><dt><i>type:</i></dt><dd> the MonoType operated on</dd></blockquote>
-<b>Returns</b>
-<blockquote>	  <i>TRUE</i> if <i>type</i> represents a type passed by reference,
-
-	 <i>FALSE</i> otherwise.</blockquote>
-
-</div> <a name="api:mono_type_size"></a>
- <div class="api">
-    <div class="api-entry">mono_type_size</div>
-
-    <div class="prototype">Prototype: mono_type_size</div>
-<p />
-
-</div> <a name="api:mono_type_stack_size"></a>
- <div class="api">
-    <div class="api-entry">mono_type_stack_size</div>
-
-    <div class="prototype">Prototype: mono_type_stack_size</div>
-<p />
-
-</div> <a name="api:mono_type_to_unmanaged"></a>
- <div class="api">
-    <div class="api-entry">mono_type_to_unmanaged</div>
-
-    <div class="prototype">guint32
-mono_type_to_unmanaged (MonoType *type, MonoMarshalSpec *mspec, gboolean as_field,
-			gboolean unicode, MonoMarshalConv *conv) 
-
-</div>
-<p />
-<b>Returns</b>
-<blockquote>	  A MonoMarshalNative enumeration value (MONO_NATIVE_) value
-
-	 describing the underlying native reprensetation of the type.
-	
-<p />
-	 In addition the value pointed by
-	 "conv" will contain the kind of marshalling required for this
-	 particular type one of the MONO_MARSHAL_CONV_ enumeration values.</blockquote>
-
-</div></body>
-</html>
-</span>
\ No newline at end of file
diff --git a/docs/deploy/mono-api-types.html b/docs/deploy/mono-api-types.html
deleted file mode 100644
index 0774670..0000000
--- a/docs/deploy/mono-api-types.html
+++ /dev/null
@@ -1,201 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?><span>
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-   <title>mono-api-types.html</title>
-   <style type="text/css">
-
-
-   h3 { 
-       font-size: 18px;
-       padding-bottom: 4pt;
-       border-bottom: 2px solid #dddddd;
-   }
-       
-   .api {
-     border: 1px solid;
-     padding: 10pt;
-     margin: 10pt;
-   } 
-
-   .api-entry { 
-       border-bottom: none;
-       font-size: 18px;
-   }
-
-   .prototype {
-     border: 1px solid;
-     background-color: #f2f2f2;
-     padding: 5pt;
-     margin-top: 5pt;
-     margin-bottom: 5pt;  
-   } 
-
-   .header {
-     border: 1px solid;
-     padding: 0 0 5pt 5pt;
-     margin: 10pt;
-     white-space: pre;
-       font-family: monospace;
-   }
-    
-   .code {
-     border: 1px solid;
-     padding: 0 0 5pt 5pt;
-     margin: 10pt;
-     white-space: pre;
-       font-family: monospace;
-   }
-   
-
-</style>
-</head>
-<body>
-<h3>Common core types</h3>
-
-	<p />These are accesor methods to retrieve the <tt>MonoClass
-	*</tt> handle for the various built-in CLI types. 
-	
- <a name="api:mono_get_object_class"></a>
- <div class="api">
-    <div class="api-entry">mono_get_object_class</div>
-
-    <div class="prototype">Prototype: mono_get_object_class</div>
-<p />
-
-</div> <a name="api:mono_get_int16_class"></a>
- <div class="api">
-    <div class="api-entry">mono_get_int16_class</div>
-
-    <div class="prototype">Prototype: mono_get_int16_class</div>
-<p />
-
-</div> <a name="api:mono_get_int32_class"></a>
- <div class="api">
-    <div class="api-entry">mono_get_int32_class</div>
-
-    <div class="prototype">Prototype: mono_get_int32_class</div>
-<p />
-
-</div> <a name="api:mono_get_int64_class"></a>
- <div class="api">
-    <div class="api-entry">mono_get_int64_class</div>
-
-    <div class="prototype">Prototype: mono_get_int64_class</div>
-<p />
-
-</div> <a name="api:mono_get_double_class"></a>
- <div class="api">
-    <div class="api-entry">mono_get_double_class</div>
-
-    <div class="prototype">Prototype: mono_get_double_class</div>
-<p />
-
-</div> <a name="api:mono_get_enum_class"></a>
- <div class="api">
-    <div class="api-entry">mono_get_enum_class</div>
-
-    <div class="prototype">Prototype: mono_get_enum_class</div>
-<p />
-
-</div> <a name="api:mono_get_intptr_class"></a>
- <div class="api">
-    <div class="api-entry">mono_get_intptr_class</div>
-
-    <div class="prototype">Prototype: mono_get_intptr_class</div>
-<p />
-
-</div> <a name="api:mono_get_sbyte_class"></a>
- <div class="api">
-    <div class="api-entry">mono_get_sbyte_class</div>
-
-    <div class="prototype">Prototype: mono_get_sbyte_class</div>
-<p />
-
-</div> <a name="api:mono_get_single_class"></a>
- <div class="api">
-    <div class="api-entry">mono_get_single_class</div>
-
-    <div class="prototype">Prototype: mono_get_single_class</div>
-<p />
-
-</div> <a name="api:mono_get_string_class"></a>
- <div class="api">
-    <div class="api-entry">mono_get_string_class</div>
-
-    <div class="prototype">Prototype: mono_get_string_class</div>
-<p />
-
-</div> <a name="api:mono_get_thread_class"></a>
- <div class="api">
-    <div class="api-entry">mono_get_thread_class</div>
-
-    <div class="prototype">Prototype: mono_get_thread_class</div>
-<p />
-
-</div> <a name="api:mono_get_uint16_class"></a>
- <div class="api">
-    <div class="api-entry">mono_get_uint16_class</div>
-
-    <div class="prototype">Prototype: mono_get_uint16_class</div>
-<p />
-
-</div> <a name="api:mono_get_uint32_class"></a>
- <div class="api">
-    <div class="api-entry">mono_get_uint32_class</div>
-
-    <div class="prototype">Prototype: mono_get_uint32_class</div>
-<p />
-
-</div> <a name="api:mono_get_uint64_class"></a>
- <div class="api">
-    <div class="api-entry">mono_get_uint64_class</div>
-
-    <div class="prototype">Prototype: mono_get_uint64_class</div>
-<p />
-
-</div> <a name="api:mono_get_uintptr_class"></a>
- <div class="api">
-    <div class="api-entry">mono_get_uintptr_class</div>
-
-    <div class="prototype">Prototype: mono_get_uintptr_class</div>
-<p />
-
-</div> <a name="api:mono_get_void_class"></a>
- <div class="api">
-    <div class="api-entry">mono_get_void_class</div>
-
-    <div class="prototype">Prototype: mono_get_void_class</div>
-<p />
-
-</div> <a name="api:mono_get_array_class"></a>
- <div class="api">
-    <div class="api-entry">mono_get_array_class</div>
-
-    <div class="prototype">Prototype: mono_get_array_class</div>
-<p />
-
-</div> <a name="api:mono_get_boolean_class"></a>
- <div class="api">
-    <div class="api-entry">mono_get_boolean_class</div>
-
-    <div class="prototype">Prototype: mono_get_boolean_class</div>
-<p />
-
-</div> <a name="api:mono_get_byte_class"></a>
- <div class="api">
-    <div class="api-entry">mono_get_byte_class</div>
-
-    <div class="prototype">Prototype: mono_get_byte_class</div>
-<p />
-
-</div> <a name="api:mono_get_char_class"></a>
- <div class="api">
-    <div class="api-entry">mono_get_char_class</div>
-
-    <div class="prototype">Prototype: mono_get_char_class</div>
-<p />
-
-
-</div></body>
-</html>
-</span>
\ No newline at end of file
diff --git a/docs/deploy/mono-api-unsorted.html b/docs/deploy/mono-api-unsorted.html
deleted file mode 100644
index da555b2..0000000
--- a/docs/deploy/mono-api-unsorted.html
+++ /dev/null
@@ -1,483 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?><span>
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-   <title>mono-api-unsorted.html</title>
-   <style type="text/css">
-
-
-   h3 { 
-       font-size: 18px;
-       padding-bottom: 4pt;
-       border-bottom: 2px solid #dddddd;
-   }
-       
-   .api {
-     border: 1px solid;
-     padding: 10pt;
-     margin: 10pt;
-   } 
-
-   .api-entry { 
-       border-bottom: none;
-       font-size: 18px;
-   }
-
-   .prototype {
-     border: 1px solid;
-     background-color: #f2f2f2;
-     padding: 5pt;
-     margin-top: 5pt;
-     margin-bottom: 5pt;  
-   } 
-
-   .header {
-     border: 1px solid;
-     padding: 0 0 5pt 5pt;
-     margin: 10pt;
-     white-space: pre;
-       font-family: monospace;
-   }
-    
-   .code {
-     border: 1px solid;
-     padding: 0 0 5pt 5pt;
-     margin: 10pt;
-     white-space: pre;
-       font-family: monospace;
-   }
-   
-
-</style>
-</head>
-<body>
-
-
- <a name="api:mono_bounded_array_class_get"></a>
- <div class="api">
-    <div class="api-entry">mono_bounded_array_class_get</div>
-
-    <div class="prototype">MonoClass*
-mono_bounded_array_class_get (MonoClass *eclass, guint32 rank, gboolean bounded)
-
-</div>
-<p />
-<b>Parameters</b>
-<blockquote><dt><i>element_class:</i></dt><dd> element class </dd><dt><i>rank:</i></dt><dd> the dimension of the array class</dd><dt><i>bounded:</i></dt><dd> whenever the array has non-zero bounds</dd></blockquote>
-<b>Returns</b>
-<blockquote>	  a class object describing the array with element type <i>element_type</i> and 
-
-	 dimension <i>rank</i>. </blockquote>
-
-</div> <a name="api:mono_check_corlib_version"></a>
- <div class="api">
-    <div class="api-entry">mono_check_corlib_version</div>
-
-    <div class="prototype">const char*
-mono_check_corlib_version (void)
-
-</div>
-<p />
-<b>Returns</b>
-<blockquote>	  NULL if the runtime will work with the corlib, or a g_malloc
-
-	 allocated string with the error otherwise.</blockquote>
-<b>Remarks</b>
-<p />	 
-	 Checks that the corlib that is loaded matches the version of this runtime.
-	
-
-</div> <a name="api:mono_compile_method"></a>
- <div class="api">
-    <div class="api-entry">mono_compile_method</div>
-
-    <div class="prototype">gpointer 
-mono_compile_method (MonoMethod *method)
-
-</div>
-<p />
-<b>Parameters</b>
-<blockquote><dt><i>method:</i></dt><dd> The method to compile.</dd></blockquote>
-<b>Remarks</b>
-<p />	 
-	 This JIT-compiles the method, and returns the pointer to the native code
-	 produced.
-
-</div> <a name="api:mono_config_for_assembly"></a>
- <div class="api">
-    <div class="api-entry">mono_config_for_assembly</div>
-
-    <div class="prototype">Prototype: mono_config_for_assembly</div>
-<p />
-
-</div> <a name="api:mono_dllmap_insert"></a>
- <div class="api">
-    <div class="api-entry">mono_dllmap_insert</div>
-
-    <div class="prototype">Prototype: mono_dllmap_insert</div>
-<p />
-
-</div> <a name="api:mono_environment_exitcode_get"></a>
- <div class="api">
-    <div class="api-entry">mono_environment_exitcode_get</div>
-
-    <div class="prototype">Prototype: mono_environment_exitcode_get</div>
-<p />
-
-</div> <a name="api:mono_environment_exitcode_set"></a>
- <div class="api">
-    <div class="api-entry">mono_environment_exitcode_set</div>
-
-    <div class="prototype">Prototype: mono_environment_exitcode_set</div>
-<p />
-
-</div> <a name="api:mono_free_method"></a>
- <div class="api">
-    <div class="api-entry">mono_free_method</div>
-
-    <div class="prototype">Prototype: mono_free_method</div>
-<p />
-
-</div> <a name="api:mono_free_verify_list"></a>
- <div class="api">
-    <div class="api-entry">mono_free_verify_list</div>
-
-    <div class="prototype">Prototype: mono_free_verify_list</div>
-<p />
-
-</div> <a name="api:mono_get_config_dir"></a>
- <div class="api">
-    <div class="api-entry">mono_get_config_dir</div>
-
-    <div class="prototype">Prototype: mono_get_config_dir</div>
-<p />
-
-</div> <a name="api:mono_get_corlib"></a>
- <div class="api">
-    <div class="api-entry">mono_get_corlib</div>
-
-    <div class="prototype">Prototype: mono_get_corlib</div>
-<p />
-
-</div> <a name="api:mono_get_delegate_invoke"></a>
- <div class="api">
-    <div class="api-entry">mono_get_delegate_invoke</div>
-
-    <div class="prototype">MonoMethod*
-mono_get_delegate_invoke (MonoClass *klass)
-
-</div>
-<p />
-<b>Parameters</b>
-<blockquote><dt><i>klass:</i></dt><dd> The delegate class</dd></blockquote>
-<b>Returns</b>
-<blockquote>	  the MonoMethod for the "Invoke" method in the delegate klass or NULL if <i>klass</i> is a broken delegate type
-</blockquote>
-
-</div> <a name="api:mono_get_method_full"></a>
- <div class="api">
-    <div class="api-entry">mono_get_method_full</div>
-
-    <div class="prototype">Prototype: mono_get_method_full</div>
-<p />
-
-</div> <a name="api:mono_get_method"></a>
- <div class="api">
-    <div class="api-entry">mono_get_method</div>
-
-    <div class="prototype">Prototype: mono_get_method</div>
-<p />
-
-</div> <a name="api:mono_get_root_domain"></a>
- <div class="api">
-    <div class="api-entry">mono_get_root_domain</div>
-
-    <div class="prototype">MonoDomain*
-mono_get_root_domain (void)
-
-</div>
-<p />
-<b>Returns</b>
-<blockquote>	  the root appdomain, to obtain the current domain, use mono_domain_get ()
-</blockquote>
-<b>Remarks</b>
-<p />	 
-	 The root AppDomain is the initial domain created by the runtime when it is
-	 initialized.  Programs execute on this AppDomain, but can create new ones
-	 later.   Currently there is no unmanaged API to create new AppDomains, this
-	 must be done from managed code.
-	
-
-</div> <a name="api:mono_init_from_assembly"></a>
- <div class="api">
-    <div class="api-entry">mono_init_from_assembly</div>
-
-    <div class="prototype">MonoDomain*
-mono_init_from_assembly (const char *domain_name, const char *filename)
-
-</div>
-<p />
-<b>Parameters</b>
-<blockquote><dt><i>domain_name:</i></dt><dd> name to give to the initial domain</dd><dt><i>filename:</i></dt><dd> filename to load on startup</dd></blockquote>
-<b>Returns</b>
-<blockquote>	  the initial domain.
-</blockquote>
-<b>Remarks</b>
-<p />	 
-	 Used by the runtime, users should use mono_jit_init instead.
-	
-	 Creates the initial application domain and initializes the mono_defaults
-	 structure.
-	 This function is guaranteed to not run any IL code.
-	 The runtime is initialized using the runtime version required by the
-	 provided executable. The version is determined by looking at the exe 
-	 configuration file and the version PE field)
-	
-
-</div> <a name="api:mono_init"></a>
- <div class="api">
-    <div class="api-entry">mono_init</div>
-
-    <div class="prototype">MonoDomain*
-mono_init (const char *domain_name)
-
-</div>
-<p />
-<b>Returns</b>
-<blockquote>	  the initial domain.
-</blockquote>
-<b>Remarks</b>
-<p />	 <p />
-
-	 Creates the initial application domain and initializes the mono_defaults
-	 structure.
-	 This function is guaranteed to not run any IL code.
-	 The runtime is initialized using the default runtime version.
-	
-
-</div> <a name="api:mono_init_version"></a>
- <div class="api">
-    <div class="api-entry">mono_init_version</div>
-
-    <div class="prototype">MonoDomain*
-mono_init_version (const char *domain_name, const char *version)
-
-</div>
-<p />
-<b>Returns</b>
-<blockquote>	  the initial domain.
-</blockquote>
-<b>Remarks</b>
-<p />	 <p />
-
-	 Used by the runtime, users should use mono_jit_init instead.
-	
-<p />
-	 Creates the initial application domain and initializes the mono_defaults
-	 structure.
-	
-	 This function is guaranteed to not run any IL code.
-	 The runtime is initialized using the provided rutime version.
-	
-
-</div> <a name="api:mono_jit_exec"></a>
- <div class="api">
-    <div class="api-entry">mono_jit_exec</div>
-
-    <div class="prototype">int 
-mono_jit_exec (MonoDomain *domain, MonoAssembly *assembly, int argc, char *argv[])
-
-</div>
-<p />
-<b>Parameters</b>
-<blockquote><dt><i>assembly:</i></dt><dd> reference to an assembly</dd><dt><i>argc:</i></dt><dd> argument count</dd><dt><i>argv:</i></dt><dd> argument vector</dd></blockquote>
-<b>Remarks</b>
-<p />	 
-	 Start execution of a program.
-
-</div> <a name="api:mono_lookup_internal_call"></a>
- <div class="api">
-    <div class="api-entry">mono_lookup_internal_call</div>
-
-    <div class="prototype">Prototype: mono_lookup_internal_call</div>
-<p />
-
-</div> <a name="api:mono_lookup_pinvoke_call"></a>
- <div class="api">
-    <div class="api-entry">mono_lookup_pinvoke_call</div>
-
-    <div class="prototype">Prototype: mono_lookup_pinvoke_call</div>
-<p />
-
-</div> <a name="api:mono_main"></a>
- <div class="api">
-    <div class="api-entry">mono_main</div>
-
-    <div class="prototype">int
-mono_main (int argc, char* argv[])
-
-</div>
-<p />
-<b>Parameters</b>
-<blockquote><dt><i>argc:</i></dt><dd> number of arguments in the argv array</dd><dt><i>argv:</i></dt><dd> array of strings containing the startup arguments</dd></blockquote>
-<b>Remarks</b>
-<p />	 
-	 Launches the Mono JIT engine and parses all the command line options
-	 in the same way that the mono command line VM would.
-
-</div> <a name="api:mono_parse_default_optimizations"></a>
- <div class="api">
-    <div class="api-entry">mono_parse_default_optimizations</div>
-
-    <div class="prototype">Prototype: mono_parse_default_optimizations</div>
-<p />
-
-</div> <a name="api:mono_ptr_class_get"></a>
- <div class="api">
-    <div class="api-entry">mono_ptr_class_get</div>
-
-    <div class="prototype">Prototype: mono_ptr_class_get</div>
-<p />
-
-</div> <a name="api:mono_register_bundled_assemblies"></a>
- <div class="api">
-    <div class="api-entry">mono_register_bundled_assemblies</div>
-
-    <div class="prototype">Prototype: mono_register_bundled_assemblies</div>
-<p />
-
-</div> <a name="api:mono_runtime_class_init"></a>
- <div class="api">
-    <div class="api-entry">mono_runtime_class_init</div>
-
-    <div class="prototype">Prototype: mono_runtime_class_init</div>
-<p />
-
-</div> <a name="api:mono_runtime_cleanup"></a>
- <div class="api">
-    <div class="api-entry">mono_runtime_cleanup</div>
-
-    <div class="prototype">void
-mono_runtime_cleanup (MonoDomain *domain)
-
-</div>
-<p />
-<b>Parameters</b>
-<blockquote><dt><i>domain:</i></dt><dd> unused.</dd></blockquote>
-<b>Remarks</b>
-<p />	 
-	 Internal routine.
-	
-	 This must not be called while there are still running threads executing
-	 managed code.
-
-</div> <a name="api:mono_runtime_get_main_args"></a>
- <div class="api">
-    <div class="api-entry">mono_runtime_get_main_args</div>
-
-    <div class="prototype">MonoArray*
-mono_runtime_get_main_args (void)
-
-</div>
-<p />
-<b>Returns</b>
-<blockquote>	  a MonoArray with the arguments passed to the main program
-</blockquote>
-
-</div> <a name="api:mono_runtime_init"></a>
- <div class="api">
-    <div class="api-entry">mono_runtime_init</div>
-
-    <div class="prototype">void
-mono_runtime_init (MonoDomain *domain, MonoThreadStartCB start_cb,
-		   MonoThreadAttachCB attach_cb)
-
-</div>
-<p />
-<b>Parameters</b>
-<blockquote><dt><i>domain:</i></dt><dd> domain returned by mono_init ()</dd></blockquote>
-<b>Remarks</b>
-<p />	 
-	 Initialize the core AppDomain: this function will run also some
-	 IL initialization code, so it needs the execution engine to be fully 
-	 operational.
-	
-	 AppDomain.SetupInformation is set up in mono_runtime_exec_main, where
-	 we know the entry_assembly.
-	
-
-</div> <a name="api:mono_runtime_is_shutting_down"></a>
- <div class="api">
-    <div class="api-entry">mono_runtime_is_shutting_down</div>
-
-    <div class="prototype">gboolean
-mono_runtime_is_shutting_down (void)
-
-</div>
-<p />
-<b>Remarks</b>
-<p />	 
-	 Returns whether the runtime has been flagged for shutdown.
-	
-	 This is consumed by the P:System.Environment.HasShutdownStarted
-	 property.
-	
-
-</div> <a name="api:mono_runtime_object_init"></a>
- <div class="api">
-    <div class="api-entry">mono_runtime_object_init</div>
-
-    <div class="prototype">Prototype: mono_runtime_object_init</div>
-<p />
-
-</div> <a name="api:mono_runtime_quit"></a>
- <div class="api">
-    <div class="api-entry">mono_runtime_quit</div>
-
-    <div class="prototype">Prototype: mono_runtime_quit</div>
-<p />
-
-</div> <a name="api:mono_runtime_run_main"></a>
- <div class="api">
-    <div class="api-entry">mono_runtime_run_main</div>
-
-    <div class="prototype">int
-mono_runtime_run_main (MonoMethod *method, int argc, char* argv[],
-		       MonoObject **exc)
-
-</div>
-<p />
-<b>Parameters</b>
-<blockquote><dt><i>method:</i></dt><dd> the method to start the application with (usually Main)</dd><dt><i>argc:</i></dt><dd> number of arguments from the command line</dd><dt><i>argv:</i></dt><dd> array of strings from the command line</dd><dt><i>exc:</i></dt><dd> excetption results</dd></blockquote>
-<b>Remarks</b>
-<p />	 
-	 Execute a standard Main() method (argc/argv contains the
-	 executable name). This method also sets the command line argument value
-	 needed by System.Environment.
-	
-	
-<p />
-
-</div> <a name="api:mono_table_info_get_rows"></a>
- <div class="api">
-    <div class="api-entry">mono_table_info_get_rows</div>
-
-    <div class="prototype">Prototype: mono_table_info_get_rows</div>
-<p />
-
-</div> <a name="api:mono_upgrade_remote_class_wrapper"></a>
- <div class="api">
-    <div class="api-entry">mono_upgrade_remote_class_wrapper</div>
-
-    <div class="prototype">Prototype: mono_upgrade_remote_class_wrapper</div>
-<p />
-
-</div> <a name="api:mono_verify_corlib"></a>
- <div class="api">
-    <div class="api-entry">mono_verify_corlib</div>
-
-    <div class="prototype">Prototype: mono_verify_corlib</div>
-<p />
-
-</div></body>
-</html>
-</span>
\ No newline at end of file
diff --git a/docs/deploy/mono-api-utils.html b/docs/deploy/mono-api-utils.html
deleted file mode 100644
index bc05ede..0000000
--- a/docs/deploy/mono-api-utils.html
+++ /dev/null
@@ -1,635 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?><span>
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-   <title>mono-api-utils.html</title>
-   <style type="text/css">
-
-
-   h3 { 
-       font-size: 18px;
-       padding-bottom: 4pt;
-       border-bottom: 2px solid #dddddd;
-   }
-       
-   .api {
-     border: 1px solid;
-     padding: 10pt;
-     margin: 10pt;
-   } 
-
-   .api-entry { 
-       border-bottom: none;
-       font-size: 18px;
-   }
-
-   .prototype {
-     border: 1px solid;
-     background-color: #f2f2f2;
-     padding: 5pt;
-     margin-top: 5pt;
-     margin-bottom: 5pt;  
-   } 
-
-   .header {
-     border: 1px solid;
-     padding: 0 0 5pt 5pt;
-     margin: 10pt;
-     white-space: pre;
-       font-family: monospace;
-   }
-    
-   .code {
-     border: 1px solid;
-     padding: 0 0 5pt 5pt;
-     margin: 10pt;
-     white-space: pre;
-       font-family: monospace;
-   }
-   
-
-</style>
-</head>
-<body>
-<h2>Utility Methods</h2>
-
-<h3>Bitsets</h3>
-
-	<p />MonoBitsets are a set of routines used to manipulate sets
-	of bits.
-	
- <a name="api:mono_bitset_alloc_size"></a>
- <div class="api">
-    <div class="api-entry">mono_bitset_alloc_size</div>
-
-    <div class="prototype">Prototype: mono_bitset_alloc_size</div>
-<p />
-
-</div> <a name="api:mono_bitset_clear"></a>
- <div class="api">
-    <div class="api-entry">mono_bitset_clear</div>
-
-    <div class="prototype">Prototype: mono_bitset_clear</div>
-<p />
-
-</div> <a name="api:mono_bitset_clear_all"></a>
- <div class="api">
-    <div class="api-entry">mono_bitset_clear_all</div>
-
-    <div class="prototype">Prototype: mono_bitset_clear_all</div>
-<p />
-
-</div> <a name="api:mono_bitset_clone"></a>
- <div class="api">
-    <div class="api-entry">mono_bitset_clone</div>
-
-    <div class="prototype">Prototype: mono_bitset_clone</div>
-<p />
-
-</div> <a name="api:mono_bitset_copyto"></a>
- <div class="api">
-    <div class="api-entry">mono_bitset_copyto</div>
-
-    <div class="prototype">Prototype: mono_bitset_copyto</div>
-<p />
-
-</div> <a name="api:mono_bitset_count"></a>
- <div class="api">
-    <div class="api-entry">mono_bitset_count</div>
-
-    <div class="prototype">Prototype: mono_bitset_count</div>
-<p />
-
-</div> <a name="api:mono_bitset_equal"></a>
- <div class="api">
-    <div class="api-entry">mono_bitset_equal</div>
-
-    <div class="prototype">Prototype: mono_bitset_equal</div>
-<p />
-
-</div> <a name="api:mono_bitset_find_first"></a>
- <div class="api">
-    <div class="api-entry">mono_bitset_find_first</div>
-
-    <div class="prototype">Prototype: mono_bitset_find_first</div>
-<p />
-
-</div> <a name="api:mono_bitset_find_last"></a>
- <div class="api">
-    <div class="api-entry">mono_bitset_find_last</div>
-
-    <div class="prototype">Prototype: mono_bitset_find_last</div>
-<p />
-
-</div> <a name="api:mono_bitset_find_start"></a>
- <div class="api">
-    <div class="api-entry">mono_bitset_find_start</div>
-
-    <div class="prototype">Prototype: mono_bitset_find_start</div>
-<p />
-
-</div> <a name="api:mono_bitset_foreach"></a>
- <div class="api">
-    <div class="api-entry">mono_bitset_foreach</div>
-
-    <div class="prototype">Prototype: mono_bitset_foreach</div>
-<p />
-
-</div> <a name="api:mono_bitset_free"></a>
- <div class="api">
-    <div class="api-entry">mono_bitset_free</div>
-
-    <div class="prototype">Prototype: mono_bitset_free</div>
-<p />
-
-</div> <a name="api:mono_bitset_intersection"></a>
- <div class="api">
-    <div class="api-entry">mono_bitset_intersection</div>
-
-    <div class="prototype">Prototype: mono_bitset_intersection</div>
-<p />
-
-</div> <a name="api:mono_bitset_invert"></a>
- <div class="api">
-    <div class="api-entry">mono_bitset_invert</div>
-
-    <div class="prototype">Prototype: mono_bitset_invert</div>
-<p />
-
-</div> <a name="api:mono_bitset_mem_new"></a>
- <div class="api">
-    <div class="api-entry">mono_bitset_mem_new</div>
-
-    <div class="prototype">Prototype: mono_bitset_mem_new</div>
-<p />
-
-</div> <a name="api:mono_bitset_new"></a>
- <div class="api">
-    <div class="api-entry">mono_bitset_new</div>
-
-    <div class="prototype">Prototype: mono_bitset_new</div>
-<p />
-
-</div> <a name="api:mono_bitset_set"></a>
- <div class="api">
-    <div class="api-entry">mono_bitset_set</div>
-
-    <div class="prototype">Prototype: mono_bitset_set</div>
-<p />
-
-</div> <a name="api:mono_bitset_set_all"></a>
- <div class="api">
-    <div class="api-entry">mono_bitset_set_all</div>
-
-    <div class="prototype">Prototype: mono_bitset_set_all</div>
-<p />
-
-</div> <a name="api:mono_bitset_size"></a>
- <div class="api">
-    <div class="api-entry">mono_bitset_size</div>
-
-    <div class="prototype">Prototype: mono_bitset_size</div>
-<p />
-
-</div> <a name="api:mono_bitset_sub"></a>
- <div class="api">
-    <div class="api-entry">mono_bitset_sub</div>
-
-    <div class="prototype">Prototype: mono_bitset_sub</div>
-<p />
-
-</div> <a name="api:mono_bitset_test"></a>
- <div class="api">
-    <div class="api-entry">mono_bitset_test</div>
-
-    <div class="prototype">Prototype: mono_bitset_test</div>
-<p />
-
-</div> <a name="api:mono_bitset_test_bulk"></a>
- <div class="api">
-    <div class="api-entry">mono_bitset_test_bulk</div>
-
-    <div class="prototype">Prototype: mono_bitset_test_bulk</div>
-<p />
-
-</div> <a name="api:mono_bitset_union"></a>
- <div class="api">
-    <div class="api-entry">mono_bitset_union</div>
-
-    <div class="prototype">Prototype: mono_bitset_union</div>
-<p />
-
-</div> <a name="api:mono_bitset_find_first_unset"></a>
- <div class="api">
-    <div class="api-entry">mono_bitset_find_first_unset</div>
-
-    <div class="prototype">Prototype: mono_bitset_find_first_unset</div>
-<p />
-
-</div> <a name="api:mono_bitset_intersection_2"></a>
- <div class="api">
-    <div class="api-entry">mono_bitset_intersection_2</div>
-
-    <div class="prototype">Prototype: mono_bitset_intersection_2</div>
-<p />
-
-
-</div><h3>Hashtables</h3>
-
-	<p /><tt>GHashTable</tt> is used when you need to store object
-	references into a hashtable, objects stored in a
-	<tt>MonoGHashTable</tt> are properly tracked by the garbage
-	collector.
-
-	<p />The <tt>MonoGHashTable</tt> data type has the same API as
-	the GLIB.
-	
- <a name="api:mono_g_hash_table_destroy"></a>
- <div class="api">
-    <div class="api-entry">mono_g_hash_table_destroy</div>
-
-    <div class="prototype">Prototype: mono_g_hash_table_destroy</div>
-<p />
-
-</div> <a name="api:mono_g_hash_table_foreach"></a>
- <div class="api">
-    <div class="api-entry">mono_g_hash_table_foreach</div>
-
-    <div class="prototype">Prototype: mono_g_hash_table_foreach</div>
-<p />
-
-</div> <a name="api:mono_g_hash_table_foreach_remove"></a>
- <div class="api">
-    <div class="api-entry">mono_g_hash_table_foreach_remove</div>
-
-    <div class="prototype">Prototype: mono_g_hash_table_foreach_remove</div>
-<p />
-
-</div> <a name="api:mono_g_hash_table_foreach_steal"></a>
- <div class="api">
-    <div class="api-entry">mono_g_hash_table_foreach_steal</div>
-
-    <div class="prototype">Prototype: mono_g_hash_table_foreach_steal</div>
-<p />
-
-</div> <a name="api:mono_g_hash_table_insert"></a>
- <div class="api">
-    <div class="api-entry">mono_g_hash_table_insert</div>
-
-    <div class="prototype">Prototype: mono_g_hash_table_insert</div>
-<p />
-
-</div> <a name="api:mono_g_hash_table_lookup"></a>
- <div class="api">
-    <div class="api-entry">mono_g_hash_table_lookup</div>
-
-    <div class="prototype">Prototype: mono_g_hash_table_lookup</div>
-<p />
-
-</div> <a name="api:mono_g_hash_table_lookup_extended"></a>
- <div class="api">
-    <div class="api-entry">mono_g_hash_table_lookup_extended</div>
-
-    <div class="prototype">Prototype: mono_g_hash_table_lookup_extended</div>
-<p />
-
-</div> <a name="api:mono_g_hash_table_new"></a>
- <div class="api">
-    <div class="api-entry">mono_g_hash_table_new</div>
-
-    <div class="prototype">Prototype: mono_g_hash_table_new</div>
-<p />
-
-</div> <a name="api:mono_g_hash_table_new_full"></a>
- <div class="api">
-    <div class="api-entry">mono_g_hash_table_new_full</div>
-
-    <div class="prototype">Prototype: mono_g_hash_table_new_full</div>
-<p />
-
-</div> <a name="api:mono_g_hash_table_remap"></a>
- <div class="api">
-    <div class="api-entry">mono_g_hash_table_remap</div>
-
-    <div class="prototype">Prototype: mono_g_hash_table_remap</div>
-<p />
-
-</div> <a name="api:mono_g_hash_table_remove"></a>
- <div class="api">
-    <div class="api-entry">mono_g_hash_table_remove</div>
-
-    <div class="prototype">Prototype: mono_g_hash_table_remove</div>
-<p />
-
-</div> <a name="api:mono_g_hash_table_replace"></a>
- <div class="api">
-    <div class="api-entry">mono_g_hash_table_replace</div>
-
-    <div class="prototype">Prototype: mono_g_hash_table_replace</div>
-<p />
-
-</div> <a name="api:mono_g_hash_table_size"></a>
- <div class="api">
-    <div class="api-entry">mono_g_hash_table_size</div>
-
-    <div class="prototype">Prototype: mono_g_hash_table_size</div>
-<p />
-
-</div> <a name="api:mono_g_hash_table_steal"></a>
- <div class="api">
-    <div class="api-entry">mono_g_hash_table_steal</div>
-
-    <div class="prototype">Prototype: mono_g_hash_table_steal</div>
-<p />
-
-
-</div><h3>SHA1 Signatures</h3>
-
- <a name="api:mono_sha1_init"></a>
- <div class="api">
-    <div class="api-entry">mono_sha1_init</div>
-
-    <div class="prototype">Prototype: mono_sha1_init</div>
-<p />
-
-</div> <a name="api:mono_sha1_update"></a>
- <div class="api">
-    <div class="api-entry">mono_sha1_update</div>
-
-    <div class="prototype">Prototype: mono_sha1_update</div>
-<p />
-
-</div> <a name="api:mono_sha1_get_digest_from_file"></a>
- <div class="api">
-    <div class="api-entry">mono_sha1_get_digest_from_file</div>
-
-    <div class="prototype">Prototype: mono_sha1_get_digest_from_file</div>
-<p />
-
-</div> <a name="api:mono_sha1_get_digest"></a>
- <div class="api">
-    <div class="api-entry">mono_sha1_get_digest</div>
-
-    <div class="prototype">Prototype: mono_sha1_get_digest</div>
-<p />
-
-</div> <a name="api:mono_sha1_final"></a>
- <div class="api">
-    <div class="api-entry">mono_sha1_final</div>
-
-    <div class="prototype">Prototype: mono_sha1_final</div>
-<p />
-
-
-</div><h3>MD5 Signatures</h3>
-
- <a name="api:mono_md5_init"></a>
- <div class="api">
-    <div class="api-entry">mono_md5_init</div>
-
-    <div class="prototype">Prototype: mono_md5_init</div>
-<p />
-
-</div> <a name="api:mono_md5_update"></a>
- <div class="api">
-    <div class="api-entry">mono_md5_update</div>
-
-    <div class="prototype">Prototype: mono_md5_update</div>
-<p />
-
-</div> <a name="api:mono_md5_get_digest_from_file"></a>
- <div class="api">
-    <div class="api-entry">mono_md5_get_digest_from_file</div>
-
-    <div class="prototype">Prototype: mono_md5_get_digest_from_file</div>
-<p />
-
-</div> <a name="api:mono_md5_get_digest"></a>
- <div class="api">
-    <div class="api-entry">mono_md5_get_digest</div>
-
-    <div class="prototype">Prototype: mono_md5_get_digest</div>
-<p />
-
-</div> <a name="api:mono_md5_final"></a>
- <div class="api">
-    <div class="api-entry">mono_md5_final</div>
-
-    <div class="prototype">Prototype: mono_md5_final</div>
-<p />
-
-
-</div> <a name="api:mono_digest_get_public_token"></a>
- <div class="api">
-    <div class="api-entry">mono_digest_get_public_token</div>
-
-    <div class="prototype">Prototype: mono_digest_get_public_token</div>
-<p />
-
-
-</div><h3>Memory Pools</h3>
-
-	<p />Memory pools are a convenient way of tracking memory
-	allocations that are used for one specific task, they are also
-	faster than using the standard memory allocation procedures,
-	as they are designed to be used only by a single thread at a
-	time. 
-
-	<p /><tt>MonoMemPool</tt> objects are not thread safe, which
-	means that you should not share the objects across multiple
-	threads without providing proper locking around it (unlike
-	<tt>malloc</tt> and <tt>free</tt> which are thread safe). 
-
-	<p />When a <tt>MonoMemPool</tt> is released with
-	<tt>mono_mempool_destroy</tt> all of the of the memory
-	allocated from that memory pool with
-	<tt>mono_mempool_alloc</tt> and <tt>mono_mempool_alloc0</tt>
-	is released.
-	
- <a name="api:mono_mempool_new"></a>
- <div class="api">
-    <div class="api-entry">mono_mempool_new</div>
-
-    <div class="prototype">MonoMemPool*
-mono_mempool_new (void)
-
-</div>
-<p />
-<b>Returns</b>
-<blockquote>	  a new memory pool.
-</blockquote>
-
-</div> <a name="api:mono_mempool_destroy"></a>
- <div class="api">
-    <div class="api-entry">mono_mempool_destroy</div>
-
-    <div class="prototype">void
-mono_mempool_destroy (MonoMemPool *pool)
-
-</div>
-<p />
-<b>Parameters</b>
-<blockquote><dt><i>pool:</i></dt><dd> the memory pool to destroy</dd></blockquote>
-<b>Remarks</b>
-<p />	 
-	 Free all memory associated with this pool.
-
-</div> <a name="api:mono_mempool_alloc"></a>
- <div class="api">
-    <div class="api-entry">mono_mempool_alloc</div>
-
-    <div class="prototype">gpointer
-mono_mempool_alloc (MonoMemPool *pool, guint size)
-
-</div>
-<p />
-<b>Parameters</b>
-<blockquote><dt><i>pool:</i></dt><dd> the momory pool to use</dd><dt><i>size:</i></dt><dd> size of the momory block</dd></blockquote>
-<b>Returns</b>
-<blockquote>	  the address of a newly allocated memory block.
-</blockquote>
-<b>Remarks</b>
-<p />	 
-	 Allocates a new block of memory in <i>pool</i>.
-	
-
-</div> <a name="api:mono_mempool_alloc0"></a>
- <div class="api">
-    <div class="api-entry">mono_mempool_alloc0</div>
-
-    <div class="prototype">gpointer
-mono_mempool_alloc0 (MonoMemPool *pool, guint size)
-
-</div>
-<p />
-<b>Remarks</b>
-<p />	 
-	 same as mono_mempool_alloc, but fills memory with zero.
-
-</div> <a name="api:mono_mempool_empty"></a>
- <div class="api">
-    <div class="api-entry">mono_mempool_empty</div>
-
-    <div class="prototype">Prototype: mono_mempool_empty</div>
-<p />
-
-</div> <a name="api:mono_mempool_invalidate"></a>
- <div class="api">
-    <div class="api-entry">mono_mempool_invalidate</div>
-
-    <div class="prototype">void
-mono_mempool_invalidate (MonoMemPool *pool)
-
-</div>
-<p />
-<b>Parameters</b>
-<blockquote><dt><i>pool:</i></dt><dd> the memory pool to invalidate</dd></blockquote>
-<b>Remarks</b>
-<p />	 
-	 Fill the memory associated with this pool to 0x2a (42). Useful for debugging.
-
-</div> <a name="api:mono_mempool_stats"></a>
- <div class="api">
-    <div class="api-entry">mono_mempool_stats</div>
-
-    <div class="prototype">void
-mono_mempool_stats (MonoMemPool *pool)
-
-</div>
-<p />
-<b>Parameters</b>
-<blockquote><dt><i>pool:</i></dt><dd> the momory pool we need stats for</dd></blockquote>
-<b>Remarks</b>
-<p />	 
-	 Print a few stats about the mempool
-
-</div> <a name="api:mono_mempool_contains_addr"></a>
- <div class="api">
-    <div class="api-entry">mono_mempool_contains_addr</div>
-
-    <div class="prototype">gboolean
-mono_mempool_contains_addr (MonoMemPool *pool,
-							gpointer addr)
-
-</div>
-<p />
-<b>Remarks</b>
-<p />	 
-	  Determines whenever ADDR is inside the memory used by the mempool.
-
- 
-</div><h3>JIT utilities</h3>
-
- <a name="api:mono_signbit_double"></a>
- <div class="api">
-    <div class="api-entry">mono_signbit_double</div>
-
-    <div class="prototype">Prototype: mono_signbit_double</div>
-<p />
-
-</div> <a name="api:mono_signbit_float"></a>
- <div class="api">
-    <div class="api-entry">mono_signbit_float</div>
-
-    <div class="prototype">Prototype: mono_signbit_float</div>
-<p />
-
-
-</div><h3>Disassembling Generated Code</h3>
-
-	<p />Routines used to debug the JIT-produced code.
-	
- <a name="api:mono_disasm_code"></a>
- <div class="api">
-    <div class="api-entry">mono_disasm_code</div>
-
-    <div class="prototype">Prototype: mono_disasm_code</div>
-<p />
-
-</div> <a name="api:mono_disasm_code_one"></a>
- <div class="api">
-    <div class="api-entry">mono_disasm_code_one</div>
-
-    <div class="prototype">Prototype: mono_disasm_code_one</div>
-<p />
-
-
-</div><h3>Walking the Stack</h3>
-
- <a name="api:mono_walk_stack"></a>
- <div class="api">
-    <div class="api-entry">mono_walk_stack</div>
-
-    <div class="prototype">void
-mono_walk_stack (MonoJitStackWalk func, MonoDomain *domain, MonoContext *start_ctx, MonoUnwindOptions unwind_options, MonoInternalThread *thread, MonoLMF *lmf, gpointer user_data)
-
-</div>
-<p />
-<b>Parameters</b>
-<blockquote><dt><i>func:</i></dt><dd> callback to call for each stack frame</dd><dt><i>domain:</i></dt><dd> starting appdomain, can be NULL to use the current domain</dd><dt><i>unwind_options:</i></dt><dd> what extra information the unwinder should gather</dd><dt><i>start_ctx:</i></dt><dd> starting state of the stack walk, can be NULL.</dd><dt><i>thread:</i></dt><dd> the thread whose stack to walk, can be NULL to use the current thread</dd><dt><i>lmf:</i></dt><dd> the LMF of <i>thread</i>, can be NULL to use the LMF of the current thread</dd><dt><i>user_data:</i></dt><dd> data passed to the callback</dd></blockquote>
-<b>Remarks</b>
-<p />	 
-	 This function walks the stack of a thread, starting from the state
-	 represented by start_ctx. For each frame the callback
-	 function is called with the relevant info. The walk ends when no more
-	 managed stack frames are found or when the callback returns a TRUE value.
-
-</div> <a name="api:mono_stack_walk_no_il"></a>
- <div class="api">
-    <div class="api-entry">mono_stack_walk_no_il</div>
-
-    <div class="prototype">Prototype: mono_stack_walk_no_il</div>
-<p />
-
-
-</div><h3>Others</h3>
-
- <a name="api:mono_escape_uri_string"></a>
- <div class="api">
-    <div class="api-entry">mono_escape_uri_string</div>
-
-    <div class="prototype">Prototype: mono_escape_uri_string</div>
-<p />
-
-</div></body>
-</html>
-</span>
\ No newline at end of file
diff --git a/docs/deploy/mono-api-vm.html b/docs/deploy/mono-api-vm.html
deleted file mode 100644
index d1dc657..0000000
--- a/docs/deploy/mono-api-vm.html
+++ /dev/null
@@ -1,55 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?><span>
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-   <title>mono-api-vm.html</title>
-   <style type="text/css">
-
-
-   h3 { 
-       font-size: 18px;
-       padding-bottom: 4pt;
-       border-bottom: 2px solid #dddddd;
-   }
-       
-   .api {
-     border: 1px solid;
-     padding: 10pt;
-     margin: 10pt;
-   } 
-
-   .api-entry { 
-       border-bottom: none;
-       font-size: 18px;
-   }
-
-   .prototype {
-     border: 1px solid;
-     background-color: #f2f2f2;
-     padding: 5pt;
-     margin-top: 5pt;
-     margin-bottom: 5pt;  
-   } 
-
-   .header {
-     border: 1px solid;
-     padding: 0 0 5pt 5pt;
-     margin: 10pt;
-     white-space: pre;
-       font-family: monospace;
-   }
-    
-   .code {
-     border: 1px solid;
-     padding: 0 0 5pt 5pt;
-     margin: 10pt;
-     white-space: pre;
-       font-family: monospace;
-   }
-   
-
-</style>
-</head>
-<body>
-</body>
-</html>
-</span>
\ No newline at end of file
diff --git a/docs/deploy/mono-api-wapi.html b/docs/deploy/mono-api-wapi.html
deleted file mode 100644
index ab6be4c..0000000
--- a/docs/deploy/mono-api-wapi.html
+++ /dev/null
@@ -1,1604 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?><span>
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-   <title>mono-api-wapi.html</title>
-   <style type="text/css">
-
-
-   h3 { 
-       font-size: 18px;
-       padding-bottom: 4pt;
-       border-bottom: 2px solid #dddddd;
-   }
-       
-   .api {
-     border: 1px solid;
-     padding: 10pt;
-     margin: 10pt;
-   } 
-
-   .api-entry { 
-       border-bottom: none;
-       font-size: 18px;
-   }
-
-   .prototype {
-     border: 1px solid;
-     background-color: #f2f2f2;
-     padding: 5pt;
-     margin-top: 5pt;
-     margin-bottom: 5pt;  
-   } 
-
-   .header {
-     border: 1px solid;
-     padding: 0 0 5pt 5pt;
-     margin: 10pt;
-     white-space: pre;
-       font-family: monospace;
-   }
-    
-   .code {
-     border: 1px solid;
-     padding: 0 0 5pt 5pt;
-     margin: 10pt;
-     white-space: pre;
-       font-family: monospace;
-   }
-   
-
-</style>
-</head>
-<body>
-<h2>Windows Compatibility API</h2>
-
-	<p />Mono implements a small subset of the Win32 API for some
-	file system interaction, I/O, thread and process operations.
-
-	<p />On Windows, Mono uses directly the services provided by the
-	operating system.   On other operating system it uses its own
-	implementation (referred to as the "io-layer" or "wapi"). 
-
-<h3>Windows Compatibility API</h3>
-
- <a name="api:BindIoCompletionCallback"></a>
- <div class="api">
-    <div class="api-entry">BindIoCompletionCallback</div>
-
-    <div class="prototype">Prototype: BindIoCompletionCallback</div>
-<p />
-
-</div> <a name="api:CloseHandle"></a>
- <div class="api">
-    <div class="api-entry">CloseHandle</div>
-
-    <div class="prototype">gboolean CloseHandle(gpointer handle)
-
-</div>
-<p />
-<b>Parameters</b>
-<blockquote><dt><i>handle:</i></dt><dd> The handle to release</dd></blockquote>
-<b>Remarks</b>
-<p />	 
-	 Closes and invalidates <i>handle</i>, releasing any resources it
-	 consumes.  When the last handle to a temporary or non-persistent
-	 object is closed, that object can be deleted.  Closing the same
-	 handle twice is an error.
-	
-	 Return value: %TRUE on success, %FALSE otherwise.
-
-</div> <a name="api:closesocket"></a>
- <div class="api">
-    <div class="api-entry">closesocket</div>
-
-    <div class="prototype">Prototype: closesocket</div>
-<p />
-
-</div> <a name="api:CopyFile"></a>
- <div class="api">
-    <div class="api-entry">CopyFile</div>
-
-    <div class="prototype">gboolean CopyFile (const gunichar2 *name, const gunichar2 *dest_name,
-		   gboolean fail_if_exists)
-
-</div>
-<p />
-<b>Parameters</b>
-<blockquote><dt><i>name:</i></dt><dd> a pointer to a NULL-terminated unicode string, that names</dd></blockquote>
-<b>Remarks</b>
-<p />	 the file to be copied. 
-	 <i>dest_name</i>: a pointer to a NULL-terminated unicode string, that is the
-	 new name for the file.
-	 <i>fail_if_exists</i>: if TRUE and dest_name exists, the copy will fail.
-	
-	 Copies file <i>name</i> to <i>dest_name</i>
-	
-	 Return value: %TRUE on success, %FALSE otherwise.
-
-</div> <a name="api:CreateDirectory"></a>
- <div class="api">
-    <div class="api-entry">CreateDirectory</div>
-
-    <div class="prototype">gboolean CreateDirectory (const gunichar2 *name,
-			  WapiSecurityAttributes *security)
-
-</div>
-<p />
-<b>Parameters</b>
-<blockquote><dt><i>name:</i></dt><dd> a pointer to a NULL-terminated unicode string, that names</dd></blockquote>
-<b>Remarks</b>
-<p />	 the directory to be created. 
-	 <i>security</i>: ignored for now
-	
-	 Creates directory <i>name</i>
-	
-	 Return value: %TRUE on success, %FALSE otherwise.
-
-</div> <a name="api:CreateEvent"></a>
- <div class="api">
-    <div class="api-entry">CreateEvent</div>
-
-    <div class="prototype">gpointer CreateEvent(WapiSecurityAttributes *security G_GNUC_UNUSED,
-		     gboolean manual, gboolean initial,
-		     const gunichar2 *name G_GNUC_UNUSED)
-
-</div>
-<p />
-<b>Parameters</b>
-<blockquote><dt><i>security:</i></dt><dd> Ignored for now.</dd><dt><i>manual:</i></dt><dd> Specifies whether the new event handle has manual or auto</dd></blockquote>
-<b>Remarks</b>
-<p />	 reset behaviour. 
-	 <i>initial</i>: Specifies whether the new event handle is initially
-	 signalled or not.
-	 <i>name</i>:Pointer to a string specifying the name of this name, or
-	 %NULL.  Currently ignored.
-	
-	 Creates a new event handle.
-	
-	 An event handle is signalled with SetEvent().  If the new handle is
-	 a manual reset event handle, it remains signalled until it is reset
-	 with ResetEvent().  An auto reset event remains signalled until a
-	 single thread has waited for it, at which time the event handle is
-	 automatically reset to unsignalled.
-	
-	 Return value: A new handle, or %NULL on error.
-
-</div> <a name="api:CreateFile"></a>
- <div class="api">
-    <div class="api-entry">CreateFile</div>
-
-    <div class="prototype">gpointer CreateFile(const gunichar2 *name, guint32 fileaccess,
-		    guint32 sharemode, WapiSecurityAttributes *security,
-		    guint32 createmode, guint32 attrs,
-		    gpointer template G_GNUC_UNUSED)
-
-</div>
-<p />
-<b>Parameters</b>
-<blockquote><dt><i>name:</i></dt><dd> a pointer to a NULL-terminated unicode string, that names</dd></blockquote>
-<b>Remarks</b>
-<p />	 the file or other object to create. 
-	 <i>fileaccess</i>: specifies the file access mode
-	 <i>sharemode</i>: whether the file should be shared.  This parameter is
-	 currently ignored.
-	 <i>security</i>: Ignored for now.
-	 <i>createmode</i>: specifies whether to create a new file, whether to
-	 overwrite an existing file, whether to truncate the file, etc.
-	 <i>attrs</i>: specifies file attributes and flags.  On win32 attributes
-	 are characteristics of the file, not the handle, and are ignored
-	 when an existing file is opened.  Flags give the library hints on
-	 how to process a file to optimise performance.
-	 <i>template</i>: the handle of an open %GENERIC_READ file that specifies
-	 attributes to apply to a newly created file, ignoring <i>attrs</i>.
-	 Normally this parameter is NULL.  This parameter is ignored when an
-	 existing file is opened.
-	
-	 Creates a new file handle.  This only applies to normal files:
-	 pipes are handled by CreatePipe(), and console handles are created
-	 with GetStdHandle().
-	
-	 Return value: the new handle, or %INVALID_HANDLE_VALUE on error.
-
-</div> <a name="api:CreateMutex"></a>
- <div class="api">
-    <div class="api-entry">CreateMutex</div>
-
-    <div class="prototype">gpointer CreateMutex(WapiSecurityAttributes *security G_GNUC_UNUSED, gboolean owned,
-			const gunichar2 *name)
-
-</div>
-<p />
-<b>Parameters</b>
-<blockquote><dt><i>security:</i></dt><dd> Ignored for now.</dd><dt><i>owned:</i></dt><dd> If %TRUE, the mutex is created with the calling thread</dd></blockquote>
-<b>Remarks</b>
-<p />	 already owning the mutex. 
-	 <i>name</i>:Pointer to a string specifying the name of this mutex, or
-	 %NULL.
-	
-	 Creates a new mutex handle.  A mutex is signalled when no thread
-	 owns it.  A thread acquires ownership of the mutex by waiting for
-	 it with WaitForSingleObject() or WaitForMultipleObjects().  A
-	 thread relinquishes ownership with ReleaseMutex().
-	
-	 A thread that owns a mutex can specify the same mutex in repeated
-	 wait function calls without blocking.  The thread must call
-	 ReleaseMutex() an equal number of times to release the mutex.
-	
-	 Return value: A new handle, or %NULL on error.
-
-</div> <a name="api:CreatePipe"></a>
- <div class="api">
-    <div class="api-entry">CreatePipe</div>
-
-    <div class="prototype">Prototype: CreatePipe</div>
-<p />
-
-</div> <a name="api:CreateProcess"></a>
- <div class="api">
-    <div class="api-entry">CreateProcess</div>
-
-    <div class="prototype">Prototype: CreateProcess</div>
-<p />
-
-</div><h4><a name="api:CreateProcessWithLogonW">CreateProcessWithLogonW</a>
- <a name="api:CreateSemaphore"></a>
- <div class="api">
-    <div class="api-entry">CreateSemaphore</div>
-
-    <div class="prototype">gpointer CreateSemaphore(WapiSecurityAttributes *security G_GNUC_UNUSED, gint32 initial, gint32 max, const gunichar2 *name)
-
-</div>
-<p />
-<b>Parameters</b>
-<blockquote><dt><i>security:</i></dt><dd> Ignored for now.</dd><dt><i>initial:</i></dt><dd> The initial count for the semaphore.  The value must be</dd></blockquote>
-<b>Remarks</b>
-<p />	 greater than or equal to zero, and less than or equal to <i>max</i>. 
-	 <i>max</i>: The maximum count for this semaphore.  The value must be
-	 greater than zero.
-	 <i>name</i>: Pointer to a string specifying the name of this semaphore,
-	 or %NULL.  Currently ignored.
-	
-	 Creates a new semaphore handle.  A semaphore is signalled when its
-	 count is greater than zero, and unsignalled otherwise.  The count
-	 is decreased by one whenever a wait function releases a thread that
-	 was waiting for the semaphore.  The count is increased by calling
-	 ReleaseSemaphore().
-	
-	 Return value: a new handle, or NULL
-
-</div> <a name="api:CreateThread"></a>
- <div class="api">
-    <div class="api-entry">CreateThread</div>
-
-    <div class="prototype">gpointer CreateThread(WapiSecurityAttributes *security G_GNUC_UNUSED, guint32 stacksize,
-		      WapiThreadStart start, gpointer param, guint32 create,
-		      gsize *tid) 
-
-</div>
-<p />
-<b>Parameters</b>
-<blockquote><dt><i>security:</i></dt><dd> Ignored for now.</dd><dt><i>stacksize:</i></dt><dd> the size in bytes of the new thread's stack. Use 0 to</dd></blockquote>
-<b>Remarks</b>
-<p />	 default to the normal stack size. (Ignored for now). 
-	 <i>start</i>: The function that the new thread should start with
-	 <i>param</i>: The parameter to give to <i>start</i>.
-	 <i>create</i>: If 0, the new thread is ready to run immediately.  If
-	 %CREATE_SUSPENDED, the new thread will be in the suspended state,
-	 requiring a ResumeThread() call to continue running.
-	 <i>tid</i>: If non-NULL, the ID of the new thread is stored here.  NB
-	 this is defined as a DWORD (ie 32bit) in the MS API, but we need to
-	 cope with 64 bit IDs for s390x and amd64.
-	
-	 Creates a new threading handle.
-	
-	 Return value: a new handle, or NULL
-
-</div> <a name="api:DeleteCriticalSection"></a>
- <div class="api">
-    <div class="api-entry">DeleteCriticalSection</div>
-
-    <div class="prototype">void DeleteCriticalSection(WapiCriticalSection *section)
-
-</div>
-<p />
-<b>Parameters</b>
-<blockquote><dt><i>section:</i></dt><dd> The critical section to delete.</dd></blockquote>
-<b>Remarks</b>
-<p />	 
-	 Releases all resources owned by critical section <i>section</i>.
-
-</div> <a name="api:DeleteFile"></a>
- <div class="api">
-    <div class="api-entry">DeleteFile</div>
-
-    <div class="prototype">gboolean DeleteFile(const gunichar2 *name)
-
-</div>
-<p />
-<b>Parameters</b>
-<blockquote><dt><i>name:</i></dt><dd> a pointer to a NULL-terminated unicode string, that names</dd></blockquote>
-<b>Remarks</b>
-<p />	 the file to be deleted. 
-	
-	 Deletes file <i>name</i>.
-	
-	 Return value: %TRUE on success, %FALSE otherwise.
-
-</div><h4><a name="api:DuplicateHandle">DuplicateHandle</a>
- <a name="api:EnterCriticalSection"></a>
- <div class="api">
-    <div class="api-entry">EnterCriticalSection</div>
-
-    <div class="prototype">Prototype: EnterCriticalSection</div>
-<p />
-
-</div> <a name="api:EnumProcesses"></a>
- <div class="api">
-    <div class="api-entry">EnumProcesses</div>
-
-    <div class="prototype">Prototype: EnumProcesses</div>
-<p />
-
-</div> <a name="api:EnumProcessModules"></a>
- <div class="api">
-    <div class="api-entry">EnumProcessModules</div>
-
-    <div class="prototype">Prototype: EnumProcessModules</div>
-<p />
-
-</div> <a name="api:errno_to_WSA"></a>
- <div class="api">
-    <div class="api-entry">errno_to_WSA</div>
-
-    <div class="prototype">Prototype: errno_to_WSA</div>
-<p />
-
-</div> <a name="api:ExitThread"></a>
- <div class="api">
-    <div class="api-entry">ExitThread</div>
-
-    <div class="prototype">void ExitThread(guint32 exitcode)
-
-</div>
-<p />
-<b>Parameters</b>
-<blockquote><dt><i>exitcode:</i></dt><dd> Sets the thread's exit code, which can be read from</dd></blockquote>
-<b>Remarks</b>
-<p />	 another thread with GetExitCodeThread(). 
-	
-	 Terminates the calling thread.  A thread can also exit by returning
-	 from its start function. When the last thread in a process
-	 terminates, the process itself terminates.
-
-</div> <a name="api:FileTimeToSystemTime"></a>
- <div class="api">
-    <div class="api-entry">FileTimeToSystemTime</div>
-
-    <div class="prototype">gboolean FileTimeToSystemTime(const WapiFileTime *file_time,
-			      WapiSystemTime *system_time)
-
-</div>
-<p />
-<b>Parameters</b>
-<blockquote><dt><i>file_time:</i></dt><dd> Points to a %WapiFileTime structure that contains the</dd></blockquote>
-<b>Remarks</b>
-<p />	 number of ticks to convert. 
-	 <i>system_time</i>: Points to a %WapiSystemTime structure to receive the
-	 broken-out time.
-	
-	 Converts a tick count into broken-out time values.
-	
-	 Return value: %TRUE on success, %FALSE otherwise.
-
-</div> <a name="api:FindClose"></a>
- <div class="api">
-    <div class="api-entry">FindClose</div>
-
-    <div class="prototype">gboolean FindClose (gpointer handle)
-
-</div>
-<p />
-<b>Parameters</b>
-<blockquote><dt><i>wapi_handle:</i></dt><dd> the find handle to close.</dd></blockquote>
-<b>Remarks</b>
-<p />	 
-	 Closes find handle <i>wapi_handle</i>
-	
-	 Return value: %TRUE on success, %FALSE otherwise.
-
-</div> <a name="api:FindFirstFile"></a>
- <div class="api">
-    <div class="api-entry">FindFirstFile</div>
-
-    <div class="prototype">Prototype: FindFirstFile</div>
-<p />
-
-</div> <a name="api:FindNextFile"></a>
- <div class="api">
-    <div class="api-entry">FindNextFile</div>
-
-    <div class="prototype">Prototype: FindNextFile</div>
-<p />
-
-</div> <a name="api:FlushFileBuffers"></a>
- <div class="api">
-    <div class="api-entry">FlushFileBuffers</div>
-
-    <div class="prototype">gboolean FlushFileBuffers(gpointer handle)
-
-</div>
-<p />
-<b>Parameters</b>
-<blockquote><dt><i>handle:</i></dt><dd> Handle to open file.  The handle must have</dd></blockquote>
-<b>Remarks</b>
-<p />	 %GENERIC_WRITE access. 
-	
-	 Flushes buffers of the file and causes all unwritten data to
-	 be written.
-	
-	 Return value: %TRUE on success, %FALSE otherwise.
-
-</div><h4><a name="api:FormatMessage">FormatMessage</a>
- <a name="api:GetCurrentDirectory"></a>
- <div class="api">
-    <div class="api-entry">GetCurrentDirectory</div>
-
-    <div class="prototype">extern guint32 GetCurrentDirectory (guint32 length, gunichar2 *buffer)
-
-</div>
-<p />
-<b>Parameters</b>
-<blockquote><dt><i>length:</i></dt><dd> size of the buffer</dd><dt><i>buffer:</i></dt><dd> pointer to buffer that recieves path</dd></blockquote>
-<b>Remarks</b>
-<p />	 
-	 Retrieves the current directory for the current process.
-	
-	 Return value: number of characters in buffer on success, zero on failure
-
-</div> <a name="api:GetCurrentProcess"></a>
- <div class="api">
-    <div class="api-entry">GetCurrentProcess</div>
-
-    <div class="prototype">Prototype: GetCurrentProcess</div>
-<p />
-
-</div> <a name="api:GetCurrentProcessId"></a>
- <div class="api">
-    <div class="api-entry">GetCurrentProcessId</div>
-
-    <div class="prototype">Prototype: GetCurrentProcessId</div>
-<p />
-
-</div> <a name="api:GetCurrentThread"></a>
- <div class="api">
-    <div class="api-entry">GetCurrentThread</div>
-
-    <div class="prototype">gpointer GetCurrentThread(void)
-
-</div>
-<p />
-<b>Remarks</b>
-<p />	 
-	 Looks up the handle associated with the current thread.  Under
-	 Windows this is a pseudohandle, and must be duplicated with
-	 DuplicateHandle() for some operations.
-	
-	 Return value: The current thread handle, or %NULL on failure.
-	 (Unknown whether Windows has a possible failure here.  It may be
-	 necessary to implement the pseudohandle-constant behaviour).
-
-</div> <a name="api:GetCurrentThreadId"></a>
- <div class="api">
-    <div class="api-entry">GetCurrentThreadId</div>
-
-    <div class="prototype">gsize GetCurrentThreadId(void)
-
-</div>
-<p />
-<b>Remarks</b>
-<p />	 
-	 Looks up the thread ID of the current thread.  This ID can be
-	 passed to OpenThread() to create a new handle on this thread.
-	
-	 Return value: the thread ID.  NB this is defined as DWORD (ie 32
-	 bit) in the MS API, but we need to cope with 64 bit IDs for s390x
-	 and amd64.  This doesn't really break the API, it just embraces and
-	 extends it on 64bit platforms :)
-
-</div><h4><a name="api:GetDiskFreeSpaceEx">GetDiskFreeSpaceEx</a>
-<h4><a name="api:GetDriveType">GetDriveType</a>
- <a name="api:GetExitCodeProcess"></a>
- <div class="api">
-    <div class="api-entry">GetExitCodeProcess</div>
-
-    <div class="prototype">Prototype: GetExitCodeProcess</div>
-<p />
-
-</div> <a name="api:GetExitCodeThread"></a>
- <div class="api">
-    <div class="api-entry">GetExitCodeThread</div>
-
-    <div class="prototype">gboolean GetExitCodeThread(gpointer handle, guint32 *exitcode)
-
-</div>
-<p />
-<b>Parameters</b>
-<blockquote><dt><i>handle:</i></dt><dd> The thread handle to query</dd><dt><i>exitcode:</i></dt><dd> The thread <i>handle</i> exit code is stored here</dd></blockquote>
-<b>Remarks</b>
-<p />	 
-	 Finds the exit code of <i>handle</i>, and stores it in <i>exitcode</i>.  If the
-	 thread <i>handle</i> is still running, the value stored is %STILL_ACTIVE.
-	
-	 Return value: %TRUE, or %FALSE on error.
-
-</div> <a name="api:GetFileAttributesEx"></a>
- <div class="api">
-    <div class="api-entry">GetFileAttributesEx</div>
-
-    <div class="prototype">gboolean GetFileAttributesEx (const gunichar2 *name, WapiGetFileExInfoLevels level, gpointer info)
-
-</div>
-<p />
-<b>Parameters</b>
-<blockquote><dt><i>name:</i></dt><dd> a pointer to a NULL-terminated unicode filename.</dd><dt><i>level:</i></dt><dd> must be GetFileExInfoStandard</dd><dt><i>info:</i></dt><dd> pointer to a WapiFileAttributesData structure</dd></blockquote>
-<b>Remarks</b>
-<p />	 
-	 Gets attributes, size and filetimes for <i>name</i>;
-	
-	 Return value: %TRUE on success, %FALSE on failure
-
-</div> <a name="api:GetFileAttributes"></a>
- <div class="api">
-    <div class="api-entry">GetFileAttributes</div>
-
-    <div class="prototype">guint32 GetFileAttributes (const gunichar2 *name)
-
-</div>
-<p />
-<b>Parameters</b>
-<blockquote><dt><i>name:</i></dt><dd> a pointer to a NULL-terminated unicode filename.</dd></blockquote>
-<b>Remarks</b>
-<p />	 
-	 Gets the attributes for <i>name</i>;
-	
-	 Return value: %INVALID_FILE_ATTRIBUTES on failure
-
-</div> <a name="api:GetFileSize"></a>
- <div class="api">
-    <div class="api-entry">GetFileSize</div>
-
-    <div class="prototype">guint32 GetFileSize(gpointer handle, guint32 *highsize)
-
-</div>
-<p />
-<b>Parameters</b>
-<blockquote><dt><i>handle:</i></dt><dd> The file handle to query.  The handle must have</dd></blockquote>
-<b>Remarks</b>
-<p />	 %GENERIC_READ or %GENERIC_WRITE access. 
-	 <i>highsize</i>: If non-%NULL, the high 32 bits of the file size are
-	 stored here.
-	
-	 Retrieves the size of the file <i>handle</i>.
-	
-	 If the library is compiled without large file support, <i>highsize</i>
-	 has its value set to zero on a successful return.
-	
-	 Return value: On success, the low 32 bits of the file size.  If
-	 <i>highsize</i> is non-%NULL then the high 32 bits of the file size are
-	 stored here.  On failure %INVALID_FILE_SIZE is returned.
-
-</div> <a name="api:GetFileTime"></a>
- <div class="api">
-    <div class="api-entry">GetFileTime</div>
-
-    <div class="prototype">gboolean GetFileTime(gpointer handle, WapiFileTime *create_time,
-		     WapiFileTime *last_access, WapiFileTime *last_write)
-
-</div>
-<p />
-<b>Parameters</b>
-<blockquote><dt><i>handle:</i></dt><dd> The file handle to query.  The handle must have</dd></blockquote>
-<b>Remarks</b>
-<p />	 %GENERIC_READ access. 
-	 <i>create_time</i>: Points to a %WapiFileTime structure to receive the
-	 number of ticks since the epoch that file was created.  May be
-	 %NULL.
-	 <i>last_access</i>: Points to a %WapiFileTime structure to receive the
-	 number of ticks since the epoch when file was last accessed.  May be
-	 %NULL.
-	 <i>last_write</i>: Points to a %WapiFileTime structure to receive the
-	 number of ticks since the epoch when file was last written to.  May
-	 be %NULL.
-	
-	 Finds the number of ticks since the epoch that the file referenced
-	 by <i>handle</i> was created, last accessed and last modified.  A tick is
-	 a 100 nanosecond interval.  The epoch is Midnight, January 1 1601
-	 GMT.
-	
-	 Create time isn't recorded on POSIX file systems or reported by
-	 stat(2), so that time is guessed by returning the oldest of the
-	 other times.
-	
-	 Return value: %TRUE on success, %FALSE otherwise.
-
-</div> <a name="api:GetFileType"></a>
- <div class="api">
-    <div class="api-entry">GetFileType</div>
-
-    <div class="prototype">WapiFileType GetFileType(gpointer handle)
-
-</div>
-<p />
-<b>Parameters</b>
-<blockquote><dt><i>handle:</i></dt><dd> The file handle to test.</dd></blockquote>
-<b>Remarks</b>
-<p />	 
-	 Finds the type of file <i>handle</i>.
-	
-	 Return value: %FILE_TYPE_UNKNOWN - the type of the file <i>handle</i> is
-	 unknown.  %FILE_TYPE_DISK - <i>handle</i> is a disk file.
-	 %FILE_TYPE_CHAR - <i>handle</i> is a character device, such as a console.
-	 %FILE_TYPE_PIPE - <i>handle</i> is a named or anonymous pipe.
-
-</div><h4><a name="api:GetFileVersionInfo">GetFileVersionInfo</a>
-<h4><a name="api:GetFileVersionInfoSize">GetFileVersionInfoSize</a>
- <a name="api:GetLastError"></a>
- <div class="api">
-    <div class="api-entry">GetLastError</div>
-
-    <div class="prototype">guint32 GetLastError(void)
-
-</div>
-<p />
-<b>Remarks</b>
-<p />	 
-	 Retrieves the last error that occurred in the calling thread.
-	
-	 Return value: The error code for the last error that happened on
-	 the calling thread.
-
-</div> <a name="api:GetLogicalDriveStrings"></a>
- <div class="api">
-    <div class="api-entry">GetLogicalDriveStrings</div>
-
-    <div class="prototype">Prototype: GetLogicalDriveStrings</div>
-<p />
-
-</div> <a name="api:GetModuleBaseName"></a>
- <div class="api">
-    <div class="api-entry">GetModuleBaseName</div>
-
-    <div class="prototype">Prototype: GetModuleBaseName</div>
-<p />
-
-</div><h4><a name="api:GetModuleFileNameEx">GetModuleFileNameEx</a>
-<h4><a name="api:GetModuleInformation">GetModuleInformation</a>
-<h4><a name="api:GetPriorityClass">GetPriorityClass</a>
- <a name="api:GetProcessId"></a>
- <div class="api">
-    <div class="api-entry">GetProcessId</div>
-
-    <div class="prototype">Prototype: GetProcessId</div>
-<p />
-
-</div> <a name="api:GetProcessTimes"></a>
- <div class="api">
-    <div class="api-entry">GetProcessTimes</div>
-
-    <div class="prototype">Prototype: GetProcessTimes</div>
-<p />
-
-</div> <a name="api:GetProcessWorkingSetSize"></a>
- <div class="api">
-    <div class="api-entry">GetProcessWorkingSetSize</div>
-
-    <div class="prototype">Prototype: GetProcessWorkingSetSize</div>
-<p />
-
-</div> <a name="api:GetStdHandle"></a>
- <div class="api">
-    <div class="api-entry">GetStdHandle</div>
-
-    <div class="prototype">
-static mono_mutex_t stdhandle_mutex = MONO_MUTEX_INITIALIZER;
-
-gpointer GetStdHandle(WapiStdHandle stdhandle)
-
-</div>
-<p />
-<b>Parameters</b>
-<blockquote><dt><i>stdhandle:</i></dt><dd> specifies the file descriptor</dd></blockquote>
-<b>Remarks</b>
-<p />	 
-	 Returns a handle for stdin, stdout, or stderr.  Always returns the
-	 same handle for the same <i>stdhandle</i>.
-	
-	 Return value: the handle, or %INVALID_HANDLE_VALUE on error
-
-</div> <a name="api:GetSystemInfo"></a>
- <div class="api">
-    <div class="api-entry">GetSystemInfo</div>
-
-    <div class="prototype">Prototype: GetSystemInfo</div>
-<p />
-
-</div> <a name="api:GetTempPath"></a>
- <div class="api">
-    <div class="api-entry">GetTempPath</div>
-
-    <div class="prototype">Prototype: GetTempPath</div>
-<p />
-
-</div> <a name="api:GetThreadContext"></a>
- <div class="api">
-    <div class="api-entry">GetThreadContext</div>
-
-    <div class="prototype">Prototype: GetThreadContext</div>
-<p />
-
-</div> <a name="api:GetTickCount"></a>
- <div class="api">
-    <div class="api-entry">GetTickCount</div>
-
-    <div class="prototype">Prototype: GetTickCount</div>
-<p />
-
-</div> <a name="api:ImpersonateLoggedOnUser"></a>
- <div class="api">
-    <div class="api-entry">ImpersonateLoggedOnUser</div>
-
-    <div class="prototype">Prototype: ImpersonateLoggedOnUser</div>
-<p />
-
-</div> <a name="api:InitializeCriticalSectionAndSpinCount"></a>
- <div class="api">
-    <div class="api-entry">InitializeCriticalSectionAndSpinCount</div>
-
-    <div class="prototype">gboolean InitializeCriticalSectionAndSpinCount(WapiCriticalSection *section,
-					       guint32 spincount G_GNUC_UNUSED)
-
-</div>
-<p />
-<b>Parameters</b>
-<blockquote><dt><i>section:</i></dt><dd> The critical section to initialise.</dd><dt><i>spincount:</i></dt><dd> The spin count for this critical section.  Not</dd></blockquote>
-<b>Remarks</b>
-<p />	 currently used. 
-	
-	 Initialises a critical section and sets the spin count.  This
-	 implementation just calls InitializeCriticalSection().
-	
-	 Return value: %TRUE on success, %FALSE otherwise.  (%FALSE never
-	 happens).
-
-</div> <a name="api:InitializeCriticalSection"></a>
- <div class="api">
-    <div class="api-entry">InitializeCriticalSection</div>
-
-    <div class="prototype">void InitializeCriticalSection(WapiCriticalSection *section)
-
-</div>
-<p />
-<b>Parameters</b>
-<blockquote><dt><i>section:</i></dt><dd> The critical section to initialise</dd></blockquote>
-<b>Remarks</b>
-<p />	 
-	 Initialises a critical section.
-
-</div> <a name="api:ioctlsocket"></a>
- <div class="api">
-    <div class="api-entry">ioctlsocket</div>
-
-    <div class="prototype">Prototype: ioctlsocket</div>
-<p />
-
-</div> <a name="api:LeaveCriticalSection"></a>
- <div class="api">
-    <div class="api-entry">LeaveCriticalSection</div>
-
-    <div class="prototype">Prototype: LeaveCriticalSection</div>
-<p />
-
-</div> <a name="api:LockFile"></a>
- <div class="api">
-    <div class="api-entry">LockFile</div>
-
-    <div class="prototype">Prototype: LockFile</div>
-<p />
-
-</div> <a name="api:MoveFile"></a>
- <div class="api">
-    <div class="api-entry">MoveFile</div>
-
-    <div class="prototype">gboolean MoveFile (const gunichar2 *name, const gunichar2 *dest_name)
-
-</div>
-<p />
-<b>Parameters</b>
-<blockquote><dt><i>name:</i></dt><dd> a pointer to a NULL-terminated unicode string, that names</dd></blockquote>
-<b>Remarks</b>
-<p />	 the file to be moved. 
-	 <i>dest_name</i>: a pointer to a NULL-terminated unicode string, that is the
-	 new name for the file.
-	
-	 Renames file <i>name</i> to <i>dest_name</i>.
-	 MoveFile sets ERROR_ALREADY_EXISTS if the destination exists, except
-	 when it is the same file as the source.  In that case it silently succeeds.
-	
-	 Return value: %TRUE on success, %FALSE otherwise.
-
-</div> <a name="api:OpenEvent"></a>
- <div class="api">
-    <div class="api-entry">OpenEvent</div>
-
-    <div class="prototype">Prototype: OpenEvent</div>
-<p />
-
-</div> <a name="api:OpenMutex"></a>
- <div class="api">
-    <div class="api-entry">OpenMutex</div>
-
-    <div class="prototype">Prototype: OpenMutex</div>
-<p />
-
-</div> <a name="api:OpenProcess"></a>
- <div class="api">
-    <div class="api-entry">OpenProcess</div>
-
-    <div class="prototype">Prototype: OpenProcess</div>
-<p />
-
-</div> <a name="api:OpenSemaphore"></a>
- <div class="api">
-    <div class="api-entry">OpenSemaphore</div>
-
-    <div class="prototype">Prototype: OpenSemaphore</div>
-<p />
-
-</div> <a name="api:OpenThread"></a>
- <div class="api">
-    <div class="api-entry">OpenThread</div>
-
-    <div class="prototype">Prototype: OpenThread</div>
-<p />
-
-</div> <a name="api:PulseEvent"></a>
- <div class="api">
-    <div class="api-entry">PulseEvent</div>
-
-    <div class="prototype">gboolean PulseEvent(gpointer handle)
-
-</div>
-<p />
-<b>Parameters</b>
-<blockquote><dt><i>handle:</i></dt><dd> The event handle.</dd></blockquote>
-<b>Remarks</b>
-<p />	 
-	 Sets the event handle <i>handle</i> to the signalled state, and then
-	 resets it to unsignalled after informing any waiting threads.
-	
-	 If <i>handle</i> is a manual reset event, all waiting threads that can be
-	 released immediately are released.  <i>handle</i> is then reset.  If
-	 <i>handle</i> is an auto reset event, one waiting thread is released even
-	 if multiple threads are waiting.
-	
-	 Return value: %TRUE on success, %FALSE otherwise.  (Currently only
-	 ever returns %TRUE).
-
-</div> <a name="api:QueryPerformanceCounter"></a>
- <div class="api">
-    <div class="api-entry">QueryPerformanceCounter</div>
-
-    <div class="prototype">Prototype: QueryPerformanceCounter</div>
-<p />
-
-</div> <a name="api:QueryPerformanceFrequency"></a>
- <div class="api">
-    <div class="api-entry">QueryPerformanceFrequency</div>
-
-    <div class="prototype">Prototype: QueryPerformanceFrequency</div>
-<p />
-
-</div> <a name="api:QueueUserAPC"></a>
- <div class="api">
-    <div class="api-entry">QueueUserAPC</div>
-
-    <div class="prototype">Prototype: QueueUserAPC</div>
-<p />
-
-</div> <a name="api:ReadFile"></a>
- <div class="api">
-    <div class="api-entry">ReadFile</div>
-
-    <div class="prototype">gboolean ReadFile(gpointer handle, gpointer buffer, guint32 numbytes,
-		  guint32 *bytesread, WapiOverlapped *overlapped)
-
-</div>
-<p />
-<b>Parameters</b>
-<blockquote><dt><i>handle:</i></dt><dd> The file handle to read from.  The handle must have</dd></blockquote>
-<b>Remarks</b>
-<p />	 %GENERIC_READ access. 
-	 <i>buffer</i>: The buffer to store read data in
-	 <i>numbytes</i>: The maximum number of bytes to read
-	 <i>bytesread</i>: The actual number of bytes read is stored here.  This
-	 value can be zero if the handle is positioned at the end of the
-	 file.
-	 <i>overlapped</i>: points to a required %WapiOverlapped structure if
-	 <i>handle</i> has the %FILE_FLAG_OVERLAPPED option set, should be NULL
-	 otherwise.
-	
-	 If <i>handle</i> does not have the %FILE_FLAG_OVERLAPPED option set, this
-	 function reads up to <i>numbytes</i> bytes from the file from the current
-	 file position, and stores them in <i>buffer</i>.  If there are not enough
-	 bytes left in the file, just the amount available will be read.
-	 The actual number of bytes read is stored in <i>bytesread</i>.
-	
-	 If <i>handle</i> has the %FILE_FLAG_OVERLAPPED option set, the current
-	 file position is ignored and the read position is taken from data
-	 in the <i>overlapped</i> structure.
-	
-	 Return value: %TRUE if the read succeeds (even if no bytes were
-	 read due to an attempt to read past the end of the file), %FALSE on
-	 error.
-
-</div> <a name="api:ReleaseMutex"></a>
- <div class="api">
-    <div class="api-entry">ReleaseMutex</div>
-
-    <div class="prototype">gboolean ReleaseMutex(gpointer handle)
-
-</div>
-<p />
-<b>Parameters</b>
-<blockquote><dt><i>handle:</i></dt><dd> The mutex handle.</dd></blockquote>
-<b>Remarks</b>
-<p />	 
-	 Releases ownership if the mutex handle <i>handle</i>.
-	
-	 Return value: %TRUE on success, %FALSE otherwise.  This function
-	 fails if the calling thread does not own the mutex <i>handle</i>.
-
-</div> <a name="api:ReleaseSemaphore"></a>
- <div class="api">
-    <div class="api-entry">ReleaseSemaphore</div>
-
-    <div class="prototype">gboolean ReleaseSemaphore(gpointer handle, gint32 count, gint32 *prevcount)
-
-</div>
-<p />
-<b>Parameters</b>
-<blockquote><dt><i>handle:</i></dt><dd> The semaphore handle to release.</dd><dt><i>count:</i></dt><dd> The amount by which the semaphore's count should be</dd></blockquote>
-<b>Remarks</b>
-<p />	 increased. 
-	 <i>prevcount</i>: Pointer to a location to store the previous count of
-	 the semaphore, or %NULL.
-	
-	 Increases the count of semaphore <i>handle</i> by <i>count</i>.
-	
-	 Return value: %TRUE on success, %FALSE otherwise.
-
-</div> <a name="api:RemoveDirectory"></a>
- <div class="api">
-    <div class="api-entry">RemoveDirectory</div>
-
-    <div class="prototype">gboolean RemoveDirectory (const gunichar2 *name)
-
-</div>
-<p />
-<b>Parameters</b>
-<blockquote><dt><i>name:</i></dt><dd> a pointer to a NULL-terminated unicode string, that names</dd></blockquote>
-<b>Remarks</b>
-<p />	 the directory to be removed. 
-	
-	 Removes directory <i>name</i>
-	
-	 Return value: %TRUE on success, %FALSE otherwise.
-
-</div><h4><a name="api:ReplaceFile">ReplaceFile</a>
- <a name="api:ResetEvent"></a>
- <div class="api">
-    <div class="api-entry">ResetEvent</div>
-
-    <div class="prototype">gboolean ResetEvent(gpointer handle)
-
-</div>
-<p />
-<b>Parameters</b>
-<blockquote><dt><i>handle:</i></dt><dd> The event handle.</dd></blockquote>
-<b>Remarks</b>
-<p />	 
-	 Resets the event handle <i>handle</i> to the unsignalled state.
-	
-	 Return value: %TRUE on success, %FALSE otherwise.  (Currently only
-	 ever returns %TRUE).
-
-</div> <a name="api:ResumeThread"></a>
- <div class="api">
-    <div class="api-entry">ResumeThread</div>
-
-    <div class="prototype">guint32 ResumeThread(gpointer handle)
-
-</div>
-<p />
-<b>Parameters</b>
-<blockquote><dt><i>handle:</i></dt><dd> the thread handle to resume</dd></blockquote>
-<b>Remarks</b>
-<p />	 
-	 Decrements the suspend count of thread <i>handle</i>. A thread can only
-	 run if its suspend count is zero.
-	
-	 Return value: the previous suspend count, or 0xFFFFFFFF on error.
-
-</div> <a name="api:RevertToSelf"></a>
- <div class="api">
-    <div class="api-entry">RevertToSelf</div>
-
-    <div class="prototype">Prototype: RevertToSelf</div>
-<p />
-
-</div> <a name="api:SetCriticalSectionSpinCount"></a>
- <div class="api">
-    <div class="api-entry">SetCriticalSectionSpinCount</div>
-
-    <div class="prototype">guint32 SetCriticalSectionSpinCount(WapiCriticalSection *section G_GNUC_UNUSED, guint32 spincount G_GNUC_UNUSED)
-
-</div>
-<p />
-<b>Parameters</b>
-<blockquote><dt><i>section:</i></dt><dd> The critical section to set</dd><dt><i>spincount:</i></dt><dd> The new spin count for this critical section.  Not</dd></blockquote>
-<b>Remarks</b>
-<p />	 currently used. 
-	
-	 Sets the spin count for the critical section <i>section</i>.  The spin
-	 count is currently ignored, and set to zero.
-	
-	 Return value: The previous spin count.  (Currently always zero).
-
-</div> <a name="api:SetCurrentDirectory"></a>
- <div class="api">
-    <div class="api-entry">SetCurrentDirectory</div>
-
-    <div class="prototype">extern gboolean SetCurrentDirectory (const gunichar2 *path)
-
-</div>
-<p />
-<b>Parameters</b>
-<blockquote><dt><i>path:</i></dt><dd> path to new directory</dd></blockquote>
-<b>Remarks</b>
-<p />	 
-	 Changes the directory path for the current process.
-	
-	 Return value: %TRUE on success, %FALSE on failure.
-
-</div> <a name="api:SetEndOfFile"></a>
- <div class="api">
-    <div class="api-entry">SetEndOfFile</div>
-
-    <div class="prototype">gboolean SetEndOfFile(gpointer handle)
-
-</div>
-<p />
-<b>Parameters</b>
-<blockquote><dt><i>handle:</i></dt><dd> The file handle to set.  The handle must have</dd></blockquote>
-<b>Remarks</b>
-<p />	 %GENERIC_WRITE access. 
-	
-	 Moves the end-of-file position to the current position of the file
-	 pointer.  This function is used to truncate or extend a file.
-	
-	 Return value: %TRUE on success, %FALSE otherwise.
-
-</div> <a name="api:SetEvent"></a>
- <div class="api">
-    <div class="api-entry">SetEvent</div>
-
-    <div class="prototype">gboolean SetEvent(gpointer handle)
-
-</div>
-<p />
-<b>Parameters</b>
-<blockquote><dt><i>handle:</i></dt><dd> The event handle</dd></blockquote>
-<b>Remarks</b>
-<p />	 
-	 Sets the event handle <i>handle</i> to the signalled state.
-	
-	 If <i>handle</i> is a manual reset event, it remains signalled until it
-	 is reset with ResetEvent().  An auto reset event remains signalled
-	 until a single thread has waited for it, at which time <i>handle</i> is
-	 automatically reset to unsignalled.
-	
-	 Return value: %TRUE on success, %FALSE otherwise.  (Currently only
-	 ever returns %TRUE).
-
-</div> <a name="api:SetFileAttributes"></a>
- <div class="api">
-    <div class="api-entry">SetFileAttributes</div>
-
-    <div class="prototype">extern gboolean SetFileAttributes (const gunichar2 *name, guint32 attrs)
-
-</div>
-<p />
-<b>Parameters</b>
-<blockquote><dt><i>name:</i></dt><dd> name of file</dd><dt><i>attrs:</i></dt><dd> attributes to set</dd></blockquote>
-<b>Remarks</b>
-<p />	 
-	 Changes the attributes on a named file.
-	
-	 Return value: %TRUE on success, %FALSE on failure.
-
-</div> <a name="api:SetFilePointer"></a>
- <div class="api">
-    <div class="api-entry">SetFilePointer</div>
-
-    <div class="prototype">guint32 SetFilePointer(gpointer handle, gint32 movedistance,
-		       gint32 *highmovedistance, WapiSeekMethod method)
-
-</div>
-<p />
-<b>Parameters</b>
-<blockquote><dt><i>handle:</i></dt><dd> The file handle to set.  The handle must have</dd></blockquote>
-<b>Remarks</b>
-<p />	 %GENERIC_READ or %GENERIC_WRITE access. 
-	 <i>movedistance</i>: Low 32 bits of a signed value that specifies the
-	 number of bytes to move the file pointer.
-	 <i>highmovedistance</i>: Pointer to the high 32 bits of a signed value
-	 that specifies the number of bytes to move the file pointer, or
-	 %NULL.
-	 <i>method</i>: The starting point for the file pointer move.
-	
-	 Sets the file pointer of an open file.
-	
-	 The distance to move the file pointer is calculated from
-	 <i>movedistance</i> and <i>highmovedistance</i>: If <i>highmovedistance</i> is %NULL,
-	 <i>movedistance</i> is the 32-bit signed value; otherwise, <i>movedistance</i>
-	 is the low 32 bits and <i>highmovedistance</i> a pointer to the high 32
-	 bits of a 64 bit signed value.  A positive distance moves the file
-	 pointer forward from the position specified by <i>method</i>; a negative
-	 distance moves the file pointer backward.
-	
-	 If the library is compiled without large file support,
-	 <i>highmovedistance</i> is ignored and its value is set to zero on a
-	 successful return.
-	
-	 Return value: On success, the low 32 bits of the new file pointer.
-	 If <i>highmovedistance</i> is not %NULL, the high 32 bits of the new file
-	 pointer are stored there.  On failure, %INVALID_SET_FILE_POINTER.
-
-</div> <a name="api:SetFileTime"></a>
- <div class="api">
-    <div class="api-entry">SetFileTime</div>
-
-    <div class="prototype">gboolean SetFileTime(gpointer handle, const WapiFileTime *create_time,
-		     const WapiFileTime *last_access,
-		     const WapiFileTime *last_write)
-
-</div>
-<p />
-<b>Parameters</b>
-<blockquote><dt><i>handle:</i></dt><dd> The file handle to set.  The handle must have</dd></blockquote>
-<b>Remarks</b>
-<p />	 %GENERIC_WRITE access. 
-	 <i>create_time</i>: Points to a %WapiFileTime structure that contains the
-	 number of ticks since the epoch that the file was created.  May be
-	 %NULL.
-	 <i>last_access</i>: Points to a %WapiFileTime structure that contains the
-	 number of ticks since the epoch when the file was last accessed.
-	 May be %NULL.
-	 <i>last_write</i>: Points to a %WapiFileTime structure that contains the
-	 number of ticks since the epoch when the file was last written to.
-	 May be %NULL.
-	
-	 Sets the number of ticks since the epoch that the file referenced
-	 by <i>handle</i> was created, last accessed or last modified.  A tick is
-	 a 100 nanosecond interval.  The epoch is Midnight, January 1 1601
-	 GMT.
-	
-	 Create time isn't recorded on POSIX file systems, and is ignored.
-	
-	 Return value: %TRUE on success, %FALSE otherwise.
-
-</div> <a name="api:SetLastError"></a>
- <div class="api">
-    <div class="api-entry">SetLastError</div>
-
-    <div class="prototype">void SetLastError(guint32 code)
-
-</div>
-<p />
-<b>Parameters</b>
-<blockquote><dt><i>code:</i></dt><dd> The error code.</dd></blockquote>
-<b>Remarks</b>
-<p />	 
-	 Sets the error code in the calling thread.
-
-</div><h4><a name="api:SetPriorityClass">SetPriorityClass</a>
- <a name="api:SetProcessWorkingSetSize"></a>
- <div class="api">
-    <div class="api-entry">SetProcessWorkingSetSize</div>
-
-    <div class="prototype">Prototype: SetProcessWorkingSetSize</div>
-<p />
-
-</div> <a name="api:ShellExecuteEx"></a>
- <div class="api">
-    <div class="api-entry">ShellExecuteEx</div>
-
-    <div class="prototype">Prototype: ShellExecuteEx</div>
-<p />
-
-</div> <a name="api:SignalObjectAndWait"></a>
- <div class="api">
-    <div class="api-entry">SignalObjectAndWait</div>
-
-    <div class="prototype">guint32 SignalObjectAndWait(gpointer signal_handle, gpointer wait,
-			    guint32 timeout, gboolean alertable)
-
-</div>
-<p />
-<b>Parameters</b>
-<blockquote><dt><i>signal_handle:</i></dt><dd> An object to signal</dd><dt><i>wait:</i></dt><dd> An object to wait for</dd><dt><i>timeout:</i></dt><dd> The maximum time in milliseconds to wait for</dd><dt><i>alertable:</i></dt><dd> Specifies whether the function returnes when the system</dd></blockquote>
-<b>Remarks</b>
-<p />	 queues an I/O completion routine or an APC for the calling thread. 
-	
-	 Atomically signals <i>signal</i> and waits for <i>wait</i> to become signalled,
-	 or <i>timeout</i> ms elapses.  If <i>timeout</i> is zero, the object's state is
-	 tested and the function returns immediately.  If <i>timeout</i> is
-	 %INFINITE, the function waits forever.
-	
-	 <i>signal</i> can be a semaphore, mutex or event object.
-	
-	 If <i>alertable</i> is %TRUE and the system queues an I/O completion
-	 routine or an APC for the calling thread, the function returns and
-	 the thread calls the completion routine or APC function.  If
-	 %FALSE, the function does not return, and the thread does not call
-	 the completion routine or APC function.  A completion routine is
-	 queued when the ReadFileEx() or WriteFileEx() function in which it
-	 was specified has completed.  The calling thread is the thread that
-	 initiated the read or write operation.  An APC is queued when
-	 QueueUserAPC() is called.  Currently completion routines and APC
-	 functions are not supported.
-	
-	 Return value: %WAIT_ABANDONED - <i>wait</i> is a mutex that was not
-	 released by the owning thread when it exited.  Ownershop of the
-	 mutex object is granted to the calling thread and the mutex is set
-	 to nonsignalled.  %WAIT_IO_COMPLETION - the wait was ended by one
-	 or more user-mode asynchronous procedure calls queued to the
-	 thread.  %WAIT_OBJECT_0 - The state of <i>wait</i> is signalled.
-	 %WAIT_TIMEOUT - The <i>timeout</i> interval elapsed and <i>wait</i>'s state is
-	 still not signalled.  %WAIT_FAILED - an error occurred.
-
-</div> <a name="api:SleepEx"></a>
- <div class="api">
-    <div class="api-entry">SleepEx</div>
-
-    <div class="prototype">guint32 SleepEx(guint32 ms, gboolean alertable)
-
-</div>
-<p />
-<b>Parameters</b>
-<blockquote><dt><i>ms:</i></dt><dd> The time in milliseconds to suspend for</dd><dt><i>alertable:</i></dt><dd> if TRUE, the wait can be interrupted by an APC call</dd></blockquote>
-<b>Remarks</b>
-<p />	 
-	 Suspends execution of the current thread for <i>ms</i> milliseconds.  A
-	 value of zero causes the thread to relinquish its time slice.  A
-	 value of %INFINITE causes an infinite delay.
-
-</div> <a name="api:Sleep"></a>
- <div class="api">
-    <div class="api-entry">Sleep</div>
-
-    <div class="prototype">Prototype: Sleep</div>
-<p />
-
-</div> <a name="api:SuspendThread"></a>
- <div class="api">
-    <div class="api-entry">SuspendThread</div>
-
-    <div class="prototype">guint32 SuspendThread(gpointer handle)
-
-</div>
-<p />
-<b>Parameters</b>
-<blockquote><dt><i>handle:</i></dt><dd> the thread handle to suspend</dd></blockquote>
-<b>Remarks</b>
-<p />	 
-	 Increments the suspend count of thread <i>handle</i>. A thread can only
-	 run if its suspend count is zero.
-	
-	 Return value: the previous suspend count, or 0xFFFFFFFF on error.
-
-</div> <a name="api:TerminateProcess"></a>
- <div class="api">
-    <div class="api-entry">TerminateProcess</div>
-
-    <div class="prototype">Prototype: TerminateProcess</div>
-<p />
-
-</div> <a name="api:TlsAlloc"></a>
- <div class="api">
-    <div class="api-entry">TlsAlloc</div>
-
-    <div class="prototype">guint32 TlsAlloc(void)
-
-</div>
-<p />
-<b>Remarks</b>
-<p />	 
-	 Allocates a Thread Local Storage (TLS) index.  Any thread in the
-	 same process can use this index to store and retrieve values that
-	 are local to that thread.
-	
-	 Return value: The index value, or %TLS_OUT_OF_INDEXES if no index
-	 is available.
-
-</div> <a name="api:TlsFree"></a>
- <div class="api">
-    <div class="api-entry">TlsFree</div>
-
-    <div class="prototype">gboolean TlsFree(guint32 idx)
-
-</div>
-<p />
-<b>Parameters</b>
-<blockquote><dt><i>idx:</i></dt><dd> The TLS index to free</dd></blockquote>
-<b>Remarks</b>
-<p />	 
-	 Releases a TLS index, making it available for reuse.  This call
-	 will delete any TLS data stored under index <i>idx</i> in all threads.
-	
-	 Return value: %TRUE on success, %FALSE otherwise.
-
-</div> <a name="api:TlsGetValue"></a>
- <div class="api">
-    <div class="api-entry">TlsGetValue</div>
-
-    <div class="prototype">gpointer TlsGetValue(guint32 idx)
-
-</div>
-<p />
-<b>Parameters</b>
-<blockquote><dt><i>idx:</i></dt><dd> The TLS index to retrieve</dd></blockquote>
-<b>Remarks</b>
-<p />	 
-	 Retrieves the TLS data stored under index <i>idx</i>.
-	
-	 Return value: The value stored in the TLS index <i>idx</i> in the current
-	 thread, or %NULL on error.  As %NULL can be a valid return value,
-	 in this case GetLastError() returns %ERROR_SUCCESS.
-
-</div> <a name="api:TlsSetValue"></a>
- <div class="api">
-    <div class="api-entry">TlsSetValue</div>
-
-    <div class="prototype">gboolean TlsSetValue(guint32 idx, gpointer value)
-
-</div>
-<p />
-<b>Parameters</b>
-<blockquote><dt><i>idx:</i></dt><dd> The TLS index to store</dd><dt><i>value:</i></dt><dd> The value to store under index <i>idx</i></dd></blockquote>
-<b>Remarks</b>
-<p />	 
-	 Stores <i>value</i> at TLS index <i>idx</i>.
-	
-	 Return value: %TRUE on success, %FALSE otherwise.
-
-</div><h4><a name="api:TransmitFile">TransmitFile</a>
- <a name="api:TryEnterCriticalSection"></a>
- <div class="api">
-    <div class="api-entry">TryEnterCriticalSection</div>
-
-    <div class="prototype">gboolean TryEnterCriticalSection(WapiCriticalSection *section)
-
-</div>
-<p />
-<b>Parameters</b>
-<blockquote><dt><i>section:</i></dt><dd> The critical section to try and enter</dd></blockquote>
-<b>Remarks</b>
-<p />	 
-	 Attempts to enter a critical section without blocking.  If
-	 successful the calling thread takes ownership of the critical
-	 section.
-	
-	 A thread can recursively call EnterCriticalSection() and
-	 TryEnterCriticalSection(), but must call LeaveCriticalSection() an
-	 equal number of times.
-	
-	 Return value: %TRUE if the thread successfully locked the critical
-	 section, %FALSE otherwise.
-
-</div> <a name="api:UnlockFile"></a>
- <div class="api">
-    <div class="api-entry">UnlockFile</div>
-
-    <div class="prototype">Prototype: UnlockFile</div>
-<p />
-
-</div><h4><a name="api:VerLanguageName">VerLanguageName</a>
-<h4><a name="api:VerQueryValue">VerQueryValue</a>
-<h4><a name="api:WaitForInputIdle">WaitForInputIdle</a>
- <a name="api:WaitForMultipleObjectsEx"></a>
- <div class="api">
-    <div class="api-entry">WaitForMultipleObjectsEx</div>
-
-    <div class="prototype">guint32 WaitForMultipleObjectsEx(guint32 numobjects, gpointer *handles,
-				 gboolean waitall, guint32 timeout,
-				 gboolean alertable)
-
-</div>
-<p />
-<b>Parameters</b>
-<blockquote><dt><i>numobjects:</i></dt><dd> The number of objects in <i>handles</i>. The maximum allowed</dd></blockquote>
-<b>Remarks</b>
-<p />	 is %MAXIMUM_WAIT_OBJECTS. 
-	 <i>handles</i>: An array of object handles.  Duplicates are not allowed.
-	 <i>waitall</i>: If %TRUE, this function waits until all of the handles
-	 are signalled.  If %FALSE, this function returns when any object is
-	 signalled.
-	 <i>timeout</i>: The maximum time in milliseconds to wait for.
-	 <i>alertable</i>: if TRUE, the wait can be interrupted by an APC call
-	
-<p />
-	 This function returns when either one or more of <i>handles</i> is
-	 signalled, or <i>timeout</i> ms elapses.  If <i>timeout</i> is zero, the state
-	 of each item of <i>handles</i> is tested and the function returns
-	 immediately.  If <i>timeout</i> is %INFINITE, the function waits forever.
-	
-	 Return value: %WAIT_OBJECT_0 to %WAIT_OBJECT_0 + <i>numobjects</i> - 1 -
-	 if <i>waitall</i> is %TRUE, indicates that all objects are signalled.  If
-	 <i>waitall</i> is %FALSE, the return value minus %WAIT_OBJECT_0 indicates
-	 the first index into <i>handles</i> of the objects that are signalled.
-	 %WAIT_ABANDONED_0 to %WAIT_ABANDONED_0 + <i>numobjects</i> - 1 - if
-	 <i>waitall</i> is %TRUE, indicates that all objects are signalled, and at
-	 least one object is an abandoned mutex object (See
-	 WaitForSingleObject() for a description of abandoned mutexes.)  If
-	 <i>waitall</i> is %FALSE, the return value minus %WAIT_ABANDONED_0
-	 indicates the first index into <i>handles</i> of an abandoned mutex.
-	 %WAIT_TIMEOUT - The <i>timeout</i> interval elapsed and no objects in
-	 <i>handles</i> are signalled.  %WAIT_FAILED - an error occurred.
-	 %WAIT_IO_COMPLETION - the wait was ended by an APC.
-
-</div> <a name="api:WaitForMultipleObjects"></a>
- <div class="api">
-    <div class="api-entry">WaitForMultipleObjects</div>
-
-    <div class="prototype">Prototype: WaitForMultipleObjects</div>
-<p />
-
-</div> <a name="api:WaitForSingleObjectEx"></a>
- <div class="api">
-    <div class="api-entry">WaitForSingleObjectEx</div>
-
-    <div class="prototype">guint32 WaitForSingleObjectEx(gpointer handle, guint32 timeout,
-			      gboolean alertable)
-
-</div>
-<p />
-<b>Parameters</b>
-<blockquote><dt><i>handle:</i></dt><dd> an object to wait for</dd><dt><i>timeout:</i></dt><dd> the maximum time in milliseconds to wait for</dd><dt><i>alertable:</i></dt><dd> if TRUE, the wait can be interrupted by an APC call</dd></blockquote>
-<b>Remarks</b>
-<p />	 
-	 This function returns when either <i>handle</i> is signalled, or <i>timeout</i>
-	 ms elapses.  If <i>timeout</i> is zero, the object's state is tested and
-	 the function returns immediately.  If <i>timeout</i> is %INFINITE, the
-	 function waits forever.
-	
-	 Return value: %WAIT_ABANDONED - <i>handle</i> is a mutex that was not
-	 released by the owning thread when it exited.  Ownership of the
-	 mutex object is granted to the calling thread and the mutex is set
-	 to nonsignalled.  %WAIT_OBJECT_0 - The state of <i>handle</i> is
-	 signalled.  %WAIT_TIMEOUT - The <i>timeout</i> interval elapsed and
-	 <i>handle</i>'s state is still not signalled.  %WAIT_FAILED - an error
-	 occurred. %WAIT_IO_COMPLETION - the wait was ended by an APC.
-
-</div> <a name="api:WaitForSingleObject"></a>
- <div class="api">
-    <div class="api-entry">WaitForSingleObject</div>
-
-    <div class="prototype">Prototype: WaitForSingleObject</div>
-<p />
-
-</div> <a name="api:WriteFile"></a>
- <div class="api">
-    <div class="api-entry">WriteFile</div>
-
-    <div class="prototype">gboolean WriteFile(gpointer handle, gconstpointer buffer, guint32 numbytes,
-		   guint32 *byteswritten, WapiOverlapped *overlapped)
-
-</div>
-<p />
-<b>Parameters</b>
-<blockquote><dt><i>handle:</i></dt><dd> The file handle to write to.  The handle must have</dd></blockquote>
-<b>Remarks</b>
-<p />	 %GENERIC_WRITE access. 
-	 <i>buffer</i>: The buffer to read data from.
-	 <i>numbytes</i>: The maximum number of bytes to write.
-	 <i>byteswritten</i>: The actual number of bytes written is stored here.
-	 If the handle is positioned at the file end, the length of the file
-	 is extended.  This parameter may be %NULL.
-	 <i>overlapped</i>: points to a required %WapiOverlapped structure if
-	 <i>handle</i> has the %FILE_FLAG_OVERLAPPED option set, should be NULL
-	 otherwise.
-	
-	 If <i>handle</i> does not have the %FILE_FLAG_OVERLAPPED option set, this
-	 function writes up to <i>numbytes</i> bytes from <i>buffer</i> to the file at
-	 the current file position.  If <i>handle</i> is positioned at the end of
-	 the file, the file is extended.  The actual number of bytes written
-	 is stored in <i>byteswritten</i>.
-	
-	 If <i>handle</i> has the %FILE_FLAG_OVERLAPPED option set, the current
-	 file position is ignored and the write position is taken from data
-	 in the <i>overlapped</i> structure.
-	
-	 Return value: %TRUE if the write succeeds, %FALSE on error.
-
-</div> <a name="api:WSACleanup"></a>
- <div class="api">
-    <div class="api-entry">WSACleanup</div>
-
-    <div class="prototype">Prototype: WSACleanup</div>
-<p />
-
-</div> <a name="api:WSAGetLastError"></a>
- <div class="api">
-    <div class="api-entry">WSAGetLastError</div>
-
-    <div class="prototype">Prototype: WSAGetLastError</div>
-<p />
-
-</div> <a name="api:WSAIoctl"></a>
- <div class="api">
-    <div class="api-entry">WSAIoctl</div>
-
-    <div class="prototype">Prototype: WSAIoctl</div>
-<p />
-
-</div> <a name="api:WSARecv"></a>
- <div class="api">
-    <div class="api-entry">WSARecv</div>
-
-    <div class="prototype">Prototype: WSARecv</div>
-<p />
-
-</div> <a name="api:WSASend"></a>
- <div class="api">
-    <div class="api-entry">WSASend</div>
-
-    <div class="prototype">Prototype: WSASend</div>
-<p />
-
-</div> <a name="api:WSASetLastError"></a>
- <div class="api">
-    <div class="api-entry">WSASetLastError</div>
-
-    <div class="prototype">Prototype: WSASetLastError</div>
-<p />
-
-</div> <a name="api:WSAStartup"></a>
- <div class="api">
-    <div class="api-entry">WSAStartup</div>
-
-    <div class="prototype">Prototype: WSAStartup</div>
-<p />
-
-
-</div><h3>Extended APIs</h3>
-
-	<p />The extended APIs provide access to a few internals of the
-	WAPI stack that are not exposed through the standard Win32
-	APIs.
-	
- <a name="api:mono_once"></a>
- <div class="api">
-    <div class="api-entry">mono_once</div>
-
-    <div class="prototype">Prototype: mono_once</div>
-<p />
-
-</div><h4><a name="api:wapi_clear_interruption">wapi_clear_interruption</a>
-<h4><a name="api:wapi_current_thread_desc">wapi_current_thread_desc</a>
-<h4><a name="api:wapi_interrupt_thread">wapi_interrupt_thread</a>
-<h4><a name="api:wapi_self_interrupt">wapi_self_interrupt</a>
-<h4><a name="api:wapi_thread_clear_wait_handle">wapi_thread_clear_wait_handle</a>
-</h4></h4></h4></h4></h4></h4></h4></h4></h4></h4></h4></h4></h4></h4></h4></h4></h4></h4></h4></h4></h4></body>
-</html>
-</span>
\ No newline at end of file
diff --git a/docs/ssapre.txt b/docs/ssapre.txt
index ed1f1ba..d178e7d 100644
--- a/docs/ssapre.txt
+++ b/docs/ssapre.txt
@@ -1,4 +1,3 @@
-
 SSAPRE stands for "SSA based Partial Redundancy Elimination".
 
 The algorithm is explained in this paper:
@@ -242,7 +241,7 @@ Otherwise, the implementation is complete.
 Other interesting issues are:
 - SSAPRE has the assumption that:
   - each SSA variable is related to one "original" (not SSA) variable, and
-  - no more than one version of each originsl variable is live at the same time
+  - no more than one version of each original variable is live at the same time
     in the CFG.
   It would be better to relax these assumptions.
 - SSAPRE operates on "syntactic" redundancies, not on "values".
diff --git a/eglib/ChangeLog b/eglib/ChangeLog
index 7ae4fda..204674e 100644
--- a/eglib/ChangeLog
+++ b/eglib/ChangeLog
@@ -1,440 +1,3 @@
-2011-08-30  Jonathan Pryor  <jonpryor at vt.edu>
-
-	Don't use vasprintf on PLATFORM_ANDROID.
-
-	This allows sanely using g_log() within signal handlers.
-
-2011-08-16  Rodrigo Kumpera  <kumpera at gmail.com>
-
-	Fix g_log redirection under android.
-
-2011-07-29  Chris Toshok  <toshok at gmail.com>
-
-	don't redefine ABS
-
-2011-06-15  Gonzalo Paniagua Javier  <gonzalo.mono at gmail.com>
-
-	Fix crash when there's a \' in the arguments.
-
-	Fixes crash when calling Process.Start on a file with a ' in the
-	path when UseShellExecute is set to false.
-
-	Patch by Tom Philpot.
-
-2011-06-03  Jonathan Pryor  <jonpryor at vt.edu>
-
-	Simplify building with the Android NDK.
-
-	Check --host against *-*-linux-android* for Android-specific
-	configure fixes, and improve **/Makefile.am to simplify Android
-	support:
-
-	./configure \ --build=`./config.guess` \
-	--host=armv5-linux-androideabi \ --target=armv5-linux-androideabi
-	\ --enable-nls=no --with-mcs-docs=no --enable-mcs-build=no \
-	CC="/path/to/ndk/arm-linux-androideabi-gcc
-	--sysroot=/path/to/sysroot" \ AR="..." AS="..." CPP="..."
-	CXX="..." LD="..." RANLIB="..." STRIP="..."
-	CFLAGS="-DARM_FPU_NONE=1" CXXFLAGS="-DARM_FPU_NONE=1"
-
-	See also Android NDK docs/STANDALONE-TOOLCHAIN.html.
-
-	The Android NDK/bionic is "interesting", in that it's lacking
-	header files and macros normally present on Linux which otherwise
-	break the build (e.g. no <link.h> which breaks Boehm support).
-	Using --host with an android target works around the known issues,
-	simplifying the building of libmonosgen-2.0.so with the Android
-	NDK toolchain.
-
-2011-04-23  Miguel de Icaza  <miguel at gnome.org>
-
-	Do not go beyond our string boundaries
-
-2011-04-07  Gonzalo Paniagua Javier  <gonzalo.mono at gmail.com>
-
-	Remove printf
-
-2011-04-07  Miguel de Icaza  <miguel at gnome.org>
-
-	Revert broken patch 34f18b68 that caused random bugs in assembly
-	loading, but could crash the runtime as well
-
-2011-04-07  Miguel de Icaza  <miguel at gnome.org>
-
-	Add test to prevent future problems, this fixes the random MacOSX
-	crashes with assembly loading, but likely everywhere else as well
-
-2011-04-06  Gonzalo Paniagua Javier  <gonzalo.mono at gmail.com>
-
-	[eglib] The last argument can be empty and quoted.
-
-	Fixes bug #669303.
-
-2011-03-28  Gonzalo Paniagua Javier  <gonzalo.mono at gmail.com>
-
-	Fix vasprintf() for empty strings.
-
-	James Bellinger entered bug #682963 and he ended up debugging it
-	and providing the solution.
-
-2011-02-13  Rodrigo Kumpera  <kumpera at gmail.com>
-
-	* gutf8.c (g_utf16_to_utf8): Increase the input counter when
-	encountering broken surrogates head or tails to make sure we don't
-	end in an infinite loop.
-
-2011-02-18  Gonzalo Paniagua Javier  <gonzalo.mono at gmail.com>
-
-	Avoid 'comparison always true...'
-
-2011-03-21  Gonzalo Paniagua Javier  <gonzalo.mono at gmail.com>
-
-	[windows] Wrong LoadLibrary being called.
-
-	We were calling LoadLibraryA instead of the W version.
-
-2011-03-21  Gonzalo Paniagua Javier  <gonzalo.mono at gmail.com>
-
-	[windows] Get rid of a lot of warnings
-
-2011-03-16  Gonzalo Paniagua Javier  <gonzalo.mono at gmail.com>
-
-	Fix g_get_charset for windows.
-
-	Patch by Horst Kakuschke that fixes bug #660412.
-
-2011-02-23  Levi Bard  <levi at unity3d.com>
-
-	* src/gpath.c: Make path building on windows behave the same as
-	stock mono+glib.
-
-	License: MIT/X11
-
-2011-02-23  Miguel de Icaza  <miguel at gnome.org>
-
-	Fix win32 build
-
-2011-02-22  Miguel de Icaza  <miguel at gnome.org>
-
-	Avoid warnings, should fix OpenSUSE builds
-
-2011-02-13  Hib Eris  <hib at hiberis.nl>
-
-	Fix gsize for 64-bit Windows
-
-2011-02-19  Zoltan Varga  <vargaz at gmail.com>
-
-	Revert "[Win64] Compilation fix for eglib in win64"
-
-	This reverts commit 97bc578e86afdc6a16cfa129753ff110e69abe1d.
-
-2011-02-19  Gonzalo Paniagua Javier  <gonzalo.mono at gmail.com>
-
-	[eglib] Move definition of GPid to eglib-config.h
-
-	This new patch moves the definition of GPid from glib.h to
-	eglib-config.h and determines the the type of pid_t in configure.
-
-	Pach from Hib Eris that fixes bug #670076.
-
-2011-02-19  Gonzalo Paniagua Javier  <gonzalo.mono at gmail.com>
-
-	[Win64] Compilation fix for eglib in win64
-
-	Compiling for 64 bit windows breaks on incorrect gsize. Patch by
-	Hib Eris that fixes bug #673581.
-
-2011-02-07  Hib Eris  <hib at hiberis.nl>
-
-	Do not distribute eglib-config.h
-
-	The file eglib-config.h is generated when running configure.
-	Distributing eglib-config.h in tarballs causes errors when
-	building out of the source tree.
-
-2011-02-07  Hib Eris  <hib at hiberis.nl>
-
-	Use _vscprintf() for mingw-w64 compilers
-
-	The mingw-w64 compilers implement a vsnprintf() function that do
-	not conform to the C99 standard (just like MSVC).
-
-2011-02-07  Zoltan Varga  <vargaz at gmail.com>
-
-	Include sys/types.h for pid_t on mingw. Fixes #670076.
-
-2011-01-11  Christian Hergert  <chris at dronelabs.com>
-
-	Fix broken g_int_hash/g_int_equal semantics
-
-	Both g_int_hash and g_int_equal used the semantics that an integer
-	is stored directly in the pointer. This is incorrect as the
-	pointer actually points to a location containing an integer.
-
-	For those wanting the previous (incorrect) implementation, they
-	should look at g_direct_hash and g_direct_equal.
-
-2011-01-08  Miguel de Icaza  <miguel at gnome.org>
-
-	[eglib] Another bug fix for g_shell_parse
-
-	We do not create a new string after a quotation, unless the next
-	character after a closing quote is a space. This allows parsing
-	the string: "foo","bar"
-
-	As: foo,bar
-
-	This fixes #655896
-
-	1# Explicit paths specified without -i nor -o; assuming --only
-	paths...
-
-2011-01-08  Miguel de Icaza  <miguel at gnome.org>
-
-	[eglib] Add more tests for the g_shell_parse
-
-2011-01-07  Marek Safar  <marek.safar at gmail.com>
-
-	Ignore more files
-
-2010-12-22  Geoff Norton  <grompf at sublimeintervention.com>
-
-	Add some missing files needed for windows to the tarball
-
-2010-12-02  Zoltan Varga  <vargaz at gmail.com>
-
-	Include alloca.h into glib.h if needed.
-
-2010-11-22  Zoltan Varga  <vargaz at gmail.com>
-
-	Fix g_hash_table_remove_all ().
-
-2010-11-18  Gonzalo Paniagua Javier  <gonzalo.mono at gmail.com>
-
-	Fix g_dir_open et al for windows.
-
-	This was using the *A functiones instead of the *W ones and
-	passing in UTF16. It was also opening and closing the directory
-	just to check that it was there and then open it again !?.
-
-	Fixes bug #645189.
-
-2010-11-17  Gonzalo Paniagua Javier  <gonzalo.mono at gmail.com>
-
-	User name and home directory initialization
-
-	User name and home directory are initialized at the same time from
-	the information in /etc/passwd if possible.
-
-2010-11-17  Gonzalo Paniagua Javier  <gonzalo.mono at gmail.com>
-
-	Get the user name from the UID not the USER env
-
-	Fixes bug #653564.
-
-2010-11-14  Zoltan Varga  <vargaz at gmail.com>
-
-	Remove the unused and incomplete CMake build scripts for now.
-
-2010-11-12  Zoltan Varga  <vargaz at gmail.com>
-
-	Fix the definition of G_BREAKPOINT on x86 when cross compiling.
-
-2010-11-12  Zoltan Varga  <vargaz at gmail.com>
-
-	Use dolt for eglib too.
-
-2010-11-09  Geoff Norton  <grompf at sublimeintervention.com>
-
-	[OSX] Disabled eglib tests build by default
-
-	On OSX our local system glib might be 32 or 64 bit, and we have no
-	simple way of testing wether it meeds the needs of the current
-	built, lets just disable tests by default for now
-
-2010-10-24  Zoltan Varga  <vargaz at gmail.com>
-
-	Add a g_hash_iter symbols to the eglib remapper.
-
-2010-10-23  Zoltan Varga  <vargaz at gmail.com>
-
-	Use int 3 as G_BREAKPOINT on x86-64 too. Hopefully fixes #648838.
-
-2010-10-22  Zoltan Varga  <vargaz at gmail.com>
-
-	Use locale_charset() from iconv which will use nl_langinfo
-	(CODESET) anyways but it will do canonicalization so we will get
-	the correct charset name, because nl_langinfo (CODESET) can return
-	different things on different systems. This at least fixes
-	OpenBSD.
-
-2010-10-22  Zoltan Varga  <vargaz at gmail.com>
-
-	Fix test compilation with older glibs.
-
-2010-10-22  Zoltan Varga  <vargaz at gmail.com>
-
-	Implement GHashTable iterators.
-
-2010-10-21  Gonzalo Paniagua Javier  <gonzalo.mono at gmail.com>
-
-	Fix typo
-
-	element_size is not a boolean.
-
-2010-10-15  Zoltan Varga  <vargaz at gmail.com>
-
-	Fix warnings by defining GNU_SOURCE in eglib's configure.
-
-2010-10-14  Zoltan Varga  <vargaz at gmail.com>
-
-	Add -g to eglib cflags.
-
-2010-10-14  Zoltan Varga  <vargaz at gmail.com>
-
-	Avoid a crash in g_convert () if iconv_open () fails.
-
-2010-10-08  Zoltan Varga  <vargaz at gmail.com>
-
-	Fix a warning.
-
-2010-09-24  Rolf Bjarne Kvinge  <RKvinge at novell.com>
-
-	* eglib/src/glib.h: * eglib/src/gmem.c: Make g_malloc and friends
-	abort in case of failure, like glib does.
-
-	* eglib/src/eglib-remap.h: Remap all allocation functions.
-
-2010-10-06  Gonzalo Paniagua Javier  <gonzalo.mono at gmail.com>
-
-	Avoid warning
-
-	_GNU_SOURCE was redefined
-
-2010-10-04  Zoltan Varga  <vargaz at gmail.com>
-
-	Fix the handling of varargs in g_set_error ().
-
-2010-09-25  Rolf Bjarne Kvinge  <RKvinge at novell.com>
-
-	Remap more eglib symbols
-
-2010-09-23  Hib Eris  <hib at hiberis.nl>
-
-	* configure.ac: iconv check creates variable ICONV_LIBS *
-	src/Makefile.am: only link eglib to iconv when iconv is found
-
-2010-09-13  Rodrigo Kumpera  <kumpera at gmail.com>
-
-	* glib.h: Fix propotype.
-
-2010-09-11  Geoff Norton  <gnorton at novell.com>
-
-	Implement GByteArray, g_hash_table_remove_all, g_queue_foreach and
-	some missing byteswap macros.
-
-2010-09-11  Zoltan Varga  <vargaz at gmail.com>
-
-	Remove -Werror from the eglib tests too.
-
-2010-09-10  Gonzalo Paniagua Javier  <gonzalo.mono at gmail.com>
-
-	Fix the windows build
-
-	Avoid warnings in windows.
-
-2010-09-10  Miguel de Icaza  <miguel at gnome.org>
-
-	[Fix] Correct fix for the g_shell_parse_argv bug
-
-	Simplifies the code a little bit by eliminating the in_quote
-	variable, but also fixes the rules to follow the requirements from
-	the "Shell Command Language" specification on the Unix03 site:
-
-	http://opengroup.org/onlinepubs/007908775/xcu/chap2.html#tag_001_002
-
-	In particular, the interpretation of the backslash inside double
-	quotes is limited to a handful of characters. Notice that this
-	differs from the glib implementation which is not correct either.
-
-2010-09-09  Miguel de Icaza  <miguel at gnome.org>
-
-	[Fix] Allow escape characters inside quoted text, and do not let
-	nested quote reset the quoting state
-
-	This should fix #637680
-
-2010-09-07  Gonzalo Paniagua Javier  <gonzalo.mono at gmail.com>
-
-	Add tests for g_strdupv
-
-	Add test for g_strdupv and check for NULL in g_strdupv.
-
-2010-09-07  Zoltan Varga  <vargaz at gmail.com>
-
-	Add a few more remaps.
-
-2010-09-07  Zoltan Varga  <vargaz at gmail.com>
-
-	Remap g_strdupv too.
-
-2010-09-04  Gonzalo Paniagua Javier  <gonzalo.mono at gmail.com>
-
-	Fix return value of items_read
-
-	items_read was not being initialized and it was not being set in
-	the fast common case of g_utf8_to_utf16().
-
-2010-08-28  Zoltan Varga  <vargaz at gmail.com>
-
-	Add a g_hash_table_print_stats () helper function.
-
-2010-08-28  Zoltan Varga  <vargaz at gmail.com>
-
-	Optimize g_utf8_to_utf16 for the common case of ASCII strings.
-
-2010-08-20  Gonzalo Paniagua Javier  <gonzalo.mono at gmail.com>
-
-	No more warnings building eglib.
-
-	Ditto.
-
-2010-08-20  Gonzalo Paniagua Javier  <gonzalo.mono at gmail.com>
-
-	eglib build is now 'quiet' by default
-
-	Ditto.
-
-2010-08-20  Zoltan Varga  <vargaz at gmail.com>
-
-	Don't return malloc-ed memory from g_get_charset ().
-
-2010-08-18  Zoltan Varga  <vargaz at gmail.com>
-
-	Fix handling of stdio in g_spawn_async_with_pipes ().
-
-2010-08-09  Gonzalo Paniagua Javier  <gonzalo.mono at gmail.com>
-
-	Ignore a few more files.
-
-2010-08-09  Elijah Taylor  <elijahtaylor at google.com>
-
-	Add dummy implementation of g_module functions for NACL.
-
-2010-08-07  Miguel de Icaza  <miguel at gnome.org>
-
-	Do not mandate that pkg-config is installed, it is only used for
-	the comparative test suite
-
-2010-08-02  Zoltan Varga  <vargaz at gmail.com>
-
-	* test/test.c (FAILED): Fix linking on systems without vasprintf.
-
-2010-08-02  Zoltan Varga  <vargaz at gmail.com>
-
-	* configure.ac: Define _POSIX_PTHREAD_SEMANTICS on solaris to get
-	posix compliant versions of some functions.
-
 2010-07-25  Zoltan Varga  <vargaz at gmail.com>
 
 	* configure.ac src/eglib-config.h.in src/eglib-config.hw: Define G_GINT64_FORMAT.
diff --git a/eglib/ChangeLog.old b/eglib/ChangeLog.old
deleted file mode 100644
index 204674e..0000000
--- a/eglib/ChangeLog.old
+++ /dev/null
@@ -1,1564 +0,0 @@
-2010-07-25  Zoltan Varga  <vargaz at gmail.com>
-
-	* configure.ac src/eglib-config.h.in src/eglib-config.hw: Define G_GINT64_FORMAT.
-
-2010-07-20  Zoltan Varga  <vargaz at gmail.com>
-
-	* src/glib.h (G_LIKELY): Implement these for gcc properly.
-
-2010-07-19  Miguel de Icaza  <miguel at novell.com>
-
-	* src/gmisc-win32.c (g_getenv): Distinguish between variable not
-	found and an empty variable.
-
-	This should fix 566152
-
-2010-07-19  Zoltan Varga  <vargaz at gmail.com>
-
-	* src/glib.h (G_MAXUINT64): Define this. Fixes #623293.
-
-	* src/eglib-config.hw: Define UINT64_MAX.
-
-2010-07-16 Gonzalo Paniagua Javier <gonzalo at novell.com>
-
-	* src/gmisc-unix.c: include config.h. Fixes bug #609632.
-	Use getpwuid_r instead of getpwent_r.
-
-2010-07-02  Zoltan Varga  <vargaz at gmail.com>
-
-	* src/glib.h: Define gboolean as int32_t to match mono_bool.
-
-2010-06-22  Rodrigo Kumpera  <rkumpera at novell.com>
-
-	* src/ghashtable.c: Add code to sanity check the
-	hashtable contents. This is invaluable, for example,
-	to catch bugs where a key hashcode changes after
-	insertion.
-
-2010-06-18  Chris Toshok  <toshok at ximian.com>
-
-	patch from Jacob Berkman:
-
-	* src/glib.h (g_mkdir): #define to mkdir
-	(g_ascii_strtoull): #define to strtoull
-
-	* src/gmodule.h: add G_BEGIN/END_DECLS
-
-	* src/gstr.c (g_strdupv): new function.
-
-2010-06-18  Rolf Bjarne Kvinge  <RKvinge at novell.com>
-
-	* src/eglib-remap.h: Remap g_ptr_array_remove_fast too.
-
-2010-06-15  Zoltan Varga  <vargaz at gmail.com>
-
-	* src/gunicode.c: Applied patch from Hib Eris <hib at hiberis.nl>. use "windows.h"
-	instead of "Windows.h".
-
-2010-05-25  Zoltan Varga  <vargaz at gmail.com>
-
-	* Applied patch from Burkhard Linke (blinke at cebitec.uni-bielefeld.de). Fix
-	building on solaris.
-
-2010-05-21  Zoltan Varga  <vargaz at gmail.com>
-
-	* src/gmisc-win32.c (g_setenv): Use the
-	GetEnvironmentVariableW/SetEnvironmentVariableW variants.
-
-2010-05-15  Zoltan Varga  <vargaz at gmail.com>
-
-	* src/glib.h (g_error): Add a for (;;) after the call to tell GCC this doesn't
-	return, fixing some warnings.
-
-2010-05-13  Alan McGovern  <amcgovern at novell.com>
-
-	* src/gstring.c: Put in some null guards for the ctors
-
-2010-05-11  Miguel de Icaza  <miguel at novell.com>
-
-	* src/gunicode.c: Pull the Windows.h header when G_OS_WIN32 is
-	defined. 
-
-2010-05-11  Atsushi Enomoto  <atsushi at ximian.com>
-
-	* Makefile.am : do not try to build test on windows (fails).
-	* src/glib.h : fix cygwin build, do not include unistd.h.
-
-2010-05-10  Miguel de Icaza  <miguel at novell.com>
-
-	* gfile-win32.c: Port this to use the Win32 APIs to get this
-	building with Cygwin.
-
-2010-05-07  Andrew Jorgensen  <ajorgensen at novell.com>
-
-	* test/test.h: Fix some compiler warning that SUSE takes seriously.
-
-2010-05-06  Alan McGovern  <amcgovern at novell.com>
-
-	* src/gmarkup.c: Fix a parser issue when skipping the xml declaration.
-
-2010-05-06  Jonathan Chambers  <joncham at gmail.com>
-
-	* gfile-win32.c: Use __stat64 instead of _stat64.
-
-2010-05-04  Jonathan Chambers  <joncham at gmail.com>
-
-	* gspawn.c: Remove extern define for MSVC.
-
-2010-05-03  Zoltan Varga  <vargaz at gmail.com>
-
-	* src/glib.h: Include unistd.h on !windows for pid_t.
-
-	* gspawn.c: Add an extern define for environ on !apple platforms.
-
-2010-05-02  Zoltan Varga  <vargaz at gmail.com>
-
-	* src/glib.h: Include sys/types.h for pid_t.
-
-2010-05-01  Zoltan Varga  <vargaz at gmail.com>
-
-	* src/goutput.c (g_logv): Append a '\n' to the end of the string as glib does.
-
-2010-04-28  Zoltan Varga  <vargaz at gmail.com>
-
-	* configure.ac src/gspawn.c: Applied openbsd changes from Robert Nagy
-	<robert at openbsd.org>.
-
-2010-04-16  Miguel de Icaza  <miguel at novell.com>
-
-	* src/gshell.c (g_shell_unquote): Implement this.
-
-2010-04-25  Andreas Faerber  <andreas.faerber at web.de>
-
-	* configure.ac: The iconv function may be libiconv_open.
-	Fixes linking with GNU libiconv.
-
-	Contributed under MIT/X11 license.
-
-2010-04-23  Geoff Norton  <gnorton at novell.com>
-
-	* configure.ac: The iconv function is iconv_open.
-
-2010-04-19  Jonathan Pryor  <jpryor at novell.com>
-
-	* src/glib.h: Rebase g_return_if_fail(), g_return_val_if_fail() in
-	  terms of g_critical() instead of printf, and turn g_printerr() into
-	  an actual function instead of a macro.
-	* src/goutput.c: Add Android support, sending g_print(), g_printerr(),
-	  and g_log() messages to the Android system log.
-
-2010-04-16 Gonzalo Paniagua Javier <gonzalo at novell.com>
-
-	* test/ptrarray.c: new tests
-	* src/gptrarray.c: implemented g_ptr_array_remove_fast().
-
-2010-04-10  Andreas Faerber  <andreas.faerber at web.de>
-
-	* configure.ac: Add checks for libm and libdl.
-	* {src,test}/Makefile.am: Remove hardcoded library dependencies.
-	Fixes compilation on Haiku.
-
-	Contributed under MIT/X11 license.
-
-2010-03-05  Zoltan Varga  <vargaz at gmail.com>
-
-	* test/test.c (_GNU_SOURCE): Fix compilation if _GNU_SOURCE is already defined.
-
-
-Thu Mar 4 16:34:37 CET 2010 Paolo Molaro <lupus at ximian.com>
-
-	* src/unicode-data.h: save 70 KB.
-
-Thu Mar 4 16:18:34 CET 2010 Paolo Molaro <lupus at ximian.com>
-
-	* src/eglib-remap.h, src/glib.h: header file to remap the symbols
-	so there is no clash with system glib.
-	* src/Makefile.am: build static lib as well.
-
-2010-03-04  Zoltan Varga  <vargaz at gmail.com>
-
-	* configure.ac: Add a check for ISO varargs.
-
-	* test/test.c: Fix the build.
-
-	* src/glib.h src/goutput.c: Emit asserts through a g_assertion_message ()
-	function which is decorated with G_GNUC_NORETURN, to fix many warnings when using
-	the eglib build.
-
-Mon Mar 1 17:12:24 CET 2010 Paolo Molaro <lupus at ximian.com>
-
-	* src/unicode-data.h, src/gutf8.c: don't export private symbols.
-
-2009-12-03  Zoltan Varga  <vargaz at gmail.com>
-
-	* src/gmisc-unix.c (g_get_user_name): Avoid returning NULL if the env
-	var is not set.
-
-2009-10-15 Andreia Gaita <avidigal at novell.com>
-
-	* src/gptrarray.c: implement g_ptr_array_remove_index_fast
-	* src/glib.h: fix g_ptr_array_remove_index_fast declaration
-	* test/ptrarray.c: new tests
-
-2009-10-15 Andreia Gaita <avidigal at novell.com>
-
-	* src/garray.c: (g_array_remove_index_fast) only move 1 element
-	and not the whole shebang
-
-2009-09-26 Gonzalo Paniagua Javier <gonzalo at novell.com>
-
-	* test/queue.c: new tests.
-	* src/gqueue.c: fixed pop_head.
-
-2009-09-26 Gonzalo Paniagua Javier <gonzalo at novell.com>
-
-	* src/gqueue.c: add g_queue_push_tail.
-
-2009-06-20  Zoltan Varga  <vargaz at gmail.com>
-
-	* src/glib.h: Add GUINT32_FROM/TO_BE macros.
-
-2009-06-09  Jonathan Chambers <joncham at gmail.com>
-	
-	* CMakeLists.txt: Add start of CMake build.
-	* src/CMakeLists.txt: Add start of CMake build.
-	
-	Contribution is licensed as MIT/X11.
-
-2009-06-02  Bill Holmes  <billholmes54 at gmail.com>
-
-	* src/gpath.c (g_find_program_in_path):  While searching on Windows
-	  also try additional suffixes .exe, .cmd, .bat, and.com.
-
-	Contributed under MIT/X11 license.
-
-2009-05-27  Geoff Norton  <gnorton at novell.com>
-
-	* src/gfile-posix.c: Fix g_get_current_dir on amd64
-
-2009-04-22  Jeffrey Stedfast  <fejj at novell.com>
-
-	* src/gtimer-win32.c (g_timer_elapsed): Avoid re-querying freq by
-	just saving it in a static variable. Also modified microseconds
-	calculation to avoid overflow.
-
-2009-04-05  Miguel de Icaza  <miguel at novell.com>
-
-	* src/gpath.c: Avoid situations where we add the separator if one
-	of the elements is the separator.
-
-2009-04-02  Miguel de Icaza  <miguel at novell.com>
-
-	* src/gpath.c: If the first element is NULL, return an empty
-	string. 
-
-2009-02-19 Gonzalo Paniagua Javier <gonzalo at novell.com>
-
-	* src/gstr.c: use memset in g_strnfill.
-
-2009-01-19  Bill Holmes  <billholmes54 at gmail.com>
-
-	* src/gstr.c (g_strnfill):  Fixing a warning for MSVC.
-
-	Contributed under MIT/X11 license.
-
-2009-02-05  Miguel de Icaza  <miguel at novell.com>
-
-	* src/gstr.c: Add g_strnfill
-
-	* src/glib.h: Add g_list_previous
-
-2009-01-19  Bill Holmes  <billholmes54 at gmail.com>
-
-	* gmisc-win32.c (g_path_is_absolute):  Adding support for UNC
-	  paths on Windows.
-
-	Contributed under MIT/X11 license.
-
-2009-01-08  Bill Holmes  <billholmes54 at gmail.com>
-
-	* winconfig.h, src/gfile-posix.c :
-	  Fixing the MSVC builds.
-
-	Contributed under MIT/X11 license.
-
-2009-01-07  Miguel de Icaza  <miguel at novell.com>
-
-	* src/gfile-posix.c: Move g_get_current_dir, as it is a
-	POSIX-esque feature, and some other systems do not have current
-	directories. 
-
-	* src/glib.h (G_LOCK_DEFINE, G_LOCK_DEFINE_STATIC): 
-
-	Embedded support from Paolo's work on quack.
-	
-	* configure.ac: check for strtok_r, langinfo.h and iconv.h
-	
-	* src/gpath.c (strtok_r): Add a strtok_r implementation if it is
-	not available on the target system.
-
-2008-11-05  Bill Holmes  <billholmes54 at gmail.com>
-
-	* src/gutf8.c, src/unicode-data.h, src/gunicode.c :
-	  Fixing the MSVC builds.
-
-	Contributed under MIT/X11 license.
-
-2008-11-04  Atsushi Enomoto  <atsushi at ximian.com>
-
-	* src/gutf8.c, src/gunicode.c, src/glib.h:
-	  implemented g_unichar_type(), g_unichar_toupper(),
-	  g_unichar_tolower(), g_unichar_totitle(), g_utf8_strup()
-	  and g_utf8_strdown(). Fixed some surrogate pair bugs.
-	* TODO : removed implemented things.
-	* test/unicode.c, test/tests.h, test/utf8.c, test/Makefile.am:
-	  added new tests.
-
-2008-11-04  Atsushi Enomoto  <atsushi at ximian.com>
-
-	* src/unicode-data.h : new header for some new unicode manipulation
-	  functions.
-
-2008-10-17  Miguel de Icaza  <miguel at novell.com>
-
-	* Allow types to be defined on the eglib-config.h file, that could
-	be a platform specific generated type file.
-
-	* gtimer.c: split functionality in platforms.
-
-2008-10-13  Bill Holmes  <billholmes54 at gmail.com>
-
-	* src/gdate-win32.c : Fix compiler errors for MSVC.
-
-	* src/gpath.c : Fix compiler errors for MSVC.
-
-	* src/gfile-posix.c : Adding declaration for mkstemp for the win 32
-	  implementation in gfile-win32.c.
-
-	Contributed under MIT/X11 license.
-
-2008-10-11  Miguel de Icaza  <miguel at novell.com>
-
-	* gtimer.c: Same process.
-
-	* src/glib.h: Move g_strdup here, to consolidate all allocations
-	in this header, will help for merging the allocation work later. 
-
-	* src/gpattern.c (compile_pattern): From Unity, use -1 in the enum
-	for MatchType.
-
-	* src/gpath.c: Split this one as well.
-
-	* src/gmodule-win32.c, src/gmisc-unix.c, src/gmisc-win32.c,
-	src/gmodule-unix.c: split functionality in platforms.
-	
-	* src/goutput.c (g_logv): On some platforms, before we abort we
-	want to flush the stdout/stderr.
-
-2008-10-10  Miguel de Icaza  <miguel at novell.com>
-
-	* Split functionality that is operating system specific into
-	-win32.c, -unix.c and -posix.c 
-
-	* Use g_malloc everywhere, and g_free, so that these can be easily
-	overwritten consistently.
-
-2008-09-16  Bill Holmes  <billholmes54 at gmail.com>
-
-	* src/gunicode.c : Fix a warning.
-
-	Contributed under MIT/X11 license.
-
-2008-08-28  Bill Holmes  <billholmes54 at gmail.com>
-
-	* src/glib.h : Adding a c++ definition for G_BEGIN_DECLS.
-
-	Contributed under MIT/X11 license.
-
-2008-08-27  Bill Holmes  <billholmes54 at gmail.com>
-
-	* glib.h, gunicode.c : Fixing some compiler errors.
-
-	Contributed under MIT/X11 license.
-
-2008-08-20  Mike Voorhees <vernish13 at gmail.com>
-
-	* Patch from Mike Voorhees to fix various problems with
-	g_utf8_validate compared to the glib implementation and unit tests
-	to ensure that there are no regressions.
-
-	From a mailing list post to mono-devel-list on August 19th, 2008
-
-	[Mono-dev] utf8 related patches. Please review.
-
-2008-08-20  Mike Voorhees  <vernish13 at gmail.com>
-
-	* src/glib.h : Adding declarations for g_utf8_strlen, g_utf8_get_char,
-	and g_utf8_next_char.
-
-	* src/gunicode.c : Adding implementation for g_utf8_strlen, g_utf8_get_char,
-	and g_utf8_next_char.
-
-	* src/gunicode.c : Rewrote g_utf8_validate.
-
-	* test/utf8.c Adding tests for g_utf8_strlen, g_utf8_get_char,
-	g_utf8_next_char, and g_utf8_validate.
-
-	Contributed under MIT/X11 license.
-	
-2008-08-05  Andreas Faerber  <andreas.faerber at web.de>
-
-	* autogen.sh: Suppress arguments warning for NOCONFIGURE.
-	
-	Contributed under MIT/X11 license.
-
-2008-08-04  Bill Holmes  <billholmes54 at gmail.com>
-
-	* test/tests.h, test/Makefile.am, test/memory.c : Adding memory tests to test
-	  allocation routines return NULL when 0 size is passed in.
-
-	Contributed under MIT/X11 license.
-
-2008-08-04  Bill Holmes  <billholmes54 at gmail.com>
-
-	* src/glib.h : Changing the allocation routines to return null if 0 size is
-	  passed in.
-
-	Contributed under MIT/X11 license.
-
-2008-06-16  Zoltan Varga  <vargaz at gmail.com>
-
-	* src/vasprintf.c (vasprintf): Applied patch from Michail Ushakov 
-	<migelU at gmail.com>. Workaround broken vsnprintf on windows. Fixes
-	#400445.
-
-2008-06-11  Zoltan Varga  <vargaz at gmail.com>
-
-	* src/goutput.c (g_log): Remove unnecessary and incorrect call to 
-	g_strdup_printf (). Fixes #398918.
-
-2008-05-01  Bill Holmes  <billholmes54 at gmail.com>
-
-	* src/glib.h : Adding declarations for g_ucs4_to_utf16 and g_utf16_to_ucs4.
-
-	* src/gutf8.c : Adding implementation for g_ucs4_to_utf16 and g_utf16_to_ucs4.
-
-	* test/utf8.c Adding tests for g_ucs4_to_utf16 and g_utf16_to_ucs4.
-
-	Contributed under MIT/X11 license.
-
-2008-04-20  Geoff Norton  <gnorton at novell.com>
-
-	* src/gspan.c: Fix the _NSGetEnviron define to prevent an impropoer
-	pointer dereference.
-
-2008-03-19  Bill Holmes  <billholmes54 at gmail.com>
-
-	* src/gpath.c (g_path_is_absolute) : Adding a case for '/'
-	  on Windows.
-	
-	* src/gpath.c (g_get_user_name) : On Windows add a check for %USERNAME%
-	  when %USER% fails.
-
-	* src/gstr.c (g_strsplit, g_strsplit_set):  Change to remove truncation
-	  errors with MSVC build.
-
-	* src/gstr.c (g_filename_to_uri, g_filename_from_uri):  Fixes to handle
-	  Windows paths.
-
-	* src/gstr.c (g_ascii_strncasecmp):  Convert each character to lower case
-	  before comparing.
-
-	* src/gunicode.c (g_get_charset):  Implement for Windows.
-
-	Contributed under MIT/X11 license.
-
-2008-03-12  Geoff Norton  <gnorton at novell.com>
-
-	* src/gutf8.c: Implement g_ucs4_to_utf16 and g_utf16_to_ucs4 as
-	asserts.  They're needed to build mono with eglib.
-	* src/gutil.h: Add a few missing function declarations to the header.
-	* src/gspawn.c: Some darwin implementations don't have crt_externs.h
-	So we'll just define _NSGetEnviron() ourselves.
-	* Makefile.am: Dont build test when cross compiling.
-	* configure.ac: Define CROSS_COMPILING when cross compiling.
-	Undefine _FORTIFY_SOURCE on arm-apple-darwin as the headers it 
-	requires are not available.
-
-2008-01-15  Andreas Faerber  <andreas.faerber at web.de>
-
-	* configure.ac: Add default G_BREAKPOINT implementation.
-	Fix typo in breakpoint CPU output.
-
-2007-12-23  Zoltan Varga  <vargaz at gmail.com>
-
-	* src/glib.h: Include <limits.h>. Fixes #350482.
-
-2007-11-21  Dick Porter  <dick at ximian.com>
-
-	* src/gslist.c (g_slist_find_custom): Implement
-
-	* src/glist.c (g_list_find_custom): Implement
-
-	* test/list.c: Test g_list_find_custom()
-
-	* test/slist.c: Test g_slist_find_custom()
-
-2007-11-20  Dick Porter  <dick at ximian.com>
-
-	* src/gstr.c: Implement g_strsplit_set() and re-implement
-	g_strsplit() so it passes the additional tests. (g_strsplit()
-	should treat multi-char delimiters as just a single token, rather
-	than a set of delimiters.)
-
-	* src/gslist.c: Implement g_slist_index(), g_slist_nth() and
-	g_slist_nth_data().
-
-	* test/string-util.c: Test g_strsplit_set() and more tests for
-	g_strsplit().
-
-	* test/slist.c: Test g_slist_nth() and
-	g_slist_index().
-
-2007-11-06  Geoff Norton  <gnorton at novell.com>
-
-	* configure.ac: Check for libiconv_open as the previous check was failing against 
-	some versions of libiconv.
-
-2007-11-06  Andreas Faerber  <andreas.faerber at web.de>
-
-	* test/Makefile.am: Fix noinst_PROGRAMS for automake 1.6.3
-	                    Add support for VPATH
-
-2007-11-06  Geoff Norton  <gnorton at novell.com>
-
-	* configure.ac: Determing if glib-2.0 is installed and set HAVE_GLIB appropriately
-	* test/Makefile.am: Only build test-glib if glib-2.0 is available
-
-2007-11-05  Geoff Norton  <gnorton at novell.com>
-
-	* configure.ac: Check for getpwent_r and wether libiconv is needed to be linked.
-	Also look to see if we can use export-dynamic in the test suite.
-	* test/Makefile.am: Get LDFLAGS from configure instead of setting them.
-	* src/gerror.c: Implement g_clear_error.
-	* src/glib.h: Only use the format, ... convention is HAVE_C99_SUPPORT is available.
-	* src/gpath.c: Only use the getpwent_r codepath if getpwent_r is available.
-	* src/gspawn.c: Define environ to call _NSGetEnviron() on Apple.
-	* src/Makefile.am: Remove -Werror so we dont fail on different function declarations.
-		Portions of all of the above are from Andreas Faerber & Jonathan Chambers
-	
-2007-10-31  Jonathan Chambers <joncham at gmail.com>
-	
-	* src/ghashtable.c: Add g_hash_table_foreach_steal.
-	* src/garray.c: Add g_array_remove_index_fast.
-	* src/gpath.c (g_path_is_absolute): Handle windows paths.
-	* src/glib.h: Add g_hash_table_foreach_steal and g_array_remove_index_fast
-	
-	Contribution is licensed as MIT/X11.
-
-2007-06-13  Jonathan Chambers <joncham at gmail.com>
-	
-	* src/gunicode.c: Add g_unichar_isxdigit and g_unichar_xdigit_value.
-	* src/gmisc.c: Add g_win32_getlocale stub.
-	* src/glib.h: Add declarations of above functions,
-	GFreeFunc typedef, and CLAMP, GUINT_TO_LE, and threading
-	macros.
-	
-	* test/string-util.c: Fix warning.
-	* test/utf8.c: Add test for g_unichar_xdigit_value.
-	
-	Contribution is licensed as MIT/X11.
-
-2007-05-05  Aaron Bockover  <abockover at novell.com>
-
-	* src/gstr.c:
-	* src/glib.h: Added g_ascii_tolower implementation; make g_ascii_strdown
-	use it to do the transformation
-
-	* test/string-util.c: Added a test for g_ascii_strdown
-
-2007-04-27  Jonathan Chambers <joncham at gmail.com>
-	
-	* src/gstr.c: Fix off by one error in g_strdup allocation.
-
-2007-04-27  Jonathan Chambers <joncham at gmail.com>
-	
-	* src/eglib-config.hw: Forgot to add for msvc build.
-	* src/vasprintf: Forgot to add for msvc build.
-
-2007-04-27  Jonathan Chambers <joncham at gmail.com>
-	
-	* src/gstr.c: Fix off by one error for NULL terminator.
-
-2007-04-27  Jonathan Chambers <joncham at gmail.com>
-	
-	Combined patch from Michael Jerris <mike at jerris.com> and me.
-	* winconfig.h: Config file for msvc builds.
-	* configure.ac: Add AC_CHECK_HEADERS for getopt.h,  sys/time.h,
-	sys/wait.h, and pwd.h.
-	
-	* src/gspawn.c: Include config.h and use HAVE_* macros.
-	* src/eglib-config.h.in: Add inclusion guards.
-	* src/ghashtable.c: Fix warnings.
-	* src/gmisc.c: Windows implementation of g_getenv, g_setenv,
-	and g_unsetenv.
-	* src/gpath.c: Include config.h and use HAVE_* macros.
-	* src/gmarkup.c: Fix warnings.
-	* src/gptrarray.c: Fix warnings.
-	* src/gstr.c: Fix warnings and use HAVE_* macros.
-	* src/glib.h: Move macros to eglib-config.h and include it.
-	* src/gdate.c: Implement g_get_current_time on windows.
-	* src/gpattern.c: Fix warnings.
-	* src/gdir.c: Implement g_dir on windows.
-	* src/gfile.c: Implement mkstemp and g_file_test on windows.
-	* src/gtimer.c: Implement g_timer on windows.
-	* src/gmodule.c: Fix warnings.
-	* src/gunicode.c: Fix warnings.
-	* src/gutf8.c: Fix warnings.
-	
-	* test/ptrarray.c: Fix warnings.
-	* test/string.c: Fix warnings.
-	* test/list.c: Fix warnings.
-	* test/pattern.c: Use HAVE_* macros.
-	* test/dir.c: Use HAVE_* macros.
-	* test/file.c: Use HAVE_* macros and use system specific files for tests.
-	* test/test.c: Fix warnings and use HAVE_* macros.
-	* test/timer.c: Use HAVE_* macros.
-	* test/string-util.c: Fix warnings.
-	* test/test.h: Supress warnings on msvc.
-	* test/module.c: Use HAVE_* macros.
-	* test/utf8.c: Fix warnings.
-	* test/spawn.c: Use HAVE_* macros.
-	* test/driver.c: Fix warnings and use HAVE_* macros.
-	* test/path.c: Use HAVE_* macros and use system specific files for tests.
-	* test/sizes.c: Fix warnings.
-
-2007-04-24  Jonathan Chambers <joncham at gmail.com>
-	
-	Patch from Michael Jerris <mike at jerris.com>
-	* src/gspawn.c: Start msvc build.
-	* src/gpath.c: Start msvc build.
-	* src/gmarkup.c: Start msvc build.
-	* src/gshell.c: Start msvc build.
-	* src/gstr.c: Start msvc build.
-	* src/glist.c: Start msvc build.
-	* src/glib.h: Start msvc build.
-	* src/gdate.c: Start msvc build.
-	* src/gpattern.c: Start msvc build.
-	* src/gdir.c: Start msvc build.
-	* src/gfile.c: Start msvc build.
-	* src/gtimer.c: Start msvc build.
-	* src/gmodule.c: Start msvc build.
-	* src/gunicode.c: Start msvc build.
-
-2007-01-27  Robert Jordan  <robertj at gmx.net>
-
-	* test/Makefile.am: Add linker option to be able to
-	load symbols from the main program.
-	* test/module.c: Clean-ups.
-
-2007-01-26  Robert Jordan  <robertj at gmx.net>
-
-	* configure.ac: Add PLATFORM_WIN32 conditional.
-	* src/Makefile.ac: Use PLATFORM_WIN32 conditional for psapi, iconv
-	* test/module.c, test/tests.h, test/Makefile.am: New test for gmodule.
-	* src/gmodule.h: Add G_MODULE_{IMPORT|EXPORT} defines.
-	* src/gmodule.c (g_module_symbol): Implement in-proc symbol lookup
-	for Win32.
-	* src/gmodule.c: Add GModule.main_module, consider it in
-	g_module_close ().
-	* src/gpath.c (g_get_home_dir): Add dummy Win32 implementation to
-	fix the build.
-
-2006-11-03  Miguel de Icaza  <miguel at novell.com>
-
-	* src/gpath.c (g_path_get_dirname): If the pathname starts with a
-	"/", return the "/".
-
-	* test/string-util.c (test_strlcpy): Add new test.
-
-	* src/gunicode.c (g_filename_from_utf8): g_strlcpy needs the full
-	size, with the extra zero at the end;  Fixes the stack trace
-	issue. 
-
-2006-10-30  Miguel de Icaza  <miguel at novell.com>
-
-	* test/utf8.c (test_utf8_seq): Add new failing test.
-
-2006-10-30  Atsushi Enomoto  <atsushi at ximian.com>
-
-	* src/gutf8.c : several fixes:
-	  - fixed incorrect mb_size clear and mb_remain computation.
-	  - initialize items_written to 0 for error case.
-	  - in utf8_to_utf16_len differentiate error messages completely.
-	  - in g_utf8_to_utf16 use guchar instead of gchar.
-	* test/utf8.c : added test case string in test_utf8_seq() to
-	  both test_utf8_to_utf16() and test_utf16_to_utf8().
-
-2006-10-21  Miguel de Icaza  <miguel at novell.com>
-
-	* src/gunicode.c (g_filename_from_utf8): Use g_strlcpy here. 
-
-	* src/gmarkup.c (g_markup_parse_context_parse): Do not dereference
-	null values here.   This gets things a little bit further in
-	corlib, but not too far.
-
-	* src/gdir.c (g_dir_read_name): Do not return . or ..
-
-	* src/gstr.c (g_ascii_xdigit_value): Make this into a function,
-	thanks to Paolo for pointing the problem with the double macro
-	expansion. 
-
-	* src/gmodule.c (g_module_open): Actually return NULL if we fail
-	to load the module (was hiding the real bug in the pinvoke tests).
-
-	(g_module_build_path): Do not prepend "lib" if the "lib" is part
-	of the call.
-
-	* src/gstr.c (g_strsplit): this routine has some non-expected
-	behavior, if the string begins with the delimiter, it will return
-	an empty first string, unlike strtok
-
-	* src/gpath.c (g_path_get_dirname): Return "." as a dirname for
-	paths that do not contain a directory.
-
-2006-10-18 Gonzalo Paniagua Javier <gonzalo at ximian.com>
-
-	* test/array.c: new test for insertion in the middle of other values.
-	* src/garray.c: fixed destination index.
-
-2006-10-18  Miguel de Icaza  <miguel at novell.com>
-
-	* src/gpath.c (g_build_path): Do not append terminator if the next
-	string is empty.
-
-	* src/gutf8.c (g_utf8_to_utf16): Include trailing zero as
-	documented.
-	(g_utf16_to_utf8): Include trailing zero as documented.
-
-2006-10-17  Miguel de Icaza  <miguel at novell.com>
-
-	* src/gstr.c (g_strdown): Actually move.
-
-	* src/gmarkup.c (g_markup_parse_context_parse): Accept dots in the
-	sequence, reset the state after a closing element.
-
-	* src/garray.c (g_array_insert_vals): Shift the elements the
-	correct amount.
-
-	(g_array_insert_vals): Should actually use the
-	number of elements to insert.
-
-	* test/array.c: Add new test case, this was happening in the JIT. 
-
-	* Add _GNU_SOURCE at configure time, remove from sources.
-	
-	* src/gstr.c (g_strsplit): Empty strings return a 0 value vector.
-
-	* src/glib.h (G_MAXINT64, G_MININT64): Add another set of macros
-	for the support stuff.
-	
-	Move private prototypes elsewhere
-
-	* src/glib.h (g_thread_init): Adding missing brace
-	(g_list_next): remove ; from the macro definition.
-
-2006-10-17  Miguel de Icaza  <miguel at novell.com>
-
-	* src/gutf8.c: internal methods
-
-	* src/ghashtable.c: internal methods.
-
-2006-10-16  Miguel de Icaza  <miguel at novell.com>
-
-	* src/gerror.c (g_propagate_error): Implement.
-
-	* src/gstr.c (g_strjoinv, g_ascii_strncasecmp): implement.
-
-	* test/string-util.c (test_ascii_strncasecmp): test
-
-2006-10-15  Miguel de Icaza  <miguel at novell.com>
-
-	* configure.in: Fix detection of platforms the [3456] stuff does
-	not work inside autoconf.
-
-	* src/eglib-config.h.in: Make G_BREAKPOINT into a function-macro
-
-	* src/glib.h (offsetof): Mono sources depend on this, bring this
-	from the standard definition.  Redefine G_STRUCT_OFFSET in terms
-	of this. 
-	
-	* src/glib.h (G_STRUCT_OFFSET): fix macro definition. 
-	fix typo.
-
-	* src/sizes.c: Add test.
-
-	* src/gshell.c: Make it build
-	
-2006-10-14  Miguel de Icaza  <miguel at novell.com>
-
-	* src/glib.h: add various _TO_LE and _FROM_LE macros.
-
-	* test/endian.c: tests for endian conversion macros.
-
-2006-10-09  Miguel de Icaza  <miguel at novell.com>
-
-	* src/gmodule.h: Move definitions of gmodule to gmodule.h because
-	Mono expects it there.
-
-Mon Oct 9 12:59:16 CEST 2006 Paolo Molaro <lupus at ximian.com>
-
-	* src/ghashtable.c: s/to_prime/g_spaced_primes_closest/g
-	and put the array in readonly memory.
-	* src/gstr.c: fixed the build and made array const.
-	* src/gmodule.c: fixed thinko.
-
-2006-10-08  Miguel de Icaza  <miguel at novell.com>
-
-	* src/gstr.c (g_strdup): should allow NULL as an argument.
-
-2006-10-08 Gonzalo Paniagua Javier <gonzalo at ximian.com>
-
-	* test/string-util.c:
-	* TODO:
-	* src/gstr.c:
-	* src/glib.h: implemented g_strescape.
-
-2006-10-08 Gonzalo Paniagua Javier <gonzalo at ximian.com>
-
-	* test/string-util.c:
-	* configure.ac:
-	* TODO:
-	* src/gstr.c:
-	* src/glib.h: implemented g_strlcpy.
-
-2006-10-08 Gonzalo Paniagua Javier <gonzalo at ximian.com>
-
-	* test/string-util.c:
-	* TODO:
-	* src/gstr.c:
-	* src/glib.h: implemented g_strdelimit.
-
-2006-10-07 Gonzalo Paniagua Javier <gonzalo at ximian.com>
-
-	* test/spawn.c: add search path flag when running ls.
-	* src/gspawn.c: g_spawn_command_line_sync searches the program in the
-	PATH if it's not an absolute path.
-
-2006-10-07 Gonzalo Paniagua Javier <gonzalo at ximian.com>
-
-	* test/string-util.c:
-	* src/glib.h: implement g_ascii_xdigit_value and tests.
-
-2006-10-06  Miguel de Icaza  <miguel at novell.com>
-
-	* src/gstr.c (g_ascii_strdown): Implement.
-
-	* str/glib.c (g_log_set_handler): empty.
-	(g_printerr): empty.
-	(GMemVTable): define, empty, ignored.
-	(G_USEC_PER_SEC) :-)
-
-	* src/gunicode.c (g_convert): Add bytes_read, bytes_written
-	support;   Small fixes to avoid valgrind errors. 
-	
-	(g_utf8_validate): Add, based on the libxml code.
-
-	gstr.c: implement g_strdown. 
-
-2006-10-05  Miguel de Icaza  <miguel at novell.com>
-
-	* src/gunicode.c: Some work in progress to implement g_convert
-	(which is needed by g_locale_to_utf8).    
-
-2006-09-18  Miguel de Icaza  <miguel at novell.com>
-
-	* test/string-util.c (test_filename_from_uri): tests for new
-	methods.
-
-	* src/gstr.c (g_filename_to_uri, g_filename_from_uri): implement. 
-
-2006-09-14  Atsushi Enomoto  <atsushi at ximian.com>
-
-	* src/gutf8.c, test/utf8.c : EOL fix.
-
-2006-09-04  Miguel de Icaza  <miguel at novell.com>
-
-	* src/gmarkup.c: The leak fixing commit.
-	
-	* src/gmarkup.c (g_markup_parse_context_end_parse): Add missing
-	method. 
-	(g_markup_parse_context_free): Implement. 
-	(parse_attributes): Store the value, not the attribute name
-	twice. 
-	Properly check the /> section.
-	(g_markup_parse_context_parse): When checking for error, use the
-	"error!=NULL && *error != NULL" upon return from callbacks,
-	it is only then that its valid to check for *error for error
-	conditions. 
-	(g_markup_parse_context_parse): Add comment processing.
-
-	Only release one element of the list.
-
-	* test/markup.c: Incorporate the kind of code that is used in Mono
-	for domain loading;  Will test the rest later. 
-
-2006-09-01  Miguel de Icaza  <miguel at novell.com>
-
-	* src/gmarkup.c (g_markup_parse_context_parse): Add text parsing
-	support, and end-element support; not tested yet.
-
-2006-09-01 Atsushi Enomoto <atsushi at ximian.com>
-
-	* gutf8.c : bad allocation size. multiply sizeof gchar/gunichar2.
-
-2006-09-01 Atsushi Enomoto <atsushi at ximian.com>
-
-	* gutf8.c : when error is null, utf8_to_utf16_len() and
-	  utf16_to_utf8_len() could return -1, so return NULL for those
-	  cases in g_utf8_to_utf16() and g_utf16_to_utf8().
-
-2006-09-01  Miguel de Icaza  <miguel at novell.com>
-
-	* src/gmarkup.c: Builds and does minimal parsing.
-
-	* test/markup.c: Sample test cases I have been using
-
-2006-08-31 Atsushi Enomoto <atsushi at ximian.com>
-
-	* src/gerror.h,
-	  src/gerror.c : added g_set_error().
-	* src/gutf8.c :
-	  g_utf8_to_utf16() and g_utf16_to_utf8() implementation.
-	* src/glib.h : added all above, and some dependent bits.
-	* src/Makefile.am : added gutf8.c.
-	* TODO: removed above.
-	* test/Makefile.am,
-	  test/tests.h : added utf8 tests.
-	* test/utf8.c : test for g_utf8_to_utf16 and g_utf16_to_utf8.
-	  It still needs more tests e.g. for multibytes.
-
-2006-08-31 Gonzalo Paniagua Javier <gonzalo at ximian.com>
-
-	* src/gspawn.c: small touch-ups and make read/write EINTR-proof.
-
-2006-08-31 Gonzalo Paniagua Javier <gonzalo at ximian.com>
-
-	* test/file.c: remove useless test.
-
-	* test/spawn.c: new g_spawn_async_with_pipes test.
-	* src/glib.h: Modified file.
-	* src/gspawn.c: implemented g_spawn_async_with_pipes. Needs fine tuning.
-
-2006-08-28 Gonzalo Paniagua Javier <gonzalo at ximian.com>
-
-	* TODO: Modified file.
-	* test/tests.h:
-	* test/pattern.c:
-	* test/dir.c:
-	* test/Makefile.am:
-	* src/Makefile.am:
-	* src/glib.h:
-	* src/gdir.c:
-	* src/gfile.c: implemented g_dir_*, unix version.
-
-2006-08-27 Gonzalo Paniagua Javier <gonzalo at ximian.com>
-
-	* src/glib.h:
-	* test/Makefile.am: Modified file.
-	* test/tests.h:
-	* src/Makefile.am: Modified file.
-	* test/pattern.c:
-	* src/gpattern.c: implemented the 3 pattern matching functions used.
-
-	* test/ptrarray.c: fix the compare function to work with qsort.
-
-	* test/file.c:
-	* test/path.c:
-	* src/gspawn.c:
-	* src/gpath.c: made valgrind happy.
-
-2006-08-26 Gonzalo Paniagua Javier <gonzalo at ximian.com>
-
-	* test/file.c:
-	* src/glib.h:
-	* src/gfile.c:  implemented g_file_test. Changed the default mask to
-	.XXXXXX. Add tests.
-
-2006-08-26  Raja R Harinath  <rharinath at novell.com>
-
-	* src/sort.frag.h (digit): Declare here based on externally
-	provided typedef 'list_node'.
-	(MAX_DIGITS): Use 'sizeof (list_node)'.
-	* src/gslist.c (list_node): Declare instead of 'digit'.
-	* src/glist.c: Likewise.
-
-	* test/slist.c (verify_sort): Verify the length of the list too.
-	(test_slist_sort): Free the correct list.
-	* test/list.c: Likewise.
-	* src/sort.frag.h (MAX_DIGITS): Rename from N_DIGITS.
-	(combine_sort): Change 'max_pos' argument to more natural
-	'n_digits'.
-	(increment): Likewise.  Use 'n_digits' to avoid reading at an
-	offset that hasn't been initialized.
-	(do_sort): Remove memset.
-
-2006-08-25 Gonzalo Paniagua Javier <gonzalo at ximian.com>
-
-	* TODO:
-	* test/file.c:
-	* src/glib.h:
-	* src/gfile.c: implement g_file_open_tmp.
-
-2006-08-25 Gonzalo Paniagua Javier <gonzalo at ximian.com>
-
-	* TODO:
-	* src/glib.h:
-	* src/gdate.c: New file.
-	* src/gfile.c: New file.
-	* src/Makefile.am: implemented g_file_get_contents and
-	g_get_current_time.
-
-	* test/tests.h:
-	* test/file.c: New file.
-	* test/Makefile.am: tests for the above.
-
-2006-08-26  Raja R Harinath  <rharinath at novell.com>
-
-	* src/sort.frag.h: Add copyright notice and some explanation.
-	(increment): Remove null check.
-	(combine_digits): Add 'list' argument to seed the summation.
-	(do_sort): Use the empty or singleton tail as the seed, rather
-	than calling 'increment'.
-
-2006-08-25  Raja R Harinath  <rharinath at novell.com>
-
-	* TODO: Remove 'List' entries.
-	* src/Makefile.am (libeglib_la_SOURCES): Add sort.frag.h.
-	* src/sort.frag.h: New.  Implements a "generic" bottom-up "counting"
-	mergesort that works both on singly- and doubly-linked lists.
-	* src/gslist.c (g_slist_sort): Use it.
-	* src/glist.c (g_list_sort): Likewise.
-	* src/glib.h (g_slist_sort, g_list_sort): Declare.
-	* test/slist.c, test/list.c: Add basic testcases.
-
-2006-08-25 Gonzalo Paniagua Javier <gonzalo at ximian.com>
-
-	* src/gspawn.c: propagate errors from reads.
-	* src/gpath.c: an empty PATH is like a NULL one.
-
-2006-08-25 Gonzalo Paniagua Javier <gonzalo at ximian.com>
-
-	* test/tests.h:
-	* test/timer.c:
-	* test/Makefile.am:
-	* TODO:
-	* src/glib.h:
-	* src/gtimer.c:
-	* src/Makefile.am: implemented GTimer.
-
-2006-08-25 Gonzalo Paniagua Javier <gonzalo at ximian.com>
-
-	* test/tests.h:
-	* test/Makefile.am:
-	* test/spawn.c:
-	* src/gspawn.c:
-	* src/glib.h:
-	* src/Makefile.am: initial implentation of g_spawn_command_line_sync.
-	Still need better error handling, but works for the most part.
-
-2006-08-25 Gonzalo Paniagua Javier <gonzalo at ximian.com>
-
-	* src/garray.c: grow faster so that the 'big' test does not crawl.
-
-2006-08-25 Gonzalo Paniagua Javier <gonzalo at ximian.com>
-
-	* test/shell.c:
-	* src/gqueue.c: plugged leaks.
-
-2006-08-25 Gonzalo Paniagua Javier <gonzalo at ximian.com>
-
-	* test/path.c:
-	* src/gpath.c: when PATH is not defined, the current dir is used.
-	See execvp(3).
-
-2006-08-25  Alp Toker  <alp at atoker.com>
-
-	* src/gstr.c: g_strv_length() should return guint, not gint
-	* src/glib.h: Add g_strv_length() prototype
-	
-2006-08-24  Miguel de Icaza  <miguel at novell.com>
-
-	* src/gpath.c (g_get_home_dir, g_get_tmp_dir, g_get_user_name,
-	g_get_prgname, g_set_prgname): implemented.
-
-	* test/ Fix leaks.
-	
-	* src/gpath.c (g_get_current_dir): Implement.
-
-	(g_find_program_in_path, g_path_is_absolute): implement.
-	
-	Add g_path_get_dirname, g_path_get_basename
-
-	* src/gpath.c: Path routines
-
-2006-08-23  Miguel de Icaza  <miguel at novell.com>
-
-	* src/gerror.c: Implement. 
-
-	* src/glist.c (g_list_sort): Remove routine instead of hoping that
-	it wont crash when we run it.
-
-2006-08-23  Raja R Harinath  <rharinath at novell.com>
-
-	* src/glist.c (g_list_insert_before): Avoid non-head declaration.
-
-	* test/slist.c (test_slist_insert_before): Add.
-	* src/gslist.c (g_slist_insert_before): Append if 'sibling' is null.
-
-	* test/list.c (test_list_insert_before): Add test for return value
-	of g_list_insert_before.
-	* test/Makefile.am (test_eglib_LDADD): Refer to the .la file so as
-	to rebuild test if eglib changes.
-	* src/glist.c (new_node, disconnect_node): New helpers that
-	maintain doubly-linked list invariants.
-	(g_list_prepend, g_list_append): Express in terms of new_node.
-	(g_list_insert_before): Likewise.  Fix return value when inserting
-	in the middle of the list.
-	(g_list_concat): Reorganize to make more compact.
-	(g_list_nth): Likewise.
-	(g_list_nth_data): Don't segfault if 'n' is too large.
-	(g_list_remove): Rewrite using _find and disconnect_node.
-	(g_list_remove_link): Don't traverse list: use disconnect_node.
-	(g_list_insert_sorted): Rewrite to make more compact.  Use new_node.
-	(g_list_copy): Likewise.
-	(_prepend, _concat): Remove.
-	* src/gslist.c (insert_after, find_prev, find_prev_link):
-	New helpers.
-	(g_slist_copy): Simplify slightly, using insert_after.
-	(g_slist_concat): Reorganize to make more compact.
-	(g_slist_find): Likewise.
-	(g_slist_insert_sorted): Likewise.
-	(g_slist_remove): Rewrite using find_prev.
-	(g_slist_remove_link): Rewrite using find_prev_link.
-	(g_slist_remove_all, g_slist_insert_before): New.
-
-2006-08-21  Duncan Mak  <duncan at a-chinaman.com>
-
-	* src/gqueue.c: GQueue implementation.
-	* src/glib.h: Add prototypes.
-	* src/Makefile.am (libeglib_la_SOURCES): Include gqueue.c.
-
-	* test/queue.c: 	
-	* test/Makefile.am (SOURCES):
-	* test/tests.h (DEFINE_TEST_GROUP_INIT_H): add tests for GQueue.
-
-2006-08-21  Aaron Bockover  <abockover at novell.com>
-
-	* src/gstr.c: fixed bug/invalid read/write on malloc-only case (no
-	realloc/delimiter token not found); use memcpy instead of strncpy for
-	better performance
-
-	* test/test.c (run_group): allow running specific tests under a group;
-	added copied g_strsplit/g_strfreev from EGlib source as eg_strsplit
-	and eg_strfreev to avoid performance skews in the driver
-	
-	* test/driver.c: allow user-specified group name to contain specific
-	test to run under the group as 'group_name:test1,test2,...testN'
-
-	* test/string-util.c: Added more g_strsplit tests
-
-	* test/slist.c:
-	* test/ptrarray.c:
-	* test/fake.c:
-	* test/string.c:
-	* test/list.c:
-	* test/array.c:
-	* test/hashtable.c: make test names shorter (no need to prefix with
-	the group since it runs under the group)
-
-2006-08-21  Miguel de Icaza  <miguel at novell.com>
-
-	* src/glib.h (g_hash_table_new_full): Add missing prototype.
-	Replace g_free(x) with plain free, so it can be used as a function
-	argument. 
-	Add ABS
-
-	* src/ghashtable.c: Add rehashing. 
-
-	* test/hashtable.c: Add a bunch of extra tests.
-
-	* src/goutput.c: Fix g_log so it actually formats the data. 
-
-	* src/ghashtable.c (g_hash_table_new): The glib test suite
-	uncovered a bunch of bugs, the g_hash_table_new should actually
-	have parameters.
-
-	(g_hash_table_remove, g_hash_table_foreach_remove): Fixed bugs
-	uncovered. 
-
-2006-08-20  Aaron Bockover  <abockover at novell.com>
-
-	* src/gmisc.c: added g_setenv, g_getenv, g_unsetenv
-
-	* src/gstr.c: added g_snprintf, g_sprintf, g_fprintf, g_printf
-
-	* src/glib.h: added macros for above va_args printf functions
-
-	* src/Makefile.am: added gmisc.c
-
-	* test/whats-implemented: script to see what needs to be implemented
-
-2006-08-20  Chris Toshok  <toshok at ximian.com>
-
-	* test/array.c (test_array_big): add a test from the glib
-	documentation.
-
-2006-08-20  Chris Toshok  <toshok at ximian.com>
-
-	* test/tests.h: add array tests to the mix.
-
-	* test/array.c: a few array tests.
-
-	* src/glib.h: add array prototypes.
-
-	* src/garray.c: initial array foo.
-
-	* test/Makefile.am (SOURCES): add array.c
-
-	* src/Makefile.am (libeglib_la_SOURCES): add garray.c
-
-2006-08-19  Aaron Bockover  <abockover at novell.com>
-
-	* src/gstring.c: optimize and generalize reallocation by providing
-	a GROW_IF_NECESSARY macro, do not use strcpy/strcat as they are 
-	very, very slow; GString is now much closer to GLib's implementation
-	in terms of performance
-
-	* test/string.c: added speed-specific tests to beat on reallocation code
-
-	* test/test-both: run make if the test drivers don't exist
-
-2006-08-19  Jonathan Chambers  <jonathan.chambers at gmail.com>
-
-	* src/gmodule.c: Add gmodule support for windows and fix
-	windows build. Contribution is licensed as MIT/X11.
-	
-2006-08-19  Aaron Bockover  <abockover at novell.com>
-
-	* test/driver.c: Added --debug mode that allows for testing all paths
-	of the driver without actually running real tests; runs only the 'fake'
-	test, which does nothing; useful for running the driver through valgrind
-
-	* test/Makefile.am:
-	* test/tests.h:
-	* test/fake.c: Added fake test for valgrinding the driver
-
-	* test/ptrarray.c: update sort test
-
-2006-08-19  Aaron Bockover  <abockover at novell.com>
-
-	* test/test-both: added --help
-
-2006-08-19  Aaron Bockover  <abockover at novell.com>
-
-	* test/driver.c: added -n mode to show only raw global run times,
-	which is useful for scripts (test-both --speed-compare)
-
-	* test/test-both: added --speed-compare mode
-
-	* test/README: updated with information on --speed-compare
-
-2006-08-19  Aaron Bockover  <abockover at novell.com>
-
-	* test/test.c: do not print times if -t is not passed
-
-	* test/driver.c: removed use of GList from the driver to avoid skews due
-	to performance differences between GLib and EGLib
-	
-2006-08-19  Aaron Bockover  <abockover at novell.com>
-
-	* test/test.c: Perform iterations at the test level, only output one
-	report for all iterations of tests in a group to produce more usable
-	output; add timing for the tests and group; added get_timestamp for
-	easy code timing
-
-	* test/test.h: Removed run_test as it should only be called from 
-	run_group, added get_timestamp
-
-	* test/Makefile.am: Added -DDRIVER_NAME 
-
-	* test/test-both: simple script to run both drivers with the same options
-
-	* test/driver.c: Iterations are now run at the test level, show a global
-	status (OK/FAIL) indicator
-
-	* test/README: Updated
-
-	* configure.ac: Renamed from configure.in as configure.in naming 
-	convention is deprecated in favor of configure.ac
-
-	* autogen.sh: s/configure.in/configure.ac/
-
-2006-08-19  Miguel de Icaza  <miguel at novell.com>
-
-	* Makefile.am: Removed MAINTAINERCLEANFILES that was too
-	aggresive, it failed make distcheck and the resulting tarball was
-	not buildable.
-
-	* src/glib.h: remove the various GPOINTER_TO_*, G*_TO_POINTER,
-	GSIZE_FORMAT macros, and move them into src/eglib-config.h
-
-	Moved also gssize and gsize to be arch specific.   This should fix
-	the 32/64 problems that Jon Chambers reported. 
-
-	* configure.in: test for pointer size, define the various values
-	depending on 32 vs 32/64 worlds, might need further porting in the
-	future. 
-
-	Change package name to eglib
-
-	* test/slist.c, test/list.c, test/hashtable.c: Update tests to use
-	FAILURE macro.
-
-	* test/string-util.c: fix leak for valgrind tests.
-
-	* test/tests.h: New size test, for testing datatypes.
-
-	* test/sizes.c: New tests.
-	
-2006-08-19  Aaron Bockover  <abockover at novell.com>
-
-	* test/README: Added quick guide on adding new tests/groups to the 
-	driver and some examples on how to perform various tests with the driver
-
-2006-08-18  Aaron Bockover  <abockover at novell.com>
-
-	* test/driver.c: Added getopt support and code timing, among other 
-	nice features to make testing/profiling easier
-
-	* test/test.c: Add support for suppressing output (quiet) and
-	define RESULT, FAILED, and OK
-
-	* src/glib.h:
-	* src/glist.c: Added g_list_nth_data implementation
-
-	* test/slist.c:
-	* test/string-util.c:
-	* test/ptrarray.c:
-	* test/string.c:
-	* test/hashtable.c:
-	* test/list.c: Use RESULT, FAILURE, and OK for tests
-
-2006-08-18  Miguel de Icaza  <miguel at novell.com>
-
-	* src/gstring.c (g_string_truncate): Implement truncate. 
-	(g_string_prepend): implement. 
-
-	Fix various bugs uncovered by new tests. 
-
-	* src/glib.h: introduce gssize type, the signed one.  Important. 
-
-	* src/eglib-config.h (G_OS_): Add the G_OS_UNIX and G_OS_WIN32
-	defines that we can use to check on the host OS.
-
-2006-08-18  Aaron Bockover  <abockover at novell.com>
-
-	* test/test.[ch]:
-	* test/driver.c: Support pass/fail logging on tests to show group report
-
-2006-08-18  Aaron Bockover  <abockover at novell.com>
-
-	* test/test.c: 
-	* test/test.h: Added result() to be used in place of g_strdup_printf(),
-	it's shorter to write and allows the duped string to be freed safely;
-	added license header to file
-
-	* test/driver.c: Added license header to file
-
-	* test/string-util.c:
-	* test/ptrarray.c:
-	* test/string.c:
-	* test/list.c: Use result() in place of g_strdup_printf(), it's nicer
-
-2006-08-18  Aaron Bockover  <abockover at novell.com>
-
-	* src/gptrarray.c: Implemented g_ptr_array_sort
-
-	* test/ptrarray.c: Added sort test
-	
-	* test/driver.c: Added --help; support running N iterations and allow
-	selecting which test groups to run; uses the test group table in tests.h
-	
-	* test/tests.h: Added group table
-	
-	* test/test.h:
-	* test/test.c: Using a Group structure and table, removed run_groups
-	as we only need run_group now
-
-	* test/slist.h: Removed, not needed, tests/groups defined in tests.h
-
-2006-08-18  Miguel de Icaza  <miguel at novell.com>
-
-	* src/unicode.c: New file, to host unicode code, it will throw as
-	this code is no longer used in the Mono runtime anyways.
-	
-	* src/glib.h: Use stdint.h types, a lot of the good stuff is
-	replicated by glib.
-
-2006-08-18  Duncan Mak  <duncan at a-chinaman.com>
-
-	* src/glist.c (g_list_remove, g_list_remove_link): Implemented.	
-
-	* src/gslist.c (g_slist_remove): Remember to set the next pointer
-	to NULL when the item to remove is the first item in the list.
-	
-2006-08-18  Duncan Mak  <duncan at a-chinaman.com>
-
-	* src/glist.c: Implemented. Missing remove,
-	remove_link and insert_before.
-
-	* test/list.c: Tests for GList.
-
-2006-08-17  Aaron Bockover  <abockover at novell.com>
-
-	* src/gptrarray.c: Implemented g_ptr_array_remove and 
-	g_ptr_array_remove_index
-
-	* test/other: Removed, rewritten in Makefile.am
-
-	* test/Makefile.am: Build test-eglib against local eglib and 
-	test-glib against GLib 2.0 (replaces 'other')
-
-	* test/ptrarray.c: Added tests for g_ptr_array_remove and
-	g_ptr_array_remove_index
-
-2006-08-17  Duncan Mak  <duncan at a-chinaman.com>
-
-	* src/gslist.c: Added MIT license.
-	(g_slist_insert_sorted): Forgot the case where the data is
-	appended to the end of the list.
-
-	* test/slist.c (test_slist_insert_sorted): Fix the test.	
-
-2006-08-17  Aaron Bockover  <abockover at novell.com>
-
-	* src/gptrarray.c: Added g_ptr_array_set_size implementation
-
-	* test/ptrarray.c: Added test for g_ptr_array_set_size
-
-2006-08-17  Miguel de Icaza  <miguel at novell.com>
-
-	* src/glib.h: A handful of extra macros
-
-	* configure.in, src/eglib-config.h.in: Set some system-specific
-	settings that are probed at configure time.
-
-2006-08-17  Aaron Bockover  <abockover at novell.com>
-
-	* src/gptrarray.c: Added beginnings of GPtrArray (alloc, free, add, iterate)
-
-	* src/glib.h: Added GPtrArray signatures
-
-	* src/Makefile.am: Added gptrarray.c to build
-
-	* test/ptrarray.c:
-	* test/tests.h:
-	* test/driver.c:
-	* test/Makefile.am: Add ptrarray tests for available functionality
-
-2006-08-17  Aaron Bockover  <abockover at novell.com>
-	
-	* test/test.h: 
-	* test/test.c: Added group iterator/test driver functionality
-	
-	* test/driver.c: Added groups to run using new test functionality
-	
-	* test/slist.h:
-	* test/hashtable.h:
-	* test/string-util.h: Test group definitions for string util/hashtable
-
-	* test/slist.c:
-	* test/str.c: 
-	* test/hash.c: Added test definition table 
-
-	* test/Makefile.am: Added -Wall -Werror -D_FORTIFY_SOURCE=2
-
-	* src/gstr.c: Added implementation for g_str_has_prefix, g_str_has_suffix
-
-	* src/glib.h: Added missing function signatures
-
-	* src/Makefile.am: added -D_FORTIFY_SOURCE=2 
-
-2006-08-17  Duncan Mak  <duncan at a-chinaman.com>
-
-	* src/gslist.c (g_slist_remove_link): I misread the function
-	signature. Re-implemented.
-	(g_slist_delete_link): Implemented.
-	(g_slist_reverse): Implemented.
-	(g_slist_insert_sorted): Implemented.
-
-2006-08-17  Duncan Mak  <duncan at a-chinaman.com>
-
-	* src/gslist.c (g_slist_find): 
-	(g_slist_length):
-	(g_slist_remove):
-	(g_slist_remove_link): Implemented.
-
-	* test/slist.c: Tests for GSList.
-
-2006-08-17  Raja R Harinath  <harinath at gmail.com>
-
-	* src/gslist.c (g_slist_free_1): New.  Free a single list node.
-	(g_slist_free): Use it to free the list nodes.  Don't free the
-	data, since the list doesn't own it.
-	(g_slist_append): Convert into a one-liner.
-	(g_slist_foreach): Remove redundant null check.
-	(g_slist_last): Actually return the last node.
-	(g_slist_copy): Simplify.
-	* src/gslist.h (g_slist_free_1): Add.
-
-2006-08-16  Duncan Mak  <duncan at a-chinaman.com>
-
-	* src/gslist.c:
-
-	* src/gslist.h: First attempt at implementing GSList, incomplete.
-
-	* src/Makefile.am (libeglib_la_SOURCES): add gslist.c
-	* src/glib.h: Add GFunc definition. #include the new gslist.h.
-
-2006-08-16  Miguel de Icaza  <miguel at novell.com>
-
-	* src/Makefile.am: Added -Wall,-Werror, corrected lots of
-	mistakes.
-
-	* src/gstring.c: Gstring implementation.
-
-	* test/str.c (test_gstring): string tests.
-
-2006-08-16  Aaron Bockover  <abockover at novell.com>
-
-	* src/gstr.c: Added g_strsplit implementation
-
-	* test/driver.c: Run the split test
-
-	* test/str.c: Added a test for g_strsplit
-
-	* Makefile.am:
-	* src/Makefile.am:
-	* test/Makefile.am: Added MAINTAINERCLEANFILES
-
-2006-08-16  Miguel de Icaza  <miguel at novell.com>
-
-	* src/gouput.c: Implement some output routines, update missing
-	progress. 
-
-	* test: Add test driver, and initial tests. 
-
-2006-08-15  Miguel de Icaza  <miguel at novell.com>
-
-	* src/ghashtable.c: Implement most of this, it is completely
-	untested at this point.
-
-
-
diff --git a/eglib/INSTALL b/eglib/INSTALL
deleted file mode 100644
index 7d1c323..0000000
--- a/eglib/INSTALL
+++ /dev/null
@@ -1,365 +0,0 @@
-Installation Instructions
-*************************
-
-Copyright (C) 1994, 1995, 1996, 1999, 2000, 2001, 2002, 2004, 2005,
-2006, 2007, 2008, 2009 Free Software Foundation, Inc.
-
-   Copying and distribution of this file, with or without modification,
-are permitted in any medium without royalty provided the copyright
-notice and this notice are preserved.  This file is offered as-is,
-without warranty of any kind.
-
-Basic Installation
-==================
-
-   Briefly, the shell commands `./configure; make; make install' should
-configure, build, and install this package.  The following
-more-detailed instructions are generic; see the `README' file for
-instructions specific to this package.  Some packages provide this
-`INSTALL' file but do not implement all of the features documented
-below.  The lack of an optional feature in a given package is not
-necessarily a bug.  More recommendations for GNU packages can be found
-in *note Makefile Conventions: (standards)Makefile Conventions.
-
-   The `configure' shell script attempts to guess correct values for
-various system-dependent variables used during compilation.  It uses
-those values to create a `Makefile' in each directory of the package.
-It may also create one or more `.h' files containing system-dependent
-definitions.  Finally, it creates a shell script `config.status' that
-you can run in the future to recreate the current configuration, and a
-file `config.log' containing compiler output (useful mainly for
-debugging `configure').
-
-   It can also use an optional file (typically called `config.cache'
-and enabled with `--cache-file=config.cache' or simply `-C') that saves
-the results of its tests to speed up reconfiguring.  Caching is
-disabled by default to prevent problems with accidental use of stale
-cache files.
-
-   If you need to do unusual things to compile the package, please try
-to figure out how `configure' could check whether to do them, and mail
-diffs or instructions to the address given in the `README' so they can
-be considered for the next release.  If you are using the cache, and at
-some point `config.cache' contains results you don't want to keep, you
-may remove or edit it.
-
-   The file `configure.ac' (or `configure.in') is used to create
-`configure' by a program called `autoconf'.  You need `configure.ac' if
-you want to change it or regenerate `configure' using a newer version
-of `autoconf'.
-
-   The simplest way to compile this package is:
-
-  1. `cd' to the directory containing the package's source code and type
-     `./configure' to configure the package for your system.
-
-     Running `configure' might take a while.  While running, it prints
-     some messages telling which features it is checking for.
-
-  2. Type `make' to compile the package.
-
-  3. Optionally, type `make check' to run any self-tests that come with
-     the package, generally using the just-built uninstalled binaries.
-
-  4. Type `make install' to install the programs and any data files and
-     documentation.  When installing into a prefix owned by root, it is
-     recommended that the package be configured and built as a regular
-     user, and only the `make install' phase executed with root
-     privileges.
-
-  5. Optionally, type `make installcheck' to repeat any self-tests, but
-     this time using the binaries in their final installed location.
-     This target does not install anything.  Running this target as a
-     regular user, particularly if the prior `make install' required
-     root privileges, verifies that the installation completed
-     correctly.
-
-  6. You can remove the program binaries and object files from the
-     source code directory by typing `make clean'.  To also remove the
-     files that `configure' created (so you can compile the package for
-     a different kind of computer), type `make distclean'.  There is
-     also a `make maintainer-clean' target, but that is intended mainly
-     for the package's developers.  If you use it, you may have to get
-     all sorts of other programs in order to regenerate files that came
-     with the distribution.
-
-  7. Often, you can also type `make uninstall' to remove the installed
-     files again.  In practice, not all packages have tested that
-     uninstallation works correctly, even though it is required by the
-     GNU Coding Standards.
-
-  8. Some packages, particularly those that use Automake, provide `make
-     distcheck', which can by used by developers to test that all other
-     targets like `make install' and `make uninstall' work correctly.
-     This target is generally not run by end users.
-
-Compilers and Options
-=====================
-
-   Some systems require unusual options for compilation or linking that
-the `configure' script does not know about.  Run `./configure --help'
-for details on some of the pertinent environment variables.
-
-   You can give `configure' initial values for configuration parameters
-by setting variables in the command line or in the environment.  Here
-is an example:
-
-     ./configure CC=c99 CFLAGS=-g LIBS=-lposix
-
-   *Note Defining Variables::, for more details.
-
-Compiling For Multiple Architectures
-====================================
-
-   You can compile the package for more than one kind of computer at the
-same time, by placing the object files for each architecture in their
-own directory.  To do this, you can use GNU `make'.  `cd' to the
-directory where you want the object files and executables to go and run
-the `configure' script.  `configure' automatically checks for the
-source code in the directory that `configure' is in and in `..'.  This
-is known as a "VPATH" build.
-
-   With a non-GNU `make', it is safer to compile the package for one
-architecture at a time in the source code directory.  After you have
-installed the package for one architecture, use `make distclean' before
-reconfiguring for another architecture.
-
-   On MacOS X 10.5 and later systems, you can create libraries and
-executables that work on multiple system types--known as "fat" or
-"universal" binaries--by specifying multiple `-arch' options to the
-compiler but only a single `-arch' option to the preprocessor.  Like
-this:
-
-     ./configure CC="gcc -arch i386 -arch x86_64 -arch ppc -arch ppc64" \
-                 CXX="g++ -arch i386 -arch x86_64 -arch ppc -arch ppc64" \
-                 CPP="gcc -E" CXXCPP="g++ -E"
-
-   This is not guaranteed to produce working output in all cases, you
-may have to build one architecture at a time and combine the results
-using the `lipo' tool if you have problems.
-
-Installation Names
-==================
-
-   By default, `make install' installs the package's commands under
-`/usr/local/bin', include files under `/usr/local/include', etc.  You
-can specify an installation prefix other than `/usr/local' by giving
-`configure' the option `--prefix=PREFIX', where PREFIX must be an
-absolute file name.
-
-   You can specify separate installation prefixes for
-architecture-specific files and architecture-independent files.  If you
-pass the option `--exec-prefix=PREFIX' to `configure', the package uses
-PREFIX as the prefix for installing programs and libraries.
-Documentation and other data files still use the regular prefix.
-
-   In addition, if you use an unusual directory layout you can give
-options like `--bindir=DIR' to specify different values for particular
-kinds of files.  Run `configure --help' for a list of the directories
-you can set and what kinds of files go in them.  In general, the
-default for these options is expressed in terms of `${prefix}', so that
-specifying just `--prefix' will affect all of the other directory
-specifications that were not explicitly provided.
-
-   The most portable way to affect installation locations is to pass the
-correct locations to `configure'; however, many packages provide one or
-both of the following shortcuts of passing variable assignments to the
-`make install' command line to change installation locations without
-having to reconfigure or recompile.
-
-   The first method involves providing an override variable for each
-affected directory.  For example, `make install
-prefix=/alternate/directory' will choose an alternate location for all
-directory configuration variables that were expressed in terms of
-`${prefix}'.  Any directories that were specified during `configure',
-but not in terms of `${prefix}', must each be overridden at install
-time for the entire installation to be relocated.  The approach of
-makefile variable overrides for each directory variable is required by
-the GNU Coding Standards, and ideally causes no recompilation.
-However, some platforms have known limitations with the semantics of
-shared libraries that end up requiring recompilation when using this
-method, particularly noticeable in packages that use GNU Libtool.
-
-   The second method involves providing the `DESTDIR' variable.  For
-example, `make install DESTDIR=/alternate/directory' will prepend
-`/alternate/directory' before all installation names.  The approach of
-`DESTDIR' overrides is not required by the GNU Coding Standards, and
-does not work on platforms that have drive letters.  On the other hand,
-it does better at avoiding recompilation issues, and works well even
-when some directory options were not specified in terms of `${prefix}'
-at `configure' time.
-
-Optional Features
-=================
-
-   If the package supports it, you can cause programs to be installed
-with an extra prefix or suffix on their names by giving `configure' the
-option `--program-prefix=PREFIX' or `--program-suffix=SUFFIX'.
-
-   Some packages pay attention to `--enable-FEATURE' options to
-`configure', where FEATURE indicates an optional part of the package.
-They may also pay attention to `--with-PACKAGE' options, where PACKAGE
-is something like `gnu-as' or `x' (for the X Window System).  The
-`README' should mention any `--enable-' and `--with-' options that the
-package recognizes.
-
-   For packages that use the X Window System, `configure' can usually
-find the X include and library files automatically, but if it doesn't,
-you can use the `configure' options `--x-includes=DIR' and
-`--x-libraries=DIR' to specify their locations.
-
-   Some packages offer the ability to configure how verbose the
-execution of `make' will be.  For these packages, running `./configure
---enable-silent-rules' sets the default to minimal output, which can be
-overridden with `make V=1'; while running `./configure
---disable-silent-rules' sets the default to verbose, which can be
-overridden with `make V=0'.
-
-Particular systems
-==================
-
-   On HP-UX, the default C compiler is not ANSI C compatible.  If GNU
-CC is not installed, it is recommended to use the following options in
-order to use an ANSI C compiler:
-
-     ./configure CC="cc -Ae -D_XOPEN_SOURCE=500"
-
-and if that doesn't work, install pre-built binaries of GCC for HP-UX.
-
-   On OSF/1 a.k.a. Tru64, some versions of the default C compiler cannot
-parse its `<wchar.h>' header file.  The option `-nodtk' can be used as
-a workaround.  If GNU CC is not installed, it is therefore recommended
-to try
-
-     ./configure CC="cc"
-
-and if that doesn't work, try
-
-     ./configure CC="cc -nodtk"
-
-   On Solaris, don't put `/usr/ucb' early in your `PATH'.  This
-directory contains several dysfunctional programs; working variants of
-these programs are available in `/usr/bin'.  So, if you need `/usr/ucb'
-in your `PATH', put it _after_ `/usr/bin'.
-
-   On Haiku, software installed for all users goes in `/boot/common',
-not `/usr/local'.  It is recommended to use the following options:
-
-     ./configure --prefix=/boot/common
-
-Specifying the System Type
-==========================
-
-   There may be some features `configure' cannot figure out
-automatically, but needs to determine by the type of machine the package
-will run on.  Usually, assuming the package is built to be run on the
-_same_ architectures, `configure' can figure that out, but if it prints
-a message saying it cannot guess the machine type, give it the
-`--build=TYPE' option.  TYPE can either be a short name for the system
-type, such as `sun4', or a canonical name which has the form:
-
-     CPU-COMPANY-SYSTEM
-
-where SYSTEM can have one of these forms:
-
-     OS
-     KERNEL-OS
-
-   See the file `config.sub' for the possible values of each field.  If
-`config.sub' isn't included in this package, then this package doesn't
-need to know the machine type.
-
-   If you are _building_ compiler tools for cross-compiling, you should
-use the option `--target=TYPE' to select the type of system they will
-produce code for.
-
-   If you want to _use_ a cross compiler, that generates code for a
-platform different from the build platform, you should specify the
-"host" platform (i.e., that on which the generated programs will
-eventually be run) with `--host=TYPE'.
-
-Sharing Defaults
-================
-
-   If you want to set default values for `configure' scripts to share,
-you can create a site shell script called `config.site' that gives
-default values for variables like `CC', `cache_file', and `prefix'.
-`configure' looks for `PREFIX/share/config.site' if it exists, then
-`PREFIX/etc/config.site' if it exists.  Or, you can set the
-`CONFIG_SITE' environment variable to the location of the site script.
-A warning: not all `configure' scripts look for a site script.
-
-Defining Variables
-==================
-
-   Variables not defined in a site shell script can be set in the
-environment passed to `configure'.  However, some packages may run
-configure again during the build, and the customized values of these
-variables may be lost.  In order to avoid this problem, you should set
-them in the `configure' command line, using `VAR=value'.  For example:
-
-     ./configure CC=/usr/local2/bin/gcc
-
-causes the specified `gcc' to be used as the C compiler (unless it is
-overridden in the site shell script).
-
-Unfortunately, this technique does not work for `CONFIG_SHELL' due to
-an Autoconf bug.  Until the bug is fixed you can use this workaround:
-
-     CONFIG_SHELL=/bin/bash /bin/bash ./configure CONFIG_SHELL=/bin/bash
-
-`configure' Invocation
-======================
-
-   `configure' recognizes the following options to control how it
-operates.
-
-`--help'
-`-h'
-     Print a summary of all of the options to `configure', and exit.
-
-`--help=short'
-`--help=recursive'
-     Print a summary of the options unique to this package's
-     `configure', and exit.  The `short' variant lists options used
-     only in the top level, while the `recursive' variant lists options
-     also present in any nested packages.
-
-`--version'
-`-V'
-     Print the version of Autoconf used to generate the `configure'
-     script, and exit.
-
-`--cache-file=FILE'
-     Enable the cache: use and save the results of the tests in FILE,
-     traditionally `config.cache'.  FILE defaults to `/dev/null' to
-     disable caching.
-
-`--config-cache'
-`-C'
-     Alias for `--cache-file=config.cache'.
-
-`--quiet'
-`--silent'
-`-q'
-     Do not print messages saying which checks are being made.  To
-     suppress all normal output, redirect it to `/dev/null' (any error
-     messages will still be shown).
-
-`--srcdir=DIR'
-     Look for the package's source code in directory DIR.  Usually
-     `configure' can determine that directory automatically.
-
-`--prefix=DIR'
-     Use DIR as the installation prefix.  *note Installation Names::
-     for more details, including other options available for fine-tuning
-     the installation locations.
-
-`--no-create'
-`-n'
-     Run the configure checks, but stop before creating any output
-     files.
-
-`configure' also accepts some other, not widely useful, options.  Run
-`configure --help' for more details.
-
diff --git a/eglib/Makefile.am b/eglib/Makefile.am
index 136de50..b7e5cd6 100644
--- a/eglib/Makefile.am
+++ b/eglib/Makefile.am
@@ -1,16 +1,17 @@
+ACLOCAL_AMFLAGS = -I m4
+
 if HOST_WIN32
-SUBDIRS = src
+SUBDIRS = m4 src
 else
 if PLATFORM_DARWIN
-SUBDIRS = src
+SUBDIRS = m4 src
 else
 if CROSS_COMPILING
-SUBDIRS = src
+SUBDIRS = m4 src
 else
-SUBDIRS = src test
+SUBDIRS = m4 src test
 endif
 endif
 endif
 
 EXTRA_DIST = autogen.sh README NEWS AUTHORS ChangeLog winconfig.h
-
diff --git a/eglib/Makefile.in b/eglib/Makefile.in
index 4fb433c..aa7b394 100644
--- a/eglib/Makefile.in
+++ b/eglib/Makefile.in
@@ -36,15 +36,19 @@ host_triplet = @host@
 target_triplet = @target@
 subdir = .
 DIST_COMMON = README $(am__configure_deps) $(srcdir)/../config.guess \
-	$(srcdir)/../config.sub $(srcdir)/../install-sh \
-	$(srcdir)/../ltmain.sh $(srcdir)/../missing \
-	$(srcdir)/../mkinstalldirs $(srcdir)/Makefile.am \
-	$(srcdir)/Makefile.in $(srcdir)/config.h.in \
-	$(top_srcdir)/configure AUTHORS COPYING ChangeLog INSTALL NEWS \
-	TODO
+	$(srcdir)/../config.rpath $(srcdir)/../config.sub \
+	$(srcdir)/../install-sh $(srcdir)/../ltmain.sh \
+	$(srcdir)/../missing $(srcdir)/../mkinstalldirs \
+	$(srcdir)/Makefile.am $(srcdir)/Makefile.in \
+	$(srcdir)/config.h.in $(top_srcdir)/configure AUTHORS COPYING \
+	ChangeLog NEWS TODO config.rpath
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \
-	$(top_srcdir)/configure.ac
+am__aclocal_m4_deps = $(top_srcdir)/m4/iconv.m4 \
+	$(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
+	$(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \
@@ -69,7 +73,7 @@ AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \
 	distdir dist dist-all distcheck
 ETAGS = etags
 CTAGS = ctags
-DIST_SUBDIRS = src test
+DIST_SUBDIRS = m4 src test
 DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
 distdir = $(PACKAGE)-$(VERSION)
 top_distdir = $(distdir)
@@ -102,8 +106,8 @@ am__relativize = \
     dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \
   done; \
   reldir="$$dir2"
-DIST_ARCHIVES = $(distdir).tar.gz
 GZIP_ENV = --best
+DIST_ARCHIVES = $(distdir).tar.bz2
 distuninstallcheck_listfiles = find . -type f -print
 distcleancheck_listfiles = find . -type f -print
 ACLOCAL = @ACLOCAL@
@@ -141,11 +145,12 @@ GREP = @GREP@
 GSIZE = @GSIZE@
 GSIZE_FORMAT = @GSIZE_FORMAT@
 GUINT_TO_POINTER = @GUINT_TO_POINTER@
+G_GINT32_FORMAT = @G_GINT32_FORMAT@
 G_GINT64_FORMAT = @G_GINT64_FORMAT@
+G_GUINT32_FORMAT = @G_GUINT32_FORMAT@
 G_GUINT64_FORMAT = @G_GUINT64_FORMAT@
 G_HAVE_ISO_VARARGS = @G_HAVE_ISO_VARARGS@
 HAVE_ALLOCA_H = @HAVE_ALLOCA_H@
-ICONV_LIBS = @ICONV_LIBS@
 INSTALL = @INSTALL@
 INSTALL_DATA = @INSTALL_DATA@
 INSTALL_PROGRAM = @INSTALL_PROGRAM@
@@ -153,6 +158,7 @@ INSTALL_SCRIPT = @INSTALL_SCRIPT@
 INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
 LD = @LD@
 LDFLAGS = @LDFLAGS@
+LIBICONV = @LIBICONV@
 LIBOBJS = @LIBOBJS@
 LIBS = @LIBS@
 LIBTOOL = @LIBTOOL@
@@ -160,6 +166,7 @@ LIPO = @LIPO@
 LN_S = @LN_S@
 LTCOMPILE = @LTCOMPILE@
 LTCXXCOMPILE = @LTCXXCOMPILE@
+LTLIBICONV = @LTLIBICONV@
 LTLIBOBJS = @LTLIBOBJS@
 MAINT = @MAINT@
 MAKEINFO = @MAKEINFO@
@@ -246,10 +253,11 @@ target_vendor = @target_vendor@
 top_build_prefix = @top_build_prefix@
 top_builddir = @top_builddir@
 top_srcdir = @top_srcdir@
- at CROSS_COMPILING_FALSE@@HOST_WIN32_FALSE@@PLATFORM_DARWIN_FALSE at SUBDIRS = src test
- at CROSS_COMPILING_TRUE@@HOST_WIN32_FALSE@@PLATFORM_DARWIN_FALSE at SUBDIRS = src
- at HOST_WIN32_FALSE@@PLATFORM_DARWIN_TRUE at SUBDIRS = src
- at HOST_WIN32_TRUE@SUBDIRS = src
+ACLOCAL_AMFLAGS = -I m4
+ at CROSS_COMPILING_FALSE@@HOST_WIN32_FALSE@@PLATFORM_DARWIN_FALSE at SUBDIRS = m4 src test
+ at CROSS_COMPILING_TRUE@@HOST_WIN32_FALSE@@PLATFORM_DARWIN_FALSE at SUBDIRS = m4 src
+ at HOST_WIN32_FALSE@@PLATFORM_DARWIN_TRUE at SUBDIRS = m4 src
+ at HOST_WIN32_TRUE@SUBDIRS = m4 src
 EXTRA_DIST = autogen.sh README NEWS AUTHORS ChangeLog winconfig.h
 all: config.h
 	$(MAKE) $(AM_MAKEFLAGS) all-recursive
@@ -261,15 +269,15 @@ $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__confi
 	@for dep in $?; do \
 	  case '$(am__configure_deps)' in \
 	    *$$dep*) \
-	      echo ' cd $(srcdir) && $(AUTOMAKE) --gnu'; \
-	      $(am__cd) $(srcdir) && $(AUTOMAKE) --gnu \
+	      echo ' cd $(srcdir) && $(AUTOMAKE) --foreign'; \
+	      $(am__cd) $(srcdir) && $(AUTOMAKE) --foreign \
 		&& exit 0; \
 	      exit 1;; \
 	  esac; \
 	done; \
-	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu Makefile'; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign Makefile'; \
 	$(am__cd) $(top_srcdir) && \
-	  $(AUTOMAKE) --gnu Makefile
+	  $(AUTOMAKE) --foreign Makefile
 .PRECIOUS: Makefile
 Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
 	@case '$?' in \
@@ -521,7 +529,6 @@ distdir: $(DISTFILES)
 dist-gzip: distdir
 	tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz
 	$(am__remove_distdir)
-
 dist-bzip2: distdir
 	tardir=$(distdir) && $(am__tar) | bzip2 -9 -c >$(distdir).tar.bz2
 	$(am__remove_distdir)
@@ -548,7 +555,7 @@ dist-zip: distdir
 	$(am__remove_distdir)
 
 dist dist-all: distdir
-	tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz
+	tardir=$(distdir) && $(am__tar) | bzip2 -9 -c >$(distdir).tar.bz2
 	$(am__remove_distdir)
 
 # This target untars the dist file and tries a VPATH configuration.  Then
diff --git a/eglib/aclocal.m4 b/eglib/aclocal.m4
index c2cd2ec..8c56160 100644
--- a/eglib/aclocal.m4
+++ b/eglib/aclocal.m4
@@ -19,7960 +19,6 @@ You have another version of autoconf.  It may work, but is not guaranteed to.
 If you have problems, you may need to regenerate the build system entirely.
 To do so, use the procedure documented by the package, typically `autoreconf'.])])
 
-# libtool.m4 - Configure libtool for the host system. -*-Autoconf-*-
-#
-#   Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005,
-#                 2006, 2007, 2008 Free Software Foundation, Inc.
-#   Written by Gordon Matzigkeit, 1996
-#
-# This file is free software; the Free Software Foundation gives
-# unlimited permission to copy and/or distribute it, with or without
-# modifications, as long as this notice is preserved.
-
-m4_define([_LT_COPYING], [dnl
-#   Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005,
-#                 2006, 2007, 2008 Free Software Foundation, Inc.
-#   Written by Gordon Matzigkeit, 1996
-#
-#   This file is part of GNU Libtool.
-#
-# GNU Libtool is free software; you can redistribute it and/or
-# modify it under the terms of the GNU General Public License as
-# published by the Free Software Foundation; either version 2 of
-# the License, or (at your option) any later version.
-#
-# As a special exception to the GNU General Public License,
-# if you distribute this file as part of a program or library that
-# is built using GNU Libtool, you may include this file under the
-# same distribution terms that you use for the rest of that program.
-#
-# GNU Libtool is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with GNU Libtool; see the file COPYING.  If not, a copy
-# can be downloaded from http://www.gnu.org/licenses/gpl.html, or
-# obtained by writing to the Free Software Foundation, Inc.,
-# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
-])
-
-# serial 56 LT_INIT
-
-
-# LT_PREREQ(VERSION)
-# ------------------
-# Complain and exit if this libtool version is less that VERSION.
-m4_defun([LT_PREREQ],
-[m4_if(m4_version_compare(m4_defn([LT_PACKAGE_VERSION]), [$1]), -1,
-       [m4_default([$3],
-		   [m4_fatal([Libtool version $1 or higher is required],
-		             63)])],
-       [$2])])
-
-
-# _LT_CHECK_BUILDDIR
-# ------------------
-# Complain if the absolute build directory name contains unusual characters
-m4_defun([_LT_CHECK_BUILDDIR],
-[case `pwd` in
-  *\ * | *\	*)
-    AC_MSG_WARN([Libtool does not cope well with whitespace in `pwd`]) ;;
-esac
-])
-
-
-# LT_INIT([OPTIONS])
-# ------------------
-AC_DEFUN([LT_INIT],
-[AC_PREREQ([2.58])dnl We use AC_INCLUDES_DEFAULT
-AC_BEFORE([$0], [LT_LANG])dnl
-AC_BEFORE([$0], [LT_OUTPUT])dnl
-AC_BEFORE([$0], [LTDL_INIT])dnl
-m4_require([_LT_CHECK_BUILDDIR])dnl
-
-dnl Autoconf doesn't catch unexpanded LT_ macros by default:
-m4_pattern_forbid([^_?LT_[A-Z_]+$])dnl
-m4_pattern_allow([^(_LT_EOF|LT_DLGLOBAL|LT_DLLAZY_OR_NOW|LT_MULTI_MODULE)$])dnl
-dnl aclocal doesn't pull ltoptions.m4, ltsugar.m4, or ltversion.m4
-dnl unless we require an AC_DEFUNed macro:
-AC_REQUIRE([LTOPTIONS_VERSION])dnl
-AC_REQUIRE([LTSUGAR_VERSION])dnl
-AC_REQUIRE([LTVERSION_VERSION])dnl
-AC_REQUIRE([LTOBSOLETE_VERSION])dnl
-m4_require([_LT_PROG_LTMAIN])dnl
-
-dnl Parse OPTIONS
-_LT_SET_OPTIONS([$0], [$1])
-
-# This can be used to rebuild libtool when needed
-LIBTOOL_DEPS="$ltmain"
-
-# Always use our own libtool.
-LIBTOOL='$(SHELL) $(top_builddir)/libtool'
-AC_SUBST(LIBTOOL)dnl
-
-_LT_SETUP
-
-# Only expand once:
-m4_define([LT_INIT])
-])# LT_INIT
-
-# Old names:
-AU_ALIAS([AC_PROG_LIBTOOL], [LT_INIT])
-AU_ALIAS([AM_PROG_LIBTOOL], [LT_INIT])
-dnl aclocal-1.4 backwards compatibility:
-dnl AC_DEFUN([AC_PROG_LIBTOOL], [])
-dnl AC_DEFUN([AM_PROG_LIBTOOL], [])
-
-
-# _LT_CC_BASENAME(CC)
-# -------------------
-# Calculate cc_basename.  Skip known compiler wrappers and cross-prefix.
-m4_defun([_LT_CC_BASENAME],
-[for cc_temp in $1""; do
-  case $cc_temp in
-    compile | *[[\\/]]compile | ccache | *[[\\/]]ccache ) ;;
-    distcc | *[[\\/]]distcc | purify | *[[\\/]]purify ) ;;
-    \-*) ;;
-    *) break;;
-  esac
-done
-cc_basename=`$ECHO "X$cc_temp" | $Xsed -e 's%.*/%%' -e "s%^$host_alias-%%"`
-])
-
-
-# _LT_FILEUTILS_DEFAULTS
-# ----------------------
-# It is okay to use these file commands and assume they have been set
-# sensibly after `m4_require([_LT_FILEUTILS_DEFAULTS])'.
-m4_defun([_LT_FILEUTILS_DEFAULTS],
-[: ${CP="cp -f"}
-: ${MV="mv -f"}
-: ${RM="rm -f"}
-])# _LT_FILEUTILS_DEFAULTS
-
-
-# _LT_SETUP
-# ---------
-m4_defun([_LT_SETUP],
-[AC_REQUIRE([AC_CANONICAL_HOST])dnl
-AC_REQUIRE([AC_CANONICAL_BUILD])dnl
-_LT_DECL([], [host_alias], [0], [The host system])dnl
-_LT_DECL([], [host], [0])dnl
-_LT_DECL([], [host_os], [0])dnl
-dnl
-_LT_DECL([], [build_alias], [0], [The build system])dnl
-_LT_DECL([], [build], [0])dnl
-_LT_DECL([], [build_os], [0])dnl
-dnl
-AC_REQUIRE([AC_PROG_CC])dnl
-AC_REQUIRE([LT_PATH_LD])dnl
-AC_REQUIRE([LT_PATH_NM])dnl
-dnl
-AC_REQUIRE([AC_PROG_LN_S])dnl
-test -z "$LN_S" && LN_S="ln -s"
-_LT_DECL([], [LN_S], [1], [Whether we need soft or hard links])dnl
-dnl
-AC_REQUIRE([LT_CMD_MAX_LEN])dnl
-_LT_DECL([objext], [ac_objext], [0], [Object file suffix (normally "o")])dnl
-_LT_DECL([], [exeext], [0], [Executable file suffix (normally "")])dnl
-dnl
-m4_require([_LT_FILEUTILS_DEFAULTS])dnl
-m4_require([_LT_CHECK_SHELL_FEATURES])dnl
-m4_require([_LT_CMD_RELOAD])dnl
-m4_require([_LT_CHECK_MAGIC_METHOD])dnl
-m4_require([_LT_CMD_OLD_ARCHIVE])dnl
-m4_require([_LT_CMD_GLOBAL_SYMBOLS])dnl
-
-_LT_CONFIG_LIBTOOL_INIT([
-# See if we are running on zsh, and set the options which allow our
-# commands through without removal of \ escapes INIT.
-if test -n "\${ZSH_VERSION+set}" ; then
-   setopt NO_GLOB_SUBST
-fi
-])
-if test -n "${ZSH_VERSION+set}" ; then
-   setopt NO_GLOB_SUBST
-fi
-
-_LT_CHECK_OBJDIR
-
-m4_require([_LT_TAG_COMPILER])dnl
-_LT_PROG_ECHO_BACKSLASH
-
-case $host_os in
-aix3*)
-  # AIX sometimes has problems with the GCC collect2 program.  For some
-  # reason, if we set the COLLECT_NAMES environment variable, the problems
-  # vanish in a puff of smoke.
-  if test "X${COLLECT_NAMES+set}" != Xset; then
-    COLLECT_NAMES=
-    export COLLECT_NAMES
-  fi
-  ;;
-esac
-
-# Sed substitution that helps us do robust quoting.  It backslashifies
-# metacharacters that are still active within double-quoted strings.
-sed_quote_subst='s/\([["`$\\]]\)/\\\1/g'
-
-# Same as above, but do not quote variable references.
-double_quote_subst='s/\([["`\\]]\)/\\\1/g'
-
-# Sed substitution to delay expansion of an escaped shell variable in a
-# double_quote_subst'ed string.
-delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g'
-
-# Sed substitution to delay expansion of an escaped single quote.
-delay_single_quote_subst='s/'\''/'\'\\\\\\\'\''/g'
-
-# Sed substitution to avoid accidental globbing in evaled expressions
-no_glob_subst='s/\*/\\\*/g'
-
-# Global variables:
-ofile=libtool
-can_build_shared=yes
-
-# All known linkers require a `.a' archive for static linking (except MSVC,
-# which needs '.lib').
-libext=a
-
-with_gnu_ld="$lt_cv_prog_gnu_ld"
-
-old_CC="$CC"
-old_CFLAGS="$CFLAGS"
-
-# Set sane defaults for various variables
-test -z "$CC" && CC=cc
-test -z "$LTCC" && LTCC=$CC
-test -z "$LTCFLAGS" && LTCFLAGS=$CFLAGS
-test -z "$LD" && LD=ld
-test -z "$ac_objext" && ac_objext=o
-
-_LT_CC_BASENAME([$compiler])
-
-# Only perform the check for file, if the check method requires it
-test -z "$MAGIC_CMD" && MAGIC_CMD=file
-case $deplibs_check_method in
-file_magic*)
-  if test "$file_magic_cmd" = '$MAGIC_CMD'; then
-    _LT_PATH_MAGIC
-  fi
-  ;;
-esac
-
-# Use C for the default configuration in the libtool script
-LT_SUPPORTED_TAG([CC])
-_LT_LANG_C_CONFIG
-_LT_LANG_DEFAULT_CONFIG
-_LT_CONFIG_COMMANDS
-])# _LT_SETUP
-
-
-# _LT_PROG_LTMAIN
-# ---------------
-# Note that this code is called both from `configure', and `config.status'
-# now that we use AC_CONFIG_COMMANDS to generate libtool.  Notably,
-# `config.status' has no value for ac_aux_dir unless we are using Automake,
-# so we pass a copy along to make sure it has a sensible value anyway.
-m4_defun([_LT_PROG_LTMAIN],
-[m4_ifdef([AC_REQUIRE_AUX_FILE], [AC_REQUIRE_AUX_FILE([ltmain.sh])])dnl
-_LT_CONFIG_LIBTOOL_INIT([ac_aux_dir='$ac_aux_dir'])
-ltmain="$ac_aux_dir/ltmain.sh"
-])# _LT_PROG_LTMAIN
-
-
-
-# So that we can recreate a full libtool script including additional
-# tags, we accumulate the chunks of code to send to AC_CONFIG_COMMANDS
-# in macros and then make a single call at the end using the `libtool'
-# label.
-
-
-# _LT_CONFIG_LIBTOOL_INIT([INIT-COMMANDS])
-# ----------------------------------------
-# Register INIT-COMMANDS to be passed to AC_CONFIG_COMMANDS later.
-m4_define([_LT_CONFIG_LIBTOOL_INIT],
-[m4_ifval([$1],
-          [m4_append([_LT_OUTPUT_LIBTOOL_INIT],
-                     [$1
-])])])
-
-# Initialize.
-m4_define([_LT_OUTPUT_LIBTOOL_INIT])
-
-
-# _LT_CONFIG_LIBTOOL([COMMANDS])
-# ------------------------------
-# Register COMMANDS to be passed to AC_CONFIG_COMMANDS later.
-m4_define([_LT_CONFIG_LIBTOOL],
-[m4_ifval([$1],
-          [m4_append([_LT_OUTPUT_LIBTOOL_COMMANDS],
-                     [$1
-])])])
-
-# Initialize.
-m4_define([_LT_OUTPUT_LIBTOOL_COMMANDS])
-
-
-# _LT_CONFIG_SAVE_COMMANDS([COMMANDS], [INIT_COMMANDS])
-# -----------------------------------------------------
-m4_defun([_LT_CONFIG_SAVE_COMMANDS],
-[_LT_CONFIG_LIBTOOL([$1])
-_LT_CONFIG_LIBTOOL_INIT([$2])
-])
-
-
-# _LT_FORMAT_COMMENT([COMMENT])
-# -----------------------------
-# Add leading comment marks to the start of each line, and a trailing
-# full-stop to the whole comment if one is not present already.
-m4_define([_LT_FORMAT_COMMENT],
-[m4_ifval([$1], [
-m4_bpatsubst([m4_bpatsubst([$1], [^ *], [# ])],
-              [['`$\]], [\\\&])]m4_bmatch([$1], [[!?.]$], [], [.])
-)])
-
-
-
-
-
-# _LT_DECL([CONFIGNAME], VARNAME, VALUE, [DESCRIPTION], [IS-TAGGED?])
-# -------------------------------------------------------------------
-# CONFIGNAME is the name given to the value in the libtool script.
-# VARNAME is the (base) name used in the configure script.
-# VALUE may be 0, 1 or 2 for a computed quote escaped value based on
-# VARNAME.  Any other value will be used directly.
-m4_define([_LT_DECL],
-[lt_if_append_uniq([lt_decl_varnames], [$2], [, ],
-    [lt_dict_add_subkey([lt_decl_dict], [$2], [libtool_name],
-	[m4_ifval([$1], [$1], [$2])])
-    lt_dict_add_subkey([lt_decl_dict], [$2], [value], [$3])
-    m4_ifval([$4],
-	[lt_dict_add_subkey([lt_decl_dict], [$2], [description], [$4])])
-    lt_dict_add_subkey([lt_decl_dict], [$2],
-	[tagged?], [m4_ifval([$5], [yes], [no])])])
-])
-
-
-# _LT_TAGDECL([CONFIGNAME], VARNAME, VALUE, [DESCRIPTION])
-# --------------------------------------------------------
-m4_define([_LT_TAGDECL], [_LT_DECL([$1], [$2], [$3], [$4], [yes])])
-
-
-# lt_decl_tag_varnames([SEPARATOR], [VARNAME1...])
-# ------------------------------------------------
-m4_define([lt_decl_tag_varnames],
-[_lt_decl_filter([tagged?], [yes], $@)])
-
-
-# _lt_decl_filter(SUBKEY, VALUE, [SEPARATOR], [VARNAME1..])
-# ---------------------------------------------------------
-m4_define([_lt_decl_filter],
-[m4_case([$#],
-  [0], [m4_fatal([$0: too few arguments: $#])],
-  [1], [m4_fatal([$0: too few arguments: $#: $1])],
-  [2], [lt_dict_filter([lt_decl_dict], [$1], [$2], [], lt_decl_varnames)],
-  [3], [lt_dict_filter([lt_decl_dict], [$1], [$2], [$3], lt_decl_varnames)],
-  [lt_dict_filter([lt_decl_dict], $@)])[]dnl
-])
-
-
-# lt_decl_quote_varnames([SEPARATOR], [VARNAME1...])
-# --------------------------------------------------
-m4_define([lt_decl_quote_varnames],
-[_lt_decl_filter([value], [1], $@)])
-
-
-# lt_decl_dquote_varnames([SEPARATOR], [VARNAME1...])
-# ---------------------------------------------------
-m4_define([lt_decl_dquote_varnames],
-[_lt_decl_filter([value], [2], $@)])
-
-
-# lt_decl_varnames_tagged([SEPARATOR], [VARNAME1...])
-# ---------------------------------------------------
-m4_define([lt_decl_varnames_tagged],
-[m4_assert([$# <= 2])dnl
-_$0(m4_quote(m4_default([$1], [[, ]])),
-    m4_ifval([$2], [[$2]], [m4_dquote(lt_decl_tag_varnames)]),
-    m4_split(m4_normalize(m4_quote(_LT_TAGS)), [ ]))])
-m4_define([_lt_decl_varnames_tagged],
-[m4_ifval([$3], [lt_combine([$1], [$2], [_], $3)])])
-
-
-# lt_decl_all_varnames([SEPARATOR], [VARNAME1...])
-# ------------------------------------------------
-m4_define([lt_decl_all_varnames],
-[_$0(m4_quote(m4_default([$1], [[, ]])),
-     m4_if([$2], [],
-	   m4_quote(lt_decl_varnames),
-	m4_quote(m4_shift($@))))[]dnl
-])
-m4_define([_lt_decl_all_varnames],
-[lt_join($@, lt_decl_varnames_tagged([$1],
-			lt_decl_tag_varnames([[, ]], m4_shift($@))))dnl
-])
-
-
-# _LT_CONFIG_STATUS_DECLARE([VARNAME])
-# ------------------------------------
-# Quote a variable value, and forward it to `config.status' so that its
-# declaration there will have the same value as in `configure'.  VARNAME
-# must have a single quote delimited value for this to work.
-m4_define([_LT_CONFIG_STATUS_DECLARE],
-[$1='`$ECHO "X$][$1" | $Xsed -e "$delay_single_quote_subst"`'])
-
-
-# _LT_CONFIG_STATUS_DECLARATIONS
-# ------------------------------
-# We delimit libtool config variables with single quotes, so when
-# we write them to config.status, we have to be sure to quote all
-# embedded single quotes properly.  In configure, this macro expands
-# each variable declared with _LT_DECL (and _LT_TAGDECL) into:
-#
-#    <var>='`$ECHO "X$<var>" | $Xsed -e "$delay_single_quote_subst"`'
-m4_defun([_LT_CONFIG_STATUS_DECLARATIONS],
-[m4_foreach([_lt_var], m4_quote(lt_decl_all_varnames),
-    [m4_n([_LT_CONFIG_STATUS_DECLARE(_lt_var)])])])
-
-
-# _LT_LIBTOOL_TAGS
-# ----------------
-# Output comment and list of tags supported by the script
-m4_defun([_LT_LIBTOOL_TAGS],
-[_LT_FORMAT_COMMENT([The names of the tagged configurations supported by this script])dnl
-available_tags="_LT_TAGS"dnl
-])
-
-
-# _LT_LIBTOOL_DECLARE(VARNAME, [TAG])
-# -----------------------------------
-# Extract the dictionary values for VARNAME (optionally with TAG) and
-# expand to a commented shell variable setting:
-#
-#    # Some comment about what VAR is for.
-#    visible_name=$lt_internal_name
-m4_define([_LT_LIBTOOL_DECLARE],
-[_LT_FORMAT_COMMENT(m4_quote(lt_dict_fetch([lt_decl_dict], [$1],
-					   [description])))[]dnl
-m4_pushdef([_libtool_name],
-    m4_quote(lt_dict_fetch([lt_decl_dict], [$1], [libtool_name])))[]dnl
-m4_case(m4_quote(lt_dict_fetch([lt_decl_dict], [$1], [value])),
-    [0], [_libtool_name=[$]$1],
-    [1], [_libtool_name=$lt_[]$1],
-    [2], [_libtool_name=$lt_[]$1],
-    [_libtool_name=lt_dict_fetch([lt_decl_dict], [$1], [value])])[]dnl
-m4_ifval([$2], [_$2])[]m4_popdef([_libtool_name])[]dnl
-])
-
-
-# _LT_LIBTOOL_CONFIG_VARS
-# -----------------------
-# Produce commented declarations of non-tagged libtool config variables
-# suitable for insertion in the LIBTOOL CONFIG section of the `libtool'
-# script.  Tagged libtool config variables (even for the LIBTOOL CONFIG
-# section) are produced by _LT_LIBTOOL_TAG_VARS.
-m4_defun([_LT_LIBTOOL_CONFIG_VARS],
-[m4_foreach([_lt_var],
-    m4_quote(_lt_decl_filter([tagged?], [no], [], lt_decl_varnames)),
-    [m4_n([_LT_LIBTOOL_DECLARE(_lt_var)])])])
-
-
-# _LT_LIBTOOL_TAG_VARS(TAG)
-# -------------------------
-m4_define([_LT_LIBTOOL_TAG_VARS],
-[m4_foreach([_lt_var], m4_quote(lt_decl_tag_varnames),
-    [m4_n([_LT_LIBTOOL_DECLARE(_lt_var, [$1])])])])
-
-
-# _LT_TAGVAR(VARNAME, [TAGNAME])
-# ------------------------------
-m4_define([_LT_TAGVAR], [m4_ifval([$2], [$1_$2], [$1])])
-
-
-# _LT_CONFIG_COMMANDS
-# -------------------
-# Send accumulated output to $CONFIG_STATUS.  Thanks to the lists of
-# variables for single and double quote escaping we saved from calls
-# to _LT_DECL, we can put quote escaped variables declarations
-# into `config.status', and then the shell code to quote escape them in
-# for loops in `config.status'.  Finally, any additional code accumulated
-# from calls to _LT_CONFIG_LIBTOOL_INIT is expanded.
-m4_defun([_LT_CONFIG_COMMANDS],
-[AC_PROVIDE_IFELSE([LT_OUTPUT],
-	dnl If the libtool generation code has been placed in $CONFIG_LT,
-	dnl instead of duplicating it all over again into config.status,
-	dnl then we will have config.status run $CONFIG_LT later, so it
-	dnl needs to know what name is stored there:
-        [AC_CONFIG_COMMANDS([libtool],
-            [$SHELL $CONFIG_LT || AS_EXIT(1)], [CONFIG_LT='$CONFIG_LT'])],
-    dnl If the libtool generation code is destined for config.status,
-    dnl expand the accumulated commands and init code now:
-    [AC_CONFIG_COMMANDS([libtool],
-        [_LT_OUTPUT_LIBTOOL_COMMANDS], [_LT_OUTPUT_LIBTOOL_COMMANDS_INIT])])
-])#_LT_CONFIG_COMMANDS
-
-
-# Initialize.
-m4_define([_LT_OUTPUT_LIBTOOL_COMMANDS_INIT],
-[
-
-# The HP-UX ksh and POSIX shell print the target directory to stdout
-# if CDPATH is set.
-(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
-
-sed_quote_subst='$sed_quote_subst'
-double_quote_subst='$double_quote_subst'
-delay_variable_subst='$delay_variable_subst'
-_LT_CONFIG_STATUS_DECLARATIONS
-LTCC='$LTCC'
-LTCFLAGS='$LTCFLAGS'
-compiler='$compiler_DEFAULT'
-
-# Quote evaled strings.
-for var in lt_decl_all_varnames([[ \
-]], lt_decl_quote_varnames); do
-    case \`eval \\\\\$ECHO "X\\\\\$\$var"\` in
-    *[[\\\\\\\`\\"\\\$]]*)
-      eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"X\\\$\$var\\" | \\\$Xsed -e \\"\\\$sed_quote_subst\\"\\\`\\\\\\""
-      ;;
-    *)
-      eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\""
-      ;;
-    esac
-done
-
-# Double-quote double-evaled strings.
-for var in lt_decl_all_varnames([[ \
-]], lt_decl_dquote_varnames); do
-    case \`eval \\\\\$ECHO "X\\\\\$\$var"\` in
-    *[[\\\\\\\`\\"\\\$]]*)
-      eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"X\\\$\$var\\" | \\\$Xsed -e \\"\\\$double_quote_subst\\" -e \\"\\\$sed_quote_subst\\" -e \\"\\\$delay_variable_subst\\"\\\`\\\\\\""
-      ;;
-    *)
-      eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\""
-      ;;
-    esac
-done
-
-# Fix-up fallback echo if it was mangled by the above quoting rules.
-case \$lt_ECHO in
-*'\\\[$]0 --fallback-echo"')dnl "
-  lt_ECHO=\`\$ECHO "X\$lt_ECHO" | \$Xsed -e 's/\\\\\\\\\\\\\\\[$]0 --fallback-echo"\[$]/\[$]0 --fallback-echo"/'\`
-  ;;
-esac
-
-_LT_OUTPUT_LIBTOOL_INIT
-])
-
-
-# LT_OUTPUT
-# ---------
-# This macro allows early generation of the libtool script (before
-# AC_OUTPUT is called), incase it is used in configure for compilation
-# tests.
-AC_DEFUN([LT_OUTPUT],
-[: ${CONFIG_LT=./config.lt}
-AC_MSG_NOTICE([creating $CONFIG_LT])
-cat >"$CONFIG_LT" <<_LTEOF
-#! $SHELL
-# Generated by $as_me.
-# Run this file to recreate a libtool stub with the current configuration.
-
-lt_cl_silent=false
-SHELL=\${CONFIG_SHELL-$SHELL}
-_LTEOF
-
-cat >>"$CONFIG_LT" <<\_LTEOF
-AS_SHELL_SANITIZE
-_AS_PREPARE
-
-exec AS_MESSAGE_FD>&1
-exec AS_MESSAGE_LOG_FD>>config.log
-{
-  echo
-  AS_BOX([Running $as_me.])
-} >&AS_MESSAGE_LOG_FD
-
-lt_cl_help="\
-\`$as_me' creates a local libtool stub from the current configuration,
-for use in further configure time tests before the real libtool is
-generated.
-
-Usage: $[0] [[OPTIONS]]
-
-  -h, --help      print this help, then exit
-  -V, --version   print version number, then exit
-  -q, --quiet     do not print progress messages
-  -d, --debug     don't remove temporary files
-
-Report bugs to <bug-libtool at gnu.org>."
-
-lt_cl_version="\
-m4_ifset([AC_PACKAGE_NAME], [AC_PACKAGE_NAME ])config.lt[]dnl
-m4_ifset([AC_PACKAGE_VERSION], [ AC_PACKAGE_VERSION])
-configured by $[0], generated by m4_PACKAGE_STRING.
-
-Copyright (C) 2008 Free Software Foundation, Inc.
-This config.lt script is free software; the Free Software Foundation
-gives unlimited permision to copy, distribute and modify it."
-
-while test $[#] != 0
-do
-  case $[1] in
-    --version | --v* | -V )
-      echo "$lt_cl_version"; exit 0 ;;
-    --help | --h* | -h )
-      echo "$lt_cl_help"; exit 0 ;;
-    --debug | --d* | -d )
-      debug=: ;;
-    --quiet | --q* | --silent | --s* | -q )
-      lt_cl_silent=: ;;
-
-    -*) AC_MSG_ERROR([unrecognized option: $[1]
-Try \`$[0] --help' for more information.]) ;;
-
-    *) AC_MSG_ERROR([unrecognized argument: $[1]
-Try \`$[0] --help' for more information.]) ;;
-  esac
-  shift
-done
-
-if $lt_cl_silent; then
-  exec AS_MESSAGE_FD>/dev/null
-fi
-_LTEOF
-
-cat >>"$CONFIG_LT" <<_LTEOF
-_LT_OUTPUT_LIBTOOL_COMMANDS_INIT
-_LTEOF
-
-cat >>"$CONFIG_LT" <<\_LTEOF
-AC_MSG_NOTICE([creating $ofile])
-_LT_OUTPUT_LIBTOOL_COMMANDS
-AS_EXIT(0)
-_LTEOF
-chmod +x "$CONFIG_LT"
-
-# configure is writing to config.log, but config.lt does its own redirection,
-# appending to config.log, which fails on DOS, as config.log is still kept
-# open by configure.  Here we exec the FD to /dev/null, effectively closing
-# config.log, so it can be properly (re)opened and appended to by config.lt.
-if test "$no_create" != yes; then
-  lt_cl_success=:
-  test "$silent" = yes &&
-    lt_config_lt_args="$lt_config_lt_args --quiet"
-  exec AS_MESSAGE_LOG_FD>/dev/null
-  $SHELL "$CONFIG_LT" $lt_config_lt_args || lt_cl_success=false
-  exec AS_MESSAGE_LOG_FD>>config.log
-  $lt_cl_success || AS_EXIT(1)
-fi
-])# LT_OUTPUT
-
-
-# _LT_CONFIG(TAG)
-# ---------------
-# If TAG is the built-in tag, create an initial libtool script with a
-# default configuration from the untagged config vars.  Otherwise add code
-# to config.status for appending the configuration named by TAG from the
-# matching tagged config vars.
-m4_defun([_LT_CONFIG],
-[m4_require([_LT_FILEUTILS_DEFAULTS])dnl
-_LT_CONFIG_SAVE_COMMANDS([
-  m4_define([_LT_TAG], m4_if([$1], [], [C], [$1]))dnl
-  m4_if(_LT_TAG, [C], [
-    # See if we are running on zsh, and set the options which allow our
-    # commands through without removal of \ escapes.
-    if test -n "${ZSH_VERSION+set}" ; then
-      setopt NO_GLOB_SUBST
-    fi
-
-    cfgfile="${ofile}T"
-    trap "$RM \"$cfgfile\"; exit 1" 1 2 15
-    $RM "$cfgfile"
-
-    cat <<_LT_EOF >> "$cfgfile"
-#! $SHELL
-
-# `$ECHO "$ofile" | sed 's%^.*/%%'` - Provide generalized library-building support services.
-# Generated automatically by $as_me ($PACKAGE$TIMESTAMP) $VERSION
-# NOTE: Changes made to this file will be lost: look at ltmain.sh.
-#
-_LT_COPYING
-_LT_LIBTOOL_TAGS
-
-# ### BEGIN LIBTOOL CONFIG
-_LT_LIBTOOL_CONFIG_VARS
-_LT_LIBTOOL_TAG_VARS
-# ### END LIBTOOL CONFIG
-
-_LT_EOF
-
-  case $host_os in
-  aix3*)
-    cat <<\_LT_EOF >> "$cfgfile"
-# AIX sometimes has problems with the GCC collect2 program.  For some
-# reason, if we set the COLLECT_NAMES environment variable, the problems
-# vanish in a puff of smoke.
-if test "X${COLLECT_NAMES+set}" != Xset; then
-  COLLECT_NAMES=
-  export COLLECT_NAMES
-fi
-_LT_EOF
-    ;;
-  esac
-
-  _LT_PROG_LTMAIN
-
-  # We use sed instead of cat because bash on DJGPP gets confused if
-  # if finds mixed CR/LF and LF-only lines.  Since sed operates in
-  # text mode, it properly converts lines to CR/LF.  This bash problem
-  # is reportedly fixed, but why not run on old versions too?
-  sed '/^# Generated shell functions inserted here/q' "$ltmain" >> "$cfgfile" \
-    || (rm -f "$cfgfile"; exit 1)
-
-  _LT_PROG_XSI_SHELLFNS
-
-  sed -n '/^# Generated shell functions inserted here/,$p' "$ltmain" >> "$cfgfile" \
-    || (rm -f "$cfgfile"; exit 1)
-
-  mv -f "$cfgfile" "$ofile" ||
-    (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile")
-  chmod +x "$ofile"
-],
-[cat <<_LT_EOF >> "$ofile"
-
-dnl Unfortunately we have to use $1 here, since _LT_TAG is not expanded
-dnl in a comment (ie after a #).
-# ### BEGIN LIBTOOL TAG CONFIG: $1
-_LT_LIBTOOL_TAG_VARS(_LT_TAG)
-# ### END LIBTOOL TAG CONFIG: $1
-_LT_EOF
-])dnl /m4_if
-],
-[m4_if([$1], [], [
-    PACKAGE='$PACKAGE'
-    VERSION='$VERSION'
-    TIMESTAMP='$TIMESTAMP'
-    RM='$RM'
-    ofile='$ofile'], [])
-])dnl /_LT_CONFIG_SAVE_COMMANDS
-])# _LT_CONFIG
-
-
-# LT_SUPPORTED_TAG(TAG)
-# ---------------------
-# Trace this macro to discover what tags are supported by the libtool
-# --tag option, using:
-#    autoconf --trace 'LT_SUPPORTED_TAG:$1'
-AC_DEFUN([LT_SUPPORTED_TAG], [])
-
-
-# C support is built-in for now
-m4_define([_LT_LANG_C_enabled], [])
-m4_define([_LT_TAGS], [])
-
-
-# LT_LANG(LANG)
-# -------------
-# Enable libtool support for the given language if not already enabled.
-AC_DEFUN([LT_LANG],
-[AC_BEFORE([$0], [LT_OUTPUT])dnl
-m4_case([$1],
-  [C],			[_LT_LANG(C)],
-  [C++],		[_LT_LANG(CXX)],
-  [Java],		[_LT_LANG(GCJ)],
-  [Fortran 77],		[_LT_LANG(F77)],
-  [Fortran],		[_LT_LANG(FC)],
-  [Windows Resource],	[_LT_LANG(RC)],
-  [m4_ifdef([_LT_LANG_]$1[_CONFIG],
-    [_LT_LANG($1)],
-    [m4_fatal([$0: unsupported language: "$1"])])])dnl
-])# LT_LANG
-
-
-# _LT_LANG(LANGNAME)
-# ------------------
-m4_defun([_LT_LANG],
-[m4_ifdef([_LT_LANG_]$1[_enabled], [],
-  [LT_SUPPORTED_TAG([$1])dnl
-  m4_append([_LT_TAGS], [$1 ])dnl
-  m4_define([_LT_LANG_]$1[_enabled], [])dnl
-  _LT_LANG_$1_CONFIG($1)])dnl
-])# _LT_LANG
-
-
-# _LT_LANG_DEFAULT_CONFIG
-# -----------------------
-m4_defun([_LT_LANG_DEFAULT_CONFIG],
-[AC_PROVIDE_IFELSE([AC_PROG_CXX],
-  [LT_LANG(CXX)],
-  [m4_define([AC_PROG_CXX], defn([AC_PROG_CXX])[LT_LANG(CXX)])])
-
-AC_PROVIDE_IFELSE([AC_PROG_F77],
-  [LT_LANG(F77)],
-  [m4_define([AC_PROG_F77], defn([AC_PROG_F77])[LT_LANG(F77)])])
-
-AC_PROVIDE_IFELSE([AC_PROG_FC],
-  [LT_LANG(FC)],
-  [m4_define([AC_PROG_FC], defn([AC_PROG_FC])[LT_LANG(FC)])])
-
-dnl The call to [A][M_PROG_GCJ] is quoted like that to stop aclocal
-dnl pulling things in needlessly.
-AC_PROVIDE_IFELSE([AC_PROG_GCJ],
-  [LT_LANG(GCJ)],
-  [AC_PROVIDE_IFELSE([A][M_PROG_GCJ],
-    [LT_LANG(GCJ)],
-    [AC_PROVIDE_IFELSE([LT_PROG_GCJ],
-      [LT_LANG(GCJ)],
-      [m4_ifdef([AC_PROG_GCJ],
-	[m4_define([AC_PROG_GCJ], defn([AC_PROG_GCJ])[LT_LANG(GCJ)])])
-       m4_ifdef([A][M_PROG_GCJ],
-	[m4_define([A][M_PROG_GCJ], defn([A][M_PROG_GCJ])[LT_LANG(GCJ)])])
-       m4_ifdef([LT_PROG_GCJ],
-	[m4_define([LT_PROG_GCJ], defn([LT_PROG_GCJ])[LT_LANG(GCJ)])])])])])
-
-AC_PROVIDE_IFELSE([LT_PROG_RC],
-  [LT_LANG(RC)],
-  [m4_define([LT_PROG_RC], defn([LT_PROG_RC])[LT_LANG(RC)])])
-])# _LT_LANG_DEFAULT_CONFIG
-
-# Obsolete macros:
-AU_DEFUN([AC_LIBTOOL_CXX], [LT_LANG(C++)])
-AU_DEFUN([AC_LIBTOOL_F77], [LT_LANG(Fortran 77)])
-AU_DEFUN([AC_LIBTOOL_FC], [LT_LANG(Fortran)])
-AU_DEFUN([AC_LIBTOOL_GCJ], [LT_LANG(Java)])
-dnl aclocal-1.4 backwards compatibility:
-dnl AC_DEFUN([AC_LIBTOOL_CXX], [])
-dnl AC_DEFUN([AC_LIBTOOL_F77], [])
-dnl AC_DEFUN([AC_LIBTOOL_FC], [])
-dnl AC_DEFUN([AC_LIBTOOL_GCJ], [])
-
-
-# _LT_TAG_COMPILER
-# ----------------
-m4_defun([_LT_TAG_COMPILER],
-[AC_REQUIRE([AC_PROG_CC])dnl
-
-_LT_DECL([LTCC], [CC], [1], [A C compiler])dnl
-_LT_DECL([LTCFLAGS], [CFLAGS], [1], [LTCC compiler flags])dnl
-_LT_TAGDECL([CC], [compiler], [1], [A language specific compiler])dnl
-_LT_TAGDECL([with_gcc], [GCC], [0], [Is the compiler the GNU compiler?])dnl
-
-# If no C compiler was specified, use CC.
-LTCC=${LTCC-"$CC"}
-
-# If no C compiler flags were specified, use CFLAGS.
-LTCFLAGS=${LTCFLAGS-"$CFLAGS"}
-
-# Allow CC to be a program name with arguments.
-compiler=$CC
-])# _LT_TAG_COMPILER
-
-
-# _LT_COMPILER_BOILERPLATE
-# ------------------------
-# Check for compiler boilerplate output or warnings with
-# the simple compiler test code.
-m4_defun([_LT_COMPILER_BOILERPLATE],
-[m4_require([_LT_DECL_SED])dnl
-ac_outfile=conftest.$ac_objext
-echo "$lt_simple_compile_test_code" >conftest.$ac_ext
-eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err
-_lt_compiler_boilerplate=`cat conftest.err`
-$RM conftest*
-])# _LT_COMPILER_BOILERPLATE
-
-
-# _LT_LINKER_BOILERPLATE
-# ----------------------
-# Check for linker boilerplate output or warnings with
-# the simple link test code.
-m4_defun([_LT_LINKER_BOILERPLATE],
-[m4_require([_LT_DECL_SED])dnl
-ac_outfile=conftest.$ac_objext
-echo "$lt_simple_link_test_code" >conftest.$ac_ext
-eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err
-_lt_linker_boilerplate=`cat conftest.err`
-$RM -r conftest*
-])# _LT_LINKER_BOILERPLATE
-
-# _LT_REQUIRED_DARWIN_CHECKS
-# -------------------------
-m4_defun_once([_LT_REQUIRED_DARWIN_CHECKS],[
-  case $host_os in
-    rhapsody* | darwin*)
-    AC_CHECK_TOOL([DSYMUTIL], [dsymutil], [:])
-    AC_CHECK_TOOL([NMEDIT], [nmedit], [:])
-    AC_CHECK_TOOL([LIPO], [lipo], [:])
-    AC_CHECK_TOOL([OTOOL], [otool], [:])
-    AC_CHECK_TOOL([OTOOL64], [otool64], [:])
-    _LT_DECL([], [DSYMUTIL], [1],
-      [Tool to manipulate archived DWARF debug symbol files on Mac OS X])
-    _LT_DECL([], [NMEDIT], [1],
-      [Tool to change global to local symbols on Mac OS X])
-    _LT_DECL([], [LIPO], [1],
-      [Tool to manipulate fat objects and archives on Mac OS X])
-    _LT_DECL([], [OTOOL], [1],
-      [ldd/readelf like tool for Mach-O binaries on Mac OS X])
-    _LT_DECL([], [OTOOL64], [1],
-      [ldd/readelf like tool for 64 bit Mach-O binaries on Mac OS X 10.4])
-
-    AC_CACHE_CHECK([for -single_module linker flag],[lt_cv_apple_cc_single_mod],
-      [lt_cv_apple_cc_single_mod=no
-      if test -z "${LT_MULTI_MODULE}"; then
-	# By default we will add the -single_module flag. You can override
-	# by either setting the environment variable LT_MULTI_MODULE
-	# non-empty at configure time, or by adding -multi_module to the
-	# link flags.
-	rm -rf libconftest.dylib*
-	echo "int foo(void){return 1;}" > conftest.c
-	echo "$LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \
--dynamiclib -Wl,-single_module conftest.c" >&AS_MESSAGE_LOG_FD
-	$LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \
-	  -dynamiclib -Wl,-single_module conftest.c 2>conftest.err
-        _lt_result=$?
-	if test -f libconftest.dylib && test ! -s conftest.err && test $_lt_result = 0; then
-	  lt_cv_apple_cc_single_mod=yes
-	else
-	  cat conftest.err >&AS_MESSAGE_LOG_FD
-	fi
-	rm -rf libconftest.dylib*
-	rm -f conftest.*
-      fi])
-    AC_CACHE_CHECK([for -exported_symbols_list linker flag],
-      [lt_cv_ld_exported_symbols_list],
-      [lt_cv_ld_exported_symbols_list=no
-      save_LDFLAGS=$LDFLAGS
-      echo "_main" > conftest.sym
-      LDFLAGS="$LDFLAGS -Wl,-exported_symbols_list,conftest.sym"
-      AC_LINK_IFELSE([AC_LANG_PROGRAM([],[])],
-	[lt_cv_ld_exported_symbols_list=yes],
-	[lt_cv_ld_exported_symbols_list=no])
-	LDFLAGS="$save_LDFLAGS"
-    ])
-    case $host_os in
-    rhapsody* | darwin1.[[012]])
-      _lt_dar_allow_undefined='${wl}-undefined ${wl}suppress' ;;
-    darwin1.*)
-      _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;;
-    darwin*) # darwin 5.x on
-      # if running on 10.5 or later, the deployment target defaults
-      # to the OS version, if on x86, and 10.4, the deployment
-      # target defaults to 10.4. Don't you love it?
-      case ${MACOSX_DEPLOYMENT_TARGET-10.0},$host in
-	10.0,*86*-darwin8*|10.0,*-darwin[[91]]*)
-	  _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;;
-	10.[[012]]*)
-	  _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;;
-	10.*)
-	  _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;;
-      esac
-    ;;
-  esac
-    if test "$lt_cv_apple_cc_single_mod" = "yes"; then
-      _lt_dar_single_mod='$single_module'
-    fi
-    if test "$lt_cv_ld_exported_symbols_list" = "yes"; then
-      _lt_dar_export_syms=' ${wl}-exported_symbols_list,$output_objdir/${libname}-symbols.expsym'
-    else
-      _lt_dar_export_syms='~$NMEDIT -s $output_objdir/${libname}-symbols.expsym ${lib}'
-    fi
-    if test "$DSYMUTIL" != ":"; then
-      _lt_dsymutil='~$DSYMUTIL $lib || :'
-    else
-      _lt_dsymutil=
-    fi
-    ;;
-  esac
-])
-
-
-# _LT_DARWIN_LINKER_FEATURES
-# --------------------------
-# Checks for linker and compiler features on darwin
-m4_defun([_LT_DARWIN_LINKER_FEATURES],
-[
-  m4_require([_LT_REQUIRED_DARWIN_CHECKS])
-  _LT_TAGVAR(archive_cmds_need_lc, $1)=no
-  _LT_TAGVAR(hardcode_direct, $1)=no
-  _LT_TAGVAR(hardcode_automatic, $1)=yes
-  _LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported
-  _LT_TAGVAR(whole_archive_flag_spec, $1)=''
-  _LT_TAGVAR(link_all_deplibs, $1)=yes
-  _LT_TAGVAR(allow_undefined_flag, $1)="$_lt_dar_allow_undefined"
-  case $cc_basename in
-     ifort*) _lt_dar_can_shared=yes ;;
-     *) _lt_dar_can_shared=$GCC ;;
-  esac
-  if test "$_lt_dar_can_shared" = "yes"; then
-    output_verbose_link_cmd=echo
-    _LT_TAGVAR(archive_cmds, $1)="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod${_lt_dsymutil}"
-    _LT_TAGVAR(module_cmds, $1)="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dsymutil}"
-    _LT_TAGVAR(archive_expsym_cmds, $1)="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring ${_lt_dar_single_mod}${_lt_dar_export_syms}${_lt_dsymutil}"
-    _LT_TAGVAR(module_expsym_cmds, $1)="sed -e 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dar_export_syms}${_lt_dsymutil}"
-    m4_if([$1], [CXX],
-[   if test "$lt_cv_apple_cc_single_mod" != "yes"; then
-      _LT_TAGVAR(archive_cmds, $1)="\$CC -r -keep_private_externs -nostdlib -o \${lib}-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \${lib}-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring${_lt_dsymutil}"
-      _LT_TAGVAR(archive_expsym_cmds, $1)="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -r -keep_private_externs -nostdlib -o \${lib}-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \${lib}-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring${_lt_dar_export_syms}${_lt_dsymutil}"
-    fi
-],[])
-  else
-  _LT_TAGVAR(ld_shlibs, $1)=no
-  fi
-])
-
-# _LT_SYS_MODULE_PATH_AIX
-# -----------------------
-# Links a minimal program and checks the executable
-# for the system default hardcoded library path. In most cases,
-# this is /usr/lib:/lib, but when the MPI compilers are used
-# the location of the communication and MPI libs are included too.
-# If we don't find anything, use the default library path according
-# to the aix ld manual.
-m4_defun([_LT_SYS_MODULE_PATH_AIX],
-[m4_require([_LT_DECL_SED])dnl
-AC_LINK_IFELSE([AC_LANG_PROGRAM],[
-lt_aix_libpath_sed='
-    /Import File Strings/,/^$/ {
-	/^0/ {
-	    s/^0  *\(.*\)$/\1/
-	    p
-	}
-    }'
-aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
-# Check for a 64-bit object if we didn't find anything.
-if test -z "$aix_libpath"; then
-  aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
-fi],[])
-if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
-])# _LT_SYS_MODULE_PATH_AIX
-
-
-# _LT_SHELL_INIT(ARG)
-# -------------------
-m4_define([_LT_SHELL_INIT],
-[ifdef([AC_DIVERSION_NOTICE],
-	     [AC_DIVERT_PUSH(AC_DIVERSION_NOTICE)],
-	 [AC_DIVERT_PUSH(NOTICE)])
-$1
-AC_DIVERT_POP
-])# _LT_SHELL_INIT
-
-
-# _LT_PROG_ECHO_BACKSLASH
-# -----------------------
-# Add some code to the start of the generated configure script which
-# will find an echo command which doesn't interpret backslashes.
-m4_defun([_LT_PROG_ECHO_BACKSLASH],
-[_LT_SHELL_INIT([
-# Check that we are running under the correct shell.
-SHELL=${CONFIG_SHELL-/bin/sh}
-
-case X$lt_ECHO in
-X*--fallback-echo)
-  # Remove one level of quotation (which was required for Make).
-  ECHO=`echo "$lt_ECHO" | sed 's,\\\\\[$]\\[$]0,'[$]0','`
-  ;;
-esac
-
-ECHO=${lt_ECHO-echo}
-if test "X[$]1" = X--no-reexec; then
-  # Discard the --no-reexec flag, and continue.
-  shift
-elif test "X[$]1" = X--fallback-echo; then
-  # Avoid inline document here, it may be left over
-  :
-elif test "X`{ $ECHO '\t'; } 2>/dev/null`" = 'X\t' ; then
-  # Yippee, $ECHO works!
-  :
-else
-  # Restart under the correct shell.
-  exec $SHELL "[$]0" --no-reexec ${1+"[$]@"}
-fi
-
-if test "X[$]1" = X--fallback-echo; then
-  # used as fallback echo
-  shift
-  cat <<_LT_EOF
-[$]*
-_LT_EOF
-  exit 0
-fi
-
-# The HP-UX ksh and POSIX shell print the target directory to stdout
-# if CDPATH is set.
-(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
-
-if test -z "$lt_ECHO"; then
-  if test "X${echo_test_string+set}" != Xset; then
-    # find a string as large as possible, as long as the shell can cope with it
-    for cmd in 'sed 50q "[$]0"' 'sed 20q "[$]0"' 'sed 10q "[$]0"' 'sed 2q "[$]0"' 'echo test'; do
-      # expected sizes: less than 2Kb, 1Kb, 512 bytes, 16 bytes, ...
-      if { echo_test_string=`eval $cmd`; } 2>/dev/null &&
-	 { test "X$echo_test_string" = "X$echo_test_string"; } 2>/dev/null
-      then
-        break
-      fi
-    done
-  fi
-
-  if test "X`{ $ECHO '\t'; } 2>/dev/null`" = 'X\t' &&
-     echo_testing_string=`{ $ECHO "$echo_test_string"; } 2>/dev/null` &&
-     test "X$echo_testing_string" = "X$echo_test_string"; then
-    :
-  else
-    # The Solaris, AIX, and Digital Unix default echo programs unquote
-    # backslashes.  This makes it impossible to quote backslashes using
-    #   echo "$something" | sed 's/\\/\\\\/g'
-    #
-    # So, first we look for a working echo in the user's PATH.
-
-    lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
-    for dir in $PATH /usr/ucb; do
-      IFS="$lt_save_ifs"
-      if (test -f $dir/echo || test -f $dir/echo$ac_exeext) &&
-         test "X`($dir/echo '\t') 2>/dev/null`" = 'X\t' &&
-         echo_testing_string=`($dir/echo "$echo_test_string") 2>/dev/null` &&
-         test "X$echo_testing_string" = "X$echo_test_string"; then
-        ECHO="$dir/echo"
-        break
-      fi
-    done
-    IFS="$lt_save_ifs"
-
-    if test "X$ECHO" = Xecho; then
-      # We didn't find a better echo, so look for alternatives.
-      if test "X`{ print -r '\t'; } 2>/dev/null`" = 'X\t' &&
-         echo_testing_string=`{ print -r "$echo_test_string"; } 2>/dev/null` &&
-         test "X$echo_testing_string" = "X$echo_test_string"; then
-        # This shell has a builtin print -r that does the trick.
-        ECHO='print -r'
-      elif { test -f /bin/ksh || test -f /bin/ksh$ac_exeext; } &&
-	   test "X$CONFIG_SHELL" != X/bin/ksh; then
-        # If we have ksh, try running configure again with it.
-        ORIGINAL_CONFIG_SHELL=${CONFIG_SHELL-/bin/sh}
-        export ORIGINAL_CONFIG_SHELL
-        CONFIG_SHELL=/bin/ksh
-        export CONFIG_SHELL
-        exec $CONFIG_SHELL "[$]0" --no-reexec ${1+"[$]@"}
-      else
-        # Try using printf.
-        ECHO='printf %s\n'
-        if test "X`{ $ECHO '\t'; } 2>/dev/null`" = 'X\t' &&
-	   echo_testing_string=`{ $ECHO "$echo_test_string"; } 2>/dev/null` &&
-	   test "X$echo_testing_string" = "X$echo_test_string"; then
-	  # Cool, printf works
-	  :
-        elif echo_testing_string=`($ORIGINAL_CONFIG_SHELL "[$]0" --fallback-echo '\t') 2>/dev/null` &&
-	     test "X$echo_testing_string" = 'X\t' &&
-	     echo_testing_string=`($ORIGINAL_CONFIG_SHELL "[$]0" --fallback-echo "$echo_test_string") 2>/dev/null` &&
-	     test "X$echo_testing_string" = "X$echo_test_string"; then
-	  CONFIG_SHELL=$ORIGINAL_CONFIG_SHELL
-	  export CONFIG_SHELL
-	  SHELL="$CONFIG_SHELL"
-	  export SHELL
-	  ECHO="$CONFIG_SHELL [$]0 --fallback-echo"
-        elif echo_testing_string=`($CONFIG_SHELL "[$]0" --fallback-echo '\t') 2>/dev/null` &&
-	     test "X$echo_testing_string" = 'X\t' &&
-	     echo_testing_string=`($CONFIG_SHELL "[$]0" --fallback-echo "$echo_test_string") 2>/dev/null` &&
-	     test "X$echo_testing_string" = "X$echo_test_string"; then
-	  ECHO="$CONFIG_SHELL [$]0 --fallback-echo"
-        else
-	  # maybe with a smaller string...
-	  prev=:
-
-	  for cmd in 'echo test' 'sed 2q "[$]0"' 'sed 10q "[$]0"' 'sed 20q "[$]0"' 'sed 50q "[$]0"'; do
-	    if { test "X$echo_test_string" = "X`eval $cmd`"; } 2>/dev/null
-	    then
-	      break
-	    fi
-	    prev="$cmd"
-	  done
-
-	  if test "$prev" != 'sed 50q "[$]0"'; then
-	    echo_test_string=`eval $prev`
-	    export echo_test_string
-	    exec ${ORIGINAL_CONFIG_SHELL-${CONFIG_SHELL-/bin/sh}} "[$]0" ${1+"[$]@"}
-	  else
-	    # Oops.  We lost completely, so just stick with echo.
-	    ECHO=echo
-	  fi
-        fi
-      fi
-    fi
-  fi
-fi
-
-# Copy echo and quote the copy suitably for passing to libtool from
-# the Makefile, instead of quoting the original, which is used later.
-lt_ECHO=$ECHO
-if test "X$lt_ECHO" = "X$CONFIG_SHELL [$]0 --fallback-echo"; then
-   lt_ECHO="$CONFIG_SHELL \\\$\[$]0 --fallback-echo"
-fi
-
-AC_SUBST(lt_ECHO)
-])
-_LT_DECL([], [SHELL], [1], [Shell to use when invoking shell scripts])
-_LT_DECL([], [ECHO], [1],
-    [An echo program that does not interpret backslashes])
-])# _LT_PROG_ECHO_BACKSLASH
-
-
-# _LT_ENABLE_LOCK
-# ---------------
-m4_defun([_LT_ENABLE_LOCK],
-[AC_ARG_ENABLE([libtool-lock],
-  [AS_HELP_STRING([--disable-libtool-lock],
-    [avoid locking (might break parallel builds)])])
-test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes
-
-# Some flags need to be propagated to the compiler or linker for good
-# libtool support.
-case $host in
-ia64-*-hpux*)
-  # Find out which ABI we are using.
-  echo 'int i;' > conftest.$ac_ext
-  if AC_TRY_EVAL(ac_compile); then
-    case `/usr/bin/file conftest.$ac_objext` in
-      *ELF-32*)
-	HPUX_IA64_MODE="32"
-	;;
-      *ELF-64*)
-	HPUX_IA64_MODE="64"
-	;;
-    esac
-  fi
-  rm -rf conftest*
-  ;;
-*-*-irix6*)
-  # Find out which ABI we are using.
-  echo '[#]line __oline__ "configure"' > conftest.$ac_ext
-  if AC_TRY_EVAL(ac_compile); then
-    if test "$lt_cv_prog_gnu_ld" = yes; then
-      case `/usr/bin/file conftest.$ac_objext` in
-	*32-bit*)
-	  LD="${LD-ld} -melf32bsmip"
-	  ;;
-	*N32*)
-	  LD="${LD-ld} -melf32bmipn32"
-	  ;;
-	*64-bit*)
-	  LD="${LD-ld} -melf64bmip"
-	;;
-      esac
-    else
-      case `/usr/bin/file conftest.$ac_objext` in
-	*32-bit*)
-	  LD="${LD-ld} -32"
-	  ;;
-	*N32*)
-	  LD="${LD-ld} -n32"
-	  ;;
-	*64-bit*)
-	  LD="${LD-ld} -64"
-	  ;;
-      esac
-    fi
-  fi
-  rm -rf conftest*
-  ;;
-
-x86_64-*kfreebsd*-gnu|x86_64-*linux*|ppc*-*linux*|powerpc*-*linux*| \
-s390*-*linux*|s390*-*tpf*|sparc*-*linux*)
-  # Find out which ABI we are using.
-  echo 'int i;' > conftest.$ac_ext
-  if AC_TRY_EVAL(ac_compile); then
-    case `/usr/bin/file conftest.o` in
-      *32-bit*)
-	case $host in
-	  x86_64-*kfreebsd*-gnu)
-	    LD="${LD-ld} -m elf_i386_fbsd"
-	    ;;
-	  x86_64-*linux*)
-	    LD="${LD-ld} -m elf_i386"
-	    ;;
-	  ppc64-*linux*|powerpc64-*linux*)
-	    LD="${LD-ld} -m elf32ppclinux"
-	    ;;
-	  s390x-*linux*)
-	    LD="${LD-ld} -m elf_s390"
-	    ;;
-	  sparc64-*linux*)
-	    LD="${LD-ld} -m elf32_sparc"
-	    ;;
-	esac
-	;;
-      *64-bit*)
-	case $host in
-	  x86_64-*kfreebsd*-gnu)
-	    LD="${LD-ld} -m elf_x86_64_fbsd"
-	    ;;
-	  x86_64-*linux*)
-	    LD="${LD-ld} -m elf_x86_64"
-	    ;;
-	  ppc*-*linux*|powerpc*-*linux*)
-	    LD="${LD-ld} -m elf64ppc"
-	    ;;
-	  s390*-*linux*|s390*-*tpf*)
-	    LD="${LD-ld} -m elf64_s390"
-	    ;;
-	  sparc*-*linux*)
-	    LD="${LD-ld} -m elf64_sparc"
-	    ;;
-	esac
-	;;
-    esac
-  fi
-  rm -rf conftest*
-  ;;
-
-*-*-sco3.2v5*)
-  # On SCO OpenServer 5, we need -belf to get full-featured binaries.
-  SAVE_CFLAGS="$CFLAGS"
-  CFLAGS="$CFLAGS -belf"
-  AC_CACHE_CHECK([whether the C compiler needs -belf], lt_cv_cc_needs_belf,
-    [AC_LANG_PUSH(C)
-     AC_LINK_IFELSE([AC_LANG_PROGRAM([[]],[[]])],[lt_cv_cc_needs_belf=yes],[lt_cv_cc_needs_belf=no])
-     AC_LANG_POP])
-  if test x"$lt_cv_cc_needs_belf" != x"yes"; then
-    # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf
-    CFLAGS="$SAVE_CFLAGS"
-  fi
-  ;;
-sparc*-*solaris*)
-  # Find out which ABI we are using.
-  echo 'int i;' > conftest.$ac_ext
-  if AC_TRY_EVAL(ac_compile); then
-    case `/usr/bin/file conftest.o` in
-    *64-bit*)
-      case $lt_cv_prog_gnu_ld in
-      yes*) LD="${LD-ld} -m elf64_sparc" ;;
-      *)
-	if ${LD-ld} -64 -r -o conftest2.o conftest.o >/dev/null 2>&1; then
-	  LD="${LD-ld} -64"
-	fi
-	;;
-      esac
-      ;;
-    esac
-  fi
-  rm -rf conftest*
-  ;;
-esac
-
-need_locks="$enable_libtool_lock"
-])# _LT_ENABLE_LOCK
-
-
-# _LT_CMD_OLD_ARCHIVE
-# -------------------
-m4_defun([_LT_CMD_OLD_ARCHIVE],
-[AC_CHECK_TOOL(AR, ar, false)
-test -z "$AR" && AR=ar
-test -z "$AR_FLAGS" && AR_FLAGS=cru
-_LT_DECL([], [AR], [1], [The archiver])
-_LT_DECL([], [AR_FLAGS], [1])
-
-AC_CHECK_TOOL(STRIP, strip, :)
-test -z "$STRIP" && STRIP=:
-_LT_DECL([], [STRIP], [1], [A symbol stripping program])
-
-AC_CHECK_TOOL(RANLIB, ranlib, :)
-test -z "$RANLIB" && RANLIB=:
-_LT_DECL([], [RANLIB], [1],
-    [Commands used to install an old-style archive])
-
-# Determine commands to create old-style static archives.
-old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs'
-old_postinstall_cmds='chmod 644 $oldlib'
-old_postuninstall_cmds=
-
-if test -n "$RANLIB"; then
-  case $host_os in
-  openbsd*)
-    old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB -t \$oldlib"
-    ;;
-  *)
-    old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB \$oldlib"
-    ;;
-  esac
-  old_archive_cmds="$old_archive_cmds~\$RANLIB \$oldlib"
-fi
-_LT_DECL([], [old_postinstall_cmds], [2])
-_LT_DECL([], [old_postuninstall_cmds], [2])
-_LT_TAGDECL([], [old_archive_cmds], [2],
-    [Commands used to build an old-style archive])
-])# _LT_CMD_OLD_ARCHIVE
-
-
-# _LT_COMPILER_OPTION(MESSAGE, VARIABLE-NAME, FLAGS,
-#		[OUTPUT-FILE], [ACTION-SUCCESS], [ACTION-FAILURE])
-# ----------------------------------------------------------------
-# Check whether the given compiler option works
-AC_DEFUN([_LT_COMPILER_OPTION],
-[m4_require([_LT_FILEUTILS_DEFAULTS])dnl
-m4_require([_LT_DECL_SED])dnl
-AC_CACHE_CHECK([$1], [$2],
-  [$2=no
-   m4_if([$4], , [ac_outfile=conftest.$ac_objext], [ac_outfile=$4])
-   echo "$lt_simple_compile_test_code" > conftest.$ac_ext
-   lt_compiler_flag="$3"
-   # Insert the option either (1) after the last *FLAGS variable, or
-   # (2) before a word containing "conftest.", or (3) at the end.
-   # Note that $ac_compile itself does not contain backslashes and begins
-   # with a dollar sign (not a hyphen), so the echo should work correctly.
-   # The option is referenced via a variable to avoid confusing sed.
-   lt_compile=`echo "$ac_compile" | $SED \
-   -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
-   -e 's: [[^ ]]*conftest\.: $lt_compiler_flag&:; t' \
-   -e 's:$: $lt_compiler_flag:'`
-   (eval echo "\"\$as_me:__oline__: $lt_compile\"" >&AS_MESSAGE_LOG_FD)
-   (eval "$lt_compile" 2>conftest.err)
-   ac_status=$?
-   cat conftest.err >&AS_MESSAGE_LOG_FD
-   echo "$as_me:__oline__: \$? = $ac_status" >&AS_MESSAGE_LOG_FD
-   if (exit $ac_status) && test -s "$ac_outfile"; then
-     # The compiler can only warn and ignore the option if not recognized
-     # So say no if there are warnings other than the usual output.
-     $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' >conftest.exp
-     $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2
-     if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then
-       $2=yes
-     fi
-   fi
-   $RM conftest*
-])
-
-if test x"[$]$2" = xyes; then
-    m4_if([$5], , :, [$5])
-else
-    m4_if([$6], , :, [$6])
-fi
-])# _LT_COMPILER_OPTION
-
-# Old name:
-AU_ALIAS([AC_LIBTOOL_COMPILER_OPTION], [_LT_COMPILER_OPTION])
-dnl aclocal-1.4 backwards compatibility:
-dnl AC_DEFUN([AC_LIBTOOL_COMPILER_OPTION], [])
-
-
-# _LT_LINKER_OPTION(MESSAGE, VARIABLE-NAME, FLAGS,
-#                  [ACTION-SUCCESS], [ACTION-FAILURE])
-# ----------------------------------------------------
-# Check whether the given linker option works
-AC_DEFUN([_LT_LINKER_OPTION],
-[m4_require([_LT_FILEUTILS_DEFAULTS])dnl
-m4_require([_LT_DECL_SED])dnl
-AC_CACHE_CHECK([$1], [$2],
-  [$2=no
-   save_LDFLAGS="$LDFLAGS"
-   LDFLAGS="$LDFLAGS $3"
-   echo "$lt_simple_link_test_code" > conftest.$ac_ext
-   if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then
-     # The linker can only warn and ignore the option if not recognized
-     # So say no if there are warnings
-     if test -s conftest.err; then
-       # Append any errors to the config.log.
-       cat conftest.err 1>&AS_MESSAGE_LOG_FD
-       $ECHO "X$_lt_linker_boilerplate" | $Xsed -e '/^$/d' > conftest.exp
-       $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2
-       if diff conftest.exp conftest.er2 >/dev/null; then
-         $2=yes
-       fi
-     else
-       $2=yes
-     fi
-   fi
-   $RM -r conftest*
-   LDFLAGS="$save_LDFLAGS"
-])
-
-if test x"[$]$2" = xyes; then
-    m4_if([$4], , :, [$4])
-else
-    m4_if([$5], , :, [$5])
-fi
-])# _LT_LINKER_OPTION
-
-# Old name:
-AU_ALIAS([AC_LIBTOOL_LINKER_OPTION], [_LT_LINKER_OPTION])
-dnl aclocal-1.4 backwards compatibility:
-dnl AC_DEFUN([AC_LIBTOOL_LINKER_OPTION], [])
-
-
-# LT_CMD_MAX_LEN
-#---------------
-AC_DEFUN([LT_CMD_MAX_LEN],
-[AC_REQUIRE([AC_CANONICAL_HOST])dnl
-# find the maximum length of command line arguments
-AC_MSG_CHECKING([the maximum length of command line arguments])
-AC_CACHE_VAL([lt_cv_sys_max_cmd_len], [dnl
-  i=0
-  teststring="ABCD"
-
-  case $build_os in
-  msdosdjgpp*)
-    # On DJGPP, this test can blow up pretty badly due to problems in libc
-    # (any single argument exceeding 2000 bytes causes a buffer overrun
-    # during glob expansion).  Even if it were fixed, the result of this
-    # check would be larger than it should be.
-    lt_cv_sys_max_cmd_len=12288;    # 12K is about right
-    ;;
-
-  gnu*)
-    # Under GNU Hurd, this test is not required because there is
-    # no limit to the length of command line arguments.
-    # Libtool will interpret -1 as no limit whatsoever
-    lt_cv_sys_max_cmd_len=-1;
-    ;;
-
-  cygwin* | mingw* | cegcc*)
-    # On Win9x/ME, this test blows up -- it succeeds, but takes
-    # about 5 minutes as the teststring grows exponentially.
-    # Worse, since 9x/ME are not pre-emptively multitasking,
-    # you end up with a "frozen" computer, even though with patience
-    # the test eventually succeeds (with a max line length of 256k).
-    # Instead, let's just punt: use the minimum linelength reported by
-    # all of the supported platforms: 8192 (on NT/2K/XP).
-    lt_cv_sys_max_cmd_len=8192;
-    ;;
-
-  amigaos*)
-    # On AmigaOS with pdksh, this test takes hours, literally.
-    # So we just punt and use a minimum line length of 8192.
-    lt_cv_sys_max_cmd_len=8192;
-    ;;
-
-  netbsd* | freebsd* | openbsd* | darwin* | dragonfly*)
-    # This has been around since 386BSD, at least.  Likely further.
-    if test -x /sbin/sysctl; then
-      lt_cv_sys_max_cmd_len=`/sbin/sysctl -n kern.argmax`
-    elif test -x /usr/sbin/sysctl; then
-      lt_cv_sys_max_cmd_len=`/usr/sbin/sysctl -n kern.argmax`
-    else
-      lt_cv_sys_max_cmd_len=65536	# usable default for all BSDs
-    fi
-    # And add a safety zone
-    lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4`
-    lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3`
-    ;;
-
-  interix*)
-    # We know the value 262144 and hardcode it with a safety zone (like BSD)
-    lt_cv_sys_max_cmd_len=196608
-    ;;
-
-  osf*)
-    # Dr. Hans Ekkehard Plesser reports seeing a kernel panic running configure
-    # due to this test when exec_disable_arg_limit is 1 on Tru64. It is not
-    # nice to cause kernel panics so lets avoid the loop below.
-    # First set a reasonable default.
-    lt_cv_sys_max_cmd_len=16384
-    #
-    if test -x /sbin/sysconfig; then
-      case `/sbin/sysconfig -q proc exec_disable_arg_limit` in
-        *1*) lt_cv_sys_max_cmd_len=-1 ;;
-      esac
-    fi
-    ;;
-  sco3.2v5*)
-    lt_cv_sys_max_cmd_len=102400
-    ;;
-  sysv5* | sco5v6* | sysv4.2uw2*)
-    kargmax=`grep ARG_MAX /etc/conf/cf.d/stune 2>/dev/null`
-    if test -n "$kargmax"; then
-      lt_cv_sys_max_cmd_len=`echo $kargmax | sed 's/.*[[	 ]]//'`
-    else
-      lt_cv_sys_max_cmd_len=32768
-    fi
-    ;;
-  *)
-    lt_cv_sys_max_cmd_len=`(getconf ARG_MAX) 2> /dev/null`
-    if test -n "$lt_cv_sys_max_cmd_len"; then
-      lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4`
-      lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3`
-    else
-      # Make teststring a little bigger before we do anything with it.
-      # a 1K string should be a reasonable start.
-      for i in 1 2 3 4 5 6 7 8 ; do
-        teststring=$teststring$teststring
-      done
-      SHELL=${SHELL-${CONFIG_SHELL-/bin/sh}}
-      # If test is not a shell built-in, we'll probably end up computing a
-      # maximum length that is only half of the actual maximum length, but
-      # we can't tell.
-      while { test "X"`$SHELL [$]0 --fallback-echo "X$teststring$teststring" 2>/dev/null` \
-	         = "XX$teststring$teststring"; } >/dev/null 2>&1 &&
-	      test $i != 17 # 1/2 MB should be enough
-      do
-        i=`expr $i + 1`
-        teststring=$teststring$teststring
-      done
-      # Only check the string length outside the loop.
-      lt_cv_sys_max_cmd_len=`expr "X$teststring" : ".*" 2>&1`
-      teststring=
-      # Add a significant safety factor because C++ compilers can tack on
-      # massive amounts of additional arguments before passing them to the
-      # linker.  It appears as though 1/2 is a usable value.
-      lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 2`
-    fi
-    ;;
-  esac
-])
-if test -n $lt_cv_sys_max_cmd_len ; then
-  AC_MSG_RESULT($lt_cv_sys_max_cmd_len)
-else
-  AC_MSG_RESULT(none)
-fi
-max_cmd_len=$lt_cv_sys_max_cmd_len
-_LT_DECL([], [max_cmd_len], [0],
-    [What is the maximum length of a command?])
-])# LT_CMD_MAX_LEN
-
-# Old name:
-AU_ALIAS([AC_LIBTOOL_SYS_MAX_CMD_LEN], [LT_CMD_MAX_LEN])
-dnl aclocal-1.4 backwards compatibility:
-dnl AC_DEFUN([AC_LIBTOOL_SYS_MAX_CMD_LEN], [])
-
-
-# _LT_HEADER_DLFCN
-# ----------------
-m4_defun([_LT_HEADER_DLFCN],
-[AC_CHECK_HEADERS([dlfcn.h], [], [], [AC_INCLUDES_DEFAULT])dnl
-])# _LT_HEADER_DLFCN
-
-
-# _LT_TRY_DLOPEN_SELF (ACTION-IF-TRUE, ACTION-IF-TRUE-W-USCORE,
-#                      ACTION-IF-FALSE, ACTION-IF-CROSS-COMPILING)
-# ----------------------------------------------------------------
-m4_defun([_LT_TRY_DLOPEN_SELF],
-[m4_require([_LT_HEADER_DLFCN])dnl
-if test "$cross_compiling" = yes; then :
-  [$4]
-else
-  lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
-  lt_status=$lt_dlunknown
-  cat > conftest.$ac_ext <<_LT_EOF
-[#line __oline__ "configure"
-#include "confdefs.h"
-
-#if HAVE_DLFCN_H
-#include <dlfcn.h>
-#endif
-
-#include <stdio.h>
-
-#ifdef RTLD_GLOBAL
-#  define LT_DLGLOBAL		RTLD_GLOBAL
-#else
-#  ifdef DL_GLOBAL
-#    define LT_DLGLOBAL		DL_GLOBAL
-#  else
-#    define LT_DLGLOBAL		0
-#  endif
-#endif
-
-/* We may have to define LT_DLLAZY_OR_NOW in the command line if we
-   find out it does not work in some platform. */
-#ifndef LT_DLLAZY_OR_NOW
-#  ifdef RTLD_LAZY
-#    define LT_DLLAZY_OR_NOW		RTLD_LAZY
-#  else
-#    ifdef DL_LAZY
-#      define LT_DLLAZY_OR_NOW		DL_LAZY
-#    else
-#      ifdef RTLD_NOW
-#        define LT_DLLAZY_OR_NOW	RTLD_NOW
-#      else
-#        ifdef DL_NOW
-#          define LT_DLLAZY_OR_NOW	DL_NOW
-#        else
-#          define LT_DLLAZY_OR_NOW	0
-#        endif
-#      endif
-#    endif
-#  endif
-#endif
-
-void fnord() { int i=42;}
-int main ()
-{
-  void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW);
-  int status = $lt_dlunknown;
-
-  if (self)
-    {
-      if (dlsym (self,"fnord"))       status = $lt_dlno_uscore;
-      else if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore;
-      /* dlclose (self); */
-    }
-  else
-    puts (dlerror ());
-
-  return status;
-}]
-_LT_EOF
-  if AC_TRY_EVAL(ac_link) && test -s conftest${ac_exeext} 2>/dev/null; then
-    (./conftest; exit; ) >&AS_MESSAGE_LOG_FD 2>/dev/null
-    lt_status=$?
-    case x$lt_status in
-      x$lt_dlno_uscore) $1 ;;
-      x$lt_dlneed_uscore) $2 ;;
-      x$lt_dlunknown|x*) $3 ;;
-    esac
-  else :
-    # compilation failed
-    $3
-  fi
-fi
-rm -fr conftest*
-])# _LT_TRY_DLOPEN_SELF
-
-
-# LT_SYS_DLOPEN_SELF
-# ------------------
-AC_DEFUN([LT_SYS_DLOPEN_SELF],
-[m4_require([_LT_HEADER_DLFCN])dnl
-if test "x$enable_dlopen" != xyes; then
-  enable_dlopen=unknown
-  enable_dlopen_self=unknown
-  enable_dlopen_self_static=unknown
-else
-  lt_cv_dlopen=no
-  lt_cv_dlopen_libs=
-
-  case $host_os in
-  beos*)
-    lt_cv_dlopen="load_add_on"
-    lt_cv_dlopen_libs=
-    lt_cv_dlopen_self=yes
-    ;;
-
-  mingw* | pw32* | cegcc*)
-    lt_cv_dlopen="LoadLibrary"
-    lt_cv_dlopen_libs=
-    ;;
-
-  cygwin*)
-    lt_cv_dlopen="dlopen"
-    lt_cv_dlopen_libs=
-    ;;
-
-  darwin*)
-  # if libdl is installed we need to link against it
-    AC_CHECK_LIB([dl], [dlopen],
-		[lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"],[
-    lt_cv_dlopen="dyld"
-    lt_cv_dlopen_libs=
-    lt_cv_dlopen_self=yes
-    ])
-    ;;
-
-  *)
-    AC_CHECK_FUNC([shl_load],
-	  [lt_cv_dlopen="shl_load"],
-      [AC_CHECK_LIB([dld], [shl_load],
-	    [lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-ldld"],
-	[AC_CHECK_FUNC([dlopen],
-	      [lt_cv_dlopen="dlopen"],
-	  [AC_CHECK_LIB([dl], [dlopen],
-		[lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"],
-	    [AC_CHECK_LIB([svld], [dlopen],
-		  [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld"],
-	      [AC_CHECK_LIB([dld], [dld_link],
-		    [lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-ldld"])
-	      ])
-	    ])
-	  ])
-	])
-      ])
-    ;;
-  esac
-
-  if test "x$lt_cv_dlopen" != xno; then
-    enable_dlopen=yes
-  else
-    enable_dlopen=no
-  fi
-
-  case $lt_cv_dlopen in
-  dlopen)
-    save_CPPFLAGS="$CPPFLAGS"
-    test "x$ac_cv_header_dlfcn_h" = xyes && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H"
-
-    save_LDFLAGS="$LDFLAGS"
-    wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\"
-
-    save_LIBS="$LIBS"
-    LIBS="$lt_cv_dlopen_libs $LIBS"
-
-    AC_CACHE_CHECK([whether a program can dlopen itself],
-	  lt_cv_dlopen_self, [dnl
-	  _LT_TRY_DLOPEN_SELF(
-	    lt_cv_dlopen_self=yes, lt_cv_dlopen_self=yes,
-	    lt_cv_dlopen_self=no, lt_cv_dlopen_self=cross)
-    ])
-
-    if test "x$lt_cv_dlopen_self" = xyes; then
-      wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $lt_prog_compiler_static\"
-      AC_CACHE_CHECK([whether a statically linked program can dlopen itself],
-	  lt_cv_dlopen_self_static, [dnl
-	  _LT_TRY_DLOPEN_SELF(
-	    lt_cv_dlopen_self_static=yes, lt_cv_dlopen_self_static=yes,
-	    lt_cv_dlopen_self_static=no,  lt_cv_dlopen_self_static=cross)
-      ])
-    fi
-
-    CPPFLAGS="$save_CPPFLAGS"
-    LDFLAGS="$save_LDFLAGS"
-    LIBS="$save_LIBS"
-    ;;
-  esac
-
-  case $lt_cv_dlopen_self in
-  yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;;
-  *) enable_dlopen_self=unknown ;;
-  esac
-
-  case $lt_cv_dlopen_self_static in
-  yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;;
-  *) enable_dlopen_self_static=unknown ;;
-  esac
-fi
-_LT_DECL([dlopen_support], [enable_dlopen], [0],
-	 [Whether dlopen is supported])
-_LT_DECL([dlopen_self], [enable_dlopen_self], [0],
-	 [Whether dlopen of programs is supported])
-_LT_DECL([dlopen_self_static], [enable_dlopen_self_static], [0],
-	 [Whether dlopen of statically linked programs is supported])
-])# LT_SYS_DLOPEN_SELF
-
-# Old name:
-AU_ALIAS([AC_LIBTOOL_DLOPEN_SELF], [LT_SYS_DLOPEN_SELF])
-dnl aclocal-1.4 backwards compatibility:
-dnl AC_DEFUN([AC_LIBTOOL_DLOPEN_SELF], [])
-
-
-# _LT_COMPILER_C_O([TAGNAME])
-# ---------------------------
-# Check to see if options -c and -o are simultaneously supported by compiler.
-# This macro does not hard code the compiler like AC_PROG_CC_C_O.
-m4_defun([_LT_COMPILER_C_O],
-[m4_require([_LT_DECL_SED])dnl
-m4_require([_LT_FILEUTILS_DEFAULTS])dnl
-m4_require([_LT_TAG_COMPILER])dnl
-AC_CACHE_CHECK([if $compiler supports -c -o file.$ac_objext],
-  [_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)],
-  [_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=no
-   $RM -r conftest 2>/dev/null
-   mkdir conftest
-   cd conftest
-   mkdir out
-   echo "$lt_simple_compile_test_code" > conftest.$ac_ext
-
-   lt_compiler_flag="-o out/conftest2.$ac_objext"
-   # Insert the option either (1) after the last *FLAGS variable, or
-   # (2) before a word containing "conftest.", or (3) at the end.
-   # Note that $ac_compile itself does not contain backslashes and begins
-   # with a dollar sign (not a hyphen), so the echo should work correctly.
-   lt_compile=`echo "$ac_compile" | $SED \
-   -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
-   -e 's: [[^ ]]*conftest\.: $lt_compiler_flag&:; t' \
-   -e 's:$: $lt_compiler_flag:'`
-   (eval echo "\"\$as_me:__oline__: $lt_compile\"" >&AS_MESSAGE_LOG_FD)
-   (eval "$lt_compile" 2>out/conftest.err)
-   ac_status=$?
-   cat out/conftest.err >&AS_MESSAGE_LOG_FD
-   echo "$as_me:__oline__: \$? = $ac_status" >&AS_MESSAGE_LOG_FD
-   if (exit $ac_status) && test -s out/conftest2.$ac_objext
-   then
-     # The compiler can only warn and ignore the option if not recognized
-     # So say no if there are warnings
-     $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' > out/conftest.exp
-     $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2
-     if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then
-       _LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=yes
-     fi
-   fi
-   chmod u+w . 2>&AS_MESSAGE_LOG_FD
-   $RM conftest*
-   # SGI C++ compiler will create directory out/ii_files/ for
-   # template instantiation
-   test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files
-   $RM out/* && rmdir out
-   cd ..
-   $RM -r conftest
-   $RM conftest*
-])
-_LT_TAGDECL([compiler_c_o], [lt_cv_prog_compiler_c_o], [1],
-	[Does compiler simultaneously support -c and -o options?])
-])# _LT_COMPILER_C_O
-
-
-# _LT_COMPILER_FILE_LOCKS([TAGNAME])
-# ----------------------------------
-# Check to see if we can do hard links to lock some files if needed
-m4_defun([_LT_COMPILER_FILE_LOCKS],
-[m4_require([_LT_ENABLE_LOCK])dnl
-m4_require([_LT_FILEUTILS_DEFAULTS])dnl
-_LT_COMPILER_C_O([$1])
-
-hard_links="nottested"
-if test "$_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)" = no && test "$need_locks" != no; then
-  # do not overwrite the value of need_locks provided by the user
-  AC_MSG_CHECKING([if we can lock with hard links])
-  hard_links=yes
-  $RM conftest*
-  ln conftest.a conftest.b 2>/dev/null && hard_links=no
-  touch conftest.a
-  ln conftest.a conftest.b 2>&5 || hard_links=no
-  ln conftest.a conftest.b 2>/dev/null && hard_links=no
-  AC_MSG_RESULT([$hard_links])
-  if test "$hard_links" = no; then
-    AC_MSG_WARN([`$CC' does not support `-c -o', so `make -j' may be unsafe])
-    need_locks=warn
-  fi
-else
-  need_locks=no
-fi
-_LT_DECL([], [need_locks], [1], [Must we lock files when doing compilation?])
-])# _LT_COMPILER_FILE_LOCKS
-
-
-# _LT_CHECK_OBJDIR
-# ----------------
-m4_defun([_LT_CHECK_OBJDIR],
-[AC_CACHE_CHECK([for objdir], [lt_cv_objdir],
-[rm -f .libs 2>/dev/null
-mkdir .libs 2>/dev/null
-if test -d .libs; then
-  lt_cv_objdir=.libs
-else
-  # MS-DOS does not allow filenames that begin with a dot.
-  lt_cv_objdir=_libs
-fi
-rmdir .libs 2>/dev/null])
-objdir=$lt_cv_objdir
-_LT_DECL([], [objdir], [0],
-         [The name of the directory that contains temporary libtool files])dnl
-m4_pattern_allow([LT_OBJDIR])dnl
-AC_DEFINE_UNQUOTED(LT_OBJDIR, "$lt_cv_objdir/",
-  [Define to the sub-directory in which libtool stores uninstalled libraries.])
-])# _LT_CHECK_OBJDIR
-
-
-# _LT_LINKER_HARDCODE_LIBPATH([TAGNAME])
-# --------------------------------------
-# Check hardcoding attributes.
-m4_defun([_LT_LINKER_HARDCODE_LIBPATH],
-[AC_MSG_CHECKING([how to hardcode library paths into programs])
-_LT_TAGVAR(hardcode_action, $1)=
-if test -n "$_LT_TAGVAR(hardcode_libdir_flag_spec, $1)" ||
-   test -n "$_LT_TAGVAR(runpath_var, $1)" ||
-   test "X$_LT_TAGVAR(hardcode_automatic, $1)" = "Xyes" ; then
-
-  # We can hardcode non-existent directories.
-  if test "$_LT_TAGVAR(hardcode_direct, $1)" != no &&
-     # If the only mechanism to avoid hardcoding is shlibpath_var, we
-     # have to relink, otherwise we might link with an installed library
-     # when we should be linking with a yet-to-be-installed one
-     ## test "$_LT_TAGVAR(hardcode_shlibpath_var, $1)" != no &&
-     test "$_LT_TAGVAR(hardcode_minus_L, $1)" != no; then
-    # Linking always hardcodes the temporary library directory.
-    _LT_TAGVAR(hardcode_action, $1)=relink
-  else
-    # We can link without hardcoding, and we can hardcode nonexisting dirs.
-    _LT_TAGVAR(hardcode_action, $1)=immediate
-  fi
-else
-  # We cannot hardcode anything, or else we can only hardcode existing
-  # directories.
-  _LT_TAGVAR(hardcode_action, $1)=unsupported
-fi
-AC_MSG_RESULT([$_LT_TAGVAR(hardcode_action, $1)])
-
-if test "$_LT_TAGVAR(hardcode_action, $1)" = relink ||
-   test "$_LT_TAGVAR(inherit_rpath, $1)" = yes; then
-  # Fast installation is not supported
-  enable_fast_install=no
-elif test "$shlibpath_overrides_runpath" = yes ||
-     test "$enable_shared" = no; then
-  # Fast installation is not necessary
-  enable_fast_install=needless
-fi
-_LT_TAGDECL([], [hardcode_action], [0],
-    [How to hardcode a shared library path into an executable])
-])# _LT_LINKER_HARDCODE_LIBPATH
-
-
-# _LT_CMD_STRIPLIB
-# ----------------
-m4_defun([_LT_CMD_STRIPLIB],
-[m4_require([_LT_DECL_EGREP])
-striplib=
-old_striplib=
-AC_MSG_CHECKING([whether stripping libraries is possible])
-if test -n "$STRIP" && $STRIP -V 2>&1 | $GREP "GNU strip" >/dev/null; then
-  test -z "$old_striplib" && old_striplib="$STRIP --strip-debug"
-  test -z "$striplib" && striplib="$STRIP --strip-unneeded"
-  AC_MSG_RESULT([yes])
-else
-# FIXME - insert some real tests, host_os isn't really good enough
-  case $host_os in
-  darwin*)
-    if test -n "$STRIP" ; then
-      striplib="$STRIP -x"
-      old_striplib="$STRIP -S"
-      AC_MSG_RESULT([yes])
-    else
-      AC_MSG_RESULT([no])
-    fi
-    ;;
-  *)
-    AC_MSG_RESULT([no])
-    ;;
-  esac
-fi
-_LT_DECL([], [old_striplib], [1], [Commands to strip libraries])
-_LT_DECL([], [striplib], [1])
-])# _LT_CMD_STRIPLIB
-
-
-# _LT_SYS_DYNAMIC_LINKER([TAG])
-# -----------------------------
-# PORTME Fill in your ld.so characteristics
-m4_defun([_LT_SYS_DYNAMIC_LINKER],
-[AC_REQUIRE([AC_CANONICAL_HOST])dnl
-m4_require([_LT_DECL_EGREP])dnl
-m4_require([_LT_FILEUTILS_DEFAULTS])dnl
-m4_require([_LT_DECL_OBJDUMP])dnl
-m4_require([_LT_DECL_SED])dnl
-AC_MSG_CHECKING([dynamic linker characteristics])
-m4_if([$1],
-	[], [
-if test "$GCC" = yes; then
-  case $host_os in
-    darwin*) lt_awk_arg="/^libraries:/,/LR/" ;;
-    *) lt_awk_arg="/^libraries:/" ;;
-  esac
-  lt_search_path_spec=`$CC -print-search-dirs | awk $lt_awk_arg | $SED -e "s/^libraries://" -e "s,=/,/,g"`
-  if $ECHO "$lt_search_path_spec" | $GREP ';' >/dev/null ; then
-    # if the path contains ";" then we assume it to be the separator
-    # otherwise default to the standard path separator (i.e. ":") - it is
-    # assumed that no part of a normal pathname contains ";" but that should
-    # okay in the real world where ";" in dirpaths is itself problematic.
-    lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED -e 's/;/ /g'`
-  else
-    lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED  -e "s/$PATH_SEPARATOR/ /g"`
-  fi
-  # Ok, now we have the path, separated by spaces, we can step through it
-  # and add multilib dir if necessary.
-  lt_tmp_lt_search_path_spec=
-  lt_multi_os_dir=`$CC $CPPFLAGS $CFLAGS $LDFLAGS -print-multi-os-directory 2>/dev/null`
-  for lt_sys_path in $lt_search_path_spec; do
-    if test -d "$lt_sys_path/$lt_multi_os_dir"; then
-      lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path/$lt_multi_os_dir"
-    else
-      test -d "$lt_sys_path" && \
-	lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path"
-    fi
-  done
-  lt_search_path_spec=`$ECHO $lt_tmp_lt_search_path_spec | awk '
-BEGIN {RS=" "; FS="/|\n";} {
-  lt_foo="";
-  lt_count=0;
-  for (lt_i = NF; lt_i > 0; lt_i--) {
-    if ($lt_i != "" && $lt_i != ".") {
-      if ($lt_i == "..") {
-        lt_count++;
-      } else {
-        if (lt_count == 0) {
-          lt_foo="/" $lt_i lt_foo;
-        } else {
-          lt_count--;
-        }
-      }
-    }
-  }
-  if (lt_foo != "") { lt_freq[[lt_foo]]++; }
-  if (lt_freq[[lt_foo]] == 1) { print lt_foo; }
-}'`
-  sys_lib_search_path_spec=`$ECHO $lt_search_path_spec`
-else
-  sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib"
-fi])
-library_names_spec=
-libname_spec='lib$name'
-soname_spec=
-shrext_cmds=".so"
-postinstall_cmds=
-postuninstall_cmds=
-finish_cmds=
-finish_eval=
-shlibpath_var=
-shlibpath_overrides_runpath=unknown
-version_type=none
-dynamic_linker="$host_os ld.so"
-sys_lib_dlsearch_path_spec="/lib /usr/lib"
-need_lib_prefix=unknown
-hardcode_into_libs=no
-
-# when you set need_version to no, make sure it does not cause -set_version
-# flags to be left without arguments
-need_version=unknown
-
-case $host_os in
-aix3*)
-  version_type=linux
-  library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a'
-  shlibpath_var=LIBPATH
-
-  # AIX 3 has no versioning support, so we append a major version to the name.
-  soname_spec='${libname}${release}${shared_ext}$major'
-  ;;
-
-aix[[4-9]]*)
-  version_type=linux
-  need_lib_prefix=no
-  need_version=no
-  hardcode_into_libs=yes
-  if test "$host_cpu" = ia64; then
-    # AIX 5 supports IA64
-    library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}'
-    shlibpath_var=LD_LIBRARY_PATH
-  else
-    # With GCC up to 2.95.x, collect2 would create an import file
-    # for dependence libraries.  The import file would start with
-    # the line `#! .'.  This would cause the generated library to
-    # depend on `.', always an invalid library.  This was fixed in
-    # development snapshots of GCC prior to 3.0.
-    case $host_os in
-      aix4 | aix4.[[01]] | aix4.[[01]].*)
-      if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)'
-	   echo ' yes '
-	   echo '#endif'; } | ${CC} -E - | $GREP yes > /dev/null; then
-	:
-      else
-	can_build_shared=no
-      fi
-      ;;
-    esac
-    # AIX (on Power*) has no versioning support, so currently we can not hardcode correct
-    # soname into executable. Probably we can add versioning support to
-    # collect2, so additional links can be useful in future.
-    if test "$aix_use_runtimelinking" = yes; then
-      # If using run time linking (on AIX 4.2 or later) use lib<name>.so
-      # instead of lib<name>.a to let people know that these are not
-      # typical AIX shared libraries.
-      library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
-    else
-      # We preserve .a as extension for shared libraries through AIX4.2
-      # and later when we are not doing run time linking.
-      library_names_spec='${libname}${release}.a $libname.a'
-      soname_spec='${libname}${release}${shared_ext}$major'
-    fi
-    shlibpath_var=LIBPATH
-  fi
-  ;;
-
-amigaos*)
-  case $host_cpu in
-  powerpc)
-    # Since July 2007 AmigaOS4 officially supports .so libraries.
-    # When compiling the executable, add -use-dynld -Lsobjs: to the compileline.
-    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
-    ;;
-  m68k)
-    library_names_spec='$libname.ixlibrary $libname.a'
-    # Create ${libname}_ixlibrary.a entries in /sys/libs.
-    finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`$ECHO "X$lib" | $Xsed -e '\''s%^.*/\([[^/]]*\)\.ixlibrary$%\1%'\''`; test $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done'
-    ;;
-  esac
-  ;;
-
-beos*)
-  library_names_spec='${libname}${shared_ext}'
-  dynamic_linker="$host_os ld.so"
-  shlibpath_var=LIBRARY_PATH
-  ;;
-
-bsdi[[45]]*)
-  version_type=linux
-  need_version=no
-  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
-  soname_spec='${libname}${release}${shared_ext}$major'
-  finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir'
-  shlibpath_var=LD_LIBRARY_PATH
-  sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib"
-  sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib"
-  # the default ld.so.conf also contains /usr/contrib/lib and
-  # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow
-  # libtool to hard-code these into programs
-  ;;
-
-cygwin* | mingw* | pw32* | cegcc*)
-  version_type=windows
-  shrext_cmds=".dll"
-  need_version=no
-  need_lib_prefix=no
-
-  case $GCC,$host_os in
-  yes,cygwin* | yes,mingw* | yes,pw32* | yes,cegcc*)
-    library_names_spec='$libname.dll.a'
-    # DLL is installed to $(libdir)/../bin by postinstall_cmds
-    postinstall_cmds='base_file=`basename \${file}`~
-      dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~
-      dldir=$destdir/`dirname \$dlpath`~
-      test -d \$dldir || mkdir -p \$dldir~
-      $install_prog $dir/$dlname \$dldir/$dlname~
-      chmod a+x \$dldir/$dlname~
-      if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then
-        eval '\''$striplib \$dldir/$dlname'\'' || exit \$?;
-      fi'
-    postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~
-      dlpath=$dir/\$dldll~
-       $RM \$dlpath'
-    shlibpath_overrides_runpath=yes
-
-    case $host_os in
-    cygwin*)
-      # Cygwin DLLs use 'cyg' prefix rather than 'lib'
-      soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}'
-      sys_lib_search_path_spec="/usr/lib /lib/w32api /lib /usr/local/lib"
-      ;;
-    mingw* | cegcc*)
-      # MinGW DLLs use traditional 'lib' prefix
-      soname_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}'
-      sys_lib_search_path_spec=`$CC -print-search-dirs | $GREP "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"`
-      if $ECHO "$sys_lib_search_path_spec" | [$GREP ';[c-zC-Z]:/' >/dev/null]; then
-        # It is most probably a Windows format PATH printed by
-        # mingw gcc, but we are running on Cygwin. Gcc prints its search
-        # path with ; separators, and with drive letters. We can handle the
-        # drive letters (cygwin fileutils understands them), so leave them,
-        # especially as we might pass files found there to a mingw objdump,
-        # which wouldn't understand a cygwinified path. Ahh.
-        sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'`
-      else
-        sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED  -e "s/$PATH_SEPARATOR/ /g"`
-      fi
-      ;;
-    pw32*)
-      # pw32 DLLs use 'pw' prefix rather than 'lib'
-      library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}'
-      ;;
-    esac
-    ;;
-
-  *)
-    library_names_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext} $libname.lib'
-    ;;
-  esac
-  dynamic_linker='Win32 ld.exe'
-  # FIXME: first we should search . and the directory the executable is in
-  shlibpath_var=PATH
-  ;;
-
-darwin* | rhapsody*)
-  dynamic_linker="$host_os dyld"
-  version_type=darwin
-  need_lib_prefix=no
-  need_version=no
-  library_names_spec='${libname}${release}${major}$shared_ext ${libname}$shared_ext'
-  soname_spec='${libname}${release}${major}$shared_ext'
-  shlibpath_overrides_runpath=yes
-  shlibpath_var=DYLD_LIBRARY_PATH
-  shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`'
-m4_if([$1], [],[
-  sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/local/lib"])
-  sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib'
-  ;;
-
-dgux*)
-  version_type=linux
-  need_lib_prefix=no
-  need_version=no
-  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext'
-  soname_spec='${libname}${release}${shared_ext}$major'
-  shlibpath_var=LD_LIBRARY_PATH
-  ;;
-
-freebsd1*)
-  dynamic_linker=no
-  ;;
-
-freebsd* | dragonfly*)
-  # DragonFly does not have aout.  When/if they implement a new
-  # versioning mechanism, adjust this.
-  if test -x /usr/bin/objformat; then
-    objformat=`/usr/bin/objformat`
-  else
-    case $host_os in
-    freebsd[[123]]*) objformat=aout ;;
-    *) objformat=elf ;;
-    esac
-  fi
-  version_type=freebsd-$objformat
-  case $version_type in
-    freebsd-elf*)
-      library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}'
-      need_version=no
-      need_lib_prefix=no
-      ;;
-    freebsd-*)
-      library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix'
-      need_version=yes
-      ;;
-  esac
-  shlibpath_var=LD_LIBRARY_PATH
-  case $host_os in
-  freebsd2*)
-    shlibpath_overrides_runpath=yes
-    ;;
-  freebsd3.[[01]]* | freebsdelf3.[[01]]*)
-    shlibpath_overrides_runpath=yes
-    hardcode_into_libs=yes
-    ;;
-  freebsd3.[[2-9]]* | freebsdelf3.[[2-9]]* | \
-  freebsd4.[[0-5]] | freebsdelf4.[[0-5]] | freebsd4.1.1 | freebsdelf4.1.1)
-    shlibpath_overrides_runpath=no
-    hardcode_into_libs=yes
-    ;;
-  *) # from 4.6 on, and DragonFly
-    shlibpath_overrides_runpath=yes
-    hardcode_into_libs=yes
-    ;;
-  esac
-  ;;
-
-gnu*)
-  version_type=linux
-  need_lib_prefix=no
-  need_version=no
-  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}'
-  soname_spec='${libname}${release}${shared_ext}$major'
-  shlibpath_var=LD_LIBRARY_PATH
-  hardcode_into_libs=yes
-  ;;
-
-hpux9* | hpux10* | hpux11*)
-  # Give a soname corresponding to the major version so that dld.sl refuses to
-  # link against other versions.
-  version_type=sunos
-  need_lib_prefix=no
-  need_version=no
-  case $host_cpu in
-  ia64*)
-    shrext_cmds='.so'
-    hardcode_into_libs=yes
-    dynamic_linker="$host_os dld.so"
-    shlibpath_var=LD_LIBRARY_PATH
-    shlibpath_overrides_runpath=yes # Unless +noenvvar is specified.
-    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
-    soname_spec='${libname}${release}${shared_ext}$major'
-    if test "X$HPUX_IA64_MODE" = X32; then
-      sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib"
-    else
-      sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64"
-    fi
-    sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec
-    ;;
-  hppa*64*)
-    shrext_cmds='.sl'
-    hardcode_into_libs=yes
-    dynamic_linker="$host_os dld.sl"
-    shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH
-    shlibpath_overrides_runpath=yes # Unless +noenvvar is specified.
-    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
-    soname_spec='${libname}${release}${shared_ext}$major'
-    sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64"
-    sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec
-    ;;
-  *)
-    shrext_cmds='.sl'
-    dynamic_linker="$host_os dld.sl"
-    shlibpath_var=SHLIB_PATH
-    shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH
-    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
-    soname_spec='${libname}${release}${shared_ext}$major'
-    ;;
-  esac
-  # HP-UX runs *really* slowly unless shared libraries are mode 555.
-  postinstall_cmds='chmod 555 $lib'
-  ;;
-
-interix[[3-9]]*)
-  version_type=linux
-  need_lib_prefix=no
-  need_version=no
-  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
-  soname_spec='${libname}${release}${shared_ext}$major'
-  dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)'
-  shlibpath_var=LD_LIBRARY_PATH
-  shlibpath_overrides_runpath=no
-  hardcode_into_libs=yes
-  ;;
-
-irix5* | irix6* | nonstopux*)
-  case $host_os in
-    nonstopux*) version_type=nonstopux ;;
-    *)
-	if test "$lt_cv_prog_gnu_ld" = yes; then
-		version_type=linux
-	else
-		version_type=irix
-	fi ;;
-  esac
-  need_lib_prefix=no
-  need_version=no
-  soname_spec='${libname}${release}${shared_ext}$major'
-  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}'
-  case $host_os in
-  irix5* | nonstopux*)
-    libsuff= shlibsuff=
-    ;;
-  *)
-    case $LD in # libtool.m4 will add one of these switches to LD
-    *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ")
-      libsuff= shlibsuff= libmagic=32-bit;;
-    *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ")
-      libsuff=32 shlibsuff=N32 libmagic=N32;;
-    *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ")
-      libsuff=64 shlibsuff=64 libmagic=64-bit;;
-    *) libsuff= shlibsuff= libmagic=never-match;;
-    esac
-    ;;
-  esac
-  shlibpath_var=LD_LIBRARY${shlibsuff}_PATH
-  shlibpath_overrides_runpath=no
-  sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}"
-  sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}"
-  hardcode_into_libs=yes
-  ;;
-
-# No shared lib support for Linux oldld, aout, or coff.
-linux*oldld* | linux*aout* | linux*coff*)
-  dynamic_linker=no
-  ;;
-
-# This must be Linux ELF.
-linux* | k*bsd*-gnu)
-  version_type=linux
-  need_lib_prefix=no
-  need_version=no
-  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
-  soname_spec='${libname}${release}${shared_ext}$major'
-  finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir'
-  shlibpath_var=LD_LIBRARY_PATH
-  shlibpath_overrides_runpath=no
-  # Some binutils ld are patched to set DT_RUNPATH
-  save_LDFLAGS=$LDFLAGS
-  save_libdir=$libdir
-  eval "libdir=/foo; wl=\"$_LT_TAGVAR(lt_prog_compiler_wl, $1)\"; \
-       LDFLAGS=\"\$LDFLAGS $_LT_TAGVAR(hardcode_libdir_flag_spec, $1)\""
-  AC_LINK_IFELSE([AC_LANG_PROGRAM([],[])],
-    [AS_IF([ ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null],
-       [shlibpath_overrides_runpath=yes])])
-  LDFLAGS=$save_LDFLAGS
-  libdir=$save_libdir
-
-  # This implies no fast_install, which is unacceptable.
-  # Some rework will be needed to allow for fast_install
-  # before this can be enabled.
-  hardcode_into_libs=yes
-
-  # Append ld.so.conf contents to the search path
-  if test -f /etc/ld.so.conf; then
-    lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \[$]2)); skip = 1; } { if (!skip) print \[$]0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[	 ]*hwcap[	 ]/d;s/[:,	]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;/^$/d' | tr '\n' ' '`
-    sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra"
-  fi
-
-  # We used to test for /lib/ld.so.1 and disable shared libraries on
-  # powerpc, because MkLinux only supported shared libraries with the
-  # GNU dynamic linker.  Since this was broken with cross compilers,
-  # most powerpc-linux boxes support dynamic linking these days and
-  # people can always --disable-shared, the test was removed, and we
-  # assume the GNU/Linux dynamic linker is in use.
-  dynamic_linker='GNU/Linux ld.so'
-  ;;
-
-netbsd*)
-  version_type=sunos
-  need_lib_prefix=no
-  need_version=no
-  if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then
-    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
-    finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
-    dynamic_linker='NetBSD (a.out) ld.so'
-  else
-    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
-    soname_spec='${libname}${release}${shared_ext}$major'
-    dynamic_linker='NetBSD ld.elf_so'
-  fi
-  shlibpath_var=LD_LIBRARY_PATH
-  shlibpath_overrides_runpath=yes
-  hardcode_into_libs=yes
-  ;;
-
-newsos6)
-  version_type=linux
-  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
-  shlibpath_var=LD_LIBRARY_PATH
-  shlibpath_overrides_runpath=yes
-  ;;
-
-*nto* | *qnx*)
-  version_type=qnx
-  need_lib_prefix=no
-  need_version=no
-  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
-  soname_spec='${libname}${release}${shared_ext}$major'
-  shlibpath_var=LD_LIBRARY_PATH
-  shlibpath_overrides_runpath=no
-  hardcode_into_libs=yes
-  dynamic_linker='ldqnx.so'
-  ;;
-
-openbsd*)
-  version_type=sunos
-  sys_lib_dlsearch_path_spec="/usr/lib"
-  need_lib_prefix=no
-  # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs.
-  case $host_os in
-    openbsd3.3 | openbsd3.3.*)	need_version=yes ;;
-    *)				need_version=no  ;;
-  esac
-  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
-  finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
-  shlibpath_var=LD_LIBRARY_PATH
-  if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
-    case $host_os in
-      openbsd2.[[89]] | openbsd2.[[89]].*)
-	shlibpath_overrides_runpath=no
-	;;
-      *)
-	shlibpath_overrides_runpath=yes
-	;;
-      esac
-  else
-    shlibpath_overrides_runpath=yes
-  fi
-  ;;
-
-os2*)
-  libname_spec='$name'
-  shrext_cmds=".dll"
-  need_lib_prefix=no
-  library_names_spec='$libname${shared_ext} $libname.a'
-  dynamic_linker='OS/2 ld.exe'
-  shlibpath_var=LIBPATH
-  ;;
-
-osf3* | osf4* | osf5*)
-  version_type=osf
-  need_lib_prefix=no
-  need_version=no
-  soname_spec='${libname}${release}${shared_ext}$major'
-  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
-  shlibpath_var=LD_LIBRARY_PATH
-  sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib"
-  sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec"
-  ;;
-
-rdos*)
-  dynamic_linker=no
-  ;;
-
-solaris*)
-  version_type=linux
-  need_lib_prefix=no
-  need_version=no
-  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
-  soname_spec='${libname}${release}${shared_ext}$major'
-  shlibpath_var=LD_LIBRARY_PATH
-  shlibpath_overrides_runpath=yes
-  hardcode_into_libs=yes
-  # ldd complains unless libraries are executable
-  postinstall_cmds='chmod +x $lib'
-  ;;
-
-sunos4*)
-  version_type=sunos
-  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
-  finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir'
-  shlibpath_var=LD_LIBRARY_PATH
-  shlibpath_overrides_runpath=yes
-  if test "$with_gnu_ld" = yes; then
-    need_lib_prefix=no
-  fi
-  need_version=yes
-  ;;
-
-sysv4 | sysv4.3*)
-  version_type=linux
-  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
-  soname_spec='${libname}${release}${shared_ext}$major'
-  shlibpath_var=LD_LIBRARY_PATH
-  case $host_vendor in
-    sni)
-      shlibpath_overrides_runpath=no
-      need_lib_prefix=no
-      runpath_var=LD_RUN_PATH
-      ;;
-    siemens)
-      need_lib_prefix=no
-      ;;
-    motorola)
-      need_lib_prefix=no
-      need_version=no
-      shlibpath_overrides_runpath=no
-      sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib'
-      ;;
-  esac
-  ;;
-
-sysv4*MP*)
-  if test -d /usr/nec ;then
-    version_type=linux
-    library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}'
-    soname_spec='$libname${shared_ext}.$major'
-    shlibpath_var=LD_LIBRARY_PATH
-  fi
-  ;;
-
-sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*)
-  version_type=freebsd-elf
-  need_lib_prefix=no
-  need_version=no
-  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}'
-  soname_spec='${libname}${release}${shared_ext}$major'
-  shlibpath_var=LD_LIBRARY_PATH
-  shlibpath_overrides_runpath=yes
-  hardcode_into_libs=yes
-  if test "$with_gnu_ld" = yes; then
-    sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib'
-  else
-    sys_lib_search_path_spec='/usr/ccs/lib /usr/lib'
-    case $host_os in
-      sco3.2v5*)
-        sys_lib_search_path_spec="$sys_lib_search_path_spec /lib"
-	;;
-    esac
-  fi
-  sys_lib_dlsearch_path_spec='/usr/lib'
-  ;;
-
-tpf*)
-  # TPF is a cross-target only.  Preferred cross-host = GNU/Linux.
-  version_type=linux
-  need_lib_prefix=no
-  need_version=no
-  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
-  shlibpath_var=LD_LIBRARY_PATH
-  shlibpath_overrides_runpath=no
-  hardcode_into_libs=yes
-  ;;
-
-uts4*)
-  version_type=linux
-  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
-  soname_spec='${libname}${release}${shared_ext}$major'
-  shlibpath_var=LD_LIBRARY_PATH
-  ;;
-
-*)
-  dynamic_linker=no
-  ;;
-esac
-AC_MSG_RESULT([$dynamic_linker])
-test "$dynamic_linker" = no && can_build_shared=no
-
-variables_saved_for_relink="PATH $shlibpath_var $runpath_var"
-if test "$GCC" = yes; then
-  variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH"
-fi
-
-if test "${lt_cv_sys_lib_search_path_spec+set}" = set; then
-  sys_lib_search_path_spec="$lt_cv_sys_lib_search_path_spec"
-fi
-if test "${lt_cv_sys_lib_dlsearch_path_spec+set}" = set; then
-  sys_lib_dlsearch_path_spec="$lt_cv_sys_lib_dlsearch_path_spec"
-fi
-
-_LT_DECL([], [variables_saved_for_relink], [1],
-    [Variables whose values should be saved in libtool wrapper scripts and
-    restored at link time])
-_LT_DECL([], [need_lib_prefix], [0],
-    [Do we need the "lib" prefix for modules?])
-_LT_DECL([], [need_version], [0], [Do we need a version for libraries?])
-_LT_DECL([], [version_type], [0], [Library versioning type])
-_LT_DECL([], [runpath_var], [0],  [Shared library runtime path variable])
-_LT_DECL([], [shlibpath_var], [0],[Shared library path variable])
-_LT_DECL([], [shlibpath_overrides_runpath], [0],
-    [Is shlibpath searched before the hard-coded library search path?])
-_LT_DECL([], [libname_spec], [1], [Format of library name prefix])
-_LT_DECL([], [library_names_spec], [1],
-    [[List of archive names.  First name is the real one, the rest are links.
-    The last name is the one that the linker finds with -lNAME]])
-_LT_DECL([], [soname_spec], [1],
-    [[The coded name of the library, if different from the real name]])
-_LT_DECL([], [postinstall_cmds], [2],
-    [Command to use after installation of a shared archive])
-_LT_DECL([], [postuninstall_cmds], [2],
-    [Command to use after uninstallation of a shared archive])
-_LT_DECL([], [finish_cmds], [2],
-    [Commands used to finish a libtool library installation in a directory])
-_LT_DECL([], [finish_eval], [1],
-    [[As "finish_cmds", except a single script fragment to be evaled but
-    not shown]])
-_LT_DECL([], [hardcode_into_libs], [0],
-    [Whether we should hardcode library paths into libraries])
-_LT_DECL([], [sys_lib_search_path_spec], [2],
-    [Compile-time system search path for libraries])
-_LT_DECL([], [sys_lib_dlsearch_path_spec], [2],
-    [Run-time system search path for libraries])
-])# _LT_SYS_DYNAMIC_LINKER
-
-
-# _LT_PATH_TOOL_PREFIX(TOOL)
-# --------------------------
-# find a file program which can recognize shared library
-AC_DEFUN([_LT_PATH_TOOL_PREFIX],
-[m4_require([_LT_DECL_EGREP])dnl
-AC_MSG_CHECKING([for $1])
-AC_CACHE_VAL(lt_cv_path_MAGIC_CMD,
-[case $MAGIC_CMD in
-[[\\/*] |  ?:[\\/]*])
-  lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path.
-  ;;
-*)
-  lt_save_MAGIC_CMD="$MAGIC_CMD"
-  lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
-dnl $ac_dummy forces splitting on constant user-supplied paths.
-dnl POSIX.2 word splitting is done only on the output of word expansions,
-dnl not every word.  This closes a longstanding sh security hole.
-  ac_dummy="m4_if([$2], , $PATH, [$2])"
-  for ac_dir in $ac_dummy; do
-    IFS="$lt_save_ifs"
-    test -z "$ac_dir" && ac_dir=.
-    if test -f $ac_dir/$1; then
-      lt_cv_path_MAGIC_CMD="$ac_dir/$1"
-      if test -n "$file_magic_test_file"; then
-	case $deplibs_check_method in
-	"file_magic "*)
-	  file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"`
-	  MAGIC_CMD="$lt_cv_path_MAGIC_CMD"
-	  if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null |
-	    $EGREP "$file_magic_regex" > /dev/null; then
-	    :
-	  else
-	    cat <<_LT_EOF 1>&2
-
-*** Warning: the command libtool uses to detect shared libraries,
-*** $file_magic_cmd, produces output that libtool cannot recognize.
-*** The result is that libtool may fail to recognize shared libraries
-*** as such.  This will affect the creation of libtool libraries that
-*** depend on shared libraries, but programs linked with such libtool
-*** libraries will work regardless of this problem.  Nevertheless, you
-*** may want to report the problem to your system manager and/or to
-*** bug-libtool at gnu.org
-
-_LT_EOF
-	  fi ;;
-	esac
-      fi
-      break
-    fi
-  done
-  IFS="$lt_save_ifs"
-  MAGIC_CMD="$lt_save_MAGIC_CMD"
-  ;;
-esac])
-MAGIC_CMD="$lt_cv_path_MAGIC_CMD"
-if test -n "$MAGIC_CMD"; then
-  AC_MSG_RESULT($MAGIC_CMD)
-else
-  AC_MSG_RESULT(no)
-fi
-_LT_DECL([], [MAGIC_CMD], [0],
-	 [Used to examine libraries when file_magic_cmd begins with "file"])dnl
-])# _LT_PATH_TOOL_PREFIX
-
-# Old name:
-AU_ALIAS([AC_PATH_TOOL_PREFIX], [_LT_PATH_TOOL_PREFIX])
-dnl aclocal-1.4 backwards compatibility:
-dnl AC_DEFUN([AC_PATH_TOOL_PREFIX], [])
-
-
-# _LT_PATH_MAGIC
-# --------------
-# find a file program which can recognize a shared library
-m4_defun([_LT_PATH_MAGIC],
-[_LT_PATH_TOOL_PREFIX(${ac_tool_prefix}file, /usr/bin$PATH_SEPARATOR$PATH)
-if test -z "$lt_cv_path_MAGIC_CMD"; then
-  if test -n "$ac_tool_prefix"; then
-    _LT_PATH_TOOL_PREFIX(file, /usr/bin$PATH_SEPARATOR$PATH)
-  else
-    MAGIC_CMD=:
-  fi
-fi
-])# _LT_PATH_MAGIC
-
-
-# LT_PATH_LD
-# ----------
-# find the pathname to the GNU or non-GNU linker
-AC_DEFUN([LT_PATH_LD],
-[AC_REQUIRE([AC_PROG_CC])dnl
-AC_REQUIRE([AC_CANONICAL_HOST])dnl
-AC_REQUIRE([AC_CANONICAL_BUILD])dnl
-m4_require([_LT_DECL_SED])dnl
-m4_require([_LT_DECL_EGREP])dnl
-
-AC_ARG_WITH([gnu-ld],
-    [AS_HELP_STRING([--with-gnu-ld],
-	[assume the C compiler uses GNU ld @<:@default=no@:>@])],
-    [test "$withval" = no || with_gnu_ld=yes],
-    [with_gnu_ld=no])dnl
-
-ac_prog=ld
-if test "$GCC" = yes; then
-  # Check if gcc -print-prog-name=ld gives a path.
-  AC_MSG_CHECKING([for ld used by $CC])
-  case $host in
-  *-*-mingw*)
-    # gcc leaves a trailing carriage return which upsets mingw
-    ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;;
-  *)
-    ac_prog=`($CC -print-prog-name=ld) 2>&5` ;;
-  esac
-  case $ac_prog in
-    # Accept absolute paths.
-    [[\\/]]* | ?:[[\\/]]*)
-      re_direlt='/[[^/]][[^/]]*/\.\./'
-      # Canonicalize the pathname of ld
-      ac_prog=`$ECHO "$ac_prog"| $SED 's%\\\\%/%g'`
-      while $ECHO "$ac_prog" | $GREP "$re_direlt" > /dev/null 2>&1; do
-	ac_prog=`$ECHO $ac_prog| $SED "s%$re_direlt%/%"`
-      done
-      test -z "$LD" && LD="$ac_prog"
-      ;;
-  "")
-    # If it fails, then pretend we aren't using GCC.
-    ac_prog=ld
-    ;;
-  *)
-    # If it is relative, then search for the first ld in PATH.
-    with_gnu_ld=unknown
-    ;;
-  esac
-elif test "$with_gnu_ld" = yes; then
-  AC_MSG_CHECKING([for GNU ld])
-else
-  AC_MSG_CHECKING([for non-GNU ld])
-fi
-AC_CACHE_VAL(lt_cv_path_LD,
-[if test -z "$LD"; then
-  lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
-  for ac_dir in $PATH; do
-    IFS="$lt_save_ifs"
-    test -z "$ac_dir" && ac_dir=.
-    if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then
-      lt_cv_path_LD="$ac_dir/$ac_prog"
-      # Check to see if the program is GNU ld.  I'd rather use --version,
-      # but apparently some variants of GNU ld only accept -v.
-      # Break only if it was the GNU/non-GNU ld that we prefer.
-      case `"$lt_cv_path_LD" -v 2>&1 </dev/null` in
-      *GNU* | *'with BFD'*)
-	test "$with_gnu_ld" != no && break
-	;;
-      *)
-	test "$with_gnu_ld" != yes && break
-	;;
-      esac
-    fi
-  done
-  IFS="$lt_save_ifs"
-else
-  lt_cv_path_LD="$LD" # Let the user override the test with a path.
-fi])
-LD="$lt_cv_path_LD"
-if test -n "$LD"; then
-  AC_MSG_RESULT($LD)
-else
-  AC_MSG_RESULT(no)
-fi
-test -z "$LD" && AC_MSG_ERROR([no acceptable ld found in \$PATH])
-_LT_PATH_LD_GNU
-AC_SUBST([LD])
-
-_LT_TAGDECL([], [LD], [1], [The linker used to build libraries])
-])# LT_PATH_LD
-
-# Old names:
-AU_ALIAS([AM_PROG_LD], [LT_PATH_LD])
-AU_ALIAS([AC_PROG_LD], [LT_PATH_LD])
-dnl aclocal-1.4 backwards compatibility:
-dnl AC_DEFUN([AM_PROG_LD], [])
-dnl AC_DEFUN([AC_PROG_LD], [])
-
-
-# _LT_PATH_LD_GNU
-#- --------------
-m4_defun([_LT_PATH_LD_GNU],
-[AC_CACHE_CHECK([if the linker ($LD) is GNU ld], lt_cv_prog_gnu_ld,
-[# I'd rather use --version here, but apparently some GNU lds only accept -v.
-case `$LD -v 2>&1 </dev/null` in
-*GNU* | *'with BFD'*)
-  lt_cv_prog_gnu_ld=yes
-  ;;
-*)
-  lt_cv_prog_gnu_ld=no
-  ;;
-esac])
-with_gnu_ld=$lt_cv_prog_gnu_ld
-])# _LT_PATH_LD_GNU
-
-
-# _LT_CMD_RELOAD
-# --------------
-# find reload flag for linker
-#   -- PORTME Some linkers may need a different reload flag.
-m4_defun([_LT_CMD_RELOAD],
-[AC_CACHE_CHECK([for $LD option to reload object files],
-  lt_cv_ld_reload_flag,
-  [lt_cv_ld_reload_flag='-r'])
-reload_flag=$lt_cv_ld_reload_flag
-case $reload_flag in
-"" | " "*) ;;
-*) reload_flag=" $reload_flag" ;;
-esac
-reload_cmds='$LD$reload_flag -o $output$reload_objs'
-case $host_os in
-  darwin*)
-    if test "$GCC" = yes; then
-      reload_cmds='$LTCC $LTCFLAGS -nostdlib ${wl}-r -o $output$reload_objs'
-    else
-      reload_cmds='$LD$reload_flag -o $output$reload_objs'
-    fi
-    ;;
-esac
-_LT_DECL([], [reload_flag], [1], [How to create reloadable object files])dnl
-_LT_DECL([], [reload_cmds], [2])dnl
-])# _LT_CMD_RELOAD
-
-
-# _LT_CHECK_MAGIC_METHOD
-# ----------------------
-# how to check for library dependencies
-#  -- PORTME fill in with the dynamic library characteristics
-m4_defun([_LT_CHECK_MAGIC_METHOD],
-[m4_require([_LT_DECL_EGREP])
-m4_require([_LT_DECL_OBJDUMP])
-AC_CACHE_CHECK([how to recognize dependent libraries],
-lt_cv_deplibs_check_method,
-[lt_cv_file_magic_cmd='$MAGIC_CMD'
-lt_cv_file_magic_test_file=
-lt_cv_deplibs_check_method='unknown'
-# Need to set the preceding variable on all platforms that support
-# interlibrary dependencies.
-# 'none' -- dependencies not supported.
-# `unknown' -- same as none, but documents that we really don't know.
-# 'pass_all' -- all dependencies passed with no checks.
-# 'test_compile' -- check by making test program.
-# 'file_magic [[regex]]' -- check by looking for files in library path
-# which responds to the $file_magic_cmd with a given extended regex.
-# If you have `file' or equivalent on your system and you're not sure
-# whether `pass_all' will *always* work, you probably want this one.
-
-case $host_os in
-aix[[4-9]]*)
-  lt_cv_deplibs_check_method=pass_all
-  ;;
-
-beos*)
-  lt_cv_deplibs_check_method=pass_all
-  ;;
-
-bsdi[[45]]*)
-  lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (shared object|dynamic lib)'
-  lt_cv_file_magic_cmd='/usr/bin/file -L'
-  lt_cv_file_magic_test_file=/shlib/libc.so
-  ;;
-
-cygwin*)
-  # func_win32_libid is a shell function defined in ltmain.sh
-  lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL'
-  lt_cv_file_magic_cmd='func_win32_libid'
-  ;;
-
-mingw* | pw32*)
-  # Base MSYS/MinGW do not provide the 'file' command needed by
-  # func_win32_libid shell function, so use a weaker test based on 'objdump',
-  # unless we find 'file', for example because we are cross-compiling.
-  if ( file / ) >/dev/null 2>&1; then
-    lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL'
-    lt_cv_file_magic_cmd='func_win32_libid'
-  else
-    lt_cv_deplibs_check_method='file_magic file format pei*-i386(.*architecture: i386)?'
-    lt_cv_file_magic_cmd='$OBJDUMP -f'
-  fi
-  ;;
-
-cegcc)
-  # use the weaker test based on 'objdump'. See mingw*.
-  lt_cv_deplibs_check_method='file_magic file format pe-arm-.*little(.*architecture: arm)?'
-  lt_cv_file_magic_cmd='$OBJDUMP -f'
-  ;;
-
-darwin* | rhapsody*)
-  lt_cv_deplibs_check_method=pass_all
-  ;;
-
-freebsd* | dragonfly*)
-  if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then
-    case $host_cpu in
-    i*86 )
-      # Not sure whether the presence of OpenBSD here was a mistake.
-      # Let's accept both of them until this is cleared up.
-      lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD|DragonFly)/i[[3-9]]86 (compact )?demand paged shared library'
-      lt_cv_file_magic_cmd=/usr/bin/file
-      lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*`
-      ;;
-    esac
-  else
-    lt_cv_deplibs_check_method=pass_all
-  fi
-  ;;
-
-gnu*)
-  lt_cv_deplibs_check_method=pass_all
-  ;;
-
-hpux10.20* | hpux11*)
-  lt_cv_file_magic_cmd=/usr/bin/file
-  case $host_cpu in
-  ia64*)
-    lt_cv_deplibs_check_method='file_magic (s[[0-9]][[0-9]][[0-9]]|ELF-[[0-9]][[0-9]]) shared object file - IA64'
-    lt_cv_file_magic_test_file=/usr/lib/hpux32/libc.so
-    ;;
-  hppa*64*)
-    [lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF-[0-9][0-9]) shared object file - PA-RISC [0-9].[0-9]']
-    lt_cv_file_magic_test_file=/usr/lib/pa20_64/libc.sl
-    ;;
-  *)
-    lt_cv_deplibs_check_method='file_magic (s[[0-9]][[0-9]][[0-9]]|PA-RISC[[0-9]].[[0-9]]) shared library'
-    lt_cv_file_magic_test_file=/usr/lib/libc.sl
-    ;;
-  esac
-  ;;
-
-interix[[3-9]]*)
-  # PIC code is broken on Interix 3.x, that's why |\.a not |_pic\.a here
-  lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so|\.a)$'
-  ;;
-
-irix5* | irix6* | nonstopux*)
-  case $LD in
-  *-32|*"-32 ") libmagic=32-bit;;
-  *-n32|*"-n32 ") libmagic=N32;;
-  *-64|*"-64 ") libmagic=64-bit;;
-  *) libmagic=never-match;;
-  esac
-  lt_cv_deplibs_check_method=pass_all
-  ;;
-
-# This must be Linux ELF.
-linux* | k*bsd*-gnu)
-  lt_cv_deplibs_check_method=pass_all
-  ;;
-
-netbsd*)
-  if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then
-    lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|_pic\.a)$'
-  else
-    lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so|_pic\.a)$'
-  fi
-  ;;
-
-newos6*)
-  lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (executable|dynamic lib)'
-  lt_cv_file_magic_cmd=/usr/bin/file
-  lt_cv_file_magic_test_file=/usr/lib/libnls.so
-  ;;
-
-*nto* | *qnx*)
-  lt_cv_deplibs_check_method=pass_all
-  ;;
-
-openbsd*)
-  if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
-    lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|\.so|_pic\.a)$'
-  else
-    lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|_pic\.a)$'
-  fi
-  ;;
-
-osf3* | osf4* | osf5*)
-  lt_cv_deplibs_check_method=pass_all
-  ;;
-
-rdos*)
-  lt_cv_deplibs_check_method=pass_all
-  ;;
-
-solaris*)
-  lt_cv_deplibs_check_method=pass_all
-  ;;
-
-sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*)
-  lt_cv_deplibs_check_method=pass_all
-  ;;
-
-sysv4 | sysv4.3*)
-  case $host_vendor in
-  motorola)
-    lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (shared object|dynamic lib) M[[0-9]][[0-9]]* Version [[0-9]]'
-    lt_cv_file_magic_test_file=`echo /usr/lib/libc.so*`
-    ;;
-  ncr)
-    lt_cv_deplibs_check_method=pass_all
-    ;;
-  sequent)
-    lt_cv_file_magic_cmd='/bin/file'
-    lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB (shared object|dynamic lib )'
-    ;;
-  sni)
-    lt_cv_file_magic_cmd='/bin/file'
-    lt_cv_deplibs_check_method="file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB dynamic lib"
-    lt_cv_file_magic_test_file=/lib/libc.so
-    ;;
-  siemens)
-    lt_cv_deplibs_check_method=pass_all
-    ;;
-  pc)
-    lt_cv_deplibs_check_method=pass_all
-    ;;
-  esac
-  ;;
-
-tpf*)
-  lt_cv_deplibs_check_method=pass_all
-  ;;
-esac
-])
-file_magic_cmd=$lt_cv_file_magic_cmd
-deplibs_check_method=$lt_cv_deplibs_check_method
-test -z "$deplibs_check_method" && deplibs_check_method=unknown
-
-_LT_DECL([], [deplibs_check_method], [1],
-    [Method to check whether dependent libraries are shared objects])
-_LT_DECL([], [file_magic_cmd], [1],
-    [Command to use when deplibs_check_method == "file_magic"])
-])# _LT_CHECK_MAGIC_METHOD
-
-
-# LT_PATH_NM
-# ----------
-# find the pathname to a BSD- or MS-compatible name lister
-AC_DEFUN([LT_PATH_NM],
-[AC_REQUIRE([AC_PROG_CC])dnl
-AC_CACHE_CHECK([for BSD- or MS-compatible name lister (nm)], lt_cv_path_NM,
-[if test -n "$NM"; then
-  # Let the user override the test.
-  lt_cv_path_NM="$NM"
-else
-  lt_nm_to_check="${ac_tool_prefix}nm"
-  if test -n "$ac_tool_prefix" && test "$build" = "$host"; then
-    lt_nm_to_check="$lt_nm_to_check nm"
-  fi
-  for lt_tmp_nm in $lt_nm_to_check; do
-    lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
-    for ac_dir in $PATH /usr/ccs/bin/elf /usr/ccs/bin /usr/ucb /bin; do
-      IFS="$lt_save_ifs"
-      test -z "$ac_dir" && ac_dir=.
-      tmp_nm="$ac_dir/$lt_tmp_nm"
-      if test -f "$tmp_nm" || test -f "$tmp_nm$ac_exeext" ; then
-	# Check to see if the nm accepts a BSD-compat flag.
-	# Adding the `sed 1q' prevents false positives on HP-UX, which says:
-	#   nm: unknown option "B" ignored
-	# Tru64's nm complains that /dev/null is an invalid object file
-	case `"$tmp_nm" -B /dev/null 2>&1 | sed '1q'` in
-	*/dev/null* | *'Invalid file or object type'*)
-	  lt_cv_path_NM="$tmp_nm -B"
-	  break
-	  ;;
-	*)
-	  case `"$tmp_nm" -p /dev/null 2>&1 | sed '1q'` in
-	  */dev/null*)
-	    lt_cv_path_NM="$tmp_nm -p"
-	    break
-	    ;;
-	  *)
-	    lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but
-	    continue # so that we can try to find one that supports BSD flags
-	    ;;
-	  esac
-	  ;;
-	esac
-      fi
-    done
-    IFS="$lt_save_ifs"
-  done
-  : ${lt_cv_path_NM=no}
-fi])
-if test "$lt_cv_path_NM" != "no"; then
-  NM="$lt_cv_path_NM"
-else
-  # Didn't find any BSD compatible name lister, look for dumpbin.
-  AC_CHECK_TOOLS(DUMPBIN, ["dumpbin -symbols" "link -dump -symbols"], :)
-  AC_SUBST([DUMPBIN])
-  if test "$DUMPBIN" != ":"; then
-    NM="$DUMPBIN"
-  fi
-fi
-test -z "$NM" && NM=nm
-AC_SUBST([NM])
-_LT_DECL([], [NM], [1], [A BSD- or MS-compatible name lister])dnl
-
-AC_CACHE_CHECK([the name lister ($NM) interface], [lt_cv_nm_interface],
-  [lt_cv_nm_interface="BSD nm"
-  echo "int some_variable = 0;" > conftest.$ac_ext
-  (eval echo "\"\$as_me:__oline__: $ac_compile\"" >&AS_MESSAGE_LOG_FD)
-  (eval "$ac_compile" 2>conftest.err)
-  cat conftest.err >&AS_MESSAGE_LOG_FD
-  (eval echo "\"\$as_me:__oline__: $NM \\\"conftest.$ac_objext\\\"\"" >&AS_MESSAGE_LOG_FD)
-  (eval "$NM \"conftest.$ac_objext\"" 2>conftest.err > conftest.out)
-  cat conftest.err >&AS_MESSAGE_LOG_FD
-  (eval echo "\"\$as_me:__oline__: output\"" >&AS_MESSAGE_LOG_FD)
-  cat conftest.out >&AS_MESSAGE_LOG_FD
-  if $GREP 'External.*some_variable' conftest.out > /dev/null; then
-    lt_cv_nm_interface="MS dumpbin"
-  fi
-  rm -f conftest*])
-])# LT_PATH_NM
-
-# Old names:
-AU_ALIAS([AM_PROG_NM], [LT_PATH_NM])
-AU_ALIAS([AC_PROG_NM], [LT_PATH_NM])
-dnl aclocal-1.4 backwards compatibility:
-dnl AC_DEFUN([AM_PROG_NM], [])
-dnl AC_DEFUN([AC_PROG_NM], [])
-
-
-# LT_LIB_M
-# --------
-# check for math library
-AC_DEFUN([LT_LIB_M],
-[AC_REQUIRE([AC_CANONICAL_HOST])dnl
-LIBM=
-case $host in
-*-*-beos* | *-*-cygwin* | *-*-pw32* | *-*-darwin*)
-  # These system don't have libm, or don't need it
-  ;;
-*-ncr-sysv4.3*)
-  AC_CHECK_LIB(mw, _mwvalidcheckl, LIBM="-lmw")
-  AC_CHECK_LIB(m, cos, LIBM="$LIBM -lm")
-  ;;
-*)
-  AC_CHECK_LIB(m, cos, LIBM="-lm")
-  ;;
-esac
-AC_SUBST([LIBM])
-])# LT_LIB_M
-
-# Old name:
-AU_ALIAS([AC_CHECK_LIBM], [LT_LIB_M])
-dnl aclocal-1.4 backwards compatibility:
-dnl AC_DEFUN([AC_CHECK_LIBM], [])
-
-
-# _LT_COMPILER_NO_RTTI([TAGNAME])
-# -------------------------------
-m4_defun([_LT_COMPILER_NO_RTTI],
-[m4_require([_LT_TAG_COMPILER])dnl
-
-_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=
-
-if test "$GCC" = yes; then
-  _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -fno-builtin'
-
-  _LT_COMPILER_OPTION([if $compiler supports -fno-rtti -fno-exceptions],
-    lt_cv_prog_compiler_rtti_exceptions,
-    [-fno-rtti -fno-exceptions], [],
-    [_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)="$_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1) -fno-rtti -fno-exceptions"])
-fi
-_LT_TAGDECL([no_builtin_flag], [lt_prog_compiler_no_builtin_flag], [1],
-	[Compiler flag to turn off builtin functions])
-])# _LT_COMPILER_NO_RTTI
-
-
-# _LT_CMD_GLOBAL_SYMBOLS
-# ----------------------
-m4_defun([_LT_CMD_GLOBAL_SYMBOLS],
-[AC_REQUIRE([AC_CANONICAL_HOST])dnl
-AC_REQUIRE([AC_PROG_CC])dnl
-AC_REQUIRE([LT_PATH_NM])dnl
-AC_REQUIRE([LT_PATH_LD])dnl
-m4_require([_LT_DECL_SED])dnl
-m4_require([_LT_DECL_EGREP])dnl
-m4_require([_LT_TAG_COMPILER])dnl
-
-# Check for command to grab the raw symbol name followed by C symbol from nm.
-AC_MSG_CHECKING([command to parse $NM output from $compiler object])
-AC_CACHE_VAL([lt_cv_sys_global_symbol_pipe],
-[
-# These are sane defaults that work on at least a few old systems.
-# [They come from Ultrix.  What could be older than Ultrix?!! ;)]
-
-# Character class describing NM global symbol codes.
-symcode='[[BCDEGRST]]'
-
-# Regexp to match symbols that can be accessed directly from C.
-sympat='\([[_A-Za-z]][[_A-Za-z0-9]]*\)'
-
-# Define system-specific variables.
-case $host_os in
-aix*)
-  symcode='[[BCDT]]'
-  ;;
-cygwin* | mingw* | pw32* | cegcc*)
-  symcode='[[ABCDGISTW]]'
-  ;;
-hpux*)
-  if test "$host_cpu" = ia64; then
-    symcode='[[ABCDEGRST]]'
-  fi
-  ;;
-irix* | nonstopux*)
-  symcode='[[BCDEGRST]]'
-  ;;
-osf*)
-  symcode='[[BCDEGQRST]]'
-  ;;
-solaris*)
-  symcode='[[BDRT]]'
-  ;;
-sco3.2v5*)
-  symcode='[[DT]]'
-  ;;
-sysv4.2uw2*)
-  symcode='[[DT]]'
-  ;;
-sysv5* | sco5v6* | unixware* | OpenUNIX*)
-  symcode='[[ABDT]]'
-  ;;
-sysv4)
-  symcode='[[DFNSTU]]'
-  ;;
-esac
-
-# If we're using GNU nm, then use its standard symbol codes.
-case `$NM -V 2>&1` in
-*GNU* | *'with BFD'*)
-  symcode='[[ABCDGIRSTW]]' ;;
-esac
-
-# Transform an extracted symbol line into a proper C declaration.
-# Some systems (esp. on ia64) link data and code symbols differently,
-# so use this general approach.
-lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern int \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'"
-
-# Transform an extracted symbol line into symbol name and symbol address
-lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([[^ ]]*\) $/  {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([[^ ]]*\) \([[^ ]]*\)$/  {\"\2\", (void *) \&\2},/p'"
-lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="sed -n -e 's/^: \([[^ ]]*\) $/  {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([[^ ]]*\) \(lib[[^ ]]*\)$/  {\"\2\", (void *) \&\2},/p' -e 's/^$symcode* \([[^ ]]*\) \([[^ ]]*\)$/  {\"lib\2\", (void *) \&\2},/p'"
-
-# Handle CRLF in mingw tool chain
-opt_cr=
-case $build_os in
-mingw*)
-  opt_cr=`$ECHO 'x\{0,1\}' | tr x '\015'` # option cr in regexp
-  ;;
-esac
-
-# Try without a prefix underscore, then with it.
-for ac_symprfx in "" "_"; do
-
-  # Transform symcode, sympat, and symprfx into a raw symbol and a C symbol.
-  symxfrm="\\1 $ac_symprfx\\2 \\2"
-
-  # Write the raw and C identifiers.
-  if test "$lt_cv_nm_interface" = "MS dumpbin"; then
-    # Fake it for dumpbin and say T for any non-static function
-    # and D for any global variable.
-    # Also find C++ and __fastcall symbols from MSVC++,
-    # which start with @ or ?.
-    lt_cv_sys_global_symbol_pipe="$AWK ['"\
-"     {last_section=section; section=\$ 3};"\
-"     /Section length .*#relocs.*(pick any)/{hide[last_section]=1};"\
-"     \$ 0!~/External *\|/{next};"\
-"     / 0+ UNDEF /{next}; / UNDEF \([^|]\)*()/{next};"\
-"     {if(hide[section]) next};"\
-"     {f=0}; \$ 0~/\(\).*\|/{f=1}; {printf f ? \"T \" : \"D \"};"\
-"     {split(\$ 0, a, /\||\r/); split(a[2], s)};"\
-"     s[1]~/^[@?]/{print s[1], s[1]; next};"\
-"     s[1]~prfx {split(s[1],t,\"@\"); print t[1], substr(t[1],length(prfx))}"\
-"     ' prfx=^$ac_symprfx]"
-  else
-    lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[[	 ]]\($symcode$symcode*\)[[	 ]][[	 ]]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'"
-  fi
-
-  # Check to see that the pipe works correctly.
-  pipe_works=no
-
-  rm -f conftest*
-  cat > conftest.$ac_ext <<_LT_EOF
-#ifdef __cplusplus
-extern "C" {
-#endif
-char nm_test_var;
-void nm_test_func(void);
-void nm_test_func(void){}
-#ifdef __cplusplus
-}
-#endif
-int main(){nm_test_var='a';nm_test_func();return(0);}
-_LT_EOF
-
-  if AC_TRY_EVAL(ac_compile); then
-    # Now try to grab the symbols.
-    nlist=conftest.nm
-    if AC_TRY_EVAL(NM conftest.$ac_objext \| $lt_cv_sys_global_symbol_pipe \> $nlist) && test -s "$nlist"; then
-      # Try sorting and uniquifying the output.
-      if sort "$nlist" | uniq > "$nlist"T; then
-	mv -f "$nlist"T "$nlist"
-      else
-	rm -f "$nlist"T
-      fi
-
-      # Make sure that we snagged all the symbols we need.
-      if $GREP ' nm_test_var$' "$nlist" >/dev/null; then
-	if $GREP ' nm_test_func$' "$nlist" >/dev/null; then
-	  cat <<_LT_EOF > conftest.$ac_ext
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-_LT_EOF
-	  # Now generate the symbol file.
-	  eval "$lt_cv_sys_global_symbol_to_cdecl"' < "$nlist" | $GREP -v main >> conftest.$ac_ext'
-
-	  cat <<_LT_EOF >> conftest.$ac_ext
-
-/* The mapping between symbol names and symbols.  */
-const struct {
-  const char *name;
-  void       *address;
-}
-lt__PROGRAM__LTX_preloaded_symbols[[]] =
-{
-  { "@PROGRAM@", (void *) 0 },
-_LT_EOF
-	  $SED "s/^$symcode$symcode* \(.*\) \(.*\)$/  {\"\2\", (void *) \&\2},/" < "$nlist" | $GREP -v main >> conftest.$ac_ext
-	  cat <<\_LT_EOF >> conftest.$ac_ext
-  {0, (void *) 0}
-};
-
-/* This works around a problem in FreeBSD linker */
-#ifdef FREEBSD_WORKAROUND
-static const void *lt_preloaded_setup() {
-  return lt__PROGRAM__LTX_preloaded_symbols;
-}
-#endif
-
-#ifdef __cplusplus
-}
-#endif
-_LT_EOF
-	  # Now try linking the two files.
-	  mv conftest.$ac_objext conftstm.$ac_objext
-	  lt_save_LIBS="$LIBS"
-	  lt_save_CFLAGS="$CFLAGS"
-	  LIBS="conftstm.$ac_objext"
-	  CFLAGS="$CFLAGS$_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)"
-	  if AC_TRY_EVAL(ac_link) && test -s conftest${ac_exeext}; then
-	    pipe_works=yes
-	  fi
-	  LIBS="$lt_save_LIBS"
-	  CFLAGS="$lt_save_CFLAGS"
-	else
-	  echo "cannot find nm_test_func in $nlist" >&AS_MESSAGE_LOG_FD
-	fi
-      else
-	echo "cannot find nm_test_var in $nlist" >&AS_MESSAGE_LOG_FD
-      fi
-    else
-      echo "cannot run $lt_cv_sys_global_symbol_pipe" >&AS_MESSAGE_LOG_FD
-    fi
-  else
-    echo "$progname: failed program was:" >&AS_MESSAGE_LOG_FD
-    cat conftest.$ac_ext >&5
-  fi
-  rm -rf conftest* conftst*
-
-  # Do not use the global_symbol_pipe unless it works.
-  if test "$pipe_works" = yes; then
-    break
-  else
-    lt_cv_sys_global_symbol_pipe=
-  fi
-done
-])
-if test -z "$lt_cv_sys_global_symbol_pipe"; then
-  lt_cv_sys_global_symbol_to_cdecl=
-fi
-if test -z "$lt_cv_sys_global_symbol_pipe$lt_cv_sys_global_symbol_to_cdecl"; then
-  AC_MSG_RESULT(failed)
-else
-  AC_MSG_RESULT(ok)
-fi
-
-_LT_DECL([global_symbol_pipe], [lt_cv_sys_global_symbol_pipe], [1],
-    [Take the output of nm and produce a listing of raw symbols and C names])
-_LT_DECL([global_symbol_to_cdecl], [lt_cv_sys_global_symbol_to_cdecl], [1],
-    [Transform the output of nm in a proper C declaration])
-_LT_DECL([global_symbol_to_c_name_address],
-    [lt_cv_sys_global_symbol_to_c_name_address], [1],
-    [Transform the output of nm in a C name address pair])
-_LT_DECL([global_symbol_to_c_name_address_lib_prefix],
-    [lt_cv_sys_global_symbol_to_c_name_address_lib_prefix], [1],
-    [Transform the output of nm in a C name address pair when lib prefix is needed])
-]) # _LT_CMD_GLOBAL_SYMBOLS
-
-
-# _LT_COMPILER_PIC([TAGNAME])
-# ---------------------------
-m4_defun([_LT_COMPILER_PIC],
-[m4_require([_LT_TAG_COMPILER])dnl
-_LT_TAGVAR(lt_prog_compiler_wl, $1)=
-_LT_TAGVAR(lt_prog_compiler_pic, $1)=
-_LT_TAGVAR(lt_prog_compiler_static, $1)=
-
-AC_MSG_CHECKING([for $compiler option to produce PIC])
-m4_if([$1], [CXX], [
-  # C++ specific cases for pic, static, wl, etc.
-  if test "$GXX" = yes; then
-    _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
-    _LT_TAGVAR(lt_prog_compiler_static, $1)='-static'
-
-    case $host_os in
-    aix*)
-      # All AIX code is PIC.
-      if test "$host_cpu" = ia64; then
-	# AIX 5 now supports IA64 processor
-	_LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
-      fi
-      ;;
-
-    amigaos*)
-      case $host_cpu in
-      powerpc)
-            # see comment about AmigaOS4 .so support
-            _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
-        ;;
-      m68k)
-            # FIXME: we need at least 68020 code to build shared libraries, but
-            # adding the `-m68020' flag to GCC prevents building anything better,
-            # like `-m68040'.
-            _LT_TAGVAR(lt_prog_compiler_pic, $1)='-m68020 -resident32 -malways-restore-a4'
-        ;;
-      esac
-      ;;
-
-    beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*)
-      # PIC is the default for these OSes.
-      ;;
-    mingw* | cygwin* | os2* | pw32* | cegcc*)
-      # This hack is so that the source file can tell whether it is being
-      # built for inclusion in a dll (and should export symbols for example).
-      # Although the cygwin gcc ignores -fPIC, still need this for old-style
-      # (--disable-auto-import) libraries
-      m4_if([$1], [GCJ], [],
-	[_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT'])
-      ;;
-    darwin* | rhapsody*)
-      # PIC is the default on this platform
-      # Common symbols not allowed in MH_DYLIB files
-      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common'
-      ;;
-    *djgpp*)
-      # DJGPP does not support shared libraries at all
-      _LT_TAGVAR(lt_prog_compiler_pic, $1)=
-      ;;
-    interix[[3-9]]*)
-      # Interix 3.x gcc -fpic/-fPIC options generate broken code.
-      # Instead, we relocate shared libraries at runtime.
-      ;;
-    sysv4*MP*)
-      if test -d /usr/nec; then
-	_LT_TAGVAR(lt_prog_compiler_pic, $1)=-Kconform_pic
-      fi
-      ;;
-    hpux*)
-      # PIC is the default for 64-bit PA HP-UX, but not for 32-bit
-      # PA HP-UX.  On IA64 HP-UX, PIC is the default but the pic flag
-      # sets the default TLS model and affects inlining.
-      case $host_cpu in
-      hppa*64*)
-	;;
-      *)
-	_LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
-	;;
-      esac
-      ;;
-    *qnx* | *nto*)
-      # QNX uses GNU C++, but need to define -shared option too, otherwise
-      # it will coredump.
-      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared'
-      ;;
-    *)
-      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
-      ;;
-    esac
-  else
-    case $host_os in
-      aix[[4-9]]*)
-	# All AIX code is PIC.
-	if test "$host_cpu" = ia64; then
-	  # AIX 5 now supports IA64 processor
-	  _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
-	else
-	  _LT_TAGVAR(lt_prog_compiler_static, $1)='-bnso -bI:/lib/syscalls.exp'
-	fi
-	;;
-      chorus*)
-	case $cc_basename in
-	cxch68*)
-	  # Green Hills C++ Compiler
-	  # _LT_TAGVAR(lt_prog_compiler_static, $1)="--no_auto_instantiation -u __main -u __premain -u _abort -r $COOL_DIR/lib/libOrb.a $MVME_DIR/lib/CC/libC.a $MVME_DIR/lib/classix/libcx.s.a"
-	  ;;
-	esac
-	;;
-      dgux*)
-	case $cc_basename in
-	  ec++*)
-	    _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
-	    ;;
-	  ghcx*)
-	    # Green Hills C++ Compiler
-	    _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic'
-	    ;;
-	  *)
-	    ;;
-	esac
-	;;
-      freebsd* | dragonfly*)
-	# FreeBSD uses GNU C++
-	;;
-      hpux9* | hpux10* | hpux11*)
-	case $cc_basename in
-	  CC*)
-	    _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
-	    _LT_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive'
-	    if test "$host_cpu" != ia64; then
-	      _LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z'
-	    fi
-	    ;;
-	  aCC*)
-	    _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
-	    _LT_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive'
-	    case $host_cpu in
-	    hppa*64*|ia64*)
-	      # +Z the default
-	      ;;
-	    *)
-	      _LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z'
-	      ;;
-	    esac
-	    ;;
-	  *)
-	    ;;
-	esac
-	;;
-      interix*)
-	# This is c89, which is MS Visual C++ (no shared libs)
-	# Anyone wants to do a port?
-	;;
-      irix5* | irix6* | nonstopux*)
-	case $cc_basename in
-	  CC*)
-	    _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
-	    _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
-	    # CC pic flag -KPIC is the default.
-	    ;;
-	  *)
-	    ;;
-	esac
-	;;
-      linux* | k*bsd*-gnu)
-	case $cc_basename in
-	  KCC*)
-	    # KAI C++ Compiler
-	    _LT_TAGVAR(lt_prog_compiler_wl, $1)='--backend -Wl,'
-	    _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
-	    ;;
-	  ecpc* )
-	    # old Intel C++ for x86_64 which still supported -KPIC.
-	    _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
-	    _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
-	    _LT_TAGVAR(lt_prog_compiler_static, $1)='-static'
-	    ;;
-	  icpc* )
-	    # Intel C++, used to be incompatible with GCC.
-	    # ICC 10 doesn't accept -KPIC any more.
-	    _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
-	    _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
-	    _LT_TAGVAR(lt_prog_compiler_static, $1)='-static'
-	    ;;
-	  pgCC* | pgcpp*)
-	    # Portland Group C++ compiler
-	    _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
-	    _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fpic'
-	    _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
-	    ;;
-	  cxx*)
-	    # Compaq C++
-	    # Make sure the PIC flag is empty.  It appears that all Alpha
-	    # Linux and Compaq Tru64 Unix objects are PIC.
-	    _LT_TAGVAR(lt_prog_compiler_pic, $1)=
-	    _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
-	    ;;
-	  xlc* | xlC*)
-	    # IBM XL 8.0 on PPC
-	    _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
-	    _LT_TAGVAR(lt_prog_compiler_pic, $1)='-qpic'
-	    _LT_TAGVAR(lt_prog_compiler_static, $1)='-qstaticlink'
-	    ;;
-	  *)
-	    case `$CC -V 2>&1 | sed 5q` in
-	    *Sun\ C*)
-	      # Sun C++ 5.9
-	      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
-	      _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
-	      _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld '
-	      ;;
-	    esac
-	    ;;
-	esac
-	;;
-      lynxos*)
-	;;
-      m88k*)
-	;;
-      mvs*)
-	case $cc_basename in
-	  cxx*)
-	    _LT_TAGVAR(lt_prog_compiler_pic, $1)='-W c,exportall'
-	    ;;
-	  *)
-	    ;;
-	esac
-	;;
-      netbsd*)
-	;;
-      *qnx* | *nto*)
-        # QNX uses GNU C++, but need to define -shared option too, otherwise
-        # it will coredump.
-        _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared'
-        ;;
-      osf3* | osf4* | osf5*)
-	case $cc_basename in
-	  KCC*)
-	    _LT_TAGVAR(lt_prog_compiler_wl, $1)='--backend -Wl,'
-	    ;;
-	  RCC*)
-	    # Rational C++ 2.4.1
-	    _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic'
-	    ;;
-	  cxx*)
-	    # Digital/Compaq C++
-	    _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
-	    # Make sure the PIC flag is empty.  It appears that all Alpha
-	    # Linux and Compaq Tru64 Unix objects are PIC.
-	    _LT_TAGVAR(lt_prog_compiler_pic, $1)=
-	    _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
-	    ;;
-	  *)
-	    ;;
-	esac
-	;;
-      psos*)
-	;;
-      solaris*)
-	case $cc_basename in
-	  CC*)
-	    # Sun C++ 4.2, 5.x and Centerline C++
-	    _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
-	    _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
-	    _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld '
-	    ;;
-	  gcx*)
-	    # Green Hills C++ Compiler
-	    _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC'
-	    ;;
-	  *)
-	    ;;
-	esac
-	;;
-      sunos4*)
-	case $cc_basename in
-	  CC*)
-	    # Sun C++ 4.x
-	    _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic'
-	    _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
-	    ;;
-	  lcc*)
-	    # Lucid
-	    _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic'
-	    ;;
-	  *)
-	    ;;
-	esac
-	;;
-      sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*)
-	case $cc_basename in
-	  CC*)
-	    _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
-	    _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
-	    _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
-	    ;;
-	esac
-	;;
-      tandem*)
-	case $cc_basename in
-	  NCC*)
-	    # NonStop-UX NCC 3.20
-	    _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
-	    ;;
-	  *)
-	    ;;
-	esac
-	;;
-      vxworks*)
-	;;
-      *)
-	_LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no
-	;;
-    esac
-  fi
-],
-[
-  if test "$GCC" = yes; then
-    _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
-    _LT_TAGVAR(lt_prog_compiler_static, $1)='-static'
-
-    case $host_os in
-      aix*)
-      # All AIX code is PIC.
-      if test "$host_cpu" = ia64; then
-	# AIX 5 now supports IA64 processor
-	_LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
-      fi
-      ;;
-
-    amigaos*)
-      case $host_cpu in
-      powerpc)
-            # see comment about AmigaOS4 .so support
-            _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
-        ;;
-      m68k)
-            # FIXME: we need at least 68020 code to build shared libraries, but
-            # adding the `-m68020' flag to GCC prevents building anything better,
-            # like `-m68040'.
-            _LT_TAGVAR(lt_prog_compiler_pic, $1)='-m68020 -resident32 -malways-restore-a4'
-        ;;
-      esac
-      ;;
-
-    beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*)
-      # PIC is the default for these OSes.
-      ;;
-
-    mingw* | cygwin* | pw32* | os2* | cegcc*)
-      # This hack is so that the source file can tell whether it is being
-      # built for inclusion in a dll (and should export symbols for example).
-      # Although the cygwin gcc ignores -fPIC, still need this for old-style
-      # (--disable-auto-import) libraries
-      m4_if([$1], [GCJ], [],
-	[_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT'])
-      ;;
-
-    darwin* | rhapsody*)
-      # PIC is the default on this platform
-      # Common symbols not allowed in MH_DYLIB files
-      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common'
-      ;;
-
-    hpux*)
-      # PIC is the default for 64-bit PA HP-UX, but not for 32-bit
-      # PA HP-UX.  On IA64 HP-UX, PIC is the default but the pic flag
-      # sets the default TLS model and affects inlining.
-      case $host_cpu in
-      hppa*64*)
-	# +Z the default
-	;;
-      *)
-	_LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
-	;;
-      esac
-      ;;
-
-    interix[[3-9]]*)
-      # Interix 3.x gcc -fpic/-fPIC options generate broken code.
-      # Instead, we relocate shared libraries at runtime.
-      ;;
-
-    msdosdjgpp*)
-      # Just because we use GCC doesn't mean we suddenly get shared libraries
-      # on systems that don't support them.
-      _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no
-      enable_shared=no
-      ;;
-
-    *nto* | *qnx*)
-      # QNX uses GNU C++, but need to define -shared option too, otherwise
-      # it will coredump.
-      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared'
-      ;;
-
-    sysv4*MP*)
-      if test -d /usr/nec; then
-	_LT_TAGVAR(lt_prog_compiler_pic, $1)=-Kconform_pic
-      fi
-      ;;
-
-    *)
-      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
-      ;;
-    esac
-  else
-    # PORTME Check for flag to pass linker flags through the system compiler.
-    case $host_os in
-    aix*)
-      _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
-      if test "$host_cpu" = ia64; then
-	# AIX 5 now supports IA64 processor
-	_LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
-      else
-	_LT_TAGVAR(lt_prog_compiler_static, $1)='-bnso -bI:/lib/syscalls.exp'
-      fi
-      ;;
-
-    mingw* | cygwin* | pw32* | os2* | cegcc*)
-      # This hack is so that the source file can tell whether it is being
-      # built for inclusion in a dll (and should export symbols for example).
-      m4_if([$1], [GCJ], [],
-	[_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT'])
-      ;;
-
-    hpux9* | hpux10* | hpux11*)
-      _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
-      # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but
-      # not for PA HP-UX.
-      case $host_cpu in
-      hppa*64*|ia64*)
-	# +Z the default
-	;;
-      *)
-	_LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z'
-	;;
-      esac
-      # Is there a better lt_prog_compiler_static that works with the bundled CC?
-      _LT_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive'
-      ;;
-
-    irix5* | irix6* | nonstopux*)
-      _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
-      # PIC (with -KPIC) is the default.
-      _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
-      ;;
-
-    linux* | k*bsd*-gnu)
-      case $cc_basename in
-      # old Intel for x86_64 which still supported -KPIC.
-      ecc*)
-	_LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
-	_LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
-	_LT_TAGVAR(lt_prog_compiler_static, $1)='-static'
-        ;;
-      # icc used to be incompatible with GCC.
-      # ICC 10 doesn't accept -KPIC any more.
-      icc* | ifort*)
-	_LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
-	_LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
-	_LT_TAGVAR(lt_prog_compiler_static, $1)='-static'
-        ;;
-      # Lahey Fortran 8.1.
-      lf95*)
-	_LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
-	_LT_TAGVAR(lt_prog_compiler_pic, $1)='--shared'
-	_LT_TAGVAR(lt_prog_compiler_static, $1)='--static'
-	;;
-      pgcc* | pgf77* | pgf90* | pgf95*)
-        # Portland Group compilers (*not* the Pentium gcc compiler,
-	# which looks to be a dead project)
-	_LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
-	_LT_TAGVAR(lt_prog_compiler_pic, $1)='-fpic'
-	_LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
-        ;;
-      ccc*)
-        _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
-        # All Alpha code is PIC.
-        _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
-        ;;
-      xl*)
-	# IBM XL C 8.0/Fortran 10.1 on PPC
-	_LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
-	_LT_TAGVAR(lt_prog_compiler_pic, $1)='-qpic'
-	_LT_TAGVAR(lt_prog_compiler_static, $1)='-qstaticlink'
-	;;
-      *)
-	case `$CC -V 2>&1 | sed 5q` in
-	*Sun\ C*)
-	  # Sun C 5.9
-	  _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
-	  _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
-	  _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
-	  ;;
-	*Sun\ F*)
-	  # Sun Fortran 8.3 passes all unrecognized flags to the linker
-	  _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
-	  _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
-	  _LT_TAGVAR(lt_prog_compiler_wl, $1)=''
-	  ;;
-	esac
-	;;
-      esac
-      ;;
-
-    newsos6)
-      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
-      _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
-      ;;
-
-    *nto* | *qnx*)
-      # QNX uses GNU C++, but need to define -shared option too, otherwise
-      # it will coredump.
-      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared'
-      ;;
-
-    osf3* | osf4* | osf5*)
-      _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
-      # All OSF/1 code is PIC.
-      _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
-      ;;
-
-    rdos*)
-      _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
-      ;;
-
-    solaris*)
-      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
-      _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
-      case $cc_basename in
-      f77* | f90* | f95*)
-	_LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ';;
-      *)
-	_LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,';;
-      esac
-      ;;
-
-    sunos4*)
-      _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld '
-      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC'
-      _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
-      ;;
-
-    sysv4 | sysv4.2uw2* | sysv4.3*)
-      _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
-      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
-      _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
-      ;;
-
-    sysv4*MP*)
-      if test -d /usr/nec ;then
-	_LT_TAGVAR(lt_prog_compiler_pic, $1)='-Kconform_pic'
-	_LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
-      fi
-      ;;
-
-    sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*)
-      _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
-      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
-      _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
-      ;;
-
-    unicos*)
-      _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
-      _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no
-      ;;
-
-    uts4*)
-      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic'
-      _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
-      ;;
-
-    *)
-      _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no
-      ;;
-    esac
-  fi
-])
-case $host_os in
-  # For platforms which do not support PIC, -DPIC is meaningless:
-  *djgpp*)
-    _LT_TAGVAR(lt_prog_compiler_pic, $1)=
-    ;;
-  *)
-    _LT_TAGVAR(lt_prog_compiler_pic, $1)="$_LT_TAGVAR(lt_prog_compiler_pic, $1)@&t at m4_if([$1],[],[ -DPIC],[m4_if([$1],[CXX],[ -DPIC],[])])"
-    ;;
-esac
-AC_MSG_RESULT([$_LT_TAGVAR(lt_prog_compiler_pic, $1)])
-_LT_TAGDECL([wl], [lt_prog_compiler_wl], [1],
-	[How to pass a linker flag through the compiler])
-
-#
-# Check to make sure the PIC flag actually works.
-#
-if test -n "$_LT_TAGVAR(lt_prog_compiler_pic, $1)"; then
-  _LT_COMPILER_OPTION([if $compiler PIC flag $_LT_TAGVAR(lt_prog_compiler_pic, $1) works],
-    [_LT_TAGVAR(lt_cv_prog_compiler_pic_works, $1)],
-    [$_LT_TAGVAR(lt_prog_compiler_pic, $1)@&t at m4_if([$1],[],[ -DPIC],[m4_if([$1],[CXX],[ -DPIC],[])])], [],
-    [case $_LT_TAGVAR(lt_prog_compiler_pic, $1) in
-     "" | " "*) ;;
-     *) _LT_TAGVAR(lt_prog_compiler_pic, $1)=" $_LT_TAGVAR(lt_prog_compiler_pic, $1)" ;;
-     esac],
-    [_LT_TAGVAR(lt_prog_compiler_pic, $1)=
-     _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no])
-fi
-_LT_TAGDECL([pic_flag], [lt_prog_compiler_pic], [1],
-	[Additional compiler flags for building library objects])
-
-#
-# Check to make sure the static flag actually works.
-#
-wl=$_LT_TAGVAR(lt_prog_compiler_wl, $1) eval lt_tmp_static_flag=\"$_LT_TAGVAR(lt_prog_compiler_static, $1)\"
-_LT_LINKER_OPTION([if $compiler static flag $lt_tmp_static_flag works],
-  _LT_TAGVAR(lt_cv_prog_compiler_static_works, $1),
-  $lt_tmp_static_flag,
-  [],
-  [_LT_TAGVAR(lt_prog_compiler_static, $1)=])
-_LT_TAGDECL([link_static_flag], [lt_prog_compiler_static], [1],
-	[Compiler flag to prevent dynamic linking])
-])# _LT_COMPILER_PIC
-
-
-# _LT_LINKER_SHLIBS([TAGNAME])
-# ----------------------------
-# See if the linker supports building shared libraries.
-m4_defun([_LT_LINKER_SHLIBS],
-[AC_REQUIRE([LT_PATH_LD])dnl
-AC_REQUIRE([LT_PATH_NM])dnl
-m4_require([_LT_FILEUTILS_DEFAULTS])dnl
-m4_require([_LT_DECL_EGREP])dnl
-m4_require([_LT_DECL_SED])dnl
-m4_require([_LT_CMD_GLOBAL_SYMBOLS])dnl
-m4_require([_LT_TAG_COMPILER])dnl
-AC_MSG_CHECKING([whether the $compiler linker ($LD) supports shared libraries])
-m4_if([$1], [CXX], [
-  _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols'
-  case $host_os in
-  aix[[4-9]]*)
-    # If we're using GNU nm, then we don't want the "-C" option.
-    # -C means demangle to AIX nm, but means don't demangle with GNU nm
-    if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then
-      _LT_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols'
-    else
-      _LT_TAGVAR(export_symbols_cmds, $1)='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols'
-    fi
-    ;;
-  pw32*)
-    _LT_TAGVAR(export_symbols_cmds, $1)="$ltdll_cmds"
-  ;;
-  cygwin* | mingw* | cegcc*)
-    _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1 DATA/;/^.*[[ ]]__nm__/s/^.*[[ ]]__nm__\([[^ ]]*\)[[ ]][[^ ]]*/\1 DATA/;/^I[[ ]]/d;/^[[AITW]][[ ]]/s/.* //'\'' | sort | uniq > $export_symbols'
-  ;;
-  *)
-    _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols'
-  ;;
-  esac
-  _LT_TAGVAR(exclude_expsyms, $1)=['_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*']
-], [
-  runpath_var=
-  _LT_TAGVAR(allow_undefined_flag, $1)=
-  _LT_TAGVAR(always_export_symbols, $1)=no
-  _LT_TAGVAR(archive_cmds, $1)=
-  _LT_TAGVAR(archive_expsym_cmds, $1)=
-  _LT_TAGVAR(compiler_needs_object, $1)=no
-  _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no
-  _LT_TAGVAR(export_dynamic_flag_spec, $1)=
-  _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols'
-  _LT_TAGVAR(hardcode_automatic, $1)=no
-  _LT_TAGVAR(hardcode_direct, $1)=no
-  _LT_TAGVAR(hardcode_direct_absolute, $1)=no
-  _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=
-  _LT_TAGVAR(hardcode_libdir_flag_spec_ld, $1)=
-  _LT_TAGVAR(hardcode_libdir_separator, $1)=
-  _LT_TAGVAR(hardcode_minus_L, $1)=no
-  _LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported
-  _LT_TAGVAR(inherit_rpath, $1)=no
-  _LT_TAGVAR(link_all_deplibs, $1)=unknown
-  _LT_TAGVAR(module_cmds, $1)=
-  _LT_TAGVAR(module_expsym_cmds, $1)=
-  _LT_TAGVAR(old_archive_from_new_cmds, $1)=
-  _LT_TAGVAR(old_archive_from_expsyms_cmds, $1)=
-  _LT_TAGVAR(thread_safe_flag_spec, $1)=
-  _LT_TAGVAR(whole_archive_flag_spec, $1)=
-  # include_expsyms should be a list of space-separated symbols to be *always*
-  # included in the symbol list
-  _LT_TAGVAR(include_expsyms, $1)=
-  # exclude_expsyms can be an extended regexp of symbols to exclude
-  # it will be wrapped by ` (' and `)$', so one must not match beginning or
-  # end of line.  Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc',
-  # as well as any symbol that contains `d'.
-  _LT_TAGVAR(exclude_expsyms, $1)=['_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*']
-  # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out
-  # platforms (ab)use it in PIC code, but their linkers get confused if
-  # the symbol is explicitly referenced.  Since portable code cannot
-  # rely on this symbol name, it's probably fine to never include it in
-  # preloaded symbol tables.
-  # Exclude shared library initialization/finalization symbols.
-dnl Note also adjust exclude_expsyms for C++ above.
-  extract_expsyms_cmds=
-
-  case $host_os in
-  cygwin* | mingw* | pw32* | cegcc*)
-    # FIXME: the MSVC++ port hasn't been tested in a loooong time
-    # When not using gcc, we currently assume that we are using
-    # Microsoft Visual C++.
-    if test "$GCC" != yes; then
-      with_gnu_ld=no
-    fi
-    ;;
-  interix*)
-    # we just hope/assume this is gcc and not c89 (= MSVC++)
-    with_gnu_ld=yes
-    ;;
-  openbsd*)
-    with_gnu_ld=no
-    ;;
-  esac
-
-  _LT_TAGVAR(ld_shlibs, $1)=yes
-  if test "$with_gnu_ld" = yes; then
-    # If archive_cmds runs LD, not CC, wlarc should be empty
-    wlarc='${wl}'
-
-    # Set some defaults for GNU ld with shared library support. These
-    # are reset later if shared libraries are not supported. Putting them
-    # here allows them to be overridden if necessary.
-    runpath_var=LD_RUN_PATH
-    _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
-    _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic'
-    # ancient GNU ld didn't support --whole-archive et. al.
-    if $LD --help 2>&1 | $GREP 'no-whole-archive' > /dev/null; then
-      _LT_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive'
-    else
-      _LT_TAGVAR(whole_archive_flag_spec, $1)=
-    fi
-    supports_anon_versioning=no
-    case `$LD -v 2>&1` in
-      *\ [[01]].* | *\ 2.[[0-9]].* | *\ 2.10.*) ;; # catch versions < 2.11
-      *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ...
-      *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ...
-      *\ 2.11.*) ;; # other 2.11 versions
-      *) supports_anon_versioning=yes ;;
-    esac
-
-    # See if GNU ld supports shared libraries.
-    case $host_os in
-    aix[[3-9]]*)
-      # On AIX/PPC, the GNU linker is very broken
-      if test "$host_cpu" != ia64; then
-	_LT_TAGVAR(ld_shlibs, $1)=no
-	cat <<_LT_EOF 1>&2
-
-*** Warning: the GNU linker, at least up to release 2.9.1, is reported
-*** to be unable to reliably create shared libraries on AIX.
-*** Therefore, libtool is disabling shared libraries support.  If you
-*** really care for shared libraries, you may want to modify your PATH
-*** so that a non-GNU linker is found, and then restart.
-
-_LT_EOF
-      fi
-      ;;
-
-    amigaos*)
-      case $host_cpu in
-      powerpc)
-            # see comment about AmigaOS4 .so support
-            _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
-            _LT_TAGVAR(archive_expsym_cmds, $1)=''
-        ;;
-      m68k)
-            _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)'
-            _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
-            _LT_TAGVAR(hardcode_minus_L, $1)=yes
-        ;;
-      esac
-      ;;
-
-    beos*)
-      if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
-	_LT_TAGVAR(allow_undefined_flag, $1)=unsupported
-	# Joseph Beckenbach <jrb3 at best.com> says some releases of gcc
-	# support --undefined.  This deserves some investigation.  FIXME
-	_LT_TAGVAR(archive_cmds, $1)='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
-      else
-	_LT_TAGVAR(ld_shlibs, $1)=no
-      fi
-      ;;
-
-    cygwin* | mingw* | pw32* | cegcc*)
-      # _LT_TAGVAR(hardcode_libdir_flag_spec, $1) is actually meaningless,
-      # as there is no search path for DLLs.
-      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
-      _LT_TAGVAR(allow_undefined_flag, $1)=unsupported
-      _LT_TAGVAR(always_export_symbols, $1)=no
-      _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes
-      _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1 DATA/'\'' | $SED -e '\''/^[[AITW]][[ ]]/s/.*[[ ]]//'\'' | sort | uniq > $export_symbols'
-
-      if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then
-        _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
-	# If the export-symbols file already is a .def file (1st line
-	# is EXPORTS), use it as is; otherwise, prepend...
-	_LT_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then
-	  cp $export_symbols $output_objdir/$soname.def;
-	else
-	  echo EXPORTS > $output_objdir/$soname.def;
-	  cat $export_symbols >> $output_objdir/$soname.def;
-	fi~
-	$CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
-      else
-	_LT_TAGVAR(ld_shlibs, $1)=no
-      fi
-      ;;
-
-    interix[[3-9]]*)
-      _LT_TAGVAR(hardcode_direct, $1)=no
-      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
-      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
-      _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
-      # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc.
-      # Instead, shared libraries are loaded at an image base (0x10000000 by
-      # default) and relocated if they conflict, which is a slow very memory
-      # consuming and fragmenting process.  To avoid this, we pick a random,
-      # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link
-      # time.  Moving up from 0x10000000 also allows more sbrk(2) space.
-      _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
-      _LT_TAGVAR(archive_expsym_cmds, $1)='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
-      ;;
-
-    gnu* | linux* | tpf* | k*bsd*-gnu)
-      tmp_diet=no
-      if test "$host_os" = linux-dietlibc; then
-	case $cc_basename in
-	  diet\ *) tmp_diet=yes;;	# linux-dietlibc with static linking (!diet-dyn)
-	esac
-      fi
-      if $LD --help 2>&1 | $EGREP ': supported targets:.* elf' > /dev/null \
-	 && test "$tmp_diet" = no
-      then
-	tmp_addflag=
-	tmp_sharedflag='-shared'
-	case $cc_basename,$host_cpu in
-        pgcc*)				# Portland Group C compiler
-	  _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test  -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive'
-	  tmp_addflag=' $pic_flag'
-	  ;;
-	pgf77* | pgf90* | pgf95*)	# Portland Group f77 and f90 compilers
-	  _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test  -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive'
-	  tmp_addflag=' $pic_flag -Mnomain' ;;
-	ecc*,ia64* | icc*,ia64*)	# Intel C compiler on ia64
-	  tmp_addflag=' -i_dynamic' ;;
-	efc*,ia64* | ifort*,ia64*)	# Intel Fortran compiler on ia64
-	  tmp_addflag=' -i_dynamic -nofor_main' ;;
-	ifc* | ifort*)			# Intel Fortran compiler
-	  tmp_addflag=' -nofor_main' ;;
-	lf95*)				# Lahey Fortran 8.1
-	  _LT_TAGVAR(whole_archive_flag_spec, $1)=
-	  tmp_sharedflag='--shared' ;;
-	xl[[cC]]*)			# IBM XL C 8.0 on PPC (deal with xlf below)
-	  tmp_sharedflag='-qmkshrobj'
-	  tmp_addflag= ;;
-	esac
-	case `$CC -V 2>&1 | sed 5q` in
-	*Sun\ C*)			# Sun C 5.9
-	  _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive'
-	  _LT_TAGVAR(compiler_needs_object, $1)=yes
-	  tmp_sharedflag='-G' ;;
-	*Sun\ F*)			# Sun Fortran 8.3
-	  tmp_sharedflag='-G' ;;
-	esac
-	_LT_TAGVAR(archive_cmds, $1)='$CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
-
-        if test "x$supports_anon_versioning" = xyes; then
-          _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~
-	    cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~
-	    echo "local: *; };" >> $output_objdir/$libname.ver~
-	    $CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib'
-        fi
-
-	case $cc_basename in
-	xlf*)
-	  # IBM XL Fortran 10.1 on PPC cannot create shared libs itself
-	  _LT_TAGVAR(whole_archive_flag_spec, $1)='--whole-archive$convenience --no-whole-archive'
-	  _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=
-	  _LT_TAGVAR(hardcode_libdir_flag_spec_ld, $1)='-rpath $libdir'
-	  _LT_TAGVAR(archive_cmds, $1)='$LD -shared $libobjs $deplibs $compiler_flags -soname $soname -o $lib'
-	  if test "x$supports_anon_versioning" = xyes; then
-	    _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~
-	      cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~
-	      echo "local: *; };" >> $output_objdir/$libname.ver~
-	      $LD -shared $libobjs $deplibs $compiler_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib'
-	  fi
-	  ;;
-	esac
-      else
-        _LT_TAGVAR(ld_shlibs, $1)=no
-      fi
-      ;;
-
-    netbsd*)
-      if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then
-	_LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib'
-	wlarc=
-      else
-	_LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
-	_LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
-      fi
-      ;;
-
-    solaris*)
-      if $LD -v 2>&1 | $GREP 'BFD 2\.8' > /dev/null; then
-	_LT_TAGVAR(ld_shlibs, $1)=no
-	cat <<_LT_EOF 1>&2
-
-*** Warning: The releases 2.8.* of the GNU linker cannot reliably
-*** create shared libraries on Solaris systems.  Therefore, libtool
-*** is disabling shared libraries support.  We urge you to upgrade GNU
-*** binutils to release 2.9.1 or newer.  Another option is to modify
-*** your PATH or compiler configuration so that the native linker is
-*** used, and then restart.
-
-_LT_EOF
-      elif $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
-	_LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
-	_LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
-      else
-	_LT_TAGVAR(ld_shlibs, $1)=no
-      fi
-      ;;
-
-    sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*)
-      case `$LD -v 2>&1` in
-        *\ [[01]].* | *\ 2.[[0-9]].* | *\ 2.1[[0-5]].*)
-	_LT_TAGVAR(ld_shlibs, $1)=no
-	cat <<_LT_EOF 1>&2
-
-*** Warning: Releases of the GNU linker prior to 2.16.91.0.3 can not
-*** reliably create shared libraries on SCO systems.  Therefore, libtool
-*** is disabling shared libraries support.  We urge you to upgrade GNU
-*** binutils to release 2.16.91.0.3 or newer.  Another option is to modify
-*** your PATH or compiler configuration so that the native linker is
-*** used, and then restart.
-
-_LT_EOF
-	;;
-	*)
-	  # For security reasons, it is highly recommended that you always
-	  # use absolute paths for naming shared libraries, and exclude the
-	  # DT_RUNPATH tag from executables and libraries.  But doing so
-	  # requires that you compile everything twice, which is a pain.
-	  if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
-	    _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
-	    _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
-	    _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
-	  else
-	    _LT_TAGVAR(ld_shlibs, $1)=no
-	  fi
-	;;
-      esac
-      ;;
-
-    sunos4*)
-      _LT_TAGVAR(archive_cmds, $1)='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags'
-      wlarc=
-      _LT_TAGVAR(hardcode_direct, $1)=yes
-      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
-      ;;
-
-    *)
-      if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
-	_LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
-	_LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
-      else
-	_LT_TAGVAR(ld_shlibs, $1)=no
-      fi
-      ;;
-    esac
-
-    if test "$_LT_TAGVAR(ld_shlibs, $1)" = no; then
-      runpath_var=
-      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=
-      _LT_TAGVAR(export_dynamic_flag_spec, $1)=
-      _LT_TAGVAR(whole_archive_flag_spec, $1)=
-    fi
-  else
-    # PORTME fill in a description of your system's linker (not GNU ld)
-    case $host_os in
-    aix3*)
-      _LT_TAGVAR(allow_undefined_flag, $1)=unsupported
-      _LT_TAGVAR(always_export_symbols, $1)=yes
-      _LT_TAGVAR(archive_expsym_cmds, $1)='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname'
-      # Note: this linker hardcodes the directories in LIBPATH if there
-      # are no directories specified by -L.
-      _LT_TAGVAR(hardcode_minus_L, $1)=yes
-      if test "$GCC" = yes && test -z "$lt_prog_compiler_static"; then
-	# Neither direct hardcoding nor static linking is supported with a
-	# broken collect2.
-	_LT_TAGVAR(hardcode_direct, $1)=unsupported
-      fi
-      ;;
-
-    aix[[4-9]]*)
-      if test "$host_cpu" = ia64; then
-	# On IA64, the linker does run time linking by default, so we don't
-	# have to do anything special.
-	aix_use_runtimelinking=no
-	exp_sym_flag='-Bexport'
-	no_entry_flag=""
-      else
-	# If we're using GNU nm, then we don't want the "-C" option.
-	# -C means demangle to AIX nm, but means don't demangle with GNU nm
-	if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then
-	  _LT_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols'
-	else
-	  _LT_TAGVAR(export_symbols_cmds, $1)='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols'
-	fi
-	aix_use_runtimelinking=no
-
-	# Test if we are trying to use run time linking or normal
-	# AIX style linking. If -brtl is somewhere in LDFLAGS, we
-	# need to do runtime linking.
-	case $host_os in aix4.[[23]]|aix4.[[23]].*|aix[[5-9]]*)
-	  for ld_flag in $LDFLAGS; do
-	  if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then
-	    aix_use_runtimelinking=yes
-	    break
-	  fi
-	  done
-	  ;;
-	esac
-
-	exp_sym_flag='-bexport'
-	no_entry_flag='-bnoentry'
-      fi
-
-      # When large executables or shared objects are built, AIX ld can
-      # have problems creating the table of contents.  If linking a library
-      # or program results in "error TOC overflow" add -mminimal-toc to
-      # CXXFLAGS/CFLAGS for g++/gcc.  In the cases where that is not
-      # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS.
-
-      _LT_TAGVAR(archive_cmds, $1)=''
-      _LT_TAGVAR(hardcode_direct, $1)=yes
-      _LT_TAGVAR(hardcode_direct_absolute, $1)=yes
-      _LT_TAGVAR(hardcode_libdir_separator, $1)=':'
-      _LT_TAGVAR(link_all_deplibs, $1)=yes
-      _LT_TAGVAR(file_list_spec, $1)='${wl}-f,'
-
-      if test "$GCC" = yes; then
-	case $host_os in aix4.[[012]]|aix4.[[012]].*)
-	# We only want to do this on AIX 4.2 and lower, the check
-	# below for broken collect2 doesn't work under 4.3+
-	  collect2name=`${CC} -print-prog-name=collect2`
-	  if test -f "$collect2name" &&
-	   strings "$collect2name" | $GREP resolve_lib_name >/dev/null
-	  then
-	  # We have reworked collect2
-	  :
-	  else
-	  # We have old collect2
-	  _LT_TAGVAR(hardcode_direct, $1)=unsupported
-	  # It fails to find uninstalled libraries when the uninstalled
-	  # path is not listed in the libpath.  Setting hardcode_minus_L
-	  # to unsupported forces relinking
-	  _LT_TAGVAR(hardcode_minus_L, $1)=yes
-	  _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
-	  _LT_TAGVAR(hardcode_libdir_separator, $1)=
-	  fi
-	  ;;
-	esac
-	shared_flag='-shared'
-	if test "$aix_use_runtimelinking" = yes; then
-	  shared_flag="$shared_flag "'${wl}-G'
-	fi
-      else
-	# not using gcc
-	if test "$host_cpu" = ia64; then
-	# VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release
-	# chokes on -Wl,-G. The following line is correct:
-	  shared_flag='-G'
-	else
-	  if test "$aix_use_runtimelinking" = yes; then
-	    shared_flag='${wl}-G'
-	  else
-	    shared_flag='${wl}-bM:SRE'
-	  fi
-	fi
-      fi
-
-      _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-bexpall'
-      # It seems that -bexpall does not export symbols beginning with
-      # underscore (_), so it is better to generate a list of symbols to export.
-      _LT_TAGVAR(always_export_symbols, $1)=yes
-      if test "$aix_use_runtimelinking" = yes; then
-	# Warning - without using the other runtime loading flags (-brtl),
-	# -berok will link without error, but may produce a broken library.
-	_LT_TAGVAR(allow_undefined_flag, $1)='-berok'
-        # Determine the default libpath from the value encoded in an
-        # empty executable.
-        _LT_SYS_MODULE_PATH_AIX
-        _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath"
-        _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then $ECHO "X${wl}${allow_undefined_flag}" | $Xsed; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag"
-      else
-	if test "$host_cpu" = ia64; then
-	  _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $libdir:/usr/lib:/lib'
-	  _LT_TAGVAR(allow_undefined_flag, $1)="-z nodefs"
-	  _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols"
-	else
-	 # Determine the default libpath from the value encoded in an
-	 # empty executable.
-	 _LT_SYS_MODULE_PATH_AIX
-	 _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath"
-	  # Warning - without using the other run time loading flags,
-	  # -berok will link without error, but may produce a broken library.
-	  _LT_TAGVAR(no_undefined_flag, $1)=' ${wl}-bernotok'
-	  _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-berok'
-	  # Exported symbols can be pulled into shared objects from archives
-	  _LT_TAGVAR(whole_archive_flag_spec, $1)='$convenience'
-	  _LT_TAGVAR(archive_cmds_need_lc, $1)=yes
-	  # This is similar to how AIX traditionally builds its shared libraries.
-	  _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname'
-	fi
-      fi
-      ;;
-
-    amigaos*)
-      case $host_cpu in
-      powerpc)
-            # see comment about AmigaOS4 .so support
-            _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
-            _LT_TAGVAR(archive_expsym_cmds, $1)=''
-        ;;
-      m68k)
-            _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)'
-            _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
-            _LT_TAGVAR(hardcode_minus_L, $1)=yes
-        ;;
-      esac
-      ;;
-
-    bsdi[[45]]*)
-      _LT_TAGVAR(export_dynamic_flag_spec, $1)=-rdynamic
-      ;;
-
-    cygwin* | mingw* | pw32* | cegcc*)
-      # When not using gcc, we currently assume that we are using
-      # Microsoft Visual C++.
-      # hardcode_libdir_flag_spec is actually meaningless, as there is
-      # no search path for DLLs.
-      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=' '
-      _LT_TAGVAR(allow_undefined_flag, $1)=unsupported
-      # Tell ltmain to make .lib files, not .a files.
-      libext=lib
-      # Tell ltmain to make .dll files, not .so files.
-      shrext_cmds=".dll"
-      # FIXME: Setting linknames here is a bad hack.
-      _LT_TAGVAR(archive_cmds, $1)='$CC -o $lib $libobjs $compiler_flags `$ECHO "X$deplibs" | $Xsed -e '\''s/ -lc$//'\''` -link -dll~linknames='
-      # The linker will automatically build a .lib file if we build a DLL.
-      _LT_TAGVAR(old_archive_from_new_cmds, $1)='true'
-      # FIXME: Should let the user specify the lib program.
-      _LT_TAGVAR(old_archive_cmds, $1)='lib -OUT:$oldlib$oldobjs$old_deplibs'
-      _LT_TAGVAR(fix_srcfile_path, $1)='`cygpath -w "$srcfile"`'
-      _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes
-      ;;
-
-    darwin* | rhapsody*)
-      _LT_DARWIN_LINKER_FEATURES($1)
-      ;;
-
-    dgux*)
-      _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
-      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
-      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
-      ;;
-
-    freebsd1*)
-      _LT_TAGVAR(ld_shlibs, $1)=no
-      ;;
-
-    # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor
-    # support.  Future versions do this automatically, but an explicit c++rt0.o
-    # does not break anything, and helps significantly (at the cost of a little
-    # extra space).
-    freebsd2.2*)
-      _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o'
-      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
-      _LT_TAGVAR(hardcode_direct, $1)=yes
-      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
-      ;;
-
-    # Unfortunately, older versions of FreeBSD 2 do not have this feature.
-    freebsd2*)
-      _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'
-      _LT_TAGVAR(hardcode_direct, $1)=yes
-      _LT_TAGVAR(hardcode_minus_L, $1)=yes
-      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
-      ;;
-
-    # FreeBSD 3 and greater uses gcc -shared to do shared libraries.
-    freebsd* | dragonfly*)
-      _LT_TAGVAR(archive_cmds, $1)='$CC -shared -o $lib $libobjs $deplibs $compiler_flags'
-      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
-      _LT_TAGVAR(hardcode_direct, $1)=yes
-      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
-      ;;
-
-    hpux9*)
-      if test "$GCC" = yes; then
-	_LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -shared -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
-      else
-	_LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
-      fi
-      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir'
-      _LT_TAGVAR(hardcode_libdir_separator, $1)=:
-      _LT_TAGVAR(hardcode_direct, $1)=yes
-
-      # hardcode_minus_L: Not really in the search PATH,
-      # but as the default location of the library.
-      _LT_TAGVAR(hardcode_minus_L, $1)=yes
-      _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
-      ;;
-
-    hpux10*)
-      if test "$GCC" = yes -a "$with_gnu_ld" = no; then
-	_LT_TAGVAR(archive_cmds, $1)='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
-      else
-	_LT_TAGVAR(archive_cmds, $1)='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags'
-      fi
-      if test "$with_gnu_ld" = no; then
-	_LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir'
-	_LT_TAGVAR(hardcode_libdir_flag_spec_ld, $1)='+b $libdir'
-	_LT_TAGVAR(hardcode_libdir_separator, $1)=:
-	_LT_TAGVAR(hardcode_direct, $1)=yes
-	_LT_TAGVAR(hardcode_direct_absolute, $1)=yes
-	_LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
-	# hardcode_minus_L: Not really in the search PATH,
-	# but as the default location of the library.
-	_LT_TAGVAR(hardcode_minus_L, $1)=yes
-      fi
-      ;;
-
-    hpux11*)
-      if test "$GCC" = yes -a "$with_gnu_ld" = no; then
-	case $host_cpu in
-	hppa*64*)
-	  _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
-	  ;;
-	ia64*)
-	  _LT_TAGVAR(archive_cmds, $1)='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags'
-	  ;;
-	*)
-	  _LT_TAGVAR(archive_cmds, $1)='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
-	  ;;
-	esac
-      else
-	case $host_cpu in
-	hppa*64*)
-	  _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
-	  ;;
-	ia64*)
-	  _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags'
-	  ;;
-	*)
-	  _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
-	  ;;
-	esac
-      fi
-      if test "$with_gnu_ld" = no; then
-	_LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir'
-	_LT_TAGVAR(hardcode_libdir_separator, $1)=:
-
-	case $host_cpu in
-	hppa*64*|ia64*)
-	  _LT_TAGVAR(hardcode_direct, $1)=no
-	  _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
-	  ;;
-	*)
-	  _LT_TAGVAR(hardcode_direct, $1)=yes
-	  _LT_TAGVAR(hardcode_direct_absolute, $1)=yes
-	  _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
-
-	  # hardcode_minus_L: Not really in the search PATH,
-	  # but as the default location of the library.
-	  _LT_TAGVAR(hardcode_minus_L, $1)=yes
-	  ;;
-	esac
-      fi
-      ;;
-
-    irix5* | irix6* | nonstopux*)
-      if test "$GCC" = yes; then
-	_LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
-	# Try to use the -exported_symbol ld option, if it does not
-	# work, assume that -exports_file does not work either and
-	# implicitly export all symbols.
-        save_LDFLAGS="$LDFLAGS"
-        LDFLAGS="$LDFLAGS -shared ${wl}-exported_symbol ${wl}foo ${wl}-update_registry ${wl}/dev/null"
-        AC_LINK_IFELSE(
-          [AC_LANG_SOURCE(
-	     [AC_LANG_CASE([C], [[int foo (void) { return 0; }]],
-			   [C++], [[int foo (void) { return 0; }]],
-			   [Fortran 77], [[
-       subroutine foo
-       end]],
-			   [Fortran], [[
-       subroutine foo
-       end]])])], [
-          _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations ${wl}-exports_file ${wl}$export_symbols -o $lib'
-        ])
-        LDFLAGS="$save_LDFLAGS"
-      else
-	_LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib'
-	_LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -exports_file $export_symbols -o $lib'
-      fi
-      _LT_TAGVAR(archive_cmds_need_lc, $1)='no'
-      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
-      _LT_TAGVAR(hardcode_libdir_separator, $1)=:
-      _LT_TAGVAR(inherit_rpath, $1)=yes
-      _LT_TAGVAR(link_all_deplibs, $1)=yes
-      ;;
-
-    netbsd*)
-      if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then
-	_LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'  # a.out
-      else
-	_LT_TAGVAR(archive_cmds, $1)='$LD -shared -o $lib $libobjs $deplibs $linker_flags'      # ELF
-      fi
-      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
-      _LT_TAGVAR(hardcode_direct, $1)=yes
-      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
-      ;;
-
-    newsos6)
-      _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
-      _LT_TAGVAR(hardcode_direct, $1)=yes
-      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
-      _LT_TAGVAR(hardcode_libdir_separator, $1)=:
-      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
-      ;;
-
-    *nto* | *qnx*)
-      ;;
-
-    openbsd*)
-      if test -f /usr/libexec/ld.so; then
-	_LT_TAGVAR(hardcode_direct, $1)=yes
-	_LT_TAGVAR(hardcode_shlibpath_var, $1)=no
-	_LT_TAGVAR(hardcode_direct_absolute, $1)=yes
-	if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
-	  _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
-	  _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-retain-symbols-file,$export_symbols'
-	  _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
-	  _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
-	else
-	  case $host_os in
-	   openbsd[[01]].* | openbsd2.[[0-7]] | openbsd2.[[0-7]].*)
-	     _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'
-	     _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
-	     ;;
-	   *)
-	     _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
-	     _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
-	     ;;
-	  esac
-	fi
-      else
-	_LT_TAGVAR(ld_shlibs, $1)=no
-      fi
-      ;;
-
-    os2*)
-      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
-      _LT_TAGVAR(hardcode_minus_L, $1)=yes
-      _LT_TAGVAR(allow_undefined_flag, $1)=unsupported
-      _LT_TAGVAR(archive_cmds, $1)='$ECHO "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~$ECHO DATA >> $output_objdir/$libname.def~$ECHO " SINGLE NONSHARED" >> $output_objdir/$libname.def~$ECHO EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def'
-      _LT_TAGVAR(old_archive_from_new_cmds, $1)='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def'
-      ;;
-
-    osf3*)
-      if test "$GCC" = yes; then
-	_LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*'
-	_LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
-      else
-	_LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*'
-	_LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib'
-      fi
-      _LT_TAGVAR(archive_cmds_need_lc, $1)='no'
-      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
-      _LT_TAGVAR(hardcode_libdir_separator, $1)=:
-      ;;
-
-    osf4* | osf5*)	# as osf3* with the addition of -msym flag
-      if test "$GCC" = yes; then
-	_LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*'
-	_LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
-	_LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
-      else
-	_LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*'
-	_LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -msym -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib'
-	_LT_TAGVAR(archive_expsym_cmds, $1)='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; printf "%s\\n" "-hidden">> $lib.exp~
-	$CC -shared${allow_undefined_flag} ${wl}-input ${wl}$lib.exp $compiler_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib~$RM $lib.exp'
-
-	# Both c and cxx compiler support -rpath directly
-	_LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir'
-      fi
-      _LT_TAGVAR(archive_cmds_need_lc, $1)='no'
-      _LT_TAGVAR(hardcode_libdir_separator, $1)=:
-      ;;
-
-    solaris*)
-      _LT_TAGVAR(no_undefined_flag, $1)=' -z defs'
-      if test "$GCC" = yes; then
-	wlarc='${wl}'
-	_LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-z ${wl}text ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
-	_LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
-	  $CC -shared ${wl}-z ${wl}text ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp'
-      else
-	case `$CC -V 2>&1` in
-	*"Compilers 5.0"*)
-	  wlarc=''
-	  _LT_TAGVAR(archive_cmds, $1)='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags'
-	  _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
-	  $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$RM $lib.exp'
-	  ;;
-	*)
-	  wlarc='${wl}'
-	  _LT_TAGVAR(archive_cmds, $1)='$CC -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $compiler_flags'
-	  _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
-	  $CC -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp'
-	  ;;
-	esac
-      fi
-      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
-      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
-      case $host_os in
-      solaris2.[[0-5]] | solaris2.[[0-5]].*) ;;
-      *)
-	# The compiler driver will combine and reorder linker options,
-	# but understands `-z linker_flag'.  GCC discards it without `$wl',
-	# but is careful enough not to reorder.
-	# Supported since Solaris 2.6 (maybe 2.5.1?)
-	if test "$GCC" = yes; then
-	  _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract'
-	else
-	  _LT_TAGVAR(whole_archive_flag_spec, $1)='-z allextract$convenience -z defaultextract'
-	fi
-	;;
-      esac
-      _LT_TAGVAR(link_all_deplibs, $1)=yes
-      ;;
-
-    sunos4*)
-      if test "x$host_vendor" = xsequent; then
-	# Use $CC to link under sequent, because it throws in some extra .o
-	# files that make .init and .fini sections work.
-	_LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags'
-      else
-	_LT_TAGVAR(archive_cmds, $1)='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags'
-      fi
-      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
-      _LT_TAGVAR(hardcode_direct, $1)=yes
-      _LT_TAGVAR(hardcode_minus_L, $1)=yes
-      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
-      ;;
-
-    sysv4)
-      case $host_vendor in
-	sni)
-	  _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
-	  _LT_TAGVAR(hardcode_direct, $1)=yes # is this really true???
-	;;
-	siemens)
-	  ## LD is ld it makes a PLAMLIB
-	  ## CC just makes a GrossModule.
-	  _LT_TAGVAR(archive_cmds, $1)='$LD -G -o $lib $libobjs $deplibs $linker_flags'
-	  _LT_TAGVAR(reload_cmds, $1)='$CC -r -o $output$reload_objs'
-	  _LT_TAGVAR(hardcode_direct, $1)=no
-        ;;
-	motorola)
-	  _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
-	  _LT_TAGVAR(hardcode_direct, $1)=no #Motorola manual says yes, but my tests say they lie
-	;;
-      esac
-      runpath_var='LD_RUN_PATH'
-      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
-      ;;
-
-    sysv4.3*)
-      _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
-      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
-      _LT_TAGVAR(export_dynamic_flag_spec, $1)='-Bexport'
-      ;;
-
-    sysv4*MP*)
-      if test -d /usr/nec; then
-	_LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
-	_LT_TAGVAR(hardcode_shlibpath_var, $1)=no
-	runpath_var=LD_RUN_PATH
-	hardcode_runpath_var=yes
-	_LT_TAGVAR(ld_shlibs, $1)=yes
-      fi
-      ;;
-
-    sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[[01]].[[10]]* | unixware7* | sco3.2v5.0.[[024]]*)
-      _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text'
-      _LT_TAGVAR(archive_cmds_need_lc, $1)=no
-      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
-      runpath_var='LD_RUN_PATH'
-
-      if test "$GCC" = yes; then
-	_LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
-	_LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
-      else
-	_LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
-	_LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
-      fi
-      ;;
-
-    sysv5* | sco3.2v5* | sco5v6*)
-      # Note: We can NOT use -z defs as we might desire, because we do not
-      # link with -lc, and that would cause any symbols used from libc to
-      # always be unresolved, which means just about no library would
-      # ever link correctly.  If we're not using GNU ld we use -z text
-      # though, which does catch some bad symbols but isn't as heavy-handed
-      # as -z defs.
-      _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text'
-      _LT_TAGVAR(allow_undefined_flag, $1)='${wl}-z,nodefs'
-      _LT_TAGVAR(archive_cmds_need_lc, $1)=no
-      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
-      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R,$libdir'
-      _LT_TAGVAR(hardcode_libdir_separator, $1)=':'
-      _LT_TAGVAR(link_all_deplibs, $1)=yes
-      _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-Bexport'
-      runpath_var='LD_RUN_PATH'
-
-      if test "$GCC" = yes; then
-	_LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
-	_LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
-      else
-	_LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
-	_LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
-      fi
-      ;;
-
-    uts4*)
-      _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
-      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
-      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
-      ;;
-
-    *)
-      _LT_TAGVAR(ld_shlibs, $1)=no
-      ;;
-    esac
-
-    if test x$host_vendor = xsni; then
-      case $host in
-      sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*)
-	_LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-Blargedynsym'
-	;;
-      esac
-    fi
-  fi
-])
-AC_MSG_RESULT([$_LT_TAGVAR(ld_shlibs, $1)])
-test "$_LT_TAGVAR(ld_shlibs, $1)" = no && can_build_shared=no
-
-_LT_TAGVAR(with_gnu_ld, $1)=$with_gnu_ld
-
-_LT_DECL([], [libext], [0], [Old archive suffix (normally "a")])dnl
-_LT_DECL([], [shrext_cmds], [1], [Shared library suffix (normally ".so")])dnl
-_LT_DECL([], [extract_expsyms_cmds], [2],
-    [The commands to extract the exported symbol list from a shared archive])
-
-#
-# Do we need to explicitly link libc?
-#
-case "x$_LT_TAGVAR(archive_cmds_need_lc, $1)" in
-x|xyes)
-  # Assume -lc should be added
-  _LT_TAGVAR(archive_cmds_need_lc, $1)=yes
-
-  if test "$enable_shared" = yes && test "$GCC" = yes; then
-    case $_LT_TAGVAR(archive_cmds, $1) in
-    *'~'*)
-      # FIXME: we may have to deal with multi-command sequences.
-      ;;
-    '$CC '*)
-      # Test whether the compiler implicitly links with -lc since on some
-      # systems, -lgcc has to come before -lc. If gcc already passes -lc
-      # to ld, don't add -lc before -lgcc.
-      AC_MSG_CHECKING([whether -lc should be explicitly linked in])
-      $RM conftest*
-      echo "$lt_simple_compile_test_code" > conftest.$ac_ext
-
-      if AC_TRY_EVAL(ac_compile) 2>conftest.err; then
-        soname=conftest
-        lib=conftest
-        libobjs=conftest.$ac_objext
-        deplibs=
-        wl=$_LT_TAGVAR(lt_prog_compiler_wl, $1)
-	pic_flag=$_LT_TAGVAR(lt_prog_compiler_pic, $1)
-        compiler_flags=-v
-        linker_flags=-v
-        verstring=
-        output_objdir=.
-        libname=conftest
-        lt_save_allow_undefined_flag=$_LT_TAGVAR(allow_undefined_flag, $1)
-        _LT_TAGVAR(allow_undefined_flag, $1)=
-        if AC_TRY_EVAL(_LT_TAGVAR(archive_cmds, $1) 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1)
-        then
-	  _LT_TAGVAR(archive_cmds_need_lc, $1)=no
-        else
-	  _LT_TAGVAR(archive_cmds_need_lc, $1)=yes
-        fi
-        _LT_TAGVAR(allow_undefined_flag, $1)=$lt_save_allow_undefined_flag
-      else
-        cat conftest.err 1>&5
-      fi
-      $RM conftest*
-      AC_MSG_RESULT([$_LT_TAGVAR(archive_cmds_need_lc, $1)])
-      ;;
-    esac
-  fi
-  ;;
-esac
-
-_LT_TAGDECL([build_libtool_need_lc], [archive_cmds_need_lc], [0],
-    [Whether or not to add -lc for building shared libraries])
-_LT_TAGDECL([allow_libtool_libs_with_static_runtimes],
-    [enable_shared_with_static_runtimes], [0],
-    [Whether or not to disallow shared libs when runtime libs are static])
-_LT_TAGDECL([], [export_dynamic_flag_spec], [1],
-    [Compiler flag to allow reflexive dlopens])
-_LT_TAGDECL([], [whole_archive_flag_spec], [1],
-    [Compiler flag to generate shared objects directly from archives])
-_LT_TAGDECL([], [compiler_needs_object], [1],
-    [Whether the compiler copes with passing no objects directly])
-_LT_TAGDECL([], [old_archive_from_new_cmds], [2],
-    [Create an old-style archive from a shared archive])
-_LT_TAGDECL([], [old_archive_from_expsyms_cmds], [2],
-    [Create a temporary old-style archive to link instead of a shared archive])
-_LT_TAGDECL([], [archive_cmds], [2], [Commands used to build a shared archive])
-_LT_TAGDECL([], [archive_expsym_cmds], [2])
-_LT_TAGDECL([], [module_cmds], [2],
-    [Commands used to build a loadable module if different from building
-    a shared archive.])
-_LT_TAGDECL([], [module_expsym_cmds], [2])
-_LT_TAGDECL([], [with_gnu_ld], [1],
-    [Whether we are building with GNU ld or not])
-_LT_TAGDECL([], [allow_undefined_flag], [1],
-    [Flag that allows shared libraries with undefined symbols to be built])
-_LT_TAGDECL([], [no_undefined_flag], [1],
-    [Flag that enforces no undefined symbols])
-_LT_TAGDECL([], [hardcode_libdir_flag_spec], [1],
-    [Flag to hardcode $libdir into a binary during linking.
-    This must work even if $libdir does not exist])
-_LT_TAGDECL([], [hardcode_libdir_flag_spec_ld], [1],
-    [[If ld is used when linking, flag to hardcode $libdir into a binary
-    during linking.  This must work even if $libdir does not exist]])
-_LT_TAGDECL([], [hardcode_libdir_separator], [1],
-    [Whether we need a single "-rpath" flag with a separated argument])
-_LT_TAGDECL([], [hardcode_direct], [0],
-    [Set to "yes" if using DIR/libNAME${shared_ext} during linking hardcodes
-    DIR into the resulting binary])
-_LT_TAGDECL([], [hardcode_direct_absolute], [0],
-    [Set to "yes" if using DIR/libNAME${shared_ext} during linking hardcodes
-    DIR into the resulting binary and the resulting library dependency is
-    "absolute", i.e impossible to change by setting ${shlibpath_var} if the
-    library is relocated])
-_LT_TAGDECL([], [hardcode_minus_L], [0],
-    [Set to "yes" if using the -LDIR flag during linking hardcodes DIR
-    into the resulting binary])
-_LT_TAGDECL([], [hardcode_shlibpath_var], [0],
-    [Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR
-    into the resulting binary])
-_LT_TAGDECL([], [hardcode_automatic], [0],
-    [Set to "yes" if building a shared library automatically hardcodes DIR
-    into the library and all subsequent libraries and executables linked
-    against it])
-_LT_TAGDECL([], [inherit_rpath], [0],
-    [Set to yes if linker adds runtime paths of dependent libraries
-    to runtime path list])
-_LT_TAGDECL([], [link_all_deplibs], [0],
-    [Whether libtool must link a program against all its dependency libraries])
-_LT_TAGDECL([], [fix_srcfile_path], [1],
-    [Fix the shell variable $srcfile for the compiler])
-_LT_TAGDECL([], [always_export_symbols], [0],
-    [Set to "yes" if exported symbols are required])
-_LT_TAGDECL([], [export_symbols_cmds], [2],
-    [The commands to list exported symbols])
-_LT_TAGDECL([], [exclude_expsyms], [1],
-    [Symbols that should not be listed in the preloaded symbols])
-_LT_TAGDECL([], [include_expsyms], [1],
-    [Symbols that must always be exported])
-_LT_TAGDECL([], [prelink_cmds], [2],
-    [Commands necessary for linking programs (against libraries) with templates])
-_LT_TAGDECL([], [file_list_spec], [1],
-    [Specify filename containing input files])
-dnl FIXME: Not yet implemented
-dnl _LT_TAGDECL([], [thread_safe_flag_spec], [1],
-dnl    [Compiler flag to generate thread safe objects])
-])# _LT_LINKER_SHLIBS
-
-
-# _LT_LANG_C_CONFIG([TAG])
-# ------------------------
-# Ensure that the configuration variables for a C compiler are suitably
-# defined.  These variables are subsequently used by _LT_CONFIG to write
-# the compiler configuration to `libtool'.
-m4_defun([_LT_LANG_C_CONFIG],
-[m4_require([_LT_DECL_EGREP])dnl
-lt_save_CC="$CC"
-AC_LANG_PUSH(C)
-
-# Source file extension for C test sources.
-ac_ext=c
-
-# Object file extension for compiled C test sources.
-objext=o
-_LT_TAGVAR(objext, $1)=$objext
-
-# Code to be used in simple compile tests
-lt_simple_compile_test_code="int some_variable = 0;"
-
-# Code to be used in simple link tests
-lt_simple_link_test_code='int main(){return(0);}'
-
-_LT_TAG_COMPILER
-# Save the default compiler, since it gets overwritten when the other
-# tags are being tested, and _LT_TAGVAR(compiler, []) is a NOP.
-compiler_DEFAULT=$CC
-
-# save warnings/boilerplate of simple test code
-_LT_COMPILER_BOILERPLATE
-_LT_LINKER_BOILERPLATE
-
-if test -n "$compiler"; then
-  _LT_COMPILER_NO_RTTI($1)
-  _LT_COMPILER_PIC($1)
-  _LT_COMPILER_C_O($1)
-  _LT_COMPILER_FILE_LOCKS($1)
-  _LT_LINKER_SHLIBS($1)
-  _LT_SYS_DYNAMIC_LINKER($1)
-  _LT_LINKER_HARDCODE_LIBPATH($1)
-  LT_SYS_DLOPEN_SELF
-  _LT_CMD_STRIPLIB
-
-  # Report which library types will actually be built
-  AC_MSG_CHECKING([if libtool supports shared libraries])
-  AC_MSG_RESULT([$can_build_shared])
-
-  AC_MSG_CHECKING([whether to build shared libraries])
-  test "$can_build_shared" = "no" && enable_shared=no
-
-  # On AIX, shared libraries and static libraries use the same namespace, and
-  # are all built from PIC.
-  case $host_os in
-  aix3*)
-    test "$enable_shared" = yes && enable_static=no
-    if test -n "$RANLIB"; then
-      archive_cmds="$archive_cmds~\$RANLIB \$lib"
-      postinstall_cmds='$RANLIB $lib'
-    fi
-    ;;
-
-  aix[[4-9]]*)
-    if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then
-      test "$enable_shared" = yes && enable_static=no
-    fi
-    ;;
-  esac
-  AC_MSG_RESULT([$enable_shared])
-
-  AC_MSG_CHECKING([whether to build static libraries])
-  # Make sure either enable_shared or enable_static is yes.
-  test "$enable_shared" = yes || enable_static=yes
-  AC_MSG_RESULT([$enable_static])
-
-  _LT_CONFIG($1)
-fi
-AC_LANG_POP
-CC="$lt_save_CC"
-])# _LT_LANG_C_CONFIG
-
-
-# _LT_PROG_CXX
-# ------------
-# Since AC_PROG_CXX is broken, in that it returns g++ if there is no c++
-# compiler, we have our own version here.
-m4_defun([_LT_PROG_CXX],
-[
-pushdef([AC_MSG_ERROR], [_lt_caught_CXX_error=yes])
-AC_PROG_CXX
-if test -n "$CXX" && ( test "X$CXX" != "Xno" &&
-    ( (test "X$CXX" = "Xg++" && `g++ -v >/dev/null 2>&1` ) ||
-    (test "X$CXX" != "Xg++"))) ; then
-  AC_PROG_CXXCPP
-else
-  _lt_caught_CXX_error=yes
-fi
-popdef([AC_MSG_ERROR])
-])# _LT_PROG_CXX
-
-dnl aclocal-1.4 backwards compatibility:
-dnl AC_DEFUN([_LT_PROG_CXX], [])
-
-
-# _LT_LANG_CXX_CONFIG([TAG])
-# --------------------------
-# Ensure that the configuration variables for a C++ compiler are suitably
-# defined.  These variables are subsequently used by _LT_CONFIG to write
-# the compiler configuration to `libtool'.
-m4_defun([_LT_LANG_CXX_CONFIG],
-[AC_REQUIRE([_LT_PROG_CXX])dnl
-m4_require([_LT_FILEUTILS_DEFAULTS])dnl
-m4_require([_LT_DECL_EGREP])dnl
-
-AC_LANG_PUSH(C++)
-_LT_TAGVAR(archive_cmds_need_lc, $1)=no
-_LT_TAGVAR(allow_undefined_flag, $1)=
-_LT_TAGVAR(always_export_symbols, $1)=no
-_LT_TAGVAR(archive_expsym_cmds, $1)=
-_LT_TAGVAR(compiler_needs_object, $1)=no
-_LT_TAGVAR(export_dynamic_flag_spec, $1)=
-_LT_TAGVAR(hardcode_direct, $1)=no
-_LT_TAGVAR(hardcode_direct_absolute, $1)=no
-_LT_TAGVAR(hardcode_libdir_flag_spec, $1)=
-_LT_TAGVAR(hardcode_libdir_flag_spec_ld, $1)=
-_LT_TAGVAR(hardcode_libdir_separator, $1)=
-_LT_TAGVAR(hardcode_minus_L, $1)=no
-_LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported
-_LT_TAGVAR(hardcode_automatic, $1)=no
-_LT_TAGVAR(inherit_rpath, $1)=no
-_LT_TAGVAR(module_cmds, $1)=
-_LT_TAGVAR(module_expsym_cmds, $1)=
-_LT_TAGVAR(link_all_deplibs, $1)=unknown
-_LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds
-_LT_TAGVAR(no_undefined_flag, $1)=
-_LT_TAGVAR(whole_archive_flag_spec, $1)=
-_LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no
-
-# Source file extension for C++ test sources.
-ac_ext=cpp
-
-# Object file extension for compiled C++ test sources.
-objext=o
-_LT_TAGVAR(objext, $1)=$objext
-
-# No sense in running all these tests if we already determined that
-# the CXX compiler isn't working.  Some variables (like enable_shared)
-# are currently assumed to apply to all compilers on this platform,
-# and will be corrupted by setting them based on a non-working compiler.
-if test "$_lt_caught_CXX_error" != yes; then
-  # Code to be used in simple compile tests
-  lt_simple_compile_test_code="int some_variable = 0;"
-
-  # Code to be used in simple link tests
-  lt_simple_link_test_code='int main(int, char *[[]]) { return(0); }'
-
-  # ltmain only uses $CC for tagged configurations so make sure $CC is set.
-  _LT_TAG_COMPILER
-
-  # save warnings/boilerplate of simple test code
-  _LT_COMPILER_BOILERPLATE
-  _LT_LINKER_BOILERPLATE
-
-  # Allow CC to be a program name with arguments.
-  lt_save_CC=$CC
-  lt_save_LD=$LD
-  lt_save_GCC=$GCC
-  GCC=$GXX
-  lt_save_with_gnu_ld=$with_gnu_ld
-  lt_save_path_LD=$lt_cv_path_LD
-  if test -n "${lt_cv_prog_gnu_ldcxx+set}"; then
-    lt_cv_prog_gnu_ld=$lt_cv_prog_gnu_ldcxx
-  else
-    $as_unset lt_cv_prog_gnu_ld
-  fi
-  if test -n "${lt_cv_path_LDCXX+set}"; then
-    lt_cv_path_LD=$lt_cv_path_LDCXX
-  else
-    $as_unset lt_cv_path_LD
-  fi
-  test -z "${LDCXX+set}" || LD=$LDCXX
-  CC=${CXX-"c++"}
-  compiler=$CC
-  _LT_TAGVAR(compiler, $1)=$CC
-  _LT_CC_BASENAME([$compiler])
-
-  if test -n "$compiler"; then
-    # We don't want -fno-exception when compiling C++ code, so set the
-    # no_builtin_flag separately
-    if test "$GXX" = yes; then
-      _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -fno-builtin'
-    else
-      _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=
-    fi
-
-    if test "$GXX" = yes; then
-      # Set up default GNU C++ configuration
-
-      LT_PATH_LD
-
-      # Check if GNU C++ uses GNU ld as the underlying linker, since the
-      # archiving commands below assume that GNU ld is being used.
-      if test "$with_gnu_ld" = yes; then
-        _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib'
-        _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
-
-        _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
-        _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic'
-
-        # If archive_cmds runs LD, not CC, wlarc should be empty
-        # XXX I think wlarc can be eliminated in ltcf-cxx, but I need to
-        #     investigate it a little bit more. (MM)
-        wlarc='${wl}'
-
-        # ancient GNU ld didn't support --whole-archive et. al.
-        if eval "`$CC -print-prog-name=ld` --help 2>&1" |
-	  $GREP 'no-whole-archive' > /dev/null; then
-          _LT_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive'
-        else
-          _LT_TAGVAR(whole_archive_flag_spec, $1)=
-        fi
-      else
-        with_gnu_ld=no
-        wlarc=
-
-        # A generic and very simple default shared library creation
-        # command for GNU C++ for the case where it uses the native
-        # linker, instead of GNU ld.  If possible, this setting should
-        # overridden to take advantage of the native linker features on
-        # the platform it is being used on.
-        _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib'
-      fi
-
-      # Commands to make compiler produce verbose output that lists
-      # what "hidden" libraries, object files and flags are used when
-      # linking a shared library.
-      output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "\-L"'
-
-    else
-      GXX=no
-      with_gnu_ld=no
-      wlarc=
-    fi
-
-    # PORTME: fill in a description of your system's C++ link characteristics
-    AC_MSG_CHECKING([whether the $compiler linker ($LD) supports shared libraries])
-    _LT_TAGVAR(ld_shlibs, $1)=yes
-    case $host_os in
-      aix3*)
-        # FIXME: insert proper C++ library support
-        _LT_TAGVAR(ld_shlibs, $1)=no
-        ;;
-      aix[[4-9]]*)
-        if test "$host_cpu" = ia64; then
-          # On IA64, the linker does run time linking by default, so we don't
-          # have to do anything special.
-          aix_use_runtimelinking=no
-          exp_sym_flag='-Bexport'
-          no_entry_flag=""
-        else
-          aix_use_runtimelinking=no
-
-          # Test if we are trying to use run time linking or normal
-          # AIX style linking. If -brtl is somewhere in LDFLAGS, we
-          # need to do runtime linking.
-          case $host_os in aix4.[[23]]|aix4.[[23]].*|aix[[5-9]]*)
-	    for ld_flag in $LDFLAGS; do
-	      case $ld_flag in
-	      *-brtl*)
-	        aix_use_runtimelinking=yes
-	        break
-	        ;;
-	      esac
-	    done
-	    ;;
-          esac
-
-          exp_sym_flag='-bexport'
-          no_entry_flag='-bnoentry'
-        fi
-
-        # When large executables or shared objects are built, AIX ld can
-        # have problems creating the table of contents.  If linking a library
-        # or program results in "error TOC overflow" add -mminimal-toc to
-        # CXXFLAGS/CFLAGS for g++/gcc.  In the cases where that is not
-        # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS.
-
-        _LT_TAGVAR(archive_cmds, $1)=''
-        _LT_TAGVAR(hardcode_direct, $1)=yes
-        _LT_TAGVAR(hardcode_direct_absolute, $1)=yes
-        _LT_TAGVAR(hardcode_libdir_separator, $1)=':'
-        _LT_TAGVAR(link_all_deplibs, $1)=yes
-        _LT_TAGVAR(file_list_spec, $1)='${wl}-f,'
-
-        if test "$GXX" = yes; then
-          case $host_os in aix4.[[012]]|aix4.[[012]].*)
-          # We only want to do this on AIX 4.2 and lower, the check
-          # below for broken collect2 doesn't work under 4.3+
-	  collect2name=`${CC} -print-prog-name=collect2`
-	  if test -f "$collect2name" &&
-	     strings "$collect2name" | $GREP resolve_lib_name >/dev/null
-	  then
-	    # We have reworked collect2
-	    :
-	  else
-	    # We have old collect2
-	    _LT_TAGVAR(hardcode_direct, $1)=unsupported
-	    # It fails to find uninstalled libraries when the uninstalled
-	    # path is not listed in the libpath.  Setting hardcode_minus_L
-	    # to unsupported forces relinking
-	    _LT_TAGVAR(hardcode_minus_L, $1)=yes
-	    _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
-	    _LT_TAGVAR(hardcode_libdir_separator, $1)=
-	  fi
-          esac
-          shared_flag='-shared'
-	  if test "$aix_use_runtimelinking" = yes; then
-	    shared_flag="$shared_flag "'${wl}-G'
-	  fi
-        else
-          # not using gcc
-          if test "$host_cpu" = ia64; then
-	  # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release
-	  # chokes on -Wl,-G. The following line is correct:
-	  shared_flag='-G'
-          else
-	    if test "$aix_use_runtimelinking" = yes; then
-	      shared_flag='${wl}-G'
-	    else
-	      shared_flag='${wl}-bM:SRE'
-	    fi
-          fi
-        fi
-
-        _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-bexpall'
-        # It seems that -bexpall does not export symbols beginning with
-        # underscore (_), so it is better to generate a list of symbols to
-	# export.
-        _LT_TAGVAR(always_export_symbols, $1)=yes
-        if test "$aix_use_runtimelinking" = yes; then
-          # Warning - without using the other runtime loading flags (-brtl),
-          # -berok will link without error, but may produce a broken library.
-          _LT_TAGVAR(allow_undefined_flag, $1)='-berok'
-          # Determine the default libpath from the value encoded in an empty
-          # executable.
-          _LT_SYS_MODULE_PATH_AIX
-          _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath"
-
-          _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then $ECHO "X${wl}${allow_undefined_flag}" | $Xsed; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag"
-        else
-          if test "$host_cpu" = ia64; then
-	    _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $libdir:/usr/lib:/lib'
-	    _LT_TAGVAR(allow_undefined_flag, $1)="-z nodefs"
-	    _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols"
-          else
-	    # Determine the default libpath from the value encoded in an
-	    # empty executable.
-	    _LT_SYS_MODULE_PATH_AIX
-	    _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath"
-	    # Warning - without using the other run time loading flags,
-	    # -berok will link without error, but may produce a broken library.
-	    _LT_TAGVAR(no_undefined_flag, $1)=' ${wl}-bernotok'
-	    _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-berok'
-	    # Exported symbols can be pulled into shared objects from archives
-	    _LT_TAGVAR(whole_archive_flag_spec, $1)='$convenience'
-	    _LT_TAGVAR(archive_cmds_need_lc, $1)=yes
-	    # This is similar to how AIX traditionally builds its shared
-	    # libraries.
-	    _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname'
-          fi
-        fi
-        ;;
-
-      beos*)
-	if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
-	  _LT_TAGVAR(allow_undefined_flag, $1)=unsupported
-	  # Joseph Beckenbach <jrb3 at best.com> says some releases of gcc
-	  # support --undefined.  This deserves some investigation.  FIXME
-	  _LT_TAGVAR(archive_cmds, $1)='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
-	else
-	  _LT_TAGVAR(ld_shlibs, $1)=no
-	fi
-	;;
-
-      chorus*)
-        case $cc_basename in
-          *)
-	  # FIXME: insert proper C++ library support
-	  _LT_TAGVAR(ld_shlibs, $1)=no
-	  ;;
-        esac
-        ;;
-
-      cygwin* | mingw* | pw32* | cegcc*)
-        # _LT_TAGVAR(hardcode_libdir_flag_spec, $1) is actually meaningless,
-        # as there is no search path for DLLs.
-        _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
-        _LT_TAGVAR(allow_undefined_flag, $1)=unsupported
-        _LT_TAGVAR(always_export_symbols, $1)=no
-        _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes
-
-        if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then
-          _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
-          # If the export-symbols file already is a .def file (1st line
-          # is EXPORTS), use it as is; otherwise, prepend...
-          _LT_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then
-	    cp $export_symbols $output_objdir/$soname.def;
-          else
-	    echo EXPORTS > $output_objdir/$soname.def;
-	    cat $export_symbols >> $output_objdir/$soname.def;
-          fi~
-          $CC -shared -nostdlib $output_objdir/$soname.def $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
-        else
-          _LT_TAGVAR(ld_shlibs, $1)=no
-        fi
-        ;;
-      darwin* | rhapsody*)
-        _LT_DARWIN_LINKER_FEATURES($1)
-	;;
-
-      dgux*)
-        case $cc_basename in
-          ec++*)
-	    # FIXME: insert proper C++ library support
-	    _LT_TAGVAR(ld_shlibs, $1)=no
-	    ;;
-          ghcx*)
-	    # Green Hills C++ Compiler
-	    # FIXME: insert proper C++ library support
-	    _LT_TAGVAR(ld_shlibs, $1)=no
-	    ;;
-          *)
-	    # FIXME: insert proper C++ library support
-	    _LT_TAGVAR(ld_shlibs, $1)=no
-	    ;;
-        esac
-        ;;
-
-      freebsd[[12]]*)
-        # C++ shared libraries reported to be fairly broken before
-	# switch to ELF
-        _LT_TAGVAR(ld_shlibs, $1)=no
-        ;;
-
-      freebsd-elf*)
-        _LT_TAGVAR(archive_cmds_need_lc, $1)=no
-        ;;
-
-      freebsd* | dragonfly*)
-        # FreeBSD 3 and later use GNU C++ and GNU ld with standard ELF
-        # conventions
-        _LT_TAGVAR(ld_shlibs, $1)=yes
-        ;;
-
-      gnu*)
-        ;;
-
-      hpux9*)
-        _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir'
-        _LT_TAGVAR(hardcode_libdir_separator, $1)=:
-        _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
-        _LT_TAGVAR(hardcode_direct, $1)=yes
-        _LT_TAGVAR(hardcode_minus_L, $1)=yes # Not in the search PATH,
-				             # but as the default
-				             # location of the library.
-
-        case $cc_basename in
-          CC*)
-            # FIXME: insert proper C++ library support
-            _LT_TAGVAR(ld_shlibs, $1)=no
-            ;;
-          aCC*)
-            _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -b ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
-            # Commands to make compiler produce verbose output that lists
-            # what "hidden" libraries, object files and flags are used when
-            # linking a shared library.
-            #
-            # There doesn't appear to be a way to prevent this compiler from
-            # explicitly linking system object files so we need to strip them
-            # from the output so that they don't get included in the library
-            # dependencies.
-            output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $EGREP "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; $ECHO "X$list" | $Xsed'
-            ;;
-          *)
-            if test "$GXX" = yes; then
-              _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -shared -nostdlib -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
-            else
-              # FIXME: insert proper C++ library support
-              _LT_TAGVAR(ld_shlibs, $1)=no
-            fi
-            ;;
-        esac
-        ;;
-
-      hpux10*|hpux11*)
-        if test $with_gnu_ld = no; then
-	  _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir'
-	  _LT_TAGVAR(hardcode_libdir_separator, $1)=:
-
-          case $host_cpu in
-            hppa*64*|ia64*)
-              ;;
-            *)
-	      _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
-              ;;
-          esac
-        fi
-        case $host_cpu in
-          hppa*64*|ia64*)
-            _LT_TAGVAR(hardcode_direct, $1)=no
-            _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
-            ;;
-          *)
-            _LT_TAGVAR(hardcode_direct, $1)=yes
-            _LT_TAGVAR(hardcode_direct_absolute, $1)=yes
-            _LT_TAGVAR(hardcode_minus_L, $1)=yes # Not in the search PATH,
-					         # but as the default
-					         # location of the library.
-            ;;
-        esac
-
-        case $cc_basename in
-          CC*)
-	    # FIXME: insert proper C++ library support
-	    _LT_TAGVAR(ld_shlibs, $1)=no
-	    ;;
-          aCC*)
-	    case $host_cpu in
-	      hppa*64*)
-	        _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
-	        ;;
-	      ia64*)
-	        _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
-	        ;;
-	      *)
-	        _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
-	        ;;
-	    esac
-	    # Commands to make compiler produce verbose output that lists
-	    # what "hidden" libraries, object files and flags are used when
-	    # linking a shared library.
-	    #
-	    # There doesn't appear to be a way to prevent this compiler from
-	    # explicitly linking system object files so we need to strip them
-	    # from the output so that they don't get included in the library
-	    # dependencies.
-	    output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $GREP "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; $ECHO "X$list" | $Xsed'
-	    ;;
-          *)
-	    if test "$GXX" = yes; then
-	      if test $with_gnu_ld = no; then
-	        case $host_cpu in
-	          hppa*64*)
-	            _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
-	            ;;
-	          ia64*)
-	            _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
-	            ;;
-	          *)
-	            _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
-	            ;;
-	        esac
-	      fi
-	    else
-	      # FIXME: insert proper C++ library support
-	      _LT_TAGVAR(ld_shlibs, $1)=no
-	    fi
-	    ;;
-        esac
-        ;;
-
-      interix[[3-9]]*)
-	_LT_TAGVAR(hardcode_direct, $1)=no
-	_LT_TAGVAR(hardcode_shlibpath_var, $1)=no
-	_LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
-	_LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
-	# Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc.
-	# Instead, shared libraries are loaded at an image base (0x10000000 by
-	# default) and relocated if they conflict, which is a slow very memory
-	# consuming and fragmenting process.  To avoid this, we pick a random,
-	# 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link
-	# time.  Moving up from 0x10000000 also allows more sbrk(2) space.
-	_LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
-	_LT_TAGVAR(archive_expsym_cmds, $1)='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
-	;;
-      irix5* | irix6*)
-        case $cc_basename in
-          CC*)
-	    # SGI C++
-	    _LT_TAGVAR(archive_cmds, $1)='$CC -shared -all -multigot $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib'
-
-	    # Archives containing C++ object files must be created using
-	    # "CC -ar", where "CC" is the IRIX C++ compiler.  This is
-	    # necessary to make sure instantiated templates are included
-	    # in the archive.
-	    _LT_TAGVAR(old_archive_cmds, $1)='$CC -ar -WR,-u -o $oldlib $oldobjs'
-	    ;;
-          *)
-	    if test "$GXX" = yes; then
-	      if test "$with_gnu_ld" = no; then
-	        _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
-	      else
-	        _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` -o $lib'
-	      fi
-	    fi
-	    _LT_TAGVAR(link_all_deplibs, $1)=yes
-	    ;;
-        esac
-        _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
-        _LT_TAGVAR(hardcode_libdir_separator, $1)=:
-        _LT_TAGVAR(inherit_rpath, $1)=yes
-        ;;
-
-      linux* | k*bsd*-gnu)
-        case $cc_basename in
-          KCC*)
-	    # Kuck and Associates, Inc. (KAI) C++ Compiler
-
-	    # KCC will only create a shared library if the output file
-	    # ends with ".so" (or ".sl" for HP-UX), so rename the library
-	    # to its proper name (with version) after linking.
-	    _LT_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib'
-	    _LT_TAGVAR(archive_expsym_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib ${wl}-retain-symbols-file,$export_symbols; mv \$templib $lib'
-	    # Commands to make compiler produce verbose output that lists
-	    # what "hidden" libraries, object files and flags are used when
-	    # linking a shared library.
-	    #
-	    # There doesn't appear to be a way to prevent this compiler from
-	    # explicitly linking system object files so we need to strip them
-	    # from the output so that they don't get included in the library
-	    # dependencies.
-	    output_verbose_link_cmd='templist=`$CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 | $GREP "ld"`; rm -f libconftest$shared_ext; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; $ECHO "X$list" | $Xsed'
-
-	    _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
-	    _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic'
-
-	    # Archives containing C++ object files must be created using
-	    # "CC -Bstatic", where "CC" is the KAI C++ compiler.
-	    _LT_TAGVAR(old_archive_cmds, $1)='$CC -Bstatic -o $oldlib $oldobjs'
-	    ;;
-	  icpc* | ecpc* )
-	    # Intel C++
-	    with_gnu_ld=yes
-	    # version 8.0 and above of icpc choke on multiply defined symbols
-	    # if we add $predep_objects and $postdep_objects, however 7.1 and
-	    # earlier do not add the objects themselves.
-	    case `$CC -V 2>&1` in
-	      *"Version 7."*)
-	        _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib'
-		_LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
-		;;
-	      *)  # Version 8.0 or newer
-	        tmp_idyn=
-	        case $host_cpu in
-		  ia64*) tmp_idyn=' -i_dynamic';;
-		esac
-	        _LT_TAGVAR(archive_cmds, $1)='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
-		_LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
-		;;
-	    esac
-	    _LT_TAGVAR(archive_cmds_need_lc, $1)=no
-	    _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
-	    _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic'
-	    _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive$convenience ${wl}--no-whole-archive'
-	    ;;
-          pgCC* | pgcpp*)
-            # Portland Group C++ compiler
-	    case `$CC -V` in
-	    *pgCC\ [[1-5]]* | *pgcpp\ [[1-5]]*)
-	      _LT_TAGVAR(prelink_cmds, $1)='tpldir=Template.dir~
-		rm -rf $tpldir~
-		$CC --prelink_objects --instantiation_dir $tpldir $objs $libobjs $compile_deplibs~
-		compile_command="$compile_command `find $tpldir -name \*.o | $NL2SP`"'
-	      _LT_TAGVAR(old_archive_cmds, $1)='tpldir=Template.dir~
-		rm -rf $tpldir~
-		$CC --prelink_objects --instantiation_dir $tpldir $oldobjs$old_deplibs~
-		$AR $AR_FLAGS $oldlib$oldobjs$old_deplibs `find $tpldir -name \*.o | $NL2SP`~
-		$RANLIB $oldlib'
-	      _LT_TAGVAR(archive_cmds, $1)='tpldir=Template.dir~
-		rm -rf $tpldir~
-		$CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~
-		$CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | $NL2SP` $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib'
-	      _LT_TAGVAR(archive_expsym_cmds, $1)='tpldir=Template.dir~
-		rm -rf $tpldir~
-		$CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~
-		$CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | $NL2SP` $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib'
-	      ;;
-	    *) # Version 6 will use weak symbols
-	      _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib'
-	      _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib'
-	      ;;
-	    esac
-
-	    _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}--rpath ${wl}$libdir'
-	    _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic'
-	    _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test  -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive'
-            ;;
-	  cxx*)
-	    # Compaq C++
-	    _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib'
-	    _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname  -o $lib ${wl}-retain-symbols-file $wl$export_symbols'
-
-	    runpath_var=LD_RUN_PATH
-	    _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir'
-	    _LT_TAGVAR(hardcode_libdir_separator, $1)=:
-
-	    # Commands to make compiler produce verbose output that lists
-	    # what "hidden" libraries, object files and flags are used when
-	    # linking a shared library.
-	    #
-	    # There doesn't appear to be a way to prevent this compiler from
-	    # explicitly linking system object files so we need to strip them
-	    # from the output so that they don't get included in the library
-	    # dependencies.
-	    output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld"`; templist=`$ECHO "X$templist" | $Xsed -e "s/\(^.*ld.*\)\( .*ld .*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; $ECHO "X$list" | $Xsed'
-	    ;;
-	  xl*)
-	    # IBM XL 8.0 on PPC, with GNU ld
-	    _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
-	    _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic'
-	    _LT_TAGVAR(archive_cmds, $1)='$CC -qmkshrobj $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
-	    if test "x$supports_anon_versioning" = xyes; then
-	      _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~
-		cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~
-		echo "local: *; };" >> $output_objdir/$libname.ver~
-		$CC -qmkshrobj $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib'
-	    fi
-	    ;;
-	  *)
-	    case `$CC -V 2>&1 | sed 5q` in
-	    *Sun\ C*)
-	      # Sun C++ 5.9
-	      _LT_TAGVAR(no_undefined_flag, $1)=' -zdefs'
-	      _LT_TAGVAR(archive_cmds, $1)='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
-	      _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file ${wl}$export_symbols'
-	      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
-	      _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive'
-	      _LT_TAGVAR(compiler_needs_object, $1)=yes
-
-	      # Not sure whether something based on
-	      # $CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1
-	      # would be better.
-	      output_verbose_link_cmd='echo'
-
-	      # Archives containing C++ object files must be created using
-	      # "CC -xar", where "CC" is the Sun C++ compiler.  This is
-	      # necessary to make sure instantiated templates are included
-	      # in the archive.
-	      _LT_TAGVAR(old_archive_cmds, $1)='$CC -xar -o $oldlib $oldobjs'
-	      ;;
-	    esac
-	    ;;
-	esac
-	;;
-
-      lynxos*)
-        # FIXME: insert proper C++ library support
-	_LT_TAGVAR(ld_shlibs, $1)=no
-	;;
-
-      m88k*)
-        # FIXME: insert proper C++ library support
-        _LT_TAGVAR(ld_shlibs, $1)=no
-	;;
-
-      mvs*)
-        case $cc_basename in
-          cxx*)
-	    # FIXME: insert proper C++ library support
-	    _LT_TAGVAR(ld_shlibs, $1)=no
-	    ;;
-	  *)
-	    # FIXME: insert proper C++ library support
-	    _LT_TAGVAR(ld_shlibs, $1)=no
-	    ;;
-	esac
-	;;
-
-      netbsd*)
-        if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then
-	  _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable  -o $lib $predep_objects $libobjs $deplibs $postdep_objects $linker_flags'
-	  wlarc=
-	  _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
-	  _LT_TAGVAR(hardcode_direct, $1)=yes
-	  _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
-	fi
-	# Workaround some broken pre-1.5 toolchains
-	output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP conftest.$objext | $SED -e "s:-lgcc -lc -lgcc::"'
-	;;
-
-      *nto* | *qnx*)
-        _LT_TAGVAR(ld_shlibs, $1)=yes
-	;;
-
-      openbsd2*)
-        # C++ shared libraries are fairly broken
-	_LT_TAGVAR(ld_shlibs, $1)=no
-	;;
-
-      openbsd*)
-	if test -f /usr/libexec/ld.so; then
-	  _LT_TAGVAR(hardcode_direct, $1)=yes
-	  _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
-	  _LT_TAGVAR(hardcode_direct_absolute, $1)=yes
-	  _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib'
-	  _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
-	  if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
-	    _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file,$export_symbols -o $lib'
-	    _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
-	    _LT_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive'
-	  fi
-	  output_verbose_link_cmd=echo
-	else
-	  _LT_TAGVAR(ld_shlibs, $1)=no
-	fi
-	;;
-
-      osf3* | osf4* | osf5*)
-        case $cc_basename in
-          KCC*)
-	    # Kuck and Associates, Inc. (KAI) C++ Compiler
-
-	    # KCC will only create a shared library if the output file
-	    # ends with ".so" (or ".sl" for HP-UX), so rename the library
-	    # to its proper name (with version) after linking.
-	    _LT_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo "$lib" | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib'
-
-	    _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
-	    _LT_TAGVAR(hardcode_libdir_separator, $1)=:
-
-	    # Archives containing C++ object files must be created using
-	    # the KAI C++ compiler.
-	    case $host in
-	      osf3*) _LT_TAGVAR(old_archive_cmds, $1)='$CC -Bstatic -o $oldlib $oldobjs' ;;
-	      *) _LT_TAGVAR(old_archive_cmds, $1)='$CC -o $oldlib $oldobjs' ;;
-	    esac
-	    ;;
-          RCC*)
-	    # Rational C++ 2.4.1
-	    # FIXME: insert proper C++ library support
-	    _LT_TAGVAR(ld_shlibs, $1)=no
-	    ;;
-          cxx*)
-	    case $host in
-	      osf3*)
-	        _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*'
-	        _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $soname `test -n "$verstring" && $ECHO "X${wl}-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib'
-	        _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
-		;;
-	      *)
-	        _LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*'
-	        _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib'
-	        _LT_TAGVAR(archive_expsym_cmds, $1)='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done~
-	          echo "-hidden">> $lib.exp~
-	          $CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname ${wl}-input ${wl}$lib.exp  `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib~
-	          $RM $lib.exp'
-	        _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir'
-		;;
-	    esac
-
-	    _LT_TAGVAR(hardcode_libdir_separator, $1)=:
-
-	    # Commands to make compiler produce verbose output that lists
-	    # what "hidden" libraries, object files and flags are used when
-	    # linking a shared library.
-	    #
-	    # There doesn't appear to be a way to prevent this compiler from
-	    # explicitly linking system object files so we need to strip them
-	    # from the output so that they don't get included in the library
-	    # dependencies.
-	    output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld" | $GREP -v "ld:"`; templist=`$ECHO "X$templist" | $Xsed -e "s/\(^.*ld.*\)\( .*ld.*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; $ECHO "X$list" | $Xsed'
-	    ;;
-	  *)
-	    if test "$GXX" = yes && test "$with_gnu_ld" = no; then
-	      _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*'
-	      case $host in
-	        osf3*)
-	          _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
-		  ;;
-	        *)
-	          _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
-		  ;;
-	      esac
-
-	      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
-	      _LT_TAGVAR(hardcode_libdir_separator, $1)=:
-
-	      # Commands to make compiler produce verbose output that lists
-	      # what "hidden" libraries, object files and flags are used when
-	      # linking a shared library.
-	      output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "\-L"'
-
-	    else
-	      # FIXME: insert proper C++ library support
-	      _LT_TAGVAR(ld_shlibs, $1)=no
-	    fi
-	    ;;
-        esac
-        ;;
-
-      psos*)
-        # FIXME: insert proper C++ library support
-        _LT_TAGVAR(ld_shlibs, $1)=no
-        ;;
-
-      sunos4*)
-        case $cc_basename in
-          CC*)
-	    # Sun C++ 4.x
-	    # FIXME: insert proper C++ library support
-	    _LT_TAGVAR(ld_shlibs, $1)=no
-	    ;;
-          lcc*)
-	    # Lucid
-	    # FIXME: insert proper C++ library support
-	    _LT_TAGVAR(ld_shlibs, $1)=no
-	    ;;
-          *)
-	    # FIXME: insert proper C++ library support
-	    _LT_TAGVAR(ld_shlibs, $1)=no
-	    ;;
-        esac
-        ;;
-
-      solaris*)
-        case $cc_basename in
-          CC*)
-	    # Sun C++ 4.2, 5.x and Centerline C++
-            _LT_TAGVAR(archive_cmds_need_lc,$1)=yes
-	    _LT_TAGVAR(no_undefined_flag, $1)=' -zdefs'
-	    _LT_TAGVAR(archive_cmds, $1)='$CC -G${allow_undefined_flag}  -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
-	    _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
-	      $CC -G${allow_undefined_flag} ${wl}-M ${wl}$lib.exp -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp'
-
-	    _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
-	    _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
-	    case $host_os in
-	      solaris2.[[0-5]] | solaris2.[[0-5]].*) ;;
-	      *)
-		# The compiler driver will combine and reorder linker options,
-		# but understands `-z linker_flag'.
-	        # Supported since Solaris 2.6 (maybe 2.5.1?)
-		_LT_TAGVAR(whole_archive_flag_spec, $1)='-z allextract$convenience -z defaultextract'
-	        ;;
-	    esac
-	    _LT_TAGVAR(link_all_deplibs, $1)=yes
-
-	    output_verbose_link_cmd='echo'
-
-	    # Archives containing C++ object files must be created using
-	    # "CC -xar", where "CC" is the Sun C++ compiler.  This is
-	    # necessary to make sure instantiated templates are included
-	    # in the archive.
-	    _LT_TAGVAR(old_archive_cmds, $1)='$CC -xar -o $oldlib $oldobjs'
-	    ;;
-          gcx*)
-	    # Green Hills C++ Compiler
-	    _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib'
-
-	    # The C++ compiler must be used to create the archive.
-	    _LT_TAGVAR(old_archive_cmds, $1)='$CC $LDFLAGS -archive -o $oldlib $oldobjs'
-	    ;;
-          *)
-	    # GNU C++ compiler with Solaris linker
-	    if test "$GXX" = yes && test "$with_gnu_ld" = no; then
-	      _LT_TAGVAR(no_undefined_flag, $1)=' ${wl}-z ${wl}defs'
-	      if $CC --version | $GREP -v '^2\.7' > /dev/null; then
-	        _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib'
-	        _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
-		  $CC -shared -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp'
-
-	        # Commands to make compiler produce verbose output that lists
-	        # what "hidden" libraries, object files and flags are used when
-	        # linking a shared library.
-	        output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "\-L"'
-	      else
-	        # g++ 2.7 appears to require `-G' NOT `-shared' on this
-	        # platform.
-	        _LT_TAGVAR(archive_cmds, $1)='$CC -G -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib'
-	        _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
-		  $CC -G -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp'
-
-	        # Commands to make compiler produce verbose output that lists
-	        # what "hidden" libraries, object files and flags are used when
-	        # linking a shared library.
-	        output_verbose_link_cmd='$CC -G $CFLAGS -v conftest.$objext 2>&1 | $GREP "\-L"'
-	      fi
-
-	      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $wl$libdir'
-	      case $host_os in
-		solaris2.[[0-5]] | solaris2.[[0-5]].*) ;;
-		*)
-		  _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract'
-		  ;;
-	      esac
-	    fi
-	    ;;
-        esac
-        ;;
-
-    sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[[01]].[[10]]* | unixware7* | sco3.2v5.0.[[024]]*)
-      _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text'
-      _LT_TAGVAR(archive_cmds_need_lc, $1)=no
-      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
-      runpath_var='LD_RUN_PATH'
-
-      case $cc_basename in
-        CC*)
-	  _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
-	  _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
-	  ;;
-	*)
-	  _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
-	  _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
-	  ;;
-      esac
-      ;;
-
-      sysv5* | sco3.2v5* | sco5v6*)
-	# Note: We can NOT use -z defs as we might desire, because we do not
-	# link with -lc, and that would cause any symbols used from libc to
-	# always be unresolved, which means just about no library would
-	# ever link correctly.  If we're not using GNU ld we use -z text
-	# though, which does catch some bad symbols but isn't as heavy-handed
-	# as -z defs.
-	_LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text'
-	_LT_TAGVAR(allow_undefined_flag, $1)='${wl}-z,nodefs'
-	_LT_TAGVAR(archive_cmds_need_lc, $1)=no
-	_LT_TAGVAR(hardcode_shlibpath_var, $1)=no
-	_LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R,$libdir'
-	_LT_TAGVAR(hardcode_libdir_separator, $1)=':'
-	_LT_TAGVAR(link_all_deplibs, $1)=yes
-	_LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-Bexport'
-	runpath_var='LD_RUN_PATH'
-
-	case $cc_basename in
-          CC*)
-	    _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
-	    _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
-	    ;;
-	  *)
-	    _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
-	    _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
-	    ;;
-	esac
-      ;;
-
-      tandem*)
-        case $cc_basename in
-          NCC*)
-	    # NonStop-UX NCC 3.20
-	    # FIXME: insert proper C++ library support
-	    _LT_TAGVAR(ld_shlibs, $1)=no
-	    ;;
-          *)
-	    # FIXME: insert proper C++ library support
-	    _LT_TAGVAR(ld_shlibs, $1)=no
-	    ;;
-        esac
-        ;;
-
-      vxworks*)
-        # FIXME: insert proper C++ library support
-        _LT_TAGVAR(ld_shlibs, $1)=no
-        ;;
-
-      *)
-        # FIXME: insert proper C++ library support
-        _LT_TAGVAR(ld_shlibs, $1)=no
-        ;;
-    esac
-
-    AC_MSG_RESULT([$_LT_TAGVAR(ld_shlibs, $1)])
-    test "$_LT_TAGVAR(ld_shlibs, $1)" = no && can_build_shared=no
-
-    _LT_TAGVAR(GCC, $1)="$GXX"
-    _LT_TAGVAR(LD, $1)="$LD"
-
-    ## CAVEAT EMPTOR:
-    ## There is no encapsulation within the following macros, do not change
-    ## the running order or otherwise move them around unless you know exactly
-    ## what you are doing...
-    _LT_SYS_HIDDEN_LIBDEPS($1)
-    _LT_COMPILER_PIC($1)
-    _LT_COMPILER_C_O($1)
-    _LT_COMPILER_FILE_LOCKS($1)
-    _LT_LINKER_SHLIBS($1)
-    _LT_SYS_DYNAMIC_LINKER($1)
-    _LT_LINKER_HARDCODE_LIBPATH($1)
-
-    _LT_CONFIG($1)
-  fi # test -n "$compiler"
-
-  CC=$lt_save_CC
-  LDCXX=$LD
-  LD=$lt_save_LD
-  GCC=$lt_save_GCC
-  with_gnu_ld=$lt_save_with_gnu_ld
-  lt_cv_path_LDCXX=$lt_cv_path_LD
-  lt_cv_path_LD=$lt_save_path_LD
-  lt_cv_prog_gnu_ldcxx=$lt_cv_prog_gnu_ld
-  lt_cv_prog_gnu_ld=$lt_save_with_gnu_ld
-fi # test "$_lt_caught_CXX_error" != yes
-
-AC_LANG_POP
-])# _LT_LANG_CXX_CONFIG
-
-
-# _LT_SYS_HIDDEN_LIBDEPS([TAGNAME])
-# ---------------------------------
-# Figure out "hidden" library dependencies from verbose
-# compiler output when linking a shared library.
-# Parse the compiler output and extract the necessary
-# objects, libraries and library flags.
-m4_defun([_LT_SYS_HIDDEN_LIBDEPS],
-[m4_require([_LT_FILEUTILS_DEFAULTS])dnl
-# Dependencies to place before and after the object being linked:
-_LT_TAGVAR(predep_objects, $1)=
-_LT_TAGVAR(postdep_objects, $1)=
-_LT_TAGVAR(predeps, $1)=
-_LT_TAGVAR(postdeps, $1)=
-_LT_TAGVAR(compiler_lib_search_path, $1)=
-
-dnl we can't use the lt_simple_compile_test_code here,
-dnl because it contains code intended for an executable,
-dnl not a library.  It's possible we should let each
-dnl tag define a new lt_????_link_test_code variable,
-dnl but it's only used here...
-m4_if([$1], [], [cat > conftest.$ac_ext <<_LT_EOF
-int a;
-void foo (void) { a = 0; }
-_LT_EOF
-], [$1], [CXX], [cat > conftest.$ac_ext <<_LT_EOF
-class Foo
-{
-public:
-  Foo (void) { a = 0; }
-private:
-  int a;
-};
-_LT_EOF
-], [$1], [F77], [cat > conftest.$ac_ext <<_LT_EOF
-      subroutine foo
-      implicit none
-      integer*4 a
-      a=0
-      return
-      end
-_LT_EOF
-], [$1], [FC], [cat > conftest.$ac_ext <<_LT_EOF
-      subroutine foo
-      implicit none
-      integer a
-      a=0
-      return
-      end
-_LT_EOF
-], [$1], [GCJ], [cat > conftest.$ac_ext <<_LT_EOF
-public class foo {
-  private int a;
-  public void bar (void) {
-    a = 0;
-  }
-};
-_LT_EOF
-])
-dnl Parse the compiler output and extract the necessary
-dnl objects, libraries and library flags.
-if AC_TRY_EVAL(ac_compile); then
-  # Parse the compiler output and extract the necessary
-  # objects, libraries and library flags.
-
-  # Sentinel used to keep track of whether or not we are before
-  # the conftest object file.
-  pre_test_object_deps_done=no
-
-  for p in `eval "$output_verbose_link_cmd"`; do
-    case $p in
-
-    -L* | -R* | -l*)
-       # Some compilers place space between "-{L,R}" and the path.
-       # Remove the space.
-       if test $p = "-L" ||
-          test $p = "-R"; then
-	 prev=$p
-	 continue
-       else
-	 prev=
-       fi
-
-       if test "$pre_test_object_deps_done" = no; then
-	 case $p in
-	 -L* | -R*)
-	   # Internal compiler library paths should come after those
-	   # provided the user.  The postdeps already come after the
-	   # user supplied libs so there is no need to process them.
-	   if test -z "$_LT_TAGVAR(compiler_lib_search_path, $1)"; then
-	     _LT_TAGVAR(compiler_lib_search_path, $1)="${prev}${p}"
-	   else
-	     _LT_TAGVAR(compiler_lib_search_path, $1)="${_LT_TAGVAR(compiler_lib_search_path, $1)} ${prev}${p}"
-	   fi
-	   ;;
-	 # The "-l" case would never come before the object being
-	 # linked, so don't bother handling this case.
-	 esac
-       else
-	 if test -z "$_LT_TAGVAR(postdeps, $1)"; then
-	   _LT_TAGVAR(postdeps, $1)="${prev}${p}"
-	 else
-	   _LT_TAGVAR(postdeps, $1)="${_LT_TAGVAR(postdeps, $1)} ${prev}${p}"
-	 fi
-       fi
-       ;;
-
-    *.$objext)
-       # This assumes that the test object file only shows up
-       # once in the compiler output.
-       if test "$p" = "conftest.$objext"; then
-	 pre_test_object_deps_done=yes
-	 continue
-       fi
-
-       if test "$pre_test_object_deps_done" = no; then
-	 if test -z "$_LT_TAGVAR(predep_objects, $1)"; then
-	   _LT_TAGVAR(predep_objects, $1)="$p"
-	 else
-	   _LT_TAGVAR(predep_objects, $1)="$_LT_TAGVAR(predep_objects, $1) $p"
-	 fi
-       else
-	 if test -z "$_LT_TAGVAR(postdep_objects, $1)"; then
-	   _LT_TAGVAR(postdep_objects, $1)="$p"
-	 else
-	   _LT_TAGVAR(postdep_objects, $1)="$_LT_TAGVAR(postdep_objects, $1) $p"
-	 fi
-       fi
-       ;;
-
-    *) ;; # Ignore the rest.
-
-    esac
-  done
-
-  # Clean up.
-  rm -f a.out a.exe
-else
-  echo "libtool.m4: error: problem compiling $1 test program"
-fi
-
-$RM -f confest.$objext
-
-# PORTME: override above test on systems where it is broken
-m4_if([$1], [CXX],
-[case $host_os in
-interix[[3-9]]*)
-  # Interix 3.5 installs completely hosed .la files for C++, so rather than
-  # hack all around it, let's just trust "g++" to DTRT.
-  _LT_TAGVAR(predep_objects,$1)=
-  _LT_TAGVAR(postdep_objects,$1)=
-  _LT_TAGVAR(postdeps,$1)=
-  ;;
-
-linux*)
-  case `$CC -V 2>&1 | sed 5q` in
-  *Sun\ C*)
-    # Sun C++ 5.9
-
-    # The more standards-conforming stlport4 library is
-    # incompatible with the Cstd library. Avoid specifying
-    # it if it's in CXXFLAGS. Ignore libCrun as
-    # -library=stlport4 depends on it.
-    case " $CXX $CXXFLAGS " in
-    *" -library=stlport4 "*)
-      solaris_use_stlport4=yes
-      ;;
-    esac
-
-    if test "$solaris_use_stlport4" != yes; then
-      _LT_TAGVAR(postdeps,$1)='-library=Cstd -library=Crun'
-    fi
-    ;;
-  esac
-  ;;
-
-solaris*)
-  case $cc_basename in
-  CC*)
-    # The more standards-conforming stlport4 library is
-    # incompatible with the Cstd library. Avoid specifying
-    # it if it's in CXXFLAGS. Ignore libCrun as
-    # -library=stlport4 depends on it.
-    case " $CXX $CXXFLAGS " in
-    *" -library=stlport4 "*)
-      solaris_use_stlport4=yes
-      ;;
-    esac
-
-    # Adding this requires a known-good setup of shared libraries for
-    # Sun compiler versions before 5.6, else PIC objects from an old
-    # archive will be linked into the output, leading to subtle bugs.
-    if test "$solaris_use_stlport4" != yes; then
-      _LT_TAGVAR(postdeps,$1)='-library=Cstd -library=Crun'
-    fi
-    ;;
-  esac
-  ;;
-esac
-])
-
-case " $_LT_TAGVAR(postdeps, $1) " in
-*" -lc "*) _LT_TAGVAR(archive_cmds_need_lc, $1)=no ;;
-esac
- _LT_TAGVAR(compiler_lib_search_dirs, $1)=
-if test -n "${_LT_TAGVAR(compiler_lib_search_path, $1)}"; then
- _LT_TAGVAR(compiler_lib_search_dirs, $1)=`echo " ${_LT_TAGVAR(compiler_lib_search_path, $1)}" | ${SED} -e 's! -L! !g' -e 's!^ !!'`
-fi
-_LT_TAGDECL([], [compiler_lib_search_dirs], [1],
-    [The directories searched by this compiler when creating a shared library])
-_LT_TAGDECL([], [predep_objects], [1],
-    [Dependencies to place before and after the objects being linked to
-    create a shared library])
-_LT_TAGDECL([], [postdep_objects], [1])
-_LT_TAGDECL([], [predeps], [1])
-_LT_TAGDECL([], [postdeps], [1])
-_LT_TAGDECL([], [compiler_lib_search_path], [1],
-    [The library search path used internally by the compiler when linking
-    a shared library])
-])# _LT_SYS_HIDDEN_LIBDEPS
-
-
-# _LT_PROG_F77
-# ------------
-# Since AC_PROG_F77 is broken, in that it returns the empty string
-# if there is no fortran compiler, we have our own version here.
-m4_defun([_LT_PROG_F77],
-[
-pushdef([AC_MSG_ERROR], [_lt_disable_F77=yes])
-AC_PROG_F77
-if test -z "$F77" || test "X$F77" = "Xno"; then
-  _lt_disable_F77=yes
-fi
-popdef([AC_MSG_ERROR])
-])# _LT_PROG_F77
-
-dnl aclocal-1.4 backwards compatibility:
-dnl AC_DEFUN([_LT_PROG_F77], [])
-
-
-# _LT_LANG_F77_CONFIG([TAG])
-# --------------------------
-# Ensure that the configuration variables for a Fortran 77 compiler are
-# suitably defined.  These variables are subsequently used by _LT_CONFIG
-# to write the compiler configuration to `libtool'.
-m4_defun([_LT_LANG_F77_CONFIG],
-[AC_REQUIRE([_LT_PROG_F77])dnl
-AC_LANG_PUSH(Fortran 77)
-
-_LT_TAGVAR(archive_cmds_need_lc, $1)=no
-_LT_TAGVAR(allow_undefined_flag, $1)=
-_LT_TAGVAR(always_export_symbols, $1)=no
-_LT_TAGVAR(archive_expsym_cmds, $1)=
-_LT_TAGVAR(export_dynamic_flag_spec, $1)=
-_LT_TAGVAR(hardcode_direct, $1)=no
-_LT_TAGVAR(hardcode_direct_absolute, $1)=no
-_LT_TAGVAR(hardcode_libdir_flag_spec, $1)=
-_LT_TAGVAR(hardcode_libdir_flag_spec_ld, $1)=
-_LT_TAGVAR(hardcode_libdir_separator, $1)=
-_LT_TAGVAR(hardcode_minus_L, $1)=no
-_LT_TAGVAR(hardcode_automatic, $1)=no
-_LT_TAGVAR(inherit_rpath, $1)=no
-_LT_TAGVAR(module_cmds, $1)=
-_LT_TAGVAR(module_expsym_cmds, $1)=
-_LT_TAGVAR(link_all_deplibs, $1)=unknown
-_LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds
-_LT_TAGVAR(no_undefined_flag, $1)=
-_LT_TAGVAR(whole_archive_flag_spec, $1)=
-_LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no
-
-# Source file extension for f77 test sources.
-ac_ext=f
-
-# Object file extension for compiled f77 test sources.
-objext=o
-_LT_TAGVAR(objext, $1)=$objext
-
-# No sense in running all these tests if we already determined that
-# the F77 compiler isn't working.  Some variables (like enable_shared)
-# are currently assumed to apply to all compilers on this platform,
-# and will be corrupted by setting them based on a non-working compiler.
-if test "$_lt_disable_F77" != yes; then
-  # Code to be used in simple compile tests
-  lt_simple_compile_test_code="\
-      subroutine t
-      return
-      end
-"
-
-  # Code to be used in simple link tests
-  lt_simple_link_test_code="\
-      program t
-      end
-"
-
-  # ltmain only uses $CC for tagged configurations so make sure $CC is set.
-  _LT_TAG_COMPILER
-
-  # save warnings/boilerplate of simple test code
-  _LT_COMPILER_BOILERPLATE
-  _LT_LINKER_BOILERPLATE
-
-  # Allow CC to be a program name with arguments.
-  lt_save_CC="$CC"
-  lt_save_GCC=$GCC
-  CC=${F77-"f77"}
-  compiler=$CC
-  _LT_TAGVAR(compiler, $1)=$CC
-  _LT_CC_BASENAME([$compiler])
-  GCC=$G77
-  if test -n "$compiler"; then
-    AC_MSG_CHECKING([if libtool supports shared libraries])
-    AC_MSG_RESULT([$can_build_shared])
-
-    AC_MSG_CHECKING([whether to build shared libraries])
-    test "$can_build_shared" = "no" && enable_shared=no
-
-    # On AIX, shared libraries and static libraries use the same namespace, and
-    # are all built from PIC.
-    case $host_os in
-      aix3*)
-        test "$enable_shared" = yes && enable_static=no
-        if test -n "$RANLIB"; then
-          archive_cmds="$archive_cmds~\$RANLIB \$lib"
-          postinstall_cmds='$RANLIB $lib'
-        fi
-        ;;
-      aix[[4-9]]*)
-	if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then
-	  test "$enable_shared" = yes && enable_static=no
-	fi
-        ;;
-    esac
-    AC_MSG_RESULT([$enable_shared])
-
-    AC_MSG_CHECKING([whether to build static libraries])
-    # Make sure either enable_shared or enable_static is yes.
-    test "$enable_shared" = yes || enable_static=yes
-    AC_MSG_RESULT([$enable_static])
-
-    _LT_TAGVAR(GCC, $1)="$G77"
-    _LT_TAGVAR(LD, $1)="$LD"
-
-    ## CAVEAT EMPTOR:
-    ## There is no encapsulation within the following macros, do not change
-    ## the running order or otherwise move them around unless you know exactly
-    ## what you are doing...
-    _LT_COMPILER_PIC($1)
-    _LT_COMPILER_C_O($1)
-    _LT_COMPILER_FILE_LOCKS($1)
-    _LT_LINKER_SHLIBS($1)
-    _LT_SYS_DYNAMIC_LINKER($1)
-    _LT_LINKER_HARDCODE_LIBPATH($1)
-
-    _LT_CONFIG($1)
-  fi # test -n "$compiler"
-
-  GCC=$lt_save_GCC
-  CC="$lt_save_CC"
-fi # test "$_lt_disable_F77" != yes
-
-AC_LANG_POP
-])# _LT_LANG_F77_CONFIG
-
-
-# _LT_PROG_FC
-# -----------
-# Since AC_PROG_FC is broken, in that it returns the empty string
-# if there is no fortran compiler, we have our own version here.
-m4_defun([_LT_PROG_FC],
-[
-pushdef([AC_MSG_ERROR], [_lt_disable_FC=yes])
-AC_PROG_FC
-if test -z "$FC" || test "X$FC" = "Xno"; then
-  _lt_disable_FC=yes
-fi
-popdef([AC_MSG_ERROR])
-])# _LT_PROG_FC
-
-dnl aclocal-1.4 backwards compatibility:
-dnl AC_DEFUN([_LT_PROG_FC], [])
-
-
-# _LT_LANG_FC_CONFIG([TAG])
-# -------------------------
-# Ensure that the configuration variables for a Fortran compiler are
-# suitably defined.  These variables are subsequently used by _LT_CONFIG
-# to write the compiler configuration to `libtool'.
-m4_defun([_LT_LANG_FC_CONFIG],
-[AC_REQUIRE([_LT_PROG_FC])dnl
-AC_LANG_PUSH(Fortran)
-
-_LT_TAGVAR(archive_cmds_need_lc, $1)=no
-_LT_TAGVAR(allow_undefined_flag, $1)=
-_LT_TAGVAR(always_export_symbols, $1)=no
-_LT_TAGVAR(archive_expsym_cmds, $1)=
-_LT_TAGVAR(export_dynamic_flag_spec, $1)=
-_LT_TAGVAR(hardcode_direct, $1)=no
-_LT_TAGVAR(hardcode_direct_absolute, $1)=no
-_LT_TAGVAR(hardcode_libdir_flag_spec, $1)=
-_LT_TAGVAR(hardcode_libdir_flag_spec_ld, $1)=
-_LT_TAGVAR(hardcode_libdir_separator, $1)=
-_LT_TAGVAR(hardcode_minus_L, $1)=no
-_LT_TAGVAR(hardcode_automatic, $1)=no
-_LT_TAGVAR(inherit_rpath, $1)=no
-_LT_TAGVAR(module_cmds, $1)=
-_LT_TAGVAR(module_expsym_cmds, $1)=
-_LT_TAGVAR(link_all_deplibs, $1)=unknown
-_LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds
-_LT_TAGVAR(no_undefined_flag, $1)=
-_LT_TAGVAR(whole_archive_flag_spec, $1)=
-_LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no
-
-# Source file extension for fc test sources.
-ac_ext=${ac_fc_srcext-f}
-
-# Object file extension for compiled fc test sources.
-objext=o
-_LT_TAGVAR(objext, $1)=$objext
-
-# No sense in running all these tests if we already determined that
-# the FC compiler isn't working.  Some variables (like enable_shared)
-# are currently assumed to apply to all compilers on this platform,
-# and will be corrupted by setting them based on a non-working compiler.
-if test "$_lt_disable_FC" != yes; then
-  # Code to be used in simple compile tests
-  lt_simple_compile_test_code="\
-      subroutine t
-      return
-      end
-"
-
-  # Code to be used in simple link tests
-  lt_simple_link_test_code="\
-      program t
-      end
-"
-
-  # ltmain only uses $CC for tagged configurations so make sure $CC is set.
-  _LT_TAG_COMPILER
-
-  # save warnings/boilerplate of simple test code
-  _LT_COMPILER_BOILERPLATE
-  _LT_LINKER_BOILERPLATE
-
-  # Allow CC to be a program name with arguments.
-  lt_save_CC="$CC"
-  lt_save_GCC=$GCC
-  CC=${FC-"f95"}
-  compiler=$CC
-  GCC=$ac_cv_fc_compiler_gnu
-
-  _LT_TAGVAR(compiler, $1)=$CC
-  _LT_CC_BASENAME([$compiler])
-
-  if test -n "$compiler"; then
-    AC_MSG_CHECKING([if libtool supports shared libraries])
-    AC_MSG_RESULT([$can_build_shared])
-
-    AC_MSG_CHECKING([whether to build shared libraries])
-    test "$can_build_shared" = "no" && enable_shared=no
-
-    # On AIX, shared libraries and static libraries use the same namespace, and
-    # are all built from PIC.
-    case $host_os in
-      aix3*)
-        test "$enable_shared" = yes && enable_static=no
-        if test -n "$RANLIB"; then
-          archive_cmds="$archive_cmds~\$RANLIB \$lib"
-          postinstall_cmds='$RANLIB $lib'
-        fi
-        ;;
-      aix[[4-9]]*)
-	if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then
-	  test "$enable_shared" = yes && enable_static=no
-	fi
-        ;;
-    esac
-    AC_MSG_RESULT([$enable_shared])
-
-    AC_MSG_CHECKING([whether to build static libraries])
-    # Make sure either enable_shared or enable_static is yes.
-    test "$enable_shared" = yes || enable_static=yes
-    AC_MSG_RESULT([$enable_static])
-
-    _LT_TAGVAR(GCC, $1)="$ac_cv_fc_compiler_gnu"
-    _LT_TAGVAR(LD, $1)="$LD"
-
-    ## CAVEAT EMPTOR:
-    ## There is no encapsulation within the following macros, do not change
-    ## the running order or otherwise move them around unless you know exactly
-    ## what you are doing...
-    _LT_SYS_HIDDEN_LIBDEPS($1)
-    _LT_COMPILER_PIC($1)
-    _LT_COMPILER_C_O($1)
-    _LT_COMPILER_FILE_LOCKS($1)
-    _LT_LINKER_SHLIBS($1)
-    _LT_SYS_DYNAMIC_LINKER($1)
-    _LT_LINKER_HARDCODE_LIBPATH($1)
-
-    _LT_CONFIG($1)
-  fi # test -n "$compiler"
-
-  GCC=$lt_save_GCC
-  CC="$lt_save_CC"
-fi # test "$_lt_disable_FC" != yes
-
-AC_LANG_POP
-])# _LT_LANG_FC_CONFIG
-
-
-# _LT_LANG_GCJ_CONFIG([TAG])
-# --------------------------
-# Ensure that the configuration variables for the GNU Java Compiler compiler
-# are suitably defined.  These variables are subsequently used by _LT_CONFIG
-# to write the compiler configuration to `libtool'.
-m4_defun([_LT_LANG_GCJ_CONFIG],
-[AC_REQUIRE([LT_PROG_GCJ])dnl
-AC_LANG_SAVE
-
-# Source file extension for Java test sources.
-ac_ext=java
-
-# Object file extension for compiled Java test sources.
-objext=o
-_LT_TAGVAR(objext, $1)=$objext
-
-# Code to be used in simple compile tests
-lt_simple_compile_test_code="class foo {}"
-
-# Code to be used in simple link tests
-lt_simple_link_test_code='public class conftest { public static void main(String[[]] argv) {}; }'
-
-# ltmain only uses $CC for tagged configurations so make sure $CC is set.
-_LT_TAG_COMPILER
-
-# save warnings/boilerplate of simple test code
-_LT_COMPILER_BOILERPLATE
-_LT_LINKER_BOILERPLATE
-
-# Allow CC to be a program name with arguments.
-lt_save_CC="$CC"
-lt_save_GCC=$GCC
-GCC=yes
-CC=${GCJ-"gcj"}
-compiler=$CC
-_LT_TAGVAR(compiler, $1)=$CC
-_LT_TAGVAR(LD, $1)="$LD"
-_LT_CC_BASENAME([$compiler])
-
-# GCJ did not exist at the time GCC didn't implicitly link libc in.
-_LT_TAGVAR(archive_cmds_need_lc, $1)=no
-
-_LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds
-
-if test -n "$compiler"; then
-  _LT_COMPILER_NO_RTTI($1)
-  _LT_COMPILER_PIC($1)
-  _LT_COMPILER_C_O($1)
-  _LT_COMPILER_FILE_LOCKS($1)
-  _LT_LINKER_SHLIBS($1)
-  _LT_LINKER_HARDCODE_LIBPATH($1)
-
-  _LT_CONFIG($1)
-fi
-
-AC_LANG_RESTORE
-
-GCC=$lt_save_GCC
-CC="$lt_save_CC"
-])# _LT_LANG_GCJ_CONFIG
-
-
-# _LT_LANG_RC_CONFIG([TAG])
-# -------------------------
-# Ensure that the configuration variables for the Windows resource compiler
-# are suitably defined.  These variables are subsequently used by _LT_CONFIG
-# to write the compiler configuration to `libtool'.
-m4_defun([_LT_LANG_RC_CONFIG],
-[AC_REQUIRE([LT_PROG_RC])dnl
-AC_LANG_SAVE
-
-# Source file extension for RC test sources.
-ac_ext=rc
-
-# Object file extension for compiled RC test sources.
-objext=o
-_LT_TAGVAR(objext, $1)=$objext
-
-# Code to be used in simple compile tests
-lt_simple_compile_test_code='sample MENU { MENUITEM "&Soup", 100, CHECKED }'
-
-# Code to be used in simple link tests
-lt_simple_link_test_code="$lt_simple_compile_test_code"
-
-# ltmain only uses $CC for tagged configurations so make sure $CC is set.
-_LT_TAG_COMPILER
-
-# save warnings/boilerplate of simple test code
-_LT_COMPILER_BOILERPLATE
-_LT_LINKER_BOILERPLATE
-
-# Allow CC to be a program name with arguments.
-lt_save_CC="$CC"
-lt_save_GCC=$GCC
-GCC=
-CC=${RC-"windres"}
-compiler=$CC
-_LT_TAGVAR(compiler, $1)=$CC
-_LT_CC_BASENAME([$compiler])
-_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=yes
-
-if test -n "$compiler"; then
-  :
-  _LT_CONFIG($1)
-fi
-
-GCC=$lt_save_GCC
-AC_LANG_RESTORE
-CC="$lt_save_CC"
-])# _LT_LANG_RC_CONFIG
-
-
-# LT_PROG_GCJ
-# -----------
-AC_DEFUN([LT_PROG_GCJ],
-[m4_ifdef([AC_PROG_GCJ], [AC_PROG_GCJ],
-  [m4_ifdef([A][M_PROG_GCJ], [A][M_PROG_GCJ],
-    [AC_CHECK_TOOL(GCJ, gcj,)
-      test "x${GCJFLAGS+set}" = xset || GCJFLAGS="-g -O2"
-      AC_SUBST(GCJFLAGS)])])[]dnl
-])
-
-# Old name:
-AU_ALIAS([LT_AC_PROG_GCJ], [LT_PROG_GCJ])
-dnl aclocal-1.4 backwards compatibility:
-dnl AC_DEFUN([LT_AC_PROG_GCJ], [])
-
-
-# LT_PROG_RC
-# ----------
-AC_DEFUN([LT_PROG_RC],
-[AC_CHECK_TOOL(RC, windres,)
-])
-
-# Old name:
-AU_ALIAS([LT_AC_PROG_RC], [LT_PROG_RC])
-dnl aclocal-1.4 backwards compatibility:
-dnl AC_DEFUN([LT_AC_PROG_RC], [])
-
-
-# _LT_DECL_EGREP
-# --------------
-# If we don't have a new enough Autoconf to choose the best grep
-# available, choose the one first in the user's PATH.
-m4_defun([_LT_DECL_EGREP],
-[AC_REQUIRE([AC_PROG_EGREP])dnl
-AC_REQUIRE([AC_PROG_FGREP])dnl
-test -z "$GREP" && GREP=grep
-_LT_DECL([], [GREP], [1], [A grep program that handles long lines])
-_LT_DECL([], [EGREP], [1], [An ERE matcher])
-_LT_DECL([], [FGREP], [1], [A literal string matcher])
-dnl Non-bleeding-edge autoconf doesn't subst GREP, so do it here too
-AC_SUBST([GREP])
-])
-
-
-# _LT_DECL_OBJDUMP
-# --------------
-# If we don't have a new enough Autoconf to choose the best objdump
-# available, choose the one first in the user's PATH.
-m4_defun([_LT_DECL_OBJDUMP],
-[AC_CHECK_TOOL(OBJDUMP, objdump, false)
-test -z "$OBJDUMP" && OBJDUMP=objdump
-_LT_DECL([], [OBJDUMP], [1], [An object symbol dumper])
-AC_SUBST([OBJDUMP])
-])
-
-
-# _LT_DECL_SED
-# ------------
-# Check for a fully-functional sed program, that truncates
-# as few characters as possible.  Prefer GNU sed if found.
-m4_defun([_LT_DECL_SED],
-[AC_PROG_SED
-test -z "$SED" && SED=sed
-Xsed="$SED -e 1s/^X//"
-_LT_DECL([], [SED], [1], [A sed program that does not truncate output])
-_LT_DECL([], [Xsed], ["\$SED -e 1s/^X//"],
-    [Sed that helps us avoid accidentally triggering echo(1) options like -n])
-])# _LT_DECL_SED
-
-m4_ifndef([AC_PROG_SED], [
-# NOTE: This macro has been submitted for inclusion into   #
-#  GNU Autoconf as AC_PROG_SED.  When it is available in   #
-#  a released version of Autoconf we should remove this    #
-#  macro and use it instead.                               #
-
-m4_defun([AC_PROG_SED],
-[AC_MSG_CHECKING([for a sed that does not truncate output])
-AC_CACHE_VAL(lt_cv_path_SED,
-[# Loop through the user's path and test for sed and gsed.
-# Then use that list of sed's as ones to test for truncation.
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-  for lt_ac_prog in sed gsed; do
-    for ac_exec_ext in '' $ac_executable_extensions; do
-      if $as_executable_p "$as_dir/$lt_ac_prog$ac_exec_ext"; then
-        lt_ac_sed_list="$lt_ac_sed_list $as_dir/$lt_ac_prog$ac_exec_ext"
-      fi
-    done
-  done
-done
-IFS=$as_save_IFS
-lt_ac_max=0
-lt_ac_count=0
-# Add /usr/xpg4/bin/sed as it is typically found on Solaris
-# along with /bin/sed that truncates output.
-for lt_ac_sed in $lt_ac_sed_list /usr/xpg4/bin/sed; do
-  test ! -f $lt_ac_sed && continue
-  cat /dev/null > conftest.in
-  lt_ac_count=0
-  echo $ECHO_N "0123456789$ECHO_C" >conftest.in
-  # Check for GNU sed and select it if it is found.
-  if "$lt_ac_sed" --version 2>&1 < /dev/null | grep 'GNU' > /dev/null; then
-    lt_cv_path_SED=$lt_ac_sed
-    break
-  fi
-  while true; do
-    cat conftest.in conftest.in >conftest.tmp
-    mv conftest.tmp conftest.in
-    cp conftest.in conftest.nl
-    echo >>conftest.nl
-    $lt_ac_sed -e 's/a$//' < conftest.nl >conftest.out || break
-    cmp -s conftest.out conftest.nl || break
-    # 10000 chars as input seems more than enough
-    test $lt_ac_count -gt 10 && break
-    lt_ac_count=`expr $lt_ac_count + 1`
-    if test $lt_ac_count -gt $lt_ac_max; then
-      lt_ac_max=$lt_ac_count
-      lt_cv_path_SED=$lt_ac_sed
-    fi
-  done
-done
-])
-SED=$lt_cv_path_SED
-AC_SUBST([SED])
-AC_MSG_RESULT([$SED])
-])#AC_PROG_SED
-])#m4_ifndef
-
-# Old name:
-AU_ALIAS([LT_AC_PROG_SED], [AC_PROG_SED])
-dnl aclocal-1.4 backwards compatibility:
-dnl AC_DEFUN([LT_AC_PROG_SED], [])
-
-
-# _LT_CHECK_SHELL_FEATURES
-# ------------------------
-# Find out whether the shell is Bourne or XSI compatible,
-# or has some other useful features.
-m4_defun([_LT_CHECK_SHELL_FEATURES],
-[AC_MSG_CHECKING([whether the shell understands some XSI constructs])
-# Try some XSI features
-xsi_shell=no
-( _lt_dummy="a/b/c"
-  test "${_lt_dummy##*/},${_lt_dummy%/*},"${_lt_dummy%"$_lt_dummy"}, \
-      = c,a/b,, \
-    && eval 'test $(( 1 + 1 )) -eq 2 \
-    && test "${#_lt_dummy}" -eq 5' ) >/dev/null 2>&1 \
-  && xsi_shell=yes
-AC_MSG_RESULT([$xsi_shell])
-_LT_CONFIG_LIBTOOL_INIT([xsi_shell='$xsi_shell'])
-
-AC_MSG_CHECKING([whether the shell understands "+="])
-lt_shell_append=no
-( foo=bar; set foo baz; eval "$[1]+=\$[2]" && test "$foo" = barbaz ) \
-    >/dev/null 2>&1 \
-  && lt_shell_append=yes
-AC_MSG_RESULT([$lt_shell_append])
-_LT_CONFIG_LIBTOOL_INIT([lt_shell_append='$lt_shell_append'])
-
-if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then
-  lt_unset=unset
-else
-  lt_unset=false
-fi
-_LT_DECL([], [lt_unset], [0], [whether the shell understands "unset"])dnl
-
-# test EBCDIC or ASCII
-case `echo X|tr X '\101'` in
- A) # ASCII based system
-    # \n is not interpreted correctly by Solaris 8 /usr/ucb/tr
-  lt_SP2NL='tr \040 \012'
-  lt_NL2SP='tr \015\012 \040\040'
-  ;;
- *) # EBCDIC based system
-  lt_SP2NL='tr \100 \n'
-  lt_NL2SP='tr \r\n \100\100'
-  ;;
-esac
-_LT_DECL([SP2NL], [lt_SP2NL], [1], [turn spaces into newlines])dnl
-_LT_DECL([NL2SP], [lt_NL2SP], [1], [turn newlines into spaces])dnl
-])# _LT_CHECK_SHELL_FEATURES
-
-
-# _LT_PROG_XSI_SHELLFNS
-# ---------------------
-# Bourne and XSI compatible variants of some useful shell functions.
-m4_defun([_LT_PROG_XSI_SHELLFNS],
-[case $xsi_shell in
-  yes)
-    cat << \_LT_EOF >> "$cfgfile"
-
-# func_dirname file append nondir_replacement
-# Compute the dirname of FILE.  If nonempty, add APPEND to the result,
-# otherwise set result to NONDIR_REPLACEMENT.
-func_dirname ()
-{
-  case ${1} in
-    */*) func_dirname_result="${1%/*}${2}" ;;
-    *  ) func_dirname_result="${3}" ;;
-  esac
-}
-
-# func_basename file
-func_basename ()
-{
-  func_basename_result="${1##*/}"
-}
-
-# func_dirname_and_basename file append nondir_replacement
-# perform func_basename and func_dirname in a single function
-# call:
-#   dirname:  Compute the dirname of FILE.  If nonempty,
-#             add APPEND to the result, otherwise set result
-#             to NONDIR_REPLACEMENT.
-#             value returned in "$func_dirname_result"
-#   basename: Compute filename of FILE.
-#             value retuned in "$func_basename_result"
-# Implementation must be kept synchronized with func_dirname
-# and func_basename. For efficiency, we do not delegate to
-# those functions but instead duplicate the functionality here.
-func_dirname_and_basename ()
-{
-  case ${1} in
-    */*) func_dirname_result="${1%/*}${2}" ;;
-    *  ) func_dirname_result="${3}" ;;
-  esac
-  func_basename_result="${1##*/}"
-}
-
-# func_stripname prefix suffix name
-# strip PREFIX and SUFFIX off of NAME.
-# PREFIX and SUFFIX must not contain globbing or regex special
-# characters, hashes, percent signs, but SUFFIX may contain a leading
-# dot (in which case that matches only a dot).
-func_stripname ()
-{
-  # pdksh 5.2.14 does not do ${X%$Y} correctly if both X and Y are
-  # positional parameters, so assign one to ordinary parameter first.
-  func_stripname_result=${3}
-  func_stripname_result=${func_stripname_result#"${1}"}
-  func_stripname_result=${func_stripname_result%"${2}"}
-}
-
-# func_opt_split
-func_opt_split ()
-{
-  func_opt_split_opt=${1%%=*}
-  func_opt_split_arg=${1#*=}
-}
-
-# func_lo2o object
-func_lo2o ()
-{
-  case ${1} in
-    *.lo) func_lo2o_result=${1%.lo}.${objext} ;;
-    *)    func_lo2o_result=${1} ;;
-  esac
-}
-
-# func_xform libobj-or-source
-func_xform ()
-{
-  func_xform_result=${1%.*}.lo
-}
-
-# func_arith arithmetic-term...
-func_arith ()
-{
-  func_arith_result=$(( $[*] ))
-}
-
-# func_len string
-# STRING may not start with a hyphen.
-func_len ()
-{
-  func_len_result=${#1}
-}
-
-_LT_EOF
-    ;;
-  *) # Bourne compatible functions.
-    cat << \_LT_EOF >> "$cfgfile"
-
-# func_dirname file append nondir_replacement
-# Compute the dirname of FILE.  If nonempty, add APPEND to the result,
-# otherwise set result to NONDIR_REPLACEMENT.
-func_dirname ()
-{
-  # Extract subdirectory from the argument.
-  func_dirname_result=`$ECHO "X${1}" | $Xsed -e "$dirname"`
-  if test "X$func_dirname_result" = "X${1}"; then
-    func_dirname_result="${3}"
-  else
-    func_dirname_result="$func_dirname_result${2}"
-  fi
-}
-
-# func_basename file
-func_basename ()
-{
-  func_basename_result=`$ECHO "X${1}" | $Xsed -e "$basename"`
-}
-
-dnl func_dirname_and_basename
-dnl A portable version of this function is already defined in general.m4sh
-dnl so there is no need for it here.
-
-# func_stripname prefix suffix name
-# strip PREFIX and SUFFIX off of NAME.
-# PREFIX and SUFFIX must not contain globbing or regex special
-# characters, hashes, percent signs, but SUFFIX may contain a leading
-# dot (in which case that matches only a dot).
-# func_strip_suffix prefix name
-func_stripname ()
-{
-  case ${2} in
-    .*) func_stripname_result=`$ECHO "X${3}" \
-           | $Xsed -e "s%^${1}%%" -e "s%\\\\${2}\$%%"`;;
-    *)  func_stripname_result=`$ECHO "X${3}" \
-           | $Xsed -e "s%^${1}%%" -e "s%${2}\$%%"`;;
-  esac
-}
-
-# sed scripts:
-my_sed_long_opt='1s/^\(-[[^=]]*\)=.*/\1/;q'
-my_sed_long_arg='1s/^-[[^=]]*=//'
-
-# func_opt_split
-func_opt_split ()
-{
-  func_opt_split_opt=`$ECHO "X${1}" | $Xsed -e "$my_sed_long_opt"`
-  func_opt_split_arg=`$ECHO "X${1}" | $Xsed -e "$my_sed_long_arg"`
-}
-
-# func_lo2o object
-func_lo2o ()
-{
-  func_lo2o_result=`$ECHO "X${1}" | $Xsed -e "$lo2o"`
-}
-
-# func_xform libobj-or-source
-func_xform ()
-{
-  func_xform_result=`$ECHO "X${1}" | $Xsed -e 's/\.[[^.]]*$/.lo/'`
-}
-
-# func_arith arithmetic-term...
-func_arith ()
-{
-  func_arith_result=`expr "$[@]"`
-}
-
-# func_len string
-# STRING may not start with a hyphen.
-func_len ()
-{
-  func_len_result=`expr "$[1]" : ".*" 2>/dev/null || echo $max_cmd_len`
-}
-
-_LT_EOF
-esac
-
-case $lt_shell_append in
-  yes)
-    cat << \_LT_EOF >> "$cfgfile"
-
-# func_append var value
-# Append VALUE to the end of shell variable VAR.
-func_append ()
-{
-  eval "$[1]+=\$[2]"
-}
-_LT_EOF
-    ;;
-  *)
-    cat << \_LT_EOF >> "$cfgfile"
-
-# func_append var value
-# Append VALUE to the end of shell variable VAR.
-func_append ()
-{
-  eval "$[1]=\$$[1]\$[2]"
-}
-
-_LT_EOF
-    ;;
-  esac
-])
-
-# Helper functions for option handling.                    -*- Autoconf -*-
-#
-#   Copyright (C) 2004, 2005, 2007, 2008 Free Software Foundation, Inc.
-#   Written by Gary V. Vaughan, 2004
-#
-# This file is free software; the Free Software Foundation gives
-# unlimited permission to copy and/or distribute it, with or without
-# modifications, as long as this notice is preserved.
-
-# serial 6 ltoptions.m4
-
-# This is to help aclocal find these macros, as it can't see m4_define.
-AC_DEFUN([LTOPTIONS_VERSION], [m4_if([1])])
-
-
-# _LT_MANGLE_OPTION(MACRO-NAME, OPTION-NAME)
-# ------------------------------------------
-m4_define([_LT_MANGLE_OPTION],
-[[_LT_OPTION_]m4_bpatsubst($1__$2, [[^a-zA-Z0-9_]], [_])])
-
-
-# _LT_SET_OPTION(MACRO-NAME, OPTION-NAME)
-# ---------------------------------------
-# Set option OPTION-NAME for macro MACRO-NAME, and if there is a
-# matching handler defined, dispatch to it.  Other OPTION-NAMEs are
-# saved as a flag.
-m4_define([_LT_SET_OPTION],
-[m4_define(_LT_MANGLE_OPTION([$1], [$2]))dnl
-m4_ifdef(_LT_MANGLE_DEFUN([$1], [$2]),
-        _LT_MANGLE_DEFUN([$1], [$2]),
-    [m4_warning([Unknown $1 option `$2'])])[]dnl
-])
-
-
-# _LT_IF_OPTION(MACRO-NAME, OPTION-NAME, IF-SET, [IF-NOT-SET])
-# ------------------------------------------------------------
-# Execute IF-SET if OPTION is set, IF-NOT-SET otherwise.
-m4_define([_LT_IF_OPTION],
-[m4_ifdef(_LT_MANGLE_OPTION([$1], [$2]), [$3], [$4])])
-
-
-# _LT_UNLESS_OPTIONS(MACRO-NAME, OPTION-LIST, IF-NOT-SET)
-# -------------------------------------------------------
-# Execute IF-NOT-SET unless all options in OPTION-LIST for MACRO-NAME
-# are set.
-m4_define([_LT_UNLESS_OPTIONS],
-[m4_foreach([_LT_Option], m4_split(m4_normalize([$2])),
-	    [m4_ifdef(_LT_MANGLE_OPTION([$1], _LT_Option),
-		      [m4_define([$0_found])])])[]dnl
-m4_ifdef([$0_found], [m4_undefine([$0_found])], [$3
-])[]dnl
-])
-
-
-# _LT_SET_OPTIONS(MACRO-NAME, OPTION-LIST)
-# ----------------------------------------
-# OPTION-LIST is a space-separated list of Libtool options associated
-# with MACRO-NAME.  If any OPTION has a matching handler declared with
-# LT_OPTION_DEFINE, dispatch to that macro; otherwise complain about
-# the unknown option and exit.
-m4_defun([_LT_SET_OPTIONS],
-[# Set options
-m4_foreach([_LT_Option], m4_split(m4_normalize([$2])),
-    [_LT_SET_OPTION([$1], _LT_Option)])
-
-m4_if([$1],[LT_INIT],[
-  dnl
-  dnl Simply set some default values (i.e off) if boolean options were not
-  dnl specified:
-  _LT_UNLESS_OPTIONS([LT_INIT], [dlopen], [enable_dlopen=no
-  ])
-  _LT_UNLESS_OPTIONS([LT_INIT], [win32-dll], [enable_win32_dll=no
-  ])
-  dnl
-  dnl If no reference was made to various pairs of opposing options, then
-  dnl we run the default mode handler for the pair.  For example, if neither
-  dnl `shared' nor `disable-shared' was passed, we enable building of shared
-  dnl archives by default:
-  _LT_UNLESS_OPTIONS([LT_INIT], [shared disable-shared], [_LT_ENABLE_SHARED])
-  _LT_UNLESS_OPTIONS([LT_INIT], [static disable-static], [_LT_ENABLE_STATIC])
-  _LT_UNLESS_OPTIONS([LT_INIT], [pic-only no-pic], [_LT_WITH_PIC])
-  _LT_UNLESS_OPTIONS([LT_INIT], [fast-install disable-fast-install],
-  		   [_LT_ENABLE_FAST_INSTALL])
-  ])
-])# _LT_SET_OPTIONS
-
-
-
-# _LT_MANGLE_DEFUN(MACRO-NAME, OPTION-NAME)
-# -----------------------------------------
-m4_define([_LT_MANGLE_DEFUN],
-[[_LT_OPTION_DEFUN_]m4_bpatsubst(m4_toupper([$1__$2]), [[^A-Z0-9_]], [_])])
-
-
-# LT_OPTION_DEFINE(MACRO-NAME, OPTION-NAME, CODE)
-# -----------------------------------------------
-m4_define([LT_OPTION_DEFINE],
-[m4_define(_LT_MANGLE_DEFUN([$1], [$2]), [$3])[]dnl
-])# LT_OPTION_DEFINE
-
-
-# dlopen
-# ------
-LT_OPTION_DEFINE([LT_INIT], [dlopen], [enable_dlopen=yes
-])
-
-AU_DEFUN([AC_LIBTOOL_DLOPEN],
-[_LT_SET_OPTION([LT_INIT], [dlopen])
-AC_DIAGNOSE([obsolete],
-[$0: Remove this warning and the call to _LT_SET_OPTION when you
-put the `dlopen' option into LT_INIT's first parameter.])
-])
-
-dnl aclocal-1.4 backwards compatibility:
-dnl AC_DEFUN([AC_LIBTOOL_DLOPEN], [])
-
-
-# win32-dll
-# ---------
-# Declare package support for building win32 dll's.
-LT_OPTION_DEFINE([LT_INIT], [win32-dll],
-[enable_win32_dll=yes
-
-case $host in
-*-*-cygwin* | *-*-mingw* | *-*-pw32* | *-cegcc*)
-  AC_CHECK_TOOL(AS, as, false)
-  AC_CHECK_TOOL(DLLTOOL, dlltool, false)
-  AC_CHECK_TOOL(OBJDUMP, objdump, false)
-  ;;
-esac
-
-test -z "$AS" && AS=as
-_LT_DECL([], [AS],      [0], [Assembler program])dnl
-
-test -z "$DLLTOOL" && DLLTOOL=dlltool
-_LT_DECL([], [DLLTOOL], [0], [DLL creation program])dnl
-
-test -z "$OBJDUMP" && OBJDUMP=objdump
-_LT_DECL([], [OBJDUMP], [0], [Object dumper program])dnl
-])# win32-dll
-
-AU_DEFUN([AC_LIBTOOL_WIN32_DLL],
-[AC_REQUIRE([AC_CANONICAL_HOST])dnl
-_LT_SET_OPTION([LT_INIT], [win32-dll])
-AC_DIAGNOSE([obsolete],
-[$0: Remove this warning and the call to _LT_SET_OPTION when you
-put the `win32-dll' option into LT_INIT's first parameter.])
-])
-
-dnl aclocal-1.4 backwards compatibility:
-dnl AC_DEFUN([AC_LIBTOOL_WIN32_DLL], [])
-
-
-# _LT_ENABLE_SHARED([DEFAULT])
-# ----------------------------
-# implement the --enable-shared flag, and supports the `shared' and
-# `disable-shared' LT_INIT options.
-# DEFAULT is either `yes' or `no'.  If omitted, it defaults to `yes'.
-m4_define([_LT_ENABLE_SHARED],
-[m4_define([_LT_ENABLE_SHARED_DEFAULT], [m4_if($1, no, no, yes)])dnl
-AC_ARG_ENABLE([shared],
-    [AS_HELP_STRING([--enable-shared@<:@=PKGS@:>@],
-	[build shared libraries @<:@default=]_LT_ENABLE_SHARED_DEFAULT[@:>@])],
-    [p=${PACKAGE-default}
-    case $enableval in
-    yes) enable_shared=yes ;;
-    no) enable_shared=no ;;
-    *)
-      enable_shared=no
-      # Look at the argument we got.  We use all the common list separators.
-      lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR,"
-      for pkg in $enableval; do
-	IFS="$lt_save_ifs"
-	if test "X$pkg" = "X$p"; then
-	  enable_shared=yes
-	fi
-      done
-      IFS="$lt_save_ifs"
-      ;;
-    esac],
-    [enable_shared=]_LT_ENABLE_SHARED_DEFAULT)
-
-    _LT_DECL([build_libtool_libs], [enable_shared], [0],
-	[Whether or not to build shared libraries])
-])# _LT_ENABLE_SHARED
-
-LT_OPTION_DEFINE([LT_INIT], [shared], [_LT_ENABLE_SHARED([yes])])
-LT_OPTION_DEFINE([LT_INIT], [disable-shared], [_LT_ENABLE_SHARED([no])])
-
-# Old names:
-AC_DEFUN([AC_ENABLE_SHARED],
-[_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[shared])
-])
-
-AC_DEFUN([AC_DISABLE_SHARED],
-[_LT_SET_OPTION([LT_INIT], [disable-shared])
-])
-
-AU_DEFUN([AM_ENABLE_SHARED], [AC_ENABLE_SHARED($@)])
-AU_DEFUN([AM_DISABLE_SHARED], [AC_DISABLE_SHARED($@)])
-
-dnl aclocal-1.4 backwards compatibility:
-dnl AC_DEFUN([AM_ENABLE_SHARED], [])
-dnl AC_DEFUN([AM_DISABLE_SHARED], [])
-
-
-
-# _LT_ENABLE_STATIC([DEFAULT])
-# ----------------------------
-# implement the --enable-static flag, and support the `static' and
-# `disable-static' LT_INIT options.
-# DEFAULT is either `yes' or `no'.  If omitted, it defaults to `yes'.
-m4_define([_LT_ENABLE_STATIC],
-[m4_define([_LT_ENABLE_STATIC_DEFAULT], [m4_if($1, no, no, yes)])dnl
-AC_ARG_ENABLE([static],
-    [AS_HELP_STRING([--enable-static@<:@=PKGS@:>@],
-	[build static libraries @<:@default=]_LT_ENABLE_STATIC_DEFAULT[@:>@])],
-    [p=${PACKAGE-default}
-    case $enableval in
-    yes) enable_static=yes ;;
-    no) enable_static=no ;;
-    *)
-     enable_static=no
-      # Look at the argument we got.  We use all the common list separators.
-      lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR,"
-      for pkg in $enableval; do
-	IFS="$lt_save_ifs"
-	if test "X$pkg" = "X$p"; then
-	  enable_static=yes
-	fi
-      done
-      IFS="$lt_save_ifs"
-      ;;
-    esac],
-    [enable_static=]_LT_ENABLE_STATIC_DEFAULT)
-
-    _LT_DECL([build_old_libs], [enable_static], [0],
-	[Whether or not to build static libraries])
-])# _LT_ENABLE_STATIC
-
-LT_OPTION_DEFINE([LT_INIT], [static], [_LT_ENABLE_STATIC([yes])])
-LT_OPTION_DEFINE([LT_INIT], [disable-static], [_LT_ENABLE_STATIC([no])])
-
-# Old names:
-AC_DEFUN([AC_ENABLE_STATIC],
-[_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[static])
-])
-
-AC_DEFUN([AC_DISABLE_STATIC],
-[_LT_SET_OPTION([LT_INIT], [disable-static])
-])
-
-AU_DEFUN([AM_ENABLE_STATIC], [AC_ENABLE_STATIC($@)])
-AU_DEFUN([AM_DISABLE_STATIC], [AC_DISABLE_STATIC($@)])
-
-dnl aclocal-1.4 backwards compatibility:
-dnl AC_DEFUN([AM_ENABLE_STATIC], [])
-dnl AC_DEFUN([AM_DISABLE_STATIC], [])
-
-
-
-# _LT_ENABLE_FAST_INSTALL([DEFAULT])
-# ----------------------------------
-# implement the --enable-fast-install flag, and support the `fast-install'
-# and `disable-fast-install' LT_INIT options.
-# DEFAULT is either `yes' or `no'.  If omitted, it defaults to `yes'.
-m4_define([_LT_ENABLE_FAST_INSTALL],
-[m4_define([_LT_ENABLE_FAST_INSTALL_DEFAULT], [m4_if($1, no, no, yes)])dnl
-AC_ARG_ENABLE([fast-install],
-    [AS_HELP_STRING([--enable-fast-install@<:@=PKGS@:>@],
-    [optimize for fast installation @<:@default=]_LT_ENABLE_FAST_INSTALL_DEFAULT[@:>@])],
-    [p=${PACKAGE-default}
-    case $enableval in
-    yes) enable_fast_install=yes ;;
-    no) enable_fast_install=no ;;
-    *)
-      enable_fast_install=no
-      # Look at the argument we got.  We use all the common list separators.
-      lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR,"
-      for pkg in $enableval; do
-	IFS="$lt_save_ifs"
-	if test "X$pkg" = "X$p"; then
-	  enable_fast_install=yes
-	fi
-      done
-      IFS="$lt_save_ifs"
-      ;;
-    esac],
-    [enable_fast_install=]_LT_ENABLE_FAST_INSTALL_DEFAULT)
-
-_LT_DECL([fast_install], [enable_fast_install], [0],
-	 [Whether or not to optimize for fast installation])dnl
-])# _LT_ENABLE_FAST_INSTALL
-
-LT_OPTION_DEFINE([LT_INIT], [fast-install], [_LT_ENABLE_FAST_INSTALL([yes])])
-LT_OPTION_DEFINE([LT_INIT], [disable-fast-install], [_LT_ENABLE_FAST_INSTALL([no])])
-
-# Old names:
-AU_DEFUN([AC_ENABLE_FAST_INSTALL],
-[_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[fast-install])
-AC_DIAGNOSE([obsolete],
-[$0: Remove this warning and the call to _LT_SET_OPTION when you put
-the `fast-install' option into LT_INIT's first parameter.])
-])
-
-AU_DEFUN([AC_DISABLE_FAST_INSTALL],
-[_LT_SET_OPTION([LT_INIT], [disable-fast-install])
-AC_DIAGNOSE([obsolete],
-[$0: Remove this warning and the call to _LT_SET_OPTION when you put
-the `disable-fast-install' option into LT_INIT's first parameter.])
-])
-
-dnl aclocal-1.4 backwards compatibility:
-dnl AC_DEFUN([AC_ENABLE_FAST_INSTALL], [])
-dnl AC_DEFUN([AM_DISABLE_FAST_INSTALL], [])
-
-
-# _LT_WITH_PIC([MODE])
-# --------------------
-# implement the --with-pic flag, and support the `pic-only' and `no-pic'
-# LT_INIT options.
-# MODE is either `yes' or `no'.  If omitted, it defaults to `both'.
-m4_define([_LT_WITH_PIC],
-[AC_ARG_WITH([pic],
-    [AS_HELP_STRING([--with-pic],
-	[try to use only PIC/non-PIC objects @<:@default=use both@:>@])],
-    [pic_mode="$withval"],
-    [pic_mode=default])
-
-test -z "$pic_mode" && pic_mode=m4_default([$1], [default])
-
-_LT_DECL([], [pic_mode], [0], [What type of objects to build])dnl
-])# _LT_WITH_PIC
-
-LT_OPTION_DEFINE([LT_INIT], [pic-only], [_LT_WITH_PIC([yes])])
-LT_OPTION_DEFINE([LT_INIT], [no-pic], [_LT_WITH_PIC([no])])
-
-# Old name:
-AU_DEFUN([AC_LIBTOOL_PICMODE],
-[_LT_SET_OPTION([LT_INIT], [pic-only])
-AC_DIAGNOSE([obsolete],
-[$0: Remove this warning and the call to _LT_SET_OPTION when you
-put the `pic-only' option into LT_INIT's first parameter.])
-])
-
-dnl aclocal-1.4 backwards compatibility:
-dnl AC_DEFUN([AC_LIBTOOL_PICMODE], [])
-
-
-m4_define([_LTDL_MODE], [])
-LT_OPTION_DEFINE([LTDL_INIT], [nonrecursive],
-		 [m4_define([_LTDL_MODE], [nonrecursive])])
-LT_OPTION_DEFINE([LTDL_INIT], [recursive],
-		 [m4_define([_LTDL_MODE], [recursive])])
-LT_OPTION_DEFINE([LTDL_INIT], [subproject],
-		 [m4_define([_LTDL_MODE], [subproject])])
-
-m4_define([_LTDL_TYPE], [])
-LT_OPTION_DEFINE([LTDL_INIT], [installable],
-		 [m4_define([_LTDL_TYPE], [installable])])
-LT_OPTION_DEFINE([LTDL_INIT], [convenience],
-		 [m4_define([_LTDL_TYPE], [convenience])])
-
-# ltsugar.m4 -- libtool m4 base layer.                         -*-Autoconf-*-
-#
-# Copyright (C) 2004, 2005, 2007, 2008 Free Software Foundation, Inc.
-# Written by Gary V. Vaughan, 2004
-#
-# This file is free software; the Free Software Foundation gives
-# unlimited permission to copy and/or distribute it, with or without
-# modifications, as long as this notice is preserved.
-
-# serial 6 ltsugar.m4
-
-# This is to help aclocal find these macros, as it can't see m4_define.
-AC_DEFUN([LTSUGAR_VERSION], [m4_if([0.1])])
-
-
-# lt_join(SEP, ARG1, [ARG2...])
-# -----------------------------
-# Produce ARG1SEPARG2...SEPARGn, omitting [] arguments and their
-# associated separator.
-# Needed until we can rely on m4_join from Autoconf 2.62, since all earlier
-# versions in m4sugar had bugs.
-m4_define([lt_join],
-[m4_if([$#], [1], [],
-       [$#], [2], [[$2]],
-       [m4_if([$2], [], [], [[$2]_])$0([$1], m4_shift(m4_shift($@)))])])
-m4_define([_lt_join],
-[m4_if([$#$2], [2], [],
-       [m4_if([$2], [], [], [[$1$2]])$0([$1], m4_shift(m4_shift($@)))])])
-
-
-# lt_car(LIST)
-# lt_cdr(LIST)
-# ------------
-# Manipulate m4 lists.
-# These macros are necessary as long as will still need to support
-# Autoconf-2.59 which quotes differently.
-m4_define([lt_car], [[$1]])
-m4_define([lt_cdr],
-[m4_if([$#], 0, [m4_fatal([$0: cannot be called without arguments])],
-       [$#], 1, [],
-       [m4_dquote(m4_shift($@))])])
-m4_define([lt_unquote], $1)
-
-
-# lt_append(MACRO-NAME, STRING, [SEPARATOR])
-# ------------------------------------------
-# Redefine MACRO-NAME to hold its former content plus `SEPARATOR'`STRING'.
-# Note that neither SEPARATOR nor STRING are expanded; they are appended
-# to MACRO-NAME as is (leaving the expansion for when MACRO-NAME is invoked).
-# No SEPARATOR is output if MACRO-NAME was previously undefined (different
-# than defined and empty).
-#
-# This macro is needed until we can rely on Autoconf 2.62, since earlier
-# versions of m4sugar mistakenly expanded SEPARATOR but not STRING.
-m4_define([lt_append],
-[m4_define([$1],
-	   m4_ifdef([$1], [m4_defn([$1])[$3]])[$2])])
-
-
-
-# lt_combine(SEP, PREFIX-LIST, INFIX, SUFFIX1, [SUFFIX2...])
-# ----------------------------------------------------------
-# Produce a SEP delimited list of all paired combinations of elements of
-# PREFIX-LIST with SUFFIX1 through SUFFIXn.  Each element of the list
-# has the form PREFIXmINFIXSUFFIXn.
-# Needed until we can rely on m4_combine added in Autoconf 2.62.
-m4_define([lt_combine],
-[m4_if(m4_eval([$# > 3]), [1],
-       [m4_pushdef([_Lt_sep], [m4_define([_Lt_sep], m4_defn([lt_car]))])]]dnl
-[[m4_foreach([_Lt_prefix], [$2],
-	     [m4_foreach([_Lt_suffix],
-		]m4_dquote(m4_dquote(m4_shift(m4_shift(m4_shift($@)))))[,
-	[_Lt_sep([$1])[]m4_defn([_Lt_prefix])[$3]m4_defn([_Lt_suffix])])])])])
-
-
-# lt_if_append_uniq(MACRO-NAME, VARNAME, [SEPARATOR], [UNIQ], [NOT-UNIQ])
-# -----------------------------------------------------------------------
-# Iff MACRO-NAME does not yet contain VARNAME, then append it (delimited
-# by SEPARATOR if supplied) and expand UNIQ, else NOT-UNIQ.
-m4_define([lt_if_append_uniq],
-[m4_ifdef([$1],
-	  [m4_if(m4_index([$3]m4_defn([$1])[$3], [$3$2$3]), [-1],
-		 [lt_append([$1], [$2], [$3])$4],
-		 [$5])],
-	  [lt_append([$1], [$2], [$3])$4])])
-
-
-# lt_dict_add(DICT, KEY, VALUE)
-# -----------------------------
-m4_define([lt_dict_add],
-[m4_define([$1($2)], [$3])])
-
-
-# lt_dict_add_subkey(DICT, KEY, SUBKEY, VALUE)
-# --------------------------------------------
-m4_define([lt_dict_add_subkey],
-[m4_define([$1($2:$3)], [$4])])
-
-
-# lt_dict_fetch(DICT, KEY, [SUBKEY])
-# ----------------------------------
-m4_define([lt_dict_fetch],
-[m4_ifval([$3],
-	m4_ifdef([$1($2:$3)], [m4_defn([$1($2:$3)])]),
-    m4_ifdef([$1($2)], [m4_defn([$1($2)])]))])
-
-
-# lt_if_dict_fetch(DICT, KEY, [SUBKEY], VALUE, IF-TRUE, [IF-FALSE])
-# -----------------------------------------------------------------
-m4_define([lt_if_dict_fetch],
-[m4_if(lt_dict_fetch([$1], [$2], [$3]), [$4],
-	[$5],
-    [$6])])
-
-
-# lt_dict_filter(DICT, [SUBKEY], VALUE, [SEPARATOR], KEY, [...])
-# --------------------------------------------------------------
-m4_define([lt_dict_filter],
-[m4_if([$5], [], [],
-  [lt_join(m4_quote(m4_default([$4], [[, ]])),
-           lt_unquote(m4_split(m4_normalize(m4_foreach(_Lt_key, lt_car([m4_shiftn(4, $@)]),
-		      [lt_if_dict_fetch([$1], _Lt_key, [$2], [$3], [_Lt_key ])])))))])[]dnl
-])
-
-# ltversion.m4 -- version numbers			-*- Autoconf -*-
-#
-#   Copyright (C) 2004 Free Software Foundation, Inc.
-#   Written by Scott James Remnant, 2004
-#
-# This file is free software; the Free Software Foundation gives
-# unlimited permission to copy and/or distribute it, with or without
-# modifications, as long as this notice is preserved.
-
-# Generated from ltversion.in.
-
-# serial 3018 ltversion.m4
-# This file is part of GNU Libtool
-
-m4_define([LT_PACKAGE_VERSION], [2.2.6b])
-m4_define([LT_PACKAGE_REVISION], [1.3018])
-
-AC_DEFUN([LTVERSION_VERSION],
-[macro_version='2.2.6b'
-macro_revision='1.3018'
-_LT_DECL(, macro_version, 0, [Which release of libtool.m4 was used?])
-_LT_DECL(, macro_revision, 0)
-])
-
-# lt~obsolete.m4 -- aclocal satisfying obsolete definitions.    -*-Autoconf-*-
-#
-#   Copyright (C) 2004, 2005, 2007 Free Software Foundation, Inc.
-#   Written by Scott James Remnant, 2004.
-#
-# This file is free software; the Free Software Foundation gives
-# unlimited permission to copy and/or distribute it, with or without
-# modifications, as long as this notice is preserved.
-
-# serial 4 lt~obsolete.m4
-
-# These exist entirely to fool aclocal when bootstrapping libtool.
-#
-# In the past libtool.m4 has provided macros via AC_DEFUN (or AU_DEFUN)
-# which have later been changed to m4_define as they aren't part of the
-# exported API, or moved to Autoconf or Automake where they belong.
-#
-# The trouble is, aclocal is a bit thick.  It'll see the old AC_DEFUN
-# in /usr/share/aclocal/libtool.m4 and remember it, then when it sees us
-# using a macro with the same name in our local m4/libtool.m4 it'll
-# pull the old libtool.m4 in (it doesn't see our shiny new m4_define
-# and doesn't know about Autoconf macros at all.)
-#
-# So we provide this file, which has a silly filename so it's always
-# included after everything else.  This provides aclocal with the
-# AC_DEFUNs it wants, but when m4 processes it, it doesn't do anything
-# because those macros already exist, or will be overwritten later.
-# We use AC_DEFUN over AU_DEFUN for compatibility with aclocal-1.6. 
-#
-# Anytime we withdraw an AC_DEFUN or AU_DEFUN, remember to add it here.
-# Yes, that means every name once taken will need to remain here until
-# we give up compatibility with versions before 1.7, at which point
-# we need to keep only those names which we still refer to.
-
-# This is to help aclocal find these macros, as it can't see m4_define.
-AC_DEFUN([LTOBSOLETE_VERSION], [m4_if([1])])
-
-m4_ifndef([AC_LIBTOOL_LINKER_OPTION],	[AC_DEFUN([AC_LIBTOOL_LINKER_OPTION])])
-m4_ifndef([AC_PROG_EGREP],		[AC_DEFUN([AC_PROG_EGREP])])
-m4_ifndef([_LT_AC_PROG_ECHO_BACKSLASH],	[AC_DEFUN([_LT_AC_PROG_ECHO_BACKSLASH])])
-m4_ifndef([_LT_AC_SHELL_INIT],		[AC_DEFUN([_LT_AC_SHELL_INIT])])
-m4_ifndef([_LT_AC_SYS_LIBPATH_AIX],	[AC_DEFUN([_LT_AC_SYS_LIBPATH_AIX])])
-m4_ifndef([_LT_PROG_LTMAIN],		[AC_DEFUN([_LT_PROG_LTMAIN])])
-m4_ifndef([_LT_AC_TAGVAR],		[AC_DEFUN([_LT_AC_TAGVAR])])
-m4_ifndef([AC_LTDL_ENABLE_INSTALL],	[AC_DEFUN([AC_LTDL_ENABLE_INSTALL])])
-m4_ifndef([AC_LTDL_PREOPEN],		[AC_DEFUN([AC_LTDL_PREOPEN])])
-m4_ifndef([_LT_AC_SYS_COMPILER],	[AC_DEFUN([_LT_AC_SYS_COMPILER])])
-m4_ifndef([_LT_AC_LOCK],		[AC_DEFUN([_LT_AC_LOCK])])
-m4_ifndef([AC_LIBTOOL_SYS_OLD_ARCHIVE],	[AC_DEFUN([AC_LIBTOOL_SYS_OLD_ARCHIVE])])
-m4_ifndef([_LT_AC_TRY_DLOPEN_SELF],	[AC_DEFUN([_LT_AC_TRY_DLOPEN_SELF])])
-m4_ifndef([AC_LIBTOOL_PROG_CC_C_O],	[AC_DEFUN([AC_LIBTOOL_PROG_CC_C_O])])
-m4_ifndef([AC_LIBTOOL_SYS_HARD_LINK_LOCKS], [AC_DEFUN([AC_LIBTOOL_SYS_HARD_LINK_LOCKS])])
-m4_ifndef([AC_LIBTOOL_OBJDIR],		[AC_DEFUN([AC_LIBTOOL_OBJDIR])])
-m4_ifndef([AC_LTDL_OBJDIR],		[AC_DEFUN([AC_LTDL_OBJDIR])])
-m4_ifndef([AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH], [AC_DEFUN([AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH])])
-m4_ifndef([AC_LIBTOOL_SYS_LIB_STRIP],	[AC_DEFUN([AC_LIBTOOL_SYS_LIB_STRIP])])
-m4_ifndef([AC_PATH_MAGIC],		[AC_DEFUN([AC_PATH_MAGIC])])
-m4_ifndef([AC_PROG_LD_GNU],		[AC_DEFUN([AC_PROG_LD_GNU])])
-m4_ifndef([AC_PROG_LD_RELOAD_FLAG],	[AC_DEFUN([AC_PROG_LD_RELOAD_FLAG])])
-m4_ifndef([AC_DEPLIBS_CHECK_METHOD],	[AC_DEFUN([AC_DEPLIBS_CHECK_METHOD])])
-m4_ifndef([AC_LIBTOOL_PROG_COMPILER_NO_RTTI], [AC_DEFUN([AC_LIBTOOL_PROG_COMPILER_NO_RTTI])])
-m4_ifndef([AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE], [AC_DEFUN([AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE])])
-m4_ifndef([AC_LIBTOOL_PROG_COMPILER_PIC], [AC_DEFUN([AC_LIBTOOL_PROG_COMPILER_PIC])])
-m4_ifndef([AC_LIBTOOL_PROG_LD_SHLIBS],	[AC_DEFUN([AC_LIBTOOL_PROG_LD_SHLIBS])])
-m4_ifndef([AC_LIBTOOL_POSTDEP_PREDEP],	[AC_DEFUN([AC_LIBTOOL_POSTDEP_PREDEP])])
-m4_ifndef([LT_AC_PROG_EGREP],		[AC_DEFUN([LT_AC_PROG_EGREP])])
-m4_ifndef([LT_AC_PROG_SED],		[AC_DEFUN([LT_AC_PROG_SED])])
-m4_ifndef([_LT_CC_BASENAME],		[AC_DEFUN([_LT_CC_BASENAME])])
-m4_ifndef([_LT_COMPILER_BOILERPLATE],	[AC_DEFUN([_LT_COMPILER_BOILERPLATE])])
-m4_ifndef([_LT_LINKER_BOILERPLATE],	[AC_DEFUN([_LT_LINKER_BOILERPLATE])])
-m4_ifndef([_AC_PROG_LIBTOOL],		[AC_DEFUN([_AC_PROG_LIBTOOL])])
-m4_ifndef([AC_LIBTOOL_SETUP],		[AC_DEFUN([AC_LIBTOOL_SETUP])])
-m4_ifndef([_LT_AC_CHECK_DLFCN],		[AC_DEFUN([_LT_AC_CHECK_DLFCN])])
-m4_ifndef([AC_LIBTOOL_SYS_DYNAMIC_LINKER],	[AC_DEFUN([AC_LIBTOOL_SYS_DYNAMIC_LINKER])])
-m4_ifndef([_LT_AC_TAGCONFIG],		[AC_DEFUN([_LT_AC_TAGCONFIG])])
-m4_ifndef([AC_DISABLE_FAST_INSTALL],	[AC_DEFUN([AC_DISABLE_FAST_INSTALL])])
-m4_ifndef([_LT_AC_LANG_CXX],		[AC_DEFUN([_LT_AC_LANG_CXX])])
-m4_ifndef([_LT_AC_LANG_F77],		[AC_DEFUN([_LT_AC_LANG_F77])])
-m4_ifndef([_LT_AC_LANG_GCJ],		[AC_DEFUN([_LT_AC_LANG_GCJ])])
-m4_ifndef([AC_LIBTOOL_RC],		[AC_DEFUN([AC_LIBTOOL_RC])])
-m4_ifndef([AC_LIBTOOL_LANG_C_CONFIG],	[AC_DEFUN([AC_LIBTOOL_LANG_C_CONFIG])])
-m4_ifndef([_LT_AC_LANG_C_CONFIG],	[AC_DEFUN([_LT_AC_LANG_C_CONFIG])])
-m4_ifndef([AC_LIBTOOL_LANG_CXX_CONFIG],	[AC_DEFUN([AC_LIBTOOL_LANG_CXX_CONFIG])])
-m4_ifndef([_LT_AC_LANG_CXX_CONFIG],	[AC_DEFUN([_LT_AC_LANG_CXX_CONFIG])])
-m4_ifndef([AC_LIBTOOL_LANG_F77_CONFIG],	[AC_DEFUN([AC_LIBTOOL_LANG_F77_CONFIG])])
-m4_ifndef([_LT_AC_LANG_F77_CONFIG],	[AC_DEFUN([_LT_AC_LANG_F77_CONFIG])])
-m4_ifndef([AC_LIBTOOL_LANG_GCJ_CONFIG],	[AC_DEFUN([AC_LIBTOOL_LANG_GCJ_CONFIG])])
-m4_ifndef([_LT_AC_LANG_GCJ_CONFIG],	[AC_DEFUN([_LT_AC_LANG_GCJ_CONFIG])])
-m4_ifndef([AC_LIBTOOL_LANG_RC_CONFIG],	[AC_DEFUN([AC_LIBTOOL_LANG_RC_CONFIG])])
-m4_ifndef([_LT_AC_LANG_RC_CONFIG],	[AC_DEFUN([_LT_AC_LANG_RC_CONFIG])])
-m4_ifndef([AC_LIBTOOL_CONFIG],		[AC_DEFUN([AC_LIBTOOL_CONFIG])])
-m4_ifndef([_LT_AC_FILE_LTDLL_C],	[AC_DEFUN([_LT_AC_FILE_LTDLL_C])])
-
 # Copyright (C) 2002, 2003, 2005, 2006, 2007, 2008  Free Software Foundation, Inc.
 #
 # This file is free software; the Free Software Foundation
@@ -8747,6 +793,23 @@ AC_DEFUN([_AM_SET_OPTIONS],
 AC_DEFUN([_AM_IF_OPTION],
 [m4_ifset(_AM_MANGLE_OPTION([$1]), [$2], [$3])])
 
+# Copyright (C) 2001, 2003, 2005  Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# AM_RUN_LOG(COMMAND)
+# -------------------
+# Run COMMAND, save the exit status in ac_status, and log it.
+# (This has been adapted from Autoconf's _AC_RUN_LOG macro.)
+AC_DEFUN([AM_RUN_LOG],
+[{ echo "$as_me:$LINENO: $1" >&AS_MESSAGE_LOG_FD
+   ($1) >&AS_MESSAGE_LOG_FD 2>&AS_MESSAGE_LOG_FD
+   ac_status=$?
+   echo "$as_me:$LINENO: \$? = $ac_status" >&AS_MESSAGE_LOG_FD
+   (exit $ac_status); }])
+
 # Check to make sure that the build environment is sane.    -*- Autoconf -*-
 
 # Copyright (C) 1996, 1997, 2000, 2001, 2003, 2005, 2008
@@ -8955,4 +1018,13 @@ AC_SUBST([am__tar])
 AC_SUBST([am__untar])
 ]) # _AM_PROG_TAR
 
+m4_include([m4/iconv.m4])
+m4_include([m4/lib-ld.m4])
+m4_include([m4/lib-link.m4])
+m4_include([m4/lib-prefix.m4])
+m4_include([m4/libtool.m4])
+m4_include([m4/ltoptions.m4])
+m4_include([m4/ltsugar.m4])
+m4_include([m4/ltversion.m4])
+m4_include([m4/lt~obsolete.m4])
 m4_include([acinclude.m4])
diff --git a/eglib/autogen.sh b/eglib/autogen.sh
index ce2acf6..ac2e767 100755
--- a/eglib/autogen.sh
+++ b/eglib/autogen.sh
@@ -102,8 +102,8 @@ if grep "^AM_PROG_LIBTOOL" configure.ac >/dev/null; then
   fi
 fi
 
-echo "Running aclocal $ACLOCAL_FLAGS ..."
-aclocal $ACLOCAL_FLAGS || {
+echo "Running aclocal -I m4 $ACLOCAL_FLAGS ..."
+aclocal -I m4 $ACLOCAL_FLAGS || {
   echo
   echo "**Error**: aclocal failed. This may mean that you have not"
   echo "installed all of the packages you need, or you may need to"
@@ -125,7 +125,7 @@ echo "Running autoconf ..."
 autoconf || { echo "**Error**: autoconf failed."; exit 1; }
 
 
-conf_flags="--enable-maintainer-mode --enable-compile-warnings" #--enable-iso-c
+conf_flags="--enable-maintainer-mode" #--enable-compile-warnings --enable-iso-c
 
 if test x$NOCONFIGURE = x; then
   echo Running $srcdir/configure $conf_flags "$@" ...
diff --git a/eglib/config.h.in b/eglib/config.h.in
index b85edfd..13429b2 100644
--- a/eglib/config.h.in
+++ b/eglib/config.h.in
@@ -12,6 +12,9 @@
 /* Define to 1 if you have the `getpwuid_r' function. */
 #undef HAVE_GETPWUID_R
 
+/* Define if you have the iconv() function and it works. */
+#undef HAVE_ICONV
+
 /* Define to 1 if you have the <iconv.h> header file. */
 #undef HAVE_ICONV_H
 
@@ -39,6 +42,9 @@
 /* Define to 1 if you have the <stdlib.h> header file. */
 #undef HAVE_STDLIB_H
 
+/* Define to 1 if you have the `stpcpy' function. */
+#undef HAVE_STPCPY
+
 /* Define to 1 if you have the <strings.h> header file. */
 #undef HAVE_STRINGS_H
 
@@ -72,6 +78,9 @@
 /* Define to 1 if you have the `vasprintf' function. */
 #undef HAVE_VASPRINTF
 
+/* Define as const if the declaration of iconv() needs const. */
+#undef ICONV_CONST
+
 /* Define to the sub-directory in which libtool stores uninstalled libraries.
    */
 #undef LT_OBJDIR
diff --git a/eglib/config.rpath b/eglib/config.rpath
new file mode 100755
index 0000000..17298f2
--- /dev/null
+++ b/eglib/config.rpath
@@ -0,0 +1,672 @@
+#! /bin/sh
+# Output a system dependent set of variables, describing how to set the
+# run time search path of shared libraries in an executable.
+#
+#   Copyright 1996-2010 Free Software Foundation, Inc.
+#   Taken from GNU libtool, 2001
+#   Originally by Gordon Matzigkeit <gord at gnu.ai.mit.edu>, 1996
+#
+#   This file is free software; the Free Software Foundation gives
+#   unlimited permission to copy and/or distribute it, with or without
+#   modifications, as long as this notice is preserved.
+#
+# The first argument passed to this file is the canonical host specification,
+#    CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM
+# or
+#    CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM
+# The environment variables CC, GCC, LDFLAGS, LD, with_gnu_ld
+# should be set by the caller.
+#
+# The set of defined variables is at the end of this script.
+
+# Known limitations:
+# - On IRIX 6.5 with CC="cc", the run time search patch must not be longer
+#   than 256 bytes, otherwise the compiler driver will dump core. The only
+#   known workaround is to choose shorter directory names for the build
+#   directory and/or the installation directory.
+
+# All known linkers require a `.a' archive for static linking (except MSVC,
+# which needs '.lib').
+libext=a
+shrext=.so
+
+host="$1"
+host_cpu=`echo "$host" | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'`
+host_vendor=`echo "$host" | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'`
+host_os=`echo "$host" | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'`
+
+# Code taken from libtool.m4's _LT_CC_BASENAME.
+
+for cc_temp in $CC""; do
+  case $cc_temp in
+    compile | *[\\/]compile | ccache | *[\\/]ccache ) ;;
+    distcc | *[\\/]distcc | purify | *[\\/]purify ) ;;
+    \-*) ;;
+    *) break;;
+  esac
+done
+cc_basename=`echo "$cc_temp" | sed -e 's%^.*/%%'`
+
+# Code taken from libtool.m4's _LT_COMPILER_PIC.
+
+wl=
+if test "$GCC" = yes; then
+  wl='-Wl,'
+else
+  case "$host_os" in
+    aix*)
+      wl='-Wl,'
+      ;;
+    darwin*)
+      case $cc_basename in
+        xlc*)
+          wl='-Wl,'
+          ;;
+      esac
+      ;;
+    mingw* | cygwin* | pw32* | os2* | cegcc*)
+      ;;
+    hpux9* | hpux10* | hpux11*)
+      wl='-Wl,'
+      ;;
+    irix5* | irix6* | nonstopux*)
+      wl='-Wl,'
+      ;;
+    newsos6)
+      ;;
+    linux* | k*bsd*-gnu)
+      case $cc_basename in
+        ecc*)
+          wl='-Wl,'
+          ;;
+        icc* | ifort*)
+          wl='-Wl,'
+          ;;
+        lf95*)
+          wl='-Wl,'
+          ;;
+        pgcc | pgf77 | pgf90)
+          wl='-Wl,'
+          ;;
+        ccc*)
+          wl='-Wl,'
+          ;;
+        como)
+          wl='-lopt='
+          ;;
+        *)
+          case `$CC -V 2>&1 | sed 5q` in
+            *Sun\ C*)
+              wl='-Wl,'
+              ;;
+          esac
+          ;;
+      esac
+      ;;
+    osf3* | osf4* | osf5*)
+      wl='-Wl,'
+      ;;
+    rdos*)
+      ;;
+    solaris*)
+      wl='-Wl,'
+      ;;
+    sunos4*)
+      wl='-Qoption ld '
+      ;;
+    sysv4 | sysv4.2uw2* | sysv4.3*)
+      wl='-Wl,'
+      ;;
+    sysv4*MP*)
+      ;;
+    sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*)
+      wl='-Wl,'
+      ;;
+    unicos*)
+      wl='-Wl,'
+      ;;
+    uts4*)
+      ;;
+  esac
+fi
+
+# Code taken from libtool.m4's _LT_LINKER_SHLIBS.
+
+hardcode_libdir_flag_spec=
+hardcode_libdir_separator=
+hardcode_direct=no
+hardcode_minus_L=no
+
+case "$host_os" in
+  cygwin* | mingw* | pw32* | cegcc*)
+    # FIXME: the MSVC++ port hasn't been tested in a loooong time
+    # When not using gcc, we currently assume that we are using
+    # Microsoft Visual C++.
+    if test "$GCC" != yes; then
+      with_gnu_ld=no
+    fi
+    ;;
+  interix*)
+    # we just hope/assume this is gcc and not c89 (= MSVC++)
+    with_gnu_ld=yes
+    ;;
+  openbsd*)
+    with_gnu_ld=no
+    ;;
+esac
+
+ld_shlibs=yes
+if test "$with_gnu_ld" = yes; then
+  # Set some defaults for GNU ld with shared library support. These
+  # are reset later if shared libraries are not supported. Putting them
+  # here allows them to be overridden if necessary.
+  # Unlike libtool, we use -rpath here, not --rpath, since the documented
+  # option of GNU ld is called -rpath, not --rpath.
+  hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
+  case "$host_os" in
+    aix[3-9]*)
+      # On AIX/PPC, the GNU linker is very broken
+      if test "$host_cpu" != ia64; then
+        ld_shlibs=no
+      fi
+      ;;
+    amigaos*)
+      hardcode_libdir_flag_spec='-L$libdir'
+      hardcode_minus_L=yes
+      # Samuel A. Falvo II <kc5tja at dolphin.openprojects.net> reports
+      # that the semantics of dynamic libraries on AmigaOS, at least up
+      # to version 4, is to share data among multiple programs linked
+      # with the same dynamic library.  Since this doesn't match the
+      # behavior of shared libraries on other platforms, we cannot use
+      # them.
+      ld_shlibs=no
+      ;;
+    beos*)
+      if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
+        :
+      else
+        ld_shlibs=no
+      fi
+      ;;
+    cygwin* | mingw* | pw32* | cegcc*)
+      # hardcode_libdir_flag_spec is actually meaningless, as there is
+      # no search path for DLLs.
+      hardcode_libdir_flag_spec='-L$libdir'
+      if $LD --help 2>&1 | grep 'auto-import' > /dev/null; then
+        :
+      else
+        ld_shlibs=no
+      fi
+      ;;
+    interix[3-9]*)
+      hardcode_direct=no
+      hardcode_libdir_flag_spec='${wl}-rpath,$libdir'
+      ;;
+    gnu* | linux* | k*bsd*-gnu)
+      if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
+        :
+      else
+        ld_shlibs=no
+      fi
+      ;;
+    netbsd*)
+      ;;
+    solaris*)
+      if $LD -v 2>&1 | grep 'BFD 2\.8' > /dev/null; then
+        ld_shlibs=no
+      elif $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
+        :
+      else
+        ld_shlibs=no
+      fi
+      ;;
+    sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*)
+      case `$LD -v 2>&1` in
+        *\ [01].* | *\ 2.[0-9].* | *\ 2.1[0-5].*)
+          ld_shlibs=no
+          ;;
+        *)
+          if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
+            hardcode_libdir_flag_spec='`test -z "$SCOABSPATH" && echo ${wl}-rpath,$libdir`'
+          else
+            ld_shlibs=no
+          fi
+          ;;
+      esac
+      ;;
+    sunos4*)
+      hardcode_direct=yes
+      ;;
+    *)
+      if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
+        :
+      else
+        ld_shlibs=no
+      fi
+      ;;
+  esac
+  if test "$ld_shlibs" = no; then
+    hardcode_libdir_flag_spec=
+  fi
+else
+  case "$host_os" in
+    aix3*)
+      # Note: this linker hardcodes the directories in LIBPATH if there
+      # are no directories specified by -L.
+      hardcode_minus_L=yes
+      if test "$GCC" = yes; then
+        # Neither direct hardcoding nor static linking is supported with a
+        # broken collect2.
+        hardcode_direct=unsupported
+      fi
+      ;;
+    aix[4-9]*)
+      if test "$host_cpu" = ia64; then
+        # On IA64, the linker does run time linking by default, so we don't
+        # have to do anything special.
+        aix_use_runtimelinking=no
+      else
+        aix_use_runtimelinking=no
+        # Test if we are trying to use run time linking or normal
+        # AIX style linking. If -brtl is somewhere in LDFLAGS, we
+        # need to do runtime linking.
+        case $host_os in aix4.[23]|aix4.[23].*|aix[5-9]*)
+          for ld_flag in $LDFLAGS; do
+            if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then
+              aix_use_runtimelinking=yes
+              break
+            fi
+          done
+          ;;
+        esac
+      fi
+      hardcode_direct=yes
+      hardcode_libdir_separator=':'
+      if test "$GCC" = yes; then
+        case $host_os in aix4.[012]|aix4.[012].*)
+          collect2name=`${CC} -print-prog-name=collect2`
+          if test -f "$collect2name" && \
+            strings "$collect2name" | grep resolve_lib_name >/dev/null
+          then
+            # We have reworked collect2
+            :
+          else
+            # We have old collect2
+            hardcode_direct=unsupported
+            hardcode_minus_L=yes
+            hardcode_libdir_flag_spec='-L$libdir'
+            hardcode_libdir_separator=
+          fi
+          ;;
+        esac
+      fi
+      # Begin _LT_AC_SYS_LIBPATH_AIX.
+      echo 'int main () { return 0; }' > conftest.c
+      ${CC} ${LDFLAGS} conftest.c -o conftest
+      aix_libpath=`dump -H conftest 2>/dev/null | sed -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0  *\(.*\)$/\1/; p; }
+}'`
+      if test -z "$aix_libpath"; then
+        aix_libpath=`dump -HX64 conftest 2>/dev/null | sed -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0  *\(.*\)$/\1/; p; }
+}'`
+      fi
+      if test -z "$aix_libpath"; then
+        aix_libpath="/usr/lib:/lib"
+      fi
+      rm -f conftest.c conftest
+      # End _LT_AC_SYS_LIBPATH_AIX.
+      if test "$aix_use_runtimelinking" = yes; then
+        hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath"
+      else
+        if test "$host_cpu" = ia64; then
+          hardcode_libdir_flag_spec='${wl}-R $libdir:/usr/lib:/lib'
+        else
+          hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath"
+        fi
+      fi
+      ;;
+    amigaos*)
+      hardcode_libdir_flag_spec='-L$libdir'
+      hardcode_minus_L=yes
+      # see comment about different semantics on the GNU ld section
+      ld_shlibs=no
+      ;;
+    bsdi[45]*)
+      ;;
+    cygwin* | mingw* | pw32* | cegcc*)
+      # When not using gcc, we currently assume that we are using
+      # Microsoft Visual C++.
+      # hardcode_libdir_flag_spec is actually meaningless, as there is
+      # no search path for DLLs.
+      hardcode_libdir_flag_spec=' '
+      libext=lib
+      ;;
+    darwin* | rhapsody*)
+      hardcode_direct=no
+      if test "$GCC" = yes ; then
+        :
+      else
+        case $cc_basename in
+          xlc*)
+            ;;
+          *)
+            ld_shlibs=no
+            ;;
+        esac
+      fi
+      ;;
+    dgux*)
+      hardcode_libdir_flag_spec='-L$libdir'
+      ;;
+    freebsd1*)
+      ld_shlibs=no
+      ;;
+    freebsd2.2*)
+      hardcode_libdir_flag_spec='-R$libdir'
+      hardcode_direct=yes
+      ;;
+    freebsd2*)
+      hardcode_direct=yes
+      hardcode_minus_L=yes
+      ;;
+    freebsd* | dragonfly*)
+      hardcode_libdir_flag_spec='-R$libdir'
+      hardcode_direct=yes
+      ;;
+    hpux9*)
+      hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir'
+      hardcode_libdir_separator=:
+      hardcode_direct=yes
+      # hardcode_minus_L: Not really in the search PATH,
+      # but as the default location of the library.
+      hardcode_minus_L=yes
+      ;;
+    hpux10*)
+      if test "$with_gnu_ld" = no; then
+        hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir'
+        hardcode_libdir_separator=:
+        hardcode_direct=yes
+        # hardcode_minus_L: Not really in the search PATH,
+        # but as the default location of the library.
+        hardcode_minus_L=yes
+      fi
+      ;;
+    hpux11*)
+      if test "$with_gnu_ld" = no; then
+        hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir'
+        hardcode_libdir_separator=:
+        case $host_cpu in
+          hppa*64*|ia64*)
+            hardcode_direct=no
+            ;;
+          *)
+            hardcode_direct=yes
+            # hardcode_minus_L: Not really in the search PATH,
+            # but as the default location of the library.
+            hardcode_minus_L=yes
+            ;;
+        esac
+      fi
+      ;;
+    irix5* | irix6* | nonstopux*)
+      hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
+      hardcode_libdir_separator=:
+      ;;
+    netbsd*)
+      hardcode_libdir_flag_spec='-R$libdir'
+      hardcode_direct=yes
+      ;;
+    newsos6)
+      hardcode_direct=yes
+      hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
+      hardcode_libdir_separator=:
+      ;;
+    openbsd*)
+      if test -f /usr/libexec/ld.so; then
+        hardcode_direct=yes
+        if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
+          hardcode_libdir_flag_spec='${wl}-rpath,$libdir'
+        else
+          case "$host_os" in
+            openbsd[01].* | openbsd2.[0-7] | openbsd2.[0-7].*)
+              hardcode_libdir_flag_spec='-R$libdir'
+              ;;
+            *)
+              hardcode_libdir_flag_spec='${wl}-rpath,$libdir'
+              ;;
+          esac
+        fi
+      else
+        ld_shlibs=no
+      fi
+      ;;
+    os2*)
+      hardcode_libdir_flag_spec='-L$libdir'
+      hardcode_minus_L=yes
+      ;;
+    osf3*)
+      hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
+      hardcode_libdir_separator=:
+      ;;
+    osf4* | osf5*)
+      if test "$GCC" = yes; then
+        hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
+      else
+        # Both cc and cxx compiler support -rpath directly
+        hardcode_libdir_flag_spec='-rpath $libdir'
+      fi
+      hardcode_libdir_separator=:
+      ;;
+    solaris*)
+      hardcode_libdir_flag_spec='-R$libdir'
+      ;;
+    sunos4*)
+      hardcode_libdir_flag_spec='-L$libdir'
+      hardcode_direct=yes
+      hardcode_minus_L=yes
+      ;;
+    sysv4)
+      case $host_vendor in
+        sni)
+          hardcode_direct=yes # is this really true???
+          ;;
+        siemens)
+          hardcode_direct=no
+          ;;
+        motorola)
+          hardcode_direct=no #Motorola manual says yes, but my tests say they lie
+          ;;
+      esac
+      ;;
+    sysv4.3*)
+      ;;
+    sysv4*MP*)
+      if test -d /usr/nec; then
+        ld_shlibs=yes
+      fi
+      ;;
+    sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7* | sco3.2v5.0.[024]*)
+      ;;
+    sysv5* | sco3.2v5* | sco5v6*)
+      hardcode_libdir_flag_spec='`test -z "$SCOABSPATH" && echo ${wl}-R,$libdir`'
+      hardcode_libdir_separator=':'
+      ;;
+    uts4*)
+      hardcode_libdir_flag_spec='-L$libdir'
+      ;;
+    *)
+      ld_shlibs=no
+      ;;
+  esac
+fi
+
+# Check dynamic linker characteristics
+# Code taken from libtool.m4's _LT_SYS_DYNAMIC_LINKER.
+# Unlike libtool.m4, here we don't care about _all_ names of the library, but
+# only about the one the linker finds when passed -lNAME. This is the last
+# element of library_names_spec in libtool.m4, or possibly two of them if the
+# linker has special search rules.
+library_names_spec=      # the last element of library_names_spec in libtool.m4
+libname_spec='lib$name'
+case "$host_os" in
+  aix3*)
+    library_names_spec='$libname.a'
+    ;;
+  aix[4-9]*)
+    library_names_spec='$libname$shrext'
+    ;;
+  amigaos*)
+    library_names_spec='$libname.a'
+    ;;
+  beos*)
+    library_names_spec='$libname$shrext'
+    ;;
+  bsdi[45]*)
+    library_names_spec='$libname$shrext'
+    ;;
+  cygwin* | mingw* | pw32* | cegcc*)
+    shrext=.dll
+    library_names_spec='$libname.dll.a $libname.lib'
+    ;;
+  darwin* | rhapsody*)
+    shrext=.dylib
+    library_names_spec='$libname$shrext'
+    ;;
+  dgux*)
+    library_names_spec='$libname$shrext'
+    ;;
+  freebsd1*)
+    ;;
+  freebsd* | dragonfly*)
+    case "$host_os" in
+      freebsd[123]*)
+        library_names_spec='$libname$shrext$versuffix' ;;
+      *)
+        library_names_spec='$libname$shrext' ;;
+    esac
+    ;;
+  gnu*)
+    library_names_spec='$libname$shrext'
+    ;;
+  hpux9* | hpux10* | hpux11*)
+    case $host_cpu in
+      ia64*)
+        shrext=.so
+        ;;
+      hppa*64*)
+        shrext=.sl
+        ;;
+      *)
+        shrext=.sl
+        ;;
+    esac
+    library_names_spec='$libname$shrext'
+    ;;
+  interix[3-9]*)
+    library_names_spec='$libname$shrext'
+    ;;
+  irix5* | irix6* | nonstopux*)
+    library_names_spec='$libname$shrext'
+    case "$host_os" in
+      irix5* | nonstopux*)
+        libsuff= shlibsuff=
+        ;;
+      *)
+        case $LD in
+          *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") libsuff= shlibsuff= ;;
+          *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") libsuff=32 shlibsuff=N32 ;;
+          *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") libsuff=64 shlibsuff=64 ;;
+          *) libsuff= shlibsuff= ;;
+        esac
+        ;;
+    esac
+    ;;
+  linux*oldld* | linux*aout* | linux*coff*)
+    ;;
+  linux* | k*bsd*-gnu)
+    library_names_spec='$libname$shrext'
+    ;;
+  knetbsd*-gnu)
+    library_names_spec='$libname$shrext'
+    ;;
+  netbsd*)
+    library_names_spec='$libname$shrext'
+    ;;
+  newsos6)
+    library_names_spec='$libname$shrext'
+    ;;
+  nto-qnx*)
+    library_names_spec='$libname$shrext'
+    ;;
+  openbsd*)
+    library_names_spec='$libname$shrext$versuffix'
+    ;;
+  os2*)
+    libname_spec='$name'
+    shrext=.dll
+    library_names_spec='$libname.a'
+    ;;
+  osf3* | osf4* | osf5*)
+    library_names_spec='$libname$shrext'
+    ;;
+  rdos*)
+    ;;
+  solaris*)
+    library_names_spec='$libname$shrext'
+    ;;
+  sunos4*)
+    library_names_spec='$libname$shrext$versuffix'
+    ;;
+  sysv4 | sysv4.3*)
+    library_names_spec='$libname$shrext'
+    ;;
+  sysv4*MP*)
+    library_names_spec='$libname$shrext'
+    ;;
+  sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*)
+    library_names_spec='$libname$shrext'
+    ;;
+  uts4*)
+    library_names_spec='$libname$shrext'
+    ;;
+esac
+
+sed_quote_subst='s/\(["`$\\]\)/\\\1/g'
+escaped_wl=`echo "X$wl" | sed -e 's/^X//' -e "$sed_quote_subst"`
+shlibext=`echo "$shrext" | sed -e 's,^\.,,'`
+escaped_libname_spec=`echo "X$libname_spec" | sed -e 's/^X//' -e "$sed_quote_subst"`
+escaped_library_names_spec=`echo "X$library_names_spec" | sed -e 's/^X//' -e "$sed_quote_subst"`
+escaped_hardcode_libdir_flag_spec=`echo "X$hardcode_libdir_flag_spec" | sed -e 's/^X//' -e "$sed_quote_subst"`
+
+LC_ALL=C sed -e 's/^\([a-zA-Z0-9_]*\)=/acl_cv_\1=/' <<EOF
+
+# How to pass a linker flag through the compiler.
+wl="$escaped_wl"
+
+# Static library suffix (normally "a").
+libext="$libext"
+
+# Shared library suffix (normally "so").
+shlibext="$shlibext"
+
+# Format of library name prefix.
+libname_spec="$escaped_libname_spec"
+
+# Library names that the linker finds when passed -lNAME.
+library_names_spec="$escaped_library_names_spec"
+
+# Flag to hardcode \$libdir into a binary during linking.
+# This must work even if \$libdir does not exist.
+hardcode_libdir_flag_spec="$escaped_hardcode_libdir_flag_spec"
+
+# Whether we need a single -rpath flag with a separated argument.
+hardcode_libdir_separator="$hardcode_libdir_separator"
+
+# Set to yes if using DIR/libNAME.so during linking hardcodes DIR into the
+# resulting binary.
+hardcode_direct="$hardcode_direct"
+
+# Set to yes if using the -LDIR flag during linking hardcodes DIR into the
+# resulting binary.
+hardcode_minus_L="$hardcode_minus_L"
+
+EOF
diff --git a/eglib/configure b/eglib/configure
index 26317ba..7480883 100755
--- a/eglib/configure
+++ b/eglib/configure
@@ -1,6 +1,8 @@
 #! /bin/sh
 # Guess values for system-dependent variables and create Makefiles.
-# Generated by GNU Autoconf 2.68.
+# Generated by GNU Autoconf 2.68 for eglib 0.3.
+#
+# Report bugs to <http://bugzilla.xamarin.com/enter_bug.cgi?classification=Mono>.
 #
 #
 # Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001,
@@ -236,10 +238,12 @@ fi
     $as_echo "$0: In particular, zsh $ZSH_VERSION has bugs and should"
     $as_echo "$0: be upgraded to zsh 4.3.4 or later."
   else
-    $as_echo "$0: Please tell bug-autoconf at gnu.org about your system,
-$0: including any error possibly output before this
-$0: message. Then install a modern shell, or manually run
-$0: the script under such a shell if you do have one."
+    $as_echo "$0: Please tell bug-autoconf at gnu.org and
+$0: http://bugzilla.xamarin.com/enter_bug.cgi?classification=Mono
+$0: about your system, including any error possibly output
+$0: before this message. Then install a modern shell, or
+$0: manually run the script under such a shell if you do
+$0: have one."
   fi
   exit 1
 fi
@@ -704,12 +708,12 @@ MFLAGS=
 MAKEFLAGS=
 
 # Identity of this package.
-PACKAGE_NAME=
-PACKAGE_TARNAME=
-PACKAGE_VERSION=
-PACKAGE_STRING=
-PACKAGE_BUGREPORT=
-PACKAGE_URL=
+PACKAGE_NAME='eglib'
+PACKAGE_TARNAME='eglib'
+PACKAGE_VERSION='0.3'
+PACKAGE_STRING='eglib 0.3'
+PACKAGE_BUGREPORT='http://bugzilla.xamarin.com/enter_bug.cgi?classification=Mono'
+PACKAGE_URL=''
 
 ac_unique_file="README"
 # Factoring default headers for most tests.
@@ -752,6 +756,8 @@ ac_subst_vars='am__EXEEXT_FALSE
 am__EXEEXT_TRUE
 LTLIBOBJS
 LIBOBJS
+G_GINT32_FORMAT
+G_GUINT32_FORMAT
 G_GINT64_FORMAT
 G_GUINT64_FORMAT
 GSIZE_FORMAT
@@ -765,7 +771,8 @@ HAVE_GLIB_TRUE
 PKG_CONFIG
 HAVE_ALLOCA_H
 G_HAVE_ISO_VARARGS
-ICONV_LIBS
+LTLIBICONV
+LIBICONV
 NEED_VASPRINTF_FALSE
 NEED_VASPRINTF_TRUE
 PLATFORM_ANDROID_FALSE
@@ -913,6 +920,8 @@ with_pic
 enable_fast_install
 with_gnu_ld
 enable_libtool_lock
+enable_rpath
+with_libiconv_prefix
 with_crosspkgdir
 enable_quiet_build
 '
@@ -965,7 +974,7 @@ sharedstatedir='${prefix}/com'
 localstatedir='${prefix}/var'
 includedir='${prefix}/include'
 oldincludedir='/usr/include'
-docdir='${datarootdir}/doc/${PACKAGE}'
+docdir='${datarootdir}/doc/${PACKAGE_TARNAME}'
 infodir='${datarootdir}/info'
 htmldir='${docdir}'
 dvidir='${docdir}'
@@ -1467,7 +1476,7 @@ if test "$ac_init_help" = "long"; then
   # Omit some internal or obsolete options to make the list less imposing.
   # This message is too long to be a string in the A/UX 3.1 sh.
   cat <<_ACEOF
-\`configure' configures this package to adapt to many kinds of systems.
+\`configure' configures eglib 0.3 to adapt to many kinds of systems.
 
 Usage: $0 [OPTION]... [VAR=VALUE]...
 
@@ -1515,7 +1524,7 @@ Fine tuning of the installation directories:
   --infodir=DIR           info documentation [DATAROOTDIR/info]
   --localedir=DIR         locale-dependent data [DATAROOTDIR/locale]
   --mandir=DIR            man documentation [DATAROOTDIR/man]
-  --docdir=DIR            documentation root [DATAROOTDIR/doc/PACKAGE]
+  --docdir=DIR            documentation root [DATAROOTDIR/doc/eglib]
   --htmldir=DIR           html documentation [DOCDIR]
   --dvidir=DIR            dvi documentation [DOCDIR]
   --pdfdir=DIR            pdf documentation [DOCDIR]
@@ -1537,7 +1546,9 @@ _ACEOF
 fi
 
 if test -n "$ac_init_help"; then
-
+  case $ac_init_help in
+     short | recursive ) echo "Configuration of eglib 0.3:";;
+   esac
   cat <<\_ACEOF
 
 Optional Features:
@@ -1553,6 +1564,7 @@ Optional Features:
   --enable-fast-install[=PKGS]
                           optimize for fast installation [default=yes]
   --disable-libtool-lock  avoid locking (might break parallel builds)
+  --disable-rpath         do not hardcode runtime library paths
   --enable-quiet-build  Enable quiet runtime build (on by default)
 
 Optional Packages:
@@ -1561,6 +1573,9 @@ Optional Packages:
   --with-pic              try to use only PIC/non-PIC objects [default=use
                           both]
   --with-gnu-ld           assume the C compiler uses GNU ld [default=no]
+  --with-gnu-ld           assume the C compiler uses GNU ld default=no
+  --with-libiconv-prefix[=DIR]  search for libiconv in DIR/include and DIR/lib
+  --without-libiconv-prefix     don't search for libiconv in includedir and libdir
   --with-crosspkgdir=/path/to/pkg-config/dir      Change pkg-config dir to custom dir
 
 Some influential environment variables:
@@ -1576,7 +1591,7 @@ Some influential environment variables:
 Use these variables to override the choices made by `configure' or to help
 it to find libraries and programs with nonstandard names/locations.
 
-Report bugs to the package provider.
+Report bugs to <http://bugzilla.xamarin.com/enter_bug.cgi?classification=Mono>.
 _ACEOF
 ac_status=$?
 fi
@@ -1639,7 +1654,7 @@ fi
 test -n "$ac_init_help" && exit $ac_status
 if $ac_init_version; then
   cat <<\_ACEOF
-configure
+eglib configure 0.3
 generated by GNU Autoconf 2.68
 
 Copyright (C) 2010 Free Software Foundation, Inc.
@@ -2162,6 +2177,10 @@ $as_echo "$as_me: WARNING: $2: see the Autoconf documentation" >&2;}
 $as_echo "$as_me: WARNING: $2:     section \"Present But Cannot Be Compiled\"" >&2;}
     { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5
 $as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;}
+( $as_echo "## ---------------------------------------------------------------------------- ##
+## Report this to http://bugzilla.xamarin.com/enter_bug.cgi?classification=Mono ##
+## ---------------------------------------------------------------------------- ##"
+     ) | sed "s/^/$as_me: WARNING:     /" >&2
     ;;
 esac
   { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
@@ -2182,7 +2201,7 @@ cat >config.log <<_ACEOF
 This file contains any messages produced by compilers while
 running configure, to aid debugging if configure makes a mistake.
 
-It was created by $as_me, which was
+It was created by eglib $as_me 0.3, which was
 generated by GNU Autoconf 2.68.  Invocation command line was
 
   $ $0 $@
@@ -2530,6 +2549,9 @@ ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $
 ac_compiler_gnu=$ac_cv_c_compiler_gnu
 
 
+
+
+
 ac_aux_dir=
 for ac_dir in "$srcdir" "$srcdir/.." "$srcdir/../.."; do
   if test -f "$ac_dir/install-sh"; then
@@ -2671,7 +2693,6 @@ test -n "$target_alias" &&
   program_prefix=${target_alias}-
 
 
-ac_config_headers="$ac_config_headers config.h"
 
 am__api_version='1.11'
 
@@ -3110,8 +3131,8 @@ fi
 
 
 # Define the identity of the package.
- PACKAGE=eglib
- VERSION=0.3
+ PACKAGE='eglib'
+ VERSION='0.3'
 
 
 cat >>confdefs.h <<_ACEOF
@@ -3145,13 +3166,96 @@ MAKEINFO=${MAKEINFO-"${am_missing_run}makeinfo"}
 
 AMTAR=${AMTAR-"${am_missing_run}tar"}
 
-am__tar='${AMTAR} chof - "$$tardir"'; am__untar='${AMTAR} xf -'
 
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to create a ustar tar archive" >&5
+$as_echo_n "checking how to create a ustar tar archive... " >&6; }
+# Loop over all known methods to create a tar archive until one works.
+_am_tools='gnutar plaintar pax cpio none'
+_am_tools=${am_cv_prog_tar_ustar-$_am_tools}
+# Do not fold the above two line into one, because Tru64 sh and
+# Solaris sh will not grok spaces in the rhs of `-'.
+for _am_tool in $_am_tools
+do
+  case $_am_tool in
+  gnutar)
+    for _am_tar in tar gnutar gtar;
+    do
+      { echo "$as_me:$LINENO: $_am_tar --version" >&5
+   ($_am_tar --version) >&5 2>&5
+   ac_status=$?
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); } && break
+    done
+    am__tar="$_am_tar --format=ustar -chf - "'"$$tardir"'
+    am__tar_="$_am_tar --format=ustar -chf - "'"$tardir"'
+    am__untar="$_am_tar -xf -"
+    ;;
+  plaintar)
+    # Must skip GNU tar: if it does not support --format= it doesn't create
+    # ustar tarball either.
+    (tar --version) >/dev/null 2>&1 && continue
+    am__tar='tar chf - "$$tardir"'
+    am__tar_='tar chf - "$tardir"'
+    am__untar='tar xf -'
+    ;;
+  pax)
+    am__tar='pax -L -x ustar -w "$$tardir"'
+    am__tar_='pax -L -x ustar -w "$tardir"'
+    am__untar='pax -r'
+    ;;
+  cpio)
+    am__tar='find "$$tardir" -print | cpio -o -H ustar -L'
+    am__tar_='find "$tardir" -print | cpio -o -H ustar -L'
+    am__untar='cpio -i -H ustar -d'
+    ;;
+  none)
+    am__tar=false
+    am__tar_=false
+    am__untar=false
+    ;;
+  esac
+
+  # If the value was cached, stop now.  We just wanted to have am__tar
+  # and am__untar set.
+  test -n "${am_cv_prog_tar_ustar}" && break
+
+  # tar/untar a dummy directory, and stop if the command works
+  rm -rf conftest.dir
+  mkdir conftest.dir
+  echo GrepMe > conftest.dir/file
+  { echo "$as_me:$LINENO: tardir=conftest.dir && eval $am__tar_ >conftest.tar" >&5
+   (tardir=conftest.dir && eval $am__tar_ >conftest.tar) >&5 2>&5
+   ac_status=$?
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); }
+  rm -rf conftest.dir
+  if test -s conftest.tar; then
+    { echo "$as_me:$LINENO: $am__untar <conftest.tar" >&5
+   ($am__untar <conftest.tar) >&5 2>&5
+   ac_status=$?
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); }
+    grep GrepMe conftest.dir/file >/dev/null 2>&1 && break
+  fi
+done
+rm -rf conftest.dir
+
+if ${am_cv_prog_tar_ustar+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  am_cv_prog_tar_ustar=$_am_tool
+fi
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_prog_tar_ustar" >&5
+$as_echo "$am_cv_prog_tar_ustar" >&6; }
 
 
 
 
 
+ac_config_headers="$ac_config_headers config.h"
+
+
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to enable maintainer-specific portions of Makefiles" >&5
 $as_echo_n "checking whether to enable maintainer-specific portions of Makefiles... " >&6; }
     # Check whether --enable-maintainer-mode was given.
@@ -4763,13 +4867,13 @@ if ${lt_cv_nm_interface+:} false; then :
 else
   lt_cv_nm_interface="BSD nm"
   echo "int some_variable = 0;" > conftest.$ac_ext
-  (eval echo "\"\$as_me:4766: $ac_compile\"" >&5)
+  (eval echo "\"\$as_me:4870: $ac_compile\"" >&5)
   (eval "$ac_compile" 2>conftest.err)
   cat conftest.err >&5
-  (eval echo "\"\$as_me:4769: $NM \\\"conftest.$ac_objext\\\"\"" >&5)
+  (eval echo "\"\$as_me:4873: $NM \\\"conftest.$ac_objext\\\"\"" >&5)
   (eval "$NM \"conftest.$ac_objext\"" 2>conftest.err > conftest.out)
   cat conftest.err >&5
-  (eval echo "\"\$as_me:4772: output\"" >&5)
+  (eval echo "\"\$as_me:4876: output\"" >&5)
   cat conftest.out >&5
   if $GREP 'External.*some_variable' conftest.out > /dev/null; then
     lt_cv_nm_interface="MS dumpbin"
@@ -5975,7 +6079,7 @@ ia64-*-hpux*)
   ;;
 *-*-irix6*)
   # Find out which ABI we are using.
-  echo '#line 5978 "configure"' > conftest.$ac_ext
+  echo '#line 6082 "configure"' > conftest.$ac_ext
   if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
   (eval $ac_compile) 2>&5
   ac_status=$?
@@ -7475,6 +7579,10 @@ _lt_linker_boilerplate=`cat conftest.err`
 $RM -r conftest*
 
 
+## CAVEAT EMPTOR:
+## There is no encapsulation within the following macros, do not change
+## the running order or otherwise move them around unless you know exactly
+## what you are doing...
 if test -n "$compiler"; then
 
 lt_prog_compiler_no_builtin_flag=
@@ -7500,11 +7608,11 @@ else
    -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
    -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
    -e 's:$: $lt_compiler_flag:'`
-   (eval echo "\"\$as_me:7503: $lt_compile\"" >&5)
+   (eval echo "\"\$as_me:7611: $lt_compile\"" >&5)
    (eval "$lt_compile" 2>conftest.err)
    ac_status=$?
    cat conftest.err >&5
-   echo "$as_me:7507: \$? = $ac_status" >&5
+   echo "$as_me:7615: \$? = $ac_status" >&5
    if (exit $ac_status) && test -s "$ac_outfile"; then
      # The compiler can only warn and ignore the option if not recognized
      # So say no if there are warnings other than the usual output.
@@ -7839,11 +7947,11 @@ else
    -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
    -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
    -e 's:$: $lt_compiler_flag:'`
-   (eval echo "\"\$as_me:7842: $lt_compile\"" >&5)
+   (eval echo "\"\$as_me:7950: $lt_compile\"" >&5)
    (eval "$lt_compile" 2>conftest.err)
    ac_status=$?
    cat conftest.err >&5
-   echo "$as_me:7846: \$? = $ac_status" >&5
+   echo "$as_me:7954: \$? = $ac_status" >&5
    if (exit $ac_status) && test -s "$ac_outfile"; then
      # The compiler can only warn and ignore the option if not recognized
      # So say no if there are warnings other than the usual output.
@@ -7944,11 +8052,11 @@ else
    -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
    -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
    -e 's:$: $lt_compiler_flag:'`
-   (eval echo "\"\$as_me:7947: $lt_compile\"" >&5)
+   (eval echo "\"\$as_me:8055: $lt_compile\"" >&5)
    (eval "$lt_compile" 2>out/conftest.err)
    ac_status=$?
    cat out/conftest.err >&5
-   echo "$as_me:7951: \$? = $ac_status" >&5
+   echo "$as_me:8059: \$? = $ac_status" >&5
    if (exit $ac_status) && test -s out/conftest2.$ac_objext
    then
      # The compiler can only warn and ignore the option if not recognized
@@ -7999,11 +8107,11 @@ else
    -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
    -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
    -e 's:$: $lt_compiler_flag:'`
-   (eval echo "\"\$as_me:8002: $lt_compile\"" >&5)
+   (eval echo "\"\$as_me:8110: $lt_compile\"" >&5)
    (eval "$lt_compile" 2>out/conftest.err)
    ac_status=$?
    cat out/conftest.err >&5
-   echo "$as_me:8006: \$? = $ac_status" >&5
+   echo "$as_me:8114: \$? = $ac_status" >&5
    if (exit $ac_status) && test -s out/conftest2.$ac_objext
    then
      # The compiler can only warn and ignore the option if not recognized
@@ -10367,7 +10475,7 @@ else
   lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
   lt_status=$lt_dlunknown
   cat > conftest.$ac_ext <<_LT_EOF
-#line 10370 "configure"
+#line 10478 "configure"
 #include "confdefs.h"
 
 #if HAVE_DLFCN_H
@@ -10463,7 +10571,7 @@ else
   lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
   lt_status=$lt_dlunknown
   cat > conftest.$ac_ext <<_LT_EOF
-#line 10466 "configure"
+#line 10574 "configure"
 #include "confdefs.h"
 
 #if HAVE_DLFCN_H
@@ -10892,7 +11000,6 @@ fi
 
 # end dolt
 
-CFLAGS="$CFLAGS -O0"
 GNUC_PRETTY=
 GNUC_UNUSED=
 BREAKPOINT="G_STMT_START { raise (SIGTRAP); } G_STMT_END"
@@ -11376,7 +11483,7 @@ cat >>confdefs.h <<_ACEOF
 _ACEOF
 
 
-for ac_func in strndup strlcpy getpwuid_r strtok_r rewinddir vasprintf
+for ac_func in strndup strlcpy stpcpy getpwuid_r strtok_r rewinddir vasprintf
 do :
   as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
 ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var"
@@ -11396,168 +11503,970 @@ else
   NEED_VASPRINTF_FALSE=
 fi
 
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for iconv_open in -liconv" >&5
-$as_echo_n "checking for iconv_open in -liconv... " >&6; }
-if ${ac_cv_lib_iconv_iconv_open+:} false; then :
+
+      if test "X$prefix" = "XNONE"; then
+    acl_final_prefix="$ac_default_prefix"
+  else
+    acl_final_prefix="$prefix"
+  fi
+  if test "X$exec_prefix" = "XNONE"; then
+    acl_final_exec_prefix='${prefix}'
+  else
+    acl_final_exec_prefix="$exec_prefix"
+  fi
+  acl_save_prefix="$prefix"
+  prefix="$acl_final_prefix"
+  eval acl_final_exec_prefix=\"$acl_final_exec_prefix\"
+  prefix="$acl_save_prefix"
+
+
+# Check whether --with-gnu-ld was given.
+if test "${with_gnu_ld+set}" = set; then :
+  withval=$with_gnu_ld; test "$withval" = no || with_gnu_ld=yes
+else
+  with_gnu_ld=no
+fi
+
+# Prepare PATH_SEPARATOR.
+# The user is always right.
+if test "${PATH_SEPARATOR+set}" != set; then
+  echo "#! /bin/sh" >conf$$.sh
+  echo  "exit 0"   >>conf$$.sh
+  chmod +x conf$$.sh
+  if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then
+    PATH_SEPARATOR=';'
+  else
+    PATH_SEPARATOR=:
+  fi
+  rm -f conf$$.sh
+fi
+ac_prog=ld
+if test "$GCC" = yes; then
+  # Check if gcc -print-prog-name=ld gives a path.
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ld used by GCC" >&5
+$as_echo_n "checking for ld used by GCC... " >&6; }
+  case $host in
+  *-*-mingw*)
+    # gcc leaves a trailing carriage return which upsets mingw
+    ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;;
+  *)
+    ac_prog=`($CC -print-prog-name=ld) 2>&5` ;;
+  esac
+  case $ac_prog in
+    # Accept absolute paths.
+    [\\/]* | [A-Za-z]:[\\/]*)
+      re_direlt='/[^/][^/]*/\.\./'
+      # Canonicalize the path of ld
+      ac_prog=`echo $ac_prog| sed 's%\\\\%/%g'`
+      while echo $ac_prog | grep "$re_direlt" > /dev/null 2>&1; do
+        ac_prog=`echo $ac_prog| sed "s%$re_direlt%/%"`
+      done
+      test -z "$LD" && LD="$ac_prog"
+      ;;
+  "")
+    # If it fails, then pretend we aren't using GCC.
+    ac_prog=ld
+    ;;
+  *)
+    # If it is relative, then search for the first ld in PATH.
+    with_gnu_ld=unknown
+    ;;
+  esac
+elif test "$with_gnu_ld" = yes; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU ld" >&5
+$as_echo_n "checking for GNU ld... " >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for non-GNU ld" >&5
+$as_echo_n "checking for non-GNU ld... " >&6; }
+fi
+if ${acl_cv_path_LD+:} false; then :
   $as_echo_n "(cached) " >&6
 else
-  ac_check_lib_save_LIBS=$LIBS
-LIBS="-liconv  $LIBS"
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+  if test -z "$LD"; then
+  IFS="${IFS= 	}"; ac_save_ifs="$IFS"; IFS="${IFS}${PATH_SEPARATOR-:}"
+  for ac_dir in $PATH; do
+    test -z "$ac_dir" && ac_dir=.
+    if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then
+      acl_cv_path_LD="$ac_dir/$ac_prog"
+      # Check to see if the program is GNU ld.  I'd rather use --version,
+      # but apparently some GNU ld's only accept -v.
+      # Break only if it was the GNU/non-GNU ld that we prefer.
+      case `"$acl_cv_path_LD" -v 2>&1 < /dev/null` in
+      *GNU* | *'with BFD'*)
+        test "$with_gnu_ld" != no && break ;;
+      *)
+        test "$with_gnu_ld" != yes && break ;;
+      esac
+    fi
+  done
+  IFS="$ac_save_ifs"
+else
+  acl_cv_path_LD="$LD" # Let the user override the test with a path.
+fi
+fi
+
+LD="$acl_cv_path_LD"
+if test -n "$LD"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LD" >&5
+$as_echo "$LD" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+test -z "$LD" && as_fn_error $? "no acceptable ld found in \$PATH" "$LINENO" 5
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if the linker ($LD) is GNU ld" >&5
+$as_echo_n "checking if the linker ($LD) is GNU ld... " >&6; }
+if ${acl_cv_prog_gnu_ld+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  # I'd rather use --version here, but apparently some GNU ld's only accept -v.
+case `$LD -v 2>&1 </dev/null` in
+*GNU* | *'with BFD'*)
+  acl_cv_prog_gnu_ld=yes ;;
+*)
+  acl_cv_prog_gnu_ld=no ;;
+esac
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $acl_cv_prog_gnu_ld" >&5
+$as_echo "$acl_cv_prog_gnu_ld" >&6; }
+with_gnu_ld=$acl_cv_prog_gnu_ld
+
+
+
+
+                                                { $as_echo "$as_me:${as_lineno-$LINENO}: checking for shared library run path origin" >&5
+$as_echo_n "checking for shared library run path origin... " >&6; }
+if ${acl_cv_rpath+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+
+    CC="$CC" GCC="$GCC" LDFLAGS="$LDFLAGS" LD="$LD" with_gnu_ld="$with_gnu_ld" \
+    ${CONFIG_SHELL-/bin/sh} "$ac_aux_dir/config.rpath" "$host" > conftest.sh
+    . ./conftest.sh
+    rm -f ./conftest.sh
+    acl_cv_rpath=done
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $acl_cv_rpath" >&5
+$as_echo "$acl_cv_rpath" >&6; }
+  wl="$acl_cv_wl"
+  acl_libext="$acl_cv_libext"
+  acl_shlibext="$acl_cv_shlibext"
+  acl_libname_spec="$acl_cv_libname_spec"
+  acl_library_names_spec="$acl_cv_library_names_spec"
+  acl_hardcode_libdir_flag_spec="$acl_cv_hardcode_libdir_flag_spec"
+  acl_hardcode_libdir_separator="$acl_cv_hardcode_libdir_separator"
+  acl_hardcode_direct="$acl_cv_hardcode_direct"
+  acl_hardcode_minus_L="$acl_cv_hardcode_minus_L"
+    # Check whether --enable-rpath was given.
+if test "${enable_rpath+set}" = set; then :
+  enableval=$enable_rpath; :
+else
+  enable_rpath=yes
+fi
+
+
+
+
+  acl_libdirstem=lib
+  acl_libdirstem2=
+  case "$host_os" in
+    solaris*)
+                                    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for 64-bit host" >&5
+$as_echo_n "checking for 64-bit host... " >&6; }
+if ${gl_cv_solaris_64bit+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 
-/* Override any GCC internal prototype to avoid an error.
-   Use char because int might match the return type of a GCC
-   builtin and then its argument prototype would still apply.  */
-#ifdef __cplusplus
-extern "C"
+#ifdef _LP64
+sixtyfour bits
 #endif
-char iconv_open ();
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+  $EGREP "sixtyfour bits" >/dev/null 2>&1; then :
+  gl_cv_solaris_64bit=yes
+else
+  gl_cv_solaris_64bit=no
+fi
+rm -f conftest*
+
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_solaris_64bit" >&5
+$as_echo "$gl_cv_solaris_64bit" >&6; }
+      if test $gl_cv_solaris_64bit = yes; then
+        acl_libdirstem=lib/64
+        case "$host_cpu" in
+          sparc*)        acl_libdirstem2=lib/sparcv9 ;;
+          i*86 | x86_64) acl_libdirstem2=lib/amd64 ;;
+        esac
+      fi
+      ;;
+    *)
+      searchpath=`(LC_ALL=C $CC -print-search-dirs) 2>/dev/null | sed -n -e 's,^libraries: ,,p' | sed -e 's,^=,,'`
+      if test -n "$searchpath"; then
+        acl_save_IFS="${IFS= 	}"; IFS=":"
+        for searchdir in $searchpath; do
+          if test -d "$searchdir"; then
+            case "$searchdir" in
+              */lib64/ | */lib64 ) acl_libdirstem=lib64 ;;
+              */../ | */.. )
+                # Better ignore directories of this form. They are misleading.
+                ;;
+              *) searchdir=`cd "$searchdir" && pwd`
+                 case "$searchdir" in
+                   */lib64 ) acl_libdirstem=lib64 ;;
+                 esac ;;
+            esac
+          fi
+        done
+        IFS="$acl_save_IFS"
+      fi
+      ;;
+  esac
+  test -n "$acl_libdirstem2" || acl_libdirstem2="$acl_libdirstem"
+
+
+
+
+
+
+
+
+
+
+
+
+    use_additional=yes
+
+  acl_save_prefix="$prefix"
+  prefix="$acl_final_prefix"
+  acl_save_exec_prefix="$exec_prefix"
+  exec_prefix="$acl_final_exec_prefix"
+
+    eval additional_includedir=\"$includedir\"
+    eval additional_libdir=\"$libdir\"
+
+  exec_prefix="$acl_save_exec_prefix"
+  prefix="$acl_save_prefix"
+
+
+# Check whether --with-libiconv-prefix was given.
+if test "${with_libiconv_prefix+set}" = set; then :
+  withval=$with_libiconv_prefix;
+    if test "X$withval" = "Xno"; then
+      use_additional=no
+    else
+      if test "X$withval" = "X"; then
+
+  acl_save_prefix="$prefix"
+  prefix="$acl_final_prefix"
+  acl_save_exec_prefix="$exec_prefix"
+  exec_prefix="$acl_final_exec_prefix"
+
+          eval additional_includedir=\"$includedir\"
+          eval additional_libdir=\"$libdir\"
+
+  exec_prefix="$acl_save_exec_prefix"
+  prefix="$acl_save_prefix"
+
+      else
+        additional_includedir="$withval/include"
+        additional_libdir="$withval/$acl_libdirstem"
+        if test "$acl_libdirstem2" != "$acl_libdirstem" \
+           && ! test -d "$withval/$acl_libdirstem"; then
+          additional_libdir="$withval/$acl_libdirstem2"
+        fi
+      fi
+    fi
+
+fi
+
+      LIBICONV=
+  LTLIBICONV=
+  INCICONV=
+  LIBICONV_PREFIX=
+      HAVE_LIBICONV=
+  rpathdirs=
+  ltrpathdirs=
+  names_already_handled=
+  names_next_round='iconv '
+  while test -n "$names_next_round"; do
+    names_this_round="$names_next_round"
+    names_next_round=
+    for name in $names_this_round; do
+      already_handled=
+      for n in $names_already_handled; do
+        if test "$n" = "$name"; then
+          already_handled=yes
+          break
+        fi
+      done
+      if test -z "$already_handled"; then
+        names_already_handled="$names_already_handled $name"
+                        uppername=`echo "$name" | sed -e 'y|abcdefghijklmnopqrstuvwxyz./-|ABCDEFGHIJKLMNOPQRSTUVWXYZ___|'`
+        eval value=\"\$HAVE_LIB$uppername\"
+        if test -n "$value"; then
+          if test "$value" = yes; then
+            eval value=\"\$LIB$uppername\"
+            test -z "$value" || LIBICONV="${LIBICONV}${LIBICONV:+ }$value"
+            eval value=\"\$LTLIB$uppername\"
+            test -z "$value" || LTLIBICONV="${LTLIBICONV}${LTLIBICONV:+ }$value"
+          else
+                                    :
+          fi
+        else
+                              found_dir=
+          found_la=
+          found_so=
+          found_a=
+          eval libname=\"$acl_libname_spec\"    # typically: libname=lib$name
+          if test -n "$acl_shlibext"; then
+            shrext=".$acl_shlibext"             # typically: shrext=.so
+          else
+            shrext=
+          fi
+          if test $use_additional = yes; then
+            dir="$additional_libdir"
+                                    if test -n "$acl_shlibext"; then
+              if test -f "$dir/$libname$shrext"; then
+                found_dir="$dir"
+                found_so="$dir/$libname$shrext"
+              else
+                if test "$acl_library_names_spec" = '$libname$shrext$versuffix'; then
+                  ver=`(cd "$dir" && \
+                        for f in "$libname$shrext".*; do echo "$f"; done \
+                        | sed -e "s,^$libname$shrext\\\\.,," \
+                        | sort -t '.' -n -r -k1,1 -k2,2 -k3,3 -k4,4 -k5,5 \
+                        | sed 1q ) 2>/dev/null`
+                  if test -n "$ver" && test -f "$dir/$libname$shrext.$ver"; then
+                    found_dir="$dir"
+                    found_so="$dir/$libname$shrext.$ver"
+                  fi
+                else
+                  eval library_names=\"$acl_library_names_spec\"
+                  for f in $library_names; do
+                    if test -f "$dir/$f"; then
+                      found_dir="$dir"
+                      found_so="$dir/$f"
+                      break
+                    fi
+                  done
+                fi
+              fi
+            fi
+                        if test "X$found_dir" = "X"; then
+              if test -f "$dir/$libname.$acl_libext"; then
+                found_dir="$dir"
+                found_a="$dir/$libname.$acl_libext"
+              fi
+            fi
+            if test "X$found_dir" != "X"; then
+              if test -f "$dir/$libname.la"; then
+                found_la="$dir/$libname.la"
+              fi
+            fi
+          fi
+          if test "X$found_dir" = "X"; then
+            for x in $LDFLAGS $LTLIBICONV; do
+
+  acl_save_prefix="$prefix"
+  prefix="$acl_final_prefix"
+  acl_save_exec_prefix="$exec_prefix"
+  exec_prefix="$acl_final_exec_prefix"
+  eval x=\"$x\"
+  exec_prefix="$acl_save_exec_prefix"
+  prefix="$acl_save_prefix"
+
+              case "$x" in
+                -L*)
+                  dir=`echo "X$x" | sed -e 's/^X-L//'`
+                                    if test -n "$acl_shlibext"; then
+                    if test -f "$dir/$libname$shrext"; then
+                      found_dir="$dir"
+                      found_so="$dir/$libname$shrext"
+                    else
+                      if test "$acl_library_names_spec" = '$libname$shrext$versuffix'; then
+                        ver=`(cd "$dir" && \
+                              for f in "$libname$shrext".*; do echo "$f"; done \
+                              | sed -e "s,^$libname$shrext\\\\.,," \
+                              | sort -t '.' -n -r -k1,1 -k2,2 -k3,3 -k4,4 -k5,5 \
+                              | sed 1q ) 2>/dev/null`
+                        if test -n "$ver" && test -f "$dir/$libname$shrext.$ver"; then
+                          found_dir="$dir"
+                          found_so="$dir/$libname$shrext.$ver"
+                        fi
+                      else
+                        eval library_names=\"$acl_library_names_spec\"
+                        for f in $library_names; do
+                          if test -f "$dir/$f"; then
+                            found_dir="$dir"
+                            found_so="$dir/$f"
+                            break
+                          fi
+                        done
+                      fi
+                    fi
+                  fi
+                                    if test "X$found_dir" = "X"; then
+                    if test -f "$dir/$libname.$acl_libext"; then
+                      found_dir="$dir"
+                      found_a="$dir/$libname.$acl_libext"
+                    fi
+                  fi
+                  if test "X$found_dir" != "X"; then
+                    if test -f "$dir/$libname.la"; then
+                      found_la="$dir/$libname.la"
+                    fi
+                  fi
+                  ;;
+              esac
+              if test "X$found_dir" != "X"; then
+                break
+              fi
+            done
+          fi
+          if test "X$found_dir" != "X"; then
+                        LTLIBICONV="${LTLIBICONV}${LTLIBICONV:+ }-L$found_dir -l$name"
+            if test "X$found_so" != "X"; then
+                                                        if test "$enable_rpath" = no \
+                 || test "X$found_dir" = "X/usr/$acl_libdirstem" \
+                 || test "X$found_dir" = "X/usr/$acl_libdirstem2"; then
+                                LIBICONV="${LIBICONV}${LIBICONV:+ }$found_so"
+              else
+                                                                                haveit=
+                for x in $ltrpathdirs; do
+                  if test "X$x" = "X$found_dir"; then
+                    haveit=yes
+                    break
+                  fi
+                done
+                if test -z "$haveit"; then
+                  ltrpathdirs="$ltrpathdirs $found_dir"
+                fi
+                                if test "$acl_hardcode_direct" = yes; then
+                                                      LIBICONV="${LIBICONV}${LIBICONV:+ }$found_so"
+                else
+                  if test -n "$acl_hardcode_libdir_flag_spec" && test "$acl_hardcode_minus_L" = no; then
+                                                            LIBICONV="${LIBICONV}${LIBICONV:+ }$found_so"
+                                                            haveit=
+                    for x in $rpathdirs; do
+                      if test "X$x" = "X$found_dir"; then
+                        haveit=yes
+                        break
+                      fi
+                    done
+                    if test -z "$haveit"; then
+                      rpathdirs="$rpathdirs $found_dir"
+                    fi
+                  else
+                                                                                haveit=
+                    for x in $LDFLAGS $LIBICONV; do
+
+  acl_save_prefix="$prefix"
+  prefix="$acl_final_prefix"
+  acl_save_exec_prefix="$exec_prefix"
+  exec_prefix="$acl_final_exec_prefix"
+  eval x=\"$x\"
+  exec_prefix="$acl_save_exec_prefix"
+  prefix="$acl_save_prefix"
+
+                      if test "X$x" = "X-L$found_dir"; then
+                        haveit=yes
+                        break
+                      fi
+                    done
+                    if test -z "$haveit"; then
+                      LIBICONV="${LIBICONV}${LIBICONV:+ }-L$found_dir"
+                    fi
+                    if test "$acl_hardcode_minus_L" != no; then
+                                                                                        LIBICONV="${LIBICONV}${LIBICONV:+ }$found_so"
+                    else
+                                                                                                                                                                                LIBICONV="${LIBICONV}${LIBICONV:+ }-l$name"
+                    fi
+                  fi
+                fi
+              fi
+            else
+              if test "X$found_a" != "X"; then
+                                LIBICONV="${LIBICONV}${LIBICONV:+ }$found_a"
+              else
+                                                LIBICONV="${LIBICONV}${LIBICONV:+ }-L$found_dir -l$name"
+              fi
+            fi
+                        additional_includedir=
+            case "$found_dir" in
+              */$acl_libdirstem | */$acl_libdirstem/)
+                basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e "s,/$acl_libdirstem/"'*$,,'`
+                if test "$name" = 'iconv'; then
+                  LIBICONV_PREFIX="$basedir"
+                fi
+                additional_includedir="$basedir/include"
+                ;;
+              */$acl_libdirstem2 | */$acl_libdirstem2/)
+                basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e "s,/$acl_libdirstem2/"'*$,,'`
+                if test "$name" = 'iconv'; then
+                  LIBICONV_PREFIX="$basedir"
+                fi
+                additional_includedir="$basedir/include"
+                ;;
+            esac
+            if test "X$additional_includedir" != "X"; then
+                                                                                                                if test "X$additional_includedir" != "X/usr/include"; then
+                haveit=
+                if test "X$additional_includedir" = "X/usr/local/include"; then
+                  if test -n "$GCC"; then
+                    case $host_os in
+                      linux* | gnu* | k*bsd*-gnu) haveit=yes;;
+                    esac
+                  fi
+                fi
+                if test -z "$haveit"; then
+                  for x in $CPPFLAGS $INCICONV; do
+
+  acl_save_prefix="$prefix"
+  prefix="$acl_final_prefix"
+  acl_save_exec_prefix="$exec_prefix"
+  exec_prefix="$acl_final_exec_prefix"
+  eval x=\"$x\"
+  exec_prefix="$acl_save_exec_prefix"
+  prefix="$acl_save_prefix"
+
+                    if test "X$x" = "X-I$additional_includedir"; then
+                      haveit=yes
+                      break
+                    fi
+                  done
+                  if test -z "$haveit"; then
+                    if test -d "$additional_includedir"; then
+                                            INCICONV="${INCICONV}${INCICONV:+ }-I$additional_includedir"
+                    fi
+                  fi
+                fi
+              fi
+            fi
+                        if test -n "$found_la"; then
+                                                        save_libdir="$libdir"
+              case "$found_la" in
+                */* | *\\*) . "$found_la" ;;
+                *) . "./$found_la" ;;
+              esac
+              libdir="$save_libdir"
+                            for dep in $dependency_libs; do
+                case "$dep" in
+                  -L*)
+                    additional_libdir=`echo "X$dep" | sed -e 's/^X-L//'`
+                                                                                                                                                                if test "X$additional_libdir" != "X/usr/$acl_libdirstem" \
+                       && test "X$additional_libdir" != "X/usr/$acl_libdirstem2"; then
+                      haveit=
+                      if test "X$additional_libdir" = "X/usr/local/$acl_libdirstem" \
+                         || test "X$additional_libdir" = "X/usr/local/$acl_libdirstem2"; then
+                        if test -n "$GCC"; then
+                          case $host_os in
+                            linux* | gnu* | k*bsd*-gnu) haveit=yes;;
+                          esac
+                        fi
+                      fi
+                      if test -z "$haveit"; then
+                        haveit=
+                        for x in $LDFLAGS $LIBICONV; do
+
+  acl_save_prefix="$prefix"
+  prefix="$acl_final_prefix"
+  acl_save_exec_prefix="$exec_prefix"
+  exec_prefix="$acl_final_exec_prefix"
+  eval x=\"$x\"
+  exec_prefix="$acl_save_exec_prefix"
+  prefix="$acl_save_prefix"
+
+                          if test "X$x" = "X-L$additional_libdir"; then
+                            haveit=yes
+                            break
+                          fi
+                        done
+                        if test -z "$haveit"; then
+                          if test -d "$additional_libdir"; then
+                                                        LIBICONV="${LIBICONV}${LIBICONV:+ }-L$additional_libdir"
+                          fi
+                        fi
+                        haveit=
+                        for x in $LDFLAGS $LTLIBICONV; do
+
+  acl_save_prefix="$prefix"
+  prefix="$acl_final_prefix"
+  acl_save_exec_prefix="$exec_prefix"
+  exec_prefix="$acl_final_exec_prefix"
+  eval x=\"$x\"
+  exec_prefix="$acl_save_exec_prefix"
+  prefix="$acl_save_prefix"
+
+                          if test "X$x" = "X-L$additional_libdir"; then
+                            haveit=yes
+                            break
+                          fi
+                        done
+                        if test -z "$haveit"; then
+                          if test -d "$additional_libdir"; then
+                                                        LTLIBICONV="${LTLIBICONV}${LTLIBICONV:+ }-L$additional_libdir"
+                          fi
+                        fi
+                      fi
+                    fi
+                    ;;
+                  -R*)
+                    dir=`echo "X$dep" | sed -e 's/^X-R//'`
+                    if test "$enable_rpath" != no; then
+                                                                  haveit=
+                      for x in $rpathdirs; do
+                        if test "X$x" = "X$dir"; then
+                          haveit=yes
+                          break
+                        fi
+                      done
+                      if test -z "$haveit"; then
+                        rpathdirs="$rpathdirs $dir"
+                      fi
+                                                                  haveit=
+                      for x in $ltrpathdirs; do
+                        if test "X$x" = "X$dir"; then
+                          haveit=yes
+                          break
+                        fi
+                      done
+                      if test -z "$haveit"; then
+                        ltrpathdirs="$ltrpathdirs $dir"
+                      fi
+                    fi
+                    ;;
+                  -l*)
+                                        names_next_round="$names_next_round "`echo "X$dep" | sed -e 's/^X-l//'`
+                    ;;
+                  *.la)
+                                                                                names_next_round="$names_next_round "`echo "X$dep" | sed -e 's,^X.*/,,' -e 's,^lib,,' -e 's,\.la$,,'`
+                    ;;
+                  *)
+                                        LIBICONV="${LIBICONV}${LIBICONV:+ }$dep"
+                    LTLIBICONV="${LTLIBICONV}${LTLIBICONV:+ }$dep"
+                    ;;
+                esac
+              done
+            fi
+          else
+                                                            LIBICONV="${LIBICONV}${LIBICONV:+ }-l$name"
+            LTLIBICONV="${LTLIBICONV}${LTLIBICONV:+ }-l$name"
+          fi
+        fi
+      fi
+    done
+  done
+  if test "X$rpathdirs" != "X"; then
+    if test -n "$acl_hardcode_libdir_separator"; then
+                        alldirs=
+      for found_dir in $rpathdirs; do
+        alldirs="${alldirs}${alldirs:+$acl_hardcode_libdir_separator}$found_dir"
+      done
+            acl_save_libdir="$libdir"
+      libdir="$alldirs"
+      eval flag=\"$acl_hardcode_libdir_flag_spec\"
+      libdir="$acl_save_libdir"
+      LIBICONV="${LIBICONV}${LIBICONV:+ }$flag"
+    else
+            for found_dir in $rpathdirs; do
+        acl_save_libdir="$libdir"
+        libdir="$found_dir"
+        eval flag=\"$acl_hardcode_libdir_flag_spec\"
+        libdir="$acl_save_libdir"
+        LIBICONV="${LIBICONV}${LIBICONV:+ }$flag"
+      done
+    fi
+  fi
+  if test "X$ltrpathdirs" != "X"; then
+            for found_dir in $ltrpathdirs; do
+      LTLIBICONV="${LTLIBICONV}${LTLIBICONV:+ }-R$found_dir"
+    done
+  fi
+
+
+
+
+
+
+
+
+
+
+
+
+          am_save_CPPFLAGS="$CPPFLAGS"
+
+  for element in $INCICONV; do
+    haveit=
+    for x in $CPPFLAGS; do
+
+  acl_save_prefix="$prefix"
+  prefix="$acl_final_prefix"
+  acl_save_exec_prefix="$exec_prefix"
+  exec_prefix="$acl_final_exec_prefix"
+  eval x=\"$x\"
+  exec_prefix="$acl_save_exec_prefix"
+  prefix="$acl_save_prefix"
+
+      if test "X$x" = "X$element"; then
+        haveit=yes
+        break
+      fi
+    done
+    if test -z "$haveit"; then
+      CPPFLAGS="${CPPFLAGS}${CPPFLAGS:+ }$element"
+    fi
+  done
+
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for iconv" >&5
+$as_echo_n "checking for iconv... " >&6; }
+if ${am_cv_func_iconv+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+
+    am_cv_func_iconv="no, consider installing GNU libiconv"
+    am_cv_lib_iconv=no
+    cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <stdlib.h>
+#include <iconv.h>
 int
 main ()
 {
-return iconv_open ();
+iconv_t cd = iconv_open("","");
+       iconv(cd,NULL,NULL,NULL,NULL);
+       iconv_close(cd);
   ;
   return 0;
 }
 _ACEOF
 if ac_fn_c_try_link "$LINENO"; then :
-  ac_cv_lib_iconv_iconv_open=yes
-else
-  ac_cv_lib_iconv_iconv_open=no
+  am_cv_func_iconv=yes
 fi
 rm -f core conftest.err conftest.$ac_objext \
     conftest$ac_exeext conftest.$ac_ext
-LIBS=$ac_check_lib_save_LIBS
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_iconv_iconv_open" >&5
-$as_echo "$ac_cv_lib_iconv_iconv_open" >&6; }
-if test "x$ac_cv_lib_iconv_iconv_open" = xyes; then :
-  LIBS="$LIBS -liconv"
-fi
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for libiconv_open in -liconv" >&5
-$as_echo_n "checking for libiconv_open in -liconv... " >&6; }
-if ${ac_cv_lib_iconv_libiconv_open+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  ac_check_lib_save_LIBS=$LIBS
-LIBS="-liconv  $LIBS"
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+    if test "$am_cv_func_iconv" != yes; then
+      am_save_LIBS="$LIBS"
+      LIBS="$LIBS $LIBICONV"
+      cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
-
-/* Override any GCC internal prototype to avoid an error.
-   Use char because int might match the return type of a GCC
-   builtin and then its argument prototype would still apply.  */
-#ifdef __cplusplus
-extern "C"
-#endif
-char libiconv_open ();
+#include <stdlib.h>
+#include <iconv.h>
 int
 main ()
 {
-return libiconv_open ();
+iconv_t cd = iconv_open("","");
+         iconv(cd,NULL,NULL,NULL,NULL);
+         iconv_close(cd);
   ;
   return 0;
 }
 _ACEOF
 if ac_fn_c_try_link "$LINENO"; then :
-  ac_cv_lib_iconv_libiconv_open=yes
-else
-  ac_cv_lib_iconv_libiconv_open=no
+  am_cv_lib_iconv=yes
+        am_cv_func_iconv=yes
 fi
 rm -f core conftest.err conftest.$ac_objext \
     conftest$ac_exeext conftest.$ac_ext
-LIBS=$ac_check_lib_save_LIBS
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_iconv_libiconv_open" >&5
-$as_echo "$ac_cv_lib_iconv_libiconv_open" >&6; }
-if test "x$ac_cv_lib_iconv_libiconv_open" = xyes; then :
-  LIBS="$LIBS -liconv"
-fi
+      LIBS="$am_save_LIBS"
+    fi
 
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for iconv_open in -liconv" >&5
-$as_echo_n "checking for iconv_open in -liconv... " >&6; }
-if ${ac_cv_lib_iconv_iconv_open+:} false; then :
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_func_iconv" >&5
+$as_echo "$am_cv_func_iconv" >&6; }
+  if test "$am_cv_func_iconv" = yes; then
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for working iconv" >&5
+$as_echo_n "checking for working iconv... " >&6; }
+if ${am_cv_func_iconv_works+:} false; then :
   $as_echo_n "(cached) " >&6
 else
-  ac_check_lib_save_LIBS=$LIBS
-LIBS="-liconv  $LIBS"
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+
+            am_save_LIBS="$LIBS"
+      if test $am_cv_lib_iconv = yes; then
+        LIBS="$LIBS $LIBICONV"
+      fi
+      if test "$cross_compiling" = yes; then :
+  case "$host_os" in
+           aix* | hpux*) am_cv_func_iconv_works="guessing no" ;;
+           *)            am_cv_func_iconv_works="guessing yes" ;;
+         esac
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 
-/* Override any GCC internal prototype to avoid an error.
-   Use char because int might match the return type of a GCC
-   builtin and then its argument prototype would still apply.  */
-#ifdef __cplusplus
-extern "C"
-#endif
-char iconv_open ();
-int
-main ()
+#include <iconv.h>
+#include <string.h>
+int main ()
 {
-return iconv_open ();
-  ;
+  /* Test against AIX 5.1 bug: Failures are not distinguishable from successful
+     returns.  */
+  {
+    iconv_t cd_utf8_to_88591 = iconv_open ("ISO8859-1", "UTF-8");
+    if (cd_utf8_to_88591 != (iconv_t)(-1))
+      {
+        static const char input[] = "\342\202\254"; /* EURO SIGN */
+        char buf[10];
+        const char *inptr = input;
+        size_t inbytesleft = strlen (input);
+        char *outptr = buf;
+        size_t outbytesleft = sizeof (buf);
+        size_t res = iconv (cd_utf8_to_88591,
+                            (char **) &inptr, &inbytesleft,
+                            &outptr, &outbytesleft);
+        if (res == 0)
+          return 1;
+      }
+  }
+  /* Test against Solaris 10 bug: Failures are not distinguishable from
+     successful returns.  */
+  {
+    iconv_t cd_ascii_to_88591 = iconv_open ("ISO8859-1", "646");
+    if (cd_ascii_to_88591 != (iconv_t)(-1))
+      {
+        static const char input[] = "\263";
+        char buf[10];
+        const char *inptr = input;
+        size_t inbytesleft = strlen (input);
+        char *outptr = buf;
+        size_t outbytesleft = sizeof (buf);
+        size_t res = iconv (cd_ascii_to_88591,
+                            (char **) &inptr, &inbytesleft,
+                            &outptr, &outbytesleft);
+        if (res == 0)
+          return 1;
+      }
+  }
+#if 0 /* This bug could be worked around by the caller.  */
+  /* Test against HP-UX 11.11 bug: Positive return value instead of 0.  */
+  {
+    iconv_t cd_88591_to_utf8 = iconv_open ("utf8", "iso88591");
+    if (cd_88591_to_utf8 != (iconv_t)(-1))
+      {
+        static const char input[] = "\304rger mit b\366sen B\374bchen ohne Augenma\337";
+        char buf[50];
+        const char *inptr = input;
+        size_t inbytesleft = strlen (input);
+        char *outptr = buf;
+        size_t outbytesleft = sizeof (buf);
+        size_t res = iconv (cd_88591_to_utf8,
+                            (char **) &inptr, &inbytesleft,
+                            &outptr, &outbytesleft);
+        if ((int)res > 0)
+          return 1;
+      }
+  }
+#endif
+  /* Test against HP-UX 11.11 bug: No converter from EUC-JP to UTF-8 is
+     provided.  */
+  if (/* Try standardized names.  */
+      iconv_open ("UTF-8", "EUC-JP") == (iconv_t)(-1)
+      /* Try IRIX, OSF/1 names.  */
+      && iconv_open ("UTF-8", "eucJP") == (iconv_t)(-1)
+      /* Try AIX names.  */
+      && iconv_open ("UTF-8", "IBM-eucJP") == (iconv_t)(-1)
+      /* Try HP-UX names.  */
+      && iconv_open ("utf8", "eucJP") == (iconv_t)(-1))
+    return 1;
   return 0;
 }
 _ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
-  ac_cv_lib_iconv_iconv_open=yes
+if ac_fn_c_try_run "$LINENO"; then :
+  am_cv_func_iconv_works=yes
 else
-  ac_cv_lib_iconv_iconv_open=no
+  am_cv_func_iconv_works=no
 fi
-rm -f core conftest.err conftest.$ac_objext \
-    conftest$ac_exeext conftest.$ac_ext
-LIBS=$ac_check_lib_save_LIBS
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+  conftest.$ac_objext conftest.beam conftest.$ac_ext
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_iconv_iconv_open" >&5
-$as_echo "$ac_cv_lib_iconv_iconv_open" >&6; }
-if test "x$ac_cv_lib_iconv_iconv_open" = xyes; then :
-  ICONV_LIBS="-liconv"
+
+      LIBS="$am_save_LIBS"
+
 fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_func_iconv_works" >&5
+$as_echo "$am_cv_func_iconv_works" >&6; }
+    case "$am_cv_func_iconv_works" in
+      *no) am_func_iconv=no am_cv_lib_iconv=no ;;
+      *)   am_func_iconv=yes ;;
+    esac
+  else
+    am_func_iconv=no am_cv_lib_iconv=no
+  fi
+  if test "$am_func_iconv" = yes; then
+
+$as_echo "#define HAVE_ICONV 1" >>confdefs.h
+
+  fi
+  if test "$am_cv_lib_iconv" = yes; then
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to link with libiconv" >&5
+$as_echo_n "checking how to link with libiconv... " >&6; }
+    { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LIBICONV" >&5
+$as_echo "$LIBICONV" >&6; }
+  else
+            CPPFLAGS="$am_save_CPPFLAGS"
+    LIBICONV=
+    LTLIBICONV=
+  fi
 
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for libiconv_open in -liconv" >&5
-$as_echo_n "checking for libiconv_open in -liconv... " >&6; }
-if ${ac_cv_lib_iconv_libiconv_open+:} false; then :
+
+
+  if test "$am_cv_func_iconv" = yes; then
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for iconv declaration" >&5
+$as_echo_n "checking for iconv declaration... " >&6; }
+    if ${am_cv_proto_iconv+:} false; then :
   $as_echo_n "(cached) " >&6
 else
-  ac_check_lib_save_LIBS=$LIBS
-LIBS="-liconv  $LIBS"
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+
+      cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 
-/* Override any GCC internal prototype to avoid an error.
-   Use char because int might match the return type of a GCC
-   builtin and then its argument prototype would still apply.  */
+#include <stdlib.h>
+#include <iconv.h>
+extern
 #ifdef __cplusplus
-extern "C"
+"C"
+#endif
+#if defined(__STDC__) || defined(__cplusplus)
+size_t iconv (iconv_t cd, char * *inbuf, size_t *inbytesleft, char * *outbuf, size_t *outbytesleft);
+#else
+size_t iconv();
 #endif
-char libiconv_open ();
+
 int
 main ()
 {
-return libiconv_open ();
+
   ;
   return 0;
 }
 _ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
-  ac_cv_lib_iconv_libiconv_open=yes
+if ac_fn_c_try_compile "$LINENO"; then :
+  am_cv_proto_iconv_arg1=""
 else
-  ac_cv_lib_iconv_libiconv_open=no
-fi
-rm -f core conftest.err conftest.$ac_objext \
-    conftest$ac_exeext conftest.$ac_ext
-LIBS=$ac_check_lib_save_LIBS
+  am_cv_proto_iconv_arg1="const"
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_iconv_libiconv_open" >&5
-$as_echo "$ac_cv_lib_iconv_libiconv_open" >&6; }
-if test "x$ac_cv_lib_iconv_libiconv_open" = xyes; then :
-  ICONV_LIBS="-liconv"
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+      am_cv_proto_iconv="extern size_t iconv (iconv_t cd, $am_cv_proto_iconv_arg1 char * *inbuf, size_t *inbytesleft, char * *outbuf, size_t *outbytesleft);"
 fi
 
+    am_cv_proto_iconv=`echo "$am_cv_proto_iconv" | tr -s ' ' | sed -e 's/( /(/'`
+    { $as_echo "$as_me:${as_lineno-$LINENO}: result:
+         $am_cv_proto_iconv" >&5
+$as_echo "
+         $am_cv_proto_iconv" >&6; }
+
+cat >>confdefs.h <<_ACEOF
+#define ICONV_CONST $am_cv_proto_iconv_arg1
+_ACEOF
+
+  fi
 
-LIBS="$LIBS $ICONV_LIBS"
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing sqrtf" >&5
 $as_echo_n "checking for library containing sqrtf... " >&6; }
 if ${ac_cv_search_sqrtf+:} false; then :
@@ -11818,6 +12727,8 @@ if test $ac_cv_sizeof_void_p = $ac_cv_sizeof_int; then
    GSIZE_FORMAT='"u"'
    G_GUINT64_FORMAT='"llu"'
    G_GINT64_FORMAT='"lld"'
+   G_GUINT32_FORMAT='"lu"'
+   G_GINT32_FORMAT='"ld"'
 elif test $ac_cv_sizeof_void_p = $ac_cv_sizeof_long; then
    GPOINTER_TO_INT="((gint)(long) (ptr))"
    GPOINTER_TO_UINT="((guint)(long) (ptr))"
@@ -11827,6 +12738,8 @@ elif test $ac_cv_sizeof_void_p = $ac_cv_sizeof_long; then
    GSIZE_FORMAT='"lu"'
    G_GUINT64_FORMAT='"lu"'
    G_GINT64_FORMAT='"ld"'
+   G_GUINT32_FORMAT='"u"'
+   G_GINT32_FORMAT='"d"'
 elif test $ac_cv_sizeof_void_p = $ac_cv_sizeof_long_long; then
    GPOINTER_TO_INT="((gint)(long long) (ptr))"
    GPOINTER_TO_UINT="((guint)(unsigned long long) (ptr))"
@@ -11836,6 +12749,8 @@ elif test $ac_cv_sizeof_void_p = $ac_cv_sizeof_long_long; then
    GSIZE_FORMAT='"I64u"'
    G_GUINT64_FORMAT='"I64u"'
    G_GINT64_FORMAT='"I64i"'
+   G_GUINT32_FORMAT='"I32u"'
+   G_GINT32_FORMAT='"I32i"'
 else
    as_fn_error $? "unsupported pointer size" "$LINENO" 5
 fi
@@ -11932,6 +12847,8 @@ fi
 
 
 
+
+
 if test x$enable_quiet_build = xyes; then
    ac_config_commands="$ac_config_commands quiet"
 
@@ -11939,7 +12856,7 @@ if test x$enable_quiet_build = xyes; then
 
 fi
 
-ac_config_files="$ac_config_files Makefile src/Makefile src/eglib-config.h test/Makefile"
+ac_config_files="$ac_config_files Makefile m4/Makefile src/Makefile src/eglib-config.h test/Makefile"
 
 cat >confcache <<\_ACEOF
 # This file is a shell script that caches the results of configure
@@ -12508,7 +13425,7 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
 # report actual input values of CONFIG_FILES etc. instead of their
 # values after options handling.
 ac_log="
-This file was extended by $as_me, which was
+This file was extended by eglib $as_me 0.3, which was
 generated by GNU Autoconf 2.68.  Invocation command line was
 
   CONFIG_FILES    = $CONFIG_FILES
@@ -12568,13 +13485,13 @@ $config_headers
 Configuration commands:
 $config_commands
 
-Report bugs to the package provider."
+Report bugs to <http://bugzilla.xamarin.com/enter_bug.cgi?classification=Mono>."
 
 _ACEOF
 cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`"
 ac_cs_version="\\
-config.status
+eglib config.status 0.3
 configured by $0, generated by GNU Autoconf 2.68,
   with options \\"\$ac_cs_config\\"
 
@@ -12965,6 +13882,7 @@ do
     "quiet") CONFIG_COMMANDS="$CONFIG_COMMANDS quiet" ;;
     "quiet-libtool") CONFIG_COMMANDS="$CONFIG_COMMANDS quiet-libtool" ;;
     "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;;
+    "m4/Makefile") CONFIG_FILES="$CONFIG_FILES m4/Makefile" ;;
     "src/Makefile") CONFIG_FILES="$CONFIG_FILES src/Makefile" ;;
     "src/eglib-config.h") CONFIG_FILES="$CONFIG_FILES src/eglib-config.h" ;;
     "test/Makefile") CONFIG_FILES="$CONFIG_FILES test/Makefile" ;;
@@ -14292,7 +15210,12 @@ _LT_EOF
   chmod +x "$ofile"
 
  ;;
-    "quiet":C) for i in `find src test -name Makefile.in | sed -e 's/Makefile.in/Makefile/g'`; do if test -f $i; then $srcdir/../scripts/patch-quiet.sh $i; fi; done ;;
+    "quiet":C)   for i in `find mono src test -name Makefile`; do
+   	   if  grep -q 'generated by automake' $i ; then
+	   	  $srcdir/../scripts/patch-quiet.sh $i;
+	   fi;
+   done
+ ;;
     "quiet-libtool":C) sed -e 's/$echo "copying selected/$show "copying selected/g' < libtool > libtool.tmp && mv libtool.tmp libtool && chmod a+x libtool; sed -e 's/$ECHO "copying selected/# "copying selected/g' < libtool > libtool.tmp && mv libtool.tmp libtool && chmod a+x libtool ;;
 
   esac
diff --git a/eglib/configure.ac b/eglib/configure.ac
index b011dbe..af12bc5 100644
--- a/eglib/configure.ac
+++ b/eglib/configure.ac
@@ -1,15 +1,22 @@
-AC_INIT(README)
+#
+# Copyright 2012 Xamarin Inc
+#
+AC_INIT(eglib, [0.3],
+        [http://bugzilla.xamarin.com/enter_bug.cgi?classification=Mono])
+
+AC_CONFIG_SRCDIR([README])
+AC_CONFIG_MACRO_DIR([m4])
 AC_CANONICAL_SYSTEM
+AC_CANONICAL_HOST
 
-AM_CONFIG_HEADER(config.h)
-AM_INIT_AUTOMAKE(eglib,0.3)
+AM_INIT_AUTOMAKE([1.9 dist-bzip2 tar-ustar no-dist-gzip foreign])
+AM_CONFIG_HEADER([config.h])
 AM_MAINTAINER_MODE
 
 AC_PROG_CC
 AM_PROG_LIBTOOL
 # Use dolt (http://dolt.freedesktop.org/) instead of libtool for building.
 DOLT
-CFLAGS="$CFLAGS -O0"
 GNUC_PRETTY=
 GNUC_UNUSED=
 BREAKPOINT="G_STMT_START { raise (SIGTRAP); } G_STMT_END"
@@ -106,14 +113,9 @@ AC_CHECK_SIZEOF(int)
 AC_CHECK_SIZEOF(void *)
 AC_CHECK_SIZEOF(long)
 AC_CHECK_SIZEOF(long long)
-AC_CHECK_FUNCS(strndup strlcpy getpwuid_r strtok_r rewinddir vasprintf)
+AC_CHECK_FUNCS(strndup strlcpy stpcpy getpwuid_r strtok_r rewinddir vasprintf)
 AM_CONDITIONAL(NEED_VASPRINTF, test x$have_vasprintf = x )
-AC_CHECK_LIB(iconv, iconv_open, LIBS="$LIBS -liconv")
-AC_CHECK_LIB(iconv, libiconv_open, LIBS="$LIBS -liconv")
-AC_CHECK_LIB(iconv, iconv_open, ICONV_LIBS="-liconv")
-AC_CHECK_LIB(iconv, libiconv_open, ICONV_LIBS="-liconv")
-AC_SUBST(ICONV_LIBS)
-LIBS="$LIBS $ICONV_LIBS"
+AM_ICONV()
 AC_SEARCH_LIBS(sqrtf, m)
 
 # nanosleep may not be part of libc, also search it in other libraries
@@ -155,6 +157,8 @@ if test $ac_cv_sizeof_void_p = $ac_cv_sizeof_int; then
    GSIZE_FORMAT='"u"'
    G_GUINT64_FORMAT='"llu"'
    G_GINT64_FORMAT='"lld"'
+   G_GUINT32_FORMAT='"lu"'
+   G_GINT32_FORMAT='"ld"'
 elif test $ac_cv_sizeof_void_p = $ac_cv_sizeof_long; then
    GPOINTER_TO_INT="((gint)(long) (ptr))"
    GPOINTER_TO_UINT="((guint)(long) (ptr))"
@@ -164,6 +168,8 @@ elif test $ac_cv_sizeof_void_p = $ac_cv_sizeof_long; then
    GSIZE_FORMAT='"lu"'
    G_GUINT64_FORMAT='"lu"'
    G_GINT64_FORMAT='"ld"'
+   G_GUINT32_FORMAT='"u"'
+   G_GINT32_FORMAT='"d"'
 elif test $ac_cv_sizeof_void_p = $ac_cv_sizeof_long_long; then
    GPOINTER_TO_INT="((gint)(long long) (ptr))"
    GPOINTER_TO_UINT="((guint)(unsigned long long) (ptr))"
@@ -173,6 +179,8 @@ elif test $ac_cv_sizeof_void_p = $ac_cv_sizeof_long_long; then
    GSIZE_FORMAT='"I64u"'
    G_GUINT64_FORMAT='"I64u"'
    G_GINT64_FORMAT='"I64i"'
+   G_GUINT32_FORMAT='"I32u"'
+   G_GINT32_FORMAT='"I32i"'
 else
    AC_MSG_ERROR([unsupported pointer size])
 fi
@@ -214,14 +222,23 @@ AC_SUBST(GSIZE)
 AC_SUBST(GSIZE_FORMAT)
 AC_SUBST(G_GUINT64_FORMAT)
 AC_SUBST(G_GINT64_FORMAT)
+AC_SUBST(G_GUINT32_FORMAT)
+AC_SUBST(G_GINT32_FORMAT)
 
 if test x$enable_quiet_build = xyes; then
-   AC_CONFIG_COMMANDS([quiet], [for i in `find src test -name Makefile.in | sed -e 's/Makefile.in/Makefile/g'`; do if test -f $i; then $srcdir/../scripts/patch-quiet.sh $i; fi; done], [shell=$SHELL])
+   AC_CONFIG_COMMANDS([quiet],
+[  for i in `find mono src test -name Makefile`; do
+   	   if [ grep -q 'generated by automake' $i ]; then
+	   	  $srcdir/../scripts/patch-quiet.sh $i;
+	   fi;
+   done
+], [shell=$SHELL])
    AC_CONFIG_COMMANDS([quiet-libtool], [sed -e 's/$echo "copying selected/$show "copying selected/g' < libtool > libtool.tmp && mv libtool.tmp libtool && chmod a+x libtool; sed -e 's/$ECHO "copying selected/# "copying selected/g' < libtool > libtool.tmp && mv libtool.tmp libtool && chmod a+x libtool])
 fi
 
 AC_OUTPUT([
 Makefile
+m4/Makefile
 src/Makefile
 src/eglib-config.h
 test/Makefile
diff --git a/eglib/m4/Makefile.am b/eglib/m4/Makefile.am
new file mode 100644
index 0000000..af864e3
--- /dev/null
+++ b/eglib/m4/Makefile.am
@@ -0,0 +1 @@
+EXTRA_DIST = $(wildcard *.m4)
diff --git a/eglib/m4/Makefile.in b/eglib/m4/Makefile.in
new file mode 100644
index 0000000..0788a1d
--- /dev/null
+++ b/eglib/m4/Makefile.in
@@ -0,0 +1,386 @@
+# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009  Free Software Foundation,
+# Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+ at SET_MAKE@
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+target_triplet = @target@
+subdir = m4
+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/iconv.m4 \
+	$(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
+	$(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+	$(ACLOCAL_M4)
+mkinstalldirs = $(SHELL) $(top_srcdir)/../mkinstalldirs
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+SOURCES =
+DIST_SOURCES =
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AR = @AR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+BREAKPOINT = @BREAKPOINT@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DOLT_BASH = @DOLT_BASH@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+FGREP = @FGREP@
+GINT_TO_POINTER = @GINT_TO_POINTER@
+GNUC_NORETURN = @GNUC_NORETURN@
+GNUC_PRETTY = @GNUC_PRETTY@
+GNUC_UNUSED = @GNUC_UNUSED@
+GPOINTER_TO_INT = @GPOINTER_TO_INT@
+GPOINTER_TO_UINT = @GPOINTER_TO_UINT@
+GREP = @GREP@
+GSIZE = @GSIZE@
+GSIZE_FORMAT = @GSIZE_FORMAT@
+GUINT_TO_POINTER = @GUINT_TO_POINTER@
+G_GINT32_FORMAT = @G_GINT32_FORMAT@
+G_GINT64_FORMAT = @G_GINT64_FORMAT@
+G_GUINT32_FORMAT = @G_GUINT32_FORMAT@
+G_GUINT64_FORMAT = @G_GUINT64_FORMAT@
+G_HAVE_ISO_VARARGS = @G_HAVE_ISO_VARARGS@
+HAVE_ALLOCA_H = @HAVE_ALLOCA_H@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBICONV = @LIBICONV@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTCOMPILE = @LTCOMPILE@
+LTCXXCOMPILE = @LTCXXCOMPILE@
+LTLIBICONV = @LTLIBICONV@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MKDIR_P = @MKDIR_P@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+ORDER = @ORDER@
+OS = @OS@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATHSEP = @PATHSEP@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PIDTYPE = @PIDTYPE@
+PKG_CONFIG = @PKG_CONFIG@
+RANLIB = @RANLIB@
+SEARCHSEP = @SEARCHSEP@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+VERSION = @VERSION@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+lt_ECHO = @lt_ECHO@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target = @target@
+target_alias = @target_alias@
+target_cpu = @target_cpu@
+target_os = @target_os@
+target_vendor = @target_vendor@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+EXTRA_DIST = $(wildcard *.m4)
+all: all-am
+
+.SUFFIXES:
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__configure_deps)
+	@for dep in $?; do \
+	  case '$(am__configure_deps)' in \
+	    *$$dep*) \
+	      ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+	        && { if test -f $@; then exit 0; else break; fi; }; \
+	      exit 1;; \
+	  esac; \
+	done; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign m4/Makefile'; \
+	$(am__cd) $(top_srcdir) && \
+	  $(AUTOMAKE) --foreign m4/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+	@case '$?' in \
+	  *config.status*) \
+	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+	  *) \
+	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+	esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+mostlyclean-libtool:
+	-rm -f *.lo
+
+clean-libtool:
+	-rm -rf .libs _libs
+tags: TAGS
+TAGS:
+
+ctags: CTAGS
+CTAGS:
+
+
+distdir: $(DISTFILES)
+	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	list='$(DISTFILES)'; \
+	  dist_files=`for file in $$list; do echo $$file; done | \
+	  sed -e "s|^$$srcdirstrip/||;t" \
+	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+	case $$dist_files in \
+	  */*) $(MKDIR_P) `echo "$$dist_files" | \
+			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+			   sort -u` ;; \
+	esac; \
+	for file in $$dist_files; do \
+	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+	  if test -d $$d/$$file; then \
+	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+	    if test -d "$(distdir)/$$file"; then \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+	  else \
+	    test -f "$(distdir)/$$file" \
+	    || cp -p $$d/$$file "$(distdir)/$$file" \
+	    || exit 1; \
+	  fi; \
+	done
+check-am: all-am
+check: check-am
+all-am: Makefile
+installdirs:
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	  `test -z '$(STRIP)' || \
+	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+	@echo "This command is intended for maintainers to use"
+	@echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-libtool mostlyclean-am
+
+distclean: distclean-am
+	-rm -f Makefile
+distclean-am: clean-am distclean-generic
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+	-rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-generic mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: install-am install-strip
+
+.PHONY: all all-am check check-am clean clean-generic clean-libtool \
+	distclean distclean-generic distclean-libtool distdir dvi \
+	dvi-am html html-am info info-am install install-am \
+	install-data install-data-am install-dvi install-dvi-am \
+	install-exec install-exec-am install-html install-html-am \
+	install-info install-info-am install-man install-pdf \
+	install-pdf-am install-ps install-ps-am install-strip \
+	installcheck installcheck-am installdirs maintainer-clean \
+	maintainer-clean-generic mostlyclean mostlyclean-generic \
+	mostlyclean-libtool pdf pdf-am ps ps-am uninstall uninstall-am
+
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/eglib/m4/iconv.m4 b/eglib/m4/iconv.m4
new file mode 100644
index 0000000..e2041b9
--- /dev/null
+++ b/eglib/m4/iconv.m4
@@ -0,0 +1,214 @@
+# iconv.m4 serial 11 (gettext-0.18.1)
+dnl Copyright (C) 2000-2002, 2007-2010 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+dnl From Bruno Haible.
+
+AC_DEFUN([AM_ICONV_LINKFLAGS_BODY],
+[
+  dnl Prerequisites of AC_LIB_LINKFLAGS_BODY.
+  AC_REQUIRE([AC_LIB_PREPARE_PREFIX])
+  AC_REQUIRE([AC_LIB_RPATH])
+
+  dnl Search for libiconv and define LIBICONV, LTLIBICONV and INCICONV
+  dnl accordingly.
+  AC_LIB_LINKFLAGS_BODY([iconv])
+])
+
+AC_DEFUN([AM_ICONV_LINK],
+[
+  dnl Some systems have iconv in libc, some have it in libiconv (OSF/1 and
+  dnl those with the standalone portable GNU libiconv installed).
+  AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles
+
+  dnl Search for libiconv and define LIBICONV, LTLIBICONV and INCICONV
+  dnl accordingly.
+  AC_REQUIRE([AM_ICONV_LINKFLAGS_BODY])
+
+  dnl Add $INCICONV to CPPFLAGS before performing the following checks,
+  dnl because if the user has installed libiconv and not disabled its use
+  dnl via --without-libiconv-prefix, he wants to use it. The first
+  dnl AC_TRY_LINK will then fail, the second AC_TRY_LINK will succeed.
+  am_save_CPPFLAGS="$CPPFLAGS"
+  AC_LIB_APPENDTOVAR([CPPFLAGS], [$INCICONV])
+
+  AC_CACHE_CHECK([for iconv], [am_cv_func_iconv], [
+    am_cv_func_iconv="no, consider installing GNU libiconv"
+    am_cv_lib_iconv=no
+    AC_TRY_LINK([#include <stdlib.h>
+#include <iconv.h>],
+      [iconv_t cd = iconv_open("","");
+       iconv(cd,NULL,NULL,NULL,NULL);
+       iconv_close(cd);],
+      [am_cv_func_iconv=yes])
+    if test "$am_cv_func_iconv" != yes; then
+      am_save_LIBS="$LIBS"
+      LIBS="$LIBS $LIBICONV"
+      AC_TRY_LINK([#include <stdlib.h>
+#include <iconv.h>],
+        [iconv_t cd = iconv_open("","");
+         iconv(cd,NULL,NULL,NULL,NULL);
+         iconv_close(cd);],
+        [am_cv_lib_iconv=yes]
+        [am_cv_func_iconv=yes])
+      LIBS="$am_save_LIBS"
+    fi
+  ])
+  if test "$am_cv_func_iconv" = yes; then
+    AC_CACHE_CHECK([for working iconv], [am_cv_func_iconv_works], [
+      dnl This tests against bugs in AIX 5.1, HP-UX 11.11, Solaris 10.
+      am_save_LIBS="$LIBS"
+      if test $am_cv_lib_iconv = yes; then
+        LIBS="$LIBS $LIBICONV"
+      fi
+      AC_TRY_RUN([
+#include <iconv.h>
+#include <string.h>
+int main ()
+{
+  /* Test against AIX 5.1 bug: Failures are not distinguishable from successful
+     returns.  */
+  {
+    iconv_t cd_utf8_to_88591 = iconv_open ("ISO8859-1", "UTF-8");
+    if (cd_utf8_to_88591 != (iconv_t)(-1))
+      {
+        static const char input[] = "\342\202\254"; /* EURO SIGN */
+        char buf[10];
+        const char *inptr = input;
+        size_t inbytesleft = strlen (input);
+        char *outptr = buf;
+        size_t outbytesleft = sizeof (buf);
+        size_t res = iconv (cd_utf8_to_88591,
+                            (char **) &inptr, &inbytesleft,
+                            &outptr, &outbytesleft);
+        if (res == 0)
+          return 1;
+      }
+  }
+  /* Test against Solaris 10 bug: Failures are not distinguishable from
+     successful returns.  */
+  {
+    iconv_t cd_ascii_to_88591 = iconv_open ("ISO8859-1", "646");
+    if (cd_ascii_to_88591 != (iconv_t)(-1))
+      {
+        static const char input[] = "\263";
+        char buf[10];
+        const char *inptr = input;
+        size_t inbytesleft = strlen (input);
+        char *outptr = buf;
+        size_t outbytesleft = sizeof (buf);
+        size_t res = iconv (cd_ascii_to_88591,
+                            (char **) &inptr, &inbytesleft,
+                            &outptr, &outbytesleft);
+        if (res == 0)
+          return 1;
+      }
+  }
+#if 0 /* This bug could be worked around by the caller.  */
+  /* Test against HP-UX 11.11 bug: Positive return value instead of 0.  */
+  {
+    iconv_t cd_88591_to_utf8 = iconv_open ("utf8", "iso88591");
+    if (cd_88591_to_utf8 != (iconv_t)(-1))
+      {
+        static const char input[] = "\304rger mit b\366sen B\374bchen ohne Augenma\337";
+        char buf[50];
+        const char *inptr = input;
+        size_t inbytesleft = strlen (input);
+        char *outptr = buf;
+        size_t outbytesleft = sizeof (buf);
+        size_t res = iconv (cd_88591_to_utf8,
+                            (char **) &inptr, &inbytesleft,
+                            &outptr, &outbytesleft);
+        if ((int)res > 0)
+          return 1;
+      }
+  }
+#endif
+  /* Test against HP-UX 11.11 bug: No converter from EUC-JP to UTF-8 is
+     provided.  */
+  if (/* Try standardized names.  */
+      iconv_open ("UTF-8", "EUC-JP") == (iconv_t)(-1)
+      /* Try IRIX, OSF/1 names.  */
+      && iconv_open ("UTF-8", "eucJP") == (iconv_t)(-1)
+      /* Try AIX names.  */
+      && iconv_open ("UTF-8", "IBM-eucJP") == (iconv_t)(-1)
+      /* Try HP-UX names.  */
+      && iconv_open ("utf8", "eucJP") == (iconv_t)(-1))
+    return 1;
+  return 0;
+}], [am_cv_func_iconv_works=yes], [am_cv_func_iconv_works=no],
+        [case "$host_os" in
+           aix* | hpux*) am_cv_func_iconv_works="guessing no" ;;
+           *)            am_cv_func_iconv_works="guessing yes" ;;
+         esac])
+      LIBS="$am_save_LIBS"
+    ])
+    case "$am_cv_func_iconv_works" in
+      *no) am_func_iconv=no am_cv_lib_iconv=no ;;
+      *)   am_func_iconv=yes ;;
+    esac
+  else
+    am_func_iconv=no am_cv_lib_iconv=no
+  fi
+  if test "$am_func_iconv" = yes; then
+    AC_DEFINE([HAVE_ICONV], [1],
+      [Define if you have the iconv() function and it works.])
+  fi
+  if test "$am_cv_lib_iconv" = yes; then
+    AC_MSG_CHECKING([how to link with libiconv])
+    AC_MSG_RESULT([$LIBICONV])
+  else
+    dnl If $LIBICONV didn't lead to a usable library, we don't need $INCICONV
+    dnl either.
+    CPPFLAGS="$am_save_CPPFLAGS"
+    LIBICONV=
+    LTLIBICONV=
+  fi
+  AC_SUBST([LIBICONV])
+  AC_SUBST([LTLIBICONV])
+])
+
+dnl Define AM_ICONV using AC_DEFUN_ONCE for Autoconf >= 2.64, in order to
+dnl avoid warnings like
+dnl "warning: AC_REQUIRE: `AM_ICONV' was expanded before it was required".
+dnl This is tricky because of the way 'aclocal' is implemented:
+dnl - It requires defining an auxiliary macro whose name ends in AC_DEFUN.
+dnl   Otherwise aclocal's initial scan pass would miss the macro definition.
+dnl - It requires a line break inside the AC_DEFUN_ONCE and AC_DEFUN expansions.
+dnl   Otherwise aclocal would emit many "Use of uninitialized value $1"
+dnl   warnings.
+m4_define([gl_iconv_AC_DEFUN],
+  m4_version_prereq([2.64],
+    [[AC_DEFUN_ONCE(
+        [$1], [$2])]],
+    [[AC_DEFUN(
+        [$1], [$2])]]))
+gl_iconv_AC_DEFUN([AM_ICONV],
+[
+  AM_ICONV_LINK
+  if test "$am_cv_func_iconv" = yes; then
+    AC_MSG_CHECKING([for iconv declaration])
+    AC_CACHE_VAL([am_cv_proto_iconv], [
+      AC_TRY_COMPILE([
+#include <stdlib.h>
+#include <iconv.h>
+extern
+#ifdef __cplusplus
+"C"
+#endif
+#if defined(__STDC__) || defined(__cplusplus)
+size_t iconv (iconv_t cd, char * *inbuf, size_t *inbytesleft, char * *outbuf, size_t *outbytesleft);
+#else
+size_t iconv();
+#endif
+], [], [am_cv_proto_iconv_arg1=""], [am_cv_proto_iconv_arg1="const"])
+      am_cv_proto_iconv="extern size_t iconv (iconv_t cd, $am_cv_proto_iconv_arg1 char * *inbuf, size_t *inbytesleft, char * *outbuf, size_t *outbytesleft);"])
+    am_cv_proto_iconv=`echo "[$]am_cv_proto_iconv" | tr -s ' ' | sed -e 's/( /(/'`
+    AC_MSG_RESULT([
+         $am_cv_proto_iconv])
+    AC_DEFINE_UNQUOTED([ICONV_CONST], [$am_cv_proto_iconv_arg1],
+      [Define as const if the declaration of iconv() needs const.])
+  fi
+])
diff --git a/eglib/m4/lib-ld.m4 b/eglib/m4/lib-ld.m4
new file mode 100644
index 0000000..ebb3052
--- /dev/null
+++ b/eglib/m4/lib-ld.m4
@@ -0,0 +1,110 @@
+# lib-ld.m4 serial 4 (gettext-0.18)
+dnl Copyright (C) 1996-2003, 2009-2010 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+dnl Subroutines of libtool.m4,
+dnl with replacements s/AC_/AC_LIB/ and s/lt_cv/acl_cv/ to avoid collision
+dnl with libtool.m4.
+
+dnl From libtool-1.4. Sets the variable with_gnu_ld to yes or no.
+AC_DEFUN([AC_LIB_PROG_LD_GNU],
+[AC_CACHE_CHECK([if the linker ($LD) is GNU ld], [acl_cv_prog_gnu_ld],
+[# I'd rather use --version here, but apparently some GNU ld's only accept -v.
+case `$LD -v 2>&1 </dev/null` in
+*GNU* | *'with BFD'*)
+  acl_cv_prog_gnu_ld=yes ;;
+*)
+  acl_cv_prog_gnu_ld=no ;;
+esac])
+with_gnu_ld=$acl_cv_prog_gnu_ld
+])
+
+dnl From libtool-1.4. Sets the variable LD.
+AC_DEFUN([AC_LIB_PROG_LD],
+[AC_ARG_WITH([gnu-ld],
+[  --with-gnu-ld           assume the C compiler uses GNU ld [default=no]],
+test "$withval" = no || with_gnu_ld=yes, with_gnu_ld=no)
+AC_REQUIRE([AC_PROG_CC])dnl
+AC_REQUIRE([AC_CANONICAL_HOST])dnl
+# Prepare PATH_SEPARATOR.
+# The user is always right.
+if test "${PATH_SEPARATOR+set}" != set; then
+  echo "#! /bin/sh" >conf$$.sh
+  echo  "exit 0"   >>conf$$.sh
+  chmod +x conf$$.sh
+  if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then
+    PATH_SEPARATOR=';'
+  else
+    PATH_SEPARATOR=:
+  fi
+  rm -f conf$$.sh
+fi
+ac_prog=ld
+if test "$GCC" = yes; then
+  # Check if gcc -print-prog-name=ld gives a path.
+  AC_MSG_CHECKING([for ld used by GCC])
+  case $host in
+  *-*-mingw*)
+    # gcc leaves a trailing carriage return which upsets mingw
+    ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;;
+  *)
+    ac_prog=`($CC -print-prog-name=ld) 2>&5` ;;
+  esac
+  case $ac_prog in
+    # Accept absolute paths.
+    [[\\/]* | [A-Za-z]:[\\/]*)]
+      [re_direlt='/[^/][^/]*/\.\./']
+      # Canonicalize the path of ld
+      ac_prog=`echo $ac_prog| sed 's%\\\\%/%g'`
+      while echo $ac_prog | grep "$re_direlt" > /dev/null 2>&1; do
+        ac_prog=`echo $ac_prog| sed "s%$re_direlt%/%"`
+      done
+      test -z "$LD" && LD="$ac_prog"
+      ;;
+  "")
+    # If it fails, then pretend we aren't using GCC.
+    ac_prog=ld
+    ;;
+  *)
+    # If it is relative, then search for the first ld in PATH.
+    with_gnu_ld=unknown
+    ;;
+  esac
+elif test "$with_gnu_ld" = yes; then
+  AC_MSG_CHECKING([for GNU ld])
+else
+  AC_MSG_CHECKING([for non-GNU ld])
+fi
+AC_CACHE_VAL([acl_cv_path_LD],
+[if test -z "$LD"; then
+  IFS="${IFS= 	}"; ac_save_ifs="$IFS"; IFS="${IFS}${PATH_SEPARATOR-:}"
+  for ac_dir in $PATH; do
+    test -z "$ac_dir" && ac_dir=.
+    if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then
+      acl_cv_path_LD="$ac_dir/$ac_prog"
+      # Check to see if the program is GNU ld.  I'd rather use --version,
+      # but apparently some GNU ld's only accept -v.
+      # Break only if it was the GNU/non-GNU ld that we prefer.
+      case `"$acl_cv_path_LD" -v 2>&1 < /dev/null` in
+      *GNU* | *'with BFD'*)
+        test "$with_gnu_ld" != no && break ;;
+      *)
+        test "$with_gnu_ld" != yes && break ;;
+      esac
+    fi
+  done
+  IFS="$ac_save_ifs"
+else
+  acl_cv_path_LD="$LD" # Let the user override the test with a path.
+fi])
+LD="$acl_cv_path_LD"
+if test -n "$LD"; then
+  AC_MSG_RESULT([$LD])
+else
+  AC_MSG_RESULT([no])
+fi
+test -z "$LD" && AC_MSG_ERROR([no acceptable ld found in \$PATH])
+AC_LIB_PROG_LD_GNU
+])
diff --git a/eglib/m4/lib-link.m4 b/eglib/m4/lib-link.m4
new file mode 100644
index 0000000..c73bd8e
--- /dev/null
+++ b/eglib/m4/lib-link.m4
@@ -0,0 +1,774 @@
+# lib-link.m4 serial 21 (gettext-0.18)
+dnl Copyright (C) 2001-2010 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+dnl From Bruno Haible.
+
+AC_PREREQ([2.54])
+
+dnl AC_LIB_LINKFLAGS(name [, dependencies]) searches for libname and
+dnl the libraries corresponding to explicit and implicit dependencies.
+dnl Sets and AC_SUBSTs the LIB${NAME} and LTLIB${NAME} variables and
+dnl augments the CPPFLAGS variable.
+dnl Sets and AC_SUBSTs the LIB${NAME}_PREFIX variable to nonempty if libname
+dnl was found in ${LIB${NAME}_PREFIX}/$acl_libdirstem.
+AC_DEFUN([AC_LIB_LINKFLAGS],
+[
+  AC_REQUIRE([AC_LIB_PREPARE_PREFIX])
+  AC_REQUIRE([AC_LIB_RPATH])
+  pushdef([Name],[translit([$1],[./-], [___])])
+  pushdef([NAME],[translit([$1],[abcdefghijklmnopqrstuvwxyz./-],
+                                [ABCDEFGHIJKLMNOPQRSTUVWXYZ___])])
+  AC_CACHE_CHECK([how to link with lib[]$1], [ac_cv_lib[]Name[]_libs], [
+    AC_LIB_LINKFLAGS_BODY([$1], [$2])
+    ac_cv_lib[]Name[]_libs="$LIB[]NAME"
+    ac_cv_lib[]Name[]_ltlibs="$LTLIB[]NAME"
+    ac_cv_lib[]Name[]_cppflags="$INC[]NAME"
+    ac_cv_lib[]Name[]_prefix="$LIB[]NAME[]_PREFIX"
+  ])
+  LIB[]NAME="$ac_cv_lib[]Name[]_libs"
+  LTLIB[]NAME="$ac_cv_lib[]Name[]_ltlibs"
+  INC[]NAME="$ac_cv_lib[]Name[]_cppflags"
+  LIB[]NAME[]_PREFIX="$ac_cv_lib[]Name[]_prefix"
+  AC_LIB_APPENDTOVAR([CPPFLAGS], [$INC]NAME)
+  AC_SUBST([LIB]NAME)
+  AC_SUBST([LTLIB]NAME)
+  AC_SUBST([LIB]NAME[_PREFIX])
+  dnl Also set HAVE_LIB[]NAME so that AC_LIB_HAVE_LINKFLAGS can reuse the
+  dnl results of this search when this library appears as a dependency.
+  HAVE_LIB[]NAME=yes
+  popdef([NAME])
+  popdef([Name])
+])
+
+dnl AC_LIB_HAVE_LINKFLAGS(name, dependencies, includes, testcode, [missing-message])
+dnl searches for libname and the libraries corresponding to explicit and
+dnl implicit dependencies, together with the specified include files and
+dnl the ability to compile and link the specified testcode. The missing-message
+dnl defaults to 'no' and may contain additional hints for the user.
+dnl If found, it sets and AC_SUBSTs HAVE_LIB${NAME}=yes and the LIB${NAME}
+dnl and LTLIB${NAME} variables and augments the CPPFLAGS variable, and
+dnl #defines HAVE_LIB${NAME} to 1. Otherwise, it sets and AC_SUBSTs
+dnl HAVE_LIB${NAME}=no and LIB${NAME} and LTLIB${NAME} to empty.
+dnl Sets and AC_SUBSTs the LIB${NAME}_PREFIX variable to nonempty if libname
+dnl was found in ${LIB${NAME}_PREFIX}/$acl_libdirstem.
+AC_DEFUN([AC_LIB_HAVE_LINKFLAGS],
+[
+  AC_REQUIRE([AC_LIB_PREPARE_PREFIX])
+  AC_REQUIRE([AC_LIB_RPATH])
+  pushdef([Name],[translit([$1],[./-], [___])])
+  pushdef([NAME],[translit([$1],[abcdefghijklmnopqrstuvwxyz./-],
+                                [ABCDEFGHIJKLMNOPQRSTUVWXYZ___])])
+
+  dnl Search for lib[]Name and define LIB[]NAME, LTLIB[]NAME and INC[]NAME
+  dnl accordingly.
+  AC_LIB_LINKFLAGS_BODY([$1], [$2])
+
+  dnl Add $INC[]NAME to CPPFLAGS before performing the following checks,
+  dnl because if the user has installed lib[]Name and not disabled its use
+  dnl via --without-lib[]Name-prefix, he wants to use it.
+  ac_save_CPPFLAGS="$CPPFLAGS"
+  AC_LIB_APPENDTOVAR([CPPFLAGS], [$INC]NAME)
+
+  AC_CACHE_CHECK([for lib[]$1], [ac_cv_lib[]Name], [
+    ac_save_LIBS="$LIBS"
+    dnl If $LIB[]NAME contains some -l options, add it to the end of LIBS,
+    dnl because these -l options might require -L options that are present in
+    dnl LIBS. -l options benefit only from the -L options listed before it.
+    dnl Otherwise, add it to the front of LIBS, because it may be a static
+    dnl library that depends on another static library that is present in LIBS.
+    dnl Static libraries benefit only from the static libraries listed after
+    dnl it.
+    case " $LIB[]NAME" in
+      *" -l"*) LIBS="$LIBS $LIB[]NAME" ;;
+      *)       LIBS="$LIB[]NAME $LIBS" ;;
+    esac
+    AC_TRY_LINK([$3], [$4],
+      [ac_cv_lib[]Name=yes],
+      [ac_cv_lib[]Name='m4_if([$5], [], [no], [[$5]])'])
+    LIBS="$ac_save_LIBS"
+  ])
+  if test "$ac_cv_lib[]Name" = yes; then
+    HAVE_LIB[]NAME=yes
+    AC_DEFINE([HAVE_LIB]NAME, 1, [Define if you have the lib][$1 library.])
+    AC_MSG_CHECKING([how to link with lib[]$1])
+    AC_MSG_RESULT([$LIB[]NAME])
+  else
+    HAVE_LIB[]NAME=no
+    dnl If $LIB[]NAME didn't lead to a usable library, we don't need
+    dnl $INC[]NAME either.
+    CPPFLAGS="$ac_save_CPPFLAGS"
+    LIB[]NAME=
+    LTLIB[]NAME=
+    LIB[]NAME[]_PREFIX=
+  fi
+  AC_SUBST([HAVE_LIB]NAME)
+  AC_SUBST([LIB]NAME)
+  AC_SUBST([LTLIB]NAME)
+  AC_SUBST([LIB]NAME[_PREFIX])
+  popdef([NAME])
+  popdef([Name])
+])
+
+dnl Determine the platform dependent parameters needed to use rpath:
+dnl   acl_libext,
+dnl   acl_shlibext,
+dnl   acl_hardcode_libdir_flag_spec,
+dnl   acl_hardcode_libdir_separator,
+dnl   acl_hardcode_direct,
+dnl   acl_hardcode_minus_L.
+AC_DEFUN([AC_LIB_RPATH],
+[
+  dnl Tell automake >= 1.10 to complain if config.rpath is missing.
+  m4_ifdef([AC_REQUIRE_AUX_FILE], [AC_REQUIRE_AUX_FILE([config.rpath])])
+  AC_REQUIRE([AC_PROG_CC])                dnl we use $CC, $GCC, $LDFLAGS
+  AC_REQUIRE([AC_LIB_PROG_LD])            dnl we use $LD, $with_gnu_ld
+  AC_REQUIRE([AC_CANONICAL_HOST])         dnl we use $host
+  AC_REQUIRE([AC_CONFIG_AUX_DIR_DEFAULT]) dnl we use $ac_aux_dir
+  AC_CACHE_CHECK([for shared library run path origin], [acl_cv_rpath], [
+    CC="$CC" GCC="$GCC" LDFLAGS="$LDFLAGS" LD="$LD" with_gnu_ld="$with_gnu_ld" \
+    ${CONFIG_SHELL-/bin/sh} "$ac_aux_dir/config.rpath" "$host" > conftest.sh
+    . ./conftest.sh
+    rm -f ./conftest.sh
+    acl_cv_rpath=done
+  ])
+  wl="$acl_cv_wl"
+  acl_libext="$acl_cv_libext"
+  acl_shlibext="$acl_cv_shlibext"
+  acl_libname_spec="$acl_cv_libname_spec"
+  acl_library_names_spec="$acl_cv_library_names_spec"
+  acl_hardcode_libdir_flag_spec="$acl_cv_hardcode_libdir_flag_spec"
+  acl_hardcode_libdir_separator="$acl_cv_hardcode_libdir_separator"
+  acl_hardcode_direct="$acl_cv_hardcode_direct"
+  acl_hardcode_minus_L="$acl_cv_hardcode_minus_L"
+  dnl Determine whether the user wants rpath handling at all.
+  AC_ARG_ENABLE([rpath],
+    [  --disable-rpath         do not hardcode runtime library paths],
+    :, enable_rpath=yes)
+])
+
+dnl AC_LIB_FROMPACKAGE(name, package)
+dnl declares that libname comes from the given package. The configure file
+dnl will then not have a --with-libname-prefix option but a
+dnl --with-package-prefix option. Several libraries can come from the same
+dnl package. This declaration must occur before an AC_LIB_LINKFLAGS or similar
+dnl macro call that searches for libname.
+AC_DEFUN([AC_LIB_FROMPACKAGE],
+[
+  pushdef([NAME],[translit([$1],[abcdefghijklmnopqrstuvwxyz./-],
+                                [ABCDEFGHIJKLMNOPQRSTUVWXYZ___])])
+  define([acl_frompackage_]NAME, [$2])
+  popdef([NAME])
+  pushdef([PACK],[$2])
+  pushdef([PACKUP],[translit(PACK,[abcdefghijklmnopqrstuvwxyz./-],
+                                  [ABCDEFGHIJKLMNOPQRSTUVWXYZ___])])
+  define([acl_libsinpackage_]PACKUP,
+    m4_ifdef([acl_libsinpackage_]PACKUP, [acl_libsinpackage_]PACKUP[[, ]],)[lib$1])
+  popdef([PACKUP])
+  popdef([PACK])
+])
+
+dnl AC_LIB_LINKFLAGS_BODY(name [, dependencies]) searches for libname and
+dnl the libraries corresponding to explicit and implicit dependencies.
+dnl Sets the LIB${NAME}, LTLIB${NAME} and INC${NAME} variables.
+dnl Also, sets the LIB${NAME}_PREFIX variable to nonempty if libname was found
+dnl in ${LIB${NAME}_PREFIX}/$acl_libdirstem.
+AC_DEFUN([AC_LIB_LINKFLAGS_BODY],
+[
+  AC_REQUIRE([AC_LIB_PREPARE_MULTILIB])
+  pushdef([NAME],[translit([$1],[abcdefghijklmnopqrstuvwxyz./-],
+                                [ABCDEFGHIJKLMNOPQRSTUVWXYZ___])])
+  pushdef([PACK],[m4_ifdef([acl_frompackage_]NAME, [acl_frompackage_]NAME, lib[$1])])
+  pushdef([PACKUP],[translit(PACK,[abcdefghijklmnopqrstuvwxyz./-],
+                                  [ABCDEFGHIJKLMNOPQRSTUVWXYZ___])])
+  pushdef([PACKLIBS],[m4_ifdef([acl_frompackage_]NAME, [acl_libsinpackage_]PACKUP, lib[$1])])
+  dnl Autoconf >= 2.61 supports dots in --with options.
+  pushdef([P_A_C_K],[m4_if(m4_version_compare(m4_defn([m4_PACKAGE_VERSION]),[2.61]),[-1],[translit(PACK,[.],[_])],PACK)])
+  dnl By default, look in $includedir and $libdir.
+  use_additional=yes
+  AC_LIB_WITH_FINAL_PREFIX([
+    eval additional_includedir=\"$includedir\"
+    eval additional_libdir=\"$libdir\"
+  ])
+  AC_ARG_WITH(P_A_C_K[-prefix],
+[[  --with-]]P_A_C_K[[-prefix[=DIR]  search for ]PACKLIBS[ in DIR/include and DIR/lib
+  --without-]]P_A_C_K[[-prefix     don't search for ]PACKLIBS[ in includedir and libdir]],
+[
+    if test "X$withval" = "Xno"; then
+      use_additional=no
+    else
+      if test "X$withval" = "X"; then
+        AC_LIB_WITH_FINAL_PREFIX([
+          eval additional_includedir=\"$includedir\"
+          eval additional_libdir=\"$libdir\"
+        ])
+      else
+        additional_includedir="$withval/include"
+        additional_libdir="$withval/$acl_libdirstem"
+        if test "$acl_libdirstem2" != "$acl_libdirstem" \
+           && ! test -d "$withval/$acl_libdirstem"; then
+          additional_libdir="$withval/$acl_libdirstem2"
+        fi
+      fi
+    fi
+])
+  dnl Search the library and its dependencies in $additional_libdir and
+  dnl $LDFLAGS. Using breadth-first-seach.
+  LIB[]NAME=
+  LTLIB[]NAME=
+  INC[]NAME=
+  LIB[]NAME[]_PREFIX=
+  dnl HAVE_LIB${NAME} is an indicator that LIB${NAME}, LTLIB${NAME} have been
+  dnl computed. So it has to be reset here.
+  HAVE_LIB[]NAME=
+  rpathdirs=
+  ltrpathdirs=
+  names_already_handled=
+  names_next_round='$1 $2'
+  while test -n "$names_next_round"; do
+    names_this_round="$names_next_round"
+    names_next_round=
+    for name in $names_this_round; do
+      already_handled=
+      for n in $names_already_handled; do
+        if test "$n" = "$name"; then
+          already_handled=yes
+          break
+        fi
+      done
+      if test -z "$already_handled"; then
+        names_already_handled="$names_already_handled $name"
+        dnl See if it was already located by an earlier AC_LIB_LINKFLAGS
+        dnl or AC_LIB_HAVE_LINKFLAGS call.
+        uppername=`echo "$name" | sed -e 'y|abcdefghijklmnopqrstuvwxyz./-|ABCDEFGHIJKLMNOPQRSTUVWXYZ___|'`
+        eval value=\"\$HAVE_LIB$uppername\"
+        if test -n "$value"; then
+          if test "$value" = yes; then
+            eval value=\"\$LIB$uppername\"
+            test -z "$value" || LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$value"
+            eval value=\"\$LTLIB$uppername\"
+            test -z "$value" || LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }$value"
+          else
+            dnl An earlier call to AC_LIB_HAVE_LINKFLAGS has determined
+            dnl that this library doesn't exist. So just drop it.
+            :
+          fi
+        else
+          dnl Search the library lib$name in $additional_libdir and $LDFLAGS
+          dnl and the already constructed $LIBNAME/$LTLIBNAME.
+          found_dir=
+          found_la=
+          found_so=
+          found_a=
+          eval libname=\"$acl_libname_spec\"    # typically: libname=lib$name
+          if test -n "$acl_shlibext"; then
+            shrext=".$acl_shlibext"             # typically: shrext=.so
+          else
+            shrext=
+          fi
+          if test $use_additional = yes; then
+            dir="$additional_libdir"
+            dnl The same code as in the loop below:
+            dnl First look for a shared library.
+            if test -n "$acl_shlibext"; then
+              if test -f "$dir/$libname$shrext"; then
+                found_dir="$dir"
+                found_so="$dir/$libname$shrext"
+              else
+                if test "$acl_library_names_spec" = '$libname$shrext$versuffix'; then
+                  ver=`(cd "$dir" && \
+                        for f in "$libname$shrext".*; do echo "$f"; done \
+                        | sed -e "s,^$libname$shrext\\\\.,," \
+                        | sort -t '.' -n -r -k1,1 -k2,2 -k3,3 -k4,4 -k5,5 \
+                        | sed 1q ) 2>/dev/null`
+                  if test -n "$ver" && test -f "$dir/$libname$shrext.$ver"; then
+                    found_dir="$dir"
+                    found_so="$dir/$libname$shrext.$ver"
+                  fi
+                else
+                  eval library_names=\"$acl_library_names_spec\"
+                  for f in $library_names; do
+                    if test -f "$dir/$f"; then
+                      found_dir="$dir"
+                      found_so="$dir/$f"
+                      break
+                    fi
+                  done
+                fi
+              fi
+            fi
+            dnl Then look for a static library.
+            if test "X$found_dir" = "X"; then
+              if test -f "$dir/$libname.$acl_libext"; then
+                found_dir="$dir"
+                found_a="$dir/$libname.$acl_libext"
+              fi
+            fi
+            if test "X$found_dir" != "X"; then
+              if test -f "$dir/$libname.la"; then
+                found_la="$dir/$libname.la"
+              fi
+            fi
+          fi
+          if test "X$found_dir" = "X"; then
+            for x in $LDFLAGS $LTLIB[]NAME; do
+              AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"])
+              case "$x" in
+                -L*)
+                  dir=`echo "X$x" | sed -e 's/^X-L//'`
+                  dnl First look for a shared library.
+                  if test -n "$acl_shlibext"; then
+                    if test -f "$dir/$libname$shrext"; then
+                      found_dir="$dir"
+                      found_so="$dir/$libname$shrext"
+                    else
+                      if test "$acl_library_names_spec" = '$libname$shrext$versuffix'; then
+                        ver=`(cd "$dir" && \
+                              for f in "$libname$shrext".*; do echo "$f"; done \
+                              | sed -e "s,^$libname$shrext\\\\.,," \
+                              | sort -t '.' -n -r -k1,1 -k2,2 -k3,3 -k4,4 -k5,5 \
+                              | sed 1q ) 2>/dev/null`
+                        if test -n "$ver" && test -f "$dir/$libname$shrext.$ver"; then
+                          found_dir="$dir"
+                          found_so="$dir/$libname$shrext.$ver"
+                        fi
+                      else
+                        eval library_names=\"$acl_library_names_spec\"
+                        for f in $library_names; do
+                          if test -f "$dir/$f"; then
+                            found_dir="$dir"
+                            found_so="$dir/$f"
+                            break
+                          fi
+                        done
+                      fi
+                    fi
+                  fi
+                  dnl Then look for a static library.
+                  if test "X$found_dir" = "X"; then
+                    if test -f "$dir/$libname.$acl_libext"; then
+                      found_dir="$dir"
+                      found_a="$dir/$libname.$acl_libext"
+                    fi
+                  fi
+                  if test "X$found_dir" != "X"; then
+                    if test -f "$dir/$libname.la"; then
+                      found_la="$dir/$libname.la"
+                    fi
+                  fi
+                  ;;
+              esac
+              if test "X$found_dir" != "X"; then
+                break
+              fi
+            done
+          fi
+          if test "X$found_dir" != "X"; then
+            dnl Found the library.
+            LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }-L$found_dir -l$name"
+            if test "X$found_so" != "X"; then
+              dnl Linking with a shared library. We attempt to hardcode its
+              dnl directory into the executable's runpath, unless it's the
+              dnl standard /usr/lib.
+              if test "$enable_rpath" = no \
+                 || test "X$found_dir" = "X/usr/$acl_libdirstem" \
+                 || test "X$found_dir" = "X/usr/$acl_libdirstem2"; then
+                dnl No hardcoding is needed.
+                LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_so"
+              else
+                dnl Use an explicit option to hardcode DIR into the resulting
+                dnl binary.
+                dnl Potentially add DIR to ltrpathdirs.
+                dnl The ltrpathdirs will be appended to $LTLIBNAME at the end.
+                haveit=
+                for x in $ltrpathdirs; do
+                  if test "X$x" = "X$found_dir"; then
+                    haveit=yes
+                    break
+                  fi
+                done
+                if test -z "$haveit"; then
+                  ltrpathdirs="$ltrpathdirs $found_dir"
+                fi
+                dnl The hardcoding into $LIBNAME is system dependent.
+                if test "$acl_hardcode_direct" = yes; then
+                  dnl Using DIR/libNAME.so during linking hardcodes DIR into the
+                  dnl resulting binary.
+                  LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_so"
+                else
+                  if test -n "$acl_hardcode_libdir_flag_spec" && test "$acl_hardcode_minus_L" = no; then
+                    dnl Use an explicit option to hardcode DIR into the resulting
+                    dnl binary.
+                    LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_so"
+                    dnl Potentially add DIR to rpathdirs.
+                    dnl The rpathdirs will be appended to $LIBNAME at the end.
+                    haveit=
+                    for x in $rpathdirs; do
+                      if test "X$x" = "X$found_dir"; then
+                        haveit=yes
+                        break
+                      fi
+                    done
+                    if test -z "$haveit"; then
+                      rpathdirs="$rpathdirs $found_dir"
+                    fi
+                  else
+                    dnl Rely on "-L$found_dir".
+                    dnl But don't add it if it's already contained in the LDFLAGS
+                    dnl or the already constructed $LIBNAME
+                    haveit=
+                    for x in $LDFLAGS $LIB[]NAME; do
+                      AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"])
+                      if test "X$x" = "X-L$found_dir"; then
+                        haveit=yes
+                        break
+                      fi
+                    done
+                    if test -z "$haveit"; then
+                      LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-L$found_dir"
+                    fi
+                    if test "$acl_hardcode_minus_L" != no; then
+                      dnl FIXME: Not sure whether we should use
+                      dnl "-L$found_dir -l$name" or "-L$found_dir $found_so"
+                      dnl here.
+                      LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_so"
+                    else
+                      dnl We cannot use $acl_hardcode_runpath_var and LD_RUN_PATH
+                      dnl here, because this doesn't fit in flags passed to the
+                      dnl compiler. So give up. No hardcoding. This affects only
+                      dnl very old systems.
+                      dnl FIXME: Not sure whether we should use
+                      dnl "-L$found_dir -l$name" or "-L$found_dir $found_so"
+                      dnl here.
+                      LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-l$name"
+                    fi
+                  fi
+                fi
+              fi
+            else
+              if test "X$found_a" != "X"; then
+                dnl Linking with a static library.
+                LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_a"
+              else
+                dnl We shouldn't come here, but anyway it's good to have a
+                dnl fallback.
+                LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-L$found_dir -l$name"
+              fi
+            fi
+            dnl Assume the include files are nearby.
+            additional_includedir=
+            case "$found_dir" in
+              */$acl_libdirstem | */$acl_libdirstem/)
+                basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e "s,/$acl_libdirstem/"'*$,,'`
+                if test "$name" = '$1'; then
+                  LIB[]NAME[]_PREFIX="$basedir"
+                fi
+                additional_includedir="$basedir/include"
+                ;;
+              */$acl_libdirstem2 | */$acl_libdirstem2/)
+                basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e "s,/$acl_libdirstem2/"'*$,,'`
+                if test "$name" = '$1'; then
+                  LIB[]NAME[]_PREFIX="$basedir"
+                fi
+                additional_includedir="$basedir/include"
+                ;;
+            esac
+            if test "X$additional_includedir" != "X"; then
+              dnl Potentially add $additional_includedir to $INCNAME.
+              dnl But don't add it
+              dnl   1. if it's the standard /usr/include,
+              dnl   2. if it's /usr/local/include and we are using GCC on Linux,
+              dnl   3. if it's already present in $CPPFLAGS or the already
+              dnl      constructed $INCNAME,
+              dnl   4. if it doesn't exist as a directory.
+              if test "X$additional_includedir" != "X/usr/include"; then
+                haveit=
+                if test "X$additional_includedir" = "X/usr/local/include"; then
+                  if test -n "$GCC"; then
+                    case $host_os in
+                      linux* | gnu* | k*bsd*-gnu) haveit=yes;;
+                    esac
+                  fi
+                fi
+                if test -z "$haveit"; then
+                  for x in $CPPFLAGS $INC[]NAME; do
+                    AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"])
+                    if test "X$x" = "X-I$additional_includedir"; then
+                      haveit=yes
+                      break
+                    fi
+                  done
+                  if test -z "$haveit"; then
+                    if test -d "$additional_includedir"; then
+                      dnl Really add $additional_includedir to $INCNAME.
+                      INC[]NAME="${INC[]NAME}${INC[]NAME:+ }-I$additional_includedir"
+                    fi
+                  fi
+                fi
+              fi
+            fi
+            dnl Look for dependencies.
+            if test -n "$found_la"; then
+              dnl Read the .la file. It defines the variables
+              dnl dlname, library_names, old_library, dependency_libs, current,
+              dnl age, revision, installed, dlopen, dlpreopen, libdir.
+              save_libdir="$libdir"
+              case "$found_la" in
+                */* | *\\*) . "$found_la" ;;
+                *) . "./$found_la" ;;
+              esac
+              libdir="$save_libdir"
+              dnl We use only dependency_libs.
+              for dep in $dependency_libs; do
+                case "$dep" in
+                  -L*)
+                    additional_libdir=`echo "X$dep" | sed -e 's/^X-L//'`
+                    dnl Potentially add $additional_libdir to $LIBNAME and $LTLIBNAME.
+                    dnl But don't add it
+                    dnl   1. if it's the standard /usr/lib,
+                    dnl   2. if it's /usr/local/lib and we are using GCC on Linux,
+                    dnl   3. if it's already present in $LDFLAGS or the already
+                    dnl      constructed $LIBNAME,
+                    dnl   4. if it doesn't exist as a directory.
+                    if test "X$additional_libdir" != "X/usr/$acl_libdirstem" \
+                       && test "X$additional_libdir" != "X/usr/$acl_libdirstem2"; then
+                      haveit=
+                      if test "X$additional_libdir" = "X/usr/local/$acl_libdirstem" \
+                         || test "X$additional_libdir" = "X/usr/local/$acl_libdirstem2"; then
+                        if test -n "$GCC"; then
+                          case $host_os in
+                            linux* | gnu* | k*bsd*-gnu) haveit=yes;;
+                          esac
+                        fi
+                      fi
+                      if test -z "$haveit"; then
+                        haveit=
+                        for x in $LDFLAGS $LIB[]NAME; do
+                          AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"])
+                          if test "X$x" = "X-L$additional_libdir"; then
+                            haveit=yes
+                            break
+                          fi
+                        done
+                        if test -z "$haveit"; then
+                          if test -d "$additional_libdir"; then
+                            dnl Really add $additional_libdir to $LIBNAME.
+                            LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-L$additional_libdir"
+                          fi
+                        fi
+                        haveit=
+                        for x in $LDFLAGS $LTLIB[]NAME; do
+                          AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"])
+                          if test "X$x" = "X-L$additional_libdir"; then
+                            haveit=yes
+                            break
+                          fi
+                        done
+                        if test -z "$haveit"; then
+                          if test -d "$additional_libdir"; then
+                            dnl Really add $additional_libdir to $LTLIBNAME.
+                            LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }-L$additional_libdir"
+                          fi
+                        fi
+                      fi
+                    fi
+                    ;;
+                  -R*)
+                    dir=`echo "X$dep" | sed -e 's/^X-R//'`
+                    if test "$enable_rpath" != no; then
+                      dnl Potentially add DIR to rpathdirs.
+                      dnl The rpathdirs will be appended to $LIBNAME at the end.
+                      haveit=
+                      for x in $rpathdirs; do
+                        if test "X$x" = "X$dir"; then
+                          haveit=yes
+                          break
+                        fi
+                      done
+                      if test -z "$haveit"; then
+                        rpathdirs="$rpathdirs $dir"
+                      fi
+                      dnl Potentially add DIR to ltrpathdirs.
+                      dnl The ltrpathdirs will be appended to $LTLIBNAME at the end.
+                      haveit=
+                      for x in $ltrpathdirs; do
+                        if test "X$x" = "X$dir"; then
+                          haveit=yes
+                          break
+                        fi
+                      done
+                      if test -z "$haveit"; then
+                        ltrpathdirs="$ltrpathdirs $dir"
+                      fi
+                    fi
+                    ;;
+                  -l*)
+                    dnl Handle this in the next round.
+                    names_next_round="$names_next_round "`echo "X$dep" | sed -e 's/^X-l//'`
+                    ;;
+                  *.la)
+                    dnl Handle this in the next round. Throw away the .la's
+                    dnl directory; it is already contained in a preceding -L
+                    dnl option.
+                    names_next_round="$names_next_round "`echo "X$dep" | sed -e 's,^X.*/,,' -e 's,^lib,,' -e 's,\.la$,,'`
+                    ;;
+                  *)
+                    dnl Most likely an immediate library name.
+                    LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$dep"
+                    LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }$dep"
+                    ;;
+                esac
+              done
+            fi
+          else
+            dnl Didn't find the library; assume it is in the system directories
+            dnl known to the linker and runtime loader. (All the system
+            dnl directories known to the linker should also be known to the
+            dnl runtime loader, otherwise the system is severely misconfigured.)
+            LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-l$name"
+            LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }-l$name"
+          fi
+        fi
+      fi
+    done
+  done
+  if test "X$rpathdirs" != "X"; then
+    if test -n "$acl_hardcode_libdir_separator"; then
+      dnl Weird platform: only the last -rpath option counts, the user must
+      dnl pass all path elements in one option. We can arrange that for a
+      dnl single library, but not when more than one $LIBNAMEs are used.
+      alldirs=
+      for found_dir in $rpathdirs; do
+        alldirs="${alldirs}${alldirs:+$acl_hardcode_libdir_separator}$found_dir"
+      done
+      dnl Note: acl_hardcode_libdir_flag_spec uses $libdir and $wl.
+      acl_save_libdir="$libdir"
+      libdir="$alldirs"
+      eval flag=\"$acl_hardcode_libdir_flag_spec\"
+      libdir="$acl_save_libdir"
+      LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$flag"
+    else
+      dnl The -rpath options are cumulative.
+      for found_dir in $rpathdirs; do
+        acl_save_libdir="$libdir"
+        libdir="$found_dir"
+        eval flag=\"$acl_hardcode_libdir_flag_spec\"
+        libdir="$acl_save_libdir"
+        LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$flag"
+      done
+    fi
+  fi
+  if test "X$ltrpathdirs" != "X"; then
+    dnl When using libtool, the option that works for both libraries and
+    dnl executables is -R. The -R options are cumulative.
+    for found_dir in $ltrpathdirs; do
+      LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }-R$found_dir"
+    done
+  fi
+  popdef([P_A_C_K])
+  popdef([PACKLIBS])
+  popdef([PACKUP])
+  popdef([PACK])
+  popdef([NAME])
+])
+
+dnl AC_LIB_APPENDTOVAR(VAR, CONTENTS) appends the elements of CONTENTS to VAR,
+dnl unless already present in VAR.
+dnl Works only for CPPFLAGS, not for LIB* variables because that sometimes
+dnl contains two or three consecutive elements that belong together.
+AC_DEFUN([AC_LIB_APPENDTOVAR],
+[
+  for element in [$2]; do
+    haveit=
+    for x in $[$1]; do
+      AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"])
+      if test "X$x" = "X$element"; then
+        haveit=yes
+        break
+      fi
+    done
+    if test -z "$haveit"; then
+      [$1]="${[$1]}${[$1]:+ }$element"
+    fi
+  done
+])
+
+dnl For those cases where a variable contains several -L and -l options
+dnl referring to unknown libraries and directories, this macro determines the
+dnl necessary additional linker options for the runtime path.
+dnl AC_LIB_LINKFLAGS_FROM_LIBS([LDADDVAR], [LIBSVALUE], [USE-LIBTOOL])
+dnl sets LDADDVAR to linker options needed together with LIBSVALUE.
+dnl If USE-LIBTOOL evaluates to non-empty, linking with libtool is assumed,
+dnl otherwise linking without libtool is assumed.
+AC_DEFUN([AC_LIB_LINKFLAGS_FROM_LIBS],
+[
+  AC_REQUIRE([AC_LIB_RPATH])
+  AC_REQUIRE([AC_LIB_PREPARE_MULTILIB])
+  $1=
+  if test "$enable_rpath" != no; then
+    if test -n "$acl_hardcode_libdir_flag_spec" && test "$acl_hardcode_minus_L" = no; then
+      dnl Use an explicit option to hardcode directories into the resulting
+      dnl binary.
+      rpathdirs=
+      next=
+      for opt in $2; do
+        if test -n "$next"; then
+          dir="$next"
+          dnl No need to hardcode the standard /usr/lib.
+          if test "X$dir" != "X/usr/$acl_libdirstem" \
+             && test "X$dir" != "X/usr/$acl_libdirstem2"; then
+            rpathdirs="$rpathdirs $dir"
+          fi
+          next=
+        else
+          case $opt in
+            -L) next=yes ;;
+            -L*) dir=`echo "X$opt" | sed -e 's,^X-L,,'`
+                 dnl No need to hardcode the standard /usr/lib.
+                 if test "X$dir" != "X/usr/$acl_libdirstem" \
+                    && test "X$dir" != "X/usr/$acl_libdirstem2"; then
+                   rpathdirs="$rpathdirs $dir"
+                 fi
+                 next= ;;
+            *) next= ;;
+          esac
+        fi
+      done
+      if test "X$rpathdirs" != "X"; then
+        if test -n ""$3""; then
+          dnl libtool is used for linking. Use -R options.
+          for dir in $rpathdirs; do
+            $1="${$1}${$1:+ }-R$dir"
+          done
+        else
+          dnl The linker is used for linking directly.
+          if test -n "$acl_hardcode_libdir_separator"; then
+            dnl Weird platform: only the last -rpath option counts, the user
+            dnl must pass all path elements in one option.
+            alldirs=
+            for dir in $rpathdirs; do
+              alldirs="${alldirs}${alldirs:+$acl_hardcode_libdir_separator}$dir"
+            done
+            acl_save_libdir="$libdir"
+            libdir="$alldirs"
+            eval flag=\"$acl_hardcode_libdir_flag_spec\"
+            libdir="$acl_save_libdir"
+            $1="$flag"
+          else
+            dnl The -rpath options are cumulative.
+            for dir in $rpathdirs; do
+              acl_save_libdir="$libdir"
+              libdir="$dir"
+              eval flag=\"$acl_hardcode_libdir_flag_spec\"
+              libdir="$acl_save_libdir"
+              $1="${$1}${$1:+ }$flag"
+            done
+          fi
+        fi
+      fi
+    fi
+  fi
+  AC_SUBST([$1])
+])
diff --git a/eglib/m4/lib-prefix.m4 b/eglib/m4/lib-prefix.m4
new file mode 100644
index 0000000..1601cea
--- /dev/null
+++ b/eglib/m4/lib-prefix.m4
@@ -0,0 +1,224 @@
+# lib-prefix.m4 serial 7 (gettext-0.18)
+dnl Copyright (C) 2001-2005, 2008-2010 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+dnl From Bruno Haible.
+
+dnl AC_LIB_ARG_WITH is synonymous to AC_ARG_WITH in autoconf-2.13, and
+dnl similar to AC_ARG_WITH in autoconf 2.52...2.57 except that is doesn't
+dnl require excessive bracketing.
+ifdef([AC_HELP_STRING],
+[AC_DEFUN([AC_LIB_ARG_WITH], [AC_ARG_WITH([$1],[[$2]],[$3],[$4])])],
+[AC_DEFUN([AC_][LIB_ARG_WITH], [AC_ARG_WITH([$1],[$2],[$3],[$4])])])
+
+dnl AC_LIB_PREFIX adds to the CPPFLAGS and LDFLAGS the flags that are needed
+dnl to access previously installed libraries. The basic assumption is that
+dnl a user will want packages to use other packages he previously installed
+dnl with the same --prefix option.
+dnl This macro is not needed if only AC_LIB_LINKFLAGS is used to locate
+dnl libraries, but is otherwise very convenient.
+AC_DEFUN([AC_LIB_PREFIX],
+[
+  AC_BEFORE([$0], [AC_LIB_LINKFLAGS])
+  AC_REQUIRE([AC_PROG_CC])
+  AC_REQUIRE([AC_CANONICAL_HOST])
+  AC_REQUIRE([AC_LIB_PREPARE_MULTILIB])
+  AC_REQUIRE([AC_LIB_PREPARE_PREFIX])
+  dnl By default, look in $includedir and $libdir.
+  use_additional=yes
+  AC_LIB_WITH_FINAL_PREFIX([
+    eval additional_includedir=\"$includedir\"
+    eval additional_libdir=\"$libdir\"
+  ])
+  AC_LIB_ARG_WITH([lib-prefix],
+[  --with-lib-prefix[=DIR] search for libraries in DIR/include and DIR/lib
+  --without-lib-prefix    don't search for libraries in includedir and libdir],
+[
+    if test "X$withval" = "Xno"; then
+      use_additional=no
+    else
+      if test "X$withval" = "X"; then
+        AC_LIB_WITH_FINAL_PREFIX([
+          eval additional_includedir=\"$includedir\"
+          eval additional_libdir=\"$libdir\"
+        ])
+      else
+        additional_includedir="$withval/include"
+        additional_libdir="$withval/$acl_libdirstem"
+      fi
+    fi
+])
+  if test $use_additional = yes; then
+    dnl Potentially add $additional_includedir to $CPPFLAGS.
+    dnl But don't add it
+    dnl   1. if it's the standard /usr/include,
+    dnl   2. if it's already present in $CPPFLAGS,
+    dnl   3. if it's /usr/local/include and we are using GCC on Linux,
+    dnl   4. if it doesn't exist as a directory.
+    if test "X$additional_includedir" != "X/usr/include"; then
+      haveit=
+      for x in $CPPFLAGS; do
+        AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"])
+        if test "X$x" = "X-I$additional_includedir"; then
+          haveit=yes
+          break
+        fi
+      done
+      if test -z "$haveit"; then
+        if test "X$additional_includedir" = "X/usr/local/include"; then
+          if test -n "$GCC"; then
+            case $host_os in
+              linux* | gnu* | k*bsd*-gnu) haveit=yes;;
+            esac
+          fi
+        fi
+        if test -z "$haveit"; then
+          if test -d "$additional_includedir"; then
+            dnl Really add $additional_includedir to $CPPFLAGS.
+            CPPFLAGS="${CPPFLAGS}${CPPFLAGS:+ }-I$additional_includedir"
+          fi
+        fi
+      fi
+    fi
+    dnl Potentially add $additional_libdir to $LDFLAGS.
+    dnl But don't add it
+    dnl   1. if it's the standard /usr/lib,
+    dnl   2. if it's already present in $LDFLAGS,
+    dnl   3. if it's /usr/local/lib and we are using GCC on Linux,
+    dnl   4. if it doesn't exist as a directory.
+    if test "X$additional_libdir" != "X/usr/$acl_libdirstem"; then
+      haveit=
+      for x in $LDFLAGS; do
+        AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"])
+        if test "X$x" = "X-L$additional_libdir"; then
+          haveit=yes
+          break
+        fi
+      done
+      if test -z "$haveit"; then
+        if test "X$additional_libdir" = "X/usr/local/$acl_libdirstem"; then
+          if test -n "$GCC"; then
+            case $host_os in
+              linux*) haveit=yes;;
+            esac
+          fi
+        fi
+        if test -z "$haveit"; then
+          if test -d "$additional_libdir"; then
+            dnl Really add $additional_libdir to $LDFLAGS.
+            LDFLAGS="${LDFLAGS}${LDFLAGS:+ }-L$additional_libdir"
+          fi
+        fi
+      fi
+    fi
+  fi
+])
+
+dnl AC_LIB_PREPARE_PREFIX creates variables acl_final_prefix,
+dnl acl_final_exec_prefix, containing the values to which $prefix and
+dnl $exec_prefix will expand at the end of the configure script.
+AC_DEFUN([AC_LIB_PREPARE_PREFIX],
+[
+  dnl Unfortunately, prefix and exec_prefix get only finally determined
+  dnl at the end of configure.
+  if test "X$prefix" = "XNONE"; then
+    acl_final_prefix="$ac_default_prefix"
+  else
+    acl_final_prefix="$prefix"
+  fi
+  if test "X$exec_prefix" = "XNONE"; then
+    acl_final_exec_prefix='${prefix}'
+  else
+    acl_final_exec_prefix="$exec_prefix"
+  fi
+  acl_save_prefix="$prefix"
+  prefix="$acl_final_prefix"
+  eval acl_final_exec_prefix=\"$acl_final_exec_prefix\"
+  prefix="$acl_save_prefix"
+])
+
+dnl AC_LIB_WITH_FINAL_PREFIX([statement]) evaluates statement, with the
+dnl variables prefix and exec_prefix bound to the values they will have
+dnl at the end of the configure script.
+AC_DEFUN([AC_LIB_WITH_FINAL_PREFIX],
+[
+  acl_save_prefix="$prefix"
+  prefix="$acl_final_prefix"
+  acl_save_exec_prefix="$exec_prefix"
+  exec_prefix="$acl_final_exec_prefix"
+  $1
+  exec_prefix="$acl_save_exec_prefix"
+  prefix="$acl_save_prefix"
+])
+
+dnl AC_LIB_PREPARE_MULTILIB creates
+dnl - a variable acl_libdirstem, containing the basename of the libdir, either
+dnl   "lib" or "lib64" or "lib/64",
+dnl - a variable acl_libdirstem2, as a secondary possible value for
+dnl   acl_libdirstem, either the same as acl_libdirstem or "lib/sparcv9" or
+dnl   "lib/amd64".
+AC_DEFUN([AC_LIB_PREPARE_MULTILIB],
+[
+  dnl There is no formal standard regarding lib and lib64.
+  dnl On glibc systems, the current practice is that on a system supporting
+  dnl 32-bit and 64-bit instruction sets or ABIs, 64-bit libraries go under
+  dnl $prefix/lib64 and 32-bit libraries go under $prefix/lib. We determine
+  dnl the compiler's default mode by looking at the compiler's library search
+  dnl path. If at least one of its elements ends in /lib64 or points to a
+  dnl directory whose absolute pathname ends in /lib64, we assume a 64-bit ABI.
+  dnl Otherwise we use the default, namely "lib".
+  dnl On Solaris systems, the current practice is that on a system supporting
+  dnl 32-bit and 64-bit instruction sets or ABIs, 64-bit libraries go under
+  dnl $prefix/lib/64 (which is a symlink to either $prefix/lib/sparcv9 or
+  dnl $prefix/lib/amd64) and 32-bit libraries go under $prefix/lib.
+  AC_REQUIRE([AC_CANONICAL_HOST])
+  acl_libdirstem=lib
+  acl_libdirstem2=
+  case "$host_os" in
+    solaris*)
+      dnl See Solaris 10 Software Developer Collection > Solaris 64-bit Developer's Guide > The Development Environment
+      dnl <http://docs.sun.com/app/docs/doc/816-5138/dev-env?l=en&a=view>.
+      dnl "Portable Makefiles should refer to any library directories using the 64 symbolic link."
+      dnl But we want to recognize the sparcv9 or amd64 subdirectory also if the
+      dnl symlink is missing, so we set acl_libdirstem2 too.
+      AC_CACHE_CHECK([for 64-bit host], [gl_cv_solaris_64bit],
+        [AC_EGREP_CPP([sixtyfour bits], [
+#ifdef _LP64
+sixtyfour bits
+#endif
+           ], [gl_cv_solaris_64bit=yes], [gl_cv_solaris_64bit=no])
+        ])
+      if test $gl_cv_solaris_64bit = yes; then
+        acl_libdirstem=lib/64
+        case "$host_cpu" in
+          sparc*)        acl_libdirstem2=lib/sparcv9 ;;
+          i*86 | x86_64) acl_libdirstem2=lib/amd64 ;;
+        esac
+      fi
+      ;;
+    *)
+      searchpath=`(LC_ALL=C $CC -print-search-dirs) 2>/dev/null | sed -n -e 's,^libraries: ,,p' | sed -e 's,^=,,'`
+      if test -n "$searchpath"; then
+        acl_save_IFS="${IFS= 	}"; IFS=":"
+        for searchdir in $searchpath; do
+          if test -d "$searchdir"; then
+            case "$searchdir" in
+              */lib64/ | */lib64 ) acl_libdirstem=lib64 ;;
+              */../ | */.. )
+                # Better ignore directories of this form. They are misleading.
+                ;;
+              *) searchdir=`cd "$searchdir" && pwd`
+                 case "$searchdir" in
+                   */lib64 ) acl_libdirstem=lib64 ;;
+                 esac ;;
+            esac
+          fi
+        done
+        IFS="$acl_save_IFS"
+      fi
+      ;;
+  esac
+  test -n "$acl_libdirstem2" || acl_libdirstem2="$acl_libdirstem"
+])
diff --git a/libtool.m4 b/eglib/m4/libtool.m4
similarity index 100%
copy from libtool.m4
copy to eglib/m4/libtool.m4
diff --git a/ltoptions.m4 b/eglib/m4/ltoptions.m4
similarity index 100%
copy from ltoptions.m4
copy to eglib/m4/ltoptions.m4
diff --git a/ltsugar.m4 b/eglib/m4/ltsugar.m4
similarity index 100%
copy from ltsugar.m4
copy to eglib/m4/ltsugar.m4
diff --git a/ltversion.m4 b/eglib/m4/ltversion.m4
similarity index 100%
copy from ltversion.m4
copy to eglib/m4/ltversion.m4
diff --git a/lt~obsolete.m4 b/eglib/m4/lt~obsolete.m4
similarity index 100%
copy from lt~obsolete.m4
copy to eglib/m4/lt~obsolete.m4
diff --git a/eglib/src/Makefile.am b/eglib/src/Makefile.am
index caf302d..94bee68 100644
--- a/eglib/src/Makefile.am
+++ b/eglib/src/Makefile.am
@@ -31,9 +31,11 @@ libeglib_la_SOURCES = \
 	gbytearray.c	\
 	gerror.c	\
 	ghashtable.c 	\
+	giconv.c	\
 	gmem.c       	\
 	gmodule.h	\
 	goutput.c    	\
+	gqsort.c	\
 	gstr.c       	\
 	gslist.c     	\
 	gstring.c    	\
@@ -60,14 +62,14 @@ libeglib_static_la_CFLAGS = $(libeglib_la_CFLAGS)
 INCLUDES = -I$(srcdir)
 
 if HOST_WIN32
-libeglib_la_LIBADD = -lm $(ICONV_LIBS) -lpsapi
+libeglib_la_LIBADD = -lm $(LIBICONV) -lpsapi
 else
 if PLATFORM_ANDROID
 libeglib_la_LIBADD = -llog
 endif
 endif
 
-libeglib_static_la_LIBADD = $(libeglib_la_LIBADD)
+libeglib_static_la_LIBADD = $(libeglib_la_LIBADD) $(LIBICONV)
 libeglib_static_la_LDFLAGS = -static
 
 MAINTAINERCLEANFILES = Makefile.in
diff --git a/eglib/src/Makefile.in b/eglib/src/Makefile.in
index 3171c9d..f4dd075 100644
--- a/eglib/src/Makefile.in
+++ b/eglib/src/Makefile.in
@@ -39,8 +39,12 @@ subdir = src
 DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \
 	$(srcdir)/eglib-config.h.in
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \
-	$(top_srcdir)/configure.ac
+am__aclocal_m4_deps = $(top_srcdir)/m4/iconv.m4 \
+	$(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
+	$(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 mkinstalldirs = $(SHELL) $(top_srcdir)/../mkinstalldirs
@@ -50,16 +54,17 @@ CONFIG_CLEAN_VPATH_FILES =
 LTLIBRARIES = $(noinst_LTLIBRARIES)
 am__DEPENDENCIES_1 =
 @HOST_WIN32_TRUE at am__DEPENDENCIES_2 = $(am__DEPENDENCIES_1)
-libeglib_static_la_DEPENDENCIES = $(am__DEPENDENCIES_2)
+libeglib_static_la_DEPENDENCIES = $(am__DEPENDENCIES_2) \
+	$(am__DEPENDENCIES_1)
 am__libeglib_static_la_SOURCES_DIST = eglib-remap.h sort.frag.h glib.h \
-	garray.c gbytearray.c gerror.c ghashtable.c gmem.c gmodule.h \
-	goutput.c gstr.c gslist.c gstring.c gptrarray.c glist.c \
-	gqueue.c gpath.c gshell.c gspawn.c gfile.c gfile-posix.c \
-	gpattern.c gmarkup.c gutf8.c gunicode.c unicode-data.h \
-	gdate-unix.c gdir-unix.c gfile-unix.c gmisc-unix.c \
-	gmodule-unix.c gtimer-unix.c eglib-config.hw gdate-win32.c \
-	gdir-win32.c gfile-win32.c gmisc-win32.c gmodule-win32.c \
-	gtimer-win32.c vasprintf.c
+	garray.c gbytearray.c gerror.c ghashtable.c giconv.c gmem.c \
+	gmodule.h goutput.c gqsort.c gstr.c gslist.c gstring.c \
+	gptrarray.c glist.c gqueue.c gpath.c gshell.c gspawn.c gfile.c \
+	gfile-posix.c gpattern.c gmarkup.c gutf8.c gunicode.c \
+	unicode-data.h gdate-unix.c gdir-unix.c gfile-unix.c \
+	gmisc-unix.c gmodule-unix.c gtimer-unix.c eglib-config.hw \
+	gdate-win32.c gdir-win32.c gfile-win32.c gmisc-win32.c \
+	gmodule-win32.c gtimer-win32.c vasprintf.c
 am__objects_1 = libeglib_static_la-gdate-unix.lo \
 	libeglib_static_la-gdir-unix.lo \
 	libeglib_static_la-gfile-unix.lo \
@@ -77,8 +82,9 @@ am__objects_2 = libeglib_static_la-gdate-win32.lo \
 @NEED_VASPRINTF_TRUE at am__objects_4 = libeglib_static_la-vasprintf.lo
 am__objects_5 = libeglib_static_la-garray.lo \
 	libeglib_static_la-gbytearray.lo libeglib_static_la-gerror.lo \
-	libeglib_static_la-ghashtable.lo libeglib_static_la-gmem.lo \
-	libeglib_static_la-goutput.lo libeglib_static_la-gstr.lo \
+	libeglib_static_la-ghashtable.lo libeglib_static_la-giconv.lo \
+	libeglib_static_la-gmem.lo libeglib_static_la-goutput.lo \
+	libeglib_static_la-gqsort.lo libeglib_static_la-gstr.lo \
 	libeglib_static_la-gslist.lo libeglib_static_la-gstring.lo \
 	libeglib_static_la-gptrarray.lo libeglib_static_la-glist.lo \
 	libeglib_static_la-gqueue.lo libeglib_static_la-gpath.lo \
@@ -95,14 +101,14 @@ libeglib_static_la_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \
 	$(libeglib_static_la_LDFLAGS) $(LDFLAGS) -o $@
 @HOST_WIN32_TRUE at libeglib_la_DEPENDENCIES = $(am__DEPENDENCIES_1)
 am__libeglib_la_SOURCES_DIST = eglib-remap.h sort.frag.h glib.h \
-	garray.c gbytearray.c gerror.c ghashtable.c gmem.c gmodule.h \
-	goutput.c gstr.c gslist.c gstring.c gptrarray.c glist.c \
-	gqueue.c gpath.c gshell.c gspawn.c gfile.c gfile-posix.c \
-	gpattern.c gmarkup.c gutf8.c gunicode.c unicode-data.h \
-	gdate-unix.c gdir-unix.c gfile-unix.c gmisc-unix.c \
-	gmodule-unix.c gtimer-unix.c eglib-config.hw gdate-win32.c \
-	gdir-win32.c gfile-win32.c gmisc-win32.c gmodule-win32.c \
-	gtimer-win32.c vasprintf.c
+	garray.c gbytearray.c gerror.c ghashtable.c giconv.c gmem.c \
+	gmodule.h goutput.c gqsort.c gstr.c gslist.c gstring.c \
+	gptrarray.c glist.c gqueue.c gpath.c gshell.c gspawn.c gfile.c \
+	gfile-posix.c gpattern.c gmarkup.c gutf8.c gunicode.c \
+	unicode-data.h gdate-unix.c gdir-unix.c gfile-unix.c \
+	gmisc-unix.c gmodule-unix.c gtimer-unix.c eglib-config.hw \
+	gdate-win32.c gdir-win32.c gfile-win32.c gmisc-win32.c \
+	gmodule-win32.c gtimer-win32.c vasprintf.c
 am__objects_6 = libeglib_la-gdate-unix.lo libeglib_la-gdir-unix.lo \
 	libeglib_la-gfile-unix.lo libeglib_la-gmisc-unix.lo \
 	libeglib_la-gmodule-unix.lo libeglib_la-gtimer-unix.lo
@@ -114,8 +120,9 @@ am__objects_7 = libeglib_la-gdate-win32.lo libeglib_la-gdir-win32.lo \
 @NEED_VASPRINTF_TRUE at am__objects_9 = libeglib_la-vasprintf.lo
 am_libeglib_la_OBJECTS = libeglib_la-garray.lo \
 	libeglib_la-gbytearray.lo libeglib_la-gerror.lo \
-	libeglib_la-ghashtable.lo libeglib_la-gmem.lo \
-	libeglib_la-goutput.lo libeglib_la-gstr.lo \
+	libeglib_la-ghashtable.lo libeglib_la-giconv.lo \
+	libeglib_la-gmem.lo libeglib_la-goutput.lo \
+	libeglib_la-gqsort.lo libeglib_la-gstr.lo \
 	libeglib_la-gslist.lo libeglib_la-gstring.lo \
 	libeglib_la-gptrarray.lo libeglib_la-glist.lo \
 	libeglib_la-gqueue.lo libeglib_la-gpath.lo \
@@ -179,11 +186,12 @@ GREP = @GREP@
 GSIZE = @GSIZE@
 GSIZE_FORMAT = @GSIZE_FORMAT@
 GUINT_TO_POINTER = @GUINT_TO_POINTER@
+G_GINT32_FORMAT = @G_GINT32_FORMAT@
 G_GINT64_FORMAT = @G_GINT64_FORMAT@
+G_GUINT32_FORMAT = @G_GUINT32_FORMAT@
 G_GUINT64_FORMAT = @G_GUINT64_FORMAT@
 G_HAVE_ISO_VARARGS = @G_HAVE_ISO_VARARGS@
 HAVE_ALLOCA_H = @HAVE_ALLOCA_H@
-ICONV_LIBS = @ICONV_LIBS@
 INSTALL = @INSTALL@
 INSTALL_DATA = @INSTALL_DATA@
 INSTALL_PROGRAM = @INSTALL_PROGRAM@
@@ -191,6 +199,7 @@ INSTALL_SCRIPT = @INSTALL_SCRIPT@
 INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
 LD = @LD@
 LDFLAGS = @LDFLAGS@
+LIBICONV = @LIBICONV@
 LIBOBJS = @LIBOBJS@
 LIBS = @LIBS@
 LIBTOOL = @LIBTOOL@
@@ -198,6 +207,7 @@ LIPO = @LIPO@
 LN_S = @LN_S@
 LTCOMPILE = @LTCOMPILE@
 LTCXXCOMPILE = @LTCXXCOMPILE@
+LTLIBICONV = @LTLIBICONV@
 LTLIBOBJS = @LTLIBOBJS@
 MAINT = @MAINT@
 MAKEINFO = @MAKEINFO@
@@ -309,9 +319,11 @@ libeglib_la_SOURCES = \
 	gbytearray.c	\
 	gerror.c	\
 	ghashtable.c 	\
+	giconv.c	\
 	gmem.c       	\
 	gmodule.h	\
 	goutput.c    	\
+	gqsort.c	\
 	gstr.c       	\
 	gslist.c     	\
 	gstring.c    	\
@@ -336,8 +348,8 @@ libeglib_static_la_SOURCES = $(libeglib_la_SOURCES)
 libeglib_static_la_CFLAGS = $(libeglib_la_CFLAGS)
 INCLUDES = -I$(srcdir)
 @HOST_WIN32_FALSE@@PLATFORM_ANDROID_TRUE at libeglib_la_LIBADD = -llog
- at HOST_WIN32_TRUE@libeglib_la_LIBADD = -lm $(ICONV_LIBS) -lpsapi
-libeglib_static_la_LIBADD = $(libeglib_la_LIBADD)
+ at HOST_WIN32_TRUE@libeglib_la_LIBADD = -lm $(LIBICONV) -lpsapi
+libeglib_static_la_LIBADD = $(libeglib_la_LIBADD) $(LIBICONV)
 libeglib_static_la_LDFLAGS = -static
 MAINTAINERCLEANFILES = Makefile.in
 EXTRA_DIST = eglib-config.h.in $(win_files) $(unix_files)
@@ -354,9 +366,9 @@ $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__confi
 	      exit 1;; \
 	  esac; \
 	done; \
-	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/Makefile'; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign src/Makefile'; \
 	$(am__cd) $(top_srcdir) && \
-	  $(AUTOMAKE) --gnu src/Makefile
+	  $(AUTOMAKE) --foreign src/Makefile
 .PRECIOUS: Makefile
 Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
 	@case '$?' in \
@@ -409,6 +421,7 @@ distclean-compile:
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libeglib_la-gfile-win32.Plo at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libeglib_la-gfile.Plo at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libeglib_la-ghashtable.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libeglib_la-giconv.Plo at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libeglib_la-glist.Plo at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libeglib_la-gmarkup.Plo at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libeglib_la-gmem.Plo at am__quote@
@@ -420,6 +433,7 @@ distclean-compile:
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libeglib_la-gpath.Plo at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libeglib_la-gpattern.Plo at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libeglib_la-gptrarray.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libeglib_la-gqsort.Plo at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libeglib_la-gqueue.Plo at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libeglib_la-gshell.Plo at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libeglib_la-gslist.Plo at am__quote@
@@ -443,6 +457,7 @@ distclean-compile:
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libeglib_static_la-gfile-win32.Plo at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libeglib_static_la-gfile.Plo at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libeglib_static_la-ghashtable.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libeglib_static_la-giconv.Plo at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libeglib_static_la-glist.Plo at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libeglib_static_la-gmarkup.Plo at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libeglib_static_la-gmem.Plo at am__quote@
@@ -454,6 +469,7 @@ distclean-compile:
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libeglib_static_la-gpath.Plo at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libeglib_static_la-gpattern.Plo at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libeglib_static_la-gptrarray.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libeglib_static_la-gqsort.Plo at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libeglib_static_la-gqueue.Plo at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libeglib_static_la-gshell.Plo at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libeglib_static_la-gslist.Plo at am__quote@
@@ -515,6 +531,13 @@ libeglib_static_la-ghashtable.lo: ghashtable.c
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCC_FALSE@	$(LIBTOOL)  --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libeglib_static_la_CFLAGS) $(CFLAGS) -c -o libeglib_static_la-ghashtable.lo `test -f 'ghashtable.c' || echo '$(srcdir)/'`ghashtable.c
 
+libeglib_static_la-giconv.lo: giconv.c
+ at am__fastdepCC_TRUE@	$(LIBTOOL)  --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libeglib_static_la_CFLAGS) $(CFLAGS) -MT libeglib_static_la-giconv.lo -MD -MP -MF $(DEPDIR)/libeglib_static_la-giconv.Tpo -c -o libeglib_static_la-giconv.lo `test -f 'giconv.c' || echo '$(srcdir)/'`giconv.c
+ at am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/libeglib_static_la-giconv.Tpo $(DEPDIR)/libeglib_static_la-giconv.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='giconv.c' object='libeglib_static_la-giconv.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(LIBTOOL)  --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libeglib_static_la_CFLAGS) $(CFLAGS) -c -o libeglib_static_la-giconv.lo `test -f 'giconv.c' || echo '$(srcdir)/'`giconv.c
+
 libeglib_static_la-gmem.lo: gmem.c
 @am__fastdepCC_TRUE@	$(LIBTOOL)  --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libeglib_static_la_CFLAGS) $(CFLAGS) -MT libeglib_static_la-gmem.lo -MD -MP -MF $(DEPDIR)/libeglib_static_la-gmem.Tpo -c -o libeglib_static_la-gmem.lo `test -f 'gmem.c' || echo '$(srcdir)/'`gmem.c
 @am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/libeglib_static_la-gmem.Tpo $(DEPDIR)/libeglib_static_la-gmem.Plo
@@ -529,6 +552,13 @@ libeglib_static_la-goutput.lo: goutput.c
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCC_FALSE@	$(LIBTOOL)  --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libeglib_static_la_CFLAGS) $(CFLAGS) -c -o libeglib_static_la-goutput.lo `test -f 'goutput.c' || echo '$(srcdir)/'`goutput.c
 
+libeglib_static_la-gqsort.lo: gqsort.c
+ at am__fastdepCC_TRUE@	$(LIBTOOL)  --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libeglib_static_la_CFLAGS) $(CFLAGS) -MT libeglib_static_la-gqsort.lo -MD -MP -MF $(DEPDIR)/libeglib_static_la-gqsort.Tpo -c -o libeglib_static_la-gqsort.lo `test -f 'gqsort.c' || echo '$(srcdir)/'`gqsort.c
+ at am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/libeglib_static_la-gqsort.Tpo $(DEPDIR)/libeglib_static_la-gqsort.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='gqsort.c' object='libeglib_static_la-gqsort.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(LIBTOOL)  --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libeglib_static_la_CFLAGS) $(CFLAGS) -c -o libeglib_static_la-gqsort.lo `test -f 'gqsort.c' || echo '$(srcdir)/'`gqsort.c
+
 libeglib_static_la-gstr.lo: gstr.c
 @am__fastdepCC_TRUE@	$(LIBTOOL)  --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libeglib_static_la_CFLAGS) $(CFLAGS) -MT libeglib_static_la-gstr.lo -MD -MP -MF $(DEPDIR)/libeglib_static_la-gstr.Tpo -c -o libeglib_static_la-gstr.lo `test -f 'gstr.c' || echo '$(srcdir)/'`gstr.c
 @am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/libeglib_static_la-gstr.Tpo $(DEPDIR)/libeglib_static_la-gstr.Plo
@@ -753,6 +783,13 @@ libeglib_la-ghashtable.lo: ghashtable.c
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCC_FALSE@	$(LIBTOOL)  --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libeglib_la_CFLAGS) $(CFLAGS) -c -o libeglib_la-ghashtable.lo `test -f 'ghashtable.c' || echo '$(srcdir)/'`ghashtable.c
 
+libeglib_la-giconv.lo: giconv.c
+ at am__fastdepCC_TRUE@	$(LIBTOOL)  --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libeglib_la_CFLAGS) $(CFLAGS) -MT libeglib_la-giconv.lo -MD -MP -MF $(DEPDIR)/libeglib_la-giconv.Tpo -c -o libeglib_la-giconv.lo `test -f 'giconv.c' || echo '$(srcdir)/'`giconv.c
+ at am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/libeglib_la-giconv.Tpo $(DEPDIR)/libeglib_la-giconv.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='giconv.c' object='libeglib_la-giconv.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(LIBTOOL)  --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libeglib_la_CFLAGS) $(CFLAGS) -c -o libeglib_la-giconv.lo `test -f 'giconv.c' || echo '$(srcdir)/'`giconv.c
+
 libeglib_la-gmem.lo: gmem.c
 @am__fastdepCC_TRUE@	$(LIBTOOL)  --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libeglib_la_CFLAGS) $(CFLAGS) -MT libeglib_la-gmem.lo -MD -MP -MF $(DEPDIR)/libeglib_la-gmem.Tpo -c -o libeglib_la-gmem.lo `test -f 'gmem.c' || echo '$(srcdir)/'`gmem.c
 @am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/libeglib_la-gmem.Tpo $(DEPDIR)/libeglib_la-gmem.Plo
@@ -767,6 +804,13 @@ libeglib_la-goutput.lo: goutput.c
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCC_FALSE@	$(LIBTOOL)  --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libeglib_la_CFLAGS) $(CFLAGS) -c -o libeglib_la-goutput.lo `test -f 'goutput.c' || echo '$(srcdir)/'`goutput.c
 
+libeglib_la-gqsort.lo: gqsort.c
+ at am__fastdepCC_TRUE@	$(LIBTOOL)  --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libeglib_la_CFLAGS) $(CFLAGS) -MT libeglib_la-gqsort.lo -MD -MP -MF $(DEPDIR)/libeglib_la-gqsort.Tpo -c -o libeglib_la-gqsort.lo `test -f 'gqsort.c' || echo '$(srcdir)/'`gqsort.c
+ at am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/libeglib_la-gqsort.Tpo $(DEPDIR)/libeglib_la-gqsort.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='gqsort.c' object='libeglib_la-gqsort.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(LIBTOOL)  --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libeglib_la_CFLAGS) $(CFLAGS) -c -o libeglib_la-gqsort.lo `test -f 'gqsort.c' || echo '$(srcdir)/'`gqsort.c
+
 libeglib_la-gstr.lo: gstr.c
 @am__fastdepCC_TRUE@	$(LIBTOOL)  --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libeglib_la_CFLAGS) $(CFLAGS) -MT libeglib_la-gstr.lo -MD -MP -MF $(DEPDIR)/libeglib_la-gstr.Tpo -c -o libeglib_la-gstr.lo `test -f 'gstr.c' || echo '$(srcdir)/'`gstr.c
 @am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/libeglib_la-gstr.Tpo $(DEPDIR)/libeglib_la-gstr.Plo
diff --git a/eglib/src/eglib-config.h.in b/eglib/src/eglib-config.h.in
index 33c7fb6..19e4f4d 100644
--- a/eglib/src/eglib-config.h.in
+++ b/eglib/src/eglib-config.h.in
@@ -29,6 +29,8 @@ typedef signed   @GSIZE@ gssize;
 #define G_GSIZE_FORMAT   @GSIZE_FORMAT@
 #define G_GUINT64_FORMAT @G_GUINT64_FORMAT@
 #define G_GINT64_FORMAT @G_GINT64_FORMAT@
+#define G_GUINT32_FORMAT @G_GUINT32_FORMAT@
+#define G_GINT32_FORMAT @G_GINT32_FORMAT@
 
 #if @G_HAVE_ISO_VARARGS@ == 1
 #define G_HAVE_ISO_VARARGS
diff --git a/eglib/src/eglib-config.hw b/eglib/src/eglib-config.hw
index 94852a6..192d393 100644
--- a/eglib/src/eglib-config.hw
+++ b/eglib/src/eglib-config.hw
@@ -33,12 +33,15 @@ typedef int pid_t;
 #define GINT_TO_POINTER(v)     ((gpointer)(intptr_t) (v))
 #define GUINT_TO_POINTER(v)    ((gpointer)(intptr_t) (v))
 
+/* VS 2010 and later have stdint.h */
+#if defined(_MSC_VER) && _MSC_VER < 1600
 #define INT32_MAX 2147483647
 #define INT32_MIN (~ INT32_MAX)
 #define INT64_MAX 9223372036854775807i64
 #define INT64_MIN (~INT64_MAX)
 #define UINT32_MAX 0xffffffffU
 #define UINT64_MAX 0xffffffffffffffffULL
+#endif
 
 #define STDOUT_FILENO (int)(intptr_t)stdout
 #define STDERR_FILENO (int)(intptr_t)stderr
diff --git a/eglib/src/eglib-remap.h b/eglib/src/eglib-remap.h
index e298aaa..9b4ecf1 100644
--- a/eglib/src/eglib-remap.h
+++ b/eglib/src/eglib-remap.h
@@ -5,11 +5,16 @@
 #define g_array_new monoeg_g_array_new
 #define g_array_remove_index monoeg_g_array_remove_index
 #define g_array_remove_index_fast monoeg_g_array_remove_index_fast
+#define g_array_set_size monoeg_g_array_set_size
+#define g_array_sized_new monoeg_g_array_sized_new
 #define g_ascii_strdown monoeg_g_ascii_strdown
 #define g_ascii_strncasecmp monoeg_g_ascii_strncasecmp
 #define g_ascii_tolower monoeg_g_ascii_tolower
 #define g_ascii_xdigit_value monoeg_g_ascii_xdigit_value
 #define g_build_path monoeg_g_build_path
+#define g_byte_array_append monoeg_g_byte_array_append
+#define g_byte_array_free monoeg_g_byte_array_free
+#define g_byte_array_new monoeg_g_byte_array_new
 #define g_clear_error monoeg_g_clear_error
 #define g_convert monoeg_g_convert
 #define g_convert_error_quark monoeg_g_convert_error_quark
@@ -17,13 +22,16 @@
 #define g_dir_open monoeg_g_dir_open
 #define g_dir_read_name monoeg_g_dir_read_name
 #define g_dir_rewind monoeg_g_dir_rewind
+#define g_mkdir_with_parents monoeg_g_mkdir_with_parents
 #define g_direct_equal monoeg_g_direct_equal
 #define g_direct_hash monoeg_g_direct_hash
 #define g_error_free monoeg_g_error_free
 #define g_error_new monoeg_g_error_new
 #define g_error_vnew monoeg_g_error_vnew
+#define g_file_error_quark monoeg_g_file_error_quark
 #define g_file_error_from_errno monoeg_g_file_error_from_errno
 #define g_file_get_contents monoeg_g_file_get_contents
+#define g_file_set_contents monoeg_g_file_set_contents
 #define g_file_open_tmp monoeg_g_file_open_tmp
 #define g_file_test monoeg_g_file_test
 #define g_filename_from_uri monoeg_g_filename_from_uri
@@ -45,17 +53,23 @@
 #define g_hash_table_foreach monoeg_g_hash_table_foreach
 #define g_hash_table_foreach_remove monoeg_g_hash_table_foreach_remove
 #define g_hash_table_foreach_steal monoeg_g_hash_table_foreach_steal
+#define g_hash_table_get_keys monoeg_g_hash_table_get_keys
+#define g_hash_table_get_values monoeg_g_hash_table_get_values
 #define g_hash_table_insert_replace monoeg_g_hash_table_insert_replace
 #define g_hash_table_lookup monoeg_g_hash_table_lookup
 #define g_hash_table_lookup_extended monoeg_g_hash_table_lookup_extended
 #define g_hash_table_new monoeg_g_hash_table_new
 #define g_hash_table_new_full monoeg_g_hash_table_new_full
 #define g_hash_table_remove monoeg_g_hash_table_remove
+#define g_hash_table_steal monoeg_g_hash_table_steal
 #define g_hash_table_size monoeg_g_hash_table_size
 #define g_hash_table_print_stats monoeg_g_hash_table_print_stats
 #define g_hash_table_remove_all monoeg_g_hash_table_remove_all
 #define g_hash_table_iter_init monoeg_g_hash_table_iter_init
 #define g_hash_table_iter_next monoeg_g_hash_table_iter_next
+#define g_iconv monoeg_g_iconv
+#define g_iconv_close monoeg_g_iconv_close
+#define g_iconv_open monoeg_g_iconv_open
 #define g_int_equal monoeg_g_int_equal
 #define g_int_hash monoeg_g_int_hash
 #define g_list_alloc monoeg_g_list_alloc
@@ -78,6 +92,7 @@
 #define g_list_nth_data monoeg_g_list_nth_data
 #define g_list_prepend monoeg_g_list_prepend
 #define g_list_remove monoeg_g_list_remove
+#define g_list_remove_all monoeg_g_list_remove_all
 #define g_list_remove_link monoeg_g_list_remove_link
 #define g_list_reverse monoeg_g_list_reverse
 #define g_list_sort monoeg_g_list_sort
@@ -119,6 +134,7 @@
 #define g_ptr_array_sized_new monoeg_g_ptr_array_sized_new
 #define g_ptr_array_sort monoeg_g_ptr_array_sort
 #define g_ptr_array_sort_with_data monoeg_g_ptr_array_sort_with_data
+#define g_qsort_with_data monoeg_g_qsort_with_data
 #define g_queue_free monoeg_g_queue_free
 #define g_queue_is_empty monoeg_g_queue_is_empty
 #define g_queue_foreach monoeg_g_queue_foreach
@@ -160,6 +176,7 @@
 #define g_spawn_async_with_pipes monoeg_g_spawn_async_with_pipes
 #define g_spawn_command_line_sync monoeg_g_spawn_command_line_sync
 #define g_sprintf monoeg_g_sprintf
+#define g_stpcpy monoeg_g_stpcpy
 #define g_str_equal monoeg_g_str_equal
 #define g_str_has_prefix monoeg_g_str_has_prefix
 #define g_str_has_suffix monoeg_g_str_has_suffix
@@ -178,12 +195,17 @@
 #define g_string_append monoeg_g_string_append
 #define g_string_append_c monoeg_g_string_append_c
 #define g_string_append_len monoeg_g_string_append_len
+#define g_string_append_unichar monoeg_g_string_append_unichar
 #define g_string_append_printf monoeg_g_string_append_printf
+#define g_string_append_vprintf monoeg_g_string_append_vprintf
+#define g_string_erase monoeg_g_string_erase
 #define g_string_free monoeg_g_string_free
+#define g_string_insert monoeg_g_string_insert
 #define g_string_new monoeg_g_string_new
 #define g_string_new_len monoeg_g_string_new_len
 #define g_string_prepend monoeg_g_string_prepend
 #define g_string_printf monoeg_g_string_printf
+#define g_string_set_size monoeg_g_string_set_size
 #define g_string_sized_new monoeg_g_string_sized_new
 #define g_string_truncate monoeg_g_string_truncate
 #define g_strjoin monoeg_g_strjoin
@@ -201,6 +223,7 @@
 #define g_timer_start monoeg_g_timer_start
 #define g_timer_stop monoeg_g_timer_stop
 #define g_trailingBytesForUTF8 monoeg_g_trailingBytesForUTF8
+#define g_ucs4_to_utf8 monoeg_g_ucs4_to_utf8
 #define g_ucs4_to_utf16 monoeg_g_ucs4_to_utf16
 #define g_unichar_case monoeg_g_unichar_case
 #define g_unichar_isxdigit monoeg_g_unichar_isxdigit
@@ -214,11 +237,20 @@
 #define g_utf16_to_ucs4 monoeg_g_utf16_to_ucs4
 #define g_utf16_to_utf8 monoeg_g_utf16_to_utf8
 #define g_utf8_get_char monoeg_g_utf8_get_char
+#define g_utf8_offset_to_pointer monoeg_g_utf8_offset_to_pointer
+#define g_utf8_pointer_to_offset monoeg_g_utf8_pointer_to_offset
 #define g_utf8_strdown monoeg_g_utf8_strdown
 #define g_utf8_strlen monoeg_g_utf8_strlen
 #define g_utf8_strup monoeg_g_utf8_strup
+#define g_utf8_to_ucs4_fast monoeg_g_utf8_to_ucs4_fast
 #define g_utf8_to_utf16 monoeg_g_utf8_to_utf16
 #define g_utf8_validate monoeg_g_utf8_validate
+#define g_unichar_to_utf8 monoeg_g_unichar_to_utf8
+#define g_unichar_is_space monoeg_g_unichar_is_space
+#define g_unicode_break_type monoeg_g_unicode_break_type
+#define g_utf8_offset_to_pointer monoeg_g_utf8_offset_to_pointer
+#define g_utf8_pointer_to_offset monoeg_g_utf8_pointer_to_offset
+#define g_utf8_to_ucs4_fast monoeg_g_utf8_to_ucs4_fast
 #define g_win32_getlocale monoeg_g_win32_getlocale
 #define g_assertion_message monoeg_assertion_message
 #define g_malloc monoeg_malloc
@@ -230,6 +262,14 @@
 #define g_strdup monoeg_strdup
 #define g_ucs4_to_utf16_len monoeg_ucs4_to_utf16_len
 #define g_utf16_to_ucs4_len monoeg_utf16_to_ucs4_len
-#define g_byte_array_free monoeg_g_byte_array_free
-#define g_byte_array_new monoeg_g_byte_array_new
 
+#define g_ascii_strcasecmp monoeg_ascii_strcasecmp
+#define g_ascii_strup monoeg_ascii_strup
+#define g_ascii_toupper monoeg_ascii_toupper
+#define g_unichar_break_type monoeg_unichar_break_type
+#define g_unichar_isspace monoeg_unichar_isspace
+#define g_unichar_to_utf16 monoeg_unichar_to_utf16
+#define g_utf8_find_prev_char monoeg_utf8_find_prev_char
+#define g_utf8_get_char_validated monoeg_utf8_get_char_validated
+#define g_utf8_prev_char monoeg_utf8_prev_char
+#define g_utf8_to_ucs4 monoeg_utf8_to_ucs4
diff --git a/eglib/src/garray.c b/eglib/src/garray.c
index 99ebf6e..b9844f8 100644
--- a/eglib/src/garray.c
+++ b/eglib/src/garray.c
@@ -39,30 +39,28 @@ typedef struct {
 	gboolean clear_;
 	guint element_size;
 	gboolean zero_terminated;
-	gint capacity;
+	guint capacity;
 } GArrayPriv;
 
 static void
-ensure_capacity (GArrayPriv *priv,
-		 int capacity)
+ensure_capacity (GArrayPriv *priv, guint capacity)
 {
-	int new_capacity = MAX (priv->capacity, INITIAL_CAPACITY);
-
-	if (capacity < priv->capacity)
+	guint new_capacity;
+	
+	if (capacity <= priv->capacity)
 		return;
-
-	while (new_capacity < capacity) {
-		new_capacity <<= 1;
-	}
-	capacity = new_capacity;
-	priv->array.data = (gchar*)g_realloc (priv->array.data, element_length (priv, capacity));
-
+	
+	new_capacity = (capacity + 63) & ~63;
+	
+	priv->array.data = g_realloc (priv->array.data, element_length (priv, new_capacity));
+	
 	if (priv->clear_) {
 		memset (element_offset (priv, priv->capacity),
 			0,
-			element_length (priv, capacity - priv->capacity));
+			element_length (priv, new_capacity - priv->capacity));
 	}
-	priv->capacity = capacity;
+	
+	priv->capacity = new_capacity;
 }
 
 GArray *
@@ -80,6 +78,22 @@ g_array_new (gboolean zero_terminated,
 	return (GArray*)rv;
 }
 
+GArray *
+g_array_sized_new (gboolean zero_terminated,
+	     gboolean clear_,
+	     guint element_size,
+		 guint reserved_size)
+{
+	GArrayPriv *rv = g_new0 (GArrayPriv, 1);
+	rv->zero_terminated = zero_terminated;
+	rv->clear_ = clear_;
+	rv->element_size = element_size;
+
+	ensure_capacity (rv, reserved_size);
+
+	return (GArray*)rv;
+}
+
 gchar*
 g_array_free (GArray *array,
 	      gboolean free_segment)
@@ -204,3 +218,21 @@ g_array_remove_index_fast (GArray *array,
 	return array;
 }
 
+void
+g_array_set_size (GArray *array, gint length)
+{
+	GArrayPriv *priv = (GArrayPriv*)array;
+
+	g_return_if_fail (array != NULL);
+	g_return_if_fail (length >= 0);
+
+	if (length == priv->capacity)
+		return; // nothing to be done
+
+	if (length > priv->capacity) {
+		// grow the array
+		ensure_capacity (priv, length);
+	}
+
+	array->len = length;
+}
diff --git a/eglib/src/gbytearray.c b/eglib/src/gbytearray.c
index daa4bca..8702a49 100644
--- a/eglib/src/gbytearray.c
+++ b/eglib/src/gbytearray.c
@@ -29,67 +29,23 @@
 #include <stdlib.h>
 #include <glib.h>
 
-#define INITIAL_CAPACITY 16
-
-static void
-ensure_capacity (GByteArray *array,
-		 int capacity)
-{
-	int new_capacity = MAX (array->len, INITIAL_CAPACITY);
-
-	if (capacity < array->len)
-		return;
-
-	while (new_capacity < capacity) {
-		new_capacity <<= 1;
-	}
-	capacity = new_capacity;
-	array->data = (guint8*) g_realloc (array->data, capacity);
-
-	memset (array->data + array->len, 0, capacity - array->len);
-	array->len = capacity;
-}
-
 GByteArray *
 g_byte_array_new ()
 {
-	GByteArray *rv = g_new0 (GByteArray, 1);
-
-	ensure_capacity (rv, INITIAL_CAPACITY);
-
-	return rv;
+	return (GByteArray *) g_array_new (FALSE, TRUE, 1);
 }
 
 guint8*
 g_byte_array_free (GByteArray *array,
 	      gboolean free_segment)
 {
-	guint8* rv = NULL;
-
-	g_return_val_if_fail (array != NULL, NULL);
-
-	if (free_segment)
-		g_free (array->data);
-	else
-		rv = array->data;
-
-	g_free (array);
-
-	return rv;
+	return (guint8*) g_array_free ((GArray *)array, free_segment);
 }
 
 GByteArray *
-g_array_append (GByteArray *array,
-		     guint8 *data,
+g_byte_array_append (GByteArray *array,
+		     const guint8 *data,
 		     guint len)
 {
-	g_return_val_if_fail (array != NULL, NULL);
-
-	ensure_capacity (array, array->len + len);
-  
-	memmove (array->data + array->len, data, len);
-
-	array->len += len;
-
-	return array;
+	return (GByteArray *)g_array_append_vals ((GArray *)array, data, len);
 }
diff --git a/eglib/src/gdir-unix.c b/eglib/src/gdir-unix.c
index 6fe64c8..abca22f 100644
--- a/eglib/src/gdir-unix.c
+++ b/eglib/src/gdir-unix.c
@@ -105,4 +105,42 @@ g_dir_close (GDir *dir)
 	g_free (dir);
 }
 
+int
+g_mkdir_with_parents (const gchar *pathname, int mode)
+{
+	char *path, *d;
+	int rv;
+	
+	if (!pathname || *pathname == '\0') {
+		errno = EINVAL;
+		return -1;
+	}
+	
+	d = path = g_strdup (pathname);
+	if (*d == '/')
+		d++;
+	
+	while (TRUE) {
+		if (*d == '/' || *d == '\0') {
+		  char orig = *d;
+		  *d = '\0';
+		  rv = mkdir (path, mode);
+		  if (rv == -1 && errno != EEXIST) {
+		  	g_free (path);
+			return -1;
+		  }
 
+		  *d++ = orig;
+		  while (orig == '/' && *d == '/')
+		  	d++;
+		  if (orig == '\0')
+		  	break;
+		} else {
+			d++;
+		}
+	}
+	
+	g_free (path);
+	
+	return 0;
+}
diff --git a/eglib/src/gfile-posix.c b/eglib/src/gfile-posix.c
index f6a1ca0..48a9192 100644
--- a/eglib/src/gfile-posix.c
+++ b/eglib/src/gfile-posix.c
@@ -29,13 +29,13 @@
 #include <glib.h>
 #include <stdio.h>
 #include <stdlib.h>
-#include <errno.h>
-#include <fcntl.h>
-#include <sys/stat.h>
 #include <sys/types.h>
+#include <sys/stat.h>
 #ifdef HAVE_UNISTD_H
 #include <unistd.h>
 #endif
+#include <fcntl.h>
+#include <errno.h>
 
 #ifdef _MSC_VER
 #include <direct.h>
@@ -173,4 +173,3 @@ g_get_current_dir (void)
 	 */
 	return buffer;
 }
-
diff --git a/eglib/src/gfile-unix.c b/eglib/src/gfile-unix.c
index 52f1399..4e17a08 100644
--- a/eglib/src/gfile-unix.c
+++ b/eglib/src/gfile-unix.c
@@ -29,12 +29,10 @@
 #include <glib.h>
 #include <stdio.h>
 #include <stdlib.h>
-#include <errno.h>
 #include <sys/types.h>
 #include <sys/stat.h>
+#include <errno.h>
 #include <fcntl.h>
-#include <sys/types.h>
-#include <sys/stat.h>
 
 #ifdef HAVE_UNISTD_H
 #include <unistd.h>
@@ -80,5 +78,3 @@ g_file_test (const gchar *filename, GFileTest test)
 	}
 	return FALSE;
 }
-
-
diff --git a/eglib/src/gfile.c b/eglib/src/gfile.c
index c621a31..01cfa25 100644
--- a/eglib/src/gfile.c
+++ b/eglib/src/gfile.c
@@ -25,11 +25,25 @@
  * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
  * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
  */
+
 #include <config.h>
+
 #include <glib.h>
 #include <stdio.h>
+#include <string.h>
+#ifdef HAVE_UNISTD_H
+#include <unistd.h>
+#endif
 #include <errno.h>
 
+static gpointer error_quark = "FileError";
+
+gpointer
+g_file_error_quark (void)
+{
+	return error_quark;
+}
+
 GFileError
 g_file_error_from_errno (gint err_no)
 {
@@ -91,4 +105,53 @@ g_file_error_from_errno (gint err_no)
 	}
 }
 
+#ifdef G_OS_WIN32
+#define TMP_FILE_FORMAT "%.*s%s.tmp"
+#else
+#define TMP_FILE_FORMAT "%.*s.%s~"
+#endif
 
+gboolean
+g_file_set_contents (const gchar *filename, const gchar *contents, gssize length, GError **err)
+{
+	const char *name;
+	char *path;
+	FILE *fp;
+	
+	if (!(name = strrchr (filename, G_DIR_SEPARATOR)))
+		name = filename;
+	else
+		name++;
+	
+	path = g_strdup_printf (TMP_FILE_FORMAT, name - filename, filename, name);
+	if (!(fp = fopen (path, "wb"))) {
+		g_set_error (err, G_FILE_ERROR, g_file_error_from_errno (errno), "%s", g_strerror (errno));
+		g_free (path);
+		return FALSE;
+	}
+	
+	if (length < 0)
+		length = strlen (contents);
+	
+	if (fwrite (contents, 1, length, fp) < length) {
+		g_set_error (err, G_FILE_ERROR, g_file_error_from_errno (ferror (fp)), "%s", g_strerror (ferror (fp)));
+		g_unlink (path);
+		g_free (path);
+		fclose (fp);
+		
+		return FALSE;
+	}
+	
+	fclose (fp);
+	
+	if (g_rename (path, filename) != 0) {
+		g_set_error (err, G_FILE_ERROR, g_file_error_from_errno (errno), "%s", g_strerror (errno));
+		g_unlink (path);
+		g_free (path);
+		return FALSE;
+	}
+	
+	g_free (path);
+	
+	return TRUE;
+}
diff --git a/eglib/src/ghashtable.c b/eglib/src/ghashtable.c
index fbe0793..5fac0eb 100644
--- a/eglib/src/ghashtable.c
+++ b/eglib/src/ghashtable.c
@@ -264,6 +264,37 @@ g_hash_table_insert_replace (GHashTable *hash, gpointer key, gpointer value, gbo
 	sanity_check (hash);
 }
 
+GList*
+g_hash_table_get_keys (GHashTable *hash)
+{
+	GHashTableIter iter;
+	GList *rv = NULL;
+	gpointer key;
+
+	g_hash_table_iter_init (&iter, hash);
+
+	while (g_hash_table_iter_next (&iter, &key, NULL))
+		rv = g_list_prepend (rv, key);
+
+	return g_list_reverse (rv);
+}
+
+GList*
+g_hash_table_get_values (GHashTable *hash)
+{
+	GHashTableIter iter;
+	GList *rv = NULL;
+	gpointer value;
+
+	g_hash_table_iter_init (&iter, hash);
+
+	while (g_hash_table_iter_next (&iter, NULL, &value))
+		rv = g_list_prepend (rv, value);
+
+	return g_list_reverse (rv);
+}
+
+
 guint
 g_hash_table_size (GHashTable *hash)
 {
@@ -298,8 +329,10 @@ g_hash_table_lookup_extended (GHashTable *hash, gconstpointer key, gpointer *ori
 	
 	for (s = hash->table [hashcode]; s != NULL; s = s->next){
 		if ((*equal)(s->key, key)){
-			*orig_key = s->key;
-			*value = s->value;
+			if (orig_key)
+				*orig_key = s->key;
+			if (value)
+				*value = s->value;
 			return TRUE;
 		}
 	}
@@ -436,6 +469,37 @@ g_hash_table_foreach_remove (GHashTable *hash, GHRFunc func, gpointer user_data)
 	return count;
 }
 
+gboolean
+g_hash_table_steal (GHashTable *hash, gconstpointer key)
+{
+	GEqualFunc equal;
+	Slot *s, *last;
+	guint hashcode;
+	
+	g_return_val_if_fail (hash != NULL, FALSE);
+	sanity_check (hash);
+	equal = hash->key_equal_func;
+	
+	hashcode = ((*hash->hash_func)(key)) % hash->table_size;
+	last = NULL;
+	for (s = hash->table [hashcode]; s != NULL; s = s->next){
+		if ((*equal)(s->key, key)) {
+			if (last == NULL)
+				hash->table [hashcode] = s->next;
+			else
+				last->next = s->next;
+			g_free (s);
+			hash->in_use--;
+			sanity_check (hash);
+			return TRUE;
+		}
+		last = s;
+	}
+	sanity_check (hash);
+	return FALSE;
+	
+}
+
 guint
 g_hash_table_foreach_steal (GHashTable *hash, GHRFunc func, gpointer user_data)
 {
diff --git a/eglib/src/giconv.c b/eglib/src/giconv.c
new file mode 100644
index 0000000..d8dbe6b
--- /dev/null
+++ b/eglib/src/giconv.c
@@ -0,0 +1,1316 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
+/*
+ *  Copyright (C) 2011 Jeffrey Stedfast
+ *
+ *  Permission is hereby granted, free of charge, to any person
+ *  obtaining a copy of this software and associated documentation
+ *  files (the "Software"), to deal in the Software without
+ *  restriction, including without limitation the rights to use, copy,
+ *  modify, merge, publish, distribute, sublicense, and/or sell copies
+ *  of the Software, and to permit persons to whom the Software is
+ *  furnished to do so, subject to the following conditions:
+ *
+ *  The above copyright notice and this permission notice shall be
+ *  included in all copies or substantial portions of the Software.
+ *
+ *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ *  EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ *  MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ *  NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
+ *  HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+ *  WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ *  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+ *  DEALINGS IN THE SOFTWARE.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include <glib.h>
+#include <string.h>
+#ifdef HAVE_ICONV_H
+#include <iconv.h>
+#endif
+#include <errno.h>
+
+#define UNROLL_DECODE_UTF8 0
+#define UNROLL_ENCODE_UTF8 0
+
+typedef int (* Decoder) (char *inbuf, size_t inleft, gunichar *outchar);
+typedef int (* Encoder) (gunichar c, char *outbuf, size_t outleft);
+
+struct _GIConv {
+	Decoder decode;
+	Encoder encode;
+	gunichar c;
+#ifdef HAVE_ICONV
+	iconv_t cd;
+#endif
+};
+
+static int decode_utf32be (char *inbuf, size_t inleft, gunichar *outchar);
+static int encode_utf32be (gunichar c, char *outbuf, size_t outleft);
+
+static int decode_utf32le (char *inbuf, size_t inleft, gunichar *outchar);
+static int encode_utf32le (gunichar c, char *outbuf, size_t outleft);
+
+static int decode_utf16be (char *inbuf, size_t inleft, gunichar *outchar);
+static int encode_utf16be (gunichar c, char *outbuf, size_t outleft);
+
+static int decode_utf16le (char *inbuf, size_t inleft, gunichar *outchar);
+static int encode_utf16le (gunichar c, char *outbuf, size_t outleft);
+
+static int decode_utf8 (char *inbuf, size_t inleft, gunichar *outchar);
+static int encode_utf8 (gunichar c, char *outbuf, size_t outleft);
+
+static int decode_latin1 (char *inbuf, size_t inleft, gunichar *outchar);
+static int encode_latin1 (gunichar c, char *outbuf, size_t outleft);
+
+#if G_BYTE_ORDER == G_LITTLE_ENDIAN
+#define decode_utf32 decode_utf32le
+#define encode_utf32 encode_utf32le
+#define decode_utf16 decode_utf16le
+#define encode_utf16 encode_utf16le
+#else
+#define decode_utf32 decode_utf32be
+#define encode_utf32 encode_utf32be
+#define decode_utf16 decode_utf16be
+#define encode_utf16 encode_utf16be
+#endif
+
+static struct {
+	const char *name;
+	Decoder decoder;
+	Encoder encoder;
+} charsets[] = {
+	{ "ISO-8859-1", decode_latin1,  encode_latin1  },
+	{ "ISO8859-1",  decode_latin1,  encode_latin1  },
+	{ "UTF-32BE",   decode_utf32be, encode_utf32be },
+	{ "UTF-32LE",   decode_utf32le, encode_utf32le },
+	{ "UTF-16BE",   decode_utf16be, encode_utf16be },
+	{ "UTF-16LE",   decode_utf16le, encode_utf16le },
+	{ "UTF-32",     decode_utf32,   encode_utf32   },
+	{ "UTF-16",     decode_utf16,   encode_utf16   },
+	{ "UTF-8",      decode_utf8,    encode_utf8    },
+	{ "US-ASCII",   decode_latin1,  encode_latin1  },
+	{ "Latin1",     decode_latin1,  encode_latin1  },
+	{ "ASCII",      decode_latin1,  encode_latin1  },
+	{ "UTF32",      decode_utf32,   encode_utf32   },
+	{ "UTF16",      decode_utf16,   encode_utf16   },
+	{ "UTF8",       decode_utf8,    encode_utf8    },
+};
+
+
+GIConv
+g_iconv_open (const char *to_charset, const char *from_charset)
+{
+#ifdef HAVE_ICONV
+	iconv_t icd = (iconv_t) -1;
+#endif
+	Decoder decoder = NULL;
+	Encoder encoder = NULL;
+	GIConv cd;
+	guint i;
+	
+	if (!to_charset || !from_charset || !to_charset[0] || !from_charset[0]) {
+		errno = EINVAL;
+		
+		return (GIConv) -1;
+	}
+	
+	for (i = 0; i < G_N_ELEMENTS (charsets); i++) {
+		if (!g_ascii_strcasecmp (charsets[i].name, from_charset))
+			decoder = charsets[i].decoder;
+		
+		if (!g_ascii_strcasecmp (charsets[i].name, to_charset))
+			encoder = charsets[i].encoder;
+	}
+	
+	if (!encoder || !decoder) {
+#ifdef HAVE_ICONV
+		if ((icd = iconv_open (to_charset, from_charset)) == (iconv_t) -1)
+			return (GIConv) -1;
+#else
+		errno = EINVAL;
+		
+		return (GIConv) -1;
+#endif
+	}
+	
+	cd = (GIConv) g_malloc (sizeof (struct _GIConv));
+	cd->decode = decoder;
+	cd->encode = encoder;
+	cd->c = -1;
+	
+#ifdef HAVE_ICONV
+	cd->cd = icd;
+#endif
+	
+	return cd;
+}
+
+int
+g_iconv_close (GIConv cd)
+{
+#ifdef HAVE_ICONV
+	if (cd->cd != (iconv_t) -1)
+		iconv_close (cd->cd);
+#endif
+	
+	g_free (cd);
+	
+	return 0;
+}
+
+gsize
+g_iconv (GIConv cd, gchar **inbytes, gsize *inbytesleft,
+	 gchar **outbytes, gsize *outbytesleft)
+{
+	size_t inleft, outleft;
+	char *inptr, *outptr;
+	gunichar c;
+	int rc = 0;
+	
+#ifdef HAVE_ICONV
+	if (cd->cd != (iconv_t) -1)
+		return iconv (cd->cd, inbytes, inbytesleft, outbytes, outbytesleft);
+#endif
+	
+	if (outbytes == NULL || outbytesleft == NULL) {
+		/* reset converter */
+		cd->c = -1;
+		return 0;
+	}
+	
+	inleft = inbytesleft ? *inbytesleft : 0;
+	inptr = inbytes ? *inbytes : NULL;
+	outleft = *outbytesleft;
+	outptr = *outbytes;
+	
+	if ((c = cd->c) != (gunichar) -1)
+		goto encode;
+	
+	while (inleft > 0) {
+		if ((rc = cd->decode (inptr, inleft, &c)) < 0)
+			break;
+		
+		inleft -= rc;
+		inptr += rc;
+		
+	encode:
+		if ((rc = cd->encode (c, outptr, outleft)) < 0)
+			break;
+		
+		c = (gunichar) -1;
+		outleft -= rc;
+		outptr += rc;
+	}
+	
+	if (inbytesleft)
+		*inbytesleft = inleft;
+	
+	if (inbytes)
+		*inbytes = inptr;
+	
+	*outbytesleft = outleft;
+	*outbytes = outptr;
+	cd->c = c;
+	
+	return rc < 0 ? -1 : 0;
+}
+
+/*
+ * Unicode encoders and decoders
+ */
+
+static int
+decode_utf32be (char *inbuf, size_t inleft, gunichar *outchar)
+{
+	unsigned char *inptr = (unsigned char *) inbuf;
+	gunichar c;
+	
+	if (inleft < 4) {
+		errno = EINVAL;
+		return -1;
+	}
+	
+	c = (inptr[0] << 24) | (inptr[1] << 16) | (inptr[2] << 8) | inptr[3];
+	
+	if (c >= 0xd800 && c < 0xe000) {
+		errno = EILSEQ;
+		return -1;
+	} else if (c >= 0x110000) {
+		errno = EILSEQ;
+		return -1;
+	}
+	
+	*outchar = c;
+	
+	return 4;
+}
+
+static int
+decode_utf32le (char *inbuf, size_t inleft, gunichar *outchar)
+{
+	unsigned char *inptr = (unsigned char *) inbuf;
+	gunichar c;
+	
+	if (inleft < 4) {
+		errno = EINVAL;
+		return -1;
+	}
+	
+	c = (inptr[3] << 24) | (inptr[2] << 16) | (inptr[1] << 8) | inptr[0];
+	
+	if (c >= 0xd800 && c < 0xe000) {
+		errno = EILSEQ;
+		return -1;
+	} else if (c >= 0x110000) {
+		errno = EILSEQ;
+		return -1;
+	}
+	
+	*outchar = c;
+	
+	return 4;
+}
+
+static int
+encode_utf32be (gunichar c, char *outbuf, size_t outleft)
+{
+	unsigned char *outptr = (unsigned char *) outbuf;
+	
+	if (outleft < 4) {
+		errno = E2BIG;
+		return -1;
+	}
+	
+	outptr[0] = (c >> 24) & 0xff;
+	outptr[1] = (c >> 16) & 0xff;
+	outptr[2] = (c >> 8) & 0xff;
+	outptr[3] = c & 0xff;
+	
+	return 4;
+}
+
+static int
+encode_utf32le (gunichar c, char *outbuf, size_t outleft)
+{
+	unsigned char *outptr = (unsigned char *) outbuf;
+	
+	if (outleft < 4) {
+		errno = E2BIG;
+		return -1;
+	}
+	
+	outptr[0] = c & 0xff;
+	outptr[1] = (c >> 8) & 0xff;
+	outptr[2] = (c >> 16) & 0xff;
+	outptr[3] = (c >> 24) & 0xff;
+	
+	return 4;
+}
+
+static int
+decode_utf16be (char *inbuf, size_t inleft, gunichar *outchar)
+{
+	unsigned char *inptr = (unsigned char *) inbuf;
+	gunichar2 c;
+	gunichar u;
+	
+	if (inleft < 2) {
+		errno = EINVAL;
+		return -1;
+	}
+	
+	u = (inptr[0] << 8) | inptr[1];
+	
+	if (u < 0xd800) {
+		/* 0x0000 -> 0xd7ff */
+		*outchar = u;
+		return 2;
+	} else if (u < 0xdc00) {
+		/* 0xd800 -> 0xdbff */
+		if (inleft < 4) {
+			errno = EINVAL;
+			return -2;
+		}
+		
+		c = (inptr[2] << 8) | inptr[3];
+		
+		if (c < 0xdc00 || c > 0xdfff) {
+			errno = EILSEQ;
+			return -2;
+		}
+		
+		u = ((u - 0xd800) << 10) + (c - 0xdc00) + 0x0010000UL;
+		*outchar = u;
+		
+		return 4;
+	} else if (u < 0xe000) {
+		/* 0xdc00 -> 0xdfff */
+		errno = EILSEQ;
+		return -1;
+	} else {
+		/* 0xe000 -> 0xffff */
+		*outchar = u;
+		return 2;
+	}
+}
+
+static int
+decode_utf16le (char *inbuf, size_t inleft, gunichar *outchar)
+{
+	unsigned char *inptr = (unsigned char *) inbuf;
+	gunichar2 c;
+	gunichar u;
+	
+	if (inleft < 2) {
+		errno = EINVAL;
+		return -1;
+	}
+	
+	u = (inptr[1] << 8) | inptr[0];
+	
+	if (u < 0xd800) {
+		/* 0x0000 -> 0xd7ff */
+		*outchar = u;
+		return 2;
+	} else if (u < 0xdc00) {
+		/* 0xd800 -> 0xdbff */
+		if (inleft < 4) {
+			errno = EINVAL;
+			return -2;
+		}
+		
+		c = (inptr[3] << 8) | inptr[2];
+		
+		if (c < 0xdc00 || c > 0xdfff) {
+			errno = EILSEQ;
+			return -2;
+		}
+		
+		u = ((u - 0xd800) << 10) + (c - 0xdc00) + 0x0010000UL;
+		*outchar = u;
+		
+		return 4;
+	} else if (u < 0xe000) {
+		/* 0xdc00 -> 0xdfff */
+		errno = EILSEQ;
+		return -1;
+	} else {
+		/* 0xe000 -> 0xffff */
+		*outchar = u;
+		return 2;
+	}
+}
+
+static int
+encode_utf16be (gunichar c, char *outbuf, size_t outleft)
+{
+	unsigned char *outptr = (unsigned char *) outbuf;
+	gunichar2 ch;
+	gunichar c2;
+	
+	if (c < 0x10000) {
+		if (outleft < 2) {
+			errno = E2BIG;
+			return -1;
+		}
+		
+		outptr[0] = (c >> 8) & 0xff;
+		outptr[1] = c & 0xff;
+		
+		return 2;
+	} else {
+		if (outleft < 4) {
+			errno = E2BIG;
+			return -1;
+		}
+		
+		c2 = c - 0x10000;
+		
+		ch = (gunichar2) ((c2 >> 10) + 0xd800);
+		outptr[0] = (ch >> 8) & 0xff;
+		outptr[1] = ch & 0xff;
+		
+		ch = (gunichar2) ((c2 & 0x3ff) + 0xdc00);
+		outptr[2] = (ch >> 8) & 0xff;
+		outptr[3] = ch & 0xff;
+		
+		return 4;
+	}
+}
+
+static int
+encode_utf16le (gunichar c, char *outbuf, size_t outleft)
+{
+	unsigned char *outptr = (unsigned char *) outbuf;
+	gunichar2 ch;
+	gunichar c2;
+	
+	if (c < 0x10000) {
+		if (outleft < 2) {
+			errno = E2BIG;
+			return -1;
+		}
+		
+		outptr[0] = c & 0xff;
+		outptr[1] = (c >> 8) & 0xff;
+		
+		return 2;
+	} else {
+		if (outleft < 4) {
+			errno = E2BIG;
+			return -1;
+		}
+		
+		c2 = c - 0x10000;
+		
+		ch = (gunichar2) ((c2 >> 10) + 0xd800);
+		outptr[0] = ch & 0xff;
+		outptr[1] = (ch >> 8) & 0xff;
+		
+		ch = (gunichar2) ((c2 & 0x3ff) + 0xdc00);
+		outptr[2] = ch & 0xff;
+		outptr[3] = (ch >> 8) & 0xff;
+		
+		return 4;
+	}
+}
+
+static int
+decode_utf8 (char *inbuf, size_t inleft, gunichar *outchar)
+{
+	unsigned char *inptr = (unsigned char *) inbuf;
+	gunichar u;
+	int n, i;
+	
+	u = *inptr;
+	
+	if (u < 0x80) {
+		/* simple ascii case */
+		*outchar = u;
+		return 1;
+	} else if (u < 0xc2) {
+		errno = EILSEQ;
+		return -1;
+	} else if (u < 0xe0) {
+		u &= 0x1f;
+		n = 2;
+	} else if (u < 0xf0) {
+		u &= 0x0f;
+		n = 3;
+	} else if (u < 0xf8) {
+		u &= 0x07;
+		n = 4;
+	} else if (u < 0xfc) {
+		u &= 0x03;
+		n = 5;
+	} else if (u < 0xfe) {
+		u &= 0x01;
+		n = 6;
+	} else {
+		errno = EILSEQ;
+		return -1;
+	}
+	
+	if (n > inleft) {
+		errno = EINVAL;
+		return -1;
+	}
+	
+#if UNROLL_DECODE_UTF8
+	switch (n) {
+	case 6: u = (u << 6) | (*++inptr ^ 0x80);
+	case 5: u = (u << 6) | (*++inptr ^ 0x80);
+	case 4: u = (u << 6) | (*++inptr ^ 0x80);
+	case 3: u = (u << 6) | (*++inptr ^ 0x80);
+	case 2: u = (u << 6) | (*++inptr ^ 0x80);
+	}
+#else
+	for (i = 1; i < n; i++)
+		u = (u << 6) | (*++inptr ^ 0x80);
+#endif
+	
+	*outchar = u;
+	
+	return n;
+}
+
+static int
+encode_utf8 (gunichar c, char *outbuf, size_t outleft)
+{
+	unsigned char *outptr = (unsigned char *) outbuf;
+	int base, n, i;
+	
+	if (c < 0x80) {
+		outptr[0] = c;
+		return 1;
+	} else if (c < 0x800) {
+		base = 192;
+		n = 2;
+	} else if (c < 0x10000) {
+		base = 224;
+		n = 3;
+	} else if (c < 0x200000) {
+		base = 240;
+		n = 4;
+	} else if (c < 0x4000000) {
+		base = 248;
+		n = 5;
+	} else {
+		base = 252;
+		n = 6;
+	}
+	
+	if (outleft < n) {
+		errno = E2BIG;
+		return -1;
+	}
+	
+#if UNROLL_ENCODE_UTF8
+	switch (n) {
+	case 6: outptr[5] = (c & 0x3f) | 0x80; c >>= 6;
+	case 5: outptr[4] = (c & 0x3f) | 0x80; c >>= 6;
+	case 4: outptr[3] = (c & 0x3f) | 0x80; c >>= 6;
+	case 3: outptr[2] = (c & 0x3f) | 0x80; c >>= 6;
+	case 2: outptr[1] = (c & 0x3f) | 0x80; c >>= 6;
+	case 1: outptr[0] = c | base;
+	}
+#else
+	for (i = n - 1; i > 0; i--) {
+		outptr[i] = (c & 0x3f) | 0x80;
+		c >>= 6;
+	}
+	
+	outptr[0] = c | base;
+#endif
+	
+	return n;
+}
+
+static int
+decode_latin1 (char *inbuf, size_t inleft, gunichar *outchar)
+{
+	*outchar = (unsigned char) *inbuf;
+	return 1;
+}
+
+static int
+encode_latin1 (gunichar c, char *outbuf, size_t outleft)
+{
+	if (outleft < 1) {
+		errno = E2BIG;
+		return -1;
+	}
+	
+	if (c > 0xff) {
+		errno = EILSEQ;
+		return -1;
+	}
+	
+	*outbuf = (char) c;
+	
+	return 1;
+}
+
+
+/*
+ * Simple conversion API
+ */
+
+static gpointer error_quark = "ConvertError";
+
+gpointer
+g_convert_error_quark (void)
+{
+	return error_quark;
+}
+
+gchar *
+g_convert (const gchar *str, gssize len, const gchar *to_charset, const gchar *from_charset,
+	   gsize *bytes_read, gsize *bytes_written, GError **err)
+{
+	size_t outsize, outused, outleft, inleft, grow, rc;
+	char *result, *outbuf, *inbuf;
+	gboolean flush = FALSE;
+	gboolean done = FALSE;
+	GIConv cd;
+	
+	g_return_val_if_fail (str != NULL, NULL);
+	g_return_val_if_fail (to_charset != NULL, NULL);
+	g_return_val_if_fail (from_charset != NULL, NULL);
+	
+	if ((cd = g_iconv_open (to_charset, from_charset)) == (GIConv) -1) {
+		g_set_error (err, G_CONVERT_ERROR, G_CONVERT_ERROR_NO_CONVERSION,
+			     "Conversion from %s to %s not supported.",
+			     from_charset, to_charset);
+		
+		if (bytes_written)
+			*bytes_written = 0;
+		
+		if (bytes_read)
+			*bytes_read = 0;
+		
+		return NULL;
+	}
+	
+	inleft = len < 0 ? strlen (str) : len;
+	inbuf = (char *) str;
+	
+	outleft = outsize = MAX (inleft, 8);
+	outbuf = result = g_malloc (outsize + 4);
+	
+	do {
+		if (!flush)
+			rc = g_iconv (cd, &inbuf, &inleft, &outbuf, &outleft);
+		else
+			rc = g_iconv (cd, NULL, NULL, &outbuf, &outleft);
+		
+		if (rc == (size_t) -1) {
+			switch (errno) {
+			case E2BIG:
+				/* grow our result buffer */
+				grow = MAX (inleft, 8) << 1;
+				outused = outbuf - result;
+				outsize += grow;
+				outleft += grow;
+				result = g_realloc (result, outsize + 4);
+				outbuf = result + outused;
+				break;
+			case EINVAL:
+				/* incomplete input, stop converting and terminate here */
+				if (flush)
+					done = TRUE;
+				else
+					flush = TRUE;
+				break;
+			case EILSEQ:
+				/* illegal sequence in the input */
+				g_set_error (err, G_CONVERT_ERROR, G_CONVERT_ERROR_ILLEGAL_SEQUENCE, "%s", g_strerror (errno));
+				
+				if (bytes_read) {
+					/* save offset of the illegal input sequence */
+					*bytes_read = (inbuf - str);
+				}
+				
+				if (bytes_written)
+					*bytes_written = 0;
+				
+				g_iconv_close (cd);
+				g_free (result);
+				return NULL;
+			default:
+				/* unknown errno */
+				g_set_error (err, G_CONVERT_ERROR, G_CONVERT_ERROR_FAILED, "%s", g_strerror (errno));
+				
+				if (bytes_written)
+					*bytes_written = 0;
+				
+				if (bytes_read)
+					*bytes_read = 0;
+				
+				g_iconv_close (cd);
+				g_free (result);
+				return NULL;
+			}
+		} else if (flush) {
+			/* input has been converted and output has been flushed */
+			break;
+		} else {
+			/* input has been converted, need to flush the output */
+			flush = TRUE;
+		}
+	} while (!done);
+	
+	g_iconv_close (cd);
+	
+	/* Note: not all charsets can be null-terminated with a single
+           null byte. UCS2, for example, needs 2 null bytes and UCS4
+           needs 4. I hope that 4 null bytes is enough to terminate all
+           multibyte charsets? */
+	
+	/* null-terminate the result */
+	memset (outbuf, 0, 4);
+	
+	if (bytes_written)
+		*bytes_written = outbuf - result;
+	
+	if (bytes_read)
+		*bytes_read = inbuf - str;
+	
+	return result;
+}
+
+
+/*
+ * Unicode conversion
+ */
+
+/**
+ * from http://home.tiscali.nl/t876506/utf8tbl.html
+ *
+ * From Unicode UCS-4 to UTF-8:
+ * Start with the Unicode number expressed as a decimal number and call this ud.
+ *
+ * If ud <128 (7F hex) then UTF-8 is 1 byte long, the value of ud.
+ *
+ * If ud >=128 and <=2047 (7FF hex) then UTF-8 is 2 bytes long.
+ *    byte 1 = 192 + (ud div 64)
+ *    byte 2 = 128 + (ud mod 64)
+ *
+ * If ud >=2048 and <=65535 (FFFF hex) then UTF-8 is 3 bytes long.
+ *    byte 1 = 224 + (ud div 4096)
+ *    byte 2 = 128 + ((ud div 64) mod 64)
+ *    byte 3 = 128 + (ud mod 64)
+ *
+ * If ud >=65536 and <=2097151 (1FFFFF hex) then UTF-8 is 4 bytes long.
+ *    byte 1 = 240 + (ud div 262144)
+ *    byte 2 = 128 + ((ud div 4096) mod 64)
+ *    byte 3 = 128 + ((ud div 64) mod 64)
+ *    byte 4 = 128 + (ud mod 64)
+ *
+ * If ud >=2097152 and <=67108863 (3FFFFFF hex) then UTF-8 is 5 bytes long.
+ *    byte 1 = 248 + (ud div 16777216)
+ *    byte 2 = 128 + ((ud div 262144) mod 64)
+ *    byte 3 = 128 + ((ud div 4096) mod 64)
+ *    byte 4 = 128 + ((ud div 64) mod 64)
+ *    byte 5 = 128 + (ud mod 64)
+ *
+ * If ud >=67108864 and <=2147483647 (7FFFFFFF hex) then UTF-8 is 6 bytes long.
+ *    byte 1 = 252 + (ud div 1073741824)
+ *    byte 2 = 128 + ((ud div 16777216) mod 64)
+ *    byte 3 = 128 + ((ud div 262144) mod 64)
+ *    byte 4 = 128 + ((ud div 4096) mod 64)
+ *    byte 5 = 128 + ((ud div 64) mod 64)
+ *    byte 6 = 128 + (ud mod 64)
+ **/
+gint
+g_unichar_to_utf8 (gunichar c, gchar *outbuf)
+{
+	int base, n, i;
+	
+	if (c < 0x80) {
+		base = 0;
+		n = 1;
+	} else if (c < 0x800) {
+		base = 192;
+		n = 2;
+	} else if (c < 0x10000) {
+		base = 224;
+		n = 3;
+	} else if (c < 0x200000) {
+		base = 240;
+		n = 4;
+	} else if (c < 0x4000000) {
+		base = 248;
+		n = 5;
+	} else if (c < 0x80000000) {
+		base = 252;
+		n = 6;
+	} else {
+		return -1;
+	}
+	
+	if (outbuf != NULL) {
+		for (i = n - 1; i > 0; i--) {
+			/* mask off 6 bits worth and add 128 */
+			outbuf[i] = (c & 0x3f) | 0x80;
+			c >>= 6;
+		}
+		
+		/* first character has a different base */
+		outbuf[0] = c | base;
+	}
+	
+	return n;
+}
+
+static int
+g_unichar_to_utf16 (gunichar c, gunichar2 *outbuf)
+{
+	gunichar c2;
+	
+	if (c < 0xd800) {
+		if (outbuf)
+			*outbuf = (gunichar2) c;
+		
+		return 1;
+	} else if (c < 0xe000) {
+		return -1;
+	} else if (c < 0x10000) {
+		if (outbuf)
+			*outbuf = (gunichar2) c;
+		
+		return 1;
+	} else if (c < 0x110000) {
+		if (outbuf) {
+			c2 = c - 0x10000;
+			
+			outbuf[0] = (gunichar2) ((c2 >> 10) + 0xd800);
+			outbuf[1] = (gunichar2) ((c2 & 0x3ff) + 0xdc00);
+		}
+		
+		return 2;
+	} else {
+		return -1;
+	}
+}
+
+gunichar *
+g_utf8_to_ucs4_fast (const gchar *str, glong len, glong *items_written)
+{
+	gunichar *outbuf, *outptr;
+	char *inptr;
+	glong n, i;
+	
+	g_return_val_if_fail (str != NULL, NULL);
+	
+	n = g_utf8_strlen (str, len);
+	
+	if (items_written)
+		*items_written = n;
+	
+	outptr = outbuf = g_malloc ((n + 1) * sizeof (gunichar));
+	inptr = (char *) str;
+	
+	for (i = 0; i < n; i++) {
+		*outptr++ = g_utf8_get_char (inptr);
+		inptr = g_utf8_next_char (inptr);
+	}
+	
+	*outptr = 0;
+	
+	return outbuf;
+}
+
+gunichar2 *
+g_utf8_to_utf16 (const gchar *str, glong len, glong *items_read, glong *items_written, GError **err)
+{
+	gunichar2 *outbuf, *outptr;
+	size_t outlen = 0;
+	size_t inleft;
+	char *inptr;
+	gunichar c;
+	int n;
+	
+	g_return_val_if_fail (str != NULL, NULL);
+	
+	if (len < 0)
+		len = strlen (str);
+	
+	inptr = (char *) str;
+	inleft = len;
+	
+	while (inleft > 0) {
+		if ((n = decode_utf8 (inptr, inleft, &c)) < 0) {
+			if (errno == EILSEQ) {
+				g_set_error (err, G_CONVERT_ERROR, G_CONVERT_ERROR_ILLEGAL_SEQUENCE,
+					     "Illegal byte sequence encounted in the input.");
+			} else if (items_read) {
+				/* partial input is ok if we can let our caller know... */
+				break;
+			} else {
+				g_set_error (err, G_CONVERT_ERROR, G_CONVERT_ERROR_PARTIAL_INPUT,
+					     "Partial byte sequence encountered in the input.");
+			}
+			
+			if (items_read)
+				*items_read = inptr - str;
+			
+			if (items_written)
+				*items_written = 0;
+			
+			return NULL;
+		} else if (c == 0)
+			break;
+		
+		outlen += g_unichar_to_utf16 (c, NULL);
+		inleft -= n;
+		inptr += n;
+	}
+	
+	if (items_read)
+		*items_read = inptr - str;
+	
+	if (items_written)
+		*items_written = outlen;
+	
+	outptr = outbuf = g_malloc ((outlen + 1) * sizeof (gunichar2));
+	inptr = (char *) str;
+	inleft = len;
+	
+	while (inleft > 0) {
+		if ((n = decode_utf8 (inptr, inleft, &c)) < 0)
+			break;
+		else if (c == 0)
+			break;
+		
+		outptr += g_unichar_to_utf16 (c, outptr);
+		inleft -= n;
+		inptr += n;
+	}
+	
+	*outptr = '\0';
+	
+	return outbuf;
+}
+
+gunichar *
+g_utf8_to_ucs4 (const gchar *str, glong len, glong *items_read, glong *items_written, GError **err)
+{
+	gunichar *outbuf, *outptr;
+	size_t outlen = 0;
+	size_t inleft;
+	char *inptr;
+	gunichar c;
+	int n;
+	
+	g_return_val_if_fail (str != NULL, NULL);
+	
+	if (len < 0)
+		len = strlen (str);
+	
+	inptr = (char *) str;
+	inleft = len;
+	
+	while (inleft > 0) {
+		if ((n = decode_utf8 (inptr, inleft, &c)) < 0) {
+			if (errno == EILSEQ) {
+				g_set_error (err, G_CONVERT_ERROR, G_CONVERT_ERROR_ILLEGAL_SEQUENCE,
+					     "Illegal byte sequence encounted in the input.");
+			} else if (items_read) {
+				/* partial input is ok if we can let our caller know... */
+				break;
+			} else {
+				g_set_error (err, G_CONVERT_ERROR, G_CONVERT_ERROR_PARTIAL_INPUT,
+					     "Partial byte sequence encountered in the input.");
+			}
+			
+			if (items_read)
+				*items_read = inptr - str;
+			
+			if (items_written)
+				*items_written = 0;
+			
+			return NULL;
+		} else if (c == 0)
+			break;
+		
+		outlen += 4;
+		inleft -= n;
+		inptr += n;
+	}
+	
+	if (items_written)
+		*items_written = outlen / 4;
+	
+	if (items_read)
+		*items_read = inptr - str;
+	
+	outptr = outbuf = g_malloc (outlen + 4);
+	inptr = (char *) str;
+	inleft = len;
+	
+	while (inleft > 0) {
+		if ((n = decode_utf8 (inptr, inleft, &c)) < 0)
+			break;
+		else if (c == 0)
+			break;
+		
+		*outptr++ = c;
+		inleft -= n;
+		inptr += n;
+	}
+	
+	*outptr = 0;
+	
+	return outbuf;
+}
+
+gchar *
+g_utf16_to_utf8 (const gunichar2 *str, glong len, glong *items_read, glong *items_written, GError **err)
+{
+	char *inptr, *outbuf, *outptr;
+	size_t outlen = 0;
+	size_t inleft;
+	gunichar c;
+	int n;
+	
+	g_return_val_if_fail (str != NULL, NULL);
+	
+	if (len < 0) {
+		len = 0;
+		while (str[len])
+			len++;
+	}
+	
+	inptr = (char *) str;
+	inleft = len * 2;
+	
+	while (inleft > 0) {
+		if ((n = decode_utf16 (inptr, inleft, &c)) < 0) {
+			if (n == -2 && inleft > 2) {
+				/* This means that the first UTF-16 char was read, but second failed */
+				inleft -= 2;
+				inptr += 2;
+			}
+			
+			if (errno == EILSEQ) {
+				g_set_error (err, G_CONVERT_ERROR, G_CONVERT_ERROR_ILLEGAL_SEQUENCE,
+					     "Illegal byte sequence encounted in the input.");
+			} else if (items_read) {
+				/* partial input is ok if we can let our caller know... */
+				break;
+			} else {
+				g_set_error (err, G_CONVERT_ERROR, G_CONVERT_ERROR_PARTIAL_INPUT,
+					     "Partial byte sequence encountered in the input.");
+			}
+			
+			if (items_read)
+				*items_read = (inptr - (char *) str) / 2;
+			
+			if (items_written)
+				*items_written = 0;
+			
+			return NULL;
+		} else if (c == 0)
+			break;
+		
+		outlen += g_unichar_to_utf8 (c, NULL);
+		inleft -= n;
+		inptr += n;
+	}
+	
+	if (items_read)
+		*items_read = (inptr - (char *) str) / 2;
+	
+	if (items_written)
+		*items_written = outlen;
+	
+	outptr = outbuf = g_malloc (outlen + 1);
+	inptr = (char *) str;
+	inleft = len * 2;
+	
+	while (inleft > 0) {
+		if ((n = decode_utf16 (inptr, inleft, &c)) < 0)
+			break;
+		else if (c == 0)
+			break;
+		
+		outptr += g_unichar_to_utf8 (c, outptr);
+		inleft -= n;
+		inptr += n;
+	}
+	
+	*outptr = '\0';
+	
+	return outbuf;
+}
+
+gunichar *
+g_utf16_to_ucs4 (const gunichar2 *str, glong len, glong *items_read, glong *items_written, GError **err)
+{
+	gunichar *outbuf, *outptr;
+	size_t outlen = 0;
+	size_t inleft;
+	char *inptr;
+	gunichar c;
+	int n;
+	
+	g_return_val_if_fail (str != NULL, NULL);
+	
+	if (len < 0) {
+		len = 0;
+		while (str[len])
+			len++;
+	}
+	
+	inptr = (char *) str;
+	inleft = len * 2;
+	
+	while (inleft > 0) {
+		if ((n = decode_utf16 (inptr, inleft, &c)) < 0) {
+			if (n == -2 && inleft > 2) {
+				/* This means that the first UTF-16 char was read, but second failed */
+				inleft -= 2;
+				inptr += 2;
+			}
+			
+			if (errno == EILSEQ) {
+				g_set_error (err, G_CONVERT_ERROR, G_CONVERT_ERROR_ILLEGAL_SEQUENCE,
+					     "Illegal byte sequence encounted in the input.");
+			} else if (items_read) {
+				/* partial input is ok if we can let our caller know... */
+				break;
+			} else {
+				g_set_error (err, G_CONVERT_ERROR, G_CONVERT_ERROR_PARTIAL_INPUT,
+					     "Partial byte sequence encountered in the input.");
+			}
+			
+			if (items_read)
+				*items_read = (inptr - (char *) str) / 2;
+			
+			if (items_written)
+				*items_written = 0;
+			
+			return NULL;
+		} else if (c == 0)
+			break;
+		
+		outlen += 4;
+		inleft -= n;
+		inptr += n;
+	}
+	
+	if (items_read)
+		*items_read = (inptr - (char *) str) / 2;
+	
+	if (items_written)
+		*items_written = outlen / 4;
+	
+	outptr = outbuf = g_malloc (outlen + 4);
+	inptr = (char *) str;
+	inleft = len * 2;
+	
+	while (inleft > 0) {
+		if ((n = decode_utf16 (inptr, inleft, &c)) < 0)
+			break;
+		else if (c == 0)
+			break;
+		
+		*outptr++ = c;
+		inleft -= n;
+		inptr += n;
+	}
+	
+	*outptr = 0;
+	
+	return outbuf;
+}
+
+gchar *
+g_ucs4_to_utf8 (const gunichar *str, glong len, glong *items_read, glong *items_written, GError **err)
+{
+	char *outbuf, *outptr;
+	size_t outlen = 0;
+	glong i;
+	int n;
+	
+	g_return_val_if_fail (str != NULL, NULL);
+	
+	if (len < 0) {
+		for (i = 0; str[i] != 0; i++) {
+			if ((n = g_unichar_to_utf8 (str[i], NULL)) < 0) {
+				g_set_error (err, G_CONVERT_ERROR, G_CONVERT_ERROR_ILLEGAL_SEQUENCE,
+					     "Illegal byte sequence encounted in the input.");
+				
+				if (items_written)
+					*items_written = 0;
+				
+				if (items_read)
+					*items_read = i;
+				
+				return NULL;
+			}
+			
+			outlen += n;
+		}
+	} else {
+		for (i = 0; i < len && str[i] != 0; i++) {
+			if ((n = g_unichar_to_utf8 (str[i], NULL)) < 0) {
+				g_set_error (err, G_CONVERT_ERROR, G_CONVERT_ERROR_ILLEGAL_SEQUENCE,
+					     "Illegal byte sequence encounted in the input.");
+				
+				if (items_written)
+					*items_written = 0;
+				
+				if (items_read)
+					*items_read = i;
+				
+				return NULL;
+			}
+			
+			outlen += n;
+		}
+	}
+	
+	len = i;
+	
+	outptr = outbuf = g_malloc (outlen + 1);
+	for (i = 0; i < len; i++)
+		outptr += g_unichar_to_utf8 (str[i], outptr);
+	*outptr = 0;
+	
+	if (items_written)
+		*items_written = outlen;
+	
+	if (items_read)
+		*items_read = i;
+	
+	return outbuf;
+}
+
+gunichar2 *
+g_ucs4_to_utf16 (const gunichar *str, glong len, glong *items_read, glong *items_written, GError **err)
+{
+	gunichar2 *outbuf, *outptr;
+	size_t outlen = 0;
+	glong i;
+	int n;
+	
+	g_return_val_if_fail (str != NULL, NULL);
+	
+	if (len < 0) {
+		for (i = 0; str[i] != 0; i++) {
+			if ((n = g_unichar_to_utf16 (str[i], NULL)) < 0) {
+				g_set_error (err, G_CONVERT_ERROR, G_CONVERT_ERROR_ILLEGAL_SEQUENCE,
+					     "Illegal byte sequence encounted in the input.");
+				
+				if (items_written)
+					*items_written = 0;
+				
+				if (items_read)
+					*items_read = i;
+				
+				return NULL;
+			}
+			
+			outlen += n;
+		}
+	} else {
+		for (i = 0; i < len && str[i] != 0; i++) {
+			if ((n = g_unichar_to_utf16 (str[i], NULL)) < 0) {
+				g_set_error (err, G_CONVERT_ERROR, G_CONVERT_ERROR_ILLEGAL_SEQUENCE,
+					     "Illegal byte sequence encounted in the input.");
+				
+				if (items_written)
+					*items_written = 0;
+				
+				if (items_read)
+					*items_read = i;
+				
+				return NULL;
+			}
+			
+			outlen += n;
+		}
+	}
+	
+	len = i;
+	
+	outptr = outbuf = g_malloc ((outlen + 1) * sizeof (gunichar2));
+	for (i = 0; i < len; i++)
+		outptr += g_unichar_to_utf16 (str[i], outptr);
+	*outptr = 0;
+	
+	if (items_written)
+		*items_written = outlen;
+	
+	if (items_read)
+		*items_read = i;
+	
+	return outbuf;
+}
diff --git a/eglib/src/glib.h b/eglib/src/glib.h
index f4b2141..28e68d3 100644
--- a/eglib/src/glib.h
+++ b/eglib/src/glib.h
@@ -11,6 +11,10 @@
 
 #ifdef _MSC_VER
 #pragma include_alias(<eglib-config.h>, <eglib-config.hw>)
+#endif
+
+/* VS 2010 and later have stdint.h */
+#if defined(_MSC_VER) && _MSC_VER < 1600
 #else
 #include <stdint.h>
 #endif
@@ -24,6 +28,11 @@
 #include <alloca.h>
 #endif
 
+#ifdef WIN32
+/* For alloca */
+#include <malloc.h>
+#endif
+
 #ifndef offsetof
 #   define offsetof(s_name,n_name) (size_t)(char *)&(((s_name*)0)->m_name)
 #endif
@@ -61,19 +70,19 @@ typedef char           gchar;
 typedef unsigned char  guchar;
 
 #if !G_TYPES_DEFINED
-#ifdef _MSC_VER
-typedef __int8				gint8;
+/* VS 2010 and later have stdint.h */
+#if defined(_MSC_VER) && _MSC_VER < 1600
+typedef __int8			gint8;
 typedef unsigned __int8		guint8;
-typedef __int16				gint16;
+typedef __int16			gint16;
 typedef unsigned __int16	guint16;
-typedef __int32				gint32;
+typedef __int32			gint32;
 typedef unsigned __int32	guint32;
-typedef __int64				gint64;
+typedef __int64			gint64;
 typedef unsigned __int64	guint64;
-typedef float				gfloat;
-typedef double				gdouble;
-typedef unsigned __int16	gunichar2;
-typedef int                 gboolean;
+typedef float			gfloat;
+typedef double			gdouble;
+typedef int			gboolean;
 #else
 /* Types defined in terms of the stdint.h */
 typedef int8_t         gint8;
@@ -86,11 +95,13 @@ typedef int64_t        gint64;
 typedef uint64_t       guint64;
 typedef float          gfloat;
 typedef double         gdouble;
-typedef uint16_t       gunichar2;
 typedef int32_t        gboolean;
 #endif
 #endif
 
+typedef guint16 gunichar2;
+typedef guint32 gunichar;
+
 /*
  * Macros
  */
@@ -99,9 +110,13 @@ typedef int32_t        gboolean;
 #define FALSE                0
 #define TRUE                 1
 
+#define G_MINSHORT           SHRT_MIN
+#define G_MAXSHORT           SHRT_MAX
+#define G_MAXUSHORT          USHRT_MAX
 #define G_MAXINT             INT_MAX
 #define G_MININT             INT_MIN
 #define G_MAXINT32           INT32_MAX
+#define G_MAXUINT32          UINT32_MAX
 #define G_MININT32           INT32_MIN
 #define G_MININT64           INT64_MIN
 #define G_MAXINT64	     INT64_MAX
@@ -178,66 +193,11 @@ gchar*           g_win32_getlocale(void);
 /*
  * Precondition macros
  */
+#define g_warn_if_fail(x)  G_STMT_START { if (!(x)) { g_warning ("%s:%d: assertion '%s' failed", __FILE__, __LINE__, #x); } } G_STMT_END
 #define g_return_if_fail(x)  G_STMT_START { if (!(x)) { g_critical ("%s:%d: assertion '%s' failed", __FILE__, __LINE__, #x); return; } } G_STMT_END
 #define g_return_val_if_fail(x,e)  G_STMT_START { if (!(x)) { g_critical ("%s:%d: assertion '%s' failed", __FILE__, __LINE__, #x); return (e); } } G_STMT_END
 
 /*
- * Hashtables
- */
-typedef struct _GHashTable GHashTable;
-typedef struct _GHashTableIter GHashTableIter;
-
-/* Private, but needed for stack allocation */
-struct _GHashTableIter
-{
-	gpointer dummy [8];
-};
-
-typedef void     (*GFunc)          (gpointer data, gpointer user_data);
-typedef gint     (*GCompareFunc)   (gconstpointer a, gconstpointer b);
-typedef gint     (*GCompareDataFunc) (gconstpointer a, gconstpointer b, gpointer user_data);
-typedef void     (*GHFunc)         (gpointer key, gpointer value, gpointer user_data);
-typedef gboolean (*GHRFunc)        (gpointer key, gpointer value, gpointer user_data);
-typedef void     (*GDestroyNotify) (gpointer data);
-typedef guint    (*GHashFunc)      (gconstpointer key);
-typedef gboolean (*GEqualFunc)     (gconstpointer a, gconstpointer b);
-typedef void     (*GFreeFunc)      (gpointer       data);
-
-GHashTable     *g_hash_table_new             (GHashFunc hash_func, GEqualFunc key_equal_func);
-GHashTable     *g_hash_table_new_full        (GHashFunc hash_func, GEqualFunc key_equal_func,
-					      GDestroyNotify key_destroy_func, GDestroyNotify value_destroy_func);
-void            g_hash_table_insert_replace  (GHashTable *hash, gpointer key, gpointer value, gboolean replace);
-guint           g_hash_table_size            (GHashTable *hash);
-gpointer        g_hash_table_lookup          (GHashTable *hash, gconstpointer key);
-gboolean        g_hash_table_lookup_extended (GHashTable *hash, gconstpointer key, gpointer *orig_key, gpointer *value);
-void            g_hash_table_foreach         (GHashTable *hash, GHFunc func, gpointer user_data);
-gpointer        g_hash_table_find            (GHashTable *hash, GHRFunc predicate, gpointer user_data);
-gboolean        g_hash_table_remove          (GHashTable *hash, gconstpointer key);
-void            g_hash_table_remove_all      (GHashTable *hash);
-guint           g_hash_table_foreach_remove  (GHashTable *hash, GHRFunc func, gpointer user_data);
-guint           g_hash_table_foreach_steal   (GHashTable *hash, GHRFunc func, gpointer user_data);
-void            g_hash_table_destroy         (GHashTable *hash);
-void            g_hash_table_print_stats     (GHashTable *table);
-
-void            g_hash_table_iter_init       (GHashTableIter *iter, GHashTable *hash_table);
-gboolean        g_hash_table_iter_next       (GHashTableIter *iter, gpointer *key, gpointer *value);
-
-guint           g_spaced_primes_closest      (guint x);
-
-#define g_hash_table_insert(h,k,v)    g_hash_table_insert_replace ((h),(k),(v),FALSE)
-#define g_hash_table_replace(h,k,v)   g_hash_table_insert_replace ((h),(k),(v),TRUE)
-
-gboolean g_direct_equal (gconstpointer v1, gconstpointer v2);
-guint    g_direct_hash  (gconstpointer v1);
-gboolean g_int_equal    (gconstpointer v1, gconstpointer v2);
-guint    g_int_hash     (gconstpointer v1);
-gboolean g_str_equal    (gconstpointer v1, gconstpointer v2);
-guint    g_str_hash     (gconstpointer v1);
-
-#define  g_assert(x)     G_STMT_START { if (!(x)) g_assertion_message ("* Assertion at %s:%d, condition `%s' not met\n", __FILE__, __LINE__, #x);  } G_STMT_END
-#define  g_assert_not_reached() G_STMT_START { g_assertion_message ("* Assertion: should not be reached at %s:%d\n", __FILE__, __LINE__); } G_STMT_END
-
-/*
  * Errors
  */
 typedef struct {
@@ -292,11 +252,16 @@ gint         g_snprintf        (gchar *string, gulong n, gchar const *format, ..
 #define g_vsnprintf vsnprintf
 #define g_vasprintf vasprintf
 
-gsize       g_strlcpy          (gchar *dest, const gchar *src, gsize dest_size);
+gsize   g_strlcpy            (gchar *dest, const gchar *src, gsize dest_size);
+gchar  *g_stpcpy             (gchar *dest, const char *src);
+
 
 gchar   g_ascii_tolower      (gchar c);
+gchar   g_ascii_toupper      (gchar c);
 gchar  *g_ascii_strdown      (const gchar *str, gssize len);
+gchar  *g_ascii_strup        (const gchar *str, gssize len);
 gint    g_ascii_strncasecmp  (const gchar *s1, const gchar *s2, gsize n);
+gint    g_ascii_strcasecmp   (const gchar *s1, const gchar *s2);
 gint    g_ascii_xdigit_value (gchar c);
 #define g_ascii_isspace(c)   (isspace (c) != 0)
 #define g_ascii_isalpha(c)   (isalpha (c) != 0)
@@ -306,16 +271,15 @@ gint    g_ascii_xdigit_value (gchar c);
 /* FIXME: g_strcasecmp supports utf8 unicode stuff */
 #ifdef _MSC_VER
 #define g_strcasecmp stricmp
-#define g_ascii_strcasecmp stricmp
 #define g_strncasecmp strnicmp
 #define g_strstrip(a) g_strchug (g_strchomp (a))
 #else
 #define g_strcasecmp strcasecmp
-#define g_ascii_strcasecmp strcasecmp
 #define g_ascii_strtoull strtoull
 #define g_strncasecmp strncasecmp
 #define g_strstrip(a) g_strchug (g_strchomp (a))
 #endif
+#define g_ascii_strdup strdup
 
 
 #define	G_STR_DELIMITERS "_-|> <."
@@ -336,14 +300,29 @@ gchar       *g_string_free          (GString *string, gboolean free_segment);
 GString     *g_string_append        (GString *string, const gchar *val);
 void         g_string_printf        (GString *string, const gchar *format, ...);
 void         g_string_append_printf (GString *string, const gchar *format, ...);
+void         g_string_append_vprintf (GString *string, const gchar *format, va_list args);
+GString     *g_string_append_unichar (GString *string, gunichar c);
 GString     *g_string_append_c      (GString *string, gchar c);
 GString     *g_string_append        (GString *string, const gchar *val);
 GString     *g_string_append_len    (GString *string, const gchar *val, gssize len);
 GString     *g_string_truncate      (GString *string, gsize len);
 GString     *g_string_prepend       (GString *string, const gchar *val);
+GString     *g_string_insert        (GString *string, gssize pos, const gchar *val);
+GString     *g_string_set_size      (GString *string, gsize len);
+GString     *g_string_erase         (GString *string, gssize pos, gssize len);
 
 #define g_string_sprintfa g_string_append_printf
 
+typedef void     (*GFunc)          (gpointer data, gpointer user_data);
+typedef gint     (*GCompareFunc)   (gconstpointer a, gconstpointer b);
+typedef gint     (*GCompareDataFunc) (gconstpointer a, gconstpointer b, gpointer user_data);
+typedef void     (*GHFunc)         (gpointer key, gpointer value, gpointer user_data);
+typedef gboolean (*GHRFunc)        (gpointer key, gpointer value, gpointer user_data);
+typedef void     (*GDestroyNotify) (gpointer data);
+typedef guint    (*GHashFunc)      (gconstpointer key);
+typedef gboolean (*GEqualFunc)     (gconstpointer a, gconstpointer b);
+typedef void     (*GFreeFunc)      (gpointer       data);
+
 /*
  * Lists
  */
@@ -439,6 +418,8 @@ GList *g_list_find_custom   (GList	   *list,
 			     GCompareFunc   func);
 GList *g_list_remove        (GList         *list,
 			     gconstpointer  data);
+GList *g_list_remove_all    (GList         *list,
+			     gconstpointer  data);
 GList *g_list_reverse       (GList         *list);
 GList *g_list_remove_link   (GList         *list,
 			     GList         *link);
@@ -454,6 +435,52 @@ GList *g_list_sort          (GList         *sort,
 			     GCompareFunc   func);
 
 /*
+ * Hashtables
+ */
+typedef struct _GHashTable GHashTable;
+typedef struct _GHashTableIter GHashTableIter;
+
+/* Private, but needed for stack allocation */
+struct _GHashTableIter
+{
+	gpointer dummy [8];
+};
+
+GHashTable     *g_hash_table_new             (GHashFunc hash_func, GEqualFunc key_equal_func);
+GHashTable     *g_hash_table_new_full        (GHashFunc hash_func, GEqualFunc key_equal_func,
+					      GDestroyNotify key_destroy_func, GDestroyNotify value_destroy_func);
+void            g_hash_table_insert_replace  (GHashTable *hash, gpointer key, gpointer value, gboolean replace);
+guint           g_hash_table_size            (GHashTable *hash);
+GList          *g_hash_table_get_keys        (GHashTable *hash);
+GList          *g_hash_table_get_values      (GHashTable *hash);
+gpointer        g_hash_table_lookup          (GHashTable *hash, gconstpointer key);
+gboolean        g_hash_table_lookup_extended (GHashTable *hash, gconstpointer key, gpointer *orig_key, gpointer *value);
+void            g_hash_table_foreach         (GHashTable *hash, GHFunc func, gpointer user_data);
+gpointer        g_hash_table_find            (GHashTable *hash, GHRFunc predicate, gpointer user_data);
+gboolean        g_hash_table_remove          (GHashTable *hash, gconstpointer key);
+gboolean        g_hash_table_steal           (GHashTable *hash, gconstpointer key);
+void            g_hash_table_remove_all      (GHashTable *hash);
+guint           g_hash_table_foreach_remove  (GHashTable *hash, GHRFunc func, gpointer user_data);
+guint           g_hash_table_foreach_steal   (GHashTable *hash, GHRFunc func, gpointer user_data);
+void            g_hash_table_destroy         (GHashTable *hash);
+void            g_hash_table_print_stats     (GHashTable *table);
+
+void            g_hash_table_iter_init       (GHashTableIter *iter, GHashTable *hash_table);
+gboolean        g_hash_table_iter_next       (GHashTableIter *iter, gpointer *key, gpointer *value);
+
+guint           g_spaced_primes_closest      (guint x);
+
+#define g_hash_table_insert(h,k,v)    g_hash_table_insert_replace ((h),(k),(v),FALSE)
+#define g_hash_table_replace(h,k,v)   g_hash_table_insert_replace ((h),(k),(v),TRUE)
+
+gboolean g_direct_equal (gconstpointer v1, gconstpointer v2);
+guint    g_direct_hash  (gconstpointer v1);
+gboolean g_int_equal    (gconstpointer v1, gconstpointer v2);
+guint    g_int_hash     (gconstpointer v1);
+gboolean g_str_equal    (gconstpointer v1, gconstpointer v2);
+guint    g_str_hash     (gconstpointer v1);
+
+/*
  * ByteArray
  */
 
@@ -478,17 +505,25 @@ struct _GArray {
 };
 
 GArray *g_array_new               (gboolean zero_terminated, gboolean clear_, guint element_size);
+GArray *g_array_sized_new         (gboolean zero_terminated, gboolean clear_, guint element_size, guint reserved_size);
 gchar*  g_array_free              (GArray *array, gboolean free_segment);
 GArray *g_array_append_vals       (GArray *array, gconstpointer data, guint len);
 GArray* g_array_insert_vals       (GArray *array, guint index_, gconstpointer data, guint len);
 GArray* g_array_remove_index      (GArray *array, guint index_);
 GArray* g_array_remove_index_fast (GArray *array, guint index_);
+void    g_array_set_size          (GArray *array, gint length);
 
 #define g_array_append_val(a,v)   (g_array_append_vals((a),&(v),1))
 #define g_array_insert_val(a,i,v) (g_array_insert_vals((a),(i),&(v),1))
 #define g_array_index(a,t,i)      *(t*)(((a)->data) + sizeof(t) * (i))
 
 /*
+ * QSort
+*/
+
+void g_qsort_with_data (gpointer base, size_t nmemb, size_t size, GCompareDataFunc compare, gpointer user_data);
+
+/*
  * Pointer Array
  */
 
@@ -590,7 +625,6 @@ gpointer g_convert_error_quark(void);
  * only used if the old collation code is activated, so this is only the
  * bare minimum to build.
  */
-typedef guint32 gunichar;
 
 typedef enum {
 	G_UNICODE_CONTROL,
@@ -625,12 +659,53 @@ typedef enum {
 	G_UNICODE_SPACE_SEPARATOR
 } GUnicodeType;
 
+typedef enum {
+	G_UNICODE_BREAK_MANDATORY,
+	G_UNICODE_BREAK_CARRIAGE_RETURN,
+	G_UNICODE_BREAK_LINE_FEED,
+	G_UNICODE_BREAK_COMBINING_MARK,
+	G_UNICODE_BREAK_SURROGATE,
+	G_UNICODE_BREAK_ZERO_WIDTH_SPACE,
+	G_UNICODE_BREAK_INSEPARABLE,
+	G_UNICODE_BREAK_NON_BREAKING_GLUE,
+	G_UNICODE_BREAK_CONTINGENT,
+	G_UNICODE_BREAK_SPACE,
+	G_UNICODE_BREAK_AFTER,
+	G_UNICODE_BREAK_BEFORE,
+	G_UNICODE_BREAK_BEFORE_AND_AFTER,
+	G_UNICODE_BREAK_HYPHEN,
+	G_UNICODE_BREAK_NON_STARTER,
+	G_UNICODE_BREAK_OPEN_PUNCTUATION,
+	G_UNICODE_BREAK_CLOSE_PUNCTUATION,
+	G_UNICODE_BREAK_QUOTATION,
+	G_UNICODE_BREAK_EXCLAMATION,
+	G_UNICODE_BREAK_IDEOGRAPHIC,
+	G_UNICODE_BREAK_NUMERIC,
+	G_UNICODE_BREAK_INFIX_SEPARATOR,
+	G_UNICODE_BREAK_SYMBOL,
+	G_UNICODE_BREAK_ALPHABETIC,
+	G_UNICODE_BREAK_PREFIX,
+	G_UNICODE_BREAK_POSTFIX,
+	G_UNICODE_BREAK_COMPLEX_CONTEXT,
+	G_UNICODE_BREAK_AMBIGUOUS,
+	G_UNICODE_BREAK_UNKNOWN,
+	G_UNICODE_BREAK_NEXT_LINE,
+	G_UNICODE_BREAK_WORD_JOINER,
+	G_UNICODE_BREAK_HANGUL_L_JAMO,
+	G_UNICODE_BREAK_HANGUL_V_JAMO,
+	G_UNICODE_BREAK_HANGUL_T_JAMO,
+	G_UNICODE_BREAK_HANGUL_LV_SYLLABLE,
+	G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE
+} GUnicodeBreakType;
+
 gunichar       g_unichar_toupper (gunichar c);
 gunichar       g_unichar_tolower (gunichar c);
 gunichar       g_unichar_totitle (gunichar c);
 GUnicodeType   g_unichar_type    (gunichar c);
+gboolean       g_unichar_isspace (gunichar c);
 gboolean       g_unichar_isxdigit (gunichar c);
 gint           g_unichar_xdigit_value (gunichar c);
+GUnicodeBreakType   g_unichar_break_type (gunichar c);
 
 #ifndef MAX
 #define MAX(a,b) (((a)>(b)) ? (a) : (b))
@@ -652,6 +727,9 @@ gint           g_unichar_xdigit_value (gunichar c);
 #define G_UNLIKELY(x) (x)
 #endif
 
+#define  g_assert(x)     G_STMT_START { if (G_UNLIKELY (!(x))) g_assertion_message ("* Assertion at %s:%d, condition `%s' not met\n", __FILE__, __LINE__, #x);  } G_STMT_END
+#define  g_assert_not_reached() G_STMT_START { g_assertion_message ("* Assertion: should not be reached at %s:%d\n", __FILE__, __LINE__); } G_STMT_END
+
 /*
  * Unicode conversion
  */
@@ -667,12 +745,16 @@ typedef enum {
 	G_CONVERT_ERROR_NOT_ABSOLUTE_PATH
 } GConvertError;
 
-gchar* g_utf8_strup (const gchar *str, gssize len);
-gchar* g_utf8_strdown (const gchar *str, gssize len);
-gunichar2 *g_utf8_to_utf16 (const gchar *str, glong len, glong *items_read, glong *items_written, GError **error);
-gchar     *g_utf16_to_utf8 (const gunichar2 *str, glong len, glong *items_read, glong *items_written, GError **error);
-gunichar2 *g_ucs4_to_utf16 (const gunichar *str, glong len, glong *items_read, glong *items_written, GError **error);
-gunichar  *g_utf16_to_ucs4 (const gunichar2 *str, glong len, glong *items_read, glong *items_written, GError **error);
+gchar     *g_utf8_strup (const gchar *str, gssize len);
+gchar     *g_utf8_strdown (const gchar *str, gssize len);
+gint       g_unichar_to_utf8 (gunichar c, gchar *outbuf);
+gunichar  *g_utf8_to_ucs4_fast (const gchar *str, glong len, glong *items_written);
+gunichar  *g_utf8_to_ucs4 (const gchar *str, glong len, glong *items_read, glong *items_written, GError **err);
+gunichar2 *g_utf8_to_utf16 (const gchar *str, glong len, glong *items_read, glong *items_written, GError **err);
+gchar     *g_utf16_to_utf8 (const gunichar2 *str, glong len, glong *items_read, glong *items_written, GError **err);
+gunichar  *g_utf16_to_ucs4 (const gunichar2 *str, glong len, glong *items_read, glong *items_written, GError **err);
+gchar     *g_ucs4_to_utf8  (const gunichar *str, glong len, glong *items_read, glong *items_written, GError **err);
+gunichar2 *g_ucs4_to_utf16 (const gunichar *str, glong len, glong *items_read, glong *items_written, GError **err);
 
 #define u8to16(str) g_utf8_to_utf16(str, (glong)strlen(str), NULL, NULL, NULL)
 
@@ -753,6 +835,10 @@ void g_usleep (gulong microseconds);
  * File
  */
 
+gpointer g_file_error_quark (void);
+
+#define G_FILE_ERROR g_file_error_quark ()
+
 typedef enum {
 	G_FILE_ERROR_EXIST,
 	G_FILE_ERROR_ISDIR,
@@ -790,11 +876,24 @@ typedef enum {
 } GFileTest;
 
 
+gboolean   g_file_set_contents (const gchar *filename, const gchar *contents, gssize length, GError **error);
 gboolean   g_file_get_contents (const gchar *filename, gchar **contents, gsize *length, GError **error);
 GFileError g_file_error_from_errno (gint err_no);
 gint       g_file_open_tmp (const gchar *tmpl, gchar **name_used, GError **error);
 gboolean   g_file_test (const gchar *filename, GFileTest test);
 
+#define g_open open
+#define g_rename rename
+#define g_stat stat
+#define g_unlink unlink
+#define g_fopen fopen
+#define g_lstat lstat
+#define g_rmdir rmdir
+#define g_mkstemp mkstemp
+#define g_ascii_isdigit isdigit
+#define g_ascii_strtod strtod
+#define g_ascii_isalnum isalnum
+
 /*
  * Pattern matching
  */
@@ -811,6 +910,8 @@ GDir        *g_dir_open (const gchar *path, guint flags, GError **error);
 const gchar *g_dir_read_name (GDir *dir);
 void         g_dir_rewind (GDir *dir);
 void         g_dir_close (GDir *dir);
+
+int          g_mkdir_with_parents (const gchar *pathname, int mode);
 #define g_mkdir mkdir
 
 /*
@@ -867,14 +968,11 @@ gboolean         g_markup_parse_context_end_parse (GMarkupParseContext *context,
 /*
  * Character set conversion
  */
-/*
-* Index into the table below with the first byte of a UTF-8 sequence to
-* get the number of trailing bytes that are supposed to follow it.
-* Note that *legal* UTF-8 values can't have 4 or 5-bytes. The table is
-* left as-is for anyone who may want to do such conversion, which was
-* allowed in earlier algorithms.
-*/
-extern const gchar g_trailingBytesForUTF8[256];
+typedef struct _GIConv *GIConv;
+
+gsize g_iconv (GIConv cd, gchar **inbytes, gsize *inbytesleft, gchar **outbytes, gsize *outbytesleft);
+GIConv g_iconv_open (const gchar *to_charset, const gchar *from_charset);
+int g_iconv_close (GIConv cd);
 
 gboolean  g_get_charset        (G_CONST_RETURN char **charset);
 gchar    *g_locale_to_utf8     (const gchar *opsysstring, gssize len,
@@ -887,10 +985,27 @@ gchar    *g_filename_from_utf8 (const gchar *utf8string, gssize len, gsize *byte
 gchar    *g_convert            (const gchar *str, gssize len,
 				const gchar *to_codeset, const gchar *from_codeset,
 				gsize *bytes_read, gsize *bytes_written, GError **error);
+
+/*
+ * Unicode manipulation
+ */
+extern const guchar g_utf8_jump_table[256];
+
 gboolean  g_utf8_validate      (const gchar *str, gssize max_len, const gchar **end);
+gunichar  g_utf8_get_char_validated (const gchar *str, gssize max_len);
+gchar    *g_utf8_find_prev_char (const char *str, const char *p);
+gchar    *g_utf8_prev_char     (const char *str);
+#define   g_utf8_next_char(p)  ((p) + g_utf8_jump_table[(guchar)(*p)])
 gunichar  g_utf8_get_char      (const gchar *src);
 glong     g_utf8_strlen        (const gchar *str, gssize max);
-#define   g_utf8_next_char(p) p + (g_trailingBytesForUTF8[(guchar)(*p)] + 1)
+gchar    *g_utf8_offset_to_pointer (const gchar *str, glong offset);
+glong     g_utf8_pointer_to_offset (const gchar *str, const gchar *pos);
+
+/*
+ * priorities
+ */
+#define G_PRIORITY_DEFAULT 0
+#define G_PRIORITY_DEFAULT_IDLE 200
 
 /*
  * Empty thread functions, not used by eglib
@@ -920,40 +1035,48 @@ glong     g_utf8_strlen        (const gchar *str, gssize max);
 				  
  
 #if G_BYTE_ORDER == G_LITTLE_ENDIAN
-#   define GUINT32_TO_LE(x) (x)
-#   define GUINT64_TO_LE(x) (x)
-#   define GUINT16_TO_LE(x) (x)
-#   define GUINT_TO_LE(x)   (x)
-#   define GUINT32_TO_BE(x) GUINT32_SWAP_LE_BE(x)
-#   define GUINT16_FROM_BE(x) GUINT16_SWAP_LE_BE(x)
-#   define GUINT32_FROM_BE(x) GUINT32_SWAP_LE_BE(x)
 #   define GUINT64_FROM_BE(x) GUINT64_SWAP_LE_BE(x)
-#   define GINT16_FROM_BE(x) GUINT16_SWAP_LE_BE(x)
-#   define GINT32_FROM_BE(x) GUINT32_SWAP_LE_BE(x)
-#   define GINT64_FROM_BE(x) GUINT64_SWAP_LE_BE(x)
+#   define GUINT32_FROM_BE(x) GUINT32_SWAP_LE_BE(x)
+#   define GUINT16_FROM_BE(x) GUINT16_SWAP_LE_BE(x)
+#   define GUINT_FROM_BE(x)   GUINT32_SWAP_LE_BE(x)
+#   define GUINT64_FROM_LE(x) (x)
+#   define GUINT32_FROM_LE(x) (x)
+#   define GUINT16_FROM_LE(x) (x)
+#   define GUINT_FROM_LE(x)   (x)
+#   define GUINT64_TO_BE(x)   GUINT64_SWAP_LE_BE(x)
+#   define GUINT32_TO_BE(x)   GUINT32_SWAP_LE_BE(x)
+#   define GUINT16_TO_BE(x)   GUINT16_SWAP_LE_BE(x)
+#   define GUINT_TO_BE(x)     GUINT32_SWAP_LE_BE(x)
+#   define GUINT64_TO_LE(x)   (x)
+#   define GUINT32_TO_LE(x)   (x)
+#   define GUINT16_TO_LE(x)   (x)
+#   define GUINT_TO_LE(x)     (x)
 #else
-#   define GUINT32_TO_LE(x) GUINT32_SWAP_LE_BE(x)
-#   define GUINT64_TO_LE(x) GUINT64_SWAP_LE_BE(x)
-#   define GUINT16_TO_LE(x) GUINT16_SWAP_LE_BE(x)
-#   define GUINT_TO_LE(x)   GUINT32_SWAP_LE_BE(x)
-#   define GUINT32_TO_BE(x) (x)
-#   define GUINT16_FROM_BE(x) (x)
-#   define GUINT32_FROM_BE(x) (x)
 #   define GUINT64_FROM_BE(x) (x)
-#   define GINT16_FROM_BE(x) (x)
-#   define GINT32_FROM_BE(x) (x)
-#   define GINT64_FROM_BE(x) (x)
+#   define GUINT32_FROM_BE(x) (x)
+#   define GUINT16_FROM_BE(x) (x)
+#   define GUINT_FROM_BE(x)   (x)
+#   define GUINT64_FROM_LE(x) GUINT64_SWAP_LE_BE(x)
+#   define GUINT32_FROM_LE(x) GUINT32_SWAP_LE_BE(x)
+#   define GUINT16_FROM_LE(x) GUINT16_SWAP_LE_BE(x)
+#   define GUINT_FROM_LE(x)   GUINT32_SWAP_LE_BE(x)
+#   define GUINT64_TO_BE(x)   (x)
+#   define GUINT32_TO_BE(x)   (x)
+#   define GUINT16_TO_BE(x)   (x)
+#   define GUINT_TO_BE(x)     (x)
+#   define GUINT64_TO_LE(x)   GUINT64_SWAP_LE_BE(x)
+#   define GUINT32_TO_LE(x)   GUINT32_SWAP_LE_BE(x)
+#   define GUINT16_TO_LE(x)   GUINT16_SWAP_LE_BE(x)
+#   define GUINT_TO_LE(x)     GUINT32_SWAP_LE_BE(x)
 #endif
 
+#define GINT64_FROM_BE(x)   (GUINT64_TO_BE (x))
+#define GINT32_FROM_BE(x)   (GUINT32_TO_BE (x))
+#define GINT16_FROM_BE(x)   (GUINT16_TO_BE (x))
 #define GINT64_FROM_LE(x)   (GUINT64_TO_LE (x))
 #define GINT32_FROM_LE(x)   (GUINT32_TO_LE (x))
 #define GINT16_FROM_LE(x)   (GUINT16_TO_LE (x))
 
-#define GUINT32_FROM_LE(x)  (GUINT32_TO_LE (x))
-#define GUINT64_FROM_LE(x)  (GUINT64_TO_LE (x))
-#define GUINT16_FROM_LE(x)  (GUINT16_TO_LE (x))
-#define GUINT_FROM_LE(x)    (GUINT_TO_LE (x))
-
 #define _EGLIB_MAJOR  2
 #define _EGLIB_MIDDLE 4
 #define _EGLIB_MINOR  0
diff --git a/eglib/src/glist.c b/eglib/src/glist.c
index 0e5eb3a..882fda4 100644
--- a/eglib/src/glist.c
+++ b/eglib/src/glist.c
@@ -126,6 +126,25 @@ g_list_remove (GList *list, gconstpointer data)
 }
 
 GList*
+g_list_remove_all (GList *list, gconstpointer data)
+{
+	GList *current = g_list_find (list, data);
+
+	if (!current)
+		return list;
+
+	while (current) {
+		if (current == list)
+			list = list->next;
+		g_list_free_1 (disconnect_node (current));
+
+		current = g_list_find (list, data);
+	}
+
+	return list;
+}
+
+GList*
 g_list_remove_link (GList *list, GList *link)
 {
 	if (list == link)
diff --git a/eglib/src/goutput.c b/eglib/src/goutput.c
index 642a97e..4b03a19 100644
--- a/eglib/src/goutput.c
+++ b/eglib/src/goutput.c
@@ -5,6 +5,8 @@
  *   Miguel de Icaza (miguel at novell.com)
  *
  * (C) 2006 Novell, Inc.
+ * Copyright 2011 Xamarin Inc.
+ *
  * Permission is hereby granted, free of charge, to any person obtaining
  * a copy of this software and associated documentation files (the
  * "Software"), to deal in the Software without restriction, including
@@ -117,7 +119,9 @@ g_logv (const gchar *log_domain, GLogLevelFlags log_level, const gchar *format,
 #else
 	char *msg;
 	
-	vasprintf (&msg, format, args);
+	if (vasprintf (&msg, format, args) < 0)
+		return;
+	
 	printf ("%s%s%s\n",
 		log_domain != NULL ? log_domain : "",
 		log_domain != NULL ? ": " : "",
@@ -126,7 +130,6 @@ g_logv (const gchar *log_domain, GLogLevelFlags log_level, const gchar *format,
 	if (log_level & fatal){
 		fflush (stdout);
 		fflush (stderr);
-		abort ();
 	}
 #endif
 	if (log_level & fatal){
diff --git a/eglib/src/gpath.c b/eglib/src/gpath.c
index ec1f996..4ae2f8f 100644
--- a/eglib/src/gpath.c
+++ b/eglib/src/gpath.c
@@ -41,46 +41,51 @@
 gchar *
 g_build_path (const gchar *separator, const gchar *first_element, ...)
 {
-	GString *result;
-	const char *s, *p, *next;
-	size_t slen;
+	const char *elem, *next, *endptr;
+	gboolean trimmed;
+	GString *path;
 	va_list args;
+	size_t slen;
 	
 	g_return_val_if_fail (separator != NULL, NULL);
-
-	if (first_element == NULL)
-		return g_strdup ("");
-
-	result = g_string_sized_new (48);
-
+	
+	path = g_string_sized_new (48);
 	slen = strlen (separator);
 	
 	va_start (args, first_element);
-	for (s = first_element; s != NULL; s = next){
-		next = va_arg (args, char *);
-		p = (s + strlen (s));
-
-		if (next && p - slen > s){
-			for (; strncmp (p-slen, separator, slen) == 0; ){
-				p -= slen;
-			}
+	for (elem = first_element; elem != NULL; elem = next) {
+		/* trim any trailing separators from @elem */
+		endptr = elem + strlen (elem);
+		trimmed = FALSE;
+		
+		while (endptr >= elem + slen) {
+			if (strncmp (endptr - slen, separator, slen) != 0)
+				break;
+			
+			endptr -= slen;
+			trimmed = TRUE;
 		}
-		g_string_append_len (result, s, p - s);
-
-		if (next && *next){
-			int reslen = strlen (result->str);
+		
+		/* append elem, not including any trailing separators */
+		if (endptr > elem)
+			g_string_append_len (path, elem, endptr - elem);
+		
+		/* get the next element */
+		do {
+			if (!(next = va_arg (args, char *)))
+				break;
 			
-			if (reslen >= slen && strncmp (separator, result->str + reslen - slen, slen))
-				g_string_append (result, separator);
-
-			for (; strncmp (next, separator, slen) == 0; )
+			/* remove leading separators */
+			while (!strncmp (next, separator, slen))
 				next += slen;
-		}
+		} while (*next == '\0');
+		
+		if (next || trimmed)
+			g_string_append_len (path, separator, slen);
 	}
-	g_string_append_c (result, 0);
 	va_end (args);
-
-	return g_string_free (result, FALSE);
+	
+	return g_string_free (path, FALSE);
 }
 
 gchar *
@@ -196,7 +201,7 @@ g_find_program_in_path (const gchar *program)
 	char *p = g_strdup (g_getenv ("PATH"));
 	char *x = p, *l;
 	gchar *curdir = NULL;
-	char *save;
+	char *save = NULL;
 #ifdef G_OS_WIN32
 	char *program_exe;
 	char *suffix_list[5] = {".exe",".cmd",".bat",".com",NULL};
diff --git a/eglib/src/gptrarray.c b/eglib/src/gptrarray.c
index bfde715..172ab69 100644
--- a/eglib/src/gptrarray.c
+++ b/eglib/src/gptrarray.c
@@ -3,8 +3,10 @@
  *
  * Author:
  *   Aaron Bockover (abockover at novell.com)
+ *   Gonzalo Paniagua Javier (gonzalo at novell.com)
+ *   Jeffrey Stedfast (fejj at novell.com)
  *
- * (C) 2006 Novell, Inc.
+ * (C) 2006,2011 Novell, Inc.
  *
  * Permission is hereby granted, free of charge, to any person obtaining
  * a copy of this software and associated documentation files (the
@@ -57,7 +59,7 @@ g_ptr_array_grow(GPtrArrayPriv *array, guint length)
 }
 
 GPtrArray *
-g_ptr_array_new()
+g_ptr_array_new(void)
 {
 	return g_ptr_array_sized_new(0);
 }
@@ -209,17 +211,17 @@ g_ptr_array_foreach(GPtrArray *array, GFunc func, gpointer user_data)
 }
 
 void
-g_ptr_array_sort(GPtrArray *array, GCompareFunc compare_func)
+g_ptr_array_sort(GPtrArray *array, GCompareFunc compare)
 {
 	g_return_if_fail(array != NULL);
-	qsort(array->pdata, array->len, sizeof(gpointer), compare_func);
+	qsort(array->pdata, array->len, sizeof(gpointer), compare);
 }
 
 void
-g_ptr_array_sort_with_data(GPtrArray *array, GCompareDataFunc compare_func, 
-	gpointer user_data)
+g_ptr_array_sort_with_data (GPtrArray *array, GCompareDataFunc compare, gpointer user_data)
 {
+	g_return_if_fail (array != NULL);
+	
+	g_qsort_with_data (array->pdata, array->len, sizeof (gpointer), compare, user_data);
 }
 
-
-
diff --git a/eglib/src/gqsort.c b/eglib/src/gqsort.c
new file mode 100644
index 0000000..59bd453
--- /dev/null
+++ b/eglib/src/gqsort.c
@@ -0,0 +1,165 @@
+/*
+ * QuickSort
+ *
+ * Author: Jeffrey Stedfast <fejj at novell.com>
+ *
+ * (C) 2011 Novell, Inc.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining
+ * a copy of this software and associated documentation files (the
+ * "Software"), to deal in the Software without restriction, including
+ * without limitation the rights to use, copy, modify, merge, publish,
+ * distribute, sublicense, and/or sell copies of the Software, and to
+ * permit persons to whom the Software is furnished to do so, subject to
+ * the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be
+ * included in all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+ * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+ * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+ * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ */
+ 
+#include <stdlib.h>
+#include <glib.h>
+
+/* Any segment <= this threshold will be sorted using insertion
+ * sort. OpenBSD seems to use a value of 7 so we'll go with that for
+ * now... */
+#define MAX_THRESHOLD 7
+
+#define STACK_SIZE (8 * sizeof (size_t))
+
+typedef struct _QSortStack {
+	char *array;
+	size_t count;
+} QSortStack;
+
+#define QSORT_PUSH(sp, a, c) (sp->array = a, sp->count = c, sp++)
+#define QSORT_POP(sp, a, c) (sp--, a = sp->array, c = sp->count)
+
+#define SWAPTYPE(TYPE, a, b) {              \
+	long __n = size / sizeof (TYPE);    \
+	register TYPE *__a = (TYPE *) (a);  \
+	register TYPE *__b = (TYPE *) (b);  \
+	register TYPE t;                    \
+	                                    \
+	do {                                \
+		t = *__a;                   \
+		*__a++ = *__b;              \
+		*__b++ = t;                 \
+	} while (--__n > 0);                \
+}
+
+#define SWAPBYTE(a, b) SWAPTYPE(char, (a), (b))
+#define SWAPLONG(a, b) SWAPTYPE(long, (a), (b))
+#define SWAP(a, b) if (swaplong) SWAPLONG((a), (b)) else SWAPBYTE((a), (b))
+
+/* check if we can swap by longs rather than bytes by making sure that
+ * memory is properly aligned and that the element size is a multiple
+ * of sizeof (long) */
+#define SWAP_INIT() swaplong = (((char *) base) - ((char *) 0)) % sizeof (long) == 0 && (size % sizeof (long)) == 0
+
+void
+g_qsort_with_data (gpointer base, size_t nmemb, size_t size, GCompareDataFunc compare, gpointer user_data)
+{
+	QSortStack stack[STACK_SIZE], *sp;
+	register char *i, *k, *mid;
+	size_t n, n1, n2;
+	char *lo, *hi;
+	int swaplong;
+	
+	if (nmemb <= 1)
+		return;
+	
+	SWAP_INIT ();
+	
+	/* initialize our stack */
+	sp = stack;
+	QSORT_PUSH (sp, base, nmemb);
+	
+	do {
+		QSORT_POP (sp, lo, n);
+		
+		hi = lo + (n - 1) * size;
+		
+		if (n < MAX_THRESHOLD) {
+			/* switch to insertion sort */
+			for (i = lo + size; i <= hi; i += size)
+				for (k = i; k > lo && compare (k - size, k, user_data) > 0; k -= size)
+					SWAP (k - size, k);
+			
+			continue;
+		}
+		
+		/* calculate the middle element */
+		mid = lo + (n / 2) * size;
+		
+		/* once we re-order the lo, mid, and hi elements to be in
+		 * ascending order, we'll use mid as our pivot. */
+		if (compare (mid, lo, user_data) < 0) {
+			SWAP (mid, lo);
+		}
+		
+		if (compare (hi, mid, user_data) < 0) {
+			SWAP (mid, hi);
+			if (compare (mid, lo, user_data) < 0) {
+				SWAP (mid, lo);
+			}
+		}
+		
+		/* since we've already guaranteed that lo <= mid and mid <= hi,
+		 * we can skip comparing them again */
+		i = lo + size;
+		k = hi - size;
+		
+		do {
+			/* find the first element with a value > pivot value */
+			while (i < k && compare (i, mid, user_data) <= 0)
+				i += size;
+			
+			/* find the last element with a value <= pivot value */
+			while (k >= i && compare (mid, k, user_data) < 0)
+				k -= size;
+			
+			if (k <= i)
+				break;
+			
+			SWAP (i, k);
+			
+			/* make sure we keep track of our pivot element */
+			if (mid == i) {
+				mid = k;
+			} else if (mid == k) {
+				mid = i;
+			}
+			
+			i += size;
+			k -= size;
+		} while (1);
+		
+		if (k != mid) {
+			/* swap the pivot with the last element in the first partition */
+			SWAP (mid, k);
+		}
+		
+		/* calculate segment sizes */
+		n2 = (hi - k) / size;
+		n1 = (k - lo) / size;
+		
+		/* push our partitions onto the stack, largest first
+		 * (to make sure we don't run out of stack space) */
+		if (n2 > n1) {
+			if (n2 > 1) QSORT_PUSH (sp, k + size, n2);
+			if (n1 > 1) QSORT_PUSH (sp, lo, n1);
+		} else {
+			if (n1 > 1) QSORT_PUSH (sp, lo, n1);
+			if (n2 > 1) QSORT_PUSH (sp, k + size, n2);
+		}
+	} while (sp > stack);
+}
diff --git a/eglib/src/gspawn.c b/eglib/src/gspawn.c
index ad73bfb..4f4e5be 100644
--- a/eglib/src/gspawn.c
+++ b/eglib/src/gspawn.c
@@ -187,6 +187,28 @@ create_pipe (int *fds, GError **error)
 	return TRUE;
 }
 #endif /* G_OS_WIN32 */
+
+static int
+write_all (int fd, const void *vbuf, size_t n)
+{
+	const char *buf = (const char *) vbuf;
+	size_t nwritten = 0;
+	int w;
+	
+	do {
+		do {
+			w = write (fd, buf + nwritten, n - nwritten);
+		} while (w == -1 && errno == EINTR);
+		
+		if (w == -1)
+			return -1;
+		
+		nwritten += w;
+	} while (nwritten < n);
+	
+	return nwritten;
+}
+
 gboolean
 g_spawn_command_line_sync (const gchar *command_line,
 				gchar **standard_output,
@@ -360,12 +382,12 @@ g_spawn_async_with_pipes (const gchar *working_directory,
 
 			if ((flags & G_SPAWN_DO_NOT_REAP_CHILD) == 0) {
 				pid = getpid ();
-				NO_INTR (unused, write (info_pipe [1], &pid, sizeof (pid_t)));
+				NO_INTR (unused, write_all (info_pipe [1], &pid, sizeof (pid_t)));
 			}
 
 			if (working_directory && chdir (working_directory) == -1) {
 				int err = errno;
-				NO_INTR (unused, write (info_pipe [1], &err, sizeof (int)));
+				NO_INTR (unused, write_all (info_pipe [1], &err, sizeof (int)));
 				exit (0);
 			}
 
@@ -407,13 +429,13 @@ g_spawn_async_with_pipes (const gchar *working_directory,
 				arg0 = g_find_program_in_path (argv [0]);
 				if (arg0 == NULL) {
 					int err = ENOENT;
-					write (info_pipe [1], &err, sizeof (int));
+					write_all (info_pipe [1], &err, sizeof (int));
 					exit (0);
 				}
 			}
 
 			execve (arg0, actual_args, envp);
-			write (info_pipe [1], &errno, sizeof (int));
+			write_all (info_pipe [1], &errno, sizeof (int));
 			exit (0);
 		}
 	} else if ((flags & G_SPAWN_DO_NOT_REAP_CHILD) == 0) {
diff --git a/eglib/src/gstr.c b/eglib/src/gstr.c
index 015f798..fccf265 100644
--- a/eglib/src/gstr.c
+++ b/eglib/src/gstr.c
@@ -351,21 +351,18 @@ g_strsplit_set (const gchar *string, const gchar *delimiter, gint max_tokens)
 gchar *
 g_strreverse (gchar *str)
 {
-	size_t len, half;
-	size_t i;
+	size_t i, j;
 	gchar c;
 
 	if (str == NULL)
 		return NULL;
 
-	len = strlen (str);
-	half = len / 2;
-	len--;
-	for (i = 0; i < half; i++, len--) {
+	for (i = 0, j = strlen (str) - 1; i < j; i++, j--) {
 		c = str [i];
-		str [i] = str [len];
-		str [len] = c;
+		str [i] = str [j];
+		str [j] = c;
 	}
+
 	return str;
 }
 
@@ -373,13 +370,14 @@ gchar *
 g_strjoin (const gchar *separator, ...)
 {
 	va_list args;
-	char *res, *s;
+	char *res, *s, *r;
 	size_t len, slen;
 
 	if (separator != NULL)
 		slen = strlen (separator);
 	else
 		slen = 0;
+	
 	len = 0;
 	va_start (args, separator);
 	for (s = va_arg (args, char *); s != NULL; s = va_arg (args, char *)){
@@ -387,21 +385,22 @@ g_strjoin (const gchar *separator, ...)
 		len += slen;
 	}
 	va_end (args);
+
 	if (len == 0)
 		return g_strdup ("");
 	
 	/* Remove the last separator */
 	if (slen > 0 && len > 0)
 		len -= slen;
-	len++;
-	res = g_malloc (len);
+
+	res = g_malloc (len + 1);
 	va_start (args, separator);
 	s = va_arg (args, char *);
-	strcpy (res, s);
+	r = g_stpcpy (res, s);
 	for (s = va_arg (args, char *); s != NULL; s = va_arg (args, char *)){
 		if (separator != NULL)
-			strcat (res, separator);
-		strcat (res, s);
+			r = g_stpcpy (r, separator);
+		r = g_stpcpy (r, s);
 	}
 	va_end (args);
 
@@ -411,7 +410,7 @@ g_strjoin (const gchar *separator, ...)
 gchar *
 g_strjoinv (const gchar *separator, gchar **str_array)
 {
-	char *res;
+	char *res, *r;
 	size_t slen, len, i;
 	
 	if (separator != NULL)
@@ -424,18 +423,21 @@ g_strjoinv (const gchar *separator, gchar **str_array)
 		len += strlen (str_array [i]);
 		len += slen;
 	}
+
 	if (len == 0)
 		return g_strdup ("");
+
 	if (slen > 0 && len > 0)
 		len -= slen;
-	len++;
-	res = g_malloc (len);
-	strcpy (res, str_array [0]);
+
+	res = g_malloc (len + 1);
+	r = g_stpcpy (res, str_array [0]);
 	for (i = 1; str_array [i] != NULL; i++){
 		if (separator != NULL)
-			strcat (res, separator);
-		strcat (res, str_array [i]);
+			r = g_stpcpy (r, separator);
+		r = g_stpcpy (r, str_array [i]);
 	}
+
 	return res;
 }
 
@@ -701,6 +703,31 @@ g_ascii_strdown (const gchar *str, gssize len)
 	return ret;
 }
 
+gchar
+g_ascii_toupper (gchar c)
+{
+	return c >= 'a' && c <= 'z' ? c + ('A' - 'a') : c;
+}
+
+gchar *
+g_ascii_strup (const gchar *str, gssize len)
+{
+	char *ret;
+	int i;
+	
+	g_return_val_if_fail  (str != NULL, NULL);
+
+	if (len == -1)
+		len = strlen (str);
+	
+	ret = g_malloc (len + 1);
+	for (i = 0; i < len; i++)
+		ret [i] = (guchar) g_ascii_toupper (str [i]);
+	ret [i] = 0;
+	
+	return ret;
+}
+
 gint
 g_ascii_strncasecmp (const gchar *s1, const gchar *s2, gsize n)
 {
@@ -709,22 +736,37 @@ g_ascii_strncasecmp (const gchar *s1, const gchar *s2, gsize n)
 	g_return_val_if_fail (s1 != NULL, 0);
 	g_return_val_if_fail (s2 != NULL, 0);
 
-	for (i = 0; i < n; i++){
+	for (i = 0; i < n; i++) {
 		gchar c1 = g_ascii_tolower (*s1++);
 		gchar c2 = g_ascii_tolower (*s2++);
 		
-		if (c1 == c2)
-			continue;
-		
-		if (c1 == 0)
-			return -1;
-		if (c2 == 0)
-			return 1;
-		return c1-c2;
+		if (c1 != c2)
+			return c1 - c2;
 	}
+	
 	return 0;
 }
 
+gint
+g_ascii_strcasecmp (const gchar *s1, const gchar *s2)
+{
+	const char *sp1 = s1;
+	const char *sp2 = s2;
+	
+	g_return_val_if_fail (s1 != NULL, 0);
+	g_return_val_if_fail (s2 != NULL, 0);
+	
+	while (*sp1 != '\0') {
+		char c1 = g_ascii_tolower (*sp1++);
+		char c2 = g_ascii_tolower (*sp2++);
+		
+		if (c1 != c2)
+			return c1 - c2;
+	}
+	
+	return (*sp1) - (*sp2);
+}
+
 gchar *
 g_strdelimit (gchar *string, const gchar *delimiters, gchar new_delimiter)
 {
@@ -778,6 +820,24 @@ g_strlcpy (gchar *dest, const gchar *src, gsize dest_size)
 #endif
 }
 
+gchar *
+g_stpcpy (gchar *dest, const char *src)
+{
+	g_return_val_if_fail (dest != NULL, dest);
+	g_return_val_if_fail (src != NULL, dest);
+
+#if HAVE_STPCPY
+	return stpcpy (dest, src);
+#else
+	while (*src)
+		*dest++ = *src++;
+	
+	*dest = '\0';
+	
+	return dest;
+#endif
+}
+
 static const gchar escaped_dflt [256] = {
 	1, 1, 1, 1, 1, 1, 1, 1, 'b', 't', 'n', 1, 'f', 'r', 1, 1,
 	1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
diff --git a/eglib/src/gstring.c b/eglib/src/gstring.c
index cc2975d..9df5d73 100644
--- a/eglib/src/gstring.c
+++ b/eglib/src/gstring.c
@@ -133,6 +133,20 @@ g_string_append_c (GString *string, gchar c)
 }
 
 GString *
+g_string_append_unichar (GString *string, gunichar c)
+{
+	gchar utf8[6];
+	gint len;
+	
+	g_return_val_if_fail (string != NULL, NULL);
+	
+	if ((len = g_unichar_to_utf8 (c, utf8)) <= 0)
+		return string;
+	
+	return g_string_append_len (string, utf8, len);
+}
+
+GString *
 g_string_prepend (GString *string, const gchar *val)
 {
 	gssize len;
@@ -149,6 +163,24 @@ g_string_prepend (GString *string, const gchar *val)
 	return string;
 }
 
+GString *
+g_string_insert (GString *string, gssize pos, const gchar *val)
+{
+	gssize len;
+	
+	g_return_val_if_fail (string != NULL, string);
+	g_return_val_if_fail (val != NULL, string);
+	g_return_val_if_fail (pos <= string->len, string);
+
+	len = strlen (val);
+	
+	GROW_IF_NECESSARY(string, len);	
+	memmove(string->str + pos + len, string->str + pos, string->len - pos - len + 1);
+	memcpy(string->str + pos, val, len);
+
+	return string;
+}
+
 void
 g_string_append_printf (GString *string, const gchar *format, ...)
 {
@@ -167,6 +199,19 @@ g_string_append_printf (GString *string, const gchar *format, ...)
 }
 
 void
+g_string_append_vprintf (GString *string, const gchar *format, va_list args)
+{
+	char *ret;
+
+	g_return_if_fail (string != NULL);
+	g_return_if_fail (format != NULL);
+
+	ret = g_strdup_vprintf (format, args);
+	g_string_append (string, ret);
+	g_free (ret);
+}
+
+void
 g_string_printf (GString *string, const gchar *format, ...)
 {
 	va_list args;
@@ -199,3 +244,34 @@ g_string_truncate (GString *string, gsize len)
 	return string;
 }
 
+GString *
+g_string_set_size (GString *string, gsize len)
+{
+	g_return_val_if_fail (string != NULL, string);
+
+	GROW_IF_NECESSARY(string, len);
+	
+	string->len = len;
+	string->str[len] = 0;
+	return string;
+}
+
+GString *
+g_string_erase (GString *string, gssize pos, gssize len)
+{
+	g_return_val_if_fail (string != NULL, string);
+
+	/* Silent return */
+	if (pos >= string->len)
+		return string;
+
+	if (len == -1 || (pos + len) >= string->len) {
+		string->str[pos] = 0;
+	}
+	else {
+		memmove (string->str + pos, string->str + pos + len, string->len - (pos + len) + 1);
+		string->len -= len;
+	}
+
+	return string;
+}
diff --git a/eglib/src/gunicode.c b/eglib/src/gunicode.c
index 442ef42..dd639eb 100644
--- a/eglib/src/gunicode.c
+++ b/eglib/src/gunicode.c
@@ -43,16 +43,10 @@
 /* FIXME */
 #  define CODESET 1
 #  include <windows.h>
-#  ifdef _MSC_VER
-       typedef int iconv_t;
-#  endif
 #else
 #    ifdef HAVE_LANGINFO_H
 #       include <langinfo.h>
 #    endif
-#    ifdef HAVE_ICONV_H
-#       include <iconv.h>
-#    endif
 #    ifdef HAVE_LOCALCHARSET_H
 #       include <localcharset.h>
 #    endif
@@ -64,36 +58,11 @@ static gboolean is_utf8;
 /*
  * Character set conversion
  */
-/*
-* Index into the table below with the first byte of a UTF-8 sequence to
-* get the number of trailing bytes that are supposed to follow it.
-* Note that *legal* UTF-8 values can't have 4 or 5-bytes. The table is
-* left as-is for anyone who may want to do such conversion, which was
-* allowed in earlier algorithms.
-*/
-const gchar g_trailingBytesForUTF8 [256] = {
-	0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-	0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-	0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-	0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-	0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-	0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-	1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
-	2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, 3,3,3,3,3,3,3,3,4,4,4,4,5,5,0,0
-};
-
-/*
-* Magic values subtracted from a buffer value during UTF8 conversion.
-* This table contains as many values as there might be trailing bytes
-* in a UTF-8 sequence.
-*/
-static const gulong offsetsFromUTF8[6] = { 0x00000000UL, 0x00003080UL, 0x000E2080UL,
-0x03C82080UL, 0xFA082080UL, 0x82082080UL };
 
 GUnicodeType 
 g_unichar_type (gunichar c)
 {
-int i;
+	int i;
 
 	guint16 cp = (guint16) c;
 	for (i = 0; i < unicode_category_ranges_count; i++) {
@@ -130,6 +99,13 @@ int i;
 	return 0;
 }
 
+GUnicodeBreakType
+g_unichar_break_type (gunichar c)
+{
+	// MOONLIGHT_FIXME
+	return G_UNICODE_BREAK_UNKNOWN;
+}
+
 gunichar
 g_unichar_case (gunichar c, gboolean upper)
 {
@@ -203,84 +179,19 @@ g_unichar_xdigit_value (gunichar c)
 	return -1;
 }
 
-gchar *
-g_convert (const gchar *str, gssize len,
-	   const gchar *to_codeset, const gchar *from_codeset,
-	   gsize *bytes_read, gsize *bytes_written, GError **error)
+gboolean
+g_unichar_isspace (gunichar c)
 {
-	char *result = NULL;
-#ifdef G_OS_WIN32
-#elif HAVE_ICONV_H
-	iconv_t convertor;
-	char *buffer, *output;
-	const char *strptr = (const char *) str;
-	size_t str_len = len == -1 ? strlen (str) : len;
-	size_t buffer_size;
-	size_t left, out_left;
-	
-	convertor = iconv_open (to_codeset, from_codeset);
-	if (convertor == (iconv_t) -1){
-		if (bytes_written)
-			*bytes_written = 0;
-		if (bytes_read)
-			*bytes_read = 0;
-		return NULL;
-	}
+	GUnicodeType type = g_unichar_type (c);
+	if (type == G_UNICODE_LINE_SEPARATOR ||
+	    type == G_UNICODE_PARAGRAPH_SEPARATOR ||
+	    type == G_UNICODE_SPACE_SEPARATOR)
+		return TRUE;
 
-	buffer_size = str_len + 1 + 8;
-	buffer = g_malloc (buffer_size);
-	out_left = str_len;
-	output = buffer;
-	left = str_len;
-	while (left > 0){
-		int res = iconv (convertor, (char **) &strptr, &left, &output, &out_left);
-		if (res == (size_t) -1){
-			if (errno == E2BIG){
-				char *n;
-				size_t extra_space = 8 + left;
-				size_t output_used = output - buffer;
-				
-				buffer_size += extra_space;
-				
-				n = g_realloc (buffer, buffer_size);
-				
-				if (n == NULL){
-					if (error != NULL)
-						*error = g_error_new (NULL, G_CONVERT_ERROR_FAILED, "No memory left");
-					g_free (buffer);
-					result = NULL;
-					goto leave;
-				}
-				buffer = n;
-				out_left += extra_space;
-				output = buffer + output_used;
-			} else if (errno == EILSEQ){
-				if (error != NULL)
-					*error = g_error_new (NULL, G_CONVERT_ERROR_ILLEGAL_SEQUENCE, "Invalid multi-byte sequence on input");
-				result = NULL;
-				g_free (buffer);
-				goto leave;
-			} else if (errno == EINVAL){
-				if (error != NULL)
-					*error = g_error_new (NULL, G_CONVERT_ERROR_PARTIAL_INPUT, "Partial character sequence");
-				result = NULL;
-				g_free (buffer);
-				goto leave;
-			}
-		} 
-	}
-	if (bytes_read != NULL)
-		*bytes_read = strptr - str;
-	if (bytes_written != NULL)
-		*bytes_written = output - buffer;
-	*output = 0;
-	result = buffer;
- leave:
-	iconv_close (convertor);
-#endif
-	return result;
+	return FALSE;
 }
 
+
 /*
  * This is broken, and assumes an UTF8 system, but will do for eglib's first user
  */
@@ -340,119 +251,3 @@ g_locale_from_utf8 (const gchar *utf8string, gssize len, gsize *bytes_read, gsiz
 
 	return g_convert (utf8string, len, my_charset, "UTF-8", bytes_read, bytes_written, error);
 }
-/**
- * g_utf8_validate
- * @utf: Pointer to putative UTF-8 encoded string.
- *
- * Checks @utf for being valid UTF-8. @utf is assumed to be
- * null-terminated. This function is not super-strict, as it will
- * allow longer UTF-8 sequences than necessary. Note that Java is
- * capable of producing these sequences if provoked. Also note, this
- * routine checks for the 4-byte maximum size, but does not check for
- * 0x10ffff maximum value.
- *
- * Return value: true if @utf is valid.
- **/
-gboolean
-g_utf8_validate (const gchar *str, gssize max_len, const gchar **end)
-{
-	gssize byteCount = 0;
-	gboolean retVal = TRUE;
-	gboolean lastRet = TRUE;
-	guchar* ptr = (guchar*) str;
-	guint length;
-	guchar a;
-	guchar* srcPtr;
-	if (max_len == 0)
-		return 0;
-	else if (max_len < 0)
-		byteCount = max_len;
-	while (*ptr != 0 && byteCount <= max_len) {
-		length = g_trailingBytesForUTF8 [*ptr] + 1;
-		srcPtr = (guchar*) ptr + length;
-		switch (length) {
-		default: retVal = FALSE;
-		/* Everything else falls through when "TRUE"... */
-		case 4: if ((a = (*--srcPtr)) < (guchar) 0x80 || a > (guchar) 0xBF) retVal = FALSE;
-				if ((a == (guchar) 0xBF || a == (guchar) 0xBE) && *(srcPtr-1) == (guchar) 0xBF) {
-				if (*(srcPtr-2) == (guchar) 0x8F || *(srcPtr-2) == (guchar) 0x9F ||
-					*(srcPtr-2) == (guchar) 0xAF || *(srcPtr-2) == (guchar) 0xBF)
-					retVal = FALSE;
-				}
-		case 3: if ((a = (*--srcPtr)) < (guchar) 0x80 || a > (guchar) 0xBF) retVal = FALSE;
-		case 2: if ((a = (*--srcPtr)) < (guchar) 0x80 || a > (guchar) 0xBF) retVal = FALSE;
-
-		switch (*ptr) {
-		/* no fall-through in this inner switch */
-		case 0xE0: if (a < (guchar) 0xA0) retVal = FALSE; break;
-		case 0xED: if (a > (guchar) 0x9F) retVal = FALSE; break;
-		case 0xEF: if (a == (guchar)0xB7 && (*(srcPtr+1) > (guchar) 0x8F && *(srcPtr+1) < 0xB0)) retVal = FALSE;
-				   if (a == (guchar)0xBF && (*(srcPtr+1) == (guchar) 0xBE || *(srcPtr+1) == 0xBF)) retVal = FALSE; break;
-		case 0xF0: if (a < (guchar) 0x90) retVal = FALSE; break;
-		case 0xF4: if (a > (guchar) 0x8F) retVal = FALSE; break;
-		default:   if (a < (guchar) 0x80) retVal = FALSE;
-		}
-
-		case 1: if (*ptr >= (guchar ) 0x80 && *ptr < (guchar) 0xC2) retVal = FALSE;
-		}
-		if (*ptr > (guchar) 0xF4)
-			retVal = FALSE;
-		//If the string is invalid, set the end to the invalid byte.
-		if (!retVal && lastRet) {
-			if (end != NULL)
-				*end = (gchar*) ptr;
-			lastRet = FALSE;
-		}
-		ptr += length;
-		if(max_len > 0)
-			byteCount += length;
-	}
-	if (retVal && end != NULL)
-		*end = (gchar*) ptr;
-	return retVal;
-}
-/**
- * g_utf8_get_char
- * @src: Pointer to UTF-8 encoded character.
- *
- * Return value: UTF-16 value of @src
- **/
-gunichar
-g_utf8_get_char (const gchar *src)
-{
-	gunichar ch = 0;
-	guchar* ptr = (guchar*) src;
-	gushort extraBytesToRead = g_trailingBytesForUTF8 [*ptr];
-
-	switch (extraBytesToRead) {
-	case 5: ch += *ptr++; ch <<= 6; // remember, illegal UTF-8
-	case 4: ch += *ptr++; ch <<= 6; // remember, illegal UTF-8
-	case 3: ch += *ptr++; ch <<= 6;
-	case 2: ch += *ptr++; ch <<= 6;
-	case 1: ch += *ptr++; ch <<= 6;
-	case 0: ch += *ptr;
-	}
-	ch -= offsetsFromUTF8 [extraBytesToRead];
-	return ch;
-}
-glong
-g_utf8_strlen (const gchar *str, gssize max)
-{
-	gssize byteCount = 0;
-	guchar* ptr = (guchar*) str;
-	glong length = 0;
-	if (max == 0)
-		return 0;
-	else if (max < 0)
-		byteCount = max;
-	while (*ptr != 0 && byteCount <= max) {
-		gssize cLen = g_trailingBytesForUTF8 [*ptr] + 1;
-		if (max > 0 && (byteCount + cLen) > max)
-			return length;
-		ptr += cLen;
-		length++;
-		if (max > 0)
-			byteCount += cLen;
-	}
-	return length;
-}
diff --git a/eglib/src/gutf8.c b/eglib/src/gutf8.c
index fed6dd7..c4c9b91 100644
--- a/eglib/src/gutf8.c
+++ b/eglib/src/gutf8.c
@@ -5,615 +5,369 @@
  *   Atsushi Enomoto  <atsushi at ximian.com>
  *
  * (C) 2006 Novell, Inc.
+ * Copyright 2012 Xamarin Inc
  */
 
 #include <stdio.h>
 #include <glib.h>
 
-gpointer error_quark = "ERROR";
-
-static glong utf8_to_utf16_len (const gchar *str, glong len, glong *items_read, GError **error);
-static glong utf16_to_utf8_len (const gunichar2 *str, glong len, glong *items_read, GError **error);
-
-gpointer
-g_convert_error_quark ()
-{
-	return error_quark;
-}
-
-static gunichar*
+/*
+ * Index into the table below with the first byte of a UTF-8 sequence to get
+ * the number of bytes that are supposed to follow it to complete the sequence.
+ *
+ * Note that *legal* UTF-8 values can't have 4 or 5-bytes. The table is left
+ * as-is for anyone who may want to do such conversion, which was allowed in
+ * earlier algorithms.
+*/
+const guchar g_utf8_jump_table[256] = {
+	1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+	1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+	1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+	1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+	1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+	1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+	2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,
+	3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3, 4,4,4,4,4,4,4,4,5,5,5,5,6,6,1,1
+};
+
+static gchar *
 utf8_case_conv (const gchar *str, gssize len, gboolean upper)
 {
-	glong i, u16len, u32len;
-	gunichar2 *u16str;
-	gunichar *u32str;
-	gchar *u8str;
-	GError **err = NULL;
-
-	u16str = g_utf8_to_utf16 (str, (glong)len, NULL, &u16len, err);
-	u32str = g_utf16_to_ucs4 (u16str, u16len, NULL, &u32len, err);
-	for (i = 0; i < u32len; i++) {
-		u32str [i] = upper ? g_unichar_toupper (u32str [i]) : g_unichar_tolower (u32str [i]);
-	}
-	g_free (u16str);
-	u16str = g_ucs4_to_utf16 (u32str, u32len, NULL, &u16len, err);
-	u8str = g_utf16_to_utf8 (u16str, u16len, NULL, NULL, err);
-	g_free (u32str);
-	g_free (u16str);
-	return (gunichar*)u8str;
+	gunichar *ustr;
+	glong i, ulen;
+	gchar *utf8;
+	
+	ustr = g_utf8_to_ucs4_fast (str, (glong) len, &ulen);
+	for (i = 0; i < ulen; i++)
+		ustr[i] = upper ? g_unichar_toupper (ustr[i]) : g_unichar_tolower (ustr[i]);
+	utf8 = g_ucs4_to_utf8 (ustr, ulen, NULL, NULL, NULL);
+	g_free (ustr);
+	
+	return utf8;
 }
 
-gchar*
+gchar *
 g_utf8_strup (const gchar *str, gssize len)
 {
-	return (gchar*)utf8_case_conv (str, len, TRUE);
+	return utf8_case_conv (str, len, TRUE);
 }
 
-gchar*
+gchar *
 g_utf8_strdown (const gchar *str, gssize len)
 {
-	return (gchar*)utf8_case_conv (str, len, FALSE);
+	return utf8_case_conv (str, len, FALSE);
 }
 
-static glong
-utf8_to_utf16_len (const gchar *str, glong len, glong *items_read, GError **error)
+static gboolean
+utf8_validate (const unsigned char *inptr, size_t len)
 {
-	/* It is almost identical to UTF8Encoding.GetCharCount() */
-	guchar ch, mb_size, mb_remain;
-	gboolean overlong;
-	guint32 codepoint;
-	glong in_pos, ret;
-
-	if (len < 0)
-		len = (glong) strlen (str);
-
-	in_pos = 0;
-	ret = 0;
-
-	/* Common case */
-	for (in_pos = 0; in_pos < len && (guchar) str [in_pos] < 0x80; in_pos++)
-		ret ++;
-
-	if (in_pos == len) {
-		if (items_read)
-			*items_read = in_pos;
-		return ret;
-	}
-
-	mb_size = 0;
-	mb_remain = 0;
-	overlong = 0;
-
-	for (; in_pos < len; in_pos++) {
-		ch = str [in_pos];
-		if (mb_size == 0) {
-			if (ch < 0x80)
-				ret++;
-			else if ((ch & 0xE0) == 0xC0) {
-				codepoint = ch & 0x1F;
-				mb_size = 2;
-			} else if ((ch & 0xF0) == 0xE0) {
-				codepoint = ch & 0x0F;
-				mb_size = 3;
-			} else if ((ch & 0xF8) == 0xF0) {
-				codepoint = ch & 7;
-				mb_size = 4;
-			} else if ((ch & 0xFC) == 0xF8) {
-				codepoint = ch & 3;
-				mb_size = 5;
-			} else if ((ch & 0xFE) == 0xFC) {
-				codepoint = ch & 3;
-				mb_size = 6;
-			} else {
-				/* invalid utf-8 sequence */
-				if (error) {
-					g_set_error (error, G_CONVERT_ERROR, G_CONVERT_ERROR_ILLEGAL_SEQUENCE, "invalid utf-8 sequence at %d (illegal first byte)", in_pos);
-					if (items_read)
-						*items_read = in_pos;
-					return -1;
-				} else {
-					codepoint = 0;
-					mb_remain = mb_size = 0;
-				}
-			}
-			if (mb_size > 1)
-				mb_remain = mb_size - 1;
-		} else {
-			if ((ch & 0xC0) == 0x80) {
-				codepoint = (codepoint << 6) | (ch & 0x3F);
-				if (--mb_remain == 0) {
-					/* multi byte character is fully consumed now. */
-					if (codepoint < 0x10000) {
-						switch (mb_size) {
-						case 2:
-							overlong = codepoint < 0x7F;
-							break;
-						case 3:
-							overlong = codepoint < 0x7FF;
-							break;
-						case 4:
-							overlong = codepoint < 0xFFFF;
-							break;
-						case 5:
-							overlong = codepoint < 0x1FFFFF;
-							break;
-						case 6:
-							overlong = codepoint < 0x03FFFFFF;
-							break;
-						}
-						if (overlong) {
-							/* invalid utf-8 sequence (overlong) */
-							if (error) {
-								g_set_error (error, G_CONVERT_ERROR, G_CONVERT_ERROR_ILLEGAL_SEQUENCE, "invalid utf-8 sequence at %d (overlong)", in_pos);
-								if (items_read)
-									*items_read = in_pos;
-								return -1;
-							} else {
-								codepoint = 0;
-								mb_remain = 0;
-								overlong = FALSE;
-							}
-						}
-						else
-							ret++;
-					} else if (codepoint < 0x110000) {
-						/* surrogate pair */
-						ret += 2;
-					} else {
-						/* invalid utf-8 sequence (excess) */
-						if (error) {
-							g_set_error (error, G_CONVERT_ERROR, G_CONVERT_ERROR_ILLEGAL_SEQUENCE, "invalid utf-8 sequence at %d (codepoint range excess)", in_pos);
-							if (items_read)
-								*items_read = in_pos;
-							return -1;
-						} else {
-							codepoint = 0;
-							mb_remain = 0;
-						}
-					}
-					mb_size = 0;
-				}
-			} else {
-				/* invalid utf-8 sequence */
-				if (error) {
-					g_set_error (error, G_CONVERT_ERROR, G_CONVERT_ERROR_ILLEGAL_SEQUENCE, "invalid utf-8 sequence at %d (illegal following bytes)", in_pos);
-					if (items_read)
-						*items_read = in_pos;
-					return -1;
-				} else {
-					codepoint = 0;
-					mb_remain = mb_size = 0;
-				}
-			}
+	const unsigned char *ptr = inptr + len;
+	unsigned char c;
+	
+	/* Everything falls through when TRUE... */
+	switch (len) {
+	default:
+		return FALSE;
+	case 4:
+		if ((c = (*--ptr)) < 0x80 || c > 0xBF)
+			return FALSE;
+		
+		if ((c == 0xBF || c == 0xBE) && ptr[-1] == 0xBF) {
+			if (ptr[-2] == 0x8F || ptr[-2] == 0x9F ||
+			    ptr[-2] == 0xAF || ptr[-2] == 0xBF)
+				return FALSE;
 		}
-	}
-
-	if (items_read)
-		*items_read = in_pos;
-	return ret;
-}
-
-gunichar2*
-g_utf8_to_utf16 (const gchar *str, glong len, glong *items_read, glong *items_written, GError **error)
-{
-	/* The conversion logic is almost identical to UTF8Encoding.GetChars(),
-	   but error check is always done at utf8_to_utf16_len() so that
-	   the conversion core below simply resets erroreous bits */
-	glong utf16_len;
-	gunichar2 *ret;
-	guchar ch, mb_size, mb_remain;
-	guint32 codepoint;
-	glong in_pos, out_pos;
-
-	utf16_len = 0;
-	mb_size = 0;
-	mb_remain = 0;
-	in_pos = 0;
-	out_pos = 0;
-
-	if (error)
-		*error = NULL;
-
-	if (len < 0)
-		len = (glong) strlen (str);
-
-	if (items_read)
-		*items_read = 0;
-	if (items_written)
-		*items_written = 0;
-	utf16_len = utf8_to_utf16_len (str, len, items_read, error);
-	if (error)
-		if (*error)
-			return NULL;
-	if (utf16_len < 0)
-		return NULL;
-
-	ret = g_malloc ((1 + utf16_len) * sizeof (gunichar2));
-
-	/* Common case */
-	for (in_pos = 0; in_pos < len; in_pos++) {
-		ch = (guchar) str [in_pos];
-
-		if (ch >= 0x80)
+	case 3:
+		if ((c = (*--ptr)) < 0x80 || c > 0xBF)
+			return FALSE;
+	case 2:
+		if ((c = (*--ptr)) < 0x80 || c > 0xBF)
+			return FALSE;
+		
+		/* no fall-through in this inner switch */
+		switch (*inptr) {
+		case 0xE0: if (c < 0xA0) return FALSE; break;
+		case 0xED: if (c > 0x9F) return FALSE; break;
+		case 0xEF: if (c == 0xB7 && (ptr[1] > 0x8F && ptr[1] < 0xB0)) return FALSE;
+			if (c == 0xBF && (ptr[1] == 0xBE || ptr[1] == 0xBF)) return FALSE;
 			break;
-		ret [out_pos++] = ch;
-	}
-
-	for (; in_pos < len; in_pos++) {
-		ch = (guchar) str [in_pos];
-		if (mb_size == 0) {
-			if (ch < 0x80)
-				ret [out_pos++] = ch;
-			else if ((ch & 0xE0) == 0xC0) {
-				codepoint = ch & 0x1F;
-				mb_size = 2;
-			} else if ((ch & 0xF0) == 0xE0) {
-				codepoint = ch & 0x0F;
-				mb_size = 3;
-			} else if ((ch & 0xF8) == 0xF0) {
-				codepoint = ch & 7;
-				mb_size = 4;
-			} else if ((ch & 0xFC) == 0xF8) {
-				codepoint = ch & 3;
-				mb_size = 5;
-			} else if ((ch & 0xFE) == 0xFC) {
-				codepoint = ch & 3;
-				mb_size = 6;
-			} else {
-				/* invalid utf-8 sequence */
-				codepoint = 0;
-				mb_remain = mb_size = 0;
-			}
-			if (mb_size > 1)
-				mb_remain = mb_size - 1;
-		} else {
-			if ((ch & 0xC0) == 0x80) {
-				codepoint = (codepoint << 6) | (ch & 0x3F);
-				if (--mb_remain == 0) {
-					/* multi byte character is fully consumed now. */
-					if (codepoint < 0x10000) {
-						ret [out_pos++] = (gunichar2)(codepoint % 0x10000);
-					} else if (codepoint < 0x110000) {
-						/* surrogate pair */
-						codepoint -= 0x10000;
-						ret [out_pos++] = (gunichar2)((codepoint >> 10) + 0xD800);
-						ret [out_pos++] = (gunichar2)((codepoint & 0x3FF) + 0xDC00);
-					} else {
-						/* invalid utf-8 sequence (excess) */
-						codepoint = 0;
-						mb_remain = 0;
-					}
-					mb_size = 0;
-				}
-			} else {
-				/* invalid utf-8 sequence */
-				codepoint = 0;
-				mb_remain = mb_size = 0;
-			}
+		case 0xF0: if (c < 0x90) return FALSE; break;
+		case 0xF4: if (c > 0x8F) return FALSE; break;
+		default:   if (c < 0x80) return FALSE; break;
 		}
+	case 1: if (*inptr >= 0x80 && *inptr < 0xC2) return FALSE;
 	}
-
-	ret [out_pos] = 0;
-	if (items_written)
-		*items_written = out_pos;
-	return ret;
+	
+	if (*inptr > 0xF4)
+		return FALSE;
+	
+	return TRUE;
 }
 
-gchar*
-g_utf16_to_utf8 (const gunichar2 *str, glong len, glong *items_read, glong *items_written, GError **error)
+/**
+ * g_utf8_validate:
+ * @str: a utf-8 encoded string
+ * @max_len: max number of bytes to validate (or -1 to validate the entire null-terminated string)
+ * @end: output parameter to mark the end of the valid input
+ *
+ * Checks @utf for being valid UTF-8. @str is assumed to be
+ * null-terminated. This function is not super-strict, as it will
+ * allow longer UTF-8 sequences than necessary. Note that Java is
+ * capable of producing these sequences if provoked. Also note, this
+ * routine checks for the 4-byte maximum size, but does not check for
+ * 0x10ffff maximum value.
+ *
+ * Return value: %TRUE if @str is valid or %FALSE otherwise.
+ **/
+gboolean
+g_utf8_validate (const gchar *str, gssize max_len, const gchar **end)
 {
-	/* The conversion logic is almost identical to UTF8Encoding.GetBytes(),
-	   but error check is always done at utf16_to_utf8_len() so that
-	   the conversion core below simply resets erroreous bits */
-	glong utf8_len;
-	gchar *ret;
-	glong in_pos, out_pos;
-	gunichar2 ch;
-	guint32 codepoint = 0;
-	gboolean surrogate;
-
-	in_pos = 0;
-	out_pos = 0;
-	surrogate = FALSE;
-
-	if (items_read)
-		*items_read = 0;
-	if (items_written)
-		*items_written = 0;
-	utf8_len = utf16_to_utf8_len (str, len, items_read, error);
-	if (error)
-		if (*error)
-			return NULL;
-	if (utf8_len < 0)
-		return NULL;
-
-	ret = g_malloc ((1+utf8_len) * sizeof (gchar));
-
-	while (len < 0 ? str [in_pos] : in_pos < len) {
-		ch = str [in_pos];
-		if (surrogate) {
-			if (ch >= 0xDC00 && ch <= 0xDFFF) {
-				codepoint = 0x10000 + (ch - 0xDC00) + ((surrogate - 0xD800) << 10);
-				surrogate = 0;
-			} else {
-				surrogate = 0;
-				/* invalid surrogate pair */
-				++in_pos;
-				continue;
+	guchar *inptr = (guchar *) str;
+	gboolean valid = TRUE;
+	guint length, min;
+	gssize n = 0;
+	
+	if (max_len == 0)
+		return FALSE;
+	
+	if (max_len < 0) {
+		while (*inptr != 0) {
+			length = g_utf8_jump_table[*inptr];
+			if (!utf8_validate (inptr, length)) {
+				valid = FALSE;
+				break;
 			}
-		} else {
-			/* fast path optimization */
-			if (ch < 0x80) {
-				for (; len < 0 ? str [in_pos] : in_pos < len; in_pos++) {
-					if (str [in_pos] < 0x80)
-						ret [out_pos++] = (gchar)(str [in_pos]);
-					else
-						break;
-				}
-				continue;
+			
+			inptr += length;
+		}
+	} else {
+		while (n < max_len) {
+			if (*inptr == 0) {
+				/* Note: return FALSE if we encounter nul-byte
+				 * before max_len is reached. */
+				valid = FALSE;
+				break;
 			}
-			else if (ch >= 0xD800 && ch <= 0xDBFF)
-				surrogate = ch;
-			else if (ch >= 0xDC00 && ch <= 0xDFFF) {
-				++in_pos;
-				/* invalid surrogate pair */
-				continue;
+			
+			length = g_utf8_jump_table[*inptr];
+			min = MIN (length, max_len - n);
+			
+			if (!utf8_validate (inptr, min)) {
+				valid = FALSE;
+				break;
 			}
-			else
-				codepoint = ch;
-		}
-		in_pos++;
-
-		if (surrogate != 0)
-			continue;
-		if (codepoint < 0x80)
-			ret [out_pos++] = (gchar) codepoint;
-		else if (codepoint < 0x0800) {
-			ret [out_pos++] = (gchar) (0xC0 | (codepoint >> 6));
-			ret [out_pos++] = (gchar) (0x80 | (codepoint & 0x3F));
-		} else if (codepoint < 0x10000) {
-			ret [out_pos++] = (gchar) (0xE0 | (codepoint >> 12));
-			ret [out_pos++] = (gchar) (0x80 | ((codepoint >> 6) & 0x3F));
-			ret [out_pos++] = (gchar) (0x80 | (codepoint & 0x3F));
-		} else {
-			ret [out_pos++] = (gchar) (0xF0 | (codepoint >> 18));
-			ret [out_pos++] = (gchar) (0x80 | ((codepoint >> 12) & 0x3F));
-			ret [out_pos++] = (gchar) (0x80 | ((codepoint >> 6) & 0x3F));
-			ret [out_pos++] = (gchar) (0x80 | (codepoint & 0x3F));
+			
+			if (min < length) {
+				valid = FALSE;
+				break;
+			}
+			
+			inptr += length;
+			n += length;
 		}
 	}
-	ret [out_pos] = 0;
-
-	if (items_written)
-		*items_written = out_pos;
-	return ret;
+	
+	if (end != NULL)
+		*end = (gchar *) inptr;
+	
+	return valid;
 }
 
-static glong
-utf16_to_utf8_len (const gunichar2 *str, glong len, glong *items_read, GError **error)
+gunichar
+g_utf8_get_char_validated (const gchar *str, gssize max_len)
 {
-	glong ret, in_pos;
-	gunichar2 ch;
-	gboolean surrogate;
-
-	ret = 0;
-	in_pos = 0;
-	surrogate = FALSE;
-
-	while (len < 0 ? str [in_pos] : in_pos < len) {
-		ch = str [in_pos];
-		if (surrogate) {
-			if (ch >= 0xDC00 && ch <= 0xDFFF) {
-				ret += 4;
-			} else {
-				/* invalid surrogate pair */
-				if (error) {
-					g_set_error (error, G_CONVERT_ERROR, G_CONVERT_ERROR_ILLEGAL_SEQUENCE, "invalid utf-16 sequence at %d (missing surrogate tail)", in_pos);
-					if (items_read)
-						*items_read = in_pos;
-					return -1;
-				} /* otherwise just ignore. */
-			}
-			surrogate = FALSE;
-		} else {
-			/* fast path optimization */
-			if (ch < 0x80) {
-				for (; len < 0 ? str [in_pos] : in_pos < len; in_pos++) {
-					if (str [in_pos] < 0x80)
-						++ret;
-					else
-						break;
-				}
-				continue;
-			}
-			else if (ch < 0x0800)
-				ret += 2;
-			else if (ch >= 0xD800 && ch <= 0xDBFF)
-				surrogate = TRUE;
-			else if (ch >= 0xDC00 && ch <= 0xDFFF) {
-				/* invalid surrogate pair */
-				if (error) {
-					g_set_error (error, G_CONVERT_ERROR, G_CONVERT_ERROR_ILLEGAL_SEQUENCE, "invalid utf-16 sequence at %d (missing surrogate head)", in_pos);
-					if (items_read)
-						*items_read = in_pos;
-					return -1;
-				} /* otherwise just ignore. */
-			}
-			else
-				ret += 3;
-		}
-		in_pos++;
+	unsigned char *inptr = (unsigned char *) str;
+	gunichar u = *inptr;
+	int n, i;
+	
+	if (max_len == 0)
+		return -2;
+	
+	if (u < 0x80) {
+		/* simple ascii case */
+		return u;
+	} else if (u < 0xc2) {
+		return -1;
+	} else if (u < 0xe0) {
+		u &= 0x1f;
+		n = 2;
+	} else if (u < 0xf0) {
+		u &= 0x0f;
+		n = 3;
+	} else if (u < 0xf8) {
+		u &= 0x07;
+		n = 4;
+	} else if (u < 0xfc) {
+		u &= 0x03;
+		n = 5;
+	} else if (u < 0xfe) {
+		u &= 0x01;
+		n = 6;
+	} else {
+		return -1;
 	}
-
-	if (items_read)
-		*items_read = in_pos;
-	return ret;
+	
+	if (max_len > 0) {
+		if (!utf8_validate (inptr, MIN (max_len, n)))
+			return -1;
+		
+		if (max_len < n)
+			return -2;
+	} else {
+		if (!utf8_validate (inptr, n))
+			return -1;
+	}
+	
+	for (i = 1; i < n; i++)
+		u = (u << 6) | (*++inptr ^ 0x80);
+	
+	return u;
 }
 
-static glong
-g_ucs4_to_utf16_len (const gunichar *str, glong len, glong *items_read, GError **error)
+glong
+g_utf8_strlen (const gchar *str, gssize max_len)
 {
-	glong retlen = 0;
-	glong errindex = 0;
-	const gunichar *lstr = str;
-
-	if (!str)
+	const guchar *inptr = (const guchar *) str;
+	glong clen = 0, len = 0, n;
+	
+	if (max_len == 0)
 		return 0;
-
-	while (*lstr != '\0' && len--) {
-		gunichar ch;
-		ch = *lstr++;
-		if (ch <= 0x0000FFFF) { 
-			if (ch >= 0xD800 && ch <= 0xDFFF) {
-				errindex = (glong)(lstr - str)-1;
-				if (error)
-					g_set_error (error, G_CONVERT_ERROR, G_CONVERT_ERROR_ILLEGAL_SEQUENCE,
-					"Invalid sequence in conversion input");
-				if (items_read)
-					*items_read = errindex;
-				return 0;
-			} else {
-				retlen++;
-			}
-		} else if (ch > 0x10FFFF) {
-			errindex = (glong)(lstr - str)-1;
-			if (error)
-				g_set_error (error, G_CONVERT_ERROR, G_CONVERT_ERROR_ILLEGAL_SEQUENCE,
-				"Character out of range for UTF-16");
-			if (items_read)
-				*items_read = errindex;
-			return 0;
-
-		} else {
-			retlen+=2;
+	
+	if (max_len < 0) {
+		while (*inptr) {
+			inptr += g_utf8_jump_table[*inptr];
+			len++;
+		}
+	} else {
+		while (len < max_len && *inptr) {
+			n = g_utf8_jump_table[*inptr];
+			if ((clen + n) > max_len)
+				break;
+			
+			inptr += n;
+			clen += n;
+			len++;
 		}
 	}
-
-	if (items_read)
-		*items_read = (glong)(lstr - str);
-	return retlen;
+	
+	return len;
 }
 
-gunichar2*
-g_ucs4_to_utf16 (const gunichar *str, glong len, glong *items_read, glong *items_written, GError **error)
+gunichar
+g_utf8_get_char (const gchar *src)
 {
-	glong allocsz;
-	gunichar2 *retstr = 0;
-	gunichar2 *retch = 0;
-	glong nwritten = 0;
-	GError *lerror =0 ;
-
-	allocsz = g_ucs4_to_utf16_len (str, len, items_read, &lerror);
-
-	if (!lerror) {
-		retch = retstr = g_malloc ((allocsz+1) * sizeof (gunichar2));
-		retstr[allocsz] = '\0';
-
-		while (*str != '\0' && len--) {
-			gunichar ch;
-			ch = *str++;
-			if (ch <= 0x0000FFFF && (ch < 0xD800 || ch > 0xDFFF)) {
-				*retch++ = (gunichar2)ch;
-				nwritten ++;
-			} else {
-				ch -= 0x0010000UL;
-				*retch++ = (gunichar2)((ch >> 10) + 0xD800);
-				*retch++ = (gunichar2)((ch & 0x3FFUL) + 0xDC00);
-				nwritten +=2;
-			}
-		}
+	unsigned char *inptr = (unsigned char *) src;
+	gunichar u = *inptr;
+	int n, i;
+	
+	if (u < 0x80) {
+		/* simple ascii case */
+		return u;
+	} else if (u < 0xe0) {
+		u &= 0x1f;
+		n = 2;
+	} else if (u < 0xf0) {
+		u &= 0x0f;
+		n = 3;
+	} else if (u < 0xf8) {
+		u &= 0x07;
+		n = 4;
+	} else if (u < 0xfc) {
+		u &= 0x03;
+		n = 5;
+	} else {
+		u &= 0x01;
+		n = 6;
 	}
-
-	if (items_written)
-		*items_written = nwritten;
-	if (error)
-		*error = lerror;
-
-	return retstr;
+	
+	for (i = 1; i < n; i++)
+		u = (u << 6) | (*++inptr ^ 0x80);
+	
+	return u;
 }
 
-static glong
-g_utf16_to_ucs4_len (const gunichar2 *str, glong len, glong *items_read, GError **error)
+gchar *
+g_utf8_find_prev_char (const gchar *str, const gchar *p)
 {
-	glong retlen = 0;
-	glong errindex = 0;
-	const gunichar2 *lstr = str;
-	gunichar2 ch,ch2;
-
-	if (!str)
-		return 0;
-
-	while (*lstr != '\0' && len--) {
-		ch = *lstr++;
-		if (ch >= 0xD800 && ch <= 0xDBFF) {
-			if (!len--) {
-				lstr--;
-				break;
-			}
-			ch2 = *lstr;
-			if (ch2 >= 0xDC00 && ch2 <= 0xDFFF) {
-				lstr++;
-			} else {
-				errindex = (glong)(lstr - str);
-				if (error)
-					g_set_error (error, G_CONVERT_ERROR, G_CONVERT_ERROR_ILLEGAL_SEQUENCE,
-					"Invalid sequence in conversion input");
-				if (items_read)
-					*items_read = errindex;
-				return 0;
-			}
-		} else {
-			if (ch >= 0xDC00 && ch <= 0xDFFF) {
-				errindex = (glong)(lstr - str)-1;
-				if (error)
-					g_set_error (error, G_CONVERT_ERROR, G_CONVERT_ERROR_ILLEGAL_SEQUENCE,
-					"Invalid sequence in conversion input");
-				if (items_read)
-					*items_read = errindex;
-				return 0;
-			}
-		}
-		retlen++;
+	while (p > str) {
+		p--;
+		if ((*p & 0xc0) != 0xb0)
+			return (gchar *)p;
 	}
-
-	if (items_read)
-		*items_read = (glong)(lstr - str);
-
-	return retlen;
+	return NULL;
 }
 
-gunichar*
-g_utf16_to_ucs4 (const gunichar2 *str, glong len, glong *items_read, glong *items_written, GError **error)
+gchar *
+g_utf8_prev_char (const gchar *str)
 {
-	glong allocsz;
-	gunichar *retstr = 0;
-	gunichar *retch = 0;
-	glong nwritten = 0;
-	GError *lerror =0 ;
-	gunichar ch,ch2;
-
-	allocsz = g_utf16_to_ucs4_len (str, len, items_read, &lerror);
+	const gchar *p = str;
+	do {
+		p--;
+	} while ((*p & 0xc0) == 0xb0);
+	
+	return (gchar *)p;
+}
 
-	if (!lerror) {
-		retch = retstr = g_malloc ((allocsz+1) * sizeof (gunichar));
-		retstr[allocsz] = '\0';
-		nwritten = allocsz;
+gchar *
+g_utf8_offset_to_pointer (const gchar *str, glong offset)
+{
+	const gchar *p = str;
 
-		while (*str != '\0' && allocsz--) {
-			ch = *str++;
-			if (ch >= 0xD800 && ch <= 0xDBFF) {
-				ch2 = *str++;
-				ch = ((ch - (gunichar)0xD800) << 10)
-				      + (ch2 - (gunichar)0xDC00) + (gunichar)0x0010000UL;
-			}
-			*retch++ = ch;
-		}
+	if (offset > 0) {
+		do {
+			p = g_utf8_next_char (p);
+			offset --;
+		} while (offset > 0);
 	}
+	else if (offset < 0) {
+		const gchar *jump = str;
+		do {
+			// since the minimum size of a character is 1
+			// we know we can step back at least offset bytes
+			jump = jump + offset;
+			
+			// if we land in the middle of a character
+			// walk to the beginning
+			while ((*jump & 0xc0) == 0xb0)
+				jump --;
+			
+			// count how many characters we've actually walked
+			// by going forward
+			p = jump;
+			do {
+				p = g_utf8_next_char (p);
+				offset ++;
+			} while (p < jump);
+			
+		} while (offset < 0);
+	}
+	
+	return (gchar *)p;
+}
 
-	if (items_written)
-		*items_written = nwritten;
-	if (error)
-		*error = lerror;
-
-	return retstr;
+glong
+g_utf8_pointer_to_offset (const gchar *str, const gchar *pos)
+{
+	const gchar *inptr, *inend;
+	glong offset = 0;
+	glong sign = 1;
+	
+	if (pos == str)
+		return 0;
+	
+	if (str < pos) {
+		inptr = str;
+		inend = pos;
+	} else {
+		inptr = pos;
+		inend = str;
+		sign = -1;
+	}
+	
+	do {
+		inptr = g_utf8_next_char (inptr);
+		offset++;
+	} while (inptr < inend);
+	
+	return offset * sign;
 }
diff --git a/eglib/test/Makefile.am b/eglib/test/Makefile.am
index 0f4f07a..dfa7080 100644
--- a/eglib/test/Makefile.am
+++ b/eglib/test/Makefile.am
@@ -1,3 +1,5 @@
+EXTRA_DIST = UTF-8.txt UTF-16BE.txt UTF-16LE.txt UTF-32BE.txt UTF-32LE.txt
+
 SOURCES = \
 	test.c 		\
 	test.h 		\
@@ -30,10 +32,10 @@ SOURCES = \
 test_eglib_SOURCES = $(SOURCES)
 
 test_eglib_CFLAGS = -Wall -D_FORTIFY_SOURCE=2 -I$(srcdir)/../src -I../src -DDRIVER_NAME=\"EGlib\"
-test_eglib_LDADD = ../src/libeglib.la
+test_eglib_LDADD = ../src/libeglib.la $(LIBICONV)
 
 run-eglib: all
-	./test-eglib
+	srcdir=`readlink -f $(srcdir)` ./test-eglib
 
 if HAVE_GLIB
 
@@ -45,7 +47,7 @@ test_glib_CFLAGS = `pkg-config --cflags glib-2.0` -DDRIVER_NAME=\"GLib\"
 test_glib_LDFLAGS = `pkg-config --libs glib-2.0 gmodule-2.0`
 
 run-glib: all
-	./test-glib
+	srcdir=`readlink -f $(srcdir)` ./test-glib
 
 run-both: run-glib run-eglib
 
diff --git a/eglib/test/Makefile.in b/eglib/test/Makefile.in
index 25c65bb..8758b9b 100644
--- a/eglib/test/Makefile.in
+++ b/eglib/test/Makefile.in
@@ -41,8 +41,12 @@ target_triplet = @target@
 subdir = test
 DIST_COMMON = README $(srcdir)/Makefile.am $(srcdir)/Makefile.in
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \
-	$(top_srcdir)/configure.ac
+am__aclocal_m4_deps = $(top_srcdir)/m4/iconv.m4 \
+	$(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
+	$(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 mkinstalldirs = $(SHELL) $(top_srcdir)/../mkinstalldirs
@@ -65,7 +69,8 @@ am__objects_1 = test_eglib-test.$(OBJEXT) test_eglib-driver.$(OBJEXT) \
 	test_eglib-module.$(OBJEXT) test_eglib-memory.$(OBJEXT)
 am_test_eglib_OBJECTS = $(am__objects_1)
 test_eglib_OBJECTS = $(am_test_eglib_OBJECTS)
-test_eglib_DEPENDENCIES = ../src/libeglib.la
+am__DEPENDENCIES_1 =
+test_eglib_DEPENDENCIES = ../src/libeglib.la $(am__DEPENDENCIES_1)
 test_eglib_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \
 	$(LIBTOOLFLAGS) --mode=link $(CCLD) $(test_eglib_CFLAGS) \
 	$(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
@@ -142,11 +147,12 @@ GREP = @GREP@
 GSIZE = @GSIZE@
 GSIZE_FORMAT = @GSIZE_FORMAT@
 GUINT_TO_POINTER = @GUINT_TO_POINTER@
+G_GINT32_FORMAT = @G_GINT32_FORMAT@
 G_GINT64_FORMAT = @G_GINT64_FORMAT@
+G_GUINT32_FORMAT = @G_GUINT32_FORMAT@
 G_GUINT64_FORMAT = @G_GUINT64_FORMAT@
 G_HAVE_ISO_VARARGS = @G_HAVE_ISO_VARARGS@
 HAVE_ALLOCA_H = @HAVE_ALLOCA_H@
-ICONV_LIBS = @ICONV_LIBS@
 INSTALL = @INSTALL@
 INSTALL_DATA = @INSTALL_DATA@
 INSTALL_PROGRAM = @INSTALL_PROGRAM@
@@ -154,6 +160,7 @@ INSTALL_SCRIPT = @INSTALL_SCRIPT@
 INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
 LD = @LD@
 LDFLAGS = @LDFLAGS@
+LIBICONV = @LIBICONV@
 LIBOBJS = @LIBOBJS@
 LIBS = @LIBS@
 LIBTOOL = @LIBTOOL@
@@ -161,6 +168,7 @@ LIPO = @LIPO@
 LN_S = @LN_S@
 LTCOMPILE = @LTCOMPILE@
 LTCXXCOMPILE = @LTCXXCOMPILE@
+LTLIBICONV = @LTLIBICONV@
 LTLIBOBJS = @LTLIBOBJS@
 MAINT = @MAINT@
 MAKEINFO = @MAKEINFO@
@@ -247,6 +255,7 @@ target_vendor = @target_vendor@
 top_build_prefix = @top_build_prefix@
 top_builddir = @top_builddir@
 top_srcdir = @top_srcdir@
+EXTRA_DIST = UTF-8.txt UTF-16BE.txt UTF-16LE.txt UTF-32BE.txt UTF-32LE.txt
 SOURCES = \
 	test.c 		\
 	test.h 		\
@@ -278,7 +287,7 @@ SOURCES = \
 
 test_eglib_SOURCES = $(SOURCES)
 test_eglib_CFLAGS = -Wall -D_FORTIFY_SOURCE=2 -I$(srcdir)/../src -I../src -DDRIVER_NAME=\"EGlib\"
-test_eglib_LDADD = ../src/libeglib.la
+test_eglib_LDADD = ../src/libeglib.la $(LIBICONV)
 @HAVE_GLIB_TRUE at test_glib_SOURCES = $(SOURCES)
 @HAVE_GLIB_TRUE at test_glib_CFLAGS = `pkg-config --cflags glib-2.0` -DDRIVER_NAME=\"GLib\"
 @HAVE_GLIB_TRUE at test_glib_LDFLAGS = `pkg-config --libs glib-2.0 gmodule-2.0`
@@ -296,9 +305,9 @@ $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__confi
 	      exit 1;; \
 	  esac; \
 	done; \
-	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu test/Makefile'; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign test/Makefile'; \
 	$(am__cd) $(top_srcdir) && \
-	  $(AUTOMAKE) --gnu test/Makefile
+	  $(AUTOMAKE) --foreign test/Makefile
 .PRECIOUS: Makefile
 Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
 	@case '$?' in \
@@ -1317,10 +1326,10 @@ uninstall-am:
 
 
 run-eglib: all
-	./test-eglib
+	srcdir=`readlink -f $(srcdir)` ./test-eglib
 
 @HAVE_GLIB_TRUE at run-glib: all
- at HAVE_GLIB_TRUE@	./test-glib
+ at HAVE_GLIB_TRUE@	srcdir=`readlink -f $(srcdir)` ./test-glib
 
 @HAVE_GLIB_TRUE at run-both: run-glib run-eglib
 
diff --git a/eglib/test/UTF-16BE.txt b/eglib/test/UTF-16BE.txt
new file mode 100644
index 0000000..b7e494c
Binary files /dev/null and b/eglib/test/UTF-16BE.txt differ
diff --git a/eglib/test/UTF-16LE.txt b/eglib/test/UTF-16LE.txt
new file mode 100644
index 0000000..30fe7b0
Binary files /dev/null and b/eglib/test/UTF-16LE.txt differ
diff --git a/eglib/test/UTF-32BE.txt b/eglib/test/UTF-32BE.txt
new file mode 100644
index 0000000..a1fd543
Binary files /dev/null and b/eglib/test/UTF-32BE.txt differ
diff --git a/eglib/test/UTF-32LE.txt b/eglib/test/UTF-32LE.txt
new file mode 100644
index 0000000..043afc9
Binary files /dev/null and b/eglib/test/UTF-32LE.txt differ
diff --git a/eglib/test/UTF-8.txt b/eglib/test/UTF-8.txt
new file mode 100644
index 0000000..4363f27
--- /dev/null
+++ b/eglib/test/UTF-8.txt
@@ -0,0 +1,212 @@
+
+UTF-8 encoded sample plain-text file
+‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾
+
+Markus Kuhn [ˈmaʳkʊs kuːn] <http://www.cl.cam.ac.uk/~mgk25/> — 2002-07-25
+
+
+The ASCII compatible UTF-8 encoding used in this plain-text file
+is defined in Unicode, ISO 10646-1, and RFC 2279.
+
+
+Using Unicode/UTF-8, you can write in emails and source code things such as
+
+Mathematics and sciences:
+
+  ∮ E⋅da = Q,  n → ∞, ∑ f(i) = ∏ g(i),      ⎧⎡⎛┌─────┐⎞⎤⎫
+                                            ⎪⎢⎜│a²+b³ ⎟⎥⎪
+  ∀x∈ℝ: ⌈x⌉ = −⌊−x⌋, α ∧ ¬β = ¬(¬α ∨ β),    ⎪⎢⎜│───── ⎟⎥⎪
+                                            ⎪⎢⎜⎷ c₈   ⎟⎥⎪
+  ℕ ⊆ ℕ₀ ⊂ ℤ ⊂ ℚ ⊂ ℝ ⊂ ℂ,                   ⎨⎢⎜       ⎟⎥⎬
+                                            ⎪⎢⎜ ∞     ⎟⎥⎪
+  ⊥ < a ≠ b ≡ c ≤ d ≪ ⊤ ⇒ (⟦A⟧ ⇔ ⟪B⟫),      ⎪⎢⎜ ⎲     ⎟⎥⎪
+                                            ⎪⎢⎜ ⎳aⁱ-bⁱ⎟⎥⎪
+  2H₂ + O₂ ⇌ 2H₂O, R = 4.7 kΩ, ⌀ 200 mm     ⎩⎣⎝i=1    ⎠⎦⎭
+
+Linguistics and dictionaries:
+
+  ði ıntəˈnæʃənəl fəˈnɛtık əsoʊsiˈeıʃn
+  Y [ˈʏpsilɔn], Yen [jɛn], Yoga [ˈjoːgɑ]
+
+APL:
+
+  ((V⍳V)=⍳⍴V)/V←,V    ⌷←⍳→⍴∆∇⊃‾⍎⍕⌈
+
+Nicer typography in plain text files:
+
+  ╔══════════════════════════════════════════╗
+  â•‘                                          â•‘
+  ║   • ‘single’ and “double” quotes         ║
+  â•‘                                          â•‘
+  ║   • Curly apostrophes: “We’ve been here” ║
+  â•‘                                          â•‘
+  ║   • Latin-1 apostrophe and accents: '´`  ║
+  â•‘                                          â•‘
+  ║   • ‚deutsche‘ „Anführungszeichen“       ║
+  â•‘                                          â•‘
+  ║   • †, ‡, ‰, •, 3–4, —, −5/+5, ™, …      ║
+  â•‘                                          â•‘
+  ║   • ASCII safety test: 1lI|, 0OD, 8B     ║
+  ║                      ╭─────────╮         ║
+  ║   • the euro symbol: │ 14.95 € │         ║
+  ║                      ╰─────────╯         ║
+  ╚══════════════════════════════════════════╝
+
+Combining characters:
+
+  STARGΛ̊TE SG-1, a = v̇ = r̈, a⃑ ⊥ b⃑
+
+Greek (in Polytonic):
+
+  The Greek anthem:
+
+  Σὲ γνωρίζω ἀπὸ τὴν κόψη
+  τοῦ σπαθιοῦ τὴν τρομερή,
+  σὲ γνωρίζω ἀπὸ τὴν ὄψη
+  ποὺ μὲ βία μετράει τὴ γῆ.
+
+  ᾿Απ᾿ τὰ κόκκαλα βγαλμένη
+  τῶν ῾Ελλήνων τὰ ἱερά
+  καὶ σὰν πρῶτα ἀνδρειωμένη
+  χαῖρε, ὦ χαῖρε, ᾿Ελευθεριά!
+
+  From a speech of Demosthenes in the 4th century BC:
+
+  Οὐχὶ ταὐτὰ παρίσταταί μοι γιγνώσκειν, ὦ ἄνδρες ᾿Αθηναῖοι,
+  ὅταν τ᾿ εἰς τὰ πράγματα ἀποβλέψω καὶ ὅταν πρὸς τοὺς
+  λόγους οὓς ἀκούω· τοὺς μὲν γὰρ λόγους περὶ τοῦ
+  τιμωρήσασθαι Φίλιππον ὁρῶ γιγνομένους, τὰ δὲ πράγματ᾿
+  εἰς τοῦτο προήκοντα,  ὥσθ᾿ ὅπως μὴ πεισόμεθ᾿ αὐτοὶ
+  πρότερον κακῶς σκέψασθαι δέον. οὐδέν οὖν ἄλλο μοι δοκοῦσιν
+  οἱ τὰ τοιαῦτα λέγοντες ἢ τὴν ὑπόθεσιν, περὶ ἧς βουλεύεσθαι,
+  οὐχὶ τὴν οὖσαν παριστάντες ὑμῖν ἁμαρτάνειν. ἐγὼ δέ, ὅτι μέν
+  ποτ᾿ ἐξῆν τῇ πόλει καὶ τὰ αὑτῆς ἔχειν ἀσφαλῶς καὶ Φίλιππον
+  τιμωρήσασθαι, καὶ μάλ᾿ ἀκριβῶς οἶδα· ἐπ᾿ ἐμοῦ γάρ, οὐ πάλαι
+  γέγονεν ταῦτ᾿ ἀμφότερα· νῦν μέντοι πέπεισμαι τοῦθ᾿ ἱκανὸν
+  προλαβεῖν ἡμῖν εἶναι τὴν πρώτην, ὅπως τοὺς συμμάχους
+  σώσομεν. ἐὰν γὰρ τοῦτο βεβαίως ὑπάρξῃ, τότε καὶ περὶ τοῦ
+  τίνα τιμωρήσεταί τις καὶ ὃν τρόπον ἐξέσται σκοπεῖν· πρὶν δὲ
+  τὴν ἀρχὴν ὀρθῶς ὑποθέσθαι, μάταιον ἡγοῦμαι περὶ τῆς
+  τελευτῆς ὁντινοῦν ποιεῖσθαι λόγον.
+
+  Δημοσθένους, Γ´ ᾿Ολυνθιακὸς
+
+Georgian:
+
+  From a Unicode conference invitation:
+
+  გთხოვთ ახლავე გაიაროთ რეგისტრაცია Unicode-ის მეათე საერთაშორისო
+  კონფერენციაზე დასასწრებად, რომელიც გაიმართება 10-12 მარტს,
+  ქ. მაინცში, გერმანიაში. კონფერენცია შეჰკრებს ერთად მსოფლიოს
+  ექსპერტებს ისეთ დარგებში როგორიცაა ინტერნეტი და Unicode-ი,
+  ინტერნაციონალიზაცია და ლოკალიზაცია, Unicode-ის გამოყენება
+  ოპერაციულ სისტემებსა, და გამოყენებით პროგრამებში, შრიფტებში,
+  ტექსტების დამუშავებასა და მრავალენოვან კომპიუტერულ სისტემებში.
+
+Russian:
+
+  From a Unicode conference invitation:
+
+  Зарегистрируйтесь сейчас на Десятую Международную Конференцию по
+  Unicode, которая состоится 10-12 марта 1997 года в Майнце в Германии.
+  Конференция соберет широкий круг экспертов по  вопросам глобального
+  Интернета и Unicode, локализации и интернационализации, воплощению и
+  применению Unicode в различных операционных системах и программных
+  приложениях, шрифтах, верстке и многоязычных компьютерных системах.
+
+Thai (UCS Level 2):
+
+  Excerpt from a poetry on The Romance of The Three Kingdoms (a Chinese
+  classic 'San Gua'):
+
+  [----------------------------|------------------------]
+    ๏ แผ่นดินฮั่นเสื่อมโทรมแสนสังเวช  พระปกเกศกองบู๊กู้ขึ้นใหม่
+  สิบสองกษัตริย์ก่อนหน้าแลถัดไป       สององค์ไซร้โง่เขลาเบาปัญญา
+    ทรงนับถือขันทีเป็นที่พึ่ง           บ้านเมืองจึงวิปริตเป็นนักหนา
+  โฮจิ๋นเรียกทัพทั่วหัวเมืองมา         หมายจะฆ่ามดชั่วตัวสำคัญ
+    เหมือนขับไสไล่เสือจากเคหา      รับหมาป่าเข้ามาเลยอาสัญ
+  ฝ่ายอ้องอุ้นยุแยกให้แตกกัน          ใช้สาวนั้นเป็นชนวนชื่นชวนใจ
+    พลันลิฉุยกุยกีกลับก่อเหตุ          ช่างอาเพศจริงหนาฟ้าร้องไห้
+  ต้องรบราฆ่าฟันจนบรรลัย           ฤๅหาใครค้ำชูกู้บรรลังก์ ฯ
+
+  (The above is a two-column text. If combining characters are handled
+  correctly, the lines of the second column should be aligned with the
+  | character above.)
+
+Ethiopian:
+
+  Proverbs in the Amharic language:
+
+  ሰማይ አይታረስ ንጉሥ አይከሰስ።
+  ብላ ካለኝ እንደአባቴ በቆመጠኝ።
+  ጌጥ ያለቤቱ ቁምጥና ነው።
+  ደሀ በሕልሙ ቅቤ ባይጠጣ ንጣት በገደለው።
+  የአፍ ወለምታ በቅቤ አይታሽም።
+  አይጥ በበላ ዳዋ ተመታ።
+  ሲተረጉሙ ይደረግሙ።
+  ቀስ በቀስ፥ ዕንቁላል በእግሩ ይሄዳል።
+  ድር ቢያብር አንበሳ ያስር።
+  ሰው እንደቤቱ እንጅ እንደ ጉረቤቱ አይተዳደርም።
+  እግዜር የከፈተውን ጉሮሮ ሳይዘጋው አይድርም።
+  የጎረቤት ሌባ፥ ቢያዩት ይስቅ ባያዩት ያጠልቅ።
+  ሥራ ከመፍታት ልጄን ላፋታት።
+  ዓባይ ማደሪያ የለው፥ ግንድ ይዞ ይዞራል።
+  የእስላም አገሩ መካ የአሞራ አገሩ ዋርካ።
+  ተንጋሎ ቢተፉ ተመልሶ ባፉ።
+  ወዳጅህ ማር ቢሆን ጨርስህ አትላሰው።
+  እግርህን በፍራሽህ ልክ ዘርጋ።
+
+Runes:
+
+  ᚻᛖ ᚳᚹᚫᚦ ᚦᚫᛏ ᚻᛖ ᛒᚢᛞᛖ ᚩᚾ ᚦᚫᛗ ᛚᚪᚾᛞᛖ ᚾᚩᚱᚦᚹᛖᚪᚱᛞᚢᛗ ᚹᛁᚦ ᚦᚪ ᚹᛖᛥᚫ
+
+  (Old English, which transcribed into Latin reads 'He cwaeth that he
+  bude thaem lande northweardum with tha Westsae.' and means 'He said
+  that he lived in the northern land near the Western Sea.')
+
+Braille:
+
+  ⡌⠁⠧⠑ ⠼⠁⠒  ⡍⠜⠇⠑⠹⠰⠎ ⡣⠕⠌
+
+  ⡍⠜⠇⠑⠹ ⠺⠁⠎ ⠙⠑⠁⠙⠒ ⠞⠕ ⠃⠑⠛⠔ ⠺⠊⠹⠲ ⡹⠻⠑ ⠊⠎ ⠝⠕ ⠙⠳⠃⠞
+  ⠱⠁⠞⠑⠧⠻ ⠁⠃⠳⠞ ⠹⠁⠞⠲ ⡹⠑ ⠗⠑⠛⠊⠌⠻ ⠕⠋ ⠙⠊⠎ ⠃⠥⠗⠊⠁⠇ ⠺⠁⠎
+  ⠎⠊⠛⠝⠫ ⠃⠹ ⠹⠑ ⠊⠇⠻⠛⠹⠍⠁⠝⠂ ⠹⠑ ⠊⠇⠻⠅⠂ ⠹⠑ ⠥⠝⠙⠻⠞⠁⠅⠻⠂
+  ⠁⠝⠙ ⠹⠑ ⠡⠊⠑⠋ ⠍⠳⠗⠝⠻⠲ ⡎⠊⠗⠕⠕⠛⠑ ⠎⠊⠛⠝⠫ ⠊⠞⠲ ⡁⠝⠙
+  ⡎⠊⠗⠕⠕⠛⠑⠰⠎ ⠝⠁⠍⠑ ⠺⠁⠎ ⠛⠕⠕⠙ ⠥⠏⠕⠝ ⠰⡡⠁⠝⠛⠑⠂ ⠋⠕⠗ ⠁⠝⠹⠹⠔⠛ ⠙⠑
+  ⠡⠕⠎⠑ ⠞⠕ ⠏⠥⠞ ⠙⠊⠎ ⠙⠁⠝⠙ ⠞⠕⠲
+
+  ⡕⠇⠙ ⡍⠜⠇⠑⠹ ⠺⠁⠎ ⠁⠎ ⠙⠑⠁⠙ ⠁⠎ ⠁ ⠙⠕⠕⠗⠤⠝⠁⠊⠇⠲
+
+  ⡍⠔⠙⠖ ⡊ ⠙⠕⠝⠰⠞ ⠍⠑⠁⠝ ⠞⠕ ⠎⠁⠹ ⠹⠁⠞ ⡊ ⠅⠝⠪⠂ ⠕⠋ ⠍⠹
+  ⠪⠝ ⠅⠝⠪⠇⠫⠛⠑⠂ ⠱⠁⠞ ⠹⠻⠑ ⠊⠎ ⠏⠜⠞⠊⠊⠥⠇⠜⠇⠹ ⠙⠑⠁⠙ ⠁⠃⠳⠞
+  ⠁ ⠙⠕⠕⠗⠤⠝⠁⠊⠇⠲ ⡊ ⠍⠊⠣⠞ ⠙⠁⠧⠑ ⠃⠑⠲ ⠔⠊⠇⠔⠫⠂ ⠍⠹⠎⠑⠇⠋⠂ ⠞⠕
+  ⠗⠑⠛⠜⠙ ⠁ ⠊⠕⠋⠋⠔⠤⠝⠁⠊⠇ ⠁⠎ ⠹⠑ ⠙⠑⠁⠙⠑⠌ ⠏⠊⠑⠊⠑ ⠕⠋ ⠊⠗⠕⠝⠍⠕⠝⠛⠻⠹
+  ⠔ ⠹⠑ ⠞⠗⠁⠙⠑⠲ ⡃⠥⠞ ⠹⠑ ⠺⠊⠎⠙⠕⠍ ⠕⠋ ⠳⠗ ⠁⠝⠊⠑⠌⠕⠗⠎
+  ⠊⠎ ⠔ ⠹⠑ ⠎⠊⠍⠊⠇⠑⠆ ⠁⠝⠙ ⠍⠹ ⠥⠝⠙⠁⠇⠇⠪⠫ ⠙⠁⠝⠙⠎
+  ⠩⠁⠇⠇ ⠝⠕⠞ ⠙⠊⠌⠥⠗⠃ ⠊⠞⠂ ⠕⠗ ⠹⠑ ⡊⠳⠝⠞⠗⠹⠰⠎ ⠙⠕⠝⠑ ⠋⠕⠗⠲ ⡹⠳
+  ⠺⠊⠇⠇ ⠹⠻⠑⠋⠕⠗⠑ ⠏⠻⠍⠊⠞ ⠍⠑ ⠞⠕ ⠗⠑⠏⠑⠁⠞⠂ ⠑⠍⠏⠙⠁⠞⠊⠊⠁⠇⠇⠹⠂ ⠹⠁⠞
+  ⡍⠜⠇⠑⠹ ⠺⠁⠎ ⠁⠎ ⠙⠑⠁⠙ ⠁⠎ ⠁ ⠙⠕⠕⠗⠤⠝⠁⠊⠇⠲
+
+  (The first couple of paragraphs of "A Christmas Carol" by Dickens)
+
+Compact font selection example text:
+
+  ABCDEFGHIJKLMNOPQRSTUVWXYZ /0123456789
+  abcdefghijklmnopqrstuvwxyz £©µÀÆÖÞßéöÿ
+  –—‘“”„†•…‰™œŠŸž€ ΑΒΓΔΩαβγδω АБВГДабвгд
+  ∀∂∈ℝ∧∪≡∞ ↑↗↨↻⇣ ┐┼╔╘░►☺♀ fi�⑀₂ἠḂӥẄɐː⍎אԱა
+
+Greetings in various languages:
+
+  Hello world, Καλημέρα κόσμε, コンニチハ
+
+Box drawing alignment tests:                                          â–ˆ
+                                                                      â–‰
+  ╔══╦══╗  ┌──┬──┐  ╭──┬──╮  ╭──┬──╮  ┏━━┳━━┓  ┎┒┏┑   ╷  ╻ ┏┯┓ ┌┰┐    ▊ ╱╲╱╲╳╳╳
+  ║┌─╨─┐║  │╔═╧═╗│  │╒═╪═╕│  │╓─╁─╖│  ┃┌─╂─┐┃  ┗╃╄┙  ╶┼╴╺╋╸┠┼┨ ┝╋┥    ▋ ╲╱╲╱╳╳╳
+  ║│╲ ╱│║  │║   ║│  ││ │ ││  │║ ┃ ║│  ┃│ ╿ │┃  ┍╅╆┓   ╵  ╹ ┗┷┛ └┸┘    ▌ ╱╲╱╲╳╳╳
+  ╠╡ ╳ ╞╣  ├╢   ╟┤  ├┼─┼─┼┤  ├╫─╂─╫┤  ┣┿╾┼╼┿┫  ┕┛┖┚     ┌┄┄┐ ╎ ┏┅┅┓ ┋ ▍ ╲╱╲╱╳╳╳
+  ║│╱ ╲│║  │║   ║│  ││ │ ││  │║ ┃ ║│  ┃│ ╽ │┃  ░░▒▒▓▓██ ┊  ┆ ╎ ╏  ┇ ┋ ▎
+  ║└─╥─┘║  │╚═╤═╝│  │╘═╪═╛│  │╙─╀─╜│  ┃└─╂─┘┃  ░░▒▒▓▓██ ┊  ┆ ╎ ╏  ┇ ┋ ▏
+  ╚══╩══╝  └──┴──┘  ╰──┴──╯  ╰──┴──╯  ┗━━┻━━┛  ▗▄▖▛▀▜   └╌╌┘ ╎ ┗╍╍┛ ┋  ▁▂▃▄▅▆▇█
+                                               ▝▀▘▙▄▟
diff --git a/eglib/test/ptrarray.c b/eglib/test/ptrarray.c
index a823dd7..34d78b0 100644
--- a/eglib/test/ptrarray.c
+++ b/eglib/test/ptrarray.c
@@ -243,8 +243,8 @@ RESULT ptrarray_sort()
 
 	for(i = 0; i < array->len; i++) {
 		if(array->pdata[i] != letters[i]) {
-			return FAILED("Array out of order, expected %s got %s", 
-				(gchar *)array->pdata[i], letters[i]);
+			return FAILED("Array out of order, expected %s got %s at position %d",
+				letters [i], (gchar *) array->pdata [i], i);
 		}
 	}
 
@@ -253,6 +253,43 @@ RESULT ptrarray_sort()
 	return OK;
 }
 
+static gint ptrarray_sort_compare_with_data (gconstpointer a, gconstpointer b, gpointer user_data)
+{
+	gchar *stra = *(gchar **) a;
+	gchar *strb = *(gchar **) b;
+
+	if (strcmp (user_data, "this is the data for qsort") != 0)
+		fprintf (stderr, "oops at compare with_data\n");
+
+	return strcmp(stra, strb);
+}
+
+RESULT ptrarray_sort_with_data ()
+{
+	GPtrArray *array = g_ptr_array_new();
+	guint i;
+	gchar *letters [] = { "A", "B", "C", "D", "E" };
+
+	g_ptr_array_add(array, letters[4]);
+	g_ptr_array_add(array, letters[1]);
+	g_ptr_array_add(array, letters[2]);
+	g_ptr_array_add(array, letters[0]);
+	g_ptr_array_add(array, letters[3]);
+
+	g_ptr_array_sort_with_data(array, ptrarray_sort_compare_with_data, "this is the data for qsort");
+
+	for(i = 0; i < array->len; i++) {
+		if(array->pdata[i] != letters[i]) {
+			return FAILED("Array out of order, expected %s got %s at position %d",
+				letters [i], (gchar *) array->pdata [i], i);
+		}
+	}
+
+	g_ptr_array_free(array, TRUE);
+
+	return OK;
+}
+
 RESULT ptrarray_remove_fast()
 {
 	GPtrArray *array = g_ptr_array_new();
@@ -303,6 +340,7 @@ static Test ptrarray_tests [] = {
 	{"remove", ptrarray_remove},
 	{"sort", ptrarray_sort},
 	{"remove_fast", ptrarray_remove_fast},
+	{"sort_with_data", ptrarray_sort_with_data},
 	{NULL, NULL}
 };
 
diff --git a/eglib/test/utf8.c b/eglib/test/utf8.c
index e7f0405..bae5ba0 100644
--- a/eglib/test/utf8.c
+++ b/eglib/test/utf8.c
@@ -1,3 +1,5 @@
+#include <stdlib.h>
+
 #include "test.h"
 
 /*
@@ -191,7 +193,7 @@ test_utf8_seq ()
 	GError *error = NULL;
 	gunichar2 *dst;
 
-	printf ("got: %s\n", src);
+	//printf ("got: %s\n", src);
 	dst = g_utf8_to_utf16 (src, (glong)strlen (src), &in_read, &out_read, &error);
 	if (error != NULL){
 		return error->message;
@@ -238,25 +240,110 @@ test_utf8_to_utf16 ()
 	return OK;
 }
 
+typedef struct {
+	char *content;
+	size_t length;
+} convert_result_t;
+
 RESULT
 test_convert ()
 {
-	gsize n;
-	char *s = g_convert ("\242\241\243\242\241\243\242\241\243\242\241\243", -1, "UTF-8", "ISO-8859-1", NULL, &n, NULL);
-	guchar *u = (guchar *) s;
+	static const char *charsets[] = { "UTF-8", "UTF-16LE", "UTF-16BE", "UTF-32LE", "UTF-32BE" };
+	gsize length, converted_length, n;
+	char *content, *converted, *path;
+	convert_result_t **expected;
+	GError *err = NULL;
+	const char *srcdir;
+	gboolean loaded;
+	guint i, j, k;
+	char c;
 	
-	if (!s)
-		return FAILED ("Expected 24 bytes, got: NULL");
-
-	if (strlen (s) != 24)
-		return FAILED ("Expected 24 bytes, got: %d", strlen (s));
-
-	if (u [1] != 162 || u [2] != 194 ||
-	    u [3] != 161 || u [4] != 194 ||
-	    u [5] != 163 || u [6] != 194)
-		return FAILED ("Incorrect conversion");
+	if (!(srcdir = getenv ("srcdir")) && !(srcdir = getenv ("PWD")))
+		return FAILED ("srcdir not defined!");
+	
+	expected = g_malloc (sizeof (convert_result_t *) * G_N_ELEMENTS (charsets));
+	
+	/* first load all our test samples... */
+	for (i = 0; i < G_N_ELEMENTS (charsets); i++) {
+		path = g_strdup_printf ("%s%c%s.txt", srcdir, G_DIR_SEPARATOR, charsets[i]);
+		loaded = g_file_get_contents (path, &content, &length, &err);
+		g_free (path);
+		
+		if (!loaded) {
+			for (j = 0; j < i; j++) {
+				g_free (expected[j]->content);
+				g_free (expected[j]);
+			}
+			
+			g_free (expected);
+			
+			return FAILED ("Failed to load content for %s: %s", charsets[i], err->message);
+		}
+		
+		expected[i] = g_malloc (sizeof (convert_result_t));
+		expected[i]->content = content;
+		expected[i]->length = length;
+	}
 	
-	g_free (s);
+	/* test conversion from every charset to every other charset */
+	for (i = 0; i < G_N_ELEMENTS (charsets); i++) {
+		for (j = 0; j < G_N_ELEMENTS (charsets); j++) {
+			converted = g_convert (expected[i]->content, expected[i]->length, charsets[j],
+					       charsets[i], NULL, &converted_length, NULL);
+			
+			if (converted == NULL) {
+				for (k = 0; k < G_N_ELEMENTS (charsets); k++) {
+					g_free (expected[k]->content);
+					g_free (expected[k]);
+				}
+				
+				g_free (expected);
+				
+				return FAILED ("Failed to convert from %s to %s: NULL", charsets[i], charsets[j]);
+			}
+			
+			if (converted_length != expected[j]->length) {
+				length = expected[j]->length;
+				
+				for (k = 0; k < G_N_ELEMENTS (charsets); k++) {
+					g_free (expected[k]->content);
+					g_free (expected[k]);
+				}
+				
+				g_free (converted);
+				g_free (expected);
+				
+				return FAILED ("Failed to convert from %s to %s: expected %u bytes, got %u",
+					       charsets[i], charsets[j], length, converted_length);
+			}
+			
+			for (n = 0; n < converted_length; n++) {
+				if (converted[n] != expected[j]->content[n]) {
+					c = expected[j]->content[n];
+					
+					for (k = 0; k < G_N_ELEMENTS (charsets); k++) {
+						g_free (expected[k]->content);
+						g_free (expected[k]);
+					}
+					
+					g_free (converted);
+					g_free (expected);
+					
+					return FAILED ("Failed to convert from %s to %s: expected 0x%x at offset %u, got 0x%x",
+						       charsets[i], charsets[j], c, n, converted[n]);
+				}
+			}
+			
+			g_free (converted);
+		}
+	}
+	
+	for (k = 0; k < G_N_ELEMENTS (charsets); k++) {
+		g_free (expected[k]->content);
+		g_free (expected[k]);
+	}
+	
+	g_free (expected);
 	
 	return OK;
 }
@@ -293,9 +380,9 @@ ucs4_to_utf16_check_result (const gunichar2 *result_str, const gunichar2 *expect
 {
 	glong i;
 	if (result_items_read != expected_items_read)
-		return FAILED("Incorrect number of items read %d", result_items_read);
+		return FAILED("Incorrect number of items read; expected %d, got %d", expected_items_read, result_items_read);
 	if (result_items_written != expected_items_written)
-		return FAILED("Incorrect number of items written %d", result_items_written);
+		return FAILED("Incorrect number of items written; expected %d, got %d", expected_items_written, result_items_written);
 	if (result_error && !expect_error)
 		return FAILED("There should not be an error code.");
 	if (!result_error && expect_error)
@@ -403,9 +490,9 @@ utf16_to_ucs4_check_result (const gunichar *result_str, const gunichar *expected
 {
 	glong i;
 	if (result_items_read != expected_items_read)
-		return FAILED("Incorrect number of items read %d", result_items_read);
+		return FAILED("Incorrect number of items read; expected %d, got %d", expected_items_read, result_items_read);
 	if (result_items_written != expected_items_written)
-		return FAILED("Incorrect number of items written %d", result_items_written);
+		return FAILED("Incorrect number of items written; expected %d, got %d", expected_items_written, result_items_written);
 	if (result_error && !expect_error)
 		return FAILED("There should not be an error code.");
 	if (!result_error && expect_error)
@@ -449,13 +536,13 @@ test_utf16_to_ucs4 ()
 	check_result = utf16_to_ucs4_check_result (res, exp1, items_read, 11, items_written, 11, err, FALSE);
 	if (check_result) return check_result;
 	g_free (res);
-
+	
 	items_read = items_written = 0;
 	res = g_utf16_to_ucs4 (str2, 0, &items_read, &items_written, &err);
 	check_result = utf16_to_ucs4_check_result (res, exp2, items_read, 0, items_written, 0, err, FALSE);
 	if (check_result) return check_result;
 	g_free (res);
-
+	
 	items_read = items_written = 0;
 	res = g_utf16_to_ucs4 (str2, 1, &items_read, &items_written, &err);
 	check_result = utf16_to_ucs4_check_result (res, exp2, items_read, 1, items_written, 1, err, FALSE);
@@ -467,32 +554,32 @@ test_utf16_to_ucs4 ()
 	check_result = utf16_to_ucs4_check_result (res, exp2, items_read, 1, items_written, 1, err, FALSE);
 	if (check_result) return check_result;
 	g_free (res);
-
+	
 	items_read = items_written = 0;
 	res = g_utf16_to_ucs4 (str2, 3, &items_read, &items_written, &err);
 	check_result = utf16_to_ucs4_check_result (res, exp2, items_read, 3, items_written, 2, err, FALSE);
 	if (check_result) return check_result;
 	g_free (res);
-
+	
 	items_read = items_written = 0;
 	res = g_utf16_to_ucs4 (str2, 4, &items_read, &items_written, &err);
 	check_result = utf16_to_ucs4_check_result (res, exp2, items_read, 3, items_written, 2, err, FALSE);
 	if (check_result) return check_result;
 	g_free (res);
-
+	
 	items_read = items_written = 0;
 	res = g_utf16_to_ucs4 (str2, 5, &items_read, &items_written, &err);
 	check_result = utf16_to_ucs4_check_result (res, exp2, items_read, 4, items_written, 0, err, TRUE);
 	if (check_result) return check_result;
 	g_free (res);
-
+	
 	items_read = items_written = 0;
 	err = 0;
 	res = g_utf16_to_ucs4 (str3, 5, &items_read, &items_written, &err);
 	check_result = utf16_to_ucs4_check_result (res, exp3, items_read, 1, items_written, 0, err, TRUE);
 	if (check_result) return check_result;
 	g_free (res);
-
+	
 	// This loop tests the bounds of the conversion algorithm
 	current_read_index = current_write_index = 0;
 	for (i=0;i<11;i++) {
diff --git a/ikvm-native/ChangeLog b/ikvm-native/ChangeLog
index 8d65baf..715f44b 100644
--- a/ikvm-native/ChangeLog
+++ b/ikvm-native/ChangeLog
@@ -1,7 +1,3 @@
-2010-11-14  Zoltan Varga  <vargaz at gmail.com>
-
-	Remove the unused and incomplete CMake build scripts for now.
-
 2006-09-11  Zoltan Varga  <vargaz at gmail.com>
 
 	* jni.c: Apply a patch from the freebsd ports tree. Include the proper
diff --git a/ikvm-native/ChangeLog.old b/ikvm-native/ChangeLog.old
deleted file mode 100644
index 715f44b..0000000
--- a/ikvm-native/ChangeLog.old
+++ /dev/null
@@ -1,39 +0,0 @@
-2006-09-11  Zoltan Varga  <vargaz at gmail.com>
-
-	* jni.c: Apply a patch from the freebsd ports tree. Include the proper
-	include for alloca ().
-
-Tue Aug 22 17:16:53 CEST 2006 Paolo Molaro <lupus at ximian.com>
-
-	* Makefile.am: link to libgmodule (patch by Alexander Larsson
-	alexl at redhat.com).
-
-2005-06-08  Ben Maurer  <bmaurer at ximian.com>
-
-	* Makefile.am: Avoid versioning. We aren't going to be a strongly
-	versioned lib.
-
-2005-05-03  Zoltan Varga  <vargaz at freemail.hu>
-
-	* os.c: Update from the official version.
-
-2005-04-11  Zoltan Varga  <vargaz at freemail.hu>
-
-	* jni.c: Applied some freebsd patches from Bill Middleton <flashdict at gmail.com>.
-
-2005-04-05  Zoltan Varga  <vargaz at freemail.hu>
-
-	* jni.c: Apply patch from freebsd ports tree.
-
-2005-01-20  Zoltan Varga  <vargaz at freemail.hu>
-
-	* jni.h: Applied patch from Bernie Solomon to fix compilation on
-	non-gcc compilers.
-
-2005-01-13  Zoltan Varga  <vargaz at freemail.hu>
-
-	* jni.c: Fix compilation on PPC.
-
-	* Makefile.am os.c jni.h jni.c: New files. This is a copy of the
-	'native' module in IKVM CVS, placed here so IKVM users don't need to
-	copy/install the native library.
diff --git a/ikvm-native/Makefile.in b/ikvm-native/Makefile.in
index 5d9a8ec..f75a203 100644
--- a/ikvm-native/Makefile.in
+++ b/ikvm-native/Makefile.in
@@ -38,11 +38,13 @@ target_triplet = @target@
 subdir = ikvm-native
 DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ChangeLog
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/libtool.m4 \
-	$(top_srcdir)/ltoptions.m4 $(top_srcdir)/ltsugar.m4 \
-	$(top_srcdir)/ltversion.m4 $(top_srcdir)/lt~obsolete.m4 \
-	$(top_srcdir)/nls.m4 $(top_srcdir)/po.m4 \
-	$(top_srcdir)/progtest.m4 $(top_srcdir)/acinclude.m4 \
+am__aclocal_m4_deps = $(top_srcdir)/m4/iconv.m4 \
+	$(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
+	$(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \
+	$(top_srcdir)/m4/progtest.m4 $(top_srcdir)/acinclude.m4 \
 	$(top_srcdir)/configure.in
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
@@ -104,7 +106,6 @@ AUTOCONF = @AUTOCONF@
 AUTOHEADER = @AUTOHEADER@
 AUTOMAKE = @AUTOMAKE@
 AWK = @AWK@
-BISON = @BISON@
 BOEHM_DEFINES = @BOEHM_DEFINES@
 BUILD_EXEEXT = @BUILD_EXEEXT@
 BUILD_GLIB_CFLAGS = @BUILD_GLIB_CFLAGS@
@@ -158,9 +159,11 @@ INTL = @INTL@
 LD = @LD@
 LDFLAGS = @LDFLAGS@
 LIBC = @LIBC@
-LIBGC_CFLAGS = @LIBGC_CFLAGS@
+LIBGC_CPPFLAGS = @LIBGC_CPPFLAGS@
 LIBGC_LIBS = @LIBGC_LIBS@
 LIBGC_STATIC_LIBS = @LIBGC_STATIC_LIBS@
+LIBICONV = @LIBICONV@
+LIBMONO_LA = @LIBMONO_LA@
 LIBOBJS = @LIBOBJS@
 LIBS = @LIBS@
 LIBTOOL = @LIBTOOL@
@@ -173,6 +176,7 @@ LLVM_LIBS = @LLVM_LIBS@
 LN_S = @LN_S@
 LTCOMPILE = @LTCOMPILE@
 LTCXXCOMPILE = @LTCXXCOMPILE@
+LTLIBICONV = @LTLIBICONV@
 LTLIBOBJS = @LTLIBOBJS@
 MAINT = @MAINT@
 MAKEINFO = @MAKEINFO@
@@ -307,9 +311,9 @@ $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__confi
 	      exit 1;; \
 	  esac; \
 	done; \
-	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu ikvm-native/Makefile'; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign ikvm-native/Makefile'; \
 	$(am__cd) $(top_srcdir) && \
-	  $(AUTOMAKE) --gnu ikvm-native/Makefile
+	  $(AUTOMAKE) --foreign ikvm-native/Makefile
 .PRECIOUS: Makefile
 Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
 	@case '$?' in \
diff --git a/libgc/ChangeLog b/libgc/ChangeLog
index af75452..049c727 100644
--- a/libgc/ChangeLog
+++ b/libgc/ChangeLog
@@ -1,121 +1,3 @@
-2011-04-19  Rodrigo Kumpera  <kumpera at gmail.com>
-
-	publish the same events as pthread_stop_world
-
-2011-08-02  Geoff Norton  <grompf at gmail.com>
-
-	[gc] Darwin/AMD64 can have 64-bit thread id's, so we need to
-	ensure we cast properly to make sure the modulus has a valid
-	result. Additionally add support for x86_THREAD_STATE64.
-
-2011-04-29  Geoff Norton  <grompf at sublimeintervention.com>
-
-	[boehm] Avoid a ENOMEM when allocating across an unallocated page
-
-	A very rare allocation pattern could cause the boehm free list to
-	call the GC_unmap_gap function, which actually calls down into
-	munmap(). Darwins virtual memory manager will return a
-	KERN_INVALID_ADDRESS which is translated into a ENOMEM, if
-	mprotect attempts to change the protection of a range which
-	includes an unallocated page. We address this by just mmap() back
-	to ANON, instead of actually unallocating the page.
-
-2011-04-07  Zoltan Varga  <vargaz at gmail.com>
-
-	Add a membar to libgc's UNLOCK () on arm. Fixes #683409.
-
-2011-01-07  Marek Safar  <marek.safar at gmail.com>
-
-	Ignore more files
-
-2010-12-16  Elijah Taylor  <elijahtaylor at google.com>
-
-	Merged in rest of Native Client changes, untested
-
-2010-12-04  Zoltan Varga  <vargaz at gmail.com>
-
-	Really fix the ia64 build.
-
-2010-12-04  Zoltan Varga  <vargaz at gmail.com>
-
-	Hopefully fix the ia64 libgc build.
-
-2010-12-02  Zoltan Varga  <vargaz at gmail.com>
-
-	Revert "Fix the OSC build breakage by only compiling mach_dep.c on
-	openbsd."
-
-	This reverts commit 103450e4a270ed47fa93fc0a99fcdb95e602c5fa.
-
-2010-12-01  Zoltan Varga  <vargaz at gmail.com>
-
-	Fix the OSC build breakage by only compiling mach_dep.c on
-	openbsd.
-
-2010-11-29  Robert Nagy  <robert at openbsd.org>
-
-	Add support for the internal boehm-gc on OpenBSD
-
-2010-11-29  Robert Nagy  <robert at openbsd.org>
-
-	Add support for the internal boehm-gc on OpenBSD
-
-2010-11-15  Zoltan Varga  <vargaz at gmail.com>
-
-	Make libgc use dolt too.
-
-2010-11-14  Zoltan Varga  <vargaz at gmail.com>
-
-	Remove the unused and incomplete CMake build scripts for now.
-
-2010-11-12  Gonzalo Paniagua Javier  <gonzalo.mono at gmail.com>
-
-	make -jX should work in libgc/ now.
-
-2010-10-18  Zoltan Varga  <vargaz at gmail.com>
-
-	Avoid calling sem_post on a uninitialized semaphore during thread
-	attach, it works under linux, but fails under *bsd. Fixes #647248.
-
-2010-10-14  Geoff Norton  <grompf at sublimeintervention.com>
-
-	[android] pthread_kill cannot be used safely on android
-
-	Android's fork() function does not properly update the
-	pthread_internal_t->threadid variable to point to the tid of the
-	fork()'d thread, and instead still points to the pid of zygote. As
-	a result we need to track the android tid's manually since
-	gettid() is sane, and use an alternate to pthread_kill on android
-	Additionally, disable sgen support on android until the same work
-	has been done there
-
-	r: kumpera, vargaz
-
-2010-10-08  Gonzalo Paniagua Javier  <gonzalo.mono at gmail.com>
-
-	Undo mach_dep change.
-
-2010-10-08  Gonzalo Paniagua Javier  <gonzalo.mono at gmail.com>
-
-	Allow -jX when compiling libgc
-
-	Add mach_dep.c to the sources. Fixes bug #644933. Thanks to
-	Mathias Ruediger.
-
-2010-09-29  Koushik Dutta  <koushd at gmail.com>
-
-	Work around Android's pthread/kernel_id/fork bug to fix mono
-	multithreading and GC_stop_world in processes that have been
-	forked.
-
-2010-08-26  Zoltan Varga  <vargaz at gmail.com>
-
-	Avoid warnings on machines with cpus > 16.
-
-2010-08-25  Gonzalo Paniagua Javier  <gonzalo.mono at gmail.com>
-
-	Add --quiet-build (on by default)
-
 2010-07-27  Geoff Norton  <gnorton at novell.com>
 
 	* darwin_stop_world.c: Dont track unneeded registers for amd64.
diff --git a/libgc/ChangeLog.old b/libgc/ChangeLog.old
deleted file mode 100644
index 049c727..0000000
--- a/libgc/ChangeLog.old
+++ /dev/null
@@ -1,803 +0,0 @@
-2010-07-27  Geoff Norton  <gnorton at novell.com>
-
-	* darwin_stop_world.c: Dont track unneeded registers for amd64.
-
-2010-06-29  Geoff Norton  <gnorton at novell.com>
-
-	* include/private/gc_locks.h: Implement armv6+ variants of
-	GC_test_and_set
-
-2010-06-14  Geoff Norton  <gnorton at novell.com>
-
-	* dyn_load.c: Fix one other place where l_addr could be null on 
-	bionic.
-
-2010-05-31  Geoff Norton  <gnorton at novell.com>
-
-	* dyn_load.c: Its possible for linkmap->l_addr to be null for the
-	linker entry on some systems (Android/Bionic based libc's)
-
-2010-04-23  Geoff Norton  <gnorton at novell.com>
-
-	* include/private/gcconfig.h: Darwin x86-64 bit support.
-	* darwin_stop_world.c: Ditto
-
-2010-04-19  Jonathan Pryor  <jpryor at novell.com>
-
-	* include/private/gcconfig.h: Android platforms are built atop Linux,
-	  don't use glibc, and uses `environ` instead of `__environ`.
-	* configure.in: Use AC_CHECK_LIB() to check for pthread instead of
-	  just blindly linking to -lpthread, as Android includes pthread
-	  support within libc and doesn't provide a separate libpthread.
-
-2010-03-09  Zoltan Varga  <vargaz at gmail.com>
-
-	* include/private/gc_locks.h: Fix amd64 build with newer gcc's.
-
-2010-03-04  David S. Miller  <davem at davemloft.net>
-
-       * include/private/gc_locks.h: Add SPARC implementations of
-       GC_compare_and_exchange and GC_memory_barrier.
-
-2010-02-22  Zoltan Varga  <vargaz at gmail.com>
-
-	* obj_map.c (GC_add_map_entry): Speed this up for the common case where
-	GC_register_displacement () was never called.
-
-2010-01-29  Geoff Norton  <gnorton at novell.com>
-
-	* include/private/gcconfig.h: Don't define NO_PTHREAD_TRYLOCK on darwin-x86
-	Patch from Tom Philpot (tom.philpot at gmail.com)
-
-2009-10-25  Zoltan Varga  <vargaz at gmail.com>
-
-	* misc.c (GC_get_suspend_signal): New API function to return the suspend signal
-	used by libgc.
-
-2009-09-29  Zoltan Varga  <vargaz at gmail.com>
-
-	* solaris_threads.c (GC_thr_daemon): Don't crash if GC_lookup_thread () returns
-	NULL.
-
-2009-09-25  Zoltan Varga  <vargaz at gmail.com>
-
-	* solaris_threads.c (GC_get_orig_stack_size): Remove the annoying 'Large stack
-	limit' warning.
-
-2009-07-20  Geoff Norton  <gnorton at novell.com>
-
-	* darwin_stop_world.c: Fix the x86 version guards to use Apple's
-	properly defined macros.
-
-2009-07-02  jonas echterhoff <jonas at unity3d.com>
-
-	* darwin_stop_world.c: make debugger code compile on
-	OS X.
-
-	* pthread_support.c: give mach ports to the debugger instead of pthreads,
-	as those can be iterated over from another executable.
-
-2009-06-22  Neale Ferguson <neale at sinenomine.net>
-
-	* include/private/gc_locks.h: Fix typo in 390 version of GC_compare_and_exchange
-	and define a null memory barrier.
-
-2009-06-16  Geoff Norton  <gnorton at novell.com>
-
-	* include/private/gcconfig.h:  Disable static scanning on this platform
-	* misc.c: Enable platform-specific disabling of static scanning
-
-2009-06-06  Zoltan Varga  <vargaz at gmail.com>
-
-	* CMakeLists.txt: Fix handling of powerpc and the selection of 
-	threads. Delete commented out stuff.
-	
-	* CMakeLists.txt: CMake build file for libgc.
-
-2009-05-18  Miguel de Icaza  <miguel at novell.com>
-
-	* include/private/gcconfig.h: Add support for Linux on the PS3
-
-2009-04-28  Zoltan Varga  <vargaz at gmail.com>
-
-	* misc.c (GC_init): Avoid casting an lvalue. Fixes part of #498692.
-
-2009-04-24  Kostyantyn Gushtin, Yevgen Kiruha, Serhiy Naumenko, Serhiy
-Stetskovych and Ian Dichkovsky <mono at n-ix.com.ua>
-
-	* include/private/gcconfig.h: Changes to support 64-bit ABI on MIPS.
-	Add an additional condition for a proper defining of  ALIGNMENT
-	and CPP_WORDSZ.
-
-2009-04-10  Zoltan Varga  <vargaz at gmail.com>
-
-	* include/private/gc_locks.h (GC_test_and_set): Merge a change from libgc
-	7.1's libatomic-ops to fix the ppc build with gcc 4.4.
-
-2009-02-23  Zoltan Varga  <vargaz at gmail.com>
-
-	* os_dep.c (GC_init_linux_data_start): Avoid the call to GC_find_limit ()
-	if GC_no_dls is TRUE, as it is not needed and it complicates debugging since
-	it causes a SIGSEGV.
-
-2009-01-18  Zoltan Varga  <vargaz at gmail.com>
-
-	* include/private/gcconfig.h: Applied patch from Koushik Dutta
-	(koush at koushikdutta.com). Define SEARCH_FOR_DATA_START for android.
-
-2008-11-18  Mark Probst  <mark.probst at gmail.com>
-
-	* include/private/gc_locks.h (test_and_set): The PPC64 case is
-	wrong, as it operates on 64 bit values, not on 32 bit ones as the
-	function requires.  The PPC32 case is sufficient.
-
-2008-09-29  Geoff Norton  <gnorton at novell.com>
-
-	* include/private/gcconfig.h: Make Darwin/ARM use mmap() instead of
-	sbrk() for its allocator implementation.
-
-2008-08-28  Geoff Norton  <gnorton at novell.com>
-
-	* darwin_stop_world.c:
-	* include/private/gcconfig.h: Add support for Darwin/ARM
-
-2008-08-12  Geoff Norton  <gnorton at novell.com>
-
-	* pthread_support.c: GCC shipped with SLES9 ppc gets confused with our current
-	GC_setspecific define.  Unfold the define into a static inline on all platforms
-	except ppc where it is a static leaf function.
-
-2008-08-10  Zoltan Varga  <vargaz at gmail.com>
-
-	* include/private/gc_locks.h: Add amd64 support so parallel mark works on
-	amd64 too.
-
-2008-08-05  Andreas Färber  <andreas.faerber at web.de>
-
-	* autogen.sh: Suppress arguments warning for NOCONFIGURE.
-	
-	Contributed under MIT/X11 license.
-
-2008-08-03  Zoltan Varga  <vargaz at gmail.com>
-
-	* pthread_support.c (GC_thread_exit_proc): Null out the tls key to prevent the
-	dtor function from being callled, since that would read freed memory.
-
-2008-05-23  Massimiliano Mantione  <massi at ximian.com>
-	* alloc.c: Moved emitting "GC_EVENT_START" and "GC_EVENT_END" events
-	from "GC_maybe_gc" to "GC_try_to_collect_inner".
-
-2008-05-19  Zoltan Varga  <vargaz at gmail.com>
-
-	* configure.in: Add two variables for passing CPPFLAGS/CFLAGS from the parent
-	configure.
-
-2008-04-28  Kornél Pál  <kornelpal at gmail.com>
-
-	* include/gc.h: Add GC_DllMain.
-	* win32_threads.c: Rename DllMain to GC_DllMain.
-
-	Contributed under MIT/X11 license.
-
-2008-04-15  Jonathan Chambers  <joncham at gmail.com>
-	* include/private/gcconfig.h: Backport GC7 code to support Win64.
-	* win32_threads.c: Backport GC7 code to support Win64.
-
-2008-02-07  Massimiliano Mantione  <massi at ximian.com>
-	* include/gc.h: (GCEventType): Added start-stop the world events.
-	* pthread_stop_world.c: (GC_stop_world and GC_start_world): hooked
-	start-stop the world events.
-
-2007-11-05  Geoff Norton  <gnorton at novell.com>
-
-	* darwin_stop_world.c: Correct the structure name on Darwin-x86 for Leopard.
-
-2007-11-05  Geoff Norton  <gnorton at novell.com>
-
-	* darwin_stop_world.c: Also push ebp when pushing all stacks on Leopard
-	and pre-Leopard.
-
-2007-11-01  Geoff Norton  <gnorton at novell.com>
-
-	* darwin_stop_world.c:  Handle Leopards renaming of some structure
-	members.
-
-Mon Sep 24 16:15:47 CEST 2007 Paolo Molaro <lupus at ximian.com>
-
-	* include/private/gc_priv.h: increase the default MAX_HEAP_SECTS
-	value (bug#314759, bug#324318).
-
-Tue Sep 11 16:22:28 CEST 2007 Paolo Molaro <lupus at ximian.com>
-
-	* pthread_support.c: export GC_thread_tls.
-
-2007-08-22  Martin Baulig  <martin at ximian.com>
-
-	* pthread_stop_world.c
-	(GC_mono_debugger_add_all_threads): Removed.
-	(GC_mono_debugger_get_stack_ptr): New public function.
-
-Wed Jul 4 17:46:19 CEST 2007 Paolo Molaro <lupus at ximian.com>
-
-	* darwin_stop_world.c: use a larger array for GC_mach_threads
-	(it'll need to be enlarged dynamically, but it's with the world
-	stopped, bug #81974).
-
-2007-05-09  Jonathan Chambers  <joncham at gmail.com>
-
-	* win32_threads.c: If SuspendThread fails, don't abort. Instead
-	remove thread from GC, as this only seems to happen when thread is
-	terminating.
-
-2007-03-29  Zoltan Varga  <vargaz at gmail.com>
-
-	* autogen.sh: Applied patch from Priit Laes <amd at store20.com>. Fix the running
-	of libtoolize.
-
-	* ltmain.sh config.sub config.guess: Removed, libtoolize creates them now.
-
-2007-03-13  Jonathan Chambers  <joncham at gmail.com>
-
-	* include/gc.h: Fix _WIN64 typedefs.
-	* libgc.vcproj: Fix Release target and begin Win64 port.
-	
-2007-02-01  Geoff Norton  <gnorton at customerdna.com>
-
-	* include/private/gc_pthread_redirects.h:
-	* include/private/gc_config_macros.h:
-	* include/private/gc_priv.h:
-	* configure.in:
-	* pthread_support.c
-	* specific.c:  Support for NetBSD-CURRENT.  Loosely based on NetBSD
-	pkgsrc patch.
-
-2006-12-22  Robert Jordan  <robertj at gmx.net>
-
-	* include/private/gcconfig.h, os_dep.c:
-	Add FreeBSD/amd64 support. Based on a FreeBSD Port Collection patch.
-	r=Paolo.
-
-2006-11-19  Allan Hsu <allan at counterpop.net>
-
-	* libgc/darwin_stop_world.c, libgc/include/private/gc_priv.h,
-	libgc/os_dep.c: Fixes to make the GC work on OSX/Intel with XCode
-	2.4 (10.4u SDK and newer).
-
-	This code should work with older versions of the SDK as well. 
-
-Tue Oct 10 16:58:37 CEST 2006 Paolo Molaro <lupus at ximian.com>
-
-	* darwin_stop_world.c: patch from Allan Hsu <allan at counterpop.net>
-	to avoid using memory just after freeing it.
-
-2006-08-31  Zoltan Varga  <vargaz at freemail.hu>
-
-	* libgc.vcproj: Define GC_INSIDE_DLL on VC build too.
-
-2006-08-18  Zoltan Varga  <vargaz at gmail.com>
-
-	* Makefile.am (EXTRA_DIST): Fix make dist.
-
-	* libtool.m4: Removed, should not be in SVN.
-
-2006-07-19  Zoltan Varga  <vargaz at gmail.com>
-
-	* configure.in: Applied patch from Sergey Tikhonov <tsv at solvo.ru>. Beginning
-	of alpha support.
-
-2006-06-28  Martin Baulig  <martin at ximian.com>
-
-	* darwin_stop_world.c, pthread_support.c: Committing a patch from
-	Allan Hsu <allan at imeem.com> to fix memory leaks; see bug #78628.
-
-2006-06-26  Zoltan Varga  <vargaz at gmail.com>
-
-	* solaris_threads.c: And another one.
-
-	* solaris_pthreads.c: Avoid another solaris/x86 #error.
-
-2006-04-08  Zoltan Varga  <vargaz at gmail.com>
-
-	* dyn_load.c: Avoid #error "large files are not supported by libelf" errors on solaris/x86.
-
-2006-05-24  Martin Baulig  <martin at ximian.com>
-
-	* doc/debugger-support.txt: Removed; this issue turned out to be
-	something completely different and the patch mentioned in this
-	file is already reverted.
-
-2006-05-23  Zoltan Varga  <vargaz at gmail.com>
-
-	* os_dep.c (GC_unix_get_mem): Add an assert to bail out early if the runtime is
-	run on a machine with smaller page size than HBLKSIZE.
-
-2006-05-19  Martin Baulig  <martin at ximian.com>
-
-	* include/gc.h: Don't include "libgc-mono-debugger.h".
-
-	* pthread_support.c, pthread_stop_world.c: Include it here.
-
-2006-05-17  Martin Baulig  <martin at ximian.com>
-
-	* pthread-support.c, pthread-stop-world.c: Put the debugger stuff
-	inside a `#if LIBGC_MONO_DEBUGGER_SUPPORTED' conditional.
-
-2006-05-17  Martin Baulig  <martin at ximian.com>
-
-	Fix a weird race condition which prevented XSP from working inside
-	the debugger - see doc/debugger-issues.txt for details.
-
-	* include/gc.h: Moved the "libgc-mono-debugger.h" #include down
-	after the gc_pthread_redirects.h one.
-
-	* include/libgc-mono-debugger.h
-	(GCThreadFunctions): Added `thread_created' and `thread_exited'.
-	(GC_mono_debugger_add_all_threads): New function prototype.
-
-	* pthread_stop_world.c (gc_thread_vtable): Allow the vtable and
-	any function in it be NULL; use NULL as the default vtable.
-	(GC_mono_debugger_add_all_threads): New public function.
-
-	* pthread_support.c
-	(GC_delete_thread): Call `gc_thread_vtable->thread_exited()'.
-	(GC_thr_init): Call `gc_thread_vtable->thread_created()'.
-
-2006-04-05  Zoltan Varga  <vargaz at gmail.com>
-
-	* include/private/gcconfig.h (LINUX and SPARC): Applied patch from 
-	David S. Miller <davem at davemloft.net>: Do not
-       use _etest and GC_SysVGetDataStart() to figure out DATASTART.
-       Instead use either SEARCH_FOR_DATA_START or __environ, based
-       upon GLIBC version.
-
-2006-03-25  Zoltan Varga  <vargaz at gmail.com>
-
-	* configure.in: Applied patch from David S. Miller <davem at davemloft.net>: Fix support for sparc/linux.
-
-Mon Mar 20 18:56:21 CET 2006 Paolo Molaro <lupus at ximian.com>
-
-	* include/gc.h: enable pthread redirection on darwin, too.
-	* include/gc_pthread_redirects.h: completed from Bryan Berg.
-
-Thu Feb 9 16:20:55 CET 2006 Paolo Molaro <lupus at ximian.com>
-
-	* os_dep.c, include/private/gcconfig.h, darwin_stop_world.c:
-	OSX/x86 support, mostly from Geoff Norton <gnorton at customerdna.com>.
-
-Wed Feb 1 18:23:55 CET 2006 Paolo Molaro <lupus at ximian.com>
-
-	* pthread_support.c, *: back out Zoltan's patch since it's
-	incorrect.
-	The correct fix it to execute the cleanup from inside
-	the thread also when using the __thread var to access the
-	current GC_thread.
-
-2006-02-01  Zoltan Varga  <vargaz at gmail.com>
-
-	* pthread_support.c (GC_thread_deregister_foreign): New public API
-	function to deregister a foreign thread from the GC.
-	(GC_destroy_thread_local): Clean up the TLS key too.
-	
-Tue Jan 24 12:34:06 CET 2006 Paolo Molaro <lupus at ximian.com>
-
-	* *: update from upstream changes.
-
-2006-01-21  Martin Baulig  <martin at ximian.com>
-
-	* include/Makefile.am: Don't install libgc-mono-debugger.h.
-
-2006-01-21  Martin Baulig  <martin at ximian.com>
-
-	* include/libgc-mono-debugger.h: Call the conditional
-	`_IN_THE_MONO_DEBUGGER', not `IN_MONO_DEBUGGER'.
-
-2006-01-11  Zoltan Varga  <vargaz at gmail.com>
-
-	* include/private/gcconfig.h: Undef _FILE_OFFSET_BITS on sparc.
-
-2006-01-03  Geoff Norton  <gnorton at customerdna.com>
-
-	* darwin_stop_world.c:  Merge a patch from Bruce Mitchener that fixes a small
-	leak on OS X.
-
-2005-12-26  Zoltan Varga  <vargaz at gmail.com>
-
-	* include/private/gcconfig.h: Disable PROC_VDB on solaris/x86 as it
-	doesn't seem to work.
-
-2005-12-06  Todd Berman  <tberman at off.net>
-
-	* pthread_support.c (GC_thread_register_foreign): Wrap a GC_printf1
-	inside a #ifdef DEBUG_THREADS like the others. Based on a patch from
-	Bryan Berg (bryan AT imeem DOT com).
-
-2005-10-11  Zoltan Varga  <vargaz at gmail.com>
-
-	* pthread_support.c (GC_thread_deregister_foreign): Make this return
-	void instead of void*.
-
-2005-09-29  Raja R Harinath  <harinath at gmail.com>
-
-	* configure.host: Fix syntax error.
-
-2005-08-24  Zoltan Varga  <vargaz at gmail.com>
-
-	* win32_threads.c: If GC_INSIDE_DLL is defined, define the DllMain function for automatic registration
-	of threads with the GC.
-
-	* configure.in: Add an option for turning GC_INSIDE_DLL on.	
-
-2005-08-25  Zoltan Varga  <vargaz at freemail.hu>
-
-	* solaris_threads.c (GC_thread_register_foreign): Add dummy implementation.
-
-Mon Aug 22 10:41:41 BST 2005 Paolo Molaro <lupus at ximian.com>
-
-	* include/private/gc_locks.h: make gcc generate correct code for swp
-	(patch by tomba at bat.org, Tomi Valkeinen).
-
-2005-08-20  Zoltan Varga  <vargaz at freemail.hu>
-
-	* include/private/gc_locks.h: Fix compilation of GC_test_and_set on IA64 with gcc-3.3.5.
-
-Thu Aug 18 18:08:54 CEST 2005 Paolo Molaro <lupus at ximian.com>
-
-	* include/private/gcconfig.h: use LINUX_STACKBOTTOM on ARM Linux.
-
-Mon Aug 1 16:49:45 CEST 2005 Paolo Molaro <lupus at ximian.com>
-
-	* include/private/pthread_support.h, pthread_support.c: added
-	patch to support registering new threads at runtime (from
-	Michael Meeks <michael.meeks at novell.com>).
-
-2005-07-07  Raja R Harinath  <rharinath at novell.com>
-
-	* Makefile.am (INCLUDES): Add $(top_builddir)/.. to pick up mono's
-	config.h.
-
-Thu Jul 7 12:15:22 CEST 2005 Paolo Molaro <lupus at ximian.com>
-
-	* pthread_support.c: fix compilation when TLS_ALLOC is not defined.
-
-Thu Jul 7 11:59:42 CEST 2005 Paolo Molaro <lupus at ximian.com>
-
-	* pthread_support.c, Makefile.am: make the __thread var use
-	fast access if available (and avoid dlopen issue, bug #75390).
-
-2005-07-05  Ben Maurer  <bmaurer at ximian.com>
-
-	* pthread_stop_world.c (pthread_start_world, _GC_suspend_handler):
-	Make sure that all threads have been started before releasing the
-	GC_lock. Otherwise, the thread table can be corrupt in the restart
-	handler, causing deadlocks and segfaults.
-
-2005-06-22  Zoltan Varga  <vargaz at freemail.hu>
-
-	* include/private/gcconfig.h: Fix amd64 build.
-
-2005-06-21  Ben Maurer  <bmaurer at ximian.com>
-
-	* configure.host: remove -fexceptions, messes up with nptl
-	includes, as on fc4.
-
-2005-06-17  Zoltan Varga  <vargaz at freemail.hu>
-
-	* pthread_support.c: Workaround gcc-3.3 compiler bug.
-
-2005-05-26  Sebastien Pouliot  <sebastien at ximian.com>
-
-	* libgc.vcproj: Project file for libgc.
-
-2005-05-19  Zoltan Varga  <vargaz at freemail.hu>
-
-	* configure.in: Handle i386-*-linux* as well. Fixes #74960.	
-
-Tue May 3 16:28:26 CEST 2005 Paolo Molaro <lupus at ximian.com>
-
-	* os_dep.c: remove usage of libc private symbol.
-
-2005-05-02  Miguel de Icaza  <miguel at novell.com>
-
-	* pthread_stop_world.c (GC_restart_handler, GC_suspend_handler):
-	Wrap the original routines into methods that preserve the value of
-	errno.  Fixes #74740
-
-2005-04-18  Zoltan Varga  <vargaz at freemail.hu>
-
-	* configure.in: Applied another freebsd patch from Bill Middleton (flashdict at gmail.com).
-
-2005-04-15  Zoltan Varga  <vargaz at freemail.hu>
-
-	* configure.in: Applied another freebsd patch from Bill Middleton (flashdict at gmail.com).
-
-2005-04-11  Zoltan Varga  <vargaz at freemail.hu>
-
-	* include/private/gcconfig.h configure.in os_dep.c dyn_load.c: 
-	Applied some freebsd patch from Bill Middleton <flashdict at gmail.com>.
-
-2005-04-06  Zoltan Varga  <vargaz at freemail.hu>
-
-	* solaris_pthreads.c (GC_pthread_detach): Add locking.
-
-	* include/gc_pthread_redirects.h (pthread_detach): Override pthread_detach too.
-
-	* solaris_pthreads.c (GC_pthread_detach): Override pthread_detach too. Fixes
-	#74223.
-
-2005-03-29  Zoltan Varga  <vargaz at freemail.hu>
-
-	* os_dep.c: Add ability to fall back to mmap-ing memory when sbrk
-	fails.
-
-	* include/private/gcconfig.h: Enable FALLBACK_TO_MMAP on amd64. Fixes
-	#73882.
-
-	* config.guess config.sub ltmain.sh: Update these files with more
-	up-to-date versions. Fixes #74071.
-
-2005-03-09  Zoltan Varga  <vargaz at freemail.hu>
-
-	* solaris_threads.c (GC_thread_is_registered): Add this for solaris
-	too.
-
-	* pthread_support.c (GC_thread_is_registered): Move this outside of
-	the #ifdef THREAD_LOCAL_ALLOC.
-
-2005-03-03  Zoltan Varga  <vargaz at freemail.hu>
-
-	* include/gc.h pthread_support.c win32_threads.: Add 
-	GC_thread_is_registered API function.
-
-2005-02-17  Raja R Harinath  <rharinath at novell.com>
-
-	* acinclude.m4: Don't include distributed libtool.m4.
-	
-Wed Feb 16 22:30:54 CET 2005 Paolo Molaro <lupus at ximian.com>
-
-	* alloc.c: tune the code to collect instead of expanding
-	the heap if there are many finalizers and we reclaimed some
-	memory from cleaning the finalization queue (should fix
-	bug #71001 and #70701).
-
-2005-02-07  Geoff Norton  <gnorton at customerdna.com>
-
-	* include/private/gc_priv.h: Bump the max root sets to 1024
-
-Mon Jan 24 16:39:42 CET 2005 Paolo Molaro <lupus at ximian.com>
-
-	* alloc.c, include/gc.h: add event notification, mostly from 
-	a patch by Ben Maurer.
-
-2005-01-23  Geoff Norton  <gnorton at customerdna.com>
-	
-	* os_dir.c: Change GC_task_self to be static everywhere on Darwin.
-	Allows gcc4.0 to compile.
-
-Tue Jan 18 11:19:47 CET 2005 Paolo Molaro <lupus at ximian.com>
-
-	* pthread_stop_world.c: handle EINTR from sem_wait() call.
-
-2004-08-20 Ben Maurer  <bmaurer at users.sourceforge.net>
-
-	* include/private/gc_priv.h: use the test glib does
-	for EXPECT.
-
-2004-08-20  Zoltan Varga  <vargaz at freemail.hu>
-
-	* include/private/gc_priv.h (__GNUC_PREREQ): Fix typo spotted by Ben.
-
-	* include/gc_local_alloc.h pthread_support.c: Add 
-	GC_local_gcj_fast_malloc.
-
-	* include/private/gc_priv.h (EXPECT): Enable this on modern versions
-	of gcc.
-
-2004-08-17 Ben Maurer  <bmaurer at users.sourceforge.net>
-
-	* pthread_support.c: make __thread variable static
-	
-	* include/gc_local_alloc.c: make the other headers get
-	included before we define our own variable. This fixes
-	up an ordering problem with GCJ and thread local alloc.
-	
-	The problem was that gc.h needed to include gc_local_alloc.h
-	before gc_gcj.h. However, when gc.h was included after
-	GC_LOCAL_ALLOC_H was #defined, it would not include
-	gc_local_alloc.h.
-
-2004-08-16  Zoltan Varga  <vargaz at freemail.hu>
-
-	* Makefile.am: Create a static version of libmonogc for inclusion into
-	the mono executable.
-
-2004-07-27  John Merryweather Cooper <john_m_cooper at yahoo.com>
-
-	* configure.in:  Fix to properly select flags for pthreads
-	on FreeBSD 4.x (aka -STABLE) and 5.x (aka -CURRENT).
-	
-2004-07-01  Zoltan Varga  <vargaz at freemail.hu>
-
-	* include/install-sh doc/install-sh: New files.
-
-2004-06-30  Zoltan Varga  <vargaz at freemail.hu>
-
-	* include/private/gc_priv.h (SMALL_OBJ): Add Hans' fix for crashes
-	seen on SPARC64.
-
-Thu Jun 24 15:39:00 CEST 2004 Paolo Molaro <lupus at ximian.com>
-
-	* alloc.c: use Hans' fix for bug #59557.
-
-2004-06-18  Dick Porter  <dick at ximian.com>
-
-	* darwin_stop_world.c: Make the world actually stop.  This seems
-	to fix the finalizer thread signalling deadlock in 58706.
-
-Sat Jun 5 19:38:20 CEST 2004 Paolo Molaro <lupus at ximian.com>
-
-	* alloc.c: temporary fix for bug #59557.
-
-Tue May 25 13:41:08 EDT 2004 Paolo Molaro <lupus at ximian.com>
-
-	* darwin_stop_world.c: more thread died races fixes.
-
-2004-05-21  Martin Baulig  <martin at ximian.com>
-
-	* pthread_stop_world.c: Merged the changes from linux_threads.c.
-
-	* linux_threads.c: Removed, this file no longer exists in the
-	latest upstream version.
-
-2004-05-20  Martin Baulig  <martin at ximian.com>
-
-	* libgc.patch: Removed.  There's no need to have this in a
-	separate file, just use CVS.
-
-2004-05-20  Jackson Harper  <jackson at ximian.com>
-
-	* Makefile.am: Remove tests from EXTRA_DIST.
-	
-Wed May 19 18:57:30 CEST 2004 Paolo Molaro <lupus at ximian.com>
-
-	* darwin_stop_world.c: deal with threads that die before they can be
-	suspended (should solce the thread_info failed aborts).
-
-Wed May 19 18:42:23 CEST 2004 Paolo Molaro <lupus at ximian.com>
-
-	* configure.in, Makefile.am: update correctly from the libgc sources:
-	this excludes linux_threads.c from the build: Martin will have to port
-	his changes to the new code, since linux_threads.c doesn't exist
-	anymore in the upstream sources.
-
-2004-05-19  Raja R Harinath  <rharinath at novell.com>
-
-	* configure.in ($enable_embed_check): New internal option that
-	will be passed by mono's configure.
-	(THREADS): Use $with_libgc_threads, which is passed by mono's
-	configure.
-
-2004-05-18  Martin Baulig  <martin at ximian.com>
-
-	Importing Boehm GC 6.3 alpha 6.
-
-2004-03-24 Ben Maurer  <bmaurer at users.sourceforge.net>
-
-	* gcj_mlc.c: Do finalization.
-
-	This is a patch from Hans Boehm that fixes a bug where
-	GC_gcj_malloc never does finalization.
-
-	See:
-	http://www.hpl.hp.com/hosted/linux/mail-archives/gc/2004-March/000359.html
-	http://bugzilla.ximian.com/show_bug.cgi?id=55644
-
-	Fixes #55644.
-
-	I am checking this in at Zoltan's request.
-
-2003-11-07  Zoltan Varga  <vargaz at freemail.hu>
-
-	* autogen.sh: Fix previous patch and silence noisy GNU which.	
-	
-	* autogen.sh: Applied patch from Peter Teichman (peter at ximian.com). 
-	Use 'glibtool' instead of 'libtool' on OSX. 
-
-2003-10-01  Pedro Martínez Juliá  <yoro at wanadoo.es>
-
-	* Makefile.am: Change lib_LTLIBRARIES to noinst_LTLIBRARIES because
-	of libmonogc is included inside libmono and without this change it
-	breaks down and not include it.
-
-2003-09-26  Zoltan Varga  <vargaz at freemail.hu>
-
-	* mips_sgi_mach_dep.S: Remove since it is a duplicate of .s and it
-	breaks cvs checkout under windows.
-
-Wed Sep 17 17:29:11 CEST 2003 Paolo Molaro <lupus at ximian.com>
-
-	* configure.in: disable ALL_INTERIOR_POINTERS: managed pointers
-	are not allowed in the heap, so this should be safe and it helps
-	reducing false positives.
-
-2003-08-28  Dick Porter  <dick at ximian.com>
-
-	* pthread_support.c:
-	* aix_irix_threads.c:  Applied bug fix from alpha libgc
-
-2003-08-26  Martin Baulig  <martin at ximian.com>
-
-	Imported Boehm GC 6.2.
-
-2003-06-20  Martin Baulig  <martin at ximian.com>
-
-	* include/gc.h: Fixed compiler warnings.
-
-2003-06-09  Martin Baulig  <martin at ximian.com>
-
-	* include/libgc-mono-debugger.h: New header file.  This is
-	installed as <mono/private/libgc-mono-debugger.h>, but it's a
-	private header files and may only be used by the Mono Debugger.
-
-	* Makefile.am: Build libmonogc.la and install it.  For some
-	reason, using a libtool convenience archive doesn't work here.
-
-2003-06-08  Martin Baulig  <martin at ximian.com>
-
-	* libgc-mono.pc.in: Removed.
-
-	* Makefile.am: Don't install anything.
-
-	* configure.in: We're now embedded in mono and can't be built as a
-	stand-alone module any longer.
-
-2003-05-17  Martin Baulig  <martin at ximian.com>
-
-	* libgc.patch, libgc.log: Added patch against the original version
-	and a ChangeLog entry.
-
-2003-05-17  Martin Baulig  <martin at ximian.com>
-
-	* misc.c, os_dep.c, include/private/gc_priv.h: Back to the
-	original version.
-
-	* linux_threads.c: Use the `gc_thread_vtable' internally in this
-	file instead of calling it from the header files.
-
-2003-05-16  Martin Baulig  <martin at ximian.com>
-
-	* include/gc.h (GCThreadFunctions): Removed the `pthread_*'
-	function since we don't need them here.
-
-	* include/gc_pthread_redirects.h: Put back the original version.
-
-2003-04-08  Alp Toker <alp at atoker.com>
-
-	* configure.in: fix automake 1.6 compatibility without breaking
-	previous versions (AM_PROG_AS)
-
-2003-03-31  Martin Baulig  <martin at ximian.com>
-
-	* include/gc.h (GCThreadFunctions): New type.
-	(gc_thread_vtable): New global variable.
-
-	* include/gc_pthread_redirects.h: Use the `gc_thread_vtable'
-	vtable for the redirects instead of calling the methods directly.
-	This allows us to override them at runtime.	
-
-2003-03-31  Martin Baulig  <martin at ximian.com>
-
-	* include/Makefile.am: Install gc_pthread_redirects.h.
-
-	* include/gc.h: `#include <gc/gc_pthread_redirects.h>', not
-	`#include "gc_pthread_redirects.h"'.
-
-2003-03-31  Martin Baulig  <martin at ximian.com>
-
-	* configure.in: Call the package `libgc-mono'.
-
-	* libgc-mono.pc.in: Added pkg-config files.
-
-2003-03-31  Martin Baulig  <martin at ximian.com>
-
-	This is a modified version of Boehm GC 6.1.
-
diff --git a/libgc/Makefile.am b/libgc/Makefile.am
index daf32fe..e8a0fd5 100644
--- a/libgc/Makefile.am
+++ b/libgc/Makefile.am
@@ -18,9 +18,9 @@
 ## files that should be in the distribution are not mentioned in this
 ## Makefile.am.
 
-AUTOMAKE_OPTIONS = foreign
+ACLOCAL_AMFLAGS = -I m4
 
-SUBDIRS = include doc
+SUBDIRS = m4 include doc
 
 INCLUDES = -I$(top_builddir)/.. -I$(top_srcdir)/..
 
diff --git a/libgc/Makefile.in b/libgc/Makefile.in
index bd9ef76..c2ea06d 100644
--- a/libgc/Makefile.in
+++ b/libgc/Makefile.in
@@ -322,8 +322,8 @@ target_all = @target_all@
 top_build_prefix = @top_build_prefix@
 top_builddir = @top_builddir@
 top_srcdir = @top_srcdir@
-AUTOMAKE_OPTIONS = foreign
-SUBDIRS = include doc
+ACLOCAL_AMFLAGS = -I m4
+SUBDIRS = m4 include doc
 
 #
 # libtool is not capable of creating shared/static versions of a convenience
diff --git a/libgc/configure b/libgc/configure
index c718883..3e4f01e 100755
--- a/libgc/configure
+++ b/libgc/configure
@@ -2971,8 +2971,8 @@ fi
 
 
 # Define the identity of the package.
- PACKAGE=libgc-mono
- VERSION=6.6
+ PACKAGE='libgc-mono'
+ VERSION='6.6'
 
 
 # Some tools Automake needs.
@@ -15643,7 +15643,7 @@ if test x$enable_quiet_build = xyes; then
 
 fi
 
-ac_config_files="$ac_config_files Makefile include/Makefile include/private/Makefile doc/Makefile"
+ac_config_files="$ac_config_files Makefile m4/Makefile include/Makefile include/private/Makefile doc/Makefile"
 
 ac_config_commands="$ac_config_commands default"
 
@@ -16791,6 +16791,7 @@ do
     "quiet") CONFIG_COMMANDS="$CONFIG_COMMANDS quiet" ;;
     "quiet-libtool") CONFIG_COMMANDS="$CONFIG_COMMANDS quiet-libtool" ;;
     "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;;
+    "m4/Makefile") CONFIG_FILES="$CONFIG_FILES m4/Makefile" ;;
     "include/Makefile") CONFIG_FILES="$CONFIG_FILES include/Makefile" ;;
     "include/private/Makefile") CONFIG_FILES="$CONFIG_FILES include/private/Makefile" ;;
     "doc/Makefile") CONFIG_FILES="$CONFIG_FILES doc/Makefile" ;;
diff --git a/libgc/configure.in b/libgc/configure.in
index e68d738..f4b4379 100644
--- a/libgc/configure.in
+++ b/libgc/configure.in
@@ -14,12 +14,12 @@
 
 dnl Process this file with autoconf to produce configure.
 
-AC_PREREQ(2.53)
-AC_INIT(libgc-mono, 6.6, Hans_Boehm at hp.com)
-
-AM_INIT_AUTOMAKE(libgc-mono, 6.6, no-define)
+AC_PREREQ([2.53])
+AC_INIT([libgc-mono], [6.6], [Hans_Boehm at hp.com])
 
+AM_INIT_AUTOMAKE([1.9 no-define foreign])
 AC_CONFIG_SRCDIR(gcj_mlc.c)
+AC_CONFIG_MACRO_DIR([m4])
 AC_CANONICAL_HOST
 
 AC_SUBST(PACKAGE)
@@ -524,6 +524,7 @@ if test x$enable_quiet_build = xyes; then
 fi
 
 AC_OUTPUT(Makefile
+m4/Makefile
 include/Makefile
 include/private/Makefile
 doc/Makefile,,
diff --git a/libgc/doc/Makefile.in b/libgc/doc/Makefile.in
index cb9830e..122e694 100644
--- a/libgc/doc/Makefile.in
+++ b/libgc/doc/Makefile.in
@@ -244,9 +244,9 @@ $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__confi
 	      exit 1;; \
 	  esac; \
 	done; \
-	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu doc/Makefile'; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign doc/Makefile'; \
 	$(am__cd) $(top_srcdir) && \
-	  $(AUTOMAKE) --gnu doc/Makefile
+	  $(AUTOMAKE) --foreign doc/Makefile
 .PRECIOUS: Makefile
 Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
 	@case '$?' in \
diff --git a/libgc/include/Makefile.in b/libgc/include/Makefile.in
index c0eb0b7..29211bb 100644
--- a/libgc/include/Makefile.in
+++ b/libgc/include/Makefile.in
@@ -239,9 +239,9 @@ $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__confi
 	      exit 1;; \
 	  esac; \
 	done; \
-	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu include/Makefile'; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign include/Makefile'; \
 	$(am__cd) $(top_srcdir) && \
-	  $(AUTOMAKE) --gnu include/Makefile
+	  $(AUTOMAKE) --foreign include/Makefile
 .PRECIOUS: Makefile
 Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
 	@case '$?' in \
diff --git a/libgc/include/private/Makefile.in b/libgc/include/private/Makefile.in
index 0e01d2c..f4d439f 100644
--- a/libgc/include/private/Makefile.in
+++ b/libgc/include/private/Makefile.in
@@ -194,9 +194,9 @@ $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__confi
 	      exit 1;; \
 	  esac; \
 	done; \
-	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu include/private/Makefile'; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign include/private/Makefile'; \
 	$(am__cd) $(top_srcdir) && \
-	  $(AUTOMAKE) --gnu include/private/Makefile
+	  $(AUTOMAKE) --foreign include/private/Makefile
 .PRECIOUS: Makefile
 Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
 	@case '$?' in \
diff --git a/libgc/include/private/gc_priv.h b/libgc/include/private/gc_priv.h
index 9e19551..da49c0a 100644
--- a/libgc/include/private/gc_priv.h
+++ b/libgc/include/private/gc_priv.h
@@ -425,8 +425,8 @@ void GC_print_callers GC_PROTO((struct callinfo info[NFRAMES]));
 # else
 #   if defined(GC_SOLARIS_THREADS) || defined(GC_WIN32_THREADS) \
 	|| defined(GC_PTHREADS)
-      void GC_stop_world();
-      void GC_start_world();
+      void GC_stop_world(void);
+      void GC_start_world(void);
 #     define STOP_WORLD() GC_stop_world()
 #     define START_WORLD() GC_start_world()
 #   else
@@ -1842,7 +1842,7 @@ void GC_dump GC_PROTO((void));
 #   ifdef __DMC__
       GC_API void GC_noop(...);
 #   else
-      GC_API void GC_noop();
+      GC_API void GC_noop(void*,...);
 #   endif
 # endif
 
@@ -1931,17 +1931,17 @@ void GC_err_puts GC_PROTO((GC_CONST char *s));
     /* GC_notify_all_builder() is called when GC_fl_builder_count	*/
     /* reaches 0.							*/
 
-     extern void GC_acquire_mark_lock();
-     extern void GC_release_mark_lock();
-     extern void GC_notify_all_builder();
+     extern void GC_acquire_mark_lock(void);
+     extern void GC_release_mark_lock(void);
+     extern void GC_notify_all_builder(void);
      /* extern void GC_wait_builder(); */
-     extern void GC_wait_for_reclaim();
+     extern void GC_wait_for_reclaim(void);
 
      extern word GC_fl_builder_count;	/* Protected by mark lock.	*/
 # endif /* PARALLEL_MARK || THREAD_LOCAL_ALLOC */
 # ifdef PARALLEL_MARK
-     extern void GC_notify_all_marker();
-     extern void GC_wait_marker();
+     extern void GC_notify_all_marker(void);
+     extern void GC_wait_marker(void);
      extern word GC_mark_no;		/* Protected by mark lock.	*/
 
      extern void GC_help_marker(word my_mark_no);
diff --git a/libgc/include/private/gcconfig.h b/libgc/include/private/gcconfig.h
index 8276079..4f7a080 100644
--- a/libgc/include/private/gcconfig.h
+++ b/libgc/include/private/gcconfig.h
@@ -325,7 +325,7 @@
         These aren't used when dyld support is enabled (it is by default) */
 #    define DATASTART ((ptr_t) get_etext())
 #    define DATAEND	((ptr_t) get_end())
-#    define STACKBOTTOM ((ptr_t) 0xc0000000)
+#    define STACKBOTTOM ((ptr_t) pthread_get_stackaddr_np(pthread_self()))
 #    define USE_MMAP
 #    define USE_MMAP_ANON
 #    define USE_ASM_PUSH_REGS
@@ -1202,7 +1202,8 @@
 #   ifdef NACL
 #	define OS_TYPE "NACL"
 	extern int etext[];
-#	define DATASTART ((ptr_t)((((word) (etext)) + 0xfff) & ~0xfff))
+//#	define DATASTART ((ptr_t)((((word) (etext)) + 0xfff) & ~0xfff))
+#       define DATASTART ((ptr_t)0x10000000)
 	extern int _end[];
 #	define DATAEND (_end)
 #	ifdef STACK_GRAN
@@ -1445,6 +1446,7 @@
 #     define DYNAMIC_LOADING
       extern int _end[];
 #     define DATAEND (_end)
+#pragma weak __data_start
       extern int __data_start[];
 #     define DATASTART ((ptr_t)(__data_start))
 #     if defined(_MIPS_SZPTR) && (_MIPS_SZPTR == 64)
@@ -2480,7 +2482,7 @@
 	           extern void *ps3_get_mem (size_t size);
 #              define GET_MEM(bytes) (struct hblk*) ps3_get_mem (bytes)
 #           else
-		extern ptr_t GC_unix_get_mem();
+		extern ptr_t GC_unix_get_mem(word size);
 #               define GET_MEM(bytes) (struct hblk *)GC_unix_get_mem(bytes)
 #endif
 #	      endif
diff --git a/libgc/include/private/pthread_support.h b/libgc/include/private/pthread_support.h
index dbd6dbc..076a6d2 100644
--- a/libgc/include/private/pthread_support.h
+++ b/libgc/include/private/pthread_support.h
@@ -102,7 +102,7 @@ GC_thread GC_lookup_thread(pthread_t id);
 
 void GC_thread_deregister_foreign (void *data);
 
-void GC_stop_init();
+void GC_stop_init(void);
 
 extern GC_bool GC_in_thread_creation;
 	/* We may currently be in thread creation or destruction.	*/
diff --git a/libgc/m4/Makefile.am b/libgc/m4/Makefile.am
new file mode 100644
index 0000000..af864e3
--- /dev/null
+++ b/libgc/m4/Makefile.am
@@ -0,0 +1 @@
+EXTRA_DIST = $(wildcard *.m4)
diff --git a/libgc/m4/Makefile.in b/libgc/m4/Makefile.in
new file mode 100644
index 0000000..501d28f
--- /dev/null
+++ b/libgc/m4/Makefile.in
@@ -0,0 +1,372 @@
+# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009  Free Software Foundation,
+# Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+ at SET_MAKE@
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+subdir = m4
+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \
+	$(top_srcdir)/configure.in
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+	$(ACLOCAL_M4)
+mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+SOURCES =
+DIST_SOURCES =
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AR = @AR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCAS = @CCAS@
+CCASDEPMODE = @CCASDEPMODE@
+CCASFLAGS = @CCASFLAGS@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CXX = @CXX@
+CXXCPP = @CXXCPP@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CXXINCLUDES = @CXXINCLUDES@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DOLT_BASH = @DOLT_BASH@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+EXTRA_TEST_LIBS = @EXTRA_TEST_LIBS@
+FGREP = @FGREP@
+GC_CFLAGS = @GC_CFLAGS@
+GC_VERSION = @GC_VERSION@
+GREP = @GREP@
+INCLUDES = @INCLUDES@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTCOMPILE = @LTCOMPILE@
+LTCXXCOMPILE = @LTCXXCOMPILE@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MKDIR_P = @MKDIR_P@
+MY_CFLAGS = @MY_CFLAGS@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+THREADDLLIBS = @THREADDLLIBS@
+UNWINDLIBS = @UNWINDLIBS@
+VERSION = @VERSION@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+addincludes = @addincludes@
+addlibs = @addlibs@
+addtests = @addtests@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+lt_ECHO = @lt_ECHO@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+target_all = @target_all@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+EXTRA_DIST = $(wildcard *.m4)
+all: all-am
+
+.SUFFIXES:
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__configure_deps)
+	@for dep in $?; do \
+	  case '$(am__configure_deps)' in \
+	    *$$dep*) \
+	      ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+	        && { if test -f $@; then exit 0; else break; fi; }; \
+	      exit 1;; \
+	  esac; \
+	done; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign m4/Makefile'; \
+	$(am__cd) $(top_srcdir) && \
+	  $(AUTOMAKE) --foreign m4/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+	@case '$?' in \
+	  *config.status*) \
+	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+	  *) \
+	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+	esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+mostlyclean-libtool:
+	-rm -f *.lo
+
+clean-libtool:
+	-rm -rf .libs _libs
+tags: TAGS
+TAGS:
+
+ctags: CTAGS
+CTAGS:
+
+
+distdir: $(DISTFILES)
+	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	list='$(DISTFILES)'; \
+	  dist_files=`for file in $$list; do echo $$file; done | \
+	  sed -e "s|^$$srcdirstrip/||;t" \
+	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+	case $$dist_files in \
+	  */*) $(MKDIR_P) `echo "$$dist_files" | \
+			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+			   sort -u` ;; \
+	esac; \
+	for file in $$dist_files; do \
+	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+	  if test -d $$d/$$file; then \
+	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+	    if test -d "$(distdir)/$$file"; then \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+	  else \
+	    test -f "$(distdir)/$$file" \
+	    || cp -p $$d/$$file "$(distdir)/$$file" \
+	    || exit 1; \
+	  fi; \
+	done
+check-am: all-am
+check: check-am
+all-am: Makefile
+installdirs:
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	  `test -z '$(STRIP)' || \
+	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+	@echo "This command is intended for maintainers to use"
+	@echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-libtool mostlyclean-am
+
+distclean: distclean-am
+	-rm -f Makefile
+distclean-am: clean-am distclean-generic
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+	-rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-generic mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: install-am install-strip
+
+.PHONY: all all-am check check-am clean clean-generic clean-libtool \
+	distclean distclean-generic distclean-libtool distdir dvi \
+	dvi-am html html-am info info-am install install-am \
+	install-data install-data-am install-dvi install-dvi-am \
+	install-exec install-exec-am install-html install-html-am \
+	install-info install-info-am install-man install-pdf \
+	install-pdf-am install-ps install-ps-am install-strip \
+	installcheck installcheck-am installdirs maintainer-clean \
+	maintainer-clean-generic mostlyclean mostlyclean-generic \
+	mostlyclean-libtool pdf pdf-am ps ps-am uninstall uninstall-am
+
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/libgc/m4/lib-ld.m4 b/libgc/m4/lib-ld.m4
new file mode 100644
index 0000000..ebb3052
--- /dev/null
+++ b/libgc/m4/lib-ld.m4
@@ -0,0 +1,110 @@
+# lib-ld.m4 serial 4 (gettext-0.18)
+dnl Copyright (C) 1996-2003, 2009-2010 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+dnl Subroutines of libtool.m4,
+dnl with replacements s/AC_/AC_LIB/ and s/lt_cv/acl_cv/ to avoid collision
+dnl with libtool.m4.
+
+dnl From libtool-1.4. Sets the variable with_gnu_ld to yes or no.
+AC_DEFUN([AC_LIB_PROG_LD_GNU],
+[AC_CACHE_CHECK([if the linker ($LD) is GNU ld], [acl_cv_prog_gnu_ld],
+[# I'd rather use --version here, but apparently some GNU ld's only accept -v.
+case `$LD -v 2>&1 </dev/null` in
+*GNU* | *'with BFD'*)
+  acl_cv_prog_gnu_ld=yes ;;
+*)
+  acl_cv_prog_gnu_ld=no ;;
+esac])
+with_gnu_ld=$acl_cv_prog_gnu_ld
+])
+
+dnl From libtool-1.4. Sets the variable LD.
+AC_DEFUN([AC_LIB_PROG_LD],
+[AC_ARG_WITH([gnu-ld],
+[  --with-gnu-ld           assume the C compiler uses GNU ld [default=no]],
+test "$withval" = no || with_gnu_ld=yes, with_gnu_ld=no)
+AC_REQUIRE([AC_PROG_CC])dnl
+AC_REQUIRE([AC_CANONICAL_HOST])dnl
+# Prepare PATH_SEPARATOR.
+# The user is always right.
+if test "${PATH_SEPARATOR+set}" != set; then
+  echo "#! /bin/sh" >conf$$.sh
+  echo  "exit 0"   >>conf$$.sh
+  chmod +x conf$$.sh
+  if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then
+    PATH_SEPARATOR=';'
+  else
+    PATH_SEPARATOR=:
+  fi
+  rm -f conf$$.sh
+fi
+ac_prog=ld
+if test "$GCC" = yes; then
+  # Check if gcc -print-prog-name=ld gives a path.
+  AC_MSG_CHECKING([for ld used by GCC])
+  case $host in
+  *-*-mingw*)
+    # gcc leaves a trailing carriage return which upsets mingw
+    ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;;
+  *)
+    ac_prog=`($CC -print-prog-name=ld) 2>&5` ;;
+  esac
+  case $ac_prog in
+    # Accept absolute paths.
+    [[\\/]* | [A-Za-z]:[\\/]*)]
+      [re_direlt='/[^/][^/]*/\.\./']
+      # Canonicalize the path of ld
+      ac_prog=`echo $ac_prog| sed 's%\\\\%/%g'`
+      while echo $ac_prog | grep "$re_direlt" > /dev/null 2>&1; do
+        ac_prog=`echo $ac_prog| sed "s%$re_direlt%/%"`
+      done
+      test -z "$LD" && LD="$ac_prog"
+      ;;
+  "")
+    # If it fails, then pretend we aren't using GCC.
+    ac_prog=ld
+    ;;
+  *)
+    # If it is relative, then search for the first ld in PATH.
+    with_gnu_ld=unknown
+    ;;
+  esac
+elif test "$with_gnu_ld" = yes; then
+  AC_MSG_CHECKING([for GNU ld])
+else
+  AC_MSG_CHECKING([for non-GNU ld])
+fi
+AC_CACHE_VAL([acl_cv_path_LD],
+[if test -z "$LD"; then
+  IFS="${IFS= 	}"; ac_save_ifs="$IFS"; IFS="${IFS}${PATH_SEPARATOR-:}"
+  for ac_dir in $PATH; do
+    test -z "$ac_dir" && ac_dir=.
+    if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then
+      acl_cv_path_LD="$ac_dir/$ac_prog"
+      # Check to see if the program is GNU ld.  I'd rather use --version,
+      # but apparently some GNU ld's only accept -v.
+      # Break only if it was the GNU/non-GNU ld that we prefer.
+      case `"$acl_cv_path_LD" -v 2>&1 < /dev/null` in
+      *GNU* | *'with BFD'*)
+        test "$with_gnu_ld" != no && break ;;
+      *)
+        test "$with_gnu_ld" != yes && break ;;
+      esac
+    fi
+  done
+  IFS="$ac_save_ifs"
+else
+  acl_cv_path_LD="$LD" # Let the user override the test with a path.
+fi])
+LD="$acl_cv_path_LD"
+if test -n "$LD"; then
+  AC_MSG_RESULT([$LD])
+else
+  AC_MSG_RESULT([no])
+fi
+test -z "$LD" && AC_MSG_ERROR([no acceptable ld found in \$PATH])
+AC_LIB_PROG_LD_GNU
+])
diff --git a/libgc/m4/lib-link.m4 b/libgc/m4/lib-link.m4
new file mode 100644
index 0000000..c73bd8e
--- /dev/null
+++ b/libgc/m4/lib-link.m4
@@ -0,0 +1,774 @@
+# lib-link.m4 serial 21 (gettext-0.18)
+dnl Copyright (C) 2001-2010 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+dnl From Bruno Haible.
+
+AC_PREREQ([2.54])
+
+dnl AC_LIB_LINKFLAGS(name [, dependencies]) searches for libname and
+dnl the libraries corresponding to explicit and implicit dependencies.
+dnl Sets and AC_SUBSTs the LIB${NAME} and LTLIB${NAME} variables and
+dnl augments the CPPFLAGS variable.
+dnl Sets and AC_SUBSTs the LIB${NAME}_PREFIX variable to nonempty if libname
+dnl was found in ${LIB${NAME}_PREFIX}/$acl_libdirstem.
+AC_DEFUN([AC_LIB_LINKFLAGS],
+[
+  AC_REQUIRE([AC_LIB_PREPARE_PREFIX])
+  AC_REQUIRE([AC_LIB_RPATH])
+  pushdef([Name],[translit([$1],[./-], [___])])
+  pushdef([NAME],[translit([$1],[abcdefghijklmnopqrstuvwxyz./-],
+                                [ABCDEFGHIJKLMNOPQRSTUVWXYZ___])])
+  AC_CACHE_CHECK([how to link with lib[]$1], [ac_cv_lib[]Name[]_libs], [
+    AC_LIB_LINKFLAGS_BODY([$1], [$2])
+    ac_cv_lib[]Name[]_libs="$LIB[]NAME"
+    ac_cv_lib[]Name[]_ltlibs="$LTLIB[]NAME"
+    ac_cv_lib[]Name[]_cppflags="$INC[]NAME"
+    ac_cv_lib[]Name[]_prefix="$LIB[]NAME[]_PREFIX"
+  ])
+  LIB[]NAME="$ac_cv_lib[]Name[]_libs"
+  LTLIB[]NAME="$ac_cv_lib[]Name[]_ltlibs"
+  INC[]NAME="$ac_cv_lib[]Name[]_cppflags"
+  LIB[]NAME[]_PREFIX="$ac_cv_lib[]Name[]_prefix"
+  AC_LIB_APPENDTOVAR([CPPFLAGS], [$INC]NAME)
+  AC_SUBST([LIB]NAME)
+  AC_SUBST([LTLIB]NAME)
+  AC_SUBST([LIB]NAME[_PREFIX])
+  dnl Also set HAVE_LIB[]NAME so that AC_LIB_HAVE_LINKFLAGS can reuse the
+  dnl results of this search when this library appears as a dependency.
+  HAVE_LIB[]NAME=yes
+  popdef([NAME])
+  popdef([Name])
+])
+
+dnl AC_LIB_HAVE_LINKFLAGS(name, dependencies, includes, testcode, [missing-message])
+dnl searches for libname and the libraries corresponding to explicit and
+dnl implicit dependencies, together with the specified include files and
+dnl the ability to compile and link the specified testcode. The missing-message
+dnl defaults to 'no' and may contain additional hints for the user.
+dnl If found, it sets and AC_SUBSTs HAVE_LIB${NAME}=yes and the LIB${NAME}
+dnl and LTLIB${NAME} variables and augments the CPPFLAGS variable, and
+dnl #defines HAVE_LIB${NAME} to 1. Otherwise, it sets and AC_SUBSTs
+dnl HAVE_LIB${NAME}=no and LIB${NAME} and LTLIB${NAME} to empty.
+dnl Sets and AC_SUBSTs the LIB${NAME}_PREFIX variable to nonempty if libname
+dnl was found in ${LIB${NAME}_PREFIX}/$acl_libdirstem.
+AC_DEFUN([AC_LIB_HAVE_LINKFLAGS],
+[
+  AC_REQUIRE([AC_LIB_PREPARE_PREFIX])
+  AC_REQUIRE([AC_LIB_RPATH])
+  pushdef([Name],[translit([$1],[./-], [___])])
+  pushdef([NAME],[translit([$1],[abcdefghijklmnopqrstuvwxyz./-],
+                                [ABCDEFGHIJKLMNOPQRSTUVWXYZ___])])
+
+  dnl Search for lib[]Name and define LIB[]NAME, LTLIB[]NAME and INC[]NAME
+  dnl accordingly.
+  AC_LIB_LINKFLAGS_BODY([$1], [$2])
+
+  dnl Add $INC[]NAME to CPPFLAGS before performing the following checks,
+  dnl because if the user has installed lib[]Name and not disabled its use
+  dnl via --without-lib[]Name-prefix, he wants to use it.
+  ac_save_CPPFLAGS="$CPPFLAGS"
+  AC_LIB_APPENDTOVAR([CPPFLAGS], [$INC]NAME)
+
+  AC_CACHE_CHECK([for lib[]$1], [ac_cv_lib[]Name], [
+    ac_save_LIBS="$LIBS"
+    dnl If $LIB[]NAME contains some -l options, add it to the end of LIBS,
+    dnl because these -l options might require -L options that are present in
+    dnl LIBS. -l options benefit only from the -L options listed before it.
+    dnl Otherwise, add it to the front of LIBS, because it may be a static
+    dnl library that depends on another static library that is present in LIBS.
+    dnl Static libraries benefit only from the static libraries listed after
+    dnl it.
+    case " $LIB[]NAME" in
+      *" -l"*) LIBS="$LIBS $LIB[]NAME" ;;
+      *)       LIBS="$LIB[]NAME $LIBS" ;;
+    esac
+    AC_TRY_LINK([$3], [$4],
+      [ac_cv_lib[]Name=yes],
+      [ac_cv_lib[]Name='m4_if([$5], [], [no], [[$5]])'])
+    LIBS="$ac_save_LIBS"
+  ])
+  if test "$ac_cv_lib[]Name" = yes; then
+    HAVE_LIB[]NAME=yes
+    AC_DEFINE([HAVE_LIB]NAME, 1, [Define if you have the lib][$1 library.])
+    AC_MSG_CHECKING([how to link with lib[]$1])
+    AC_MSG_RESULT([$LIB[]NAME])
+  else
+    HAVE_LIB[]NAME=no
+    dnl If $LIB[]NAME didn't lead to a usable library, we don't need
+    dnl $INC[]NAME either.
+    CPPFLAGS="$ac_save_CPPFLAGS"
+    LIB[]NAME=
+    LTLIB[]NAME=
+    LIB[]NAME[]_PREFIX=
+  fi
+  AC_SUBST([HAVE_LIB]NAME)
+  AC_SUBST([LIB]NAME)
+  AC_SUBST([LTLIB]NAME)
+  AC_SUBST([LIB]NAME[_PREFIX])
+  popdef([NAME])
+  popdef([Name])
+])
+
+dnl Determine the platform dependent parameters needed to use rpath:
+dnl   acl_libext,
+dnl   acl_shlibext,
+dnl   acl_hardcode_libdir_flag_spec,
+dnl   acl_hardcode_libdir_separator,
+dnl   acl_hardcode_direct,
+dnl   acl_hardcode_minus_L.
+AC_DEFUN([AC_LIB_RPATH],
+[
+  dnl Tell automake >= 1.10 to complain if config.rpath is missing.
+  m4_ifdef([AC_REQUIRE_AUX_FILE], [AC_REQUIRE_AUX_FILE([config.rpath])])
+  AC_REQUIRE([AC_PROG_CC])                dnl we use $CC, $GCC, $LDFLAGS
+  AC_REQUIRE([AC_LIB_PROG_LD])            dnl we use $LD, $with_gnu_ld
+  AC_REQUIRE([AC_CANONICAL_HOST])         dnl we use $host
+  AC_REQUIRE([AC_CONFIG_AUX_DIR_DEFAULT]) dnl we use $ac_aux_dir
+  AC_CACHE_CHECK([for shared library run path origin], [acl_cv_rpath], [
+    CC="$CC" GCC="$GCC" LDFLAGS="$LDFLAGS" LD="$LD" with_gnu_ld="$with_gnu_ld" \
+    ${CONFIG_SHELL-/bin/sh} "$ac_aux_dir/config.rpath" "$host" > conftest.sh
+    . ./conftest.sh
+    rm -f ./conftest.sh
+    acl_cv_rpath=done
+  ])
+  wl="$acl_cv_wl"
+  acl_libext="$acl_cv_libext"
+  acl_shlibext="$acl_cv_shlibext"
+  acl_libname_spec="$acl_cv_libname_spec"
+  acl_library_names_spec="$acl_cv_library_names_spec"
+  acl_hardcode_libdir_flag_spec="$acl_cv_hardcode_libdir_flag_spec"
+  acl_hardcode_libdir_separator="$acl_cv_hardcode_libdir_separator"
+  acl_hardcode_direct="$acl_cv_hardcode_direct"
+  acl_hardcode_minus_L="$acl_cv_hardcode_minus_L"
+  dnl Determine whether the user wants rpath handling at all.
+  AC_ARG_ENABLE([rpath],
+    [  --disable-rpath         do not hardcode runtime library paths],
+    :, enable_rpath=yes)
+])
+
+dnl AC_LIB_FROMPACKAGE(name, package)
+dnl declares that libname comes from the given package. The configure file
+dnl will then not have a --with-libname-prefix option but a
+dnl --with-package-prefix option. Several libraries can come from the same
+dnl package. This declaration must occur before an AC_LIB_LINKFLAGS or similar
+dnl macro call that searches for libname.
+AC_DEFUN([AC_LIB_FROMPACKAGE],
+[
+  pushdef([NAME],[translit([$1],[abcdefghijklmnopqrstuvwxyz./-],
+                                [ABCDEFGHIJKLMNOPQRSTUVWXYZ___])])
+  define([acl_frompackage_]NAME, [$2])
+  popdef([NAME])
+  pushdef([PACK],[$2])
+  pushdef([PACKUP],[translit(PACK,[abcdefghijklmnopqrstuvwxyz./-],
+                                  [ABCDEFGHIJKLMNOPQRSTUVWXYZ___])])
+  define([acl_libsinpackage_]PACKUP,
+    m4_ifdef([acl_libsinpackage_]PACKUP, [acl_libsinpackage_]PACKUP[[, ]],)[lib$1])
+  popdef([PACKUP])
+  popdef([PACK])
+])
+
+dnl AC_LIB_LINKFLAGS_BODY(name [, dependencies]) searches for libname and
+dnl the libraries corresponding to explicit and implicit dependencies.
+dnl Sets the LIB${NAME}, LTLIB${NAME} and INC${NAME} variables.
+dnl Also, sets the LIB${NAME}_PREFIX variable to nonempty if libname was found
+dnl in ${LIB${NAME}_PREFIX}/$acl_libdirstem.
+AC_DEFUN([AC_LIB_LINKFLAGS_BODY],
+[
+  AC_REQUIRE([AC_LIB_PREPARE_MULTILIB])
+  pushdef([NAME],[translit([$1],[abcdefghijklmnopqrstuvwxyz./-],
+                                [ABCDEFGHIJKLMNOPQRSTUVWXYZ___])])
+  pushdef([PACK],[m4_ifdef([acl_frompackage_]NAME, [acl_frompackage_]NAME, lib[$1])])
+  pushdef([PACKUP],[translit(PACK,[abcdefghijklmnopqrstuvwxyz./-],
+                                  [ABCDEFGHIJKLMNOPQRSTUVWXYZ___])])
+  pushdef([PACKLIBS],[m4_ifdef([acl_frompackage_]NAME, [acl_libsinpackage_]PACKUP, lib[$1])])
+  dnl Autoconf >= 2.61 supports dots in --with options.
+  pushdef([P_A_C_K],[m4_if(m4_version_compare(m4_defn([m4_PACKAGE_VERSION]),[2.61]),[-1],[translit(PACK,[.],[_])],PACK)])
+  dnl By default, look in $includedir and $libdir.
+  use_additional=yes
+  AC_LIB_WITH_FINAL_PREFIX([
+    eval additional_includedir=\"$includedir\"
+    eval additional_libdir=\"$libdir\"
+  ])
+  AC_ARG_WITH(P_A_C_K[-prefix],
+[[  --with-]]P_A_C_K[[-prefix[=DIR]  search for ]PACKLIBS[ in DIR/include and DIR/lib
+  --without-]]P_A_C_K[[-prefix     don't search for ]PACKLIBS[ in includedir and libdir]],
+[
+    if test "X$withval" = "Xno"; then
+      use_additional=no
+    else
+      if test "X$withval" = "X"; then
+        AC_LIB_WITH_FINAL_PREFIX([
+          eval additional_includedir=\"$includedir\"
+          eval additional_libdir=\"$libdir\"
+        ])
+      else
+        additional_includedir="$withval/include"
+        additional_libdir="$withval/$acl_libdirstem"
+        if test "$acl_libdirstem2" != "$acl_libdirstem" \
+           && ! test -d "$withval/$acl_libdirstem"; then
+          additional_libdir="$withval/$acl_libdirstem2"
+        fi
+      fi
+    fi
+])
+  dnl Search the library and its dependencies in $additional_libdir and
+  dnl $LDFLAGS. Using breadth-first-seach.
+  LIB[]NAME=
+  LTLIB[]NAME=
+  INC[]NAME=
+  LIB[]NAME[]_PREFIX=
+  dnl HAVE_LIB${NAME} is an indicator that LIB${NAME}, LTLIB${NAME} have been
+  dnl computed. So it has to be reset here.
+  HAVE_LIB[]NAME=
+  rpathdirs=
+  ltrpathdirs=
+  names_already_handled=
+  names_next_round='$1 $2'
+  while test -n "$names_next_round"; do
+    names_this_round="$names_next_round"
+    names_next_round=
+    for name in $names_this_round; do
+      already_handled=
+      for n in $names_already_handled; do
+        if test "$n" = "$name"; then
+          already_handled=yes
+          break
+        fi
+      done
+      if test -z "$already_handled"; then
+        names_already_handled="$names_already_handled $name"
+        dnl See if it was already located by an earlier AC_LIB_LINKFLAGS
+        dnl or AC_LIB_HAVE_LINKFLAGS call.
+        uppername=`echo "$name" | sed -e 'y|abcdefghijklmnopqrstuvwxyz./-|ABCDEFGHIJKLMNOPQRSTUVWXYZ___|'`
+        eval value=\"\$HAVE_LIB$uppername\"
+        if test -n "$value"; then
+          if test "$value" = yes; then
+            eval value=\"\$LIB$uppername\"
+            test -z "$value" || LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$value"
+            eval value=\"\$LTLIB$uppername\"
+            test -z "$value" || LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }$value"
+          else
+            dnl An earlier call to AC_LIB_HAVE_LINKFLAGS has determined
+            dnl that this library doesn't exist. So just drop it.
+            :
+          fi
+        else
+          dnl Search the library lib$name in $additional_libdir and $LDFLAGS
+          dnl and the already constructed $LIBNAME/$LTLIBNAME.
+          found_dir=
+          found_la=
+          found_so=
+          found_a=
+          eval libname=\"$acl_libname_spec\"    # typically: libname=lib$name
+          if test -n "$acl_shlibext"; then
+            shrext=".$acl_shlibext"             # typically: shrext=.so
+          else
+            shrext=
+          fi
+          if test $use_additional = yes; then
+            dir="$additional_libdir"
+            dnl The same code as in the loop below:
+            dnl First look for a shared library.
+            if test -n "$acl_shlibext"; then
+              if test -f "$dir/$libname$shrext"; then
+                found_dir="$dir"
+                found_so="$dir/$libname$shrext"
+              else
+                if test "$acl_library_names_spec" = '$libname$shrext$versuffix'; then
+                  ver=`(cd "$dir" && \
+                        for f in "$libname$shrext".*; do echo "$f"; done \
+                        | sed -e "s,^$libname$shrext\\\\.,," \
+                        | sort -t '.' -n -r -k1,1 -k2,2 -k3,3 -k4,4 -k5,5 \
+                        | sed 1q ) 2>/dev/null`
+                  if test -n "$ver" && test -f "$dir/$libname$shrext.$ver"; then
+                    found_dir="$dir"
+                    found_so="$dir/$libname$shrext.$ver"
+                  fi
+                else
+                  eval library_names=\"$acl_library_names_spec\"
+                  for f in $library_names; do
+                    if test -f "$dir/$f"; then
+                      found_dir="$dir"
+                      found_so="$dir/$f"
+                      break
+                    fi
+                  done
+                fi
+              fi
+            fi
+            dnl Then look for a static library.
+            if test "X$found_dir" = "X"; then
+              if test -f "$dir/$libname.$acl_libext"; then
+                found_dir="$dir"
+                found_a="$dir/$libname.$acl_libext"
+              fi
+            fi
+            if test "X$found_dir" != "X"; then
+              if test -f "$dir/$libname.la"; then
+                found_la="$dir/$libname.la"
+              fi
+            fi
+          fi
+          if test "X$found_dir" = "X"; then
+            for x in $LDFLAGS $LTLIB[]NAME; do
+              AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"])
+              case "$x" in
+                -L*)
+                  dir=`echo "X$x" | sed -e 's/^X-L//'`
+                  dnl First look for a shared library.
+                  if test -n "$acl_shlibext"; then
+                    if test -f "$dir/$libname$shrext"; then
+                      found_dir="$dir"
+                      found_so="$dir/$libname$shrext"
+                    else
+                      if test "$acl_library_names_spec" = '$libname$shrext$versuffix'; then
+                        ver=`(cd "$dir" && \
+                              for f in "$libname$shrext".*; do echo "$f"; done \
+                              | sed -e "s,^$libname$shrext\\\\.,," \
+                              | sort -t '.' -n -r -k1,1 -k2,2 -k3,3 -k4,4 -k5,5 \
+                              | sed 1q ) 2>/dev/null`
+                        if test -n "$ver" && test -f "$dir/$libname$shrext.$ver"; then
+                          found_dir="$dir"
+                          found_so="$dir/$libname$shrext.$ver"
+                        fi
+                      else
+                        eval library_names=\"$acl_library_names_spec\"
+                        for f in $library_names; do
+                          if test -f "$dir/$f"; then
+                            found_dir="$dir"
+                            found_so="$dir/$f"
+                            break
+                          fi
+                        done
+                      fi
+                    fi
+                  fi
+                  dnl Then look for a static library.
+                  if test "X$found_dir" = "X"; then
+                    if test -f "$dir/$libname.$acl_libext"; then
+                      found_dir="$dir"
+                      found_a="$dir/$libname.$acl_libext"
+                    fi
+                  fi
+                  if test "X$found_dir" != "X"; then
+                    if test -f "$dir/$libname.la"; then
+                      found_la="$dir/$libname.la"
+                    fi
+                  fi
+                  ;;
+              esac
+              if test "X$found_dir" != "X"; then
+                break
+              fi
+            done
+          fi
+          if test "X$found_dir" != "X"; then
+            dnl Found the library.
+            LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }-L$found_dir -l$name"
+            if test "X$found_so" != "X"; then
+              dnl Linking with a shared library. We attempt to hardcode its
+              dnl directory into the executable's runpath, unless it's the
+              dnl standard /usr/lib.
+              if test "$enable_rpath" = no \
+                 || test "X$found_dir" = "X/usr/$acl_libdirstem" \
+                 || test "X$found_dir" = "X/usr/$acl_libdirstem2"; then
+                dnl No hardcoding is needed.
+                LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_so"
+              else
+                dnl Use an explicit option to hardcode DIR into the resulting
+                dnl binary.
+                dnl Potentially add DIR to ltrpathdirs.
+                dnl The ltrpathdirs will be appended to $LTLIBNAME at the end.
+                haveit=
+                for x in $ltrpathdirs; do
+                  if test "X$x" = "X$found_dir"; then
+                    haveit=yes
+                    break
+                  fi
+                done
+                if test -z "$haveit"; then
+                  ltrpathdirs="$ltrpathdirs $found_dir"
+                fi
+                dnl The hardcoding into $LIBNAME is system dependent.
+                if test "$acl_hardcode_direct" = yes; then
+                  dnl Using DIR/libNAME.so during linking hardcodes DIR into the
+                  dnl resulting binary.
+                  LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_so"
+                else
+                  if test -n "$acl_hardcode_libdir_flag_spec" && test "$acl_hardcode_minus_L" = no; then
+                    dnl Use an explicit option to hardcode DIR into the resulting
+                    dnl binary.
+                    LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_so"
+                    dnl Potentially add DIR to rpathdirs.
+                    dnl The rpathdirs will be appended to $LIBNAME at the end.
+                    haveit=
+                    for x in $rpathdirs; do
+                      if test "X$x" = "X$found_dir"; then
+                        haveit=yes
+                        break
+                      fi
+                    done
+                    if test -z "$haveit"; then
+                      rpathdirs="$rpathdirs $found_dir"
+                    fi
+                  else
+                    dnl Rely on "-L$found_dir".
+                    dnl But don't add it if it's already contained in the LDFLAGS
+                    dnl or the already constructed $LIBNAME
+                    haveit=
+                    for x in $LDFLAGS $LIB[]NAME; do
+                      AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"])
+                      if test "X$x" = "X-L$found_dir"; then
+                        haveit=yes
+                        break
+                      fi
+                    done
+                    if test -z "$haveit"; then
+                      LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-L$found_dir"
+                    fi
+                    if test "$acl_hardcode_minus_L" != no; then
+                      dnl FIXME: Not sure whether we should use
+                      dnl "-L$found_dir -l$name" or "-L$found_dir $found_so"
+                      dnl here.
+                      LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_so"
+                    else
+                      dnl We cannot use $acl_hardcode_runpath_var and LD_RUN_PATH
+                      dnl here, because this doesn't fit in flags passed to the
+                      dnl compiler. So give up. No hardcoding. This affects only
+                      dnl very old systems.
+                      dnl FIXME: Not sure whether we should use
+                      dnl "-L$found_dir -l$name" or "-L$found_dir $found_so"
+                      dnl here.
+                      LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-l$name"
+                    fi
+                  fi
+                fi
+              fi
+            else
+              if test "X$found_a" != "X"; then
+                dnl Linking with a static library.
+                LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_a"
+              else
+                dnl We shouldn't come here, but anyway it's good to have a
+                dnl fallback.
+                LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-L$found_dir -l$name"
+              fi
+            fi
+            dnl Assume the include files are nearby.
+            additional_includedir=
+            case "$found_dir" in
+              */$acl_libdirstem | */$acl_libdirstem/)
+                basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e "s,/$acl_libdirstem/"'*$,,'`
+                if test "$name" = '$1'; then
+                  LIB[]NAME[]_PREFIX="$basedir"
+                fi
+                additional_includedir="$basedir/include"
+                ;;
+              */$acl_libdirstem2 | */$acl_libdirstem2/)
+                basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e "s,/$acl_libdirstem2/"'*$,,'`
+                if test "$name" = '$1'; then
+                  LIB[]NAME[]_PREFIX="$basedir"
+                fi
+                additional_includedir="$basedir/include"
+                ;;
+            esac
+            if test "X$additional_includedir" != "X"; then
+              dnl Potentially add $additional_includedir to $INCNAME.
+              dnl But don't add it
+              dnl   1. if it's the standard /usr/include,
+              dnl   2. if it's /usr/local/include and we are using GCC on Linux,
+              dnl   3. if it's already present in $CPPFLAGS or the already
+              dnl      constructed $INCNAME,
+              dnl   4. if it doesn't exist as a directory.
+              if test "X$additional_includedir" != "X/usr/include"; then
+                haveit=
+                if test "X$additional_includedir" = "X/usr/local/include"; then
+                  if test -n "$GCC"; then
+                    case $host_os in
+                      linux* | gnu* | k*bsd*-gnu) haveit=yes;;
+                    esac
+                  fi
+                fi
+                if test -z "$haveit"; then
+                  for x in $CPPFLAGS $INC[]NAME; do
+                    AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"])
+                    if test "X$x" = "X-I$additional_includedir"; then
+                      haveit=yes
+                      break
+                    fi
+                  done
+                  if test -z "$haveit"; then
+                    if test -d "$additional_includedir"; then
+                      dnl Really add $additional_includedir to $INCNAME.
+                      INC[]NAME="${INC[]NAME}${INC[]NAME:+ }-I$additional_includedir"
+                    fi
+                  fi
+                fi
+              fi
+            fi
+            dnl Look for dependencies.
+            if test -n "$found_la"; then
+              dnl Read the .la file. It defines the variables
+              dnl dlname, library_names, old_library, dependency_libs, current,
+              dnl age, revision, installed, dlopen, dlpreopen, libdir.
+              save_libdir="$libdir"
+              case "$found_la" in
+                */* | *\\*) . "$found_la" ;;
+                *) . "./$found_la" ;;
+              esac
+              libdir="$save_libdir"
+              dnl We use only dependency_libs.
+              for dep in $dependency_libs; do
+                case "$dep" in
+                  -L*)
+                    additional_libdir=`echo "X$dep" | sed -e 's/^X-L//'`
+                    dnl Potentially add $additional_libdir to $LIBNAME and $LTLIBNAME.
+                    dnl But don't add it
+                    dnl   1. if it's the standard /usr/lib,
+                    dnl   2. if it's /usr/local/lib and we are using GCC on Linux,
+                    dnl   3. if it's already present in $LDFLAGS or the already
+                    dnl      constructed $LIBNAME,
+                    dnl   4. if it doesn't exist as a directory.
+                    if test "X$additional_libdir" != "X/usr/$acl_libdirstem" \
+                       && test "X$additional_libdir" != "X/usr/$acl_libdirstem2"; then
+                      haveit=
+                      if test "X$additional_libdir" = "X/usr/local/$acl_libdirstem" \
+                         || test "X$additional_libdir" = "X/usr/local/$acl_libdirstem2"; then
+                        if test -n "$GCC"; then
+                          case $host_os in
+                            linux* | gnu* | k*bsd*-gnu) haveit=yes;;
+                          esac
+                        fi
+                      fi
+                      if test -z "$haveit"; then
+                        haveit=
+                        for x in $LDFLAGS $LIB[]NAME; do
+                          AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"])
+                          if test "X$x" = "X-L$additional_libdir"; then
+                            haveit=yes
+                            break
+                          fi
+                        done
+                        if test -z "$haveit"; then
+                          if test -d "$additional_libdir"; then
+                            dnl Really add $additional_libdir to $LIBNAME.
+                            LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-L$additional_libdir"
+                          fi
+                        fi
+                        haveit=
+                        for x in $LDFLAGS $LTLIB[]NAME; do
+                          AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"])
+                          if test "X$x" = "X-L$additional_libdir"; then
+                            haveit=yes
+                            break
+                          fi
+                        done
+                        if test -z "$haveit"; then
+                          if test -d "$additional_libdir"; then
+                            dnl Really add $additional_libdir to $LTLIBNAME.
+                            LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }-L$additional_libdir"
+                          fi
+                        fi
+                      fi
+                    fi
+                    ;;
+                  -R*)
+                    dir=`echo "X$dep" | sed -e 's/^X-R//'`
+                    if test "$enable_rpath" != no; then
+                      dnl Potentially add DIR to rpathdirs.
+                      dnl The rpathdirs will be appended to $LIBNAME at the end.
+                      haveit=
+                      for x in $rpathdirs; do
+                        if test "X$x" = "X$dir"; then
+                          haveit=yes
+                          break
+                        fi
+                      done
+                      if test -z "$haveit"; then
+                        rpathdirs="$rpathdirs $dir"
+                      fi
+                      dnl Potentially add DIR to ltrpathdirs.
+                      dnl The ltrpathdirs will be appended to $LTLIBNAME at the end.
+                      haveit=
+                      for x in $ltrpathdirs; do
+                        if test "X$x" = "X$dir"; then
+                          haveit=yes
+                          break
+                        fi
+                      done
+                      if test -z "$haveit"; then
+                        ltrpathdirs="$ltrpathdirs $dir"
+                      fi
+                    fi
+                    ;;
+                  -l*)
+                    dnl Handle this in the next round.
+                    names_next_round="$names_next_round "`echo "X$dep" | sed -e 's/^X-l//'`
+                    ;;
+                  *.la)
+                    dnl Handle this in the next round. Throw away the .la's
+                    dnl directory; it is already contained in a preceding -L
+                    dnl option.
+                    names_next_round="$names_next_round "`echo "X$dep" | sed -e 's,^X.*/,,' -e 's,^lib,,' -e 's,\.la$,,'`
+                    ;;
+                  *)
+                    dnl Most likely an immediate library name.
+                    LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$dep"
+                    LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }$dep"
+                    ;;
+                esac
+              done
+            fi
+          else
+            dnl Didn't find the library; assume it is in the system directories
+            dnl known to the linker and runtime loader. (All the system
+            dnl directories known to the linker should also be known to the
+            dnl runtime loader, otherwise the system is severely misconfigured.)
+            LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-l$name"
+            LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }-l$name"
+          fi
+        fi
+      fi
+    done
+  done
+  if test "X$rpathdirs" != "X"; then
+    if test -n "$acl_hardcode_libdir_separator"; then
+      dnl Weird platform: only the last -rpath option counts, the user must
+      dnl pass all path elements in one option. We can arrange that for a
+      dnl single library, but not when more than one $LIBNAMEs are used.
+      alldirs=
+      for found_dir in $rpathdirs; do
+        alldirs="${alldirs}${alldirs:+$acl_hardcode_libdir_separator}$found_dir"
+      done
+      dnl Note: acl_hardcode_libdir_flag_spec uses $libdir and $wl.
+      acl_save_libdir="$libdir"
+      libdir="$alldirs"
+      eval flag=\"$acl_hardcode_libdir_flag_spec\"
+      libdir="$acl_save_libdir"
+      LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$flag"
+    else
+      dnl The -rpath options are cumulative.
+      for found_dir in $rpathdirs; do
+        acl_save_libdir="$libdir"
+        libdir="$found_dir"
+        eval flag=\"$acl_hardcode_libdir_flag_spec\"
+        libdir="$acl_save_libdir"
+        LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$flag"
+      done
+    fi
+  fi
+  if test "X$ltrpathdirs" != "X"; then
+    dnl When using libtool, the option that works for both libraries and
+    dnl executables is -R. The -R options are cumulative.
+    for found_dir in $ltrpathdirs; do
+      LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }-R$found_dir"
+    done
+  fi
+  popdef([P_A_C_K])
+  popdef([PACKLIBS])
+  popdef([PACKUP])
+  popdef([PACK])
+  popdef([NAME])
+])
+
+dnl AC_LIB_APPENDTOVAR(VAR, CONTENTS) appends the elements of CONTENTS to VAR,
+dnl unless already present in VAR.
+dnl Works only for CPPFLAGS, not for LIB* variables because that sometimes
+dnl contains two or three consecutive elements that belong together.
+AC_DEFUN([AC_LIB_APPENDTOVAR],
+[
+  for element in [$2]; do
+    haveit=
+    for x in $[$1]; do
+      AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"])
+      if test "X$x" = "X$element"; then
+        haveit=yes
+        break
+      fi
+    done
+    if test -z "$haveit"; then
+      [$1]="${[$1]}${[$1]:+ }$element"
+    fi
+  done
+])
+
+dnl For those cases where a variable contains several -L and -l options
+dnl referring to unknown libraries and directories, this macro determines the
+dnl necessary additional linker options for the runtime path.
+dnl AC_LIB_LINKFLAGS_FROM_LIBS([LDADDVAR], [LIBSVALUE], [USE-LIBTOOL])
+dnl sets LDADDVAR to linker options needed together with LIBSVALUE.
+dnl If USE-LIBTOOL evaluates to non-empty, linking with libtool is assumed,
+dnl otherwise linking without libtool is assumed.
+AC_DEFUN([AC_LIB_LINKFLAGS_FROM_LIBS],
+[
+  AC_REQUIRE([AC_LIB_RPATH])
+  AC_REQUIRE([AC_LIB_PREPARE_MULTILIB])
+  $1=
+  if test "$enable_rpath" != no; then
+    if test -n "$acl_hardcode_libdir_flag_spec" && test "$acl_hardcode_minus_L" = no; then
+      dnl Use an explicit option to hardcode directories into the resulting
+      dnl binary.
+      rpathdirs=
+      next=
+      for opt in $2; do
+        if test -n "$next"; then
+          dir="$next"
+          dnl No need to hardcode the standard /usr/lib.
+          if test "X$dir" != "X/usr/$acl_libdirstem" \
+             && test "X$dir" != "X/usr/$acl_libdirstem2"; then
+            rpathdirs="$rpathdirs $dir"
+          fi
+          next=
+        else
+          case $opt in
+            -L) next=yes ;;
+            -L*) dir=`echo "X$opt" | sed -e 's,^X-L,,'`
+                 dnl No need to hardcode the standard /usr/lib.
+                 if test "X$dir" != "X/usr/$acl_libdirstem" \
+                    && test "X$dir" != "X/usr/$acl_libdirstem2"; then
+                   rpathdirs="$rpathdirs $dir"
+                 fi
+                 next= ;;
+            *) next= ;;
+          esac
+        fi
+      done
+      if test "X$rpathdirs" != "X"; then
+        if test -n ""$3""; then
+          dnl libtool is used for linking. Use -R options.
+          for dir in $rpathdirs; do
+            $1="${$1}${$1:+ }-R$dir"
+          done
+        else
+          dnl The linker is used for linking directly.
+          if test -n "$acl_hardcode_libdir_separator"; then
+            dnl Weird platform: only the last -rpath option counts, the user
+            dnl must pass all path elements in one option.
+            alldirs=
+            for dir in $rpathdirs; do
+              alldirs="${alldirs}${alldirs:+$acl_hardcode_libdir_separator}$dir"
+            done
+            acl_save_libdir="$libdir"
+            libdir="$alldirs"
+            eval flag=\"$acl_hardcode_libdir_flag_spec\"
+            libdir="$acl_save_libdir"
+            $1="$flag"
+          else
+            dnl The -rpath options are cumulative.
+            for dir in $rpathdirs; do
+              acl_save_libdir="$libdir"
+              libdir="$dir"
+              eval flag=\"$acl_hardcode_libdir_flag_spec\"
+              libdir="$acl_save_libdir"
+              $1="${$1}${$1:+ }$flag"
+            done
+          fi
+        fi
+      fi
+    fi
+  fi
+  AC_SUBST([$1])
+])
diff --git a/libgc/m4/lib-prefix.m4 b/libgc/m4/lib-prefix.m4
new file mode 100644
index 0000000..1601cea
--- /dev/null
+++ b/libgc/m4/lib-prefix.m4
@@ -0,0 +1,224 @@
+# lib-prefix.m4 serial 7 (gettext-0.18)
+dnl Copyright (C) 2001-2005, 2008-2010 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+dnl From Bruno Haible.
+
+dnl AC_LIB_ARG_WITH is synonymous to AC_ARG_WITH in autoconf-2.13, and
+dnl similar to AC_ARG_WITH in autoconf 2.52...2.57 except that is doesn't
+dnl require excessive bracketing.
+ifdef([AC_HELP_STRING],
+[AC_DEFUN([AC_LIB_ARG_WITH], [AC_ARG_WITH([$1],[[$2]],[$3],[$4])])],
+[AC_DEFUN([AC_][LIB_ARG_WITH], [AC_ARG_WITH([$1],[$2],[$3],[$4])])])
+
+dnl AC_LIB_PREFIX adds to the CPPFLAGS and LDFLAGS the flags that are needed
+dnl to access previously installed libraries. The basic assumption is that
+dnl a user will want packages to use other packages he previously installed
+dnl with the same --prefix option.
+dnl This macro is not needed if only AC_LIB_LINKFLAGS is used to locate
+dnl libraries, but is otherwise very convenient.
+AC_DEFUN([AC_LIB_PREFIX],
+[
+  AC_BEFORE([$0], [AC_LIB_LINKFLAGS])
+  AC_REQUIRE([AC_PROG_CC])
+  AC_REQUIRE([AC_CANONICAL_HOST])
+  AC_REQUIRE([AC_LIB_PREPARE_MULTILIB])
+  AC_REQUIRE([AC_LIB_PREPARE_PREFIX])
+  dnl By default, look in $includedir and $libdir.
+  use_additional=yes
+  AC_LIB_WITH_FINAL_PREFIX([
+    eval additional_includedir=\"$includedir\"
+    eval additional_libdir=\"$libdir\"
+  ])
+  AC_LIB_ARG_WITH([lib-prefix],
+[  --with-lib-prefix[=DIR] search for libraries in DIR/include and DIR/lib
+  --without-lib-prefix    don't search for libraries in includedir and libdir],
+[
+    if test "X$withval" = "Xno"; then
+      use_additional=no
+    else
+      if test "X$withval" = "X"; then
+        AC_LIB_WITH_FINAL_PREFIX([
+          eval additional_includedir=\"$includedir\"
+          eval additional_libdir=\"$libdir\"
+        ])
+      else
+        additional_includedir="$withval/include"
+        additional_libdir="$withval/$acl_libdirstem"
+      fi
+    fi
+])
+  if test $use_additional = yes; then
+    dnl Potentially add $additional_includedir to $CPPFLAGS.
+    dnl But don't add it
+    dnl   1. if it's the standard /usr/include,
+    dnl   2. if it's already present in $CPPFLAGS,
+    dnl   3. if it's /usr/local/include and we are using GCC on Linux,
+    dnl   4. if it doesn't exist as a directory.
+    if test "X$additional_includedir" != "X/usr/include"; then
+      haveit=
+      for x in $CPPFLAGS; do
+        AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"])
+        if test "X$x" = "X-I$additional_includedir"; then
+          haveit=yes
+          break
+        fi
+      done
+      if test -z "$haveit"; then
+        if test "X$additional_includedir" = "X/usr/local/include"; then
+          if test -n "$GCC"; then
+            case $host_os in
+              linux* | gnu* | k*bsd*-gnu) haveit=yes;;
+            esac
+          fi
+        fi
+        if test -z "$haveit"; then
+          if test -d "$additional_includedir"; then
+            dnl Really add $additional_includedir to $CPPFLAGS.
+            CPPFLAGS="${CPPFLAGS}${CPPFLAGS:+ }-I$additional_includedir"
+          fi
+        fi
+      fi
+    fi
+    dnl Potentially add $additional_libdir to $LDFLAGS.
+    dnl But don't add it
+    dnl   1. if it's the standard /usr/lib,
+    dnl   2. if it's already present in $LDFLAGS,
+    dnl   3. if it's /usr/local/lib and we are using GCC on Linux,
+    dnl   4. if it doesn't exist as a directory.
+    if test "X$additional_libdir" != "X/usr/$acl_libdirstem"; then
+      haveit=
+      for x in $LDFLAGS; do
+        AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"])
+        if test "X$x" = "X-L$additional_libdir"; then
+          haveit=yes
+          break
+        fi
+      done
+      if test -z "$haveit"; then
+        if test "X$additional_libdir" = "X/usr/local/$acl_libdirstem"; then
+          if test -n "$GCC"; then
+            case $host_os in
+              linux*) haveit=yes;;
+            esac
+          fi
+        fi
+        if test -z "$haveit"; then
+          if test -d "$additional_libdir"; then
+            dnl Really add $additional_libdir to $LDFLAGS.
+            LDFLAGS="${LDFLAGS}${LDFLAGS:+ }-L$additional_libdir"
+          fi
+        fi
+      fi
+    fi
+  fi
+])
+
+dnl AC_LIB_PREPARE_PREFIX creates variables acl_final_prefix,
+dnl acl_final_exec_prefix, containing the values to which $prefix and
+dnl $exec_prefix will expand at the end of the configure script.
+AC_DEFUN([AC_LIB_PREPARE_PREFIX],
+[
+  dnl Unfortunately, prefix and exec_prefix get only finally determined
+  dnl at the end of configure.
+  if test "X$prefix" = "XNONE"; then
+    acl_final_prefix="$ac_default_prefix"
+  else
+    acl_final_prefix="$prefix"
+  fi
+  if test "X$exec_prefix" = "XNONE"; then
+    acl_final_exec_prefix='${prefix}'
+  else
+    acl_final_exec_prefix="$exec_prefix"
+  fi
+  acl_save_prefix="$prefix"
+  prefix="$acl_final_prefix"
+  eval acl_final_exec_prefix=\"$acl_final_exec_prefix\"
+  prefix="$acl_save_prefix"
+])
+
+dnl AC_LIB_WITH_FINAL_PREFIX([statement]) evaluates statement, with the
+dnl variables prefix and exec_prefix bound to the values they will have
+dnl at the end of the configure script.
+AC_DEFUN([AC_LIB_WITH_FINAL_PREFIX],
+[
+  acl_save_prefix="$prefix"
+  prefix="$acl_final_prefix"
+  acl_save_exec_prefix="$exec_prefix"
+  exec_prefix="$acl_final_exec_prefix"
+  $1
+  exec_prefix="$acl_save_exec_prefix"
+  prefix="$acl_save_prefix"
+])
+
+dnl AC_LIB_PREPARE_MULTILIB creates
+dnl - a variable acl_libdirstem, containing the basename of the libdir, either
+dnl   "lib" or "lib64" or "lib/64",
+dnl - a variable acl_libdirstem2, as a secondary possible value for
+dnl   acl_libdirstem, either the same as acl_libdirstem or "lib/sparcv9" or
+dnl   "lib/amd64".
+AC_DEFUN([AC_LIB_PREPARE_MULTILIB],
+[
+  dnl There is no formal standard regarding lib and lib64.
+  dnl On glibc systems, the current practice is that on a system supporting
+  dnl 32-bit and 64-bit instruction sets or ABIs, 64-bit libraries go under
+  dnl $prefix/lib64 and 32-bit libraries go under $prefix/lib. We determine
+  dnl the compiler's default mode by looking at the compiler's library search
+  dnl path. If at least one of its elements ends in /lib64 or points to a
+  dnl directory whose absolute pathname ends in /lib64, we assume a 64-bit ABI.
+  dnl Otherwise we use the default, namely "lib".
+  dnl On Solaris systems, the current practice is that on a system supporting
+  dnl 32-bit and 64-bit instruction sets or ABIs, 64-bit libraries go under
+  dnl $prefix/lib/64 (which is a symlink to either $prefix/lib/sparcv9 or
+  dnl $prefix/lib/amd64) and 32-bit libraries go under $prefix/lib.
+  AC_REQUIRE([AC_CANONICAL_HOST])
+  acl_libdirstem=lib
+  acl_libdirstem2=
+  case "$host_os" in
+    solaris*)
+      dnl See Solaris 10 Software Developer Collection > Solaris 64-bit Developer's Guide > The Development Environment
+      dnl <http://docs.sun.com/app/docs/doc/816-5138/dev-env?l=en&a=view>.
+      dnl "Portable Makefiles should refer to any library directories using the 64 symbolic link."
+      dnl But we want to recognize the sparcv9 or amd64 subdirectory also if the
+      dnl symlink is missing, so we set acl_libdirstem2 too.
+      AC_CACHE_CHECK([for 64-bit host], [gl_cv_solaris_64bit],
+        [AC_EGREP_CPP([sixtyfour bits], [
+#ifdef _LP64
+sixtyfour bits
+#endif
+           ], [gl_cv_solaris_64bit=yes], [gl_cv_solaris_64bit=no])
+        ])
+      if test $gl_cv_solaris_64bit = yes; then
+        acl_libdirstem=lib/64
+        case "$host_cpu" in
+          sparc*)        acl_libdirstem2=lib/sparcv9 ;;
+          i*86 | x86_64) acl_libdirstem2=lib/amd64 ;;
+        esac
+      fi
+      ;;
+    *)
+      searchpath=`(LC_ALL=C $CC -print-search-dirs) 2>/dev/null | sed -n -e 's,^libraries: ,,p' | sed -e 's,^=,,'`
+      if test -n "$searchpath"; then
+        acl_save_IFS="${IFS= 	}"; IFS=":"
+        for searchdir in $searchpath; do
+          if test -d "$searchdir"; then
+            case "$searchdir" in
+              */lib64/ | */lib64 ) acl_libdirstem=lib64 ;;
+              */../ | */.. )
+                # Better ignore directories of this form. They are misleading.
+                ;;
+              *) searchdir=`cd "$searchdir" && pwd`
+                 case "$searchdir" in
+                   */lib64 ) acl_libdirstem=lib64 ;;
+                 esac ;;
+            esac
+          fi
+        done
+        IFS="$acl_save_IFS"
+      fi
+      ;;
+  esac
+  test -n "$acl_libdirstem2" || acl_libdirstem2="$acl_libdirstem"
+])
diff --git a/libtool.m4 b/libgc/m4/libtool.m4
similarity index 100%
copy from libtool.m4
copy to libgc/m4/libtool.m4
diff --git a/ltoptions.m4 b/libgc/m4/ltoptions.m4
similarity index 100%
copy from ltoptions.m4
copy to libgc/m4/ltoptions.m4
diff --git a/ltsugar.m4 b/libgc/m4/ltsugar.m4
similarity index 100%
copy from ltsugar.m4
copy to libgc/m4/ltsugar.m4
diff --git a/ltversion.m4 b/libgc/m4/ltversion.m4
similarity index 100%
copy from ltversion.m4
copy to libgc/m4/ltversion.m4
diff --git a/lt~obsolete.m4 b/libgc/m4/lt~obsolete.m4
similarity index 100%
copy from lt~obsolete.m4
copy to libgc/m4/lt~obsolete.m4
diff --git a/libgc/mark.c b/libgc/mark.c
index 09dfe92..e14e529 100644
--- a/libgc/mark.c
+++ b/libgc/mark.c
@@ -28,7 +28,7 @@
 #ifdef __WATCOMC__
   void GC_noop(void *p, ...) {}
 #else
-  void GC_noop() {}
+  void GC_noop(void *p, ...) {}
 #endif
 
 /* Single argument version, robust against whole program analysis. */
diff --git a/libgc/pthread_stop_world.c b/libgc/pthread_stop_world.c
index b1f9809..3ecc5e9 100644
--- a/libgc/pthread_stop_world.c
+++ b/libgc/pthread_stop_world.c
@@ -461,6 +461,7 @@ static void pthread_stop_world()
 #else /* NACL */
     GC_thread p;
     int i;
+    int num_sleeps = 0;
 
     #if DEBUG_THREADS
     GC_printf1("pthread_stop_world: num_threads %d\n", nacl_num_gc_threads - 1);
@@ -470,6 +471,7 @@ static void pthread_stop_world()
     
     while (1) {
 	#define NACL_PARK_WAIT_NANOSECONDS 100000
+        #define NANOS_PER_SECOND 1000000000
         int num_threads_parked = 0;
         struct timespec ts;
         int num_used = 0;
@@ -491,6 +493,10 @@ static void pthread_stop_world()
         GC_printf1("sleeping waiting for %d threads to park...\n", nacl_num_gc_threads - num_threads_parked - 1);
         #endif
         nanosleep(&ts, 0);
+        if (++num_sleeps > NANOS_PER_SECOND / NACL_PARK_WAIT_NANOSECONDS) {
+            GC_printf1("GC appears stalled waiting for %d threads to park...\n", nacl_num_gc_threads - num_threads_parked - 1);
+            num_sleeps = 0;
+        }
     }
 
 #endif /* NACL */
@@ -674,10 +680,14 @@ static void pthread_start_world()
       GC_printf0("World started\n");
     #endif
 #else /* NACL */
+    if (GC_notify_event)
+        GC_notify_event (GC_EVENT_PRE_START_WORLD);
 #   if DEBUG_THREADS
     GC_printf0("World starting\n");
 #   endif
     nacl_park_threads_now = 0;
+    if (GC_notify_event)
+        GC_notify_event (GC_EVENT_POST_START_WORLD);
 #endif /* NACL */
 }
 
diff --git a/libgc/pthread_support.c b/libgc/pthread_support.c
index 96e8a01..4b3d825 100644
--- a/libgc/pthread_support.c
+++ b/libgc/pthread_support.c
@@ -688,9 +688,14 @@ extern pthread_mutex_t nacl_thread_alloc_lock;
 extern __thread int nacl_thread_idx;
 extern __thread GC_thread nacl_gc_thread_self;
 
+extern void nacl_pre_syscall_hook();
+extern void nacl_post_syscall_hook();
+extern void nacl_register_gc_hooks(void (*pre)(), void (*post)());
+
 void nacl_initialize_gc_thread()
 {
     int i;
+    nacl_register_gc_hooks(nacl_pre_syscall_hook, nacl_post_syscall_hook);
     pthread_mutex_lock(&nacl_thread_alloc_lock);
     if (!nacl_thread_parking_inited)
     {
diff --git a/m4/Makefile.am b/m4/Makefile.am
new file mode 100644
index 0000000..5d51ce8
--- /dev/null
+++ b/m4/Makefile.am
@@ -0,0 +1 @@
+EXTRA_DIST = iconv.m4 lib-ld.m4 lib-link.m4 lib-prefix.m4 $(wildcard *.m4)
diff --git a/m4/Makefile.in b/m4/Makefile.in
new file mode 100644
index 0000000..503c64b
--- /dev/null
+++ b/m4/Makefile.in
@@ -0,0 +1,441 @@
+# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009  Free Software Foundation,
+# Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+ at SET_MAKE@
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+target_triplet = @target@
+subdir = m4
+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/iconv.m4 \
+	$(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
+	$(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \
+	$(top_srcdir)/m4/progtest.m4 $(top_srcdir)/acinclude.m4 \
+	$(top_srcdir)/configure.in
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+	$(ACLOCAL_M4)
+mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+SOURCES =
+DIST_SOURCES =
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+API_VER = @API_VER@
+AR = @AR@
+AS = @AS@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+BOEHM_DEFINES = @BOEHM_DEFINES@
+BUILD_EXEEXT = @BUILD_EXEEXT@
+BUILD_GLIB_CFLAGS = @BUILD_GLIB_CFLAGS@
+BUILD_GLIB_LIBS = @BUILD_GLIB_LIBS@
+CC = @CC@
+CCAS = @CCAS@
+CCASDEPMODE = @CCASDEPMODE@
+CCASFLAGS = @CCASFLAGS@
+CCDEPMODE = @CCDEPMODE@
+CC_FOR_BUILD = @CC_FOR_BUILD@
+CFLAGS = @CFLAGS@
+CFLAGS_FOR_BUILD = @CFLAGS_FOR_BUILD@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CXX = @CXX@
+CXXCPP = @CXXCPP@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DISABLE_SHARED_HANDLES = @DISABLE_SHARED_HANDLES@
+DLLTOOL = @DLLTOOL@
+DOLT_BASH = @DOLT_BASH@
+DSYMUTIL = @DSYMUTIL@
+DTRACE = @DTRACE@
+DTRACEFLAGS = @DTRACEFLAGS@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+FGREP = @FGREP@
+GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@
+GLIB_CFLAGS = @GLIB_CFLAGS@
+GLIB_LIBS = @GLIB_LIBS@
+GMODULE_CFLAGS = @GMODULE_CFLAGS@
+GMODULE_LIBS = @GMODULE_LIBS@
+GMSGFMT = @GMSGFMT@
+GMSGFMT_015 = @GMSGFMT_015@
+GREP = @GREP@
+HAVE_MSGFMT = @HAVE_MSGFMT@
+HOST_CC = @HOST_CC@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INTL = @INTL@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBC = @LIBC@
+LIBGC_CPPFLAGS = @LIBGC_CPPFLAGS@
+LIBGC_LIBS = @LIBGC_LIBS@
+LIBGC_STATIC_LIBS = @LIBGC_STATIC_LIBS@
+LIBICONV = @LIBICONV@
+LIBMONO_LA = @LIBMONO_LA@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LLVM_CFLAGS = @LLVM_CFLAGS@
+LLVM_CONFIG = @LLVM_CONFIG@
+LLVM_CXXFLAGS = @LLVM_CXXFLAGS@
+LLVM_LDFLAGS = @LLVM_LDFLAGS@
+LLVM_LIBS = @LLVM_LIBS@
+LN_S = @LN_S@
+LTCOMPILE = @LTCOMPILE@
+LTCXXCOMPILE = @LTCXXCOMPILE@
+LTLIBICONV = @LTLIBICONV@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MKDIR_P = @MKDIR_P@
+MONO_DL_NEED_USCORE = @MONO_DL_NEED_USCORE@
+MONO_NACL_ALIGN_MASK_OFF = @MONO_NACL_ALIGN_MASK_OFF@
+MOONLIGHT_DEFINES = @MOONLIGHT_DEFINES@
+MSGFMT = @MSGFMT@
+MSGFMT_015 = @MSGFMT_015@
+MSGMERGE = @MSGMERGE@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OPROFILE_CFLAGS = @OPROFILE_CFLAGS@
+OPROFILE_LIBS = @OPROFILE_LIBS@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PKG_CONFIG = @PKG_CONFIG@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SGEN_DEFINES = @SGEN_DEFINES@
+SHELL = @SHELL@
+SQLITE = @SQLITE@
+SQLITE3 = @SQLITE3@
+STRIP = @STRIP@
+USE_NLS = @USE_NLS@
+VERSION = @VERSION@
+X11 = @X11@
+XATTR_LIB = @XATTR_LIB@
+XGETTEXT = @XGETTEXT@
+XGETTEXT_015 = @XGETTEXT_015@
+XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@
+XMKMF = @XMKMF@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+arch_target = @arch_target@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+docs_dir = @docs_dir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+export_ldflags = @export_ldflags@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+ikvm_native_dir = @ikvm_native_dir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+libgc_dir = @libgc_dir@
+libgdiplus_loc = @libgdiplus_loc@
+libmono_cflags = @libmono_cflags@
+libmono_ldflags = @libmono_ldflags@
+libsuffix = @libsuffix@
+localedir = @localedir@
+localstatedir = @localstatedir@
+lt_ECHO = @lt_ECHO@
+mandir = @mandir@
+mcs_topdir = @mcs_topdir@
+mcs_topdir_from_srcdir = @mcs_topdir_from_srcdir@
+mkdir_p = @mkdir_p@
+mono_build_root = @mono_build_root@
+mono_cfg_dir = @mono_cfg_dir@
+mono_runtime = @mono_runtime@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+reloc_libdir = @reloc_libdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+subdirs = @subdirs@
+sysconfdir = @sysconfdir@
+target = @target@
+target_alias = @target_alias@
+target_cpu = @target_cpu@
+target_os = @target_os@
+target_vendor = @target_vendor@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+EXTRA_DIST = iconv.m4 lib-ld.m4 lib-link.m4 lib-prefix.m4 $(wildcard *.m4)
+all: all-am
+
+.SUFFIXES:
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__configure_deps)
+	@for dep in $?; do \
+	  case '$(am__configure_deps)' in \
+	    *$$dep*) \
+	      ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+	        && { if test -f $@; then exit 0; else break; fi; }; \
+	      exit 1;; \
+	  esac; \
+	done; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign m4/Makefile'; \
+	$(am__cd) $(top_srcdir) && \
+	  $(AUTOMAKE) --foreign m4/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+	@case '$?' in \
+	  *config.status*) \
+	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+	  *) \
+	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+	esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+mostlyclean-libtool:
+	-rm -f *.lo
+
+clean-libtool:
+	-rm -rf .libs _libs
+tags: TAGS
+TAGS:
+
+ctags: CTAGS
+CTAGS:
+
+
+distdir: $(DISTFILES)
+	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	list='$(DISTFILES)'; \
+	  dist_files=`for file in $$list; do echo $$file; done | \
+	  sed -e "s|^$$srcdirstrip/||;t" \
+	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+	case $$dist_files in \
+	  */*) $(MKDIR_P) `echo "$$dist_files" | \
+			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+			   sort -u` ;; \
+	esac; \
+	for file in $$dist_files; do \
+	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+	  if test -d $$d/$$file; then \
+	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+	    if test -d "$(distdir)/$$file"; then \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+	  else \
+	    test -f "$(distdir)/$$file" \
+	    || cp -p $$d/$$file "$(distdir)/$$file" \
+	    || exit 1; \
+	  fi; \
+	done
+check-am: all-am
+check: check-am
+all-am: Makefile
+installdirs:
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	  `test -z '$(STRIP)' || \
+	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+	@echo "This command is intended for maintainers to use"
+	@echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-libtool mostlyclean-am
+
+distclean: distclean-am
+	-rm -f Makefile
+distclean-am: clean-am distclean-generic
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+	-rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-generic mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: install-am install-strip
+
+.PHONY: all all-am check check-am clean clean-generic clean-libtool \
+	distclean distclean-generic distclean-libtool distdir dvi \
+	dvi-am html html-am info info-am install install-am \
+	install-data install-data-am install-dvi install-dvi-am \
+	install-exec install-exec-am install-html install-html-am \
+	install-info install-info-am install-man install-pdf \
+	install-pdf-am install-ps install-ps-am install-strip \
+	installcheck installcheck-am installdirs maintainer-clean \
+	maintainer-clean-generic mostlyclean mostlyclean-generic \
+	mostlyclean-libtool pdf pdf-am ps ps-am uninstall uninstall-am
+
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/m4/iconv.m4 b/m4/iconv.m4
new file mode 100644
index 0000000..e2041b9
--- /dev/null
+++ b/m4/iconv.m4
@@ -0,0 +1,214 @@
+# iconv.m4 serial 11 (gettext-0.18.1)
+dnl Copyright (C) 2000-2002, 2007-2010 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+dnl From Bruno Haible.
+
+AC_DEFUN([AM_ICONV_LINKFLAGS_BODY],
+[
+  dnl Prerequisites of AC_LIB_LINKFLAGS_BODY.
+  AC_REQUIRE([AC_LIB_PREPARE_PREFIX])
+  AC_REQUIRE([AC_LIB_RPATH])
+
+  dnl Search for libiconv and define LIBICONV, LTLIBICONV and INCICONV
+  dnl accordingly.
+  AC_LIB_LINKFLAGS_BODY([iconv])
+])
+
+AC_DEFUN([AM_ICONV_LINK],
+[
+  dnl Some systems have iconv in libc, some have it in libiconv (OSF/1 and
+  dnl those with the standalone portable GNU libiconv installed).
+  AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles
+
+  dnl Search for libiconv and define LIBICONV, LTLIBICONV and INCICONV
+  dnl accordingly.
+  AC_REQUIRE([AM_ICONV_LINKFLAGS_BODY])
+
+  dnl Add $INCICONV to CPPFLAGS before performing the following checks,
+  dnl because if the user has installed libiconv and not disabled its use
+  dnl via --without-libiconv-prefix, he wants to use it. The first
+  dnl AC_TRY_LINK will then fail, the second AC_TRY_LINK will succeed.
+  am_save_CPPFLAGS="$CPPFLAGS"
+  AC_LIB_APPENDTOVAR([CPPFLAGS], [$INCICONV])
+
+  AC_CACHE_CHECK([for iconv], [am_cv_func_iconv], [
+    am_cv_func_iconv="no, consider installing GNU libiconv"
+    am_cv_lib_iconv=no
+    AC_TRY_LINK([#include <stdlib.h>
+#include <iconv.h>],
+      [iconv_t cd = iconv_open("","");
+       iconv(cd,NULL,NULL,NULL,NULL);
+       iconv_close(cd);],
+      [am_cv_func_iconv=yes])
+    if test "$am_cv_func_iconv" != yes; then
+      am_save_LIBS="$LIBS"
+      LIBS="$LIBS $LIBICONV"
+      AC_TRY_LINK([#include <stdlib.h>
+#include <iconv.h>],
+        [iconv_t cd = iconv_open("","");
+         iconv(cd,NULL,NULL,NULL,NULL);
+         iconv_close(cd);],
+        [am_cv_lib_iconv=yes]
+        [am_cv_func_iconv=yes])
+      LIBS="$am_save_LIBS"
+    fi
+  ])
+  if test "$am_cv_func_iconv" = yes; then
+    AC_CACHE_CHECK([for working iconv], [am_cv_func_iconv_works], [
+      dnl This tests against bugs in AIX 5.1, HP-UX 11.11, Solaris 10.
+      am_save_LIBS="$LIBS"
+      if test $am_cv_lib_iconv = yes; then
+        LIBS="$LIBS $LIBICONV"
+      fi
+      AC_TRY_RUN([
+#include <iconv.h>
+#include <string.h>
+int main ()
+{
+  /* Test against AIX 5.1 bug: Failures are not distinguishable from successful
+     returns.  */
+  {
+    iconv_t cd_utf8_to_88591 = iconv_open ("ISO8859-1", "UTF-8");
+    if (cd_utf8_to_88591 != (iconv_t)(-1))
+      {
+        static const char input[] = "\342\202\254"; /* EURO SIGN */
+        char buf[10];
+        const char *inptr = input;
+        size_t inbytesleft = strlen (input);
+        char *outptr = buf;
+        size_t outbytesleft = sizeof (buf);
+        size_t res = iconv (cd_utf8_to_88591,
+                            (char **) &inptr, &inbytesleft,
+                            &outptr, &outbytesleft);
+        if (res == 0)
+          return 1;
+      }
+  }
+  /* Test against Solaris 10 bug: Failures are not distinguishable from
+     successful returns.  */
+  {
+    iconv_t cd_ascii_to_88591 = iconv_open ("ISO8859-1", "646");
+    if (cd_ascii_to_88591 != (iconv_t)(-1))
+      {
+        static const char input[] = "\263";
+        char buf[10];
+        const char *inptr = input;
+        size_t inbytesleft = strlen (input);
+        char *outptr = buf;
+        size_t outbytesleft = sizeof (buf);
+        size_t res = iconv (cd_ascii_to_88591,
+                            (char **) &inptr, &inbytesleft,
+                            &outptr, &outbytesleft);
+        if (res == 0)
+          return 1;
+      }
+  }
+#if 0 /* This bug could be worked around by the caller.  */
+  /* Test against HP-UX 11.11 bug: Positive return value instead of 0.  */
+  {
+    iconv_t cd_88591_to_utf8 = iconv_open ("utf8", "iso88591");
+    if (cd_88591_to_utf8 != (iconv_t)(-1))
+      {
+        static const char input[] = "\304rger mit b\366sen B\374bchen ohne Augenma\337";
+        char buf[50];
+        const char *inptr = input;
+        size_t inbytesleft = strlen (input);
+        char *outptr = buf;
+        size_t outbytesleft = sizeof (buf);
+        size_t res = iconv (cd_88591_to_utf8,
+                            (char **) &inptr, &inbytesleft,
+                            &outptr, &outbytesleft);
+        if ((int)res > 0)
+          return 1;
+      }
+  }
+#endif
+  /* Test against HP-UX 11.11 bug: No converter from EUC-JP to UTF-8 is
+     provided.  */
+  if (/* Try standardized names.  */
+      iconv_open ("UTF-8", "EUC-JP") == (iconv_t)(-1)
+      /* Try IRIX, OSF/1 names.  */
+      && iconv_open ("UTF-8", "eucJP") == (iconv_t)(-1)
+      /* Try AIX names.  */
+      && iconv_open ("UTF-8", "IBM-eucJP") == (iconv_t)(-1)
+      /* Try HP-UX names.  */
+      && iconv_open ("utf8", "eucJP") == (iconv_t)(-1))
+    return 1;
+  return 0;
+}], [am_cv_func_iconv_works=yes], [am_cv_func_iconv_works=no],
+        [case "$host_os" in
+           aix* | hpux*) am_cv_func_iconv_works="guessing no" ;;
+           *)            am_cv_func_iconv_works="guessing yes" ;;
+         esac])
+      LIBS="$am_save_LIBS"
+    ])
+    case "$am_cv_func_iconv_works" in
+      *no) am_func_iconv=no am_cv_lib_iconv=no ;;
+      *)   am_func_iconv=yes ;;
+    esac
+  else
+    am_func_iconv=no am_cv_lib_iconv=no
+  fi
+  if test "$am_func_iconv" = yes; then
+    AC_DEFINE([HAVE_ICONV], [1],
+      [Define if you have the iconv() function and it works.])
+  fi
+  if test "$am_cv_lib_iconv" = yes; then
+    AC_MSG_CHECKING([how to link with libiconv])
+    AC_MSG_RESULT([$LIBICONV])
+  else
+    dnl If $LIBICONV didn't lead to a usable library, we don't need $INCICONV
+    dnl either.
+    CPPFLAGS="$am_save_CPPFLAGS"
+    LIBICONV=
+    LTLIBICONV=
+  fi
+  AC_SUBST([LIBICONV])
+  AC_SUBST([LTLIBICONV])
+])
+
+dnl Define AM_ICONV using AC_DEFUN_ONCE for Autoconf >= 2.64, in order to
+dnl avoid warnings like
+dnl "warning: AC_REQUIRE: `AM_ICONV' was expanded before it was required".
+dnl This is tricky because of the way 'aclocal' is implemented:
+dnl - It requires defining an auxiliary macro whose name ends in AC_DEFUN.
+dnl   Otherwise aclocal's initial scan pass would miss the macro definition.
+dnl - It requires a line break inside the AC_DEFUN_ONCE and AC_DEFUN expansions.
+dnl   Otherwise aclocal would emit many "Use of uninitialized value $1"
+dnl   warnings.
+m4_define([gl_iconv_AC_DEFUN],
+  m4_version_prereq([2.64],
+    [[AC_DEFUN_ONCE(
+        [$1], [$2])]],
+    [[AC_DEFUN(
+        [$1], [$2])]]))
+gl_iconv_AC_DEFUN([AM_ICONV],
+[
+  AM_ICONV_LINK
+  if test "$am_cv_func_iconv" = yes; then
+    AC_MSG_CHECKING([for iconv declaration])
+    AC_CACHE_VAL([am_cv_proto_iconv], [
+      AC_TRY_COMPILE([
+#include <stdlib.h>
+#include <iconv.h>
+extern
+#ifdef __cplusplus
+"C"
+#endif
+#if defined(__STDC__) || defined(__cplusplus)
+size_t iconv (iconv_t cd, char * *inbuf, size_t *inbytesleft, char * *outbuf, size_t *outbytesleft);
+#else
+size_t iconv();
+#endif
+], [], [am_cv_proto_iconv_arg1=""], [am_cv_proto_iconv_arg1="const"])
+      am_cv_proto_iconv="extern size_t iconv (iconv_t cd, $am_cv_proto_iconv_arg1 char * *inbuf, size_t *inbytesleft, char * *outbuf, size_t *outbytesleft);"])
+    am_cv_proto_iconv=`echo "[$]am_cv_proto_iconv" | tr -s ' ' | sed -e 's/( /(/'`
+    AC_MSG_RESULT([
+         $am_cv_proto_iconv])
+    AC_DEFINE_UNQUOTED([ICONV_CONST], [$am_cv_proto_iconv_arg1],
+      [Define as const if the declaration of iconv() needs const.])
+  fi
+])
diff --git a/m4/lib-ld.m4 b/m4/lib-ld.m4
new file mode 100644
index 0000000..ebb3052
--- /dev/null
+++ b/m4/lib-ld.m4
@@ -0,0 +1,110 @@
+# lib-ld.m4 serial 4 (gettext-0.18)
+dnl Copyright (C) 1996-2003, 2009-2010 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+dnl Subroutines of libtool.m4,
+dnl with replacements s/AC_/AC_LIB/ and s/lt_cv/acl_cv/ to avoid collision
+dnl with libtool.m4.
+
+dnl From libtool-1.4. Sets the variable with_gnu_ld to yes or no.
+AC_DEFUN([AC_LIB_PROG_LD_GNU],
+[AC_CACHE_CHECK([if the linker ($LD) is GNU ld], [acl_cv_prog_gnu_ld],
+[# I'd rather use --version here, but apparently some GNU ld's only accept -v.
+case `$LD -v 2>&1 </dev/null` in
+*GNU* | *'with BFD'*)
+  acl_cv_prog_gnu_ld=yes ;;
+*)
+  acl_cv_prog_gnu_ld=no ;;
+esac])
+with_gnu_ld=$acl_cv_prog_gnu_ld
+])
+
+dnl From libtool-1.4. Sets the variable LD.
+AC_DEFUN([AC_LIB_PROG_LD],
+[AC_ARG_WITH([gnu-ld],
+[  --with-gnu-ld           assume the C compiler uses GNU ld [default=no]],
+test "$withval" = no || with_gnu_ld=yes, with_gnu_ld=no)
+AC_REQUIRE([AC_PROG_CC])dnl
+AC_REQUIRE([AC_CANONICAL_HOST])dnl
+# Prepare PATH_SEPARATOR.
+# The user is always right.
+if test "${PATH_SEPARATOR+set}" != set; then
+  echo "#! /bin/sh" >conf$$.sh
+  echo  "exit 0"   >>conf$$.sh
+  chmod +x conf$$.sh
+  if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then
+    PATH_SEPARATOR=';'
+  else
+    PATH_SEPARATOR=:
+  fi
+  rm -f conf$$.sh
+fi
+ac_prog=ld
+if test "$GCC" = yes; then
+  # Check if gcc -print-prog-name=ld gives a path.
+  AC_MSG_CHECKING([for ld used by GCC])
+  case $host in
+  *-*-mingw*)
+    # gcc leaves a trailing carriage return which upsets mingw
+    ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;;
+  *)
+    ac_prog=`($CC -print-prog-name=ld) 2>&5` ;;
+  esac
+  case $ac_prog in
+    # Accept absolute paths.
+    [[\\/]* | [A-Za-z]:[\\/]*)]
+      [re_direlt='/[^/][^/]*/\.\./']
+      # Canonicalize the path of ld
+      ac_prog=`echo $ac_prog| sed 's%\\\\%/%g'`
+      while echo $ac_prog | grep "$re_direlt" > /dev/null 2>&1; do
+        ac_prog=`echo $ac_prog| sed "s%$re_direlt%/%"`
+      done
+      test -z "$LD" && LD="$ac_prog"
+      ;;
+  "")
+    # If it fails, then pretend we aren't using GCC.
+    ac_prog=ld
+    ;;
+  *)
+    # If it is relative, then search for the first ld in PATH.
+    with_gnu_ld=unknown
+    ;;
+  esac
+elif test "$with_gnu_ld" = yes; then
+  AC_MSG_CHECKING([for GNU ld])
+else
+  AC_MSG_CHECKING([for non-GNU ld])
+fi
+AC_CACHE_VAL([acl_cv_path_LD],
+[if test -z "$LD"; then
+  IFS="${IFS= 	}"; ac_save_ifs="$IFS"; IFS="${IFS}${PATH_SEPARATOR-:}"
+  for ac_dir in $PATH; do
+    test -z "$ac_dir" && ac_dir=.
+    if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then
+      acl_cv_path_LD="$ac_dir/$ac_prog"
+      # Check to see if the program is GNU ld.  I'd rather use --version,
+      # but apparently some GNU ld's only accept -v.
+      # Break only if it was the GNU/non-GNU ld that we prefer.
+      case `"$acl_cv_path_LD" -v 2>&1 < /dev/null` in
+      *GNU* | *'with BFD'*)
+        test "$with_gnu_ld" != no && break ;;
+      *)
+        test "$with_gnu_ld" != yes && break ;;
+      esac
+    fi
+  done
+  IFS="$ac_save_ifs"
+else
+  acl_cv_path_LD="$LD" # Let the user override the test with a path.
+fi])
+LD="$acl_cv_path_LD"
+if test -n "$LD"; then
+  AC_MSG_RESULT([$LD])
+else
+  AC_MSG_RESULT([no])
+fi
+test -z "$LD" && AC_MSG_ERROR([no acceptable ld found in \$PATH])
+AC_LIB_PROG_LD_GNU
+])
diff --git a/m4/lib-link.m4 b/m4/lib-link.m4
new file mode 100644
index 0000000..c73bd8e
--- /dev/null
+++ b/m4/lib-link.m4
@@ -0,0 +1,774 @@
+# lib-link.m4 serial 21 (gettext-0.18)
+dnl Copyright (C) 2001-2010 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+dnl From Bruno Haible.
+
+AC_PREREQ([2.54])
+
+dnl AC_LIB_LINKFLAGS(name [, dependencies]) searches for libname and
+dnl the libraries corresponding to explicit and implicit dependencies.
+dnl Sets and AC_SUBSTs the LIB${NAME} and LTLIB${NAME} variables and
+dnl augments the CPPFLAGS variable.
+dnl Sets and AC_SUBSTs the LIB${NAME}_PREFIX variable to nonempty if libname
+dnl was found in ${LIB${NAME}_PREFIX}/$acl_libdirstem.
+AC_DEFUN([AC_LIB_LINKFLAGS],
+[
+  AC_REQUIRE([AC_LIB_PREPARE_PREFIX])
+  AC_REQUIRE([AC_LIB_RPATH])
+  pushdef([Name],[translit([$1],[./-], [___])])
+  pushdef([NAME],[translit([$1],[abcdefghijklmnopqrstuvwxyz./-],
+                                [ABCDEFGHIJKLMNOPQRSTUVWXYZ___])])
+  AC_CACHE_CHECK([how to link with lib[]$1], [ac_cv_lib[]Name[]_libs], [
+    AC_LIB_LINKFLAGS_BODY([$1], [$2])
+    ac_cv_lib[]Name[]_libs="$LIB[]NAME"
+    ac_cv_lib[]Name[]_ltlibs="$LTLIB[]NAME"
+    ac_cv_lib[]Name[]_cppflags="$INC[]NAME"
+    ac_cv_lib[]Name[]_prefix="$LIB[]NAME[]_PREFIX"
+  ])
+  LIB[]NAME="$ac_cv_lib[]Name[]_libs"
+  LTLIB[]NAME="$ac_cv_lib[]Name[]_ltlibs"
+  INC[]NAME="$ac_cv_lib[]Name[]_cppflags"
+  LIB[]NAME[]_PREFIX="$ac_cv_lib[]Name[]_prefix"
+  AC_LIB_APPENDTOVAR([CPPFLAGS], [$INC]NAME)
+  AC_SUBST([LIB]NAME)
+  AC_SUBST([LTLIB]NAME)
+  AC_SUBST([LIB]NAME[_PREFIX])
+  dnl Also set HAVE_LIB[]NAME so that AC_LIB_HAVE_LINKFLAGS can reuse the
+  dnl results of this search when this library appears as a dependency.
+  HAVE_LIB[]NAME=yes
+  popdef([NAME])
+  popdef([Name])
+])
+
+dnl AC_LIB_HAVE_LINKFLAGS(name, dependencies, includes, testcode, [missing-message])
+dnl searches for libname and the libraries corresponding to explicit and
+dnl implicit dependencies, together with the specified include files and
+dnl the ability to compile and link the specified testcode. The missing-message
+dnl defaults to 'no' and may contain additional hints for the user.
+dnl If found, it sets and AC_SUBSTs HAVE_LIB${NAME}=yes and the LIB${NAME}
+dnl and LTLIB${NAME} variables and augments the CPPFLAGS variable, and
+dnl #defines HAVE_LIB${NAME} to 1. Otherwise, it sets and AC_SUBSTs
+dnl HAVE_LIB${NAME}=no and LIB${NAME} and LTLIB${NAME} to empty.
+dnl Sets and AC_SUBSTs the LIB${NAME}_PREFIX variable to nonempty if libname
+dnl was found in ${LIB${NAME}_PREFIX}/$acl_libdirstem.
+AC_DEFUN([AC_LIB_HAVE_LINKFLAGS],
+[
+  AC_REQUIRE([AC_LIB_PREPARE_PREFIX])
+  AC_REQUIRE([AC_LIB_RPATH])
+  pushdef([Name],[translit([$1],[./-], [___])])
+  pushdef([NAME],[translit([$1],[abcdefghijklmnopqrstuvwxyz./-],
+                                [ABCDEFGHIJKLMNOPQRSTUVWXYZ___])])
+
+  dnl Search for lib[]Name and define LIB[]NAME, LTLIB[]NAME and INC[]NAME
+  dnl accordingly.
+  AC_LIB_LINKFLAGS_BODY([$1], [$2])
+
+  dnl Add $INC[]NAME to CPPFLAGS before performing the following checks,
+  dnl because if the user has installed lib[]Name and not disabled its use
+  dnl via --without-lib[]Name-prefix, he wants to use it.
+  ac_save_CPPFLAGS="$CPPFLAGS"
+  AC_LIB_APPENDTOVAR([CPPFLAGS], [$INC]NAME)
+
+  AC_CACHE_CHECK([for lib[]$1], [ac_cv_lib[]Name], [
+    ac_save_LIBS="$LIBS"
+    dnl If $LIB[]NAME contains some -l options, add it to the end of LIBS,
+    dnl because these -l options might require -L options that are present in
+    dnl LIBS. -l options benefit only from the -L options listed before it.
+    dnl Otherwise, add it to the front of LIBS, because it may be a static
+    dnl library that depends on another static library that is present in LIBS.
+    dnl Static libraries benefit only from the static libraries listed after
+    dnl it.
+    case " $LIB[]NAME" in
+      *" -l"*) LIBS="$LIBS $LIB[]NAME" ;;
+      *)       LIBS="$LIB[]NAME $LIBS" ;;
+    esac
+    AC_TRY_LINK([$3], [$4],
+      [ac_cv_lib[]Name=yes],
+      [ac_cv_lib[]Name='m4_if([$5], [], [no], [[$5]])'])
+    LIBS="$ac_save_LIBS"
+  ])
+  if test "$ac_cv_lib[]Name" = yes; then
+    HAVE_LIB[]NAME=yes
+    AC_DEFINE([HAVE_LIB]NAME, 1, [Define if you have the lib][$1 library.])
+    AC_MSG_CHECKING([how to link with lib[]$1])
+    AC_MSG_RESULT([$LIB[]NAME])
+  else
+    HAVE_LIB[]NAME=no
+    dnl If $LIB[]NAME didn't lead to a usable library, we don't need
+    dnl $INC[]NAME either.
+    CPPFLAGS="$ac_save_CPPFLAGS"
+    LIB[]NAME=
+    LTLIB[]NAME=
+    LIB[]NAME[]_PREFIX=
+  fi
+  AC_SUBST([HAVE_LIB]NAME)
+  AC_SUBST([LIB]NAME)
+  AC_SUBST([LTLIB]NAME)
+  AC_SUBST([LIB]NAME[_PREFIX])
+  popdef([NAME])
+  popdef([Name])
+])
+
+dnl Determine the platform dependent parameters needed to use rpath:
+dnl   acl_libext,
+dnl   acl_shlibext,
+dnl   acl_hardcode_libdir_flag_spec,
+dnl   acl_hardcode_libdir_separator,
+dnl   acl_hardcode_direct,
+dnl   acl_hardcode_minus_L.
+AC_DEFUN([AC_LIB_RPATH],
+[
+  dnl Tell automake >= 1.10 to complain if config.rpath is missing.
+  m4_ifdef([AC_REQUIRE_AUX_FILE], [AC_REQUIRE_AUX_FILE([config.rpath])])
+  AC_REQUIRE([AC_PROG_CC])                dnl we use $CC, $GCC, $LDFLAGS
+  AC_REQUIRE([AC_LIB_PROG_LD])            dnl we use $LD, $with_gnu_ld
+  AC_REQUIRE([AC_CANONICAL_HOST])         dnl we use $host
+  AC_REQUIRE([AC_CONFIG_AUX_DIR_DEFAULT]) dnl we use $ac_aux_dir
+  AC_CACHE_CHECK([for shared library run path origin], [acl_cv_rpath], [
+    CC="$CC" GCC="$GCC" LDFLAGS="$LDFLAGS" LD="$LD" with_gnu_ld="$with_gnu_ld" \
+    ${CONFIG_SHELL-/bin/sh} "$ac_aux_dir/config.rpath" "$host" > conftest.sh
+    . ./conftest.sh
+    rm -f ./conftest.sh
+    acl_cv_rpath=done
+  ])
+  wl="$acl_cv_wl"
+  acl_libext="$acl_cv_libext"
+  acl_shlibext="$acl_cv_shlibext"
+  acl_libname_spec="$acl_cv_libname_spec"
+  acl_library_names_spec="$acl_cv_library_names_spec"
+  acl_hardcode_libdir_flag_spec="$acl_cv_hardcode_libdir_flag_spec"
+  acl_hardcode_libdir_separator="$acl_cv_hardcode_libdir_separator"
+  acl_hardcode_direct="$acl_cv_hardcode_direct"
+  acl_hardcode_minus_L="$acl_cv_hardcode_minus_L"
+  dnl Determine whether the user wants rpath handling at all.
+  AC_ARG_ENABLE([rpath],
+    [  --disable-rpath         do not hardcode runtime library paths],
+    :, enable_rpath=yes)
+])
+
+dnl AC_LIB_FROMPACKAGE(name, package)
+dnl declares that libname comes from the given package. The configure file
+dnl will then not have a --with-libname-prefix option but a
+dnl --with-package-prefix option. Several libraries can come from the same
+dnl package. This declaration must occur before an AC_LIB_LINKFLAGS or similar
+dnl macro call that searches for libname.
+AC_DEFUN([AC_LIB_FROMPACKAGE],
+[
+  pushdef([NAME],[translit([$1],[abcdefghijklmnopqrstuvwxyz./-],
+                                [ABCDEFGHIJKLMNOPQRSTUVWXYZ___])])
+  define([acl_frompackage_]NAME, [$2])
+  popdef([NAME])
+  pushdef([PACK],[$2])
+  pushdef([PACKUP],[translit(PACK,[abcdefghijklmnopqrstuvwxyz./-],
+                                  [ABCDEFGHIJKLMNOPQRSTUVWXYZ___])])
+  define([acl_libsinpackage_]PACKUP,
+    m4_ifdef([acl_libsinpackage_]PACKUP, [acl_libsinpackage_]PACKUP[[, ]],)[lib$1])
+  popdef([PACKUP])
+  popdef([PACK])
+])
+
+dnl AC_LIB_LINKFLAGS_BODY(name [, dependencies]) searches for libname and
+dnl the libraries corresponding to explicit and implicit dependencies.
+dnl Sets the LIB${NAME}, LTLIB${NAME} and INC${NAME} variables.
+dnl Also, sets the LIB${NAME}_PREFIX variable to nonempty if libname was found
+dnl in ${LIB${NAME}_PREFIX}/$acl_libdirstem.
+AC_DEFUN([AC_LIB_LINKFLAGS_BODY],
+[
+  AC_REQUIRE([AC_LIB_PREPARE_MULTILIB])
+  pushdef([NAME],[translit([$1],[abcdefghijklmnopqrstuvwxyz./-],
+                                [ABCDEFGHIJKLMNOPQRSTUVWXYZ___])])
+  pushdef([PACK],[m4_ifdef([acl_frompackage_]NAME, [acl_frompackage_]NAME, lib[$1])])
+  pushdef([PACKUP],[translit(PACK,[abcdefghijklmnopqrstuvwxyz./-],
+                                  [ABCDEFGHIJKLMNOPQRSTUVWXYZ___])])
+  pushdef([PACKLIBS],[m4_ifdef([acl_frompackage_]NAME, [acl_libsinpackage_]PACKUP, lib[$1])])
+  dnl Autoconf >= 2.61 supports dots in --with options.
+  pushdef([P_A_C_K],[m4_if(m4_version_compare(m4_defn([m4_PACKAGE_VERSION]),[2.61]),[-1],[translit(PACK,[.],[_])],PACK)])
+  dnl By default, look in $includedir and $libdir.
+  use_additional=yes
+  AC_LIB_WITH_FINAL_PREFIX([
+    eval additional_includedir=\"$includedir\"
+    eval additional_libdir=\"$libdir\"
+  ])
+  AC_ARG_WITH(P_A_C_K[-prefix],
+[[  --with-]]P_A_C_K[[-prefix[=DIR]  search for ]PACKLIBS[ in DIR/include and DIR/lib
+  --without-]]P_A_C_K[[-prefix     don't search for ]PACKLIBS[ in includedir and libdir]],
+[
+    if test "X$withval" = "Xno"; then
+      use_additional=no
+    else
+      if test "X$withval" = "X"; then
+        AC_LIB_WITH_FINAL_PREFIX([
+          eval additional_includedir=\"$includedir\"
+          eval additional_libdir=\"$libdir\"
+        ])
+      else
+        additional_includedir="$withval/include"
+        additional_libdir="$withval/$acl_libdirstem"
+        if test "$acl_libdirstem2" != "$acl_libdirstem" \
+           && ! test -d "$withval/$acl_libdirstem"; then
+          additional_libdir="$withval/$acl_libdirstem2"
+        fi
+      fi
+    fi
+])
+  dnl Search the library and its dependencies in $additional_libdir and
+  dnl $LDFLAGS. Using breadth-first-seach.
+  LIB[]NAME=
+  LTLIB[]NAME=
+  INC[]NAME=
+  LIB[]NAME[]_PREFIX=
+  dnl HAVE_LIB${NAME} is an indicator that LIB${NAME}, LTLIB${NAME} have been
+  dnl computed. So it has to be reset here.
+  HAVE_LIB[]NAME=
+  rpathdirs=
+  ltrpathdirs=
+  names_already_handled=
+  names_next_round='$1 $2'
+  while test -n "$names_next_round"; do
+    names_this_round="$names_next_round"
+    names_next_round=
+    for name in $names_this_round; do
+      already_handled=
+      for n in $names_already_handled; do
+        if test "$n" = "$name"; then
+          already_handled=yes
+          break
+        fi
+      done
+      if test -z "$already_handled"; then
+        names_already_handled="$names_already_handled $name"
+        dnl See if it was already located by an earlier AC_LIB_LINKFLAGS
+        dnl or AC_LIB_HAVE_LINKFLAGS call.
+        uppername=`echo "$name" | sed -e 'y|abcdefghijklmnopqrstuvwxyz./-|ABCDEFGHIJKLMNOPQRSTUVWXYZ___|'`
+        eval value=\"\$HAVE_LIB$uppername\"
+        if test -n "$value"; then
+          if test "$value" = yes; then
+            eval value=\"\$LIB$uppername\"
+            test -z "$value" || LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$value"
+            eval value=\"\$LTLIB$uppername\"
+            test -z "$value" || LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }$value"
+          else
+            dnl An earlier call to AC_LIB_HAVE_LINKFLAGS has determined
+            dnl that this library doesn't exist. So just drop it.
+            :
+          fi
+        else
+          dnl Search the library lib$name in $additional_libdir and $LDFLAGS
+          dnl and the already constructed $LIBNAME/$LTLIBNAME.
+          found_dir=
+          found_la=
+          found_so=
+          found_a=
+          eval libname=\"$acl_libname_spec\"    # typically: libname=lib$name
+          if test -n "$acl_shlibext"; then
+            shrext=".$acl_shlibext"             # typically: shrext=.so
+          else
+            shrext=
+          fi
+          if test $use_additional = yes; then
+            dir="$additional_libdir"
+            dnl The same code as in the loop below:
+            dnl First look for a shared library.
+            if test -n "$acl_shlibext"; then
+              if test -f "$dir/$libname$shrext"; then
+                found_dir="$dir"
+                found_so="$dir/$libname$shrext"
+              else
+                if test "$acl_library_names_spec" = '$libname$shrext$versuffix'; then
+                  ver=`(cd "$dir" && \
+                        for f in "$libname$shrext".*; do echo "$f"; done \
+                        | sed -e "s,^$libname$shrext\\\\.,," \
+                        | sort -t '.' -n -r -k1,1 -k2,2 -k3,3 -k4,4 -k5,5 \
+                        | sed 1q ) 2>/dev/null`
+                  if test -n "$ver" && test -f "$dir/$libname$shrext.$ver"; then
+                    found_dir="$dir"
+                    found_so="$dir/$libname$shrext.$ver"
+                  fi
+                else
+                  eval library_names=\"$acl_library_names_spec\"
+                  for f in $library_names; do
+                    if test -f "$dir/$f"; then
+                      found_dir="$dir"
+                      found_so="$dir/$f"
+                      break
+                    fi
+                  done
+                fi
+              fi
+            fi
+            dnl Then look for a static library.
+            if test "X$found_dir" = "X"; then
+              if test -f "$dir/$libname.$acl_libext"; then
+                found_dir="$dir"
+                found_a="$dir/$libname.$acl_libext"
+              fi
+            fi
+            if test "X$found_dir" != "X"; then
+              if test -f "$dir/$libname.la"; then
+                found_la="$dir/$libname.la"
+              fi
+            fi
+          fi
+          if test "X$found_dir" = "X"; then
+            for x in $LDFLAGS $LTLIB[]NAME; do
+              AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"])
+              case "$x" in
+                -L*)
+                  dir=`echo "X$x" | sed -e 's/^X-L//'`
+                  dnl First look for a shared library.
+                  if test -n "$acl_shlibext"; then
+                    if test -f "$dir/$libname$shrext"; then
+                      found_dir="$dir"
+                      found_so="$dir/$libname$shrext"
+                    else
+                      if test "$acl_library_names_spec" = '$libname$shrext$versuffix'; then
+                        ver=`(cd "$dir" && \
+                              for f in "$libname$shrext".*; do echo "$f"; done \
+                              | sed -e "s,^$libname$shrext\\\\.,," \
+                              | sort -t '.' -n -r -k1,1 -k2,2 -k3,3 -k4,4 -k5,5 \
+                              | sed 1q ) 2>/dev/null`
+                        if test -n "$ver" && test -f "$dir/$libname$shrext.$ver"; then
+                          found_dir="$dir"
+                          found_so="$dir/$libname$shrext.$ver"
+                        fi
+                      else
+                        eval library_names=\"$acl_library_names_spec\"
+                        for f in $library_names; do
+                          if test -f "$dir/$f"; then
+                            found_dir="$dir"
+                            found_so="$dir/$f"
+                            break
+                          fi
+                        done
+                      fi
+                    fi
+                  fi
+                  dnl Then look for a static library.
+                  if test "X$found_dir" = "X"; then
+                    if test -f "$dir/$libname.$acl_libext"; then
+                      found_dir="$dir"
+                      found_a="$dir/$libname.$acl_libext"
+                    fi
+                  fi
+                  if test "X$found_dir" != "X"; then
+                    if test -f "$dir/$libname.la"; then
+                      found_la="$dir/$libname.la"
+                    fi
+                  fi
+                  ;;
+              esac
+              if test "X$found_dir" != "X"; then
+                break
+              fi
+            done
+          fi
+          if test "X$found_dir" != "X"; then
+            dnl Found the library.
+            LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }-L$found_dir -l$name"
+            if test "X$found_so" != "X"; then
+              dnl Linking with a shared library. We attempt to hardcode its
+              dnl directory into the executable's runpath, unless it's the
+              dnl standard /usr/lib.
+              if test "$enable_rpath" = no \
+                 || test "X$found_dir" = "X/usr/$acl_libdirstem" \
+                 || test "X$found_dir" = "X/usr/$acl_libdirstem2"; then
+                dnl No hardcoding is needed.
+                LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_so"
+              else
+                dnl Use an explicit option to hardcode DIR into the resulting
+                dnl binary.
+                dnl Potentially add DIR to ltrpathdirs.
+                dnl The ltrpathdirs will be appended to $LTLIBNAME at the end.
+                haveit=
+                for x in $ltrpathdirs; do
+                  if test "X$x" = "X$found_dir"; then
+                    haveit=yes
+                    break
+                  fi
+                done
+                if test -z "$haveit"; then
+                  ltrpathdirs="$ltrpathdirs $found_dir"
+                fi
+                dnl The hardcoding into $LIBNAME is system dependent.
+                if test "$acl_hardcode_direct" = yes; then
+                  dnl Using DIR/libNAME.so during linking hardcodes DIR into the
+                  dnl resulting binary.
+                  LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_so"
+                else
+                  if test -n "$acl_hardcode_libdir_flag_spec" && test "$acl_hardcode_minus_L" = no; then
+                    dnl Use an explicit option to hardcode DIR into the resulting
+                    dnl binary.
+                    LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_so"
+                    dnl Potentially add DIR to rpathdirs.
+                    dnl The rpathdirs will be appended to $LIBNAME at the end.
+                    haveit=
+                    for x in $rpathdirs; do
+                      if test "X$x" = "X$found_dir"; then
+                        haveit=yes
+                        break
+                      fi
+                    done
+                    if test -z "$haveit"; then
+                      rpathdirs="$rpathdirs $found_dir"
+                    fi
+                  else
+                    dnl Rely on "-L$found_dir".
+                    dnl But don't add it if it's already contained in the LDFLAGS
+                    dnl or the already constructed $LIBNAME
+                    haveit=
+                    for x in $LDFLAGS $LIB[]NAME; do
+                      AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"])
+                      if test "X$x" = "X-L$found_dir"; then
+                        haveit=yes
+                        break
+                      fi
+                    done
+                    if test -z "$haveit"; then
+                      LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-L$found_dir"
+                    fi
+                    if test "$acl_hardcode_minus_L" != no; then
+                      dnl FIXME: Not sure whether we should use
+                      dnl "-L$found_dir -l$name" or "-L$found_dir $found_so"
+                      dnl here.
+                      LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_so"
+                    else
+                      dnl We cannot use $acl_hardcode_runpath_var and LD_RUN_PATH
+                      dnl here, because this doesn't fit in flags passed to the
+                      dnl compiler. So give up. No hardcoding. This affects only
+                      dnl very old systems.
+                      dnl FIXME: Not sure whether we should use
+                      dnl "-L$found_dir -l$name" or "-L$found_dir $found_so"
+                      dnl here.
+                      LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-l$name"
+                    fi
+                  fi
+                fi
+              fi
+            else
+              if test "X$found_a" != "X"; then
+                dnl Linking with a static library.
+                LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_a"
+              else
+                dnl We shouldn't come here, but anyway it's good to have a
+                dnl fallback.
+                LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-L$found_dir -l$name"
+              fi
+            fi
+            dnl Assume the include files are nearby.
+            additional_includedir=
+            case "$found_dir" in
+              */$acl_libdirstem | */$acl_libdirstem/)
+                basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e "s,/$acl_libdirstem/"'*$,,'`
+                if test "$name" = '$1'; then
+                  LIB[]NAME[]_PREFIX="$basedir"
+                fi
+                additional_includedir="$basedir/include"
+                ;;
+              */$acl_libdirstem2 | */$acl_libdirstem2/)
+                basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e "s,/$acl_libdirstem2/"'*$,,'`
+                if test "$name" = '$1'; then
+                  LIB[]NAME[]_PREFIX="$basedir"
+                fi
+                additional_includedir="$basedir/include"
+                ;;
+            esac
+            if test "X$additional_includedir" != "X"; then
+              dnl Potentially add $additional_includedir to $INCNAME.
+              dnl But don't add it
+              dnl   1. if it's the standard /usr/include,
+              dnl   2. if it's /usr/local/include and we are using GCC on Linux,
+              dnl   3. if it's already present in $CPPFLAGS or the already
+              dnl      constructed $INCNAME,
+              dnl   4. if it doesn't exist as a directory.
+              if test "X$additional_includedir" != "X/usr/include"; then
+                haveit=
+                if test "X$additional_includedir" = "X/usr/local/include"; then
+                  if test -n "$GCC"; then
+                    case $host_os in
+                      linux* | gnu* | k*bsd*-gnu) haveit=yes;;
+                    esac
+                  fi
+                fi
+                if test -z "$haveit"; then
+                  for x in $CPPFLAGS $INC[]NAME; do
+                    AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"])
+                    if test "X$x" = "X-I$additional_includedir"; then
+                      haveit=yes
+                      break
+                    fi
+                  done
+                  if test -z "$haveit"; then
+                    if test -d "$additional_includedir"; then
+                      dnl Really add $additional_includedir to $INCNAME.
+                      INC[]NAME="${INC[]NAME}${INC[]NAME:+ }-I$additional_includedir"
+                    fi
+                  fi
+                fi
+              fi
+            fi
+            dnl Look for dependencies.
+            if test -n "$found_la"; then
+              dnl Read the .la file. It defines the variables
+              dnl dlname, library_names, old_library, dependency_libs, current,
+              dnl age, revision, installed, dlopen, dlpreopen, libdir.
+              save_libdir="$libdir"
+              case "$found_la" in
+                */* | *\\*) . "$found_la" ;;
+                *) . "./$found_la" ;;
+              esac
+              libdir="$save_libdir"
+              dnl We use only dependency_libs.
+              for dep in $dependency_libs; do
+                case "$dep" in
+                  -L*)
+                    additional_libdir=`echo "X$dep" | sed -e 's/^X-L//'`
+                    dnl Potentially add $additional_libdir to $LIBNAME and $LTLIBNAME.
+                    dnl But don't add it
+                    dnl   1. if it's the standard /usr/lib,
+                    dnl   2. if it's /usr/local/lib and we are using GCC on Linux,
+                    dnl   3. if it's already present in $LDFLAGS or the already
+                    dnl      constructed $LIBNAME,
+                    dnl   4. if it doesn't exist as a directory.
+                    if test "X$additional_libdir" != "X/usr/$acl_libdirstem" \
+                       && test "X$additional_libdir" != "X/usr/$acl_libdirstem2"; then
+                      haveit=
+                      if test "X$additional_libdir" = "X/usr/local/$acl_libdirstem" \
+                         || test "X$additional_libdir" = "X/usr/local/$acl_libdirstem2"; then
+                        if test -n "$GCC"; then
+                          case $host_os in
+                            linux* | gnu* | k*bsd*-gnu) haveit=yes;;
+                          esac
+                        fi
+                      fi
+                      if test -z "$haveit"; then
+                        haveit=
+                        for x in $LDFLAGS $LIB[]NAME; do
+                          AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"])
+                          if test "X$x" = "X-L$additional_libdir"; then
+                            haveit=yes
+                            break
+                          fi
+                        done
+                        if test -z "$haveit"; then
+                          if test -d "$additional_libdir"; then
+                            dnl Really add $additional_libdir to $LIBNAME.
+                            LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-L$additional_libdir"
+                          fi
+                        fi
+                        haveit=
+                        for x in $LDFLAGS $LTLIB[]NAME; do
+                          AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"])
+                          if test "X$x" = "X-L$additional_libdir"; then
+                            haveit=yes
+                            break
+                          fi
+                        done
+                        if test -z "$haveit"; then
+                          if test -d "$additional_libdir"; then
+                            dnl Really add $additional_libdir to $LTLIBNAME.
+                            LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }-L$additional_libdir"
+                          fi
+                        fi
+                      fi
+                    fi
+                    ;;
+                  -R*)
+                    dir=`echo "X$dep" | sed -e 's/^X-R//'`
+                    if test "$enable_rpath" != no; then
+                      dnl Potentially add DIR to rpathdirs.
+                      dnl The rpathdirs will be appended to $LIBNAME at the end.
+                      haveit=
+                      for x in $rpathdirs; do
+                        if test "X$x" = "X$dir"; then
+                          haveit=yes
+                          break
+                        fi
+                      done
+                      if test -z "$haveit"; then
+                        rpathdirs="$rpathdirs $dir"
+                      fi
+                      dnl Potentially add DIR to ltrpathdirs.
+                      dnl The ltrpathdirs will be appended to $LTLIBNAME at the end.
+                      haveit=
+                      for x in $ltrpathdirs; do
+                        if test "X$x" = "X$dir"; then
+                          haveit=yes
+                          break
+                        fi
+                      done
+                      if test -z "$haveit"; then
+                        ltrpathdirs="$ltrpathdirs $dir"
+                      fi
+                    fi
+                    ;;
+                  -l*)
+                    dnl Handle this in the next round.
+                    names_next_round="$names_next_round "`echo "X$dep" | sed -e 's/^X-l//'`
+                    ;;
+                  *.la)
+                    dnl Handle this in the next round. Throw away the .la's
+                    dnl directory; it is already contained in a preceding -L
+                    dnl option.
+                    names_next_round="$names_next_round "`echo "X$dep" | sed -e 's,^X.*/,,' -e 's,^lib,,' -e 's,\.la$,,'`
+                    ;;
+                  *)
+                    dnl Most likely an immediate library name.
+                    LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$dep"
+                    LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }$dep"
+                    ;;
+                esac
+              done
+            fi
+          else
+            dnl Didn't find the library; assume it is in the system directories
+            dnl known to the linker and runtime loader. (All the system
+            dnl directories known to the linker should also be known to the
+            dnl runtime loader, otherwise the system is severely misconfigured.)
+            LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-l$name"
+            LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }-l$name"
+          fi
+        fi
+      fi
+    done
+  done
+  if test "X$rpathdirs" != "X"; then
+    if test -n "$acl_hardcode_libdir_separator"; then
+      dnl Weird platform: only the last -rpath option counts, the user must
+      dnl pass all path elements in one option. We can arrange that for a
+      dnl single library, but not when more than one $LIBNAMEs are used.
+      alldirs=
+      for found_dir in $rpathdirs; do
+        alldirs="${alldirs}${alldirs:+$acl_hardcode_libdir_separator}$found_dir"
+      done
+      dnl Note: acl_hardcode_libdir_flag_spec uses $libdir and $wl.
+      acl_save_libdir="$libdir"
+      libdir="$alldirs"
+      eval flag=\"$acl_hardcode_libdir_flag_spec\"
+      libdir="$acl_save_libdir"
+      LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$flag"
+    else
+      dnl The -rpath options are cumulative.
+      for found_dir in $rpathdirs; do
+        acl_save_libdir="$libdir"
+        libdir="$found_dir"
+        eval flag=\"$acl_hardcode_libdir_flag_spec\"
+        libdir="$acl_save_libdir"
+        LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$flag"
+      done
+    fi
+  fi
+  if test "X$ltrpathdirs" != "X"; then
+    dnl When using libtool, the option that works for both libraries and
+    dnl executables is -R. The -R options are cumulative.
+    for found_dir in $ltrpathdirs; do
+      LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }-R$found_dir"
+    done
+  fi
+  popdef([P_A_C_K])
+  popdef([PACKLIBS])
+  popdef([PACKUP])
+  popdef([PACK])
+  popdef([NAME])
+])
+
+dnl AC_LIB_APPENDTOVAR(VAR, CONTENTS) appends the elements of CONTENTS to VAR,
+dnl unless already present in VAR.
+dnl Works only for CPPFLAGS, not for LIB* variables because that sometimes
+dnl contains two or three consecutive elements that belong together.
+AC_DEFUN([AC_LIB_APPENDTOVAR],
+[
+  for element in [$2]; do
+    haveit=
+    for x in $[$1]; do
+      AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"])
+      if test "X$x" = "X$element"; then
+        haveit=yes
+        break
+      fi
+    done
+    if test -z "$haveit"; then
+      [$1]="${[$1]}${[$1]:+ }$element"
+    fi
+  done
+])
+
+dnl For those cases where a variable contains several -L and -l options
+dnl referring to unknown libraries and directories, this macro determines the
+dnl necessary additional linker options for the runtime path.
+dnl AC_LIB_LINKFLAGS_FROM_LIBS([LDADDVAR], [LIBSVALUE], [USE-LIBTOOL])
+dnl sets LDADDVAR to linker options needed together with LIBSVALUE.
+dnl If USE-LIBTOOL evaluates to non-empty, linking with libtool is assumed,
+dnl otherwise linking without libtool is assumed.
+AC_DEFUN([AC_LIB_LINKFLAGS_FROM_LIBS],
+[
+  AC_REQUIRE([AC_LIB_RPATH])
+  AC_REQUIRE([AC_LIB_PREPARE_MULTILIB])
+  $1=
+  if test "$enable_rpath" != no; then
+    if test -n "$acl_hardcode_libdir_flag_spec" && test "$acl_hardcode_minus_L" = no; then
+      dnl Use an explicit option to hardcode directories into the resulting
+      dnl binary.
+      rpathdirs=
+      next=
+      for opt in $2; do
+        if test -n "$next"; then
+          dir="$next"
+          dnl No need to hardcode the standard /usr/lib.
+          if test "X$dir" != "X/usr/$acl_libdirstem" \
+             && test "X$dir" != "X/usr/$acl_libdirstem2"; then
+            rpathdirs="$rpathdirs $dir"
+          fi
+          next=
+        else
+          case $opt in
+            -L) next=yes ;;
+            -L*) dir=`echo "X$opt" | sed -e 's,^X-L,,'`
+                 dnl No need to hardcode the standard /usr/lib.
+                 if test "X$dir" != "X/usr/$acl_libdirstem" \
+                    && test "X$dir" != "X/usr/$acl_libdirstem2"; then
+                   rpathdirs="$rpathdirs $dir"
+                 fi
+                 next= ;;
+            *) next= ;;
+          esac
+        fi
+      done
+      if test "X$rpathdirs" != "X"; then
+        if test -n ""$3""; then
+          dnl libtool is used for linking. Use -R options.
+          for dir in $rpathdirs; do
+            $1="${$1}${$1:+ }-R$dir"
+          done
+        else
+          dnl The linker is used for linking directly.
+          if test -n "$acl_hardcode_libdir_separator"; then
+            dnl Weird platform: only the last -rpath option counts, the user
+            dnl must pass all path elements in one option.
+            alldirs=
+            for dir in $rpathdirs; do
+              alldirs="${alldirs}${alldirs:+$acl_hardcode_libdir_separator}$dir"
+            done
+            acl_save_libdir="$libdir"
+            libdir="$alldirs"
+            eval flag=\"$acl_hardcode_libdir_flag_spec\"
+            libdir="$acl_save_libdir"
+            $1="$flag"
+          else
+            dnl The -rpath options are cumulative.
+            for dir in $rpathdirs; do
+              acl_save_libdir="$libdir"
+              libdir="$dir"
+              eval flag=\"$acl_hardcode_libdir_flag_spec\"
+              libdir="$acl_save_libdir"
+              $1="${$1}${$1:+ }$flag"
+            done
+          fi
+        fi
+      fi
+    fi
+  fi
+  AC_SUBST([$1])
+])
diff --git a/m4/lib-prefix.m4 b/m4/lib-prefix.m4
new file mode 100644
index 0000000..1601cea
--- /dev/null
+++ b/m4/lib-prefix.m4
@@ -0,0 +1,224 @@
+# lib-prefix.m4 serial 7 (gettext-0.18)
+dnl Copyright (C) 2001-2005, 2008-2010 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+dnl From Bruno Haible.
+
+dnl AC_LIB_ARG_WITH is synonymous to AC_ARG_WITH in autoconf-2.13, and
+dnl similar to AC_ARG_WITH in autoconf 2.52...2.57 except that is doesn't
+dnl require excessive bracketing.
+ifdef([AC_HELP_STRING],
+[AC_DEFUN([AC_LIB_ARG_WITH], [AC_ARG_WITH([$1],[[$2]],[$3],[$4])])],
+[AC_DEFUN([AC_][LIB_ARG_WITH], [AC_ARG_WITH([$1],[$2],[$3],[$4])])])
+
+dnl AC_LIB_PREFIX adds to the CPPFLAGS and LDFLAGS the flags that are needed
+dnl to access previously installed libraries. The basic assumption is that
+dnl a user will want packages to use other packages he previously installed
+dnl with the same --prefix option.
+dnl This macro is not needed if only AC_LIB_LINKFLAGS is used to locate
+dnl libraries, but is otherwise very convenient.
+AC_DEFUN([AC_LIB_PREFIX],
+[
+  AC_BEFORE([$0], [AC_LIB_LINKFLAGS])
+  AC_REQUIRE([AC_PROG_CC])
+  AC_REQUIRE([AC_CANONICAL_HOST])
+  AC_REQUIRE([AC_LIB_PREPARE_MULTILIB])
+  AC_REQUIRE([AC_LIB_PREPARE_PREFIX])
+  dnl By default, look in $includedir and $libdir.
+  use_additional=yes
+  AC_LIB_WITH_FINAL_PREFIX([
+    eval additional_includedir=\"$includedir\"
+    eval additional_libdir=\"$libdir\"
+  ])
+  AC_LIB_ARG_WITH([lib-prefix],
+[  --with-lib-prefix[=DIR] search for libraries in DIR/include and DIR/lib
+  --without-lib-prefix    don't search for libraries in includedir and libdir],
+[
+    if test "X$withval" = "Xno"; then
+      use_additional=no
+    else
+      if test "X$withval" = "X"; then
+        AC_LIB_WITH_FINAL_PREFIX([
+          eval additional_includedir=\"$includedir\"
+          eval additional_libdir=\"$libdir\"
+        ])
+      else
+        additional_includedir="$withval/include"
+        additional_libdir="$withval/$acl_libdirstem"
+      fi
+    fi
+])
+  if test $use_additional = yes; then
+    dnl Potentially add $additional_includedir to $CPPFLAGS.
+    dnl But don't add it
+    dnl   1. if it's the standard /usr/include,
+    dnl   2. if it's already present in $CPPFLAGS,
+    dnl   3. if it's /usr/local/include and we are using GCC on Linux,
+    dnl   4. if it doesn't exist as a directory.
+    if test "X$additional_includedir" != "X/usr/include"; then
+      haveit=
+      for x in $CPPFLAGS; do
+        AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"])
+        if test "X$x" = "X-I$additional_includedir"; then
+          haveit=yes
+          break
+        fi
+      done
+      if test -z "$haveit"; then
+        if test "X$additional_includedir" = "X/usr/local/include"; then
+          if test -n "$GCC"; then
+            case $host_os in
+              linux* | gnu* | k*bsd*-gnu) haveit=yes;;
+            esac
+          fi
+        fi
+        if test -z "$haveit"; then
+          if test -d "$additional_includedir"; then
+            dnl Really add $additional_includedir to $CPPFLAGS.
+            CPPFLAGS="${CPPFLAGS}${CPPFLAGS:+ }-I$additional_includedir"
+          fi
+        fi
+      fi
+    fi
+    dnl Potentially add $additional_libdir to $LDFLAGS.
+    dnl But don't add it
+    dnl   1. if it's the standard /usr/lib,
+    dnl   2. if it's already present in $LDFLAGS,
+    dnl   3. if it's /usr/local/lib and we are using GCC on Linux,
+    dnl   4. if it doesn't exist as a directory.
+    if test "X$additional_libdir" != "X/usr/$acl_libdirstem"; then
+      haveit=
+      for x in $LDFLAGS; do
+        AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"])
+        if test "X$x" = "X-L$additional_libdir"; then
+          haveit=yes
+          break
+        fi
+      done
+      if test -z "$haveit"; then
+        if test "X$additional_libdir" = "X/usr/local/$acl_libdirstem"; then
+          if test -n "$GCC"; then
+            case $host_os in
+              linux*) haveit=yes;;
+            esac
+          fi
+        fi
+        if test -z "$haveit"; then
+          if test -d "$additional_libdir"; then
+            dnl Really add $additional_libdir to $LDFLAGS.
+            LDFLAGS="${LDFLAGS}${LDFLAGS:+ }-L$additional_libdir"
+          fi
+        fi
+      fi
+    fi
+  fi
+])
+
+dnl AC_LIB_PREPARE_PREFIX creates variables acl_final_prefix,
+dnl acl_final_exec_prefix, containing the values to which $prefix and
+dnl $exec_prefix will expand at the end of the configure script.
+AC_DEFUN([AC_LIB_PREPARE_PREFIX],
+[
+  dnl Unfortunately, prefix and exec_prefix get only finally determined
+  dnl at the end of configure.
+  if test "X$prefix" = "XNONE"; then
+    acl_final_prefix="$ac_default_prefix"
+  else
+    acl_final_prefix="$prefix"
+  fi
+  if test "X$exec_prefix" = "XNONE"; then
+    acl_final_exec_prefix='${prefix}'
+  else
+    acl_final_exec_prefix="$exec_prefix"
+  fi
+  acl_save_prefix="$prefix"
+  prefix="$acl_final_prefix"
+  eval acl_final_exec_prefix=\"$acl_final_exec_prefix\"
+  prefix="$acl_save_prefix"
+])
+
+dnl AC_LIB_WITH_FINAL_PREFIX([statement]) evaluates statement, with the
+dnl variables prefix and exec_prefix bound to the values they will have
+dnl at the end of the configure script.
+AC_DEFUN([AC_LIB_WITH_FINAL_PREFIX],
+[
+  acl_save_prefix="$prefix"
+  prefix="$acl_final_prefix"
+  acl_save_exec_prefix="$exec_prefix"
+  exec_prefix="$acl_final_exec_prefix"
+  $1
+  exec_prefix="$acl_save_exec_prefix"
+  prefix="$acl_save_prefix"
+])
+
+dnl AC_LIB_PREPARE_MULTILIB creates
+dnl - a variable acl_libdirstem, containing the basename of the libdir, either
+dnl   "lib" or "lib64" or "lib/64",
+dnl - a variable acl_libdirstem2, as a secondary possible value for
+dnl   acl_libdirstem, either the same as acl_libdirstem or "lib/sparcv9" or
+dnl   "lib/amd64".
+AC_DEFUN([AC_LIB_PREPARE_MULTILIB],
+[
+  dnl There is no formal standard regarding lib and lib64.
+  dnl On glibc systems, the current practice is that on a system supporting
+  dnl 32-bit and 64-bit instruction sets or ABIs, 64-bit libraries go under
+  dnl $prefix/lib64 and 32-bit libraries go under $prefix/lib. We determine
+  dnl the compiler's default mode by looking at the compiler's library search
+  dnl path. If at least one of its elements ends in /lib64 or points to a
+  dnl directory whose absolute pathname ends in /lib64, we assume a 64-bit ABI.
+  dnl Otherwise we use the default, namely "lib".
+  dnl On Solaris systems, the current practice is that on a system supporting
+  dnl 32-bit and 64-bit instruction sets or ABIs, 64-bit libraries go under
+  dnl $prefix/lib/64 (which is a symlink to either $prefix/lib/sparcv9 or
+  dnl $prefix/lib/amd64) and 32-bit libraries go under $prefix/lib.
+  AC_REQUIRE([AC_CANONICAL_HOST])
+  acl_libdirstem=lib
+  acl_libdirstem2=
+  case "$host_os" in
+    solaris*)
+      dnl See Solaris 10 Software Developer Collection > Solaris 64-bit Developer's Guide > The Development Environment
+      dnl <http://docs.sun.com/app/docs/doc/816-5138/dev-env?l=en&a=view>.
+      dnl "Portable Makefiles should refer to any library directories using the 64 symbolic link."
+      dnl But we want to recognize the sparcv9 or amd64 subdirectory also if the
+      dnl symlink is missing, so we set acl_libdirstem2 too.
+      AC_CACHE_CHECK([for 64-bit host], [gl_cv_solaris_64bit],
+        [AC_EGREP_CPP([sixtyfour bits], [
+#ifdef _LP64
+sixtyfour bits
+#endif
+           ], [gl_cv_solaris_64bit=yes], [gl_cv_solaris_64bit=no])
+        ])
+      if test $gl_cv_solaris_64bit = yes; then
+        acl_libdirstem=lib/64
+        case "$host_cpu" in
+          sparc*)        acl_libdirstem2=lib/sparcv9 ;;
+          i*86 | x86_64) acl_libdirstem2=lib/amd64 ;;
+        esac
+      fi
+      ;;
+    *)
+      searchpath=`(LC_ALL=C $CC -print-search-dirs) 2>/dev/null | sed -n -e 's,^libraries: ,,p' | sed -e 's,^=,,'`
+      if test -n "$searchpath"; then
+        acl_save_IFS="${IFS= 	}"; IFS=":"
+        for searchdir in $searchpath; do
+          if test -d "$searchdir"; then
+            case "$searchdir" in
+              */lib64/ | */lib64 ) acl_libdirstem=lib64 ;;
+              */../ | */.. )
+                # Better ignore directories of this form. They are misleading.
+                ;;
+              *) searchdir=`cd "$searchdir" && pwd`
+                 case "$searchdir" in
+                   */lib64 ) acl_libdirstem=lib64 ;;
+                 esac ;;
+            esac
+          fi
+        done
+        IFS="$acl_save_IFS"
+      fi
+      ;;
+  esac
+  test -n "$acl_libdirstem2" || acl_libdirstem2="$acl_libdirstem"
+])
diff --git a/libtool.m4 b/m4/libtool.m4
similarity index 100%
rename from libtool.m4
rename to m4/libtool.m4
diff --git a/ltoptions.m4 b/m4/ltoptions.m4
similarity index 100%
rename from ltoptions.m4
rename to m4/ltoptions.m4
diff --git a/ltsugar.m4 b/m4/ltsugar.m4
similarity index 100%
rename from ltsugar.m4
rename to m4/ltsugar.m4
diff --git a/ltversion.m4 b/m4/ltversion.m4
similarity index 100%
rename from ltversion.m4
rename to m4/ltversion.m4
diff --git a/lt~obsolete.m4 b/m4/lt~obsolete.m4
similarity index 100%
rename from lt~obsolete.m4
rename to m4/lt~obsolete.m4
diff --git a/m4/nls.m4 b/m4/nls.m4
new file mode 100644
index 0000000..003704c
--- /dev/null
+++ b/m4/nls.m4
@@ -0,0 +1,32 @@
+# nls.m4 serial 5 (gettext-0.18)
+dnl Copyright (C) 1995-2003, 2005-2006, 2008-2010 Free Software Foundation,
+dnl Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+dnl
+dnl This file can can be used in projects which are not available under
+dnl the GNU General Public License or the GNU Library General Public
+dnl License but which still want to provide support for the GNU gettext
+dnl functionality.
+dnl Please note that the actual code of the GNU gettext library is covered
+dnl by the GNU Library General Public License, and the rest of the GNU
+dnl gettext package package is covered by the GNU General Public License.
+dnl They are *not* in the public domain.
+
+dnl Authors:
+dnl   Ulrich Drepper <drepper at cygnus.com>, 1995-2000.
+dnl   Bruno Haible <haible at clisp.cons.org>, 2000-2003.
+
+AC_PREREQ([2.50])
+
+AC_DEFUN([AM_NLS],
+[
+  AC_MSG_CHECKING([whether NLS is requested])
+  dnl Default is enabled NLS
+  AC_ARG_ENABLE([nls],
+    [  --disable-nls           do not use Native Language Support],
+    USE_NLS=$enableval, USE_NLS=yes)
+  AC_MSG_RESULT([$USE_NLS])
+  AC_SUBST([USE_NLS])
+])
diff --git a/m4/po.m4 b/m4/po.m4
new file mode 100644
index 0000000..47f36a4
--- /dev/null
+++ b/m4/po.m4
@@ -0,0 +1,449 @@
+# po.m4 serial 17 (gettext-0.18)
+dnl Copyright (C) 1995-2010 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+dnl
+dnl This file can can be used in projects which are not available under
+dnl the GNU General Public License or the GNU Library General Public
+dnl License but which still want to provide support for the GNU gettext
+dnl functionality.
+dnl Please note that the actual code of the GNU gettext library is covered
+dnl by the GNU Library General Public License, and the rest of the GNU
+dnl gettext package package is covered by the GNU General Public License.
+dnl They are *not* in the public domain.
+
+dnl Authors:
+dnl   Ulrich Drepper <drepper at cygnus.com>, 1995-2000.
+dnl   Bruno Haible <haible at clisp.cons.org>, 2000-2003.
+
+AC_PREREQ([2.50])
+
+dnl Checks for all prerequisites of the po subdirectory.
+AC_DEFUN([AM_PO_SUBDIRS],
+[
+  AC_REQUIRE([AC_PROG_MAKE_SET])dnl
+  AC_REQUIRE([AC_PROG_INSTALL])dnl
+  AC_REQUIRE([AM_PROG_MKDIR_P])dnl defined by automake
+  AC_REQUIRE([AM_NLS])dnl
+
+  dnl Release version of the gettext macros. This is used to ensure that
+  dnl the gettext macros and po/Makefile.in.in are in sync.
+  AC_SUBST([GETTEXT_MACRO_VERSION], [0.18])
+
+  dnl Perform the following tests also if --disable-nls has been given,
+  dnl because they are needed for "make dist" to work.
+
+  dnl Search for GNU msgfmt in the PATH.
+  dnl The first test excludes Solaris msgfmt and early GNU msgfmt versions.
+  dnl The second test excludes FreeBSD msgfmt.
+  AM_PATH_PROG_WITH_TEST(MSGFMT, msgfmt,
+    [$ac_dir/$ac_word --statistics /dev/null >&]AS_MESSAGE_LOG_FD[ 2>&1 &&
+     (if $ac_dir/$ac_word --statistics /dev/null 2>&1 >/dev/null | grep usage >/dev/null; then exit 1; else exit 0; fi)],
+    :)
+  AC_PATH_PROG([GMSGFMT], [gmsgfmt], [$MSGFMT])
+
+  dnl Test whether it is GNU msgfmt >= 0.15.
+changequote(,)dnl
+  case `$MSGFMT --version | sed 1q | sed -e 's,^[^0-9]*,,'` in
+    '' | 0.[0-9] | 0.[0-9].* | 0.1[0-4] | 0.1[0-4].*) MSGFMT_015=: ;;
+    *) MSGFMT_015=$MSGFMT ;;
+  esac
+changequote([,])dnl
+  AC_SUBST([MSGFMT_015])
+changequote(,)dnl
+  case `$GMSGFMT --version | sed 1q | sed -e 's,^[^0-9]*,,'` in
+    '' | 0.[0-9] | 0.[0-9].* | 0.1[0-4] | 0.1[0-4].*) GMSGFMT_015=: ;;
+    *) GMSGFMT_015=$GMSGFMT ;;
+  esac
+changequote([,])dnl
+  AC_SUBST([GMSGFMT_015])
+
+  dnl Search for GNU xgettext 0.12 or newer in the PATH.
+  dnl The first test excludes Solaris xgettext and early GNU xgettext versions.
+  dnl The second test excludes FreeBSD xgettext.
+  AM_PATH_PROG_WITH_TEST(XGETTEXT, xgettext,
+    [$ac_dir/$ac_word --omit-header --copyright-holder= --msgid-bugs-address= /dev/null >&]AS_MESSAGE_LOG_FD[ 2>&1 &&
+     (if $ac_dir/$ac_word --omit-header --copyright-holder= --msgid-bugs-address= /dev/null 2>&1 >/dev/null | grep usage >/dev/null; then exit 1; else exit 0; fi)],
+    :)
+  dnl Remove leftover from FreeBSD xgettext call.
+  rm -f messages.po
+
+  dnl Test whether it is GNU xgettext >= 0.15.
+changequote(,)dnl
+  case `$XGETTEXT --version | sed 1q | sed -e 's,^[^0-9]*,,'` in
+    '' | 0.[0-9] | 0.[0-9].* | 0.1[0-4] | 0.1[0-4].*) XGETTEXT_015=: ;;
+    *) XGETTEXT_015=$XGETTEXT ;;
+  esac
+changequote([,])dnl
+  AC_SUBST([XGETTEXT_015])
+
+  dnl Search for GNU msgmerge 0.11 or newer in the PATH.
+  AM_PATH_PROG_WITH_TEST(MSGMERGE, msgmerge,
+    [$ac_dir/$ac_word --update -q /dev/null /dev/null >&]AS_MESSAGE_LOG_FD[ 2>&1], :)
+
+  dnl Installation directories.
+  dnl Autoconf >= 2.60 defines localedir. For older versions of autoconf, we
+  dnl have to define it here, so that it can be used in po/Makefile.
+  test -n "$localedir" || localedir='${datadir}/locale'
+  AC_SUBST([localedir])
+
+  dnl Support for AM_XGETTEXT_OPTION.
+  test -n "${XGETTEXT_EXTRA_OPTIONS+set}" || XGETTEXT_EXTRA_OPTIONS=
+  AC_SUBST([XGETTEXT_EXTRA_OPTIONS])
+
+  AC_CONFIG_COMMANDS([po-directories], [[
+    for ac_file in $CONFIG_FILES; do
+      # Support "outfile[:infile[:infile...]]"
+      case "$ac_file" in
+        *:*) ac_file=`echo "$ac_file"|sed 's%:.*%%'` ;;
+      esac
+      # PO directories have a Makefile.in generated from Makefile.in.in.
+      case "$ac_file" in */Makefile.in)
+        # Adjust a relative srcdir.
+        ac_dir=`echo "$ac_file"|sed 's%/[^/][^/]*$%%'`
+        ac_dir_suffix="/`echo "$ac_dir"|sed 's%^\./%%'`"
+        ac_dots=`echo "$ac_dir_suffix"|sed 's%/[^/]*%../%g'`
+        # In autoconf-2.13 it is called $ac_given_srcdir.
+        # In autoconf-2.50 it is called $srcdir.
+        test -n "$ac_given_srcdir" || ac_given_srcdir="$srcdir"
+        case "$ac_given_srcdir" in
+          .)  top_srcdir=`echo $ac_dots|sed 's%/$%%'` ;;
+          /*) top_srcdir="$ac_given_srcdir" ;;
+          *)  top_srcdir="$ac_dots$ac_given_srcdir" ;;
+        esac
+        # Treat a directory as a PO directory if and only if it has a
+        # POTFILES.in file. This allows packages to have multiple PO
+        # directories under different names or in different locations.
+        if test -f "$ac_given_srcdir/$ac_dir/POTFILES.in"; then
+          rm -f "$ac_dir/POTFILES"
+          test -n "$as_me" && echo "$as_me: creating $ac_dir/POTFILES" || echo "creating $ac_dir/POTFILES"
+          cat "$ac_given_srcdir/$ac_dir/POTFILES.in" | sed -e "/^#/d" -e "/^[ 	]*\$/d" -e "s,.*,     $top_srcdir/& \\\\," | sed -e "\$s/\(.*\) \\\\/\1/" > "$ac_dir/POTFILES"
+          POMAKEFILEDEPS="POTFILES.in"
+          # ALL_LINGUAS, POFILES, UPDATEPOFILES, DUMMYPOFILES, GMOFILES depend
+          # on $ac_dir but don't depend on user-specified configuration
+          # parameters.
+          if test -f "$ac_given_srcdir/$ac_dir/LINGUAS"; then
+            # The LINGUAS file contains the set of available languages.
+            if test -n "$OBSOLETE_ALL_LINGUAS"; then
+              test -n "$as_me" && echo "$as_me: setting ALL_LINGUAS in configure.in is obsolete" || echo "setting ALL_LINGUAS in configure.in is obsolete"
+            fi
+            ALL_LINGUAS_=`sed -e "/^#/d" -e "s/#.*//" "$ac_given_srcdir/$ac_dir/LINGUAS"`
+            # Hide the ALL_LINGUAS assigment from automake < 1.5.
+            eval 'ALL_LINGUAS''=$ALL_LINGUAS_'
+            POMAKEFILEDEPS="$POMAKEFILEDEPS LINGUAS"
+          else
+            # The set of available languages was given in configure.in.
+            # Hide the ALL_LINGUAS assigment from automake < 1.5.
+            eval 'ALL_LINGUAS''=$OBSOLETE_ALL_LINGUAS'
+          fi
+          # Compute POFILES
+          # as      $(foreach lang, $(ALL_LINGUAS), $(srcdir)/$(lang).po)
+          # Compute UPDATEPOFILES
+          # as      $(foreach lang, $(ALL_LINGUAS), $(lang).po-update)
+          # Compute DUMMYPOFILES
+          # as      $(foreach lang, $(ALL_LINGUAS), $(lang).nop)
+          # Compute GMOFILES
+          # as      $(foreach lang, $(ALL_LINGUAS), $(srcdir)/$(lang).gmo)
+          case "$ac_given_srcdir" in
+            .) srcdirpre= ;;
+            *) srcdirpre='$(srcdir)/' ;;
+          esac
+          POFILES=
+          UPDATEPOFILES=
+          DUMMYPOFILES=
+          GMOFILES=
+          for lang in $ALL_LINGUAS; do
+            POFILES="$POFILES $srcdirpre$lang.po"
+            UPDATEPOFILES="$UPDATEPOFILES $lang.po-update"
+            DUMMYPOFILES="$DUMMYPOFILES $lang.nop"
+            GMOFILES="$GMOFILES $srcdirpre$lang.gmo"
+          done
+          # CATALOGS depends on both $ac_dir and the user's LINGUAS
+          # environment variable.
+          INST_LINGUAS=
+          if test -n "$ALL_LINGUAS"; then
+            for presentlang in $ALL_LINGUAS; do
+              useit=no
+              if test "%UNSET%" != "$LINGUAS"; then
+                desiredlanguages="$LINGUAS"
+              else
+                desiredlanguages="$ALL_LINGUAS"
+              fi
+              for desiredlang in $desiredlanguages; do
+                # Use the presentlang catalog if desiredlang is
+                #   a. equal to presentlang, or
+                #   b. a variant of presentlang (because in this case,
+                #      presentlang can be used as a fallback for messages
+                #      which are not translated in the desiredlang catalog).
+                case "$desiredlang" in
+                  "$presentlang"*) useit=yes;;
+                esac
+              done
+              if test $useit = yes; then
+                INST_LINGUAS="$INST_LINGUAS $presentlang"
+              fi
+            done
+          fi
+          CATALOGS=
+          if test -n "$INST_LINGUAS"; then
+            for lang in $INST_LINGUAS; do
+              CATALOGS="$CATALOGS $lang.gmo"
+            done
+          fi
+          test -n "$as_me" && echo "$as_me: creating $ac_dir/Makefile" || echo "creating $ac_dir/Makefile"
+          sed -e "/^POTFILES =/r $ac_dir/POTFILES" -e "/^# Makevars/r $ac_given_srcdir/$ac_dir/Makevars" -e "s|@POFILES@|$POFILES|g" -e "s|@UPDATEPOFILES@|$UPDATEPOFILES|g" -e "s|@DUMMYPOFILES@|$DUMMYPOFILES|g" -e "s|@GMOFILES@|$GMOFILES|g" -e "s|@CATALOGS@|$CATALOGS|g" -e "s|@POMAKEFILEDEPS@|$POMAKEFILEDEPS|g" "$ac_dir/Makefile.in" > "$ac_dir/Makefile"
+          for f in "$ac_given_srcdir/$ac_dir"/Rules-*; do
+            if test -f "$f"; then
+              case "$f" in
+                *.orig | *.bak | *~) ;;
+                *) cat "$f" >> "$ac_dir/Makefile" ;;
+              esac
+            fi
+          done
+        fi
+        ;;
+      esac
+    done]],
+   [# Capture the value of obsolete ALL_LINGUAS because we need it to compute
+    # POFILES, UPDATEPOFILES, DUMMYPOFILES, GMOFILES, CATALOGS. But hide it
+    # from automake < 1.5.
+    eval 'OBSOLETE_ALL_LINGUAS''="$ALL_LINGUAS"'
+    # Capture the value of LINGUAS because we need it to compute CATALOGS.
+    LINGUAS="${LINGUAS-%UNSET%}"
+   ])
+])
+
+dnl Postprocesses a Makefile in a directory containing PO files.
+AC_DEFUN([AM_POSTPROCESS_PO_MAKEFILE],
+[
+  # When this code is run, in config.status, two variables have already been
+  # set:
+  # - OBSOLETE_ALL_LINGUAS is the value of LINGUAS set in configure.in,
+  # - LINGUAS is the value of the environment variable LINGUAS at configure
+  #   time.
+
+changequote(,)dnl
+  # Adjust a relative srcdir.
+  ac_dir=`echo "$ac_file"|sed 's%/[^/][^/]*$%%'`
+  ac_dir_suffix="/`echo "$ac_dir"|sed 's%^\./%%'`"
+  ac_dots=`echo "$ac_dir_suffix"|sed 's%/[^/]*%../%g'`
+  # In autoconf-2.13 it is called $ac_given_srcdir.
+  # In autoconf-2.50 it is called $srcdir.
+  test -n "$ac_given_srcdir" || ac_given_srcdir="$srcdir"
+  case "$ac_given_srcdir" in
+    .)  top_srcdir=`echo $ac_dots|sed 's%/$%%'` ;;
+    /*) top_srcdir="$ac_given_srcdir" ;;
+    *)  top_srcdir="$ac_dots$ac_given_srcdir" ;;
+  esac
+
+  # Find a way to echo strings without interpreting backslash.
+  if test "X`(echo '\t') 2>/dev/null`" = 'X\t'; then
+    gt_echo='echo'
+  else
+    if test "X`(printf '%s\n' '\t') 2>/dev/null`" = 'X\t'; then
+      gt_echo='printf %s\n'
+    else
+      echo_func () {
+        cat <<EOT
+$*
+EOT
+      }
+      gt_echo='echo_func'
+    fi
+  fi
+
+  # A sed script that extracts the value of VARIABLE from a Makefile.
+  sed_x_variable='
+# Test if the hold space is empty.
+x
+s/P/P/
+x
+ta
+# Yes it was empty. Look if we have the expected variable definition.
+/^[	 ]*VARIABLE[	 ]*=/{
+  # Seen the first line of the variable definition.
+  s/^[	 ]*VARIABLE[	 ]*=//
+  ba
+}
+bd
+:a
+# Here we are processing a line from the variable definition.
+# Remove comment, more precisely replace it with a space.
+s/#.*$/ /
+# See if the line ends in a backslash.
+tb
+:b
+s/\\$//
+# Print the line, without the trailing backslash.
+p
+tc
+# There was no trailing backslash. The end of the variable definition is
+# reached. Clear the hold space.
+s/^.*$//
+x
+bd
+:c
+# A trailing backslash means that the variable definition continues in the
+# next line. Put a nonempty string into the hold space to indicate this.
+s/^.*$/P/
+x
+:d
+'
+changequote([,])dnl
+
+  # Set POTFILES to the value of the Makefile variable POTFILES.
+  sed_x_POTFILES=`$gt_echo "$sed_x_variable" | sed -e '/^ *#/d' -e 's/VARIABLE/POTFILES/g'`
+  POTFILES=`sed -n -e "$sed_x_POTFILES" < "$ac_file"`
+  # Compute POTFILES_DEPS as
+  #   $(foreach file, $(POTFILES), $(top_srcdir)/$(file))
+  POTFILES_DEPS=
+  for file in $POTFILES; do
+    POTFILES_DEPS="$POTFILES_DEPS "'$(top_srcdir)/'"$file"
+  done
+  POMAKEFILEDEPS=""
+
+  if test -n "$OBSOLETE_ALL_LINGUAS"; then
+    test -n "$as_me" && echo "$as_me: setting ALL_LINGUAS in configure.in is obsolete" || echo "setting ALL_LINGUAS in configure.in is obsolete"
+  fi
+  if test -f "$ac_given_srcdir/$ac_dir/LINGUAS"; then
+    # The LINGUAS file contains the set of available languages.
+    ALL_LINGUAS_=`sed -e "/^#/d" -e "s/#.*//" "$ac_given_srcdir/$ac_dir/LINGUAS"`
+    POMAKEFILEDEPS="$POMAKEFILEDEPS LINGUAS"
+  else
+    # Set ALL_LINGUAS to the value of the Makefile variable LINGUAS.
+    sed_x_LINGUAS=`$gt_echo "$sed_x_variable" | sed -e '/^ *#/d' -e 's/VARIABLE/LINGUAS/g'`
+    ALL_LINGUAS_=`sed -n -e "$sed_x_LINGUAS" < "$ac_file"`
+  fi
+  # Hide the ALL_LINGUAS assigment from automake < 1.5.
+  eval 'ALL_LINGUAS''=$ALL_LINGUAS_'
+  # Compute POFILES
+  # as      $(foreach lang, $(ALL_LINGUAS), $(srcdir)/$(lang).po)
+  # Compute UPDATEPOFILES
+  # as      $(foreach lang, $(ALL_LINGUAS), $(lang).po-update)
+  # Compute DUMMYPOFILES
+  # as      $(foreach lang, $(ALL_LINGUAS), $(lang).nop)
+  # Compute GMOFILES
+  # as      $(foreach lang, $(ALL_LINGUAS), $(srcdir)/$(lang).gmo)
+  # Compute PROPERTIESFILES
+  # as      $(foreach lang, $(ALL_LINGUAS), $(top_srcdir)/$(DOMAIN)_$(lang).properties)
+  # Compute CLASSFILES
+  # as      $(foreach lang, $(ALL_LINGUAS), $(top_srcdir)/$(DOMAIN)_$(lang).class)
+  # Compute QMFILES
+  # as      $(foreach lang, $(ALL_LINGUAS), $(srcdir)/$(lang).qm)
+  # Compute MSGFILES
+  # as      $(foreach lang, $(ALL_LINGUAS), $(srcdir)/$(frob $(lang)).msg)
+  # Compute RESOURCESDLLFILES
+  # as      $(foreach lang, $(ALL_LINGUAS), $(srcdir)/$(frob $(lang))/$(DOMAIN).resources.dll)
+  case "$ac_given_srcdir" in
+    .) srcdirpre= ;;
+    *) srcdirpre='$(srcdir)/' ;;
+  esac
+  POFILES=
+  UPDATEPOFILES=
+  DUMMYPOFILES=
+  GMOFILES=
+  PROPERTIESFILES=
+  CLASSFILES=
+  QMFILES=
+  MSGFILES=
+  RESOURCESDLLFILES=
+  for lang in $ALL_LINGUAS; do
+    POFILES="$POFILES $srcdirpre$lang.po"
+    UPDATEPOFILES="$UPDATEPOFILES $lang.po-update"
+    DUMMYPOFILES="$DUMMYPOFILES $lang.nop"
+    GMOFILES="$GMOFILES $srcdirpre$lang.gmo"
+    PROPERTIESFILES="$PROPERTIESFILES \$(top_srcdir)/\$(DOMAIN)_$lang.properties"
+    CLASSFILES="$CLASSFILES \$(top_srcdir)/\$(DOMAIN)_$lang.class"
+    QMFILES="$QMFILES $srcdirpre$lang.qm"
+    frobbedlang=`echo $lang | sed -e 's/\..*$//' -e 'y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/'`
+    MSGFILES="$MSGFILES $srcdirpre$frobbedlang.msg"
+    frobbedlang=`echo $lang | sed -e 's/_/-/g' -e 's/^sr-CS/sr-SP/' -e 's/@latin$/-Latn/' -e 's/@cyrillic$/-Cyrl/' -e 's/^sr-SP$/sr-SP-Latn/' -e 's/^uz-UZ$/uz-UZ-Latn/'`
+    RESOURCESDLLFILES="$RESOURCESDLLFILES $srcdirpre$frobbedlang/\$(DOMAIN).resources.dll"
+  done
+  # CATALOGS depends on both $ac_dir and the user's LINGUAS
+  # environment variable.
+  INST_LINGUAS=
+  if test -n "$ALL_LINGUAS"; then
+    for presentlang in $ALL_LINGUAS; do
+      useit=no
+      if test "%UNSET%" != "$LINGUAS"; then
+        desiredlanguages="$LINGUAS"
+      else
+        desiredlanguages="$ALL_LINGUAS"
+      fi
+      for desiredlang in $desiredlanguages; do
+        # Use the presentlang catalog if desiredlang is
+        #   a. equal to presentlang, or
+        #   b. a variant of presentlang (because in this case,
+        #      presentlang can be used as a fallback for messages
+        #      which are not translated in the desiredlang catalog).
+        case "$desiredlang" in
+          "$presentlang"*) useit=yes;;
+        esac
+      done
+      if test $useit = yes; then
+        INST_LINGUAS="$INST_LINGUAS $presentlang"
+      fi
+    done
+  fi
+  CATALOGS=
+  JAVACATALOGS=
+  QTCATALOGS=
+  TCLCATALOGS=
+  CSHARPCATALOGS=
+  if test -n "$INST_LINGUAS"; then
+    for lang in $INST_LINGUAS; do
+      CATALOGS="$CATALOGS $lang.gmo"
+      JAVACATALOGS="$JAVACATALOGS \$(DOMAIN)_$lang.properties"
+      QTCATALOGS="$QTCATALOGS $lang.qm"
+      frobbedlang=`echo $lang | sed -e 's/\..*$//' -e 'y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/'`
+      TCLCATALOGS="$TCLCATALOGS $frobbedlang.msg"
+      frobbedlang=`echo $lang | sed -e 's/_/-/g' -e 's/^sr-CS/sr-SP/' -e 's/@latin$/-Latn/' -e 's/@cyrillic$/-Cyrl/' -e 's/^sr-SP$/sr-SP-Latn/' -e 's/^uz-UZ$/uz-UZ-Latn/'`
+      CSHARPCATALOGS="$CSHARPCATALOGS $frobbedlang/\$(DOMAIN).resources.dll"
+    done
+  fi
+
+  sed -e "s|@POTFILES_DEPS@|$POTFILES_DEPS|g" -e "s|@POFILES@|$POFILES|g" -e "s|@UPDATEPOFILES@|$UPDATEPOFILES|g" -e "s|@DUMMYPOFILES@|$DUMMYPOFILES|g" -e "s|@GMOFILES@|$GMOFILES|g" -e "s|@PROPERTIESFILES@|$PROPERTIESFILES|g" -e "s|@CLASSFILES@|$CLASSFILES|g" -e "s|@QMFILES@|$QMFILES|g" -e "s|@MSGFILES@|$MSGFILES|g" -e "s|@RESOURCESDLLFILES@|$RESOURCESDLLFILES|g" -e "s|@CATALOGS@|$CATALOGS|g" -e "s|@JAVACATALOGS@|$JAVACATALOGS|g" -e "s|@QTCATALOGS@|$QTCATALOGS|g" -e "s|@TCLCATALOGS@|$TCLCATALOGS|g" -e "s|@CSHARPCATALOGS@|$CSHARPCATALOGS|g" -e 's,^#distdir:,distdir:,' < "$ac_file" > "$ac_file.tmp"
+  if grep -l '@TCLCATALOGS@' "$ac_file" > /dev/null; then
+    # Add dependencies that cannot be formulated as a simple suffix rule.
+    for lang in $ALL_LINGUAS; do
+      frobbedlang=`echo $lang | sed -e 's/\..*$//' -e 'y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/'`
+      cat >> "$ac_file.tmp" <<EOF
+$frobbedlang.msg: $lang.po
+	@echo "\$(MSGFMT) -c --tcl -d \$(srcdir) -l $lang $srcdirpre$lang.po"; \
+	\$(MSGFMT) -c --tcl -d "\$(srcdir)" -l $lang $srcdirpre$lang.po || { rm -f "\$(srcdir)/$frobbedlang.msg"; exit 1; }
+EOF
+    done
+  fi
+  if grep -l '@CSHARPCATALOGS@' "$ac_file" > /dev/null; then
+    # Add dependencies that cannot be formulated as a simple suffix rule.
+    for lang in $ALL_LINGUAS; do
+      frobbedlang=`echo $lang | sed -e 's/_/-/g' -e 's/^sr-CS/sr-SP/' -e 's/@latin$/-Latn/' -e 's/@cyrillic$/-Cyrl/' -e 's/^sr-SP$/sr-SP-Latn/' -e 's/^uz-UZ$/uz-UZ-Latn/'`
+      cat >> "$ac_file.tmp" <<EOF
+$frobbedlang/\$(DOMAIN).resources.dll: $lang.po
+	@echo "\$(MSGFMT) -c --csharp -d \$(srcdir) -l $lang $srcdirpre$lang.po -r \$(DOMAIN)"; \
+	\$(MSGFMT) -c --csharp -d "\$(srcdir)" -l $lang $srcdirpre$lang.po -r "\$(DOMAIN)" || { rm -f "\$(srcdir)/$frobbedlang.msg"; exit 1; }
+EOF
+    done
+  fi
+  if test -n "$POMAKEFILEDEPS"; then
+    cat >> "$ac_file.tmp" <<EOF
+Makefile: $POMAKEFILEDEPS
+EOF
+  fi
+  mv "$ac_file.tmp" "$ac_file"
+])
+
+dnl Initializes the accumulator used by AM_XGETTEXT_OPTION.
+AC_DEFUN([AM_XGETTEXT_OPTION_INIT],
+[
+  XGETTEXT_EXTRA_OPTIONS=
+])
+
+dnl Registers an option to be passed to xgettext in the po subdirectory.
+AC_DEFUN([AM_XGETTEXT_OPTION],
+[
+  AC_REQUIRE([AM_XGETTEXT_OPTION_INIT])
+  XGETTEXT_EXTRA_OPTIONS="$XGETTEXT_EXTRA_OPTIONS $1"
+])
diff --git a/m4/progtest.m4 b/m4/progtest.m4
new file mode 100644
index 0000000..2d804ac
--- /dev/null
+++ b/m4/progtest.m4
@@ -0,0 +1,92 @@
+# progtest.m4 serial 6 (gettext-0.18)
+dnl Copyright (C) 1996-2003, 2005, 2008-2010 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+dnl
+dnl This file can can be used in projects which are not available under
+dnl the GNU General Public License or the GNU Library General Public
+dnl License but which still want to provide support for the GNU gettext
+dnl functionality.
+dnl Please note that the actual code of the GNU gettext library is covered
+dnl by the GNU Library General Public License, and the rest of the GNU
+dnl gettext package package is covered by the GNU General Public License.
+dnl They are *not* in the public domain.
+
+dnl Authors:
+dnl   Ulrich Drepper <drepper at cygnus.com>, 1996.
+
+AC_PREREQ([2.50])
+
+# Search path for a program which passes the given test.
+
+dnl AM_PATH_PROG_WITH_TEST(VARIABLE, PROG-TO-CHECK-FOR,
+dnl   TEST-PERFORMED-ON-FOUND_PROGRAM [, VALUE-IF-NOT-FOUND [, PATH]])
+AC_DEFUN([AM_PATH_PROG_WITH_TEST],
+[
+# Prepare PATH_SEPARATOR.
+# The user is always right.
+if test "${PATH_SEPARATOR+set}" != set; then
+  echo "#! /bin/sh" >conf$$.sh
+  echo  "exit 0"   >>conf$$.sh
+  chmod +x conf$$.sh
+  if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then
+    PATH_SEPARATOR=';'
+  else
+    PATH_SEPARATOR=:
+  fi
+  rm -f conf$$.sh
+fi
+
+# Find out how to test for executable files. Don't use a zero-byte file,
+# as systems may use methods other than mode bits to determine executability.
+cat >conf$$.file <<_ASEOF
+#! /bin/sh
+exit 0
+_ASEOF
+chmod +x conf$$.file
+if test -x conf$$.file >/dev/null 2>&1; then
+  ac_executable_p="test -x"
+else
+  ac_executable_p="test -f"
+fi
+rm -f conf$$.file
+
+# Extract the first word of "$2", so it can be a program name with args.
+set dummy $2; ac_word=[$]2
+AC_MSG_CHECKING([for $ac_word])
+AC_CACHE_VAL([ac_cv_path_$1],
+[case "[$]$1" in
+  [[\\/]]* | ?:[[\\/]]*)
+    ac_cv_path_$1="[$]$1" # Let the user override the test with a path.
+    ;;
+  *)
+    ac_save_IFS="$IFS"; IFS=$PATH_SEPARATOR
+    for ac_dir in ifelse([$5], , $PATH, [$5]); do
+      IFS="$ac_save_IFS"
+      test -z "$ac_dir" && ac_dir=.
+      for ac_exec_ext in '' $ac_executable_extensions; do
+        if $ac_executable_p "$ac_dir/$ac_word$ac_exec_ext"; then
+          echo "$as_me: trying $ac_dir/$ac_word..." >&AS_MESSAGE_LOG_FD
+          if [$3]; then
+            ac_cv_path_$1="$ac_dir/$ac_word$ac_exec_ext"
+            break 2
+          fi
+        fi
+      done
+    done
+    IFS="$ac_save_IFS"
+dnl If no 4th arg is given, leave the cache variable unset,
+dnl so AC_PATH_PROGS will keep looking.
+ifelse([$4], , , [  test -z "[$]ac_cv_path_$1" && ac_cv_path_$1="$4"
+])dnl
+    ;;
+esac])dnl
+$1="$ac_cv_path_$1"
+if test ifelse([$4], , [-n "[$]$1"], ["[$]$1" != "$4"]); then
+  AC_MSG_RESULT([$][$1])
+else
+  AC_MSG_RESULT([no])
+fi
+AC_SUBST([$1])dnl
+])
diff --git a/man/ChangeLog b/man/ChangeLog
index abc66e7..efb9636 100644
--- a/man/ChangeLog
+++ b/man/ChangeLog
@@ -1,260 +1,3 @@
-2011-04-25  Atsushi Eno  <atsushi at ximian.com>
-
-	Document MONO_WCF_TRACE environment variable.
-
-2011-03-14  Mark Probst  <mark.probst at gmail.com>
-
-	[sgen] Debug options for disabling minor and/or major collection.
-
-2011-03-08  Ankit Jain  <radical at corewars.org>
-
-	[xbuild] Implement FileLogger . Fix #676650 .
-
-2011-03-03  Ankit Jain  <radical at corewars.org>
-
-	[xbuild] Update man page with info about FrameworkList.xml
-
-2011-02-28  Ankit Jain  <radical at corewars.org>
-
-	[xbuild] Add support for multi-targeting arbitrary frameworks.
-
-	ToolsVersion 4.0 supports targeting arbitrary frameworks defined
-	by FrameworkList.xml files and referenced by
-	$(TargetFrameworkMoniker), which is of the format:
-	Identifier,Version=<version>[,Profile=<profile>]
-
-	built as:
-	$(TargetFrameworkIdentifier),Version=$(TargetFrameworkVersion)[,Profile=$(TargetFrameworkProfile)]
-
-	eg. '.NETFramework,Version=v4.0' .
-
-	Frameworks are searched for in (order):
-
-	1. Paths specified in the environment variable
-	$XBUILD_FRAMEWORK_FOLDERS_PATH 2.
-	/Library/Frameworks/Mono.framework/External/xbuild-frameworks on
-	Mac OSX. 3. MSBuild property $(TargetFrameworkRoot) 4.
-	$prefix/lib/mono/xbuild-frameworks (default location)
-
-	.NET frameworks 2.0/3.0/3.5/4.0 have corresponding
-	FrameworkList.xml files now, which allows projects to target them.
-	Custom frameworks like MonoDroid can install suitable
-	FrameworkList.xml files, and projects can target them using the
-	correct $(TargetFrameworkIdentifier) and
-	$(TargetFrameworkVersion).
-
-	Update man page.
-
-2011-02-22  Ankit Jain  <radical at corewars.org>
-
-	[xbuild] Use the env var $MSBuildExtensionsPath before trying
-	other paths.
-
-	Change the order of the "search paths", so that the environment
-	variable can always override it. Update the man page to reflect
-	the change.
-
-2011-01-30  Miguel de Icaza  <miguel at gnome.org>
-
-	[repl] Add support for -e EXPRESSION to the csharp command
-
-2011-01-30  Miguel de Icaza  <miguel at gnome.org>
-
-	Document csharp #! support
-
-2011-01-19  Rodrigo Kumpera  <kumpera at gmail.com>
-
-	Document precise marking
-
-2011-01-17  Marek Safar  <marek.safar at gmail.com>
-
-	Add new mcs -sdk option
-
-2011-01-11  Ankit Jain  <radical at corewars.org>
-
-	[xbuild] Update man page, new search paths for extensions and .pc
-	files.
-
-2010-10-06  Miguel de Icaza  <miguel at gnome.org>
-
-	Update docs
-
-2010-12-03  Mark Probst  <mark.probst at gmail.com>
-
-	[sgen] Make concurrent sweep user-selectable.
-
-	It's off by default for now.
-
-2010-11-29  Paolo Molaro  <lupus at oddwiz.org>
-
-	* man/mprof-report.1: updated the documentation. * decode.c: added
-	jit report and sample report. * proflog.h, proflog.c: implemented
-	statistical sampling mode, using either the mono built-in signal
-	based sampling and the Linux perforamnce counters perf subsystem.
-	Unmanaged symbols are currently available for ELF systems
-	implementing dl_iterate_phdr() or systems implementing dladdr().
-
-2010-11-19  Mark Probst  <mark.probst at gmail.com>
-
-	[sgen] Implement evacuation for parallel mark.
-
-2010-11-19  Miguel de Icaza  <miguel at gnome.org>
-
-	Remove mentions of Logging and Heap Shot profilers from man page
-
-2010-11-12  Paolo Molaro  <lupus at oddwiz.org>
-
-	Log profiler: removed the hsmode option, use heapshot=MODE
-	instead.
-
-2010-11-11  Paolo Molaro  <lupus at oddwiz.org>
-
-	Added the mprof-report manpage.
-
-2010-10-30  Mark Probst  <mark.probst at gmail.com>
-
-	[sgen] User-settable evacuation threshold.
-
-	A MONO_GC_PARAMS option for setting the evacuation threshold.
-
-2010-10-20  Pablo Ruiz Garcia  <pablo.ruiz at gmail.com>
-
-	[API] X509 related enhacemnts to allow 1) associating keystore's
-	private keys with their corresponding public certificates found at
-	X509Stores, and 2) importing private keys to X509Stores along with
-	certificates.
-
-	mcs/class/corlib/Mono.Security.X509/X509Store.cs:
-	mcs/class/Mono.Security/Mono.Security.X509/X509Store.cs:
-	mcs/class/corlib/Mono.Security.X509/X509StoreManager.cs:
-	mcs/class/Mono.Security/Mono.Security.X509/X509StoreManager.cs:
-	Modified MSX.X509Store to allow importing privateKeys along
-	certificates (by using RSACryptoServiceProvider and
-	KeyPairPersister). Fixed X509Store to use certificate's hash as
-	CspParameters.KeyContainerName.
-
-	mcs/tools/security/certmgr.cs: Added a new -importKey action to
-	certmgr, which allows importing a PKCS12 contained key into our
-	KeyPair store. Added a more (verbose) output to certmgr's -list
-	action.
-
-	man/certmgr.1: Updated certmgr man page ti reflect -importKey
-	addition.
-
-	mcs/class/corlib/System.Security.Cryptography/CspParameters.cs:
-	mcs/class/corlib/System.Security.Cryptography/RSACryptoServiceProvider.cs:
-	Implemented RSACryptoServiceProvider.CspKeyContainerInfo getter
-	RSACryptoServiceProvider will not take into account
-	CspParameterFlags.UseExistingKey by throwing a
-	CryptographicException if keyset identified by KeyContainerName
-	does not exists.
-
-2010-10-21  Miguel de Icaza  <miguel at gnome.org>
-
-	Document server option to --debugger-agent
-
-2010-09-07  Miguel de Icaza  <miguel at gnome.org>
-
-	Add profile docs
-
-2010-09-03  Rodrigo Kumpera  <kumpera at gmail.com>
-
-	Add notes when to use cardtable and remset.
-
-2010-09-02  Ankit Jain  <radical at corewars.org>
-
-	[xbuild] Update man page to add "/tv:" option.
-
-	Add option to specify toolsversion from the command line, to the
-	man page.
-
-2010-08-27  Gonzalo Paniagua Javier  <gonzalo.mono at gmail.com>
-
-	Add env.var. to control revocation mode.
-
-	Added a new environment variable, MONO_X509_REVOCATION_MODE that
-	lets the user choose the default validation mode for X509 chains.
-
-2010-08-20  Mark Probst  <mark.probst at gmail.com>
-
-	[Documentation] Update man page with write barrier setting.
-
-2010-08-23  Andrés G. Aragoneses  <knocte at gmail.com>
-
-	[tools] Merge mono-abi-info tool into a "--abi" flag for
-	mono-api-info
-
-	This commit also includes a brief (help welcome!) man page for
-	mono-api-info that explains its usage.
-
-2010-08-19  Ankit Jain  <radical at corewars.org>
-
-	[xbuild] Support extra paths for MSBuildExtensionsPath32/64 .
-
-	Support extra search paths via env variables for
-	MSBuildExtensionsPath32/64 also.
-
-	Update man page.
-
-2010-08-18  Ankit Jain  <radical at corewars.org>
-
-	[xbuild] Update man page.
-
-2010-08-18  Ankit Jain  <radical at corewars.org>
-
-	[xbuild] Add env var to dump details of reference resolution.
-
-	If xbuild is unable to resolve a reference, then it dumps details
-	of why it failed. This adds a env var
-	XBUILD_LOG_REFERENCE_RESOLVER, which if set, logs those details of
-	why a particular search path was used to resolve the reference.
-
-	Update the man page also.
-
-2010-08-17  Miguel de Icaza  <miguel at gnome.org>
-
-	Copyright fix: the owner is Chris, not Novell
-
-2010-08-13  Chris Bacon  <chrisbacon76 at gmail.com>
-
-	Added ccrewrite.1 man page to makefile
-
-2010-08-13  Chris Bacon  <chrisbacon76 at gmail.com>
-
-	Added man page for ccrewrite
-
-2010-08-10  Mark Probst  <mark.probst at gmail.com>
-
-	[Documentation] Explain nursery size a bit in man page.
-
-2010-08-08  Mark Probst  <mark.probst at gmail.com>
-
-	[sgen] Fixed heap for Mark&Sweep.
-
-	This is a new variant of Mark&Sweep which uses a pre-allocated
-	fixed-size heap instead of a dynamically grown, segmented one. The
-	main advantage of this heap organization is that it takes only one
-	pointer comparison to determine whether an object is on the small
-	object heap or in the LOS, instead of inspecting the object's
-	size, which requires three loads. Since that determination is
-	required for every marked object, speeding it up can improve
-	performance significantly.
-
-2010-08-06  Mark Probst  <mark.probst at gmail.com>
-
-	[sgen] Make parallel vs non-parallel mark&sweep selectable.
-
-	Make the parallel Mark&Sweep collector selectable with the "major"
-	option of the "MONO_GC_PARAMS" variable as "marksweep-par". The
-	serial Mark&Sweep collector remains the default as "marksweep".
-
-2010-08-05  Mark Probst  <mark.probst at gmail.com>
-
-	[Documentation] Document SGen environment variables.
-
-	Document the MONO_GC_PARAMS variable in the man page and the
-	"major" option of this variable in the error message.
-
 2010-08-03  Andrés G. Aragoneses  <andres at lindenlab.com>
 
 	* monolinker.1: Add the name="..." notation to the field examples too
diff --git a/man/ChangeLog.old b/man/ChangeLog.old
deleted file mode 100644
index efb9636..0000000
--- a/man/ChangeLog.old
+++ /dev/null
@@ -1,370 +0,0 @@
-2010-08-03  Andrés G. Aragoneses  <andres at lindenlab.com>
-
-	* monolinker.1: Add the name="..." notation to the field examples too
-	(besides the signature="..." one).
-
-2010-07-12  Rolf Bjarne Kvinge  <RKvinge at novell.com>
-
-	* mono.1: Document MONO_DEBUG's new reverse-pinvoke-exceptions option.
-
-2010-04-23  Miguel de Icaza  <miguel at novell.com>
-
-	* mono.1: Sort environment variables, update a couple of docs.
-
-2010-04-07  Andrés G. Aragoneses  <andres at lindenlab.com>
-
-	* monolinker.1: Fix typo.
-
-2010-04-01  Sebastien Pouliot  <sebastien at ximian.com>
-
-	* mono.1: Document the new "security" option for logging
-
-2010-03-26  Zoltan Varga  <vargaz at gmail.com>
-
-	* mono.1: Document the MONO_ENABLE_SHM env variable.
-
-2010-03-03  Rolf Bjarne Kvinge  <RKvinge at novell.com>
-
-	* mono.1: Document exception tracing.
-
-2010-02-18  Marek Habersack  <mhabersack at novell.com>
-
-	* mono-configuration-crypto.1: added
-
-	* Makefile.am (man_MANS): added mono-configuration-crypto.1
-
-2010-02-10  Geoff Norton  <gnorton at novell.com>
-
-	* mono.1: Document the aot compiler options.
-
-2010-02-08  Ankit Jain  <jankit at novell.com>
-
-	* lc.1: Fix typos.
-
-2009-12-11  Marek Habersack  <mhabersack at novell.com>
-
-	* mono.1: documented the IOMAP report profiler module
-
-2009-11-23  Marek Habersack  <mhabersack at novell.com>
-
-	* mono.1: documented the 'report' option for MONO_IOMAP
-
-2009-10-11  Ankit Jain  <jankit at novell.com>
-
-	* xbuild.1: Add info about env var XBUILD_COLORS.
-
-2009-10-09  Zoltan Varga  <vargaz at gmail.com>
-
-	* mono.1: Document --debug=gdb option.
-
-2009-09-24  Ankit Jain  <jankit at novell.com>
-
-	* xbuild.1: Add info about env var XBUILD_EMIT_SOLUTION.
-
-2009-09-14  Massimiliano Mantione  <massi at ximian.com>
-
-	* mono.1: Updated the profiler documentation, removing the obsolete
-	signal related options and adding the description of the new socket
-	based command interface.
-
-2009-08-21  Ankit Jain  <jankit at novell.com>
-
-	* Makefile.am (man_MANS): Add xbuild.1
-	* xbuild.1: New.
-
-2009-06-12  Jb Evain  <jbevain at novell.com>
-
-	* mcs.1: update the /platform information.
-
-2009-05-12  Tor Lillqvist  <tml at novell.com>
-
-	* mkbundle.1: Document MONO_BUNDLED_OPTIONS.
-
-2009-04-09  Jonathan Pryor  <jpryor at novell.com>
-
-	* mdoc-update.1: Document -L, -r options.
-
-2009-04-06  Jonathan Pryor  <jpryor at novell.com>
-
-	* mdoc.5: Document //code/@src attribute.
-
-2009-04-03  Andrés G. Aragoneses  <aaragoneses at novell.com>
-
-	* monolinker.1: Document -m modifier.
-
-2009-03-31  Jonathan Pryor  <jpryor at novell.com>
-
-	* mdoc-update.1: Fix --out=DIRECTORY formatting.  (It was causing the
-	  remaining text to be bolded within monodoc).
-
-2009-03-30  Jonathan Pryor  <jpryor at novell.com>
-
-	* mdoc-update.1: Add new --exceptions=added functionality.
-
-2009-03-23  Massimiliano Mantione  <massi at ximian.com>
-
-	* mono.1: Updated the profiler documentation, removing the "gc-signal"
-	option (it does not exist anymore) and clarifying the role of signals
-	in heap profiling.
-
-2009-03-20  Jonathan Pryor  <jpryor at novell.com>
-
-	* mdoc-export-html.1: Document --force-update parameter.
-
-2008-12-31  Massimiliano Mantione  <massi at ximian.com>
-
-	* mono.1: Updated the profiler documentation, removing the "ts"
-	option (it does not exist anymore) and explaining the defaults for
-	allocation and heap profiling.
-
-2008-12-12  Rolf Bjarne Kvinge  <RKvinge at novell.com>
-
-	* Makefile.am, vbnc.1: Remove vbnc.1. It's living in the
-	  mono-basic module now.
-
-2008-11-20  Rodrigo Kumpera  <rkumpera at novell.com>
-
-	* mono.1: Document env vars MONO_XDEBUG and MONO_VERBOSE_METHOD.
-
-2008-10-18  Jonathan Pryor  <jpryor at novell.com>
-
-	* Makefile.am (man_MANS): Remove unpackaged files.
-
-2008-10-18  Jonathan Pryor  <jpryor at novell.com>
-
-	* mdvalidator.1: Rename to mdvalidater.1.
-	* Makefile.am (man_MANS): Rename to mdvalidator.1 to mdvalidater.1.
-
-2008-10-18  Jonathan Pryor  <jpryor at novell.com>
-
-	* Makefile.am (man_MANS): Add mdoc.5 and mono-config.5.
-
-2008-10-18  Mark Probst  <mark.probst at gmail.com>
-
-	* mono.1: Documentation for "--no-x86-stack-align" option.
-
-2008-10-17  Jonathan Pryor  <jpryor at novell.com>
-
-	* Makefile: Add man pages added from monodoc/man...
-
-2008-10-12  Atsushi Enomoto  <atsushi at ximian.com>
-
-	* mono.1 : svn.myrealbox -> anonsvn.mono-project .
-
-2008-10-10  Massimiliano Mantione  <massi at ximian.com>
-
-	* mono.1: Document the new "sas" option.
-
-2008-09-11  Daniel Morgan <monodanmorg at yahoo.com>
-
-	* sqlsharp.1: added commands
-	\bcs, \cs, \listproviders, \p
-
-2008-08-27  Zoltan Varga  <vargaz at gmail.com>
-
-	* mono-config.5: Fix a typo.
-
-2008-08-22  Massimiliano Mantione  <massi at ximian.com>
-
-	* mono.1: Restore original nonvisible formatting (' ', '\-', and '"'
-	were added everywhere by mistake in r109428).
-
-2008-08-21  Massimiliano Mantione  <massi at ximian.com>
-
-	* mono.1: Updated description of the logging profiler.
-
-2008-08-08  Zoltan Varga  <vargaz at gmail.com>
-
-	* mono.1: Remove no-dlsym aot option for now.
-	
-	* mono.1: Document the 'static' aot option.
-
-2008-08-01  Massimiliano Mantione  <massi at ximian.com>
-
-	* mono.1: Updated description of the logging profiler.
-
-2008-04-22  Robert Jordan  <robertj at gmx.net>
-
-	* mono.1: Document MONO_DEBUG=no-gdb-backtrace.
-
-2008-04-21  Martin Baulig  <martin at ximian.com>
-
-	* mono.1: Documented the new --debug=mdb-optimizations option.
-
-2008-04-17  Marek Habersack  <mhabersack at novell.com>
-
-	* mono.1: add description of the new NullFileWatcher to the
-	documentation of the MONO_MANAGED_WATCHER envvar.
-
-2008-03-26  Massimiliano Mantione  <massi at ximian.com>
-	* mono.1: Added description of the logging profiler.
-
-2008-03-08  Zoltan Varga  <vargaz at gmail.com>
-
-	* mono.1: Fix a typo.
-
-2008-03-07  Rodrigo Kumpera  <rkumpera at novell.com>
-
-	* mono.1: Documented new --security options validil
-	and verifiable.
-
-2007-12-08  Jonathan Pryor  <jpryor at novell.com>
-
-	* wsdl.1: Fix groff comment (so that it doesn't appear in monodoc's
-	  man-provider output).
-
-2007-12-08  Marek Habersack  <mhabersack at novell.com>
-
-	* mono.1: added short documentation about the
-	MONO_ASPNET_INHIBIT_SETTINGSMAP environment variable.
-
-2007-12-07  Mark Probst  <mark.probst at gmail.com>
-
-	* mono.1: Added a short paragraph on the MONO_GENERIC_SHARING
-	environment variable.
-
-2007-11-21  Marek Habersack  <mhabersack at novell.com>
-
-	* mconfig.1: modify to reflect parameter changes in mconfig.
-
-2007-10-23  Marek Habersack  <mhabersack at novell.com>
-
-	* mconfig.1: added
-
-	* Makefile.am (man_MANS): added mconfig.1
-
-2007-10-17  Sebastien Pouliot  <sebastien at ximian.com>
-
-	* sn.1: Fix help for -T / -t as this shows the public key token
-	(and not the public key).
-
-2007-08-31  Sebastien Pouliot  <sebastien at ximian.com>
-
-	* permview.1: add documentation for the -xml option now available
-	with the Cecil-enabled version of permview.
-
-2007-07-17  Jb Evain <jbevain at novell.com>
-
-	* monolinker.1: add monolinker man page.
-
-2007-07-11  Jb Evain <jbevain at novell.com>
-
-	* mcs.1: add info about smcs.
-
-2007-07-04  Atsushi Enomoto <atsushi at ximian.com>
-
-	* mcs.1 : we do not use fixed Latin1 by default.
-
-2007-07-02  Jackson Harper  <jackson at ximian.com>
-
-	* xamlg.1:
-	* Makefile.am: Moved to more appropriate place.
-
-2007-07-02  Jackson Harper  <jackson at ximian.com>
-
-	* xamlg.1:
-	* Makefile.am: Add man page for xamlg.
-
-2007-04-26  Dick Porter  <dick at ximian.com>
-
-	* mono.1: Document MONO_DISABLE_SHM
-
-2007-02-20  Rolf Bjarne Kvinge  <RKvinge at novell.com>
-
-	* vbnc.1: Added man entry for vbnc.
-	* mbas.1: Deleted.
-	* Makefile.am: Added vbnc.1
-
-Mon Jan 22 11:15:26 CET 2007 Paolo Molaro <lupus at ximian.com>
-
-	* mono.1: typo fixes from jessemerriman at warpmail.net (Jesse Merriman).
-
-2007-01-17  Alp Toker  <alp at atoker.com>
-
-	* gacutil.1: Spelling and grammar fixes.
-
-2007-01-17  Alp Toker  <alp at atoker.com>
-
-	* sn.1: Spelling and grammar fixes.
-
-2006-12-08  Sebastien Pouliot  <sebastien at ximian.com>
-
-	* mono.1: Document the MONO_TLS_SESSION_CACHE_TIMEOUT environment 
-	variable that can be used to control the validity period of the 
-	SSL/TLS negotiation cache.
-
-2006-11-29  Joshua Tauberer  <jit at occams.info>
-
-	* mkbundle.1: Corrected minor errors, added --nomain option.
-
-2006-11-14  Atsushi Enomoto  <atsushi at ximian.com>
-
-	* genxs.1 : introduced <baseSerializer> and <implementation>
-	  elements. See also sgen.
-
-2006-11-14  Atsushi Enomoto  <atsushi at ximian.com>
-
-	* sgen.1, Makefile: revised a bit, to not mislead as if the output
-	  were sources. It indeed generates an assembly.
-
-2006-11-14  Atsushi Enomoto  <atsushi at ximian.com>
-
-	* sgen.1, Makefile: added manpage for sgen.
-
-2006-10-03  Dick Porter  <dick at ximian.com>
-
-	* mono.1: Document the new MONO_IO_PORTABILITY_HELP environment
-	variable
-
-2006-09-08  Robert Jordan  <robertj at gmx.net>
-
-	* mkbundle.1: The `-z' option is now supported under Windows.
-
-2006-08-31  Geoff Norton  <gnorton at customerdna.com>
-
-	* macpack.1: Fix a typo for the -appname option.
-
-2006-08-23  Wade Berrier <wberrier at novell.com>
-
-	* gacutil.1 : Change automake usage example because we always use $(prefix)/lib 
-	for the gac, even on 64 bit systems.
-
-2006-08-20  Gert Driesen  <drieseng at users.sourceforge.net>
-
-	* mono.1 : Document MONO_EVENTLOG_TYPE, replaces MONO_EVENTLOG_PATH.
-
-2006-08-17  Sebastien Pouliot  <sebastien at ximian.com>
-
-	* sn.1: Document the (new - 1.1.17) support for PKCS#12/PFX password
-	protected files to sign assemblies.
-
-2006-08-14  Atsushi Enomoto  <atsushi at ximian.com>
-
-	* mono.1 : MONO_LOCAL_EVENTLOG_PATH -> MONO_EVENTLOG_PATH.
-
-2006-08-14  Atsushi Enomoto  <atsushi at ximian.com>
-
-	* mono.1 : description on MONO_LOCAL_EVENTLOG_PATH.
-
-2006-03-15  Miguel de Icaza  <miguel at novell.com>
-
-	* mono.1: Document MONO_XEXCEPTIONS and MONO_XSYNC, create new
-	section, sort the previous enviornment section.
-
-2006-03-06  Lluis Sanchez Gual  <lluis at novell.com>
-
-	* mono.1: Updated MONO_XMLSERIALIZER_THS option information.
-
-2006-02-22  Jelmer Vernooij <jelmer at samba.org>
-	* mbas.1, Makefile.am: Add manpage for mbas (based on mcs.1)
-
-2006-01-26  Jonathan Pryor  <jonpryor at vt.edu>
-
-	* ChangeLog: Started
-	* mono-shlib-cop.1: Document another BUG/design issue that it doesn't check
-	  for; formatting/style changes.
-
-2009-05-22  Michael Barker  <mike at middlesoft.co.uk>
-
-	* man.1: Added documentation for MONO_MESSAGING_PROVIDER environment
-	variable.
diff --git a/man/Makefile.am b/man/Makefile.am
index 4b1810c..0610c01 100644
--- a/man/Makefile.am
+++ b/man/Makefile.am
@@ -4,6 +4,7 @@ man_MANS = \
 	certmgr.1             \
 	chktrust.1            \
 	cilc.1                \
+	crlupdate.1           \
 	csharp.1              \
 	disco.1               \
 	dtd2xsd.1             \
@@ -54,6 +55,7 @@ man_MANS = \
 	xbuild.1	      \
 	xsd.1		      \
 	mono-configuration-crypto.1 \
-	ccrewrite.1
+	ccrewrite.1			\
+	cccheck.1
 
 EXTRA_DIST = $(man_MANS)
diff --git a/man/Makefile.in b/man/Makefile.in
index bb8473c..0a1b26d 100644
--- a/man/Makefile.in
+++ b/man/Makefile.in
@@ -37,11 +37,13 @@ target_triplet = @target@
 subdir = man
 DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ChangeLog
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/libtool.m4 \
-	$(top_srcdir)/ltoptions.m4 $(top_srcdir)/ltsugar.m4 \
-	$(top_srcdir)/ltversion.m4 $(top_srcdir)/lt~obsolete.m4 \
-	$(top_srcdir)/nls.m4 $(top_srcdir)/po.m4 \
-	$(top_srcdir)/progtest.m4 $(top_srcdir)/acinclude.m4 \
+am__aclocal_m4_deps = $(top_srcdir)/m4/iconv.m4 \
+	$(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
+	$(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \
+	$(top_srcdir)/m4/progtest.m4 $(top_srcdir)/acinclude.m4 \
 	$(top_srcdir)/configure.in
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
@@ -87,7 +89,6 @@ AUTOCONF = @AUTOCONF@
 AUTOHEADER = @AUTOHEADER@
 AUTOMAKE = @AUTOMAKE@
 AWK = @AWK@
-BISON = @BISON@
 BOEHM_DEFINES = @BOEHM_DEFINES@
 BUILD_EXEEXT = @BUILD_EXEEXT@
 BUILD_GLIB_CFLAGS = @BUILD_GLIB_CFLAGS@
@@ -141,9 +142,11 @@ INTL = @INTL@
 LD = @LD@
 LDFLAGS = @LDFLAGS@
 LIBC = @LIBC@
-LIBGC_CFLAGS = @LIBGC_CFLAGS@
+LIBGC_CPPFLAGS = @LIBGC_CPPFLAGS@
 LIBGC_LIBS = @LIBGC_LIBS@
 LIBGC_STATIC_LIBS = @LIBGC_STATIC_LIBS@
+LIBICONV = @LIBICONV@
+LIBMONO_LA = @LIBMONO_LA@
 LIBOBJS = @LIBOBJS@
 LIBS = @LIBS@
 LIBTOOL = @LIBTOOL@
@@ -156,6 +159,7 @@ LLVM_LIBS = @LLVM_LIBS@
 LN_S = @LN_S@
 LTCOMPILE = @LTCOMPILE@
 LTCXXCOMPILE = @LTCXXCOMPILE@
+LTLIBICONV = @LTLIBICONV@
 LTLIBOBJS = @LTLIBOBJS@
 MAINT = @MAINT@
 MAKEINFO = @MAKEINFO@
@@ -278,6 +282,7 @@ man_MANS = \
 	certmgr.1             \
 	chktrust.1            \
 	cilc.1                \
+	crlupdate.1           \
 	csharp.1              \
 	disco.1               \
 	dtd2xsd.1             \
@@ -328,7 +333,8 @@ man_MANS = \
 	xbuild.1	      \
 	xsd.1		      \
 	mono-configuration-crypto.1 \
-	ccrewrite.1
+	ccrewrite.1			\
+	cccheck.1
 
 EXTRA_DIST = $(man_MANS)
 all: all-am
@@ -343,9 +349,9 @@ $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__confi
 	      exit 1;; \
 	  esac; \
 	done; \
-	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu man/Makefile'; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign man/Makefile'; \
 	$(am__cd) $(top_srcdir) && \
-	  $(AUTOMAKE) --gnu man/Makefile
+	  $(AUTOMAKE) --foreign man/Makefile
 .PRECIOUS: Makefile
 Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
 	@case '$?' in \
diff --git a/man/cccheck.1 b/man/cccheck.1
new file mode 100644
index 0000000..aead19a
--- /dev/null
+++ b/man/cccheck.1
@@ -0,0 +1,67 @@
+.\" 
+.\" cccheck manual page.
+.\" Copyright (C) 2011 Alexander Chebaturkin
+.\" Author:
+.\"   Alexander Chebaturkin (chebaturkin at gmail.com)
+.\"
+.TH Mono "cccheck"
+.SH NAME
+cccheck \- Perform static code contracts verification for CLR assemblies.
+.SH SYNOPSIS
+.PP
+.B cccheck --assembly=<assembly> [options]
+.SH DESCRIPTION
+Perform static code contracts verification to find bugs and inconsistences
+between code and specification. This includes non-null, integer analyses. 
+.PP
+The assembly must have been built with the symbol CONTRACTS_FULL defined,
+otherwise the calls to the contract methods will have been removed
+by the compiler.
+.PP
+Currently only Contract.Assume() and Contract.Assert() methods are 
+supported. Only non-null analysis is supported, the consecutive analyses are
+in development. An error message will be shown if cccheck is unable to process
+all or some of the methods of specified assembly.
+.SH CONFIGURATION OPTIONS
+.TP
+.I "--assembly <assembly-name>"
+The assembly to perform static verification.
+.TP
+.I "--debug"
+Shows debug information about process of proving the assertions. It shows
+four layers of abstraction, raw layer, stack layer, heap layer, 
+and substituted expression level.
+.TP
+.I "--method=<method-name-substring>"
+String for finding method. It filters all methods in assembly where method
+name has this parameter as a substring.
+.TP
+.I "--help"
+Show help for cccheck, listing configuration options.
+
+.SH EXAMPLES
+.TP
+Suppose you have a method:
+  void Method() {
+    object x = null;
+    int y = 1;
+    if (y % 2 == 1)
+      x = new object();
+    else
+      x = new string();
+
+   Contract.Assert(x != null);
+}
+
+After the verification the tool will have results in following format:
+"Assertion at : [Subroutine: <id> Block <blockId> PC <id>] : 
+ is (true|false|unproven|unreachable)".
+(PC is a program counter)
+
+.SH AUTHOR
+Written by Alexander Chebaturkin
+.SH COPYRIGHT
+Copyright 2011 Alexander Chebaturkin.
+Released under MIT license.
+.SH WEB SITE
+Visit http://www.mono-project.com for details
diff --git a/man/crlupdate.1 b/man/crlupdate.1
new file mode 100644
index 0000000..8e20437
--- /dev/null
+++ b/man/crlupdate.1
@@ -0,0 +1,56 @@
+.\" 
+.\" crlupdate manual page.
+.\" 
+.\" Author:
+.\"   Sebastien Pouliot  <sebastien at ximian.com>
+.\" 
+.\" Copyright (C) 2011 Novell, Inc (http://www.novell.com)
+.\"
+.TH Mono "crlupdate"
+.SH NAME
+crlupdate \- Mono Certficate Revocation List Downloader and Updater
+.SH SYNOPSIS
+.PP
+.B crlupdate [-m] [-v] [-f]
+.SH DESCRIPTION
+This tool allows the download of new, or update of existing, Certficate 
+Revocation List (CRL) associated with the certificates present in the 
+user (default) or machine stores. The CRL present in the stores are used
+to determine the validity of unexpired, trusted X.509 certificates.
+To ensure CRL are always fresh consider automating the updates using the
+\fIat\fR (or similar) command(s).
+.SH OPTIONS
+.TP
+.I "-m"
+Update CRL associated with certificates in the machine store. By default
+the tool works on the user store.
+.TP
+.I "-v"
+Verbose mode. Display extra information while downloading and updating
+the CRL.
+.TP
+.I "-f"
+Force the download of all CRL even if they are not normally due to be 
+updated (i.e. nextUpdate is still in the future).
+
+.SH EXAMPLES
+.TP
+.B mono crlupdate.exe
+Download (if missing) or update (if existing and past due date) all CRL
+associated with certificates present in user store.
+.TP
+.B mono crlupdate.exe -f -m
+Force the download of every CRL associated with certificates present in
+the machine store. Note that the user running this needs read/write 
+access to the machine store or not update will occur.
+
+.SH AUTHOR
+Written by Sebastien Pouliot
+.SH COPYRIGHT
+Copyright (C) 2011 Novell.
+.SH MAILING LISTS
+Visit http://lists.ximian.com/mailman/listinfo/mono-list for details.
+.SH WEB SITE
+Visit http://www.mono-project.com for details
+.SH SEE ALSO
+.BR certmgr(1), at(1)
diff --git a/man/makecert.1 b/man/makecert.1
index 006341f..41284a4 100644
--- a/man/makecert.1
+++ b/man/makecert.1
@@ -1,7 +1,7 @@
 .\" 
 .\" makecert manual page.
 .\" Copyright 2003 Motus Technologies
-.\" Copyright 2004-2005 Novell
+.\" Copyright 2004-2005, 2011 Novell
 .\" Author:
 .\"   Sebastien Pouliot (sebastien at ximian.com)
 .\"
@@ -104,6 +104,12 @@ applicable for certificates that have BasicConstraint set to Authority (-cy
 authority). This is used to limit the chain of certificates than can be
 issued under this authority.
 .TP
+.I "-alt filename"
+Add a subjectAltName extension to the certificate. Each line from 'filename'
+will be added as a DNS entry of the extension. This option is useful if you
+want to create a single SSL certificate to work on several hosts that do not
+share a common domain name (i.e. CN=*.domain.com would not work).
+.TP
 .I "-eku oid[,oid]"
 Add some extended key usage OID to the certificate.
 .TP
diff --git a/man/mcs.1 b/man/mcs.1
index 0fdec3b..dc1e5f4 100644
--- a/man/mcs.1
+++ b/man/mcs.1
@@ -4,7 +4,7 @@
 ..
 .TH mcs 1 "6 January 2001"
 .SH NAME 
-mcs, gmcs, smcs \- Mono C# Compiler (1.0, 2.0, Moonlight)
+mcs \- Mono C# Compiler
 .SH SYNOPSIS
 .B mcs 
 [option] [source-files]
@@ -17,23 +17,8 @@ prepending the @ symbol to the response file name.
 .PP
 The 
 .I mcs
-compiler is used to compile against the 1.x profile and implements
-C# 1.0 and parts of C# 2.0 and C# 3.0 specification which do not depend
-on generics.
-.PP
-The
-.I gmcs
-compiler is used to compile against the 2.0 profile and implements
-the complete C# 3.0 specification.
-.PP
-The
-.I smcs
-compiler is used to compile against the Silverlight/Moonlight profile.
-This profile is designed to be used for creating Silverlight/Moonlight
-applications that will run on a web browser.   The API exposed by this
-profile is a small subset of the 3.5 API (even if it is commonly
-referred as the 2.1 API, this API is a small subset of 2.0 with a few
-extensions).
+compiler is used to compile against the latest Mono Base Class Library
+version and fully implements C# 1.0, 2.0, 3.0 and 4.0 specifications.
 .PP
 See the section on packages for more information.
 .PP
@@ -109,10 +94,10 @@ or can be used by methods that have been tagged with the Conditional
 attribute. 
 .TP
 .I \-debug, \-debug+
-Generate debugging information.  To obtain stack traces with debugging
+Generate debugging information. To obtain stack traces with debugging
 information, you need to invoke the mono runtime with the `--debug'
-flag.  This debugging information is stored inside the assembly as a
-resource.
+flag. The debugging information is stored in a MDB file located in
+same output folder as produced assembly.
 .TP
 .I \-debug-
 Do not generate debugging information.
@@ -148,6 +133,11 @@ generate an exception that can be caught by a debugger.
 This flag is ignored by Mono's C# compiler and is present only to
 allow MCS to be used as a CSC replacement for msbuild/xbuild.
 .TP
+.I \-fullpaths
+Any source code error or warning issued by the compiler includes file
+name only by default. This option causes compiler to issue absolute file
+path instead.
+.TP
 .I \-keyfile:KEYFILE
 Strongname (sign) the output assembly using the key pair present in 
 the specified strong name key file (snk). A full key pair is required
@@ -173,7 +163,7 @@ The possible values are:
 .TP
 .I "Default"
 Instruct compiler to use the latest version. Equivalent is to omit the
-switch (this currently defaults to the C# 3.0 language specification).
+switch (this currently defaults to the C# 4.0 language specification).
 .TP
 .I "ISO-1"
 Restrict compiler to use only first ISO standardized features.
@@ -189,14 +179,17 @@ anonymous methods for example.
 Restrict the compiler to use only the features available in C# 3.0
 (a superset of ISO-1 and ISO-2).
 .TP
+.I "4"
+Restrict the compiler to use only the features available in C# 4.0
+specification.
+.TP
 .I "future"
-Enables features from upcoming versions of the language.   As of
-May 2009 this includes support for C# 4 as released in Visual Studio 2010 beta 1.
+Enables unstable features from upcoming versions of the language.
 .PP
-Notice that this flag only controls the language features available to
-the programmer, it does not control the kind of assemblies produced.
-Programs compiled with mcs will reference the 1.1 APIs, Programs
-compiled with gmcs reference the 2.0 APIs.
+Notice that this flag only restricts the language features available to
+the programmer. A version of produced assemblies can be controled using
+.I SDK
+option.
 .ne
 .RE
 .TP
@@ -225,9 +218,10 @@ Makes the compiler ignore warnings specified in the comma-separated
 list WARNLIST>
 .TP
 .I -optimize, -optimize+, -optimize-
-Controls whether to perform optimizations on the code.   -optimize and
+Controls compiler code generation optimizations on the code. Using -optimize or
 -optimize+ will turn on optimizations, -optimize- will turn it off.
-The default in mcs is to optimize+.
+The default in mcs is to optimize-. The option can be mixed with -debug
+but for the best debugging experience it is recommended leave the options off.
 .TP
 .I -out:FNAME, -o FNAME
 Names the output file to be generated.
@@ -262,11 +256,7 @@ libraries).
 .TP
 .I \-pkg:silver
 References the assemblies for creating Moonlight/Silverlight
-applications.  This is automatically used when using the 
-.I smcs 
-compiler, but it is here when developers want to use it with the
-.I gmcs
-compiler.
+applications.
 .TP
 .I \-pkg:silverdesktop
 Use this option to create Moonlight/Silverlight applications that
@@ -287,8 +277,8 @@ For more details see the PACKAGE section in this document
 .TP
 .I \-platform:ARCH
 Used to specify the target platform. The possible values are: anycpu,
-x86, x64 or itanium. As of June 2009, the Mono runtime only have support
-to emit anycpu and x86 assemblies.
+anycpu32bitpreferred, arm, x86, x64 or itanium. The default option is
+anycpu.
 .TP
 .I -resource:RESOURCE[,ID]
 Embeds to the given resource file.  The optional ID can be used to
@@ -352,9 +342,12 @@ shell will perform globbing, so you might want to use it like this:
 .fi
 .TP
 .I \-sdk:VERSION
-Used to specify the version of Base Class Library assemblies. The possible
-values are: 2 (default), 4. The version number means which .NET version
-should the produced assembly be compatible with.
+Used to specify the version of Base Class Library assemblies used for
+compilation. Following predefined values are valid: 2, 4 (default) as
+well as any custom value. The predefined version number means which
+.NET version should the produced assembly be compatible with. When
+custom value is specified mcs will try to find Base Class Libraries
+in the mono installed location PREFIX/lib/mono/<value>.
 .TP
 .I \-\-shell
 Starts up the compiler in interactive mode, providing a C# shell for
@@ -418,10 +411,6 @@ current directory, the compiler base directory and if the assembly is
 not found in any of those places in the directories specified as
 arguments to the -lib: command argument.
 .PP
-Depending on the invocation for the C# compiler (mcs, gmcs, or smcs)
-you will get a default set of libraries and versions of those
-libraries that are referenced.
-.PP
 The compiler uses the library path to locate libraries, and is able to
 reference libraries from a particular package if that directory is
 used.  To simplify the use of packages, the C# compiler includes the
@@ -541,10 +530,10 @@ funded by Ximian, Novell and Marek Safar.
 .SH LICENSE
 The Mono Compiler Suite is released under the terms of the GNU GPL or
 the MIT X11.  Please read the accompanying `COPYING' file for details.
-Alternative licensing for the compiler is available from Novell.
+Alternative licensing for the compiler is available from Xamarin.
 .PP
 .SH SEE ALSO
-csharp(1), mdb(1), mono(1), mopen(1), mint(1), pkg-config(1),sn(1)
+csharp(1), mdb(1), mono(1), mopen(1), pkg-config(1), sn(1)
 .PP
 .SH BUGS
 To report bugs in the compiler, you must file them on our bug tracking
@@ -554,7 +543,7 @@ http://www.mono-project.com/Bugs
 The Mono Mailing lists are listed at http://www.mono-project.com/Mailing_Lists
 .SH MORE INFORMATION
 The Mono C# compiler was developed by Novell, Inc
-(http://www.novell.com, http) and is based on the
+(http://www.novell.com) and Xamarin Inc (http://www.xamarin.com) is based on the
 ECMA C# language standard available here:
 http://www.ecma.ch/ecma1/STAND/ecma-334.htm
 .PP
diff --git a/man/mono.1 b/man/mono.1
index 20f3760..3904feb 100644
--- a/man/mono.1
+++ b/man/mono.1
@@ -1,11 +1,12 @@
 .\" 
 .\" mono manual page.
 .\" Copyright 2003 Ximian, Inc. 
-.\" Copyright 2004-2009 Novell, Inc. 
+.\" Copyright 2004-2011 Novell, Inc. 
+.\" Copyright 2011-2012 Xamarin Inc
 .\" Author:
 .\"   Miguel de Icaza (miguel at gnu.org)
 .\"
-.TH Mono "Mono 2.5"
+.TH Mono "Mono 2.11"
 .SH NAME
 mono \- Mono's ECMA-CLI native code generator (Just-in-Time and Ahead-of-Time)
 .SH SYNOPSIS
@@ -102,6 +103,15 @@ than one can be specified:
 .RS
 .ne 8
 .TP
+.I autoreg
+The AOT compiler will emit a (ELF only) library initializer to automatically
+register the aot compiled module with the runtime.  This is only useful in static
+mode
+.TP
+.I asmonly
+Instructs the AOT compiler to output assembly code instead of an
+object file.
+.TP
 .I bind-to-runtime-version
 .Sp
 If specified, forces the generated AOT files to be bound to the
@@ -112,48 +122,61 @@ This is currently an experimental feature as it is not complete.
 This instructs Mono to precompile code that has historically not been
 precompiled with AOT.   
 .TP
-.I outfile=[filename]
-Instructs the AOT compiler to save the output to the specified file.
+.I direct-pinvoke
+.Sp
+When this option is specified, P/Invoke methods are invoked directly
+instead of going through the operating system symbol lookup operation.
 .TP
-.I write-symbols
-Instructs the AOT compiler to emit debug symbol information.
+.I llvm-path=<PREFIX>
+Same for the llvm tools 'opt' and 'llc'.
 .TP
-.I save-temps,keep-temps
-Instructs the AOT compiler to keep temporary files.
+.I mtriple=<TRIPLE>
+Use the GNU style target triple <TRIPLE> to determine some code generation options, i.e.
+--mtriple=armv7-linux-gnueabi will generate code that targets ARMv7. This is currently
+only supported by the ARM backend. In LLVM mode, this triple is passed on to the LLVM
+llc compiler.
 .TP
-.I threads=[number]
-This is an experimental option for the AOT compiler to use multiple threads
-when compiling the methods.
+.I nimt-trampolines=[number]
+When compiling in full aot mode, the IMT trampolines must be precreated
+in the AOT image.  You can add additional method trampolines with this argument.
+Defaults to 128.
 .TP
 .I nodebug
 Instructs the AOT compiler to not output any debugging information.
 .TP
-.I ntrampolines=[number]
-When compiling in full aot mode, the method trampolines must be precreated
-in the AOT image.  You can add additional method trampolines with this argument.
-Defaults to 1024.
-.TP
 .I nrgctx-trampolines=[number]
 When compiling in full aot mode, the generic sharing trampolines must be precreated
 in the AOT image.  You can add additional method trampolines with this argument.
 Defaults to 1024.
 .TP
-.I nimt-trampolines=[number]
-When compiling in full aot mode, the IMT trampolines must be precreated
+.I ntrampolines=[number]
+When compiling in full aot mode, the method trampolines must be precreated
 in the AOT image.  You can add additional method trampolines with this argument.
-Defaults to 128.
+Defaults to 1024.
+.TP
+.I outfile=[filename]
+Instructs the AOT compiler to save the output to the specified file.
 .TP
 .I print-skipped-methods
 If the AOT compiler cannot compile a method for any reason, enabling this flag
 will output the skipped methods to the console.
 .TP
-.I autoreg
-The AOT compiler will emit a (ELF only) library initializer to automatically
-register the aot compiled module with the runtime.  This is only useful in static
-mode
+.I readonly-value=namespace.typename.fieldname=type/value
+Override the value of a static readonly field. Usually, during JIT
+compilation, the static constructor is ran eagerly, so the value of
+a static readonly field is known at compilation time and the compiler
+can do a number of optimizations based on it. During AOT, instead, the static
+constructor can't be ran, so this option can be used to set the value of such
+a field and enable the same set of optimizations.
+Type can be any of i1, i2, i4 for integers of the respective sizes (in bytes).
+Note that signed/unsigned numbers do not matter here, just the storage size.
+This option can be specified multiple times and it doesn't prevent the static
+constructor for the type defining the field to execute with the usual rules
+at runtime (hence possibly computing a different value for the field).
+
 .TP
-.I asmonly
-Instructs the AOT compiler to output assembly code instead of an object file.
+.I save-temps,keep-temps
+Instructs the AOT compiler to keep temporary files.
 .TP
 .I soft-debug
 This instructs the compiler to generate sequence point checks that
@@ -163,11 +186,11 @@ hardware configurations like the cell phones and video gaming
 consoles). 
 .TP
 .I static
-Create an ELF object file (.o) which can be statically linked into an executable
-when embedding the mono runtime. When this option is used, the object file needs to
-be registered with the embedded runtime using the mono_aot_register_module function
-which takes as its argument the mono_aot_module_<ASSEMBLY NAME>_info global symbol 
-from the object file:
+Create an ELF object file (.o) or .s file which can be statically linked into an
+executable when embedding the mono runtime. When this option is used, the object file
+needs to be registered with the embedded runtime using the mono_aot_register_module
+function which takes as its argument the mono_aot_module_<ASSEMBLY NAME>_info global
+symbol from the object file:
 
 .nf
 extern void *mono_aot_module_hello_info;
@@ -175,7 +198,21 @@ extern void *mono_aot_module_hello_info;
 mono_aot_register_module (mono_aot_module_hello_info);
 .fi
 .ne
-
+.TP
+.I stats
+Print various stats collected during AOT compilation.
+.TP
+.I threads=[number]
+This is an experimental option for the AOT compiler to use multiple threads
+when compiling the methods.
+.TP
+.I tool-prefix=<PREFIX>
+Prepends <PREFIX> to the name of tools ran by the AOT compiler, i.e. 'as'/'ld'. For
+example, --tool=prefix=arm-linux-gnueabi- will make the AOT compiler run
+'arm-linux-gnueabi-as' instead of 'as'.
+.TP
+.I write-symbols
+Instructs the AOT compiler to emit debug symbol information.
 .PP
 For more information about AOT, see: http://www.mono-project.com/AOT
 .RE
@@ -196,17 +233,10 @@ start a debugging agent inside the Mono runtime and connect it to a
 client user interface will control the Mono process.
 This option is typically used by IDEs, like the MonoDevelop IDE.
 .PP
-The
-configuration is specified using one of more of the following options:
+The configuration is specified using one of more of the following options:
 .RS
 .ne 8
 .TP
-.I transport=transport_name
-.Sp
-This is used to specify the transport that the debugger will use to
-communicate.   It must be specified and currently requires this to
-be 'dt_socket'. 
-.TP
 .I address=host:port
 .Sp
 Use this option to specify the IP address where your debugger client is
@@ -227,6 +257,18 @@ host/port configured with the \fBaddress\fR option.  If you set it to 'y', it
 instructs the Mono runtime to start debugging in server mode, where Mono
 actively waits for the debugger front end to connect to the Mono process.  
 Mono will print out to stdout the IP address and port where it is listening.
+.TP
+.I suspend=[y/n]
+Defaults to yes, with the default option Mono will suspend the vm on startup 
+until it connects successfully to a debugger front end.  If you set it to 'n', in 
+conjunction with \fBserver=y\fR, it instructs the Mono runtime to run as normal, 
+while caching metadata to send to the debugger front end on connection..
+.TP
+.I transport=transport_name
+.Sp
+This is used to specify the transport that the debugger will use to
+communicate.   It must be specified and currently requires this to
+be 'dt_socket'. 
 .ne
 .RE
 .TP
@@ -897,6 +939,13 @@ This is can also be enabled by default by passing the
 .Sp
 This is the default from mono 2.8 onwards.
 .TP
+\fBMONO_DNS\fR
+When set, enables the use of a fully managed DNS resolver instead of the
+regular libc functions. This resolver performs much better when multiple
+queries are run in parallel.
+
+Note that /etc/nsswitch.conf will be ignored.
+.TP
 \fBMONO_EGD_SOCKET\fR
 For platforms that do not otherwise have a way of obtaining random bytes
 this can be set to the name of a file system socket on which an egd or
@@ -913,6 +962,10 @@ a Mono process through the environment.   This is useful for example
 to force all of your Mono processes to use LLVM or SGEN without having
 to modify any launch scripts.
 .TP
+\fBMONO_ENV_OPTIONS\fR
+Used to pass extra options to the debugger agent in the runtime, as they were passed
+using --debugger-agent=.
+.TP
 \fBMONO_EVENTLOG_TYPE\fR
 Sets the type of event log provider to use (for System.Diagnostics.EventLog).
 .Sp
@@ -998,6 +1051,11 @@ for the fixed-heap Mark&Sweep collector (i.e. `marksweep-fixed' and
 `k', `m' and `g' to specify kilo-, mega- and gigabytes, respectively.
 The default is 512 megabytes.
 .TP
+\fBsoft-heap-limit=\fIsize\fR
+Once the heap size gets larger than this size, ignore what the default
+major collection trigger metric says and only allow four nursery size's
+of major heap growth between major collections.
+.TP
 \fBwbarrier=\fIwbarrier\fR
 Specifies which write barrier to use.  Options are `cardtable' and
 `remset'.  The card table barrier is faster but less precise, and only
@@ -1045,6 +1103,17 @@ words.  Do not use these options in production.
 \fInumber\fR
 Sets the debug level to the specified number.
 .TP
+\fBprint-allowance\fR
+After each major collection prints memory consumption for before and
+after the collection and the allowance for the minor collector, i.e. how
+much the heap is allowed to grow from minor collections before the next
+major collection is triggered.
+.TP
+\fBprint-pinning\fR
+Gathers statistics on the classes whose objects are pinned in the
+nursery and for which global remset entries are added.  Prints those
+statistics when shutting down.
+.TP
 \fBcollect-before-allocs\fR
 .TP
 \fBcheck-at-minor-collections\fR
@@ -1077,6 +1146,13 @@ scanning is available.
 \fBcheck-scan-starts\fR
 If set, does a plausibility check on the scan_starts before and after each collection
 .TP
+\fBverify-nursery-at-minor-gc\fR
+If set, does a complete object walk of the nursery at the start of each minor collection.
+.TP
+\fBdump-nursery-at-minor-gc\fR
+If set, dumps the contents of the nursery at the start of each minor collection. Requires 
+verify-nursery-at-minor-gc to be set.
+.TP
 \fBheap-dump=\fIfile\fR
 Dumps the heap contents to the specified file.   To visualize the
 information, use the mono-heapviz tool.
@@ -1568,7 +1644,7 @@ http://www.mono-project.com
 .SH SEE ALSO
 .PP
 certmgr(1), csharp(1), mcs(1), mdb(1), monocov(1), monodis(1),
-mono-config(5), mozroots(1), pdb2mdb(1), xsp(1), mod_mono(8).
+mono-config(5), mozroots(1), mprof-report(1), pdb2mdb(1), xsp(1), mod_mono(8).
 .PP
 For more information on AOT:
 http://www.mono-project.com/AOT
diff --git a/mcs/ChangeLog b/mcs/ChangeLog
index 0ffc8b3..3111e81 100644
--- a/mcs/ChangeLog
+++ b/mcs/ChangeLog
@@ -1,62 +1,3 @@
-2011-01-05  Marek Safar  <marek.safar at gmail.com>
-
-	Build mcs before docs
-
-2010-12-29  Marek Safar  <marek.safar at gmail.com>
-
-	Build culevel in basic as well
-
-2010-12-29  Marek Safar  <marek.safar at gmail.com>
-
-	[661642] Fixed v4 resgen compilation
-
-2010-12-16  Marek Safar  <marek.safar at gmail.com>
-
-	Fix resgen build order
-
-2010-12-16  Marek Safar  <marek.safar at gmail.com>
-
-	Switch to single mcs compiler for all managed code build
-
-2010-12-03  Zoltan Varga  <vargaz at gmail.com>
-
-	Remove unused nunit.key file.
-
-2010-11-03  Zoltan Varga  <vargaz at gmail.com>
-
-	Remove obsolete mcs/configure script. Fixes #650806.
-
-2010-10-20  Marek Safar  <marek.safar at gmail.com>
-
-	Clean up test files
-
-2010-10-20  Marek Safar  <marek.safar at gmail.com>
-
-	[601801] Fixes for parsing nant documentation
-
-	Gleb Golubitsky <rush.william at gmail.com>
-
-2010-09-15  Marek Safar  <marek.safar at gmail.com>
-
-	There are actually some 3.5 only dlls, thanks to ankit for poiting
-	out.
-
-2010-09-15  Marek Safar  <marek.safar at gmail.com>
-
-	Removed class from net_3_5 subdirs
-
-2010-09-08  Jb Evain  <jbevain at gmail.com>
-
-	Orchestrate the monodroid build bootstrap
-
-2010-08-24  Zoltan Varga  <vargaz at gmail.com>
-
-	Update the message in the mcs dir-check.
-
-2010-08-18  Gonzalo Paniagua Javier  <gonzalo.mono at gmail.com>
-
-	Ignore TestResult.xml too
-
 2010-04-03  Ankit Jain  <jankit at novell.com>
 
 	* Makefile: Process tools/xbuild for 3.5 also.
diff --git a/mcs/ChangeLog.old b/mcs/ChangeLog.old
deleted file mode 100644
index 3111e81..0000000
--- a/mcs/ChangeLog.old
+++ /dev/null
@@ -1,933 +0,0 @@
-2010-04-03  Ankit Jain  <jankit at novell.com>
-
-	* Makefile: Process tools/xbuild for 3.5 also.
-
-2010-03-16  Jb Evain  <jbevain at novell.com>
-
-	* Makefile: rename the net_2_1 profile to moonlight.
-
-2010-03-03  Rolf Bjarne Kvinge  <RKvinge at novell.com>
-
-	* Makefile: Make basic the bootstrapping profile for net_2_1_bootstrap.
-
-2010-03-03  Atsushi Enomoto  <atsushi at ximian.com>
-
-	* docs/Makefile : drop Mono.Data.SqliteClient.
-
-2010-02-28  Miguel de Icaza  <miguel at novell.com>
-
-	* docs/Makefile: install during the 4.0 build now.
-
-	* Makefile: Process `docs' now on the 4.0 profile.
-
-2010-01-25  Atsushi Enomoto  <atsushi at ximian.com>
-
-	* Makefile : finally System.ServiceModel.dll is on the centum tests.
-
-2009-10-01  Marek Safar  <marek.safar at gmail.com>
-
-	* Makefile: Removed net_1_1 bootstrap.
-
-2009-09-07  Atsushi Enomoto  <atsushi at ximian.com>
-
-	* Makefile: add some WCF assemblies to centum_tests.
-
-2009-07-21  Jb Evain  <jbevain at novell.com>
-
-	* Makefile: specify bootstrap and SUBDIRS for the monotouch profile.
-
-2009-07-16  Raja R Harinath  <harinath at hurrynot.org>
-
-	Improve coarse-grain parallelism in the build
-	* Makefile (_boot_:net_2_0_bootstrap): Depend on
-	'net_1_1_bootstrap' profile, rather than 'net_1_1'.
-
-2009-07-10  Atsushi Enomoto  <atsushi at ximian.com>
-
-	* nunit20 : removed old framework.
-
-2009-06-07  Marek Safar  <marek.safar at gmail.com>
-
-	* Makefile: Add net_4_0* profiles.
-
-2009-02-24  Jonathan Pryor  <jpryor at novell.com>
-
-	* docs/Makefile: Remove and don't install nunit-docs.source.  As
-	  Atsushi Enomoto said on 2008-11-26, Mono's NUnit is for internal use
-	  only, and installing nunit-docs.source causes an warning message
-	  during monodoc startup.
-	* docs/nunit-docs.source: Remove.
-
-2009-02-03  Rodrigo Kumpera  <rkumpera at novell.com>
-
-	* docs/Makefile: Fix install-local and uninstall-local if
-	DISABLE_MCS_DOCS is defined.
-
-2009-02-02  Rodrigo Kumpera  <rkumpera at novell.com>
-
-	* docs/Makefile: Don't build build-documentation if DISABLE_MCS_DOCS
-	is defined.
-
-2009-01-31  Rodrigo Kumpera  <rkumpera at novell.com>
-
-	* docs/Makefile: use -f with rm on the clean target so
-	rm doesn't complain about missing files.
-
-2008-12-10  Atsushi Enomoto  <atsushi at ximian.com>
-
-	* Makefile : remove sys.messaging from CENTUM_TESTS. It has never
-	  been supported, and now, it's heavily developed.
-
-2008-12-08  Jonathan Pryor  <jpryor at novell.com>
-
-	* docs/monodoc.xml: Rename the "File Formats" node to "Commands and
-	  Files", so that ~all man pages can be under the same node.
-	* docs/lang-csharp.source: Since C# is the only current language, move
-	  the child nodes "up" a node so we have "Languages/C# Compiler Error
-	  Reference" and "Languages/C# Language Specification" nodes.
-
-2008-12-02  Jonathan Pryor  <jpryor at novell.com>
-
-	* docs/Makefile: Build additional directories (Npgsql,
-	  System.Configuration.Install, System.Design, System.Runtime.Remoting,
-	  System.Runtime.Serialization.Formatters.Soap); shorten entries.
-
-2008-11-26  Atsushi Enomoto  <atsushi at ximian.com>
-
-	* docs/Makefile: remove nunit docs that do not exist (and I don't
-	  think such docs for private mono use should be provided).
-
-2008-11-26  Atsushi Enomoto  <atsushi at ximian.com>
-
-	* Makefile : I happened to remove errors and docs which
-	  used to be broken.
-
-2008-11-25  Atsushi Enomoto  <atsushi at ximian.com>
-
-	* Makefile : replace nunit20 with nunit24.
-
-2008-11-18  Jonathan Pryor  <jpryor at novell.com>
-
-	* docs/Makefile: Don't build mono-file-formats.*, mono-tools.*
-	* docs/mono-file-formats.config, docs/mono-file-formats.source, 
-	  docs/mono-tools.config, docs/mono-tools.source: Removed (now located 
-	  in mono/docs).
-
-2008-11-02  Jonathan Pryor  <jpryor at novell.com>
-
-	* docs/Makefile (MONO_DIRS): Add Mono.Simd.
-
-2008-10-31  Jonathan Pryor  <jpryor at novell.com>
-
-	* docs/Makefile: Restructure the *.tree/*.zip rules to support
-	  concurrent builds (`make -jN`).
-
-2008-10-27  Jonathan Pryor  <jpryor at novell.com>
-
-	* docs/Makefile (DISTFILES): Add mono-file-formats.config.
-
-2008-10-22  Jonathan Pryor  <jpryor at novell.com>
-
-	* docs (svn:ignore): Ignore generated files.
-	* docs/lang-csharp.source: Added; combined .source file for the C#
-	  language specification and error reference.
-	* docs/Makefile: Support lang-csharp.source, mono-file-formats.*, etc.
-	* *.tree/*.zip should be rebuilt when Makefile is changed.
-	* docs/mono-file-formats.config, docs/mono-file-formats.source: Added;
-	  moving file format documentation out from mono-tools.* so that it's
-	  easier to find.
-	* docs/mono-tools.config: Move mdoc(5), mono-config(5) to
-	  mono-file-formats.config.
-	* docs/mono-tools.source, docs/Mono.source, docs/netdocs.source,
-	  docs/Novell.source, docs/nunit-docs.source: Add /monodoc/node
-	  information so that the documentation is inserted into the correct
-	  location.
-	* docs/monodoc.xml: Vastly simplify the default monodoc.xml as
-	  structure can be/has been pushed out into the .source files.  This
-	  should help simplify the life of downstream packagers who wish to
-	  add additional documentation to monodoc.
-	* docs/ecma334.source, docs/cs-errors.source: Remove (replaced with
-	  lang-csharp.source).
-
-2008-10-20  Jonathan Pryor  <jpryor at novell.com>
-
-	* docs/Makefile (MONO_DIRS): Add Mono.Data.SqliteClient docs.
-
-2008-10-18  Jonathan Pryor  <jpryor at novell.com>
-
-	* docs/Makefile (MONODOC_INSTALL_DIR): Prefix path with $(DESTDIR) so 
-	  that it installs properly under the buildbot.
-
-2008-10-18  Raja R Harinath  <harinath at hurrynot.org>
-
-	* docs/Makefile (DISTFILES): Don't use 'find' to list files.
-
-2008-10-18  Raja R Harinath  <harinath at hurrynot.org>
-
-	* Makefile (net_2_0_SUBDIRS): Add 'docs'.
-	* docs/Makefile: Build documentation only in the net_2_0 profile.
-
-2008-10-17  Jonathan Pryor  <jpryor at novell.com>
-
-	* docs/Makefile: Add install/uninstall support.
-
-2008-10-17  Jonathan Pryor  <jpryor at novell.com>
-
-	* docs/Makefile: Assemble documentation.
-	* docs/cs-errors.config: Update to refer to correct directory.
-	* docs/mono-tools.config: Man pages are in mono/man now...
-
-2008-10-08  Zoltan Varga  <vargaz at gmail.com>
-
-	* README: Update after the profile changes.
-
-	* Makefile */Makefile build/profiles/*.make: Rename the 'default'
-	profile to 'net_1_1'.
-
-2008-05-14  Marek Safar  <marek.safar at gmail.com>
-
-	* Makefile: Enabled more tests.
-
-2008-02-18  Raja R Harinath  <harinath at hurrynot.org>
-
-	* Makefile (net_2_0_centum_tests): Add System.Xml.Linq here.
-
-2008-02-17  Raja R Harinath  <harinath at hurrynot.org>
-
-	* Makefile (_boot_): Orchestrate the net_2_1 bootstrap.
-	(net_2_1_bootstrap_SUBDIRS, net_2_1_raw_SUBDIRS): New.
-
-2008-02-06  Zoltan Varga  <vargaz at gmail.com>
-
-	* Makefile (dir-check): Hopefully fix make dist.
-
-2008-02-05  Zoltan Varga  <vargaz at gmail.com>
-
-	* Makefile: Abort with an error message if make is typed directly in this
-	directory, instead from the 'mono' directory.
-
-2007-12-06  Atsushi Enomoto  <atsushi at ximian.com>
-
-	* Makefile: currently Sys.Web.Extensions is not ready for
-	  centum_tests.
-
-2007-12-04  Marek Safar  <marek.safar at gmail.com>
-
-	* Makefile: Added more tests.
-
-2007-12-03  Marek Safar  <marek.safar at gmail.com>
-
-	* Makefile: Added 3.5 profile, it probably not used here.
-
-2007-11-28  Raja R Harinath  <harinath at gmail.com>
-
-	* Makefile (_boot_): Incorporate 'net_2_1' into the bootstrap
-	process -- it depends on 'net_2_0' profile being built.
-
-2007-07-27  Marek Safar  <marek.safar at gmail.com>
-
-	* Makefile: Removed gmcs and smcs, removed DIST_ONLY_SUBDIRS.
-
-2007-07-27  Jb Evain  <jbevain at novell.com>
-
-	* Makefile: integrate the tuner in the build.
-
-2007-07-26  Jb Evain  <jbevain at novell.com>
-
-	* smcs: add a project of its own for the 2.1 compiler.
-
-2007-07-11  Jb Evain  <jbevain at novell.com>
-
-	* Makefile: work on the 2.1 profile.
-
-2007-05-11  Raja R Harinath  <rharinath at novell.com>
-
-	* Makefile (net_2_0_bootstrap_SUBDIRS): Add 'mcs'.
-
-2007-04-18  Marek Habersack  <grendello at gmail.com>
-
-	* Makefile (SUBDIRS): removed tools/culevel, it is now built in
-	the 1.1 bootstrap phase.
-
-2007-04-17  Marek Habersack  <mhabersack at novell.com>
-
-	* Makefile (thisdir): added tools/culevel to the list of
-	subdirectories - it must be compiled before compiling the classes
-	since System.Web depends on it.
-
-2007-04-06  Wade Berrier  <wberrier at novell.com>
-
-	* Makefile: use bzip2 instead of gzip for 'make dist'
-	(even though it's not used here anymore)
-
-2006-08-18  Raja R Harinath  <rharinath at novell.com>
-
-	* Makefile (net_2_0_bootstrap_SUBDIRS): Add 'tools'.
-
-2006-04-11  Raja R Harinath  <rharinath at novell.com>
-
-	* Makefile (SUBDIRS): Remove tools/resgen.
-
-2005-11-21  Raja R Harinath  <rharinath at novell.com>
-
-	* Makefile (net_2_0_bootstrap_SUBDIRS): Add ilasm.
-	(net_2_0_SUBDIRS): Likewise.
-
-2005-09-22  Raja R Harinath  <rharinath at novell.com>
-
-	* Makefile (basic_SUBDIRS, net_1_1_bootstrap_SUBDIRS)
-	(net_2_0_bootstrap_SUBDIRS, net_2_0_SUBDIRS):
-	Build the 'build' directory too.
-
-2005-09-21  Raja R Harinath  <rharinath at novell.com>
-
-	* Makefile (centum_tests): Remove System.Web.
-
-2005-09-06  Raja R Harinath  <rharinath at novell.com>
-
-	* Makefile (bootstrap): Remove special handling on Win32.
-
-2005-07-11  Raja R Harinath  <rharinath at novell.com>
-
-	* Makefile (centum_tests): Add System.Messaging and
-	System.ServiceProcess.  Remove System.Configuration.Install.
-	Move Mono.C5 ...
-	(net_2_0_centum_tests): ... here, and disable it for now.
-
-2005-06-20  Raja R Harinath  <rharinath at novell.com>
-
-	* Makefile (centum_tests): Move System.XML ...
-	(default_centum_tests): ... here.
-
-2005-06-17  Raja R Harinath  <rharinath at novell.com>
-
-	* Makefile (centum_tests): Add System.XML.
-
-2005-06-10  Sebastien Pouliot  <sebastien at ximian.com>
-
-	* Makefile (centum_tests): Added System.Security.
-
-2005-05-20  Raja R Harinath  <rharinath at novell.com>
-
-	* Makefile (centum_tests): Add System.Web and move corlib from ...
-	(default_centum_tests): ... here.
-
-2005-04-25  Raja R Harinath  <rharinath at novell.com>
-
-	* Makefile (centum_tests): Add Mono.Security and
-	System.Runtime.Remoting.
-	* */Makefile: Replace $(RUNTIME) with $(RUNTIME) $(RUNTIME_FLAGS).
-
-2005-04-21  Raja R Harinath  <rharinath at novell.com>
-
-	* Makefile (net_1_1_bootstrap_SUBDIRS): Add ilasm.
-
-2005-03-14  Raja R Harinath  <rharinath at novell.com>
-
-	* Makefile (_boot_): New.  Used to generalize the bootstrap to
-	clean and install too.
-
-2005-02-25  Raja R Harinath  <rharinath at novell.com>
-
-	* Makefile (centum_tests): New list of test subdirs that should
-	pass 100%.
-	(default_centum_tests, net_2_0_centum_tests): New.
-	(ONLY_CENTUM_TESTS): New check.  If defined during 'make
-	run-test', only the tests in centum_tests are run.
-
-2004-12-20  Jambunathan K  <kjambunathan at novell.com>
-
-	* btests: Removed. This directory is now superseded by
-	mbas/Test.
-	
-2004-12-13  Raja R Harinath  <rharinath at novell.com>
-
-	* INSTALL.txt: Minor updates to reflect build changes.
-
-2004-11-25  Raja R Harinath  <rharinath at novell.com>
-
-	* Makefile (DISTFILES): Add nunit.key.
-
-2004-11-24  Raja R Harinath  <rharinath at novell.com>
-
-	* Makefile (profiles-do--run-test): Allow list of profiles to be
-	overriden.
-	(profiles-do--all): Remove.  The default pattern build suffices.
-
-2004-11-22  Raja R Harinath  <rharinath at novell.com>
-
-	* Makefile (OVERRIDE_TARGET_ALL): Remove.
-	(all.override): Remove 2-pass build.
-	(net_1_1_bootstrap_SUBDIRS): Add 'tools'.
-
-2004-11-22  Raja R Harinath  <rharinath at novell.com>
-
-	* Makefile (profiles-do--all): Don't fallback to default pattern build.
-
-2004-11-19  Raja R Harinath  <rharinath at novell.com>
-
-	* Makefile (net_2_0_SUBDIRS): Add nunit20.
-
-2004-11-19  Raja R Harinath  <rharinath at novell.com>
-
-	* Makefile (%-profiles): Go through an intermediate set of rules.
-	Move body to ...
-	(profiles-do--%): ... this.
-	(profiles-do--run-test): Customized rule that usefully runs with
-	'make -j' and 'make -k'.
-	(profiles-do--all, profile-do--%--all): Orchestrate the bootstrap
-	process.
-
-2004-11-09  Raja R Harinath  <rharinath at novell.com>
-
-	* Makefile (basic_SUBDIRS): New.
-
-2004-11-04  Raja R Harinath  <rharinath at novell.com>
-
-	* Makefile (net_1_1_bootstrap_SUBDIRS): New.
-	(all.override): Fix to actually perform optimization to avoid
-	the two-pass build if we are not signing assemblies.
-
-2004-10-29  Raja R Harinath  <rharinath at novell.com>
-
-	* Makefile (net_2_0_bootstrap_SUBDIRS,net_2_0_SUBDIRS): New.
-	(profile-do--net_2_0_bootstrap--all): New target.
-	(profile-do--net_2_0--all): Depend on it.
-	(distdir,top_distdir): Remove.
-	(dist-tarball): Define distdir here for dist-recursive.
-
-2004-10-21  Raja R Harinath  <rharinath at novell.com>
-
-	* Makefile (all-profiles $(STD_TARGETS:=-profiles)): Make
-	parallelizable. 
-
-2004-09-27  Raja R Harinath  <rharinath at novell.com>
-
-	* nunit20/nunit-console/Makefile (PROGRAM): Put in
-	profile-specific directory.
-
-2004-09-21  Raja R Harinath  <rharinath at novell.com>
-
-	* Makefile (DIST_ONLY_SUBDIRS): Add 'gmcs' since it is specially
-	handled by 'class/corlib/Makefile'.
-	(test-installed-compiler): Run compiler tests using the installed
-	compiler.
-
-2004-09-14  Raja R Harinath  <rharinath at novell.com>
-
-	* Makefile (SUBDIRS): Allow to be overriden by $(TEST_SUBDIRS).
-	(test-profiles, run-test-profiles): New targets.
-	(test-compiler): Rename to ...
-	(compiler-tests): ... this.  Run tests on all profiles.
-
-2004-09-03  Martin Baulig  <martin at ximian.com>
-
-	* Makefile (test-compiler): New target to run the compiler test.
-
-2004-07-02  Raja R Harinath  <rharinath at novell.com>
-
-	* Makefile (OVERRIDE_BARE_TARGETS): Remove.
-	(OVERRIDE_TARGET_ALL): Define.
-	(all-recursive,$(STD_TARGETS:=-recursive)): Depend on
-	'platform-check' and 'profile-check'.
-	(all.override): New.  Run two passes: once to build, and once to
-	sign libraries.
-
-2004-06-22  Todd Berman  <tberman at off.net>
-
-	* configure: Patch from Mariano Suárez-Alvarez 
-	<msuarezalvarez at arnet.com.ar> to make configure accept jhbuild style
-	/prefix /usr options, and to continue past unknown options. Currently
-	this patch is a bit spammy with multiple unknown options, anyone
-	who is interested is welcome to fix this.
-
-2004-06-14  Raja R Harinath  <rharinath at novell.com>
-
-	* Makefile (all-profiles, clean-profiles): Simplify slightly.
-
-2004-06-05  Atsushi Enomoto  <atsushi at ximian.com>
-
-	* Makefile: added target run-test-ondotnet.
-
-2004-05-26  Raja R Harinath  <rharinath at novell.com>
-
-	* nunit20/util/Makefile (EXTRA_DISTFILES): Remove
-	Transform.resources.
-	($(the_lib)): Make Transform.resources using internal resgen.
-	* nunit20/util/Transform.resources: Rebuild.
-
-2004-05-25  Sebastien Pouliot  <sebastien at ximian.com>
-
-	* nunit.key: New. NUnit private key. Due to build issues the key
-	must be present in this directory.
-
-2004-05-20  Raja R Harinath  <rharinath at novell.com>
-
-	* Makefile (SUBDIRS): Move 'monoresgen' ahead of 'class'.
-
-2004-05-17  Raja R Harinath  <rharinath at novell.com>
-
-	* Makefile (all, clean): Remove indirection.
-	(clean-profiles): New.
-
-2004-05-13  Jackson Harper  <jackson at ximian.com>
-
-	* Makefile: default build is no longer the multi profile build. Do
-	build both 1.1 and 2.0 profiles use the all-profiles target.
-	
-2004-05-12  Gonzalo Paniagua Javier <gonzalo at ximian.com>
-
-	* Makefile: disable net_2_0 on windows. It doesn't build. Don't
-	try to build net_1_0 and net_2_0 if we provide a PROFILE=xxx in the
-	command line.
-
-2004-05-10  Raja R Harinath  <rharinath at novell.com>
-
-	* INSTALL.txt: Don't mention 'fullbuild'.  Mention 'bootstrap'
-	instead.  Update instructions for 'monocharge'.
-
-2004-04-30  Raja R Harinath  <rharinath at novell.com>
-
-	* Makefile (SUBDIRS): Remove 'gmcs' for now.
-	(all): Simplify.
-	(clean): Quick hack to get 'make clean' to work better.
-
-2004-04-29  Jackson Harper  <jackson at ximian.com>
-
-	* Makefile: Put the PROFILE= stuff before the target, this is more
-	pleasurable to cygwin users.
-	
-2004-04-28  Jackson Harper  <jackson at ximian.com>
-
-	* Makefile: build the net_1_1 and net_2_0 profiles by default.
-	
-2004-01-14  Martin Willemoes Hansen  <mwh at sysrq.dk>
-
-	* INSTALL.txt: Fixed, autogen should be autogen.sh
-
-2003-12-01  Cesar Lopez Nataren  <cesar at ciencias.unam.mx>
-
-	* Added dirs mcs/jtest and mcs/jerrors.
-
-2003-10-28 Jackson Harper <jackson at ximian.com>
-
-	* INSTALL.txt: Tell users where to find monocharges, do not
-	reference README.building.
-	
-2003-07-22  Peter Williams  <peter at newton.cx>
-
-	* README: INSTALL.txt, not INSTALL.
-
-2003-07-20  Peter Williams  <peter at newton.cx>
-
-	* nunit20/nunit-console/Makefile (PROGRAM): Put nunit-console.exe
-	in $(topdir)/class/lib so we can find our DLL's.
-
-2003-07-18  Peter Williams  <peter at newton.cx>
-
-	* build/library.make (dist-local): Fancy make dist magic gives
-	way to boring old 'for'.
-
-	* build/executable.make (dist-local): Ditto.
-
-2003-07-17  Peter Williams  <peter at newton.cx>
-
-	* build/profiles/default.make: Actually fix this. Use the platform
-	compiler all the way.
-
-2003-07-17  Peter Williams  <peter at newton.cx>
-
-	* build/profiles/default.make: Try to make this smarter so
-	that we can build on Windows. Specifically, don't require
-	the mono runtime. Combined with the corlib $(BOOT_COMPILE) change,
-	this should make corlib build out of the box, I think.
-
-2003-07-16  Peter Williams  <peter at newton.cx>
-
-	A whole passel of build system changes. Doc updates:
-	
-	* build/README.makefiles: Doc updates.
-
-	* build/profiles/net_1_0.make: Doc changes.
-
-	* INSTALL.txt: A few more touchups.
-
-	Better defaults:
-	
-	* build/config-default.make (prefix): Default install prefix
-	should be /usr/local.
-
-	* build/profiles/bootstrap.make: This profile ...
-
-	* build/profiles/default.make: ... is now the default.
-
-	* build/profiles/atomic.make: And the default is now this.
-
-	Fixes for pre-build checks:
-	
-	* Makefile: Do the platform and (new) profile checks
-	before the build, which took some infrastructure changes.
-
-	* build/rules.make: Allow a Makefile to specify its own all/install/etc
-	targets.
-
-	* build/profiles/default.make (profile-check): Add a blank
-	target here.
-
-	* build/profiles/atomic.make: Check for a full MCS install to 
-	build against.
-
-	HP/UX fixes with help from Bernie Solomon:
-	
-	* build/config-default.make (ECHO_ESCAPE): HP/UX 'echo'
-        doesn't need a -e parameter to interpret escape codes. Test for
-        that and define a configuration parameter.
-
-        * build/library.make ($(makefrag)): Use $(ECHO_ESCAPE)
-        instead of assuming that 'echo -e' will interpret escape
-        codes.
-
-        * build/executable.make ($(makefrag)): Here too.
-
-	A make distcheck fix:
-
-	* Makefile: Inherit the current prefix so that the build can
-	find the right System.Xml.dll.
-	
-	And Windows build fixes with the invaluable help of Sebastian
-	Pouliot (in various subdirectories).
-	
-2003-07-14  Peter Williams  <peter at newton.cx>
-
-	* build/rules.make (dist-recursive): Fix recursive rules
-	to work on HP/UX /bin/sh. Patch from Bernie Solomon
-	<bernard at ugsolutions.com>.
-
-2003-05-10  Gonzalo Paniagua Javier <gonzalo at ximian.com>
-
-	* makefile:
-	* makefile.gnu: don't use -C when running make.
-
-2003-05-05 Ben Maurer <bmaurer at users.sourceforge.net>
-	* AUTHORS: Added self.
-
-2003-04-15 Nick Drochak <ndrochak at gol.com>
-
-	* makefile: Remove nunit version 1 from build
-
-2002-03-14  Daniel Morgan <danmorg at sc.rr.com>
-
-	* class/makefile.gnu
-	* class/ByteFX.Data/makefile.gnu: add ByteFX.Data.dll 
-	to the Linux build
-
-2002-03-14  Daniel Morgan <danmorg at sc.rr.com>
-
-	* makefile: added ByteFX.Data.dll to windows install
-	
-	* class/library.build: added ByteFX.Data.dll 
-	to windows build.  added additional clean targets
-	
-	* class/Microsoft.VisualC/Microsoft.VisualC.build: fix 
-	windows clean
-	
-	* class/ByteFX.Data: added directory for ByteFX.Data.dll
-	which includes a MySQL ADO.NET Provider.  
-	Contributed by Reggie Burnett <rykr at bellsouth.net>
-	from ByteFX, Inc.
-	ByteFX.Data 0.6.5 is Copyright 2002-2003, ByteFX, Inc.
-	
-	Added the following files and directories:
-		
-	class/ByteFX.Data/AssemblyInfo.cs    
-	class/ByteFX.Data/list
-	class/ByteFX.Data/ByteFX.Data.build  
-	class/ByteFX.Data/makefile.gnu
-	class/ByteFX.Data/ChangeLog.txt      
-	class/ByteFX.Data/readme.txt
-	class/ByteFX.Data/lgpl.txt: new files
-		
-	BitStream.cs  
-	Connection.cs        
-	Field.cs        
-	Inflater.cs
-    ConnectionString.cs  
-    HuffmanTree.cs  
-    NamedPipeStream.cs
-    class/ByteFX.Data/Common: added files to new directory
-
-	Driver.cs     
-	command.resx            
-	todo.txt
-	CommandBuilder.cs  
-	Exception.cs  
-	dataadapter.cs           
-	transcaction.cs
-	Connection.cs      
-	Field.cs      
-	datareader.cs
-	Connection.resx    
-	MysqlDefs.cs  
-	parameter.cs
-	class/ByteFX.Data/mysqlclient: added files to new directory
-
-	command.cs    
-	parameter_collection.cs
-	class/ByteFX.Data/mysqlclient/Designers: added files to new directory
-	
-2003-03-14  Daniel Morgan <danmorg at sc.rr.com>
-
-	* makefile: add ilasm.exe to windows build and add missing assemblies
-	to windows install
-	
-	* class/library.build: include PEAPI.dll, Npgsql.dll, and
-	ICSharpCode.SharpZipLib part of the windows build
-
-2003-03-10  Martin Willemoes Hansen <mwh at sysrq.dk>
-	* Fixed some spelling errors in class/doc/TemplateTest.cs
-
-2003-03-04  Gonzalo Paniagua Javier <gonzalo at ximian.com>
-
-	* makefile: added Mono.Posix and System.Management.
-
-2003-02-16  Martin Baulig  <martin at ximian.com>
-
-	* docs/compiler: Added a few works about the new `Location' code.
-
-2003-02-15  Nick Drochak  <ndrochak at gol.com>
-
-    * makefile.gnu: Add testcorlib target to run just the corlib unit tests.
-
-2003-02-10  Nick Drochak  <ndrochak at gol.com>
-
-	* makefile: Add testcorlib target to run just the corlib unit tests.
-
-2003-01-16  Nick Drochak <ndrochak at gol.com>
-
-	* makefile.gnu: Add corlib target to just build that.
-
-2003-01-14  Duncan Mak  <duncan at ximian.com>
-
-       * ilasm/parser/ScannerAdapter.cs: Remove the cleanup method now that
-       it's no longer in the interface.
-
-2003-01-13  Duncan Mak  <duncan at ximian.com>
-
-	* ilasm/parser/ScannerAdapter.cs: Implement the new cleanup method
-	in the tokenizer. This fixes the build.
-
-2003-01-10  Gonzalo Paniagua Javier <gonzalo at ximian.com>
-
-	* README.building: New file.
-	* makefile.gnu: install README.building file.
-
-2003-01-09  Sebastien Pouliot  <spouliot at videotron.ca>
-
-	* AUTHORS: add myself to class library list
-
-2002-12-15  Alp Toker  <alp at atoker.com>
-
-	* makefile.gnu: make sure mcs is in PATH, otherwise tell user to read
-	INSTALL.txt
-
-2002-12-10  Daniel Morgan <danmorg at sc.rr.com>
-
-	* makefile
-	* tools/makefile
-	* tools/makefile.gnu: change target
-	from SqlSharpCli.exe
-	to sqlsharp.exe
-
-2002-12-10  Alp Toker  <alp at atoker.com>
-
-	* ilasm/makefile.gnu: Install ilasm executable with -m 755, not 644
-	* ilasm/makefile: ditto
-
-2002-12-10  Gaurav Vaish  <gvaish_mono at lycos.com>
-
-	* AUTHORS: Corrected my email-ID.
-
-2002-11-29  Daniel Morgan  <danmorg at sc.rr.com>
-
-	* INSTALL: renamed to INSTALL.txt because INSTALL 
-	interferred with "make install" on windows
-	
-	* makefile: changes to get "make install" work 
-	on windows
-	
-	* class/makefile.gnu: flush
-	
-	* ilasm/makefile: updated for windows build
-	
-	* monoresgen/makefile: updated for windows build
-	
-	* tools/SqlSharp/SqlSharpCli.build: flush
-	
-	* winexe.in: add file to be template for executable assemblies
-	to be installed on windows via "make install" by providing
-	a script that runs mono and the assembly 
-	like mcs runs mono mcs.exe 
-	
-2002-11-28  Daniel Morgan  <danmorg at sc.rr.com>
-
-	* makefile.gnu: added tools directory to linux build
-
-	* tools/makefile.gnu: added new file to built tools and install.
-        dist works too.  test is just blank.
-
-2002-11-16  Martin Baulig  <martin at ximian.com>
-
-	* makefile.gnu: `binary-snapshot' is now an alias for `dist'.
-	Please update your scripts, the `dist' target will disappear soon.
-
-2002-11-09  Nick Drochak  <ndrochak at gol.com>
-
-	* makefile: have test target be smart about windows/linux
-
-2002-11-07  Nick Drochak  <ndrochak at gol.com>
-
-	* makefile: for the clean target, handle linux and windows differently.
-
-2002-10-13  Daniel Morgan <danmorg at sc.rr.com>
-
-	* class/library.build: added Mono.Data.SqliteClient
-	directory to windows build
-
-2002-10-10  Daniel Morgan <danmorg at sc.rr.com>
-
-	* class/library.build: added Mono.Data.MySql directory to windows build.
-
-2002-10-10  Rodrigo Moya <rodrigo at ximian.com>
-
-	* class/makefile.gnu: added Mono.Data.MySql directory to linux build.
-
-2002-10-09  Rodrigo Moya <rodrigo at ximian.com>
-
-	* class/makefile.gnu: added System.Data.Odbc directory.
-
-2002-09-14  Piers Haken <piersh at friskit.com>
-
-	* */makefile.gnu:
-		use $(topdir)
-		build nunit into $(topdir)/class/lib
-
-2002-08-27  Gonzalo Paniagua Javier <gonzalo at ximian.com>
-
-	* makefile.gnu:
-	* class/library.make:
-	* class/makefile.gnu:
-	* class/I18N/makefile.gnu
-	* class/corlib/makefile.gnu:
-	* class/corlib/Test/ChangeLog:
-	* class/corlib/Test/corlib_linux_test.args:
-	* class/corlib/Test/makefile.gnu:
-	* class/corlib/Test/run_test.sh:
-	* jay/makefile.gnu:
-	* mcs/makefile.gnu:
-	* monoresgen/makefile.gnu:
-	* nunit/makefile.gnu:
-
-	Allow running 'make -f makefile.gnu test' from top directory.
-	In the libraries makefile.gnu you just have to add TEST_DIR=dirname
-	with the name where tests reside.
-
-2002-08-23  Martin Baulig  <martin at gnome.org>
-
-	* class/makefile.gnu: Add class/Mono.CSharp.Debugger to the build.
-
-2002-08-13  Piers Haken <piersh at friskit.com>
-
-	* class/library.make: merge back original makefile.gnu behavior
-	* */makefile.gnu: merge back original makefile.gnu behavior
-
-2002-08-12  Piers Haken <piersh at friskit.com>
-
-	* class/library.make: use 'find' to specify source files, instead of static files
-	* */makefile.gnu: specify include/exclude patterns for source files
-
-2002-08-07  Peter Williams  <peterw at ximian.com>
-
-	* class/library.make (.makefrag): Fix this rule a bit; was using
-	$^ instead of $<
-
-2002-07-29  Peter Williams  <peterw at ximian.com>
-
-	* makefile.gnu: 'make install' wasn't actually working due to $@,
-	fix it.
-
-2002-07-29  Martin Baulig  <martin at gnome.org>
-
-	* makefile.gnu: Don't force people to install.  The default must also
-	be `all' and not `install'.
-
-2002-07-26  Alp Toker  <alp at atoker.com>
-
-	* INSTALL: Wrote a guide to mcs installation.
-	* README: Updated to reflect the new INSTALL guide.
-
-2002-07-23  Alp Toker  <alp at atoker.com>
-
-	* makefile.gnu: Added an install target (which sets permissions and
-	respects prefix) and a dist target which produces a tarball. Also
-	fixed a few other makefile issues.
-
-2002-07-22  Peter Williams  <peterw at ximian.com>
-
-	* class/library.make: Oops, the deps weren't right -- touching a .cs
-	file didn't cause the libraries to be rebuilt.
-	(clean): Robustify this rule a bit.
-
-2002-07-20  Martin Baulig  <martin at gnome.org>
-
-	* class/makefile.gnu: Added System.Data.
-
-2002-07-20  Martin Baulig  <martin at gnome.org>
-
-	* class/library.make: Put $(MONO_PATH_PREFIX) in front of the MONO_PATH.
-
-	* class/*/makefile.gnu: Set MONO_PATH_PREFIX=../lib:
-
-2002-07-19  Martin Baulig  <martin at gnome.org>
-
-	* makefile.gnu (DIRS): Added nunit.
-
-2002-07-19  Martin Baulig  <martin at gnome.org>
-
-	Added the super-cool set of makefiles from Peter Williams which run on
-	GNU/Linux without NAnt.  I named them `makefile.gnu' and not `GNUmakefile'
-	since this won't break the windows build.
-
-	To compile stuff on GNU/Linux, just do a `make -f makefile.gnu'.
-
-	* mcs-tool, */makefile.gnu, class/library.make: New files.
-
-2002-07-19  Martin Baulig  <martin at gnome.org>
-
-	* */makefile (NANT): Use a variable `NANT' so the user can override it with
-	`make NANT=/usr/local/bin/NAnt.exe'.
-
-2002-05-09  Daniel Morgan <danmorg at sc.rr.com>
-
-	* AUTHORS: add me to class libraries list
-
-2002-03-26  Dick Porter  <dick at ximian.com>
-
-	* makefile (linux): Abandon the build if any of the subdir makes fail
-
-2002-03-07  Nick Drochak  <ndrochak at gol.com>
-
-	* makefile: Change order of build so corlib is built before nunit since
-	Nunit needs corlib now.
-
-2002-02-14  Nick Drochak  <ndrochak at gol.com>
-
-	* makefile: Build mcs/doctools too when one does 'make'
-
-2002-01-20 Nick Drochak  <ndrochak at gol.com>
-
-	* on the 'test' target, make sure NUnit is built first before building
-	and running tests
-
-2002-01-20 Nick Drochak  <ndrochak at gol.com>
-
-	* add nunit directory to the list of dirs to build in
diff --git a/mcs/Makefile b/mcs/Makefile
index baefcf2..7bec9d0 100644
--- a/mcs/Makefile
+++ b/mcs/Makefile
@@ -2,14 +2,18 @@ thisdir := .
 
 SUBDIRS := build jay mcs class nunit24 ilasm tools tests errors docs
 
-basic_SUBDIRS := build jay mcs class tools
-net_2_0_SUBDIRS := build class nunit24 ilasm tools tests errors mcs
-moonlight_raw_SUBDIRS := build class tools mcs
-moonlight_SUBDIRS := tools
-monodroid_SUBDIRS := build class mcs
-monotouch_SUBDIRS := build class mcs
+# Resgen is corlib specific tool
+
+basic_SUBDIRS := build jay mcs class
+build_SUBDIRS := build class mcs class/aot-compiler tools
+net_2_0_SUBDIRS := build class nunit24 ilasm tools tests errors docs
+moonlight_raw_SUBDIRS := build class
+monodroid_SUBDIRS := build class
+monotouch_SUBDIRS := build class
+mobile_SUBDIRS := build class
 net_3_5_SUBDIRS := build class tools/xbuild
-net_4_0_SUBDIRS := build class nunit24 ilasm tools tests errors mcs docs
+net_4_0_SUBDIRS := build class
+net_4_5_SUBDIRS := build mcs class nunit24 ilasm tools tests errors docs
 
 # List of test subdirs that should pass 100%
 centum_tests := \
@@ -77,11 +81,11 @@ all-local $(STD_TARGETS:=-local):
 	@:
 
 dir-check:
-	@if [ "$(NO_DIR_CHECK)" = "" -a "$(PROFILE)" != "basic" ]; then echo "Running make from the mcs directory is not supported. Run make from the parent directory."; exit 1; fi
+	@if [ "$(NO_DIR_CHECK)" = "" -a "$(PROFILE)" != "basic" ]; then make -C ../runtime; fi
 
 # fun specialty targets
 
-PROFILES = net_2_0 net_3_5 net_4_0
+PROFILES = net_2_0 net_3_5 net_4_0 net_4_5
 
 .PHONY: all-profiles $(STD_TARGETS:=-profiles)
 all-profiles $(STD_TARGETS:=-profiles): %-profiles: profiles-do--%
@@ -100,13 +104,16 @@ profiles-do--run-test:
 
 # Orchestrate the bootstrap here.
 _boot_ = all clean install
-$(_boot_:%=profile-do--net_4_0--%):           profile-do--net_4_0--%:           profile-do--basic--%
+$(_boot_:%=profile-do--net_4_5--%):           profile-do--net_4_5--%:           profile-do--build--%
+$(_boot_:%=profile-do--net_4_0--%):           profile-do--net_4_0--%:           profile-do--build--%
 $(_boot_:%=profile-do--net_3_5--%):           profile-do--net_3_5--%:           profile-do--net_2_0--%
 $(_boot_:%=profile-do--moonlight--%):         profile-do--moonlight--%:         profile-do--moonlight_raw--%
-$(_boot_:%=profile-do--monodroid--%):         profile-do--monodroid--%:         profile-do--basic--%
-$(_boot_:%=profile-do--monotouch--%):         profile-do--monotouch--%:         profile-do--basic--%
-$(_boot_:%=profile-do--moonlight_raw--%):     profile-do--moonlight_raw--%:     profile-do--basic--%
-$(_boot_:%=profile-do--net_2_0--%):           profile-do--net_2_0--%:           profile-do--basic--%
+$(_boot_:%=profile-do--monodroid--%):         profile-do--monodroid--%:         profile-do--build--%
+$(_boot_:%=profile-do--monotouch--%):         profile-do--monotouch--%:         profile-do--build--%
+$(_boot_:%=profile-do--mobile--%):            profile-do--mobile--%:         profile-do--build--%
+$(_boot_:%=profile-do--moonlight_raw--%):     profile-do--moonlight_raw--%:     profile-do--build--%
+$(_boot_:%=profile-do--net_2_0--%):           profile-do--net_2_0--%:           profile-do--build--%
+$(_boot_:%=profile-do--build--%):             profile-do--build--%:             profile-do--basic--%
 
 testcorlib:
 	@cd class/corlib && $(MAKE) test run-test
diff --git a/mcs/build/ChangeLog b/mcs/build/ChangeLog
index 525e3c5..1aaf907 100644
--- a/mcs/build/ChangeLog
+++ b/mcs/build/ChangeLog
@@ -1,96 +1,3 @@
-2011-09-15  Alex Corrado  <alexc at xamarin.com>
-
-	Fix prepending $(CURDIR) to paths failing under cygwin
-
-2010-12-29  Marek Safar  <marek.safar at gmail.com>
-
-	[661642] Fixed v4 resgen compilation
-
-2010-12-29  Marek Safar  <marek.safar at gmail.com>
-
-	Remove no longer used bootstrap profiles
-
-2010-12-17  Marek Safar  <marek.safar at gmail.com>
-
-	Update mcs name for monolite build
-
-2010-12-16  Marek Safar  <marek.safar at gmail.com>
-
-	Adjust MONO_PATH, it's still needed for all profiles
-
-2010-12-16  Marek Safar  <marek.safar at gmail.com>
-
-	Fix resgen build order
-
-2010-12-16  Marek Safar  <marek.safar at gmail.com>
-
-	Switch to single mcs compiler for all managed code build
-
-2010-10-15  Marek Safar  <marek.safar at gmail.com>
-
-	Don't be too verbose when building response files
-
-2010-09-09  Zoltan Varga  <vargaz at gmail.com>
-
-	Clean the aot log file too.
-
-2010-09-08  Jb Evain  <jbevain at gmail.com>
-
-	Fix the monodroid profile's defines
-
-2010-09-08  Jb Evain  <jbevain at gmail.com>
-
-	Define MOBILE for the monotouch build as a shared symbol between
-	MonoTouch and MonoDroid
-
-2010-09-08  Jb Evain  <jbevain at gmail.com>
-
-	Add the monodroid profile
-
-2010-09-01  Jb Evain  <jbevain at gmail.com>
-
-	Fix the monotouch build
-
-2010-08-31  Andrew Jorgensen  <ajorgensen at novell.com>
-
-	Revert "Make the 'LABELS' make variable the same as the
-	'TEST_HARNESS_VERBOSE' variable, because it is easier to remember
-	and type."
-
-	Not compatible with the version of make we are using on windows:
-	*** only one `else' per conditional. This reverts commit
-	fb1ba2f139d26a7b4de258d4ca83bcc3d2db79be.
-
-2010-08-31  Rolf Bjarne Kvinge  <RKvinge at novell.com>
-
-	Make moonlight build again
-
-2010-08-27  Zoltan Varga  <vargaz at gmail.com>
-
-	Use $(PROFILE)/gmcs.exe as INTERNAL_GMCS for consistency.
-
-2010-08-27  Zoltan Varga  <vargaz at gmail.com>
-
-	Make the 'LABELS' make variable the same as the
-	'TEST_HARNESS_VERBOSE' variable, because it is easier to remember
-	and type.
-
-2010-08-24  Zoltan Varga  <vargaz at gmail.com>
-
-	Remove obsolete profiles.
-
-2010-08-24  Zoltan Varga  <vargaz at gmail.com>
-
-	Disable W1699 in the basic profile too.
-
-2010-08-24  Zoltan Varga  <vargaz at gmail.com>
-
-	Disable W1699.
-
-2010-08-04  Marek Safar  <marek.safar at gmail.com>
-
-	Add special compiler define RUN_ONDOTNET. Fixes #624942
-
 2010-07-14  Miguel de Icaza  <miguel at novell.com>
 
 	* tests.make: Do not run the tests under the verifier until the
diff --git a/mcs/build/ChangeLog.old b/mcs/build/ChangeLog.old
deleted file mode 100644
index 1aaf907..0000000
--- a/mcs/build/ChangeLog.old
+++ /dev/null
@@ -1,1338 +0,0 @@
-2010-07-14  Miguel de Icaza  <miguel at novell.com>
-
-	* tests.make: Do not run the tests under the verifier until the
-	verifier bug is fixed so at least we can see what is going on in
-	our buildbots.
-
-2010-07-12  Marek Safar  <marek.safar at gmail.com>
-
-	* tests.make: Run all tests under verifier.
-
-2010-05-28  Marek Safar  <marek.safar at gmail.com>
-
-	* library.make: Don't sort source input files on windows to
-	build metadata compatible assemblies on all platforms.
-
-2010-04-16  Raja R Harinath  <harinath at hurrynot.org>
-
-	* profiles/net_4_0_bootstrap.make (PROFILE_MCS_HAS_BOOTSTRAP_FALLBACK):
-	New.  Can be set if we have BOOTSTRAP_PROFILE listed in the
-	MONO_PATH of MCS, and the profile's System.dll depends features
-	the profile's mscorlib.dll.
-
-2010-04-07  Raja R Harinath  <harinath at hurrynot.org>
-
-	* Makefile (DISTFILES): Add gensources.sh.
-	* gensources.sh: New, improved version of tools/gensources.sh.
-	* library.make ($(sourcefile)): Use the new gensources.sh.
-	($(makefrag)): Update to handle the optional makefrag generated by
-	gensources.sh.
-
-2010-04-01  Zoltan Varga  <vargaz at gmail.com>
-
-	* config-default.make (LIBRARY_FLAGS): Applied patch from Laurent Etiemble
-	(laurent.etiemble at gmail.com). Use CFLAGS in the environment if defined.
-
-2010-03-31  Zoltan Varga  <vargaz at gmail.com>
-
-	* library.make ($(the_lib)$(PLATFORM_AOT_SUFFIX)): Pass --debug to the aot
-	compiler. Fixes #592545.
-
-2010-03-16  Jonathan Pryor  <jpryor at novell.com>
-
-	* library.make (MDOC_UP): Set MONO_PATH to find monodoc.dll.
-	* rules.make (MDOC): MONO_PATH needs to include 
-	  $(topdir)/class/lib/net_2_0 so that monodoc.dll can be found.
-
-2010-03-16  Jb Evain  <jbevain at novell.com>
-
-	* profiles/net_2_1_*.make: rename to moonlight_*.make and
-	define the MOONLIGHT symbol.
-
-2010-03-03  Jonathan Pryor <jpryor at novell.com>
-
-	* library.make: Add the generated per-profile .source file to
-	  library_CLEAN_FILES so that it's actually removed on clean.
-
-2010-03-03  Rolf Bjarne Kvinge  <RKvinge at novell.com>
-
-	* profiles/net_2_1_bootstrap.make: Make 'basic' the bootstrapping
-	profile for net_2_1_bootstrap.
-
-2010-02-27  Raja R Harinath  <harinath at hurrynot.org>
-
-	* rules.make (all-local $(STD_TARGETS:=-local)): Add empty targets.
-
-2010-02-08  Zoltan Varga  <vargaz at gmail.com>
-
-	* library.make (install-local): Install the compiled aot lib too.
-
-	* executable.make (install-local): Ditto.
-
-2010-01-15  Atsushi Enomoto  <atsushi at ximian.com>
-
-	* profiles/net_4_0_bootstrap.make : MCS also needs MONO_PATH to
-	  net_2_0 to load System.Core.dll. Fix build (mostly for windows).
-
-2010-01-14  Marek Habersack  <mhabersack at novell.com>
-
-	* executable.make, library.make, rules.make: quote file name
-	wherever referenced in dist* targets, so that files with spaces in
-	name work fine.
-
-2010-01-12  Zoltan Varga  <vargaz at gmail.com>
-
-	* profiles/basic.make (do-profile-check): Honor the V=1 flag.
-
-2010-01-08  Jonathan Pryor  <jpryor at novell.com>
-
-	* library.make: Update $(MDOC_UP) to remove the net_1_ detection.
-	  mdoc 2.4 moved to Cecil and stopped building monodocer1, rendering 
-	  the check meaningless, and current trunk doesn't build the 1.0
-	  profile anyway, making the check more meaningless.
-
-2009-12-17  Marek Safar  <marek.safar at gmail.com>
-
-	* common/basic.make: Use bootstrap compiler only for compilation.
-
-2009-12-02  Marek Safar  <marek.safar at gmail.com>
-
-	* common/basic-profile-check.cs: Bump bootstrap requirement to Mono
-	2.4+.
-
-2009-11-17  Marek Habersack  <mhabersack at novell.com>
-
-	* tests.make (TEST_RUNTIME_WRAPPERS_PATH): added - used to set up
-	correct PATH for tests
-
-2009-10-02  Raja R Harinath  <harinath at hurrynot.org>
-
-	* profiles/basic.make (PROFILE_CS): Remove.
-	(PROFILE_CHECK_CSHARP): Move to ...
-	* common/basic-profile-check.cs: ... here.
-
-2009-10-02  Marek Safar  <marek.safar at gmail.com>
-
-	* build/common.cs.in: Disabled 1.x only profiles.
-
-2009-10-02  Marek Safar  <marek.safar at gmail.com>
-
-	* profiles/net_2_0_bootstrap.make: Make it tools profile only.
-
-2009-10-01  Marek Safar  <marek.safar at gmail.com>
-
-	* profiles/*.make, platforms/linux.make: Bootstrap default profile
-	using gmcs.
-
-2008-09-11  Marek Safar  <marek.safar at gmail.com>
-
-	* library.make: Add NO_BUILD to ignore assembly during build.
-
-2009-07-30  Raja R Harinath  <harinath at hurrynot.org>
-
-	* library.make (SNFLAGS): Remove '-R', since it's specific to the
-	action required.
-	($(build_lib)): Use -R flag with $(SN).
-	($(the_lib)): Add a sanity check to verify that the assembly is signed.
-
-2009-07-26  Raja R Harinath  <harinath at hurrynot.org>
-
-	Make AOT compilation explicit
-	* platforms/darwin.make (PLATFORM_AOT_SUFFIX): New.
-	* platforms/linux.make (PLATFORM_AOT_SUFFIX): New.
-	* library.make ($(build_lib)): Don't try to AOT compile the
-	library in its possibly temporary location.
-	(DO_AOT): Remove.  Move to ...
-	($(the_lib)$(PLATFORM_AOT_SUFFIX)): ... here, new rule to
-	explicitly run the AOT compilation.
-	(all-local) [ENABLE_AOT]: Build the AOT compiled library as appropriate.
-
-2009-07-26  Raja R Harinath  <harinath at hurrynot.org>
-
-	Fix parallel-build issues with LIBRARY_USE_INTERMEDIATE_FILE
-	* library.make (build_lib): Define to a profile dependent
-	temporary location for LIBRARY_USE_INTERMEDIATE_FILE.
-	(DO_AOT): New.  Extracted from ...
-	($(build_lib)): ... here.  Simplify.  Extract code handling
-	LIBRARY_USE_INTERMEDIATE_FILE into ...
-	($(the_lib)) [LIBRARY_USE_INTERMEDIATE_FILE]: ... here, a new rule
-	that takes care of copying the library from its temporary location
-	to the final location.
-
-2009-07-20  Jb Evain  <jbevain at novell.com>
-
-	* profiles/monotouch.make: add monotouch profile.
-
-2009-07-16  Raja R Harinath  <harinath at hurrynot.org>
-
-	* profiles/net_2_0_bootstrap.make (BOOTSTRAP_PROFILE): Set to
-	net_1_1_bootstrap instead of net_1_1.
-
-2009-06-03  Zoltan Varga  <vargaz at gmail.com>
-
-	* profiles/net_4_0.make: Add preliminary net 4.0 profile.
-
-2009-04-09  Jonathan Pryor  <jpryor at novell.com>
-
-	* executable.make, library.make: Move the include for tests.make so
-	  that DISTFILES can be properly set (and thus properly distribute the
-	  *_test.dll.sources file).  This allows unit tests to actually build
-	  and run when building from the tarball.
-
-2009-04-05  Jonathan Pryor  <jpryor at novell.com>
-
-	* executable.make: Support HAS_NUNIT_TEST variable; if set, will build
-	  an NUnit test assembly during 'make test' and will run the tests
-	  within the NUnit test assembly during 'make run-test'.
-	* library.make: Split out NUnit test rules/logic into tests.make.
-	* Makefile: Distribute tests.make.
-	* README.makefiles: Document HAS_NUNIT_TEST for executable.make,
-	  documenting how to have NUnit tests for executables.
-	* tests.make: Added; NUnit test logic rules.
-
-2009-01-08  Geoff Norton  <gnorton at novell.com>
-
-	* Makefile: Add darwin.make to the make dist target as well
-
-2009-01-07  Geoff Norton  <gnorton at novell.com>
-
-	* library.make: Allow platform specific exclude tags from the
-	test harness suite.
-	* darwin.make: Add to the build and add a new NotOnMac test
-	category
-
-2008-12-30  Ankit Jain  <jankit at novell.com>
-
-	* library.make (TEST_HARNESS_OUTPUT*): Fix /labels switch.
-
-2008-12-12  Raja R Harinath  <harinath at hurrynot.org>
-
-	* rules.make (topdir): Don't use $(shell ...).
-	Reported by Jonathan Chambers.
-
-2008-12-10  Atsushi Enomoto  <atsushi at ximian.com>
-
-	* library.make : enable FIXTURE and TESTNAME on run-test-ondotnet.
-
-2008-11-28  Atsushi Enomoto  <atsushi at ximian.com>
-
-	* Makefile : ugh, ok another dist pain.
-
-2008-11-28  Atsushi Enomoto  <atsushi at ximian.com>
-
-	* nunit-summary.xsl : copied from nunit resource (summary.xslt)
-	* library.make : put transformation result from TestResult-*.xml
-	  into TestResult-*.log as we used to do.
-
-2008-11-28  Marek Habersack  <mhabersack at novell.com>
-
-	* library.make (FIXTURE_ARG): /parameter:value syntax is not
-	supported in nunit 2.4
-	(TESTNAME_ARG): added support for the nunit-console -run
-	parameter, so that individual tests can be ran.
-
-2008-11-26  Atsushi Enomoto  <atsushi at ximian.com>
-
-	* library.make : another nunit20 to kill :(
-
-2008-11-25  Atsushi Enomoto  <atsushi at ximian.com>
-
-	* library.make : update nunit options that break upgrade to 2.4.
-
-2008-11-18  Raja R Harinath  <harinath at hurrynot.org>
-
-	* library.make (TEST_FILES): Notice filenames with ../ in the test
-	sources file, and handle them in a way suitable for the 'make
-	dist' handling of such files.
-
-2008-11-12  Zoltan Varga  <vargaz at gmail.com>
-
-	* library.make: AOT the library after compilation if the AOT_IN_PROFILES
-	variable is defined and it contains the current profile.
-
-2008-10-18  Jonathan Pryor  <jpryor at novell.com>
-
-	* rules.make (dist-default): Distribute the Documentation directory, 
-	  if present.
-
-2008-10-18  Jonathan Pryor  <jpryor at novell.com>
-
-	* rules.make (MDOC): MONO_PATH needs to include net_1_1 so monodoc.dll
-	  can be found.
-
-2008-10-17  Jonathan Pryor  <jpryor at novell.com>
-
-	* README.makefiles: Add documentation about the new doc-update target.
-
-2008-10-18  Raja R Harinath  <harinath at hurrynot.org>
-
-	* rules.make (MDOC): Pass a proper MONO_PATH.
-
-2008-10-17  Jonathan Pryor  <jpryor at novell.com>
-
-	* build.rules: doc-update is now a standard target; provide a $(MDOC)
-	  variable to simplify running the `mdoc` updater program.
-	* executable.make: Add doc-update target support (does nothing).
-	* library.make: Add doc-update target support; runs `mdoc update` on
-	  the assembly, updating the documentation within Documentation/en.
-	* Makefile: Add doc-update target support.
-
-2008-09-14  Zoltan Varga  <vargaz at gmail.com>
-
-	* library.make: Allow FIXTURE make variable to be passed to nunit.
-
-2008-08-29  Raja R Harinath  <harinath at hurrynot.org>
-
-	* rules.make (do-%): Revert change below.  We need the recursion
-	to ensure ordering of %-local after %-recursive.  IOW, we
-	want to ensure strict linearity even with a 'make -j'.
-
-2008-08-28  Zoltan Varga  <vargaz at gmail.com>
-
-	* rules.make (Q_MCS): Use 5 spaces instead of -e '\\t'.
-
-	* library.make: Make some command quiet.
-
-	* rules.make: Avoid some needless recursive make invocations.
-	
-	* rules.make: Print the profile in the quiet commands.
-
-	* rules.make: Make the build process quiet similarly to the runtime build
-	process. Use the V=1 argument to make to make it verbose again.
-
-2008-08-04  Zoltan Varga  <vargaz at gmail.com>
-
-	* rules.make (PROFILE): If no profile is passed on the command line, make
-	net_2_0 the default.
-
-2008-06-30  Marek Safar  <marek.safar at gmail.com>
-
-	* platforms/linux.make: Enable mcs optimizations.
-
-2008-06-03  Zoltan Varga  <vargaz at gmail.com>
-
-	* rules.make (PROFILE): Reapply the PROFILE=net_2_0 change. One can still
-	build 1.1 libraries using make PROFILE=default.
-
-2008-05-27  Raja R Harinath  <harinath at hurrynot.org>
-
-	* executable.make ($(PROGRAM_config)): Depend on directory
-	creation stamp.
-
-2008-04-09  Gert Driesen  <drieseng at users.sourceforge.net>
-
-	* library.make: hidden -bootstrap option for gacutil is no longer
-	necessary.
-
-2008-03-24  Zoltan Varga  <vargaz at gmail.com>
-
-	* library.make (check): Add a standard check target and make it the same as
-	run-test.
-
-2008-03-22  Zoltan Varga  <vargaz at gmail.com>
-
-	* profiles/net_3_5.make (PROFILE_MCS_FLAGS): Get rid of obsolete 
-	-langversion:linq option.
-
-Fri Mar 14 09:31:59 CET 2008 Paolo Molaro <lupus at ximian.com>
-
-	* rules.make, library.make: move GACUTIL definition into rules.make as
-	it's used also by the tools. Add the hidden -bootstrap option.
-
-2008-02-18  Raja R Harinath  <harinath at hurrynot.org>
-
-	* rules.make (%/.stamp): Unify all directory creation targets here.
-
-2008-02-17  Raja R Harinath  <harinath at hurrynot.org>
-
-	* profiles/net_2_1_bootstrap.make: New.
-	* profiles/net_2_1_raw.make: New.  The untuned 2.1 profile.
-	* profiles/net_2_1.make: New.  The tuned 2.1 profile.
-	* Makefile (PROFILES): Update.
-
-2007-12-06  Atsushi Enomoto  <atsushi at ximian.com>
-
-	* profiles/net_3_5.make : fixed net_2_0 path.
-
-2007-12-03  Marek Safar  <marek.safar at gmail.com>
-
-	* Makefile.make: Distribute 3.5 profile
-	
-2007-11-08  Wade Berrier  <wberrier at novell.com>
-
-	* config-default.make: add sysconfdir dir (for mconfig/config.xml)
-
-2007-11-01  Marek Safar  <marek.safar at gmail.com>
-
-	* corcompare.make: Build corcompare into same directory.
-	
-2007-10-27  Marek Safar  <marek.safar at gmail.com>
-
-	* profiles/net_2_0_bootstrap.make: Fixed generics compiler name.
-	
-2007-10-27  Marek Safar  <marek.safar at gmail.com>
-
-	* rules.make: Changed gmcs location.
-	
-2007-10-27  Marek Safar  <marek.safar at gmail.com>
-
-	* executable.make: Added KEEP_OUTPUT_FILE_COPY to avoid move and copy
-	back compiler executables.
-
-2007-09-21  Raja R Harinath  <harinath at gmail.com>
-
-	* Makefile (PROFILES): Remove 'atomic' profiles.
-	* profiles/atomic.make, profiles/bootstrap.make: Remove.
-
-2007-09-04  Wade Berrier  <wberrier at novell.com>
-
-	* library.make: Glob for .sources for all profiles.
-	Use tools/removecomments.sh to account for '#include' and
-	comments, which are only used in the jvm profile at this point
-
-2007-09-01  Jb Evain  <jbevain at novell.com>
-
-	* Makefile: consider the net_2_1 profile.
-
-2007-08-12  Marek Safar  <marek.safar at gmail.com>
-
-	* library.make: Includes new `corcompare' target.
-	
-	* corcompare.make: I got tired of hacking corcompare stuff again and
-	again.
-	
-2007-08-11  Jb Evain  <jbevain at novell.com>
-
-	* profiles/net_2_1: allow 2.1 assemblies in the GAC.
-
-2007-07-27  Jb Evain  <jbevain at novell.com>
-
-	* profiles/net_2_1: use smcs to compile the .net 2.1 assemblies.
-
-2007-07-23  Raja R Harinath  <rharinath at novell.com>
-
-	* library.make (install-local) [GAC]: If LIBRARY_PACKAGE is set to
-	'none' don't install a symlink from a package directory into the gac.
-
-2007-07-11  Jb Evain  <jbevain at novell.com>
-
-	* profiles/net_2_1.make: work on the 2_1 profile.
-
-2007-06-12  Marek Safar  <marek.safar at gmail.com>
-
-	* rules.make: Added FRAMEWORK_VERSION_MAJOR.
-
-2007-05-11  Raja R Harinath  <rharinath at novell.com>
-
-	* Makefile (dist-local): Remove special-case code.
-	* rules.make ($(depsdir)): New rule to create the dependencies
-	directory on demand.
-	* library.make, executable.make: Make generated files depend on
-	$(depsdir).
-	* profiles/basic.make: Likewise.
-
-	* profiles/net_2_0_bootstrap.make: Move rules for mcs.exe to
-	mcs/Makefile.
-	* library.make (the_libdir, build_libdir): New.  Create these
-	directories on demand instead of worrying about keeping the list
-	of profiles uptodate.
-	* executable.make (prog_dir): Likewise.
-
-2007-03-17  Marek Sieradzki  <marek.sieradzki at gmail.com>
-
-	* library.make: Show correct log (TestResult-ondotnet-PROFILE...) for
-	make run-test-ondotnet.
-
-Fri Nov 24 18:38:31 CET 2006 Paolo Molaro <lupus at ximian.com>
-
-	* library.make: added ability to pass flags to the mono runtime when
-	running the test suite.
-
-2006-09-06  Kornél Pál  <kornelpal at gmail.com>
-
-	* TestConfiguration.cs: Moved to Npgsql.
-
-2006-09-05  Kornél Pál  <kornelpal at hotmail.com>
-
-	* config-default.make: Use UTF-8 as the default encoding for compilers.
-
-2006-09-04  Raja R Harinath  <rharinath at novell.com>
-
-	* library.make (TEST_HARNESS_VERBOSE): New user toggle.  If
-	defined, NUnit will print the names of the unit tests as they are
-	run.  Can be used to narrow down infloops.
-	(TEST_HARNESS_EXCLUDE): Provide a way to override the list of
-	excluded unit test categories.
-
-2006-04-11  Raja R Harinath  <rharinath at novell.com>
-
-	* profiles/default.make (BOOTSTRAP_PROFILE): Define.
-	* profiles/net_2_0.make (BOOTSTRAP_PROFILE): Define.
-	* rules.make (INTERNAL_RESGEN): Pick from bootstrap profile.
-
-2006-01-19  Raja R Harinath  <rharinath at novell.com>
-
-	* library.make (test_lib): Don't allow to be overridden.
-	(test_against, test_dep): Remove.
-
-2006-01-11 Gonzalo Paniagua Javier <gonzalo at ximian.com>
-
-	* executable.make: allow installing a different .config file for
-	executables such as nunit-console.exe that should use a different one
-	depending on the profile.
-
-2006-01-05  Raja R Harinath  <rharinath at novell.com>
-
-	* library.make (run-test-lib, run-test-ondotnet-lib): Workaround a
-	sed limitation when printing the testsuite log.
-
-2005-12-22  Raja R Harinath  <rharinath at novell.com>
-
-	* library.make (lib_dir): Define to 'compat' if LIBRARY_COMPAT is
-	defined, 'lib' otherwise.
-	(the_lib): Use it to decide where to place the output library.
-	(LIBRARY_PACKAGE): New define.  Install development symlinks for
-	compat libraries in a different directory.
-
-2005-12-03  Kornél Pál  <kornelpal at hotmail.com>
-
-	* config-default.make: Corrected default CODEPAGE comment to ISO-8859-1
-	  (Latin 1).
-
-2005-11-22  Vladislav Spivak <spivak at mainsoft.com>
-	* Missed dependency. 
-	<profile>.sources file is supporting #include directive
-	Usually it includes common .sources file.
-	Let's make it dependency of <profile>.sources
-
-2005-10-03  Raja R Harinath  <rharinath at novell.com>
-
-	* profiles/basic.make (monolite_flag, use_monolite): New.  Used to
-	determine if we need to compile with 'monolite' rather than with
-	an external mcs.
-	(do-profile-check): Simplify.  Remove corlib version testing
-	scripts.  Delegate that work to the mono runtime itself.  Split
-	off 'monolite' handling into ...
-	(do-profile-check-monolite): ... this.
-
-2005-09-27  Kornél Pál  <kornelpal at hotmail.com>
-
-	* config-default.make: Added CODEPAGE that is the default encoding used by
-	  compilers.
-	* rules.make (USE_MCS_FLAGS, USE_MBAS_FLAGS): Added /codepage.
-
-2005-09-22  Raja R Harinath  <rharinath at novell.com>
-
-	* Makefile (BUILT_FILES): New.
-	(all-local ...): Depend on them.
-	(clean-local): Relete them.
-	(common/Consts.cs): New rule.
-	(COMMON_SRCS): Don't distribute common/Consts.cs.
-
-2005-09-12  Raja R Harinath  <rharinath at novell.com>
-
-	* profiles/basic.make (do-profile-check): Quote sed expression.
-
-2005-09-06  Raja R Harinath  <rharinath at novell.com>
-
-	* profiles/net_1_1_bootstrap.make: Remove special-handling on Win32.
-	* profiles/default.make: Likewise.
-
-2005-08-26  Kornél Pál  <kornelpal at hotmail.com>
-
-	* Makefile: Added Consts.cs.in. Removed MonoVersion.cs.
-
-2005-08-23  Raja R Harinath  <rharinath at novell.com>
-
-	* profiles/basic.make (do-profile-check): Set MONO_PATH to
-	monolite directory when running disassembler.
-
-2005-08-22  Raja R Harinath  <rharinath at novell.com>
-
-	* Makefile (DISTFILES): Move files in common/ to ...
-	(COMMON_SRCS): ... this.  Add Consts.cs, MonoVersion.cs and
-	TestConfiguration.cs.
-
-2005-08-19  Raja R Harinath  <rharinath at novell.com>
-
-	* profiles/basic.make (do-profile-check): Add some debugging output.
-	Handle disassemblers that print corlib version in hex.
-
-2005-07-26  Raja R Harinath  <rharinath at novell.com>
-
-	* executable.make, library.make: Use unix-style commandline options.
-	* profiles/basic.make (FRAMEWORK_VERSION): Set.
-	* profiles/net_1_1_bootstrap.make (FRAMEWORK_VERSION): Likewise.
-
-2005-07-22  Raja R Harinath  <rharinath at novell.com>
-
-	* profiles/basic.make (do-profile-check): Make the "silent"
-	compilation check even more silent.  Refuse to use monolite if the
-	corlib version of monolite/mscorlib.dll doesn't match the corlib
-	version of the source.
-
-2005-06-15  Raja R Harinath  <rharinath at novell.com>
-
-	* executable.make (dist-local): Copy from library.make.
-
-2005-05-23  Raja R Harinath  <rharinath at novell.com>
-
-	* rules.make (STD_TARGETS): Make them all go through an
-	indirection.
-	(all): Indirect through do-all.
-	(all.real): Remove.
-	(do-%): New pattern fallback.  Performs the standard behaviour:
-	%-recursive, and then %-local.
-	(do-run-test): New.  Make '-k' more useful.
-	Reported by Ritvik Mayank.
-
-2005-05-10  Raja R Harinath  <rharinath at novell.com>
-
-	* library.make (dist-fixup): Fix typo.
-
-2005-05-06  Raja R Harinath  <rharinath at novell.com>
-
-	* library.make (LIBRARY_NEEDS_PREPROCESSING): New control.
-	(build_lib): Name of library built.  Default to $(the_lib) unless
-	preprocessing.
-	($(build_lib)): Rename from '$(the_lib)'.
-	($(makefrag)): Emit dependencies on $(build_lib).
-
-2005-05-04  Zoltan Varga  <vargaz at freemail.hu>
-
-	* rules.make config-default.make: Use the install-sh script from the mono
-	directory by default.
-
-2005-04-29  Ben Maurer  <bmaurer at ximian.com>
-
-	* profiles/basic.make: The test for mcs was broken on jails where
-	we got a warning due to /proc not being mounted. Remove hackish wc
-	usage.
-
-2005-04-25  Raja R Harinath  <rharinath at novell.com>
-
-	* config-default.make (RUNTIME): Set to 'false'.
-	Reported by Ben Maurer.
-	* profiles/basic.make (MCS): Revert changes below.
-	* platforms/linux.make (ILDISASM): Define.
-	* platforms/win32.make (ILDIsASM): Likewise.
-
-2005-04-23  Ben Maurer  <bmaurer at ximian.com>
-
-	* profiles/basic.make: Ensure that make dist works even if you
-	only have an old mono rpm installed. Essential for the new build
-	system.
-
-2005-04-21  Raja R Harinath  <rharinath at novell.com>
-
-	* rules.make (INTERNAL_ILASM): Update.
-
-2005-04-14  Raja R Harinath  <rharinath at novell.com>
-
-	* library.make (dist-local): Include all ChangeLogs in the tarball.
-
-2005-04-08  Raja R Harinath  <rharinath at novell.com>
-
-	* profiles/basic.make (do-profile-check): Handle some possible
-	timestamp problems.  Hopefully fix #74280.
-
-2005-03-30  Zoltan Varga  <vargaz at freemail.hu>
-
-	* rules.make (INSTALL_DATA): Pass -c to install.
-
-2005-03-18  Raja R Harinath  <rharinath at novell.com>
-
-	* library.make (TEST_FILES, $(test_response), $(btest_response)):
-	Be more robust to empty lines in test sources file.
-
-2005-03-14  Raja R Harinath  <rharinath at novell.com>
-
-	* executable.make (install-local): Depend on all-local even when
-	NO_INSTALL is defined.
-	* library.make: Minor cleanups to match executable.make.
-	(gacutil): Use net_1_1_bootstrap/gacutil.exe.
-	* profiles/basic.make (no-install): Remove.
-	* profiles/net_1_1_bootstrap.make (no-install): Likewise.
-
-2005-02-22  Raja R Harinath  <rharinath at novell.com>
-
-	* library.make (BUILT_SOURCES_cmdline): Don't define if
-	BUILT_SOURCES is empty.
-
-2005-02-21  Michal Moskal  <malekith at pld-linux.org>
-	    Raja R Harinath  <rharinath at novell.com>
-
-	* config-default.make (exec_prefix, libdir): New.
-	* library.make (libdir): Remove.
-	* executable.make (PROGRAM_INSTALL_DIR): Define in terms of
-	$(libdir).
-
-2005-02-15  Raja R Harinath  <rharinath at novell.com>
-
-	* platforms/win32.make (RESGEN): Point to in-tree version of
-	resgen.exe.  The .NET 1.1 SDK doesn't appear to come with one.
-
-2005-02-10  Raja R Harinath  <rharinath at novell.com>
-
-	* library.make (DISTFILES): Add $(btest_sourcefile).
-
-2005-02-02  Raja R Harinath  <rharinath at novell.com>
-
-	* library.make (run-test-lib): Use $(LOCAL_TEST_HARNESS_FLAGS).
-	(run-test-ondotnet-lib): Use $(LOCAL_TEST_HARNESS_ONDOTNET_FLAGS).
-
-2005-02-01  Zoltan Varga  <vargaz at freemail.hu>
-
-	* library.make (run-test-lib): Exclude InetAccess tests.
-
-2005-02-30  Sebastien Pouliot  <sebastien at ximian.com>
-
-	* library.make: Exclude CAS category from run-test-ondotnet.
-
-2005-01-31  Sebastien Pouliot  <sebastien at ximian.com>
-
-	* library.make: Exclude CAS category when running unit tests with 
-	Mono (they can be run manually using --security). Added a define
-	for WINDOWS (only on Windows) to be used for declarative security
-	attributes ONLY.
-
-2005-01-24  Raja R Harinath  <rharinath at novell.com>
-
-	* library.make (run-test-lib, run-test-ondotnet-lib): Print out
-	the log.
-
-2005-01-16 Nick Drochak  <ndrochak at ieee.org>
-
-	* library.make: /exclude for nunit needs a comma separated list
-
-2005-01-14  Atsushi Enomoto  <atsushi at ximian.com>
-
-	* library.make : output TestResult-ondotnet-(profile).log instead of
-	  TestResult-(profile).log for run-test-ondotnet.
-
-2005-01-13  Raja R Harinath  <rharinath at novell.com>
-
-	* profiles/default.make (MBAS) [!PLATFORM_MONO_NATIVE]: Use
-	$(EXTERNAL_MBAS).
-	Reported by Nick Drochak.
-
-2005-01-03  Nick Drochak  <ndrochak at ieee.org>
-
-	* library.make: Ingore tests that are not meant to be run on MS DotNet
-
-2004-12-14  Raja R Harinath  <rharinath at novell.com>
-
-	* profiles/basic.make (do-profile-check): Rename from
-	'real-profile-check'.  Rewrite slightly to use 'make' to build the
-	sanity check.
-	(clean-profile): Remove the files.
-
-2004-12-08  Raja R Harinath  <rharinath at novell.com>
-
-	* profiles/basic.make (real-profile-check): Update to new location
-	of secret stash of bootstrap files.
-
-2004-12-07  Raja R Harinath  <rharinath at novell.com>
-
-	* executable.make (uninstall-local): Remove .config file too.
-	* library.make (uninstall-local): Don't error out if GACUTIL fails.
-
-2004-12-07  Raja R Harinath  <rharinath at novell.com>
-
-	* library.make (BUILT_SOURCES_cmdline): Use
-	PLATFORM_CHANGE_SEPARATOR_CMD on BUILT_SOURCES too.
-	($(the_lib)): Use it.
-
-2004-12-04  Atsushi Enomoto  <atsushi at ximian.com>
-
-	* library.make,
-	  profiles/default.make,
-	  profiles/basic.make : use PLATFORM_PATH_SEPARATOR.
-
-2004-12-03  Raja R Harinath  <rharinath at novell.com>
-
-	* profiles/basic.make (MCS): Run the INTERNAL_MCS.
-	(USE_BOOT_COMPILE): Remove.
-
-2004-12-03  Raja R Harinath  <rharinath at novell.com>
-
-	* library.make (gacdir_flag): New.  Disable /gacdir flag if
-	RUNTIME_HAS_CONSISTENT_GACDIR flag is set.
-	(install-local): Use it.
-
-2004-11-30  Raja R Harinath  <rharinath at novell.com>
-
-	* executable.make (makefrag): Make profile-specific.
-
-2004-11-26  Martin Baulig  <martin at ximian.com>
-
-	* library.make (run-test-lib, run-test-ondotnet-lib): Added
-	`/output:TestResult-$(PROFILE).log' argument to NUnit.
-
-2004-11-26  Raja R Harinath  <rharinath at novell.com>
-
-	* library.make ($(the_lib)): Don't complain if a .mdb file wasn't
-	created (even though it's just a warning).
-	(install-local) [LIBRARY_INSTALL_DIR]: Likewise.
-	(PACKAGE): Remove.
-	(install-local) [!LIBRARY_INSTALL_DIR]: Use $(FRAMEWORK_VERSION).
-	* executable.make ($(PROGRAM)): Likewise.
-	(install-local): Likewise.
-	(PROGRAM_INSTALL_DIR): Define Using $(FRAMEWORK_VERSION).
-
-2004-11-26  Raja R Harinath  <rharinath at novell.com>
-
-	* profiles/basic.make (real-profile-check): Prepend ./ when
-	executing basic-profile-check.exe.  EXTERNAL_RUNTIME can be empty.
-
-2004-11-25  Raja R Harinath  <rharinath at novell.com>
-
-	* platforms/linux.make (EXTERNAL_MCS,EXTERNAL_MBAS,EXTERNAL_RUNTIME):
-	New.
-	* platforms/win32.make: Likewise.
-	* profiles/basic.make: Use $(EXTERNAL_MCS).
-	* profiles/net_1_1_bootstrap.make: Likewise.
-	* library.make ($(the_lib)): Add support for BUILT_SOURCES.
-	(run-test-lib): Pass $(TEST_HARNESS_FLAGS) to harness.  Useful to
-	pass, say /labels, to nunit-console.
-
-2004-11-25  Raja R Harinath  <rharinath at novell.com>
-
-	* library.make ($(gacutil)): Fix path.
-
-2004-11-23  Raja R Harinath  <rharinath at novell.com>
-
-	* executable.make (NO_INSTALL): New option.  Disables installation.
-	* library.make (NO_INSTALL): Likewise.
-	(install-local) [!NO_INSTALL, !LIBRARY_INSTALL_DIR]: Pass both
-	/gacdir and /root options to gacutil.
-	* platforms/linux.make (platform-check): Print the BOOTSTRAP_MCS
-	command that was tried, in case of failure.	
-	* profiles/basic.make (NO_TEST, NO_INSTALL): Define.
-	* profiles/net_1_1_bootstrap.make: Likewise.
-	* profiles/net_2_0_bootstrap.make: Likewise.
-
-2004-11-22  Raja R Harinath  <rharinath at novell.com>
-
-	* library.make (SN): New define.  Use the net_1_1_bootstrap sn.exe.
-	(SNFLAGS): New.
-	($(the_lib)): Use them to sign assemblies as they're built.
-	(the_lib_signature_stamp): Remove.
-
-	* Makefile (DISTFILES): Distribute all the profile make-fragments.
-	(clean-local): Clean up the deps/ directory.
-
-2004-11-19  Raja R Harinath  <rharinath at novell.com>
-
-	Orchestrate the bootstrap.
-	* rules.make (INTERNAL_MCS): Look for mcs.exe in profile-specific directory.
-	* profiles/net_1_1_bootstrap.make (BOOTSTRAP_MCS): Use mcs.exe from
-	basic profile.	
-	* profiles/default.make (BOOTSTRAP_MCS): Use mcs.exe from the
-	net_1_1_bootstrap profile.
-	* profiles/net_2_0_bootstrap.make (BOOTSTRAP_MCS): Use mcs.exe
-	from default profile.
-	(all-local, clean-local): New.  Copy mcs.exe from default profile,
-	but customize it to work with 2.0.x libraries.
-	* profiles/net_2_0.make (BOOTSTRAP_MCS): Define approprately for
-	building corlib.
-
-	* executable.make (executable_CLEAN_FILES): Clean up more files.
-	($(PROGRAM)): Move .mdb files too.
-
-2004-11-18  Atsushi Enomoto  <atsushi at ximian.com>
-
-	* library.make: Reverted the last fix. It broke windows build (that
-	  should be fixed though).
-
-2004-11-18  Atsushi Enomoto  <atsushi at ximian.com>
-
-	* library.make: Some minor fix for PLATFORM_PATH_SEPARATOR.
-
-2004-11-17  Raja R Harinath  <rharinath at novell.com>
-
-	* executable.make: Improve support for building executable into a
-	different directory.
-
-2004-11-09  Raja R Harinath  <rharinath at novell.com>
-
-	* profiles/basic.make: New.
-	* profiles/net_2_0.make (PROFILE_MCS_FLAGS): Remove '-2' flag.
-	* profiles/net_1_1_bootstrap.make (NO_SIGN_ASSEMBLY): Set.
-
-2004-11-04  Raja R Harinath  <rharinath at novell.com>
-
-	* profiles/net_1_1_bootstrap.make: New profile.
-	* profiles/net_2_0_bootstrap.make: Use in-tree mcs for
-	bootstrapping mscorlib.dll.
-	* platforms/linux.make (platform-check): Make more robust.
-	* rules.make (%-recursive): Propagate error exit from sub-makes
-	even if invoked with 'make -k'.
-
-2004-10-29  Raja R Harinath  <rharinath at novell.com>
-
-	* profiles/net_2_0_bootstrap.make (PROFILE_MCS_FLAGS): Remove
-	-langversion:default flag.
-
-	* rules.make (distdir): Remove.
-	(PROFILE_SUBDIRS): New.  Support profile-specific SUBDIRS.
-	(DIST_SUBDIRS): New.
-	(dist-recursive): Define distdir here.
-
-2004-10-25  Zoltan Varga  <vargaz at freemail.hu>
-
-	* config-default.make (TEST_RUNTIME): Add TEST_MONO_PATH variable.
-
-2004-09-27  Raja R Harinath  <rharinath at novell.com>
-
-	* library.make ($(test_nunit_dep)): Make sure NUnit is built for
-	the profile being tested.
-	(nunit-$(PROFILE).stamp): Rename from nunit.stamp.
-	* config-default.make (TEST_HARNESS): Look for 'nunit-console' in
-	profile-specific directory.
-
-2004-09-21  Raja R Harinath  <rharinath at novell.com>
-
-	* profiles/net_2_0_bootstrap.make: New file.
-
-	* library.make (the_mdb): Fix.
-	(library_CLEAN_FILES): Add the new test results files too.
-
-2004-09-14  Raja R Harinath  <rharinath at novell.com>
-
-	* library.make (test_lib, btest_lib): Build separate test
-	assemblies for separate profiles.
-	(dist-local): Don't copy files beginning with '../'.
-	(test_sourcefile, btest_sourcefile): Define in terms of
-	$(test_lib) or $(btest_lib) only if they're overriden.
-	(test_response, test_makefrag): Remove redundant $(PROFILE) in name.
-	(run-test-lib, run-btest-lib): Unify.  Give profile-specific name
-	for output XML file.
-	* rules.make (dist-default): Handle any of Makefile, makefile, or
-	GNUmakefile being present.
-	* profiles/net_2_0.make (TEST_RUNTIME): Don't define.
-
-2004-08-06 Gonzalo Paniagua Javier <gonzalo at ximian.com>
-
-	* executable.make:
-	* library.make: install/clean .mdb files.
-
-2004-07-30  Martin Baulig  <martin at ximian.com>
-
-	* executable.make (EXTRA_SOURCES): New variable to add extra
-	sources to the program.
-
-2004-07-30  Raja R Harinath  <harinath at blr-harinath.blr.novell.com>
-
-	* executable.make (PROGRAM_config): New auto-detecting define.
-	Defined if $(PROGRAM).config exists.
-	(install-local): Install $(PROGRAM_config) if it exists.
-
-2004-07-21  Lluis Sanchez Gual  <lluis at novell.com>
-
-	* profiles/default.make, profiles/net_2_0.make, profiles/net_1_0.make:
-	  Added FRAMEWORK_VERSION var.
-
-2004-07-02  Raja R Harinath  <rharinath at novell.com>
-
-	Support for avoiding "sharing violations" while compiling core
-	libraries with an in-tree compiler.
-	* library.make (LIBRARY_USE_INTERMEDIATE_FILE): New toggle.
-	($(the_lib)): Use it.
-
-2004-07-02  Raja R Harinath  <rharinath at novell.com>
-
-	* rules.make (OVERRIDE_BARE_TARGETS): Remove.
-	(OVERRIDE_TARGET_ALL): New control for overriding the default all:
-	rule.  If set, 'make all' will run 'all.override' from the client
-	Makefile.
-	(all): Move commands ...
-	(all.real): ... here.  Make ordering assumptions explicit, and
-	parallel-safe.
-	(test,run-test,run-test-ondotnet,clean,install,uninstall):
-	Consolidate into ...
-	(STD_TARGETS): ... this new variable.  Make ordering assumption
-	between -recursive and -local targets explicit.
-	(%-recursive): Handle W32 GNU make that has --unix as the first
-	argument in $(MAKE).
-	* README.makefiles (Special recursion needs): Update to reflect
-	changes.
-	* library.make (all-local): Build $(the_lib_signature_stamp) when
-	NO_SIGN_ASSEMBLY is defined.
-	($(gacutil),$(sn)): Consolidate rules.
-	(test-local,run-test-local,run-test-ondotnet-local): Likewise.
-
-2004-07-02  Raja R Harinath  <rharinath at novell.com>
-	
-	* config-default.make (TEST_RUNTIME): Use 'mono' by default.
-	* platforms/win32.make (TEST_RUNTIME): Remove.
-	* profiles/default.make (TEST_RUNTIME): Remove.
-
-2004-06-28  Raja R Harinath  <rharinath at novell.com>
-
-	* platforms/linux.make (RESGEN): Define using $(INTERNAL_RESGEN).
-
-2004-06-21  Raja R Harinath  <rharinath at novell.com>
-
-	* executable.make ($(PROGRAM)): Move depend on the makefrags ...
-	(all-local): ... here.
-	* library.make ($(the_lib), $(test_lib), $(btest_lib), all-local):
-	Likewise.
-	(LIBRARY_SNK): New default define.  Allows library to be signed
-	with a key other than mono.snk.
-	($(the_lib_signature_stamp)): New stamp file created when an
-	assembly is signed.
-	(install-local, uninstall-local, maybe-sign-lib): Set MONO_PATH.
-
-2004-06-16  Raja R Harinath  <rharinath at novell.com>
-
-	* library.make ($(makefrag),$(test_makefrag),$(btest_makefrag)): 
-	Depend on library.make.
-	* executable.make ($(makefrag)): Depend on executable.make.
-
-2004-06-16  Atsushi Enomoto  <atsushi at ximian.com>
-
-	* library.make : Added GACDIR. Use cygpath -w on windows.
-
-2004-06-14  Raja R Harinath  <rharinath at novell.com>
-
-	* platforms/linux.make (PLATFORM_CHANGE_SEPARATOR_CMD): Define to 'cat'.
-	(PLATFORM_TWEAK_CORLIB_SOURCES): Remove.
-	(platform-check): Avoid bash-ism.
-	* library.make: Simplify uses of $(patsubst x,y,$(foo)) to $(foo:x=y).
-	(core_sourcefile): Rename back to ...
-	(sourcefile): ... this.  Remove creation of redundant intermediate file.
-	(response): Change test for optimization, now that
-	PLATFORM_CHANGE_SEPARATOR_CMD is unconditional.  Combine with
-	platform-exclude handling.
-	(library_CLEAN_FILES): New variable to specify clean:-able files
-	close to where they're defined.
-	(test_response, btest_response): Simplify.
-	* executable.make (response): Change test for optimization.
-	(executable_CLEAN_FILES): New define.
-
-2004-06-14  Raja R Harinath  <rharinath at novell.com>
-
-	* library.make (uninstall-local): Fix typo.
-
-2004-06-11  Atsushi Enomoto  <atsushi at ximian.com>
-
-	* library.make : HAVE_CS_TESTS fixie.
-
-2004-06-11  Raja R Harinath  <rharinath at novell.com>
-
-	* library.make (HAVE_CS_TESTS, HAVE_VB_TESTS): Allow to be
-	overriden.  Useful if the tests sourcefile is generated.
-	(TEST_COMPILE, BTEST_COMPILE): Allow these to be customized too.
-
-	* platforms/win32.make (PLATFORM_TWEAK_CORLIB_SOURCES): Remove.
-
-	Support enough features to build mscorlib.dll.
-	* library.make (core_sourcefile): New renamed from $(sourcefile).
-	(PLATFORM_excludes): Auto-detecting define that sees if
-	$(LIBRARY).$(PLATFORM)-excludes file exists.
-	(sourcefile): New.  Possibly-built file that removes
-	PLATFORM_excluded files from core_sourcefile.
-	(test_against, test_dep): New.  Allow the test assembly to be
-	built against a different library.
-	(test_lib): Allow makefile to override the name of the test
-	assembly.
-	(LIBRARY_INSTALL_DIR): If defined, switch to using $(INSTALL_LIB)
-	rather than $(gacutil).
-	(DISTFILES, dist-local): Use core_sourcefile.
-	(clean-local): Remove sourcefile if it was generated.
-	(test_lib, btest_lib): Depend on $(test_dep).
-
-2004-06-10  Gonzalo Paniagua Javier <gonzalo at ximian.com>
-
-	* library.make: fixed PLATFORM_CHANGE_SEPARATOR_CHAR on windows.
-
-2004-06-09  Sebastien Pouliot  <sebastien at ximian.com>
-
-	* library.make: Added support to fully sign assemblies when doing a
-	"make install" (thanks to Jackson :-).
-
-2004-06-09  Raja R Harinath  <rharinath at novell.com>
-
-	Do away with stampfiles.
-	Introduce support for VB test cases.
-	* library.make (HAVE_CS_TESTS, HAVE_VB_TESTS): New auto-detecting
-	defines.
-	(stampfile, test_stampfile): Remove.
-	(clean-local): Don't mention them.
-	(test-local, run-test-local, run-test-ondotnet-local):
-	Make unconditional.
-	($(makefrag), $(test_makefrag)): Simplify.
-	($(btest_lib)): New.  Support for VB testcases.
-
-2004-06-09  Raja R Harinath  <rharinath at novell.com>
-
-	Partial support for writing Visual Basic source files.
-	* rules.make (USE_MBAS_FLAGS,BASCOMPILE,INTERNAL_MBAS): New.
-	* config-default.make (MBAS_FLAGS, DEFAULT_MBAS_FLAGS): New.
-	* profiles/default.make (MBAS): New.
-
-2004-06-09  Raja R Harinath  <rharinath at novell.com>
-
-	Do away with stampfiles.
-	* executable.make (stampfile): Remove.
-	(clean-local): Remove mention of $(stampfile).
-	(test-local, run-test-local, run-test-ondotnet-local):
-	Make unconditional.  Add dummy rule to prevent other makefiles
-	from defining rules on these.
-	($(PROGRAM)): Depend directly on $(BUILT_SOURCES).
-	($(makefrag)): Simplify.
-
-2004-06-03  Atsushi Enomoto  <atsushi at ximian.com>
-
-	* README.makefiles : added description for run-test-ondotnet.
-
-2004-06-03  Atsushi Enomoto  <atsushi at ximian.com>
-
-	* Makefile, executable.make, library.make, rules.make :
-	  Added new target "run-test-ondotnet" that works what "run-test"
-	  used to be on windows (i.e. tests our libs under MS.NET).
-
-2004-06-01  Atsushi Enomoto  <atsushi at ximian.com>
-
-	* platforms/win32.make : TEST_RUNTIME should be always mono we can't
-	  test our libs against MS.NET runtime. Think about internal call).
-
-2004-05-30  Jackson Harper  <jackson at ximian.com>
-
-	* library.make: Install to 2.0 package if building with the
-	net_2_0 profile.
-	
-2004-05-26  Gonzalo Paniagua Javier <gonzalo at ximian.com>
-
-	* library.make: reference nunti.core.dll and nunit.util.dll when
-	building tests.
-
-2004-05-26  Raja R Harinath  <rharinath at novell.com>
-
-	* library.make (clean-local): Add $(CLEAN_FILES) too.
-
-2004-05-25  Sebastien Pouliot  <sebastien at ximian.com>
-
-	* library.make: changed case on nunit.framework.dll (lowercase)
-
-2004-05-24  Raja R Harinath  <rharinath at novell.com>
-
-	* library.make (LIBRARY_COMPILE): New define.
-	($(the_lib)): Use $(LIBRARY_COMPILE) to compile $(the_lib).
-
-	* executable.make (PROGRAM_INSTALL_DIR): Allow makefile to specify
-	a different directory for installation.
-	(install-local, uninstall-local): Use it.
-
-2004-05-20  Raja R Harinath  <rharinath at novell.com>
-
-	* profiles/default.make (TEST_RUNTIME): Look in class/lib/default
-	for library to be tested.
-	* rules.make (INTERNAL_RESGEN): New Define.
-	* library.make (run-test-local): Move commands to run-test-lib.
-	Preparartion for allowing creation of addition test dll with .vb
-	testcases.
-	* executable.make (PROGRAM_COMPILE): New define.
-	($(PROGRAM)): Use PROGRAM_COMPILE to compile PROGRAM.
-
-2004-05-14  Jackson Harper  <jackson at ximian.com>
-
-	* library.make: Install package files. Get params in magical
-	correct order.
-	
-2004-05-11  Jackson Harper  <jackson at ximian.com>
-
-	* platforms/linux.make:
-	* platforms/win32.make: Define a PLATFORM_PATH_SEPARATOR used for
-	separating paths in env vars. (ie MONO_PATH).
-	* profiles/net_2_0.make: Always use gmcs for building the 2.0
-	libraries. corlib is the first lib built and it will build gmcs.
-	
-2004-05-11  Jackson Harper  <jackson at ximian.com>
-
-	* library.make: Allow assembly names to be different then their
-	.sources file names.
-	
-2004-05-08  Gonzalo Paniagua Javier <gonzalo at ximian.com>
-
-	* library.make: build NUnit if we try to run 'make test' and the dll
-	is not found.
-
-2004-04-29  Jackson Harper  <jackson at ximian.com>
-
-	* library.make: Fix uninstall
-	
-2004-04-29  Martin Baulig  <martin at ximian.com>
-
-	* rules.make: Added `INTERNAL_ILASM'.
-
-2004-04-29  Jackson Harper  <jackson at ximian.com>
-
-	* library.make: Use RUNTIME instead of PLATFORM_RUNTIME for the
-	gacutil. gacutil needs to be run on our runtime. Make dependancys
-	more sane.
-	
-2004-04-28  Jackson Harper  <jackson at ximian.com>
-
-	* library.make: Use the proper runtime, make sure gacutil is
-	built.
-	
-2004-04-28  Jackson Harper  <jackson at ximian.com>
-
-	* library.make: Install these bad actors to the GAC.
-	
-2004-04-28  Raja R Harinath  <rharinath at novell.com>
-
-	* library.make (test_flags): NUnit.Framework.dll is now in
-	class/lib/$(PROFILE).
-
-2004-04-26  Jackson Harper  <jackson at ximian.com>
-
-	* library.make:
-	* profiles/bootstrap.make:
-	* profiles/default.make: profiles are built in their ownb lib
-	directory now.
-	* profiles/net_2_0.make: new .net 2.0 profile.
-	
-2004-04-22  Martin Baulig  <martin at ximian.com>
-
-	* profiles/net_1_2.make: Removed.
-	* profiles/martin-generics.make: Remove.
-
-2004-04-19  Raja R Harinath  <rharinath at novell.com>
-
-	* rules.make (%-recursive): Honor 'make -k'.
-
-2004-02-17  Martin Baulig  <martin at ximian.com>
-
-	* profiles/generics.make: Renamed to `martin-generics.make' and
-	added a comment to the file.  I'll rename this back when it's
-	ready for public use.
-
-2003-12-17  Jackson Harper <jackson at ximian.com>
-
-	* profiles/default.make:
-	* profiles/net_1_0.make: Add ONLY_1_0 and ONLY_1_1 defines to fix
-	the build
-	
-2003-12-08  Peter Williams  <peter at newton.cx>
-
-	* config-default.make: Don't check for / define
-	ECHO_ESCAPE: the check isn't smart enough and
-	apparently OS X's shell somehow doesn't support
-	escape characters.
-
-	* library.make: Use embedded tab instead of 
-	$(ECHO_ESCAPE). Fixes OS X build.
-	
-	* executable.make: Same.
-	
-2003-12-05  Martin Baulig  <martin at ximian.com>
-
-	* profiles/generics.make: Define `GENERICS'.
-
-2003-12-05  Martin Baulig  <martin at ximian.com>
-
-	* profiles/net_1_2.make: New profile; uses the .NET 1.2 API's, but
-	without generics and with mcs instead of gmcs.
-
-	* profiles/bootstrap.make: New profile; already use the newly
-	compiled mcs to compile corlib.
-
-2003-12-04  Martin Baulig  <martin at ximian.com>
-
-	* profiles/generics.make: Use gmcs.
-
-2003-11-12 Jackson Harper <jackson at ximian.com>
-
-	* rules.make: 
-	* platforms/linux.make: corlib name is now mscorlib.
-	
-2003-11-09 Ben Maurer  <bmaurer at users.sourceforge.net>
-
-	* profiles/generics.make: add the -2 flag.
-
-2003-10-28 Jackson Harper <jackson at ximian.com>
-
-	* platforms/linux.make: Tell users to read INSTALL.txt not the
-	non-existant README.building.
-	
-2003-10-22  Dick Porter  <dick at ximian.com>
-
-	* platforms/win32.make:
-	* platforms/linux.make:
-	* rules.make: Added RESGEN platform-specific tool.
-
-2003-08-03  Gonzalo Paniagua Javier <gonzalo at ximian.com>
-
-	* config-default.make: the /nowarn arguments are now set on a per
-	library basis.
-
-2003-07-29  Gonzalo Paniagua Javier <gonzalo at ximian.com>
-
-	* executable.make: install-local depends on the program too.
-
-2003-07-25  Peter Williams <peter at newton.cx>
-
-	* rules.make (run-test): Make it depend on 'test-local'
-	then 'run-test-local' after 'run-test-recursive'. This way,
-	'make run-test' from the toplevel doesn't recurse through all
-	the directories doing a make test before we run anything.
-
-2003-07-24  Gonzalo Paniagua Javier <gonzalo at ximian.com>
-
-	* rules.make: run-test depends now on 'test'.
-
-2003-07-24  Gonzalo Paniagua Javier <gonzalo at ximian.com>
-
-	* rules.make: set corlib to PLATFORM_CORLIB if this is defined.
-
-2003-07-22  Peter Williams  <peter at newton.cx>
-
-	* rules.make (withmcs): Add this developer utility target.
-
-2003-07-20  Peter Williams  <peter at newton.cx>
-
-	* README.platforms: Update docs for changes below.
-
-	* platforms/win32.make (PLATFORM_CORLIB): Set this variable
-	to 'mscorlib.dll', instead of $(corlib) which everything links
-	against. *Almost* everything should link against our corlib --
-	with the exception of corlib_cmp and corlib_res.
-
-	* platforms/linux.make: Same here: corlib.dll
-
-	* rules.make: Define $(corlib) here.
-
-2003-07-20  Peter Williams  <peter at newton.cx>
-
-	* config-default.make (TEST_RUNTIME): Use the platform runtime
-	to run tests, by default.
-
-	* profiles/default.make (TEST_RUNTIME): If our test runtime is
-	mono, use the --debug flag.
-
-	* executable.make (sourcefile): Add a basename so that we can
-	find the nunit sources and so we behave a bit more like
-	library.make
-
-	* config-default.make (TEST_HARNESS): Find nunit-console in its
-	new home.
-
-2003-07-20  Peter Williams  <peter at newton.cx>
-
-	* library.make ($(response)): Do a "Creating ..." line here.
-
-	* executable.make ($(response)): Same.
-
-	* config-default.make: Make warning more forceful.
-
-	* rules.make: Define a useful 'PLATFORM_MONO_NATIVE' that is
-	set if the platform does not have a native runtime (ie, linux).
-	Also reorder some definitions.
-
-2003-07-20  Peter Williams  <peter at newton.cx>
-
-	* Created. See ../ChangeLog for entries earlier than
-	this.
diff --git a/mcs/build/Makefile b/mcs/build/Makefile
index f90c8b8..14c2a5d 100644
--- a/mcs/build/Makefile
+++ b/mcs/build/Makefile
@@ -17,11 +17,12 @@ common/Consts.cs: common/Consts.cs.in $(wildcard config.make)
 PLATFORMS = darwin linux win32
 PROFILES = \
 	basic \
+	build \
 	net_2_0 \
 	moonlight_raw \
-	moonlight \
 	net_3_5	\
-	net_4_0	
+	net_4_0	\
+	net_4_5
 
 COMMON_SRCS = \
 	Consts.cs.in			\
diff --git a/mcs/build/common/Consts.cs b/mcs/build/common/Consts.cs
index a7227be..532e52f 100644
--- a/mcs/build/common/Consts.cs
+++ b/mcs/build/common/Consts.cs
@@ -34,12 +34,18 @@ static class Consts
 	// Use these assembly version constants to make code more maintainable.
 	//
 
-	public const string MonoVersion = "2.10.8.1";
-	public const string MonoCompany = "MONO development team";
-	public const string MonoProduct = "MONO Common language infrastructure";
-	public const string MonoCopyright = "(c) various MONO Authors";
+	public const string MonoVersion = "2.11.0.0";
+	public const string MonoCompany = "Mono development team";
+	public const string MonoProduct = "Mono Common Language Infrastructure";
+	public const string MonoCopyright = "(c) Various Mono authors";
 
-#if NET_4_0
+#if NET_4_5
+	public const string FxVersion = "4.0.0.0";
+	public const string FxFileVersion = "4.0.30319.17020";
+	
+	public const string VsVersion = "0.0.0.0"; // Useless ?
+	public const string VsFileVersion = "11.0.0.0"; // TODO:
+#elif NET_4_0
 	public const string FxVersion = "4.0.0.0";
 	public const string FxFileVersion = "4.0.30319.1";
 	
diff --git a/mcs/build/common/Consts.cs.in b/mcs/build/common/Consts.cs.in
index 5adf52f..df8d304 100644
--- a/mcs/build/common/Consts.cs.in
+++ b/mcs/build/common/Consts.cs.in
@@ -35,11 +35,17 @@ static class Consts
 	//
 
 	public const string MonoVersion = "@MONO_VERSION@";
-	public const string MonoCompany = "MONO development team";
-	public const string MonoProduct = "MONO Common language infrastructure";
-	public const string MonoCopyright = "(c) various MONO Authors";
+	public const string MonoCompany = "Mono development team";
+	public const string MonoProduct = "Mono Common Language Infrastructure";
+	public const string MonoCopyright = "(c) Various Mono authors";
 
-#if NET_4_0
+#if NET_4_5
+	public const string FxVersion = "4.0.0.0";
+	public const string FxFileVersion = "4.0.30319.17020";
+	
+	public const string VsVersion = "0.0.0.0"; // Useless ?
+	public const string VsFileVersion = "11.0.0.0"; // TODO:
+#elif NET_4_0
 	public const string FxVersion = "4.0.0.0";
 	public const string FxFileVersion = "4.0.30319.1";
 	
diff --git a/mcs/build/config-default.make b/mcs/build/config-default.make
index a696959..e351b07 100644
--- a/mcs/build/config-default.make
+++ b/mcs/build/config-default.make
@@ -11,7 +11,7 @@ CODEPAGE = 65001
 
 RUNTIME_FLAGS = 
 TEST_HARNESS = $(topdir)/class/lib/$(PROFILE)/nunit-console.exe
-MCS_FLAGS = $(PLATFORM_DEBUG_FLAGS)
+MCS_FLAGS = 
 MBAS_FLAGS = $(PLATFORM_DEBUG_FLAGS)
 LIBRARY_FLAGS = /noconfig
 ifndef CFLAGS
@@ -30,6 +30,7 @@ TEST_RUNTIME = MONO_PATH="$(topdir)/class/lib/$(PROFILE)$(PLATFORM_PATH_SEPARATO
 
 DEFAULT_MCS_FLAGS := $(MCS_FLAGS)
 DEFAULT_MBAS_FLAGS := $(MBAS_FLAGS)
+DEFAULT_PROFILE := net_4_5
 
 # You shouldn't need to set these but might on a 
 # weird platform.
diff --git a/mcs/build/executable.make b/mcs/build/executable.make
index 6030f5e..b9935a4 100644
--- a/mcs/build/executable.make
+++ b/mcs/build/executable.make
@@ -3,37 +3,45 @@
 # The rules for building a program.
 
 base_prog = $(notdir $(PROGRAM))
-prog_dir := $(filter-out . ./, $(dir $(PROGRAM)))
-sourcefile = $(base_prog).sources
+ifndef sourcefile
+sourcefile := $(base_prog).sources
+endif
 base_prog_config := $(wildcard $(base_prog).config.$(PROFILE))
 ifndef base_prog_config
 base_prog_config := $(wildcard $(base_prog).config)
 endif
-ifdef base_prog_config
-PROGRAM_config := $(PROGRAM).config
-endif
 
 executable_CLEAN_FILES = *.exe $(PROGRAM) $(PROGRAM).mdb $(BUILT_SOURCES)
 
 ifeq (cat,$(PLATFORM_CHANGE_SEPARATOR_CMD))
 response = $(sourcefile)
 else
-response = $(depsdir)/$(base_prog).response
+response = $(depsdir)/$(sourcefile).response
 executable_CLEAN_FILES += $(response)
 endif
 
-ifdef KEEP_OUTPUT_FILE_COPY
-	COPY_CMD = cp
+ifndef the_libdir
+the_libdir = $(topdir)/class/lib/$(PROFILE)/
+ifdef PROGRAM_USE_INTERMEDIATE_FILE
+build_libdir = $(the_libdir)tmp/
 else
-	COPY_CMD = mv
+build_libdir = $(the_libdir)
+endif
+endif
+
+ifdef base_prog_config
+PROGRAM_config := $(build_libdir)$(PROGRAM).config
 endif
 
+the_lib = $(the_libdir)$(base_prog)
+build_lib = $(build_libdir)$(base_prog)
+
 makefrag = $(depsdir)/$(PROFILE)_$(base_prog).makefrag
 pdb = $(patsubst %.exe,%.pdb,$(PROGRAM))
 mdb = $(patsubst %.exe,%.mdb,$(PROGRAM))
 executable_CLEAN_FILES += $(makefrag) $(pdb) $(mdb)
 
-all-local: $(PROGRAM) $(PROGRAM_config)
+all-local: $(the_lib) $(PROGRAM_config)
 
 install-local: all-local
 test-local: all-local
@@ -48,10 +56,10 @@ ifndef PROGRAM_INSTALL_DIR
 PROGRAM_INSTALL_DIR = $(mono_libdir)/mono/$(FRAMEWORK_VERSION)
 endif
 
-install-local: $(PROGRAM) $(PROGRAM_config)
+install-local:
 	$(MKINSTALLDIRS) $(DESTDIR)$(PROGRAM_INSTALL_DIR)
-	$(INSTALL_BIN) $(PROGRAM) $(DESTDIR)$(PROGRAM_INSTALL_DIR)
-	test ! -f $(PROGRAM).mdb || $(INSTALL_BIN) $(PROGRAM).mdb $(DESTDIR)$(PROGRAM_INSTALL_DIR)
+	$(INSTALL_BIN) $(the_lib) $(DESTDIR)$(PROGRAM_INSTALL_DIR)
+	test ! -f $(the_lib).mdb || $(INSTALL_BIN) $(the_lib).mdb $(DESTDIR)$(PROGRAM_INSTALL_DIR)
 ifdef PROGRAM_config
 	$(INSTALL_DATA) $(PROGRAM_config) $(DESTDIR)$(PROGRAM_INSTALL_DIR)
 endif
@@ -101,11 +109,16 @@ ifndef PROGRAM_COMPILE
 PROGRAM_COMPILE = $(CSCOMPILE)
 endif
 
-$(PROGRAM): $(BUILT_SOURCES) $(EXTRA_SOURCES) $(response) $(prog_dir:=/.stamp)
-	$(PROGRAM_COMPILE) -target:exe -out:$(base_prog) $(BUILT_SOURCES) $(EXTRA_SOURCES) @$(response)
-ifneq ($(base_prog),$(PROGRAM))
-	$(COPY_CMD) $(base_prog) $(PROGRAM)
-	test ! -f $(base_prog).mdb || $(COPY_CMD) $(base_prog).mdb $(PROGRAM).mdb
+$(the_lib): $(the_libdir)/.stamp
+
+$(build_lib): $(BUILT_SOURCES) $(EXTRA_SOURCES) $(response) $(build_libdir:=/.stamp)
+	$(PROGRAM_COMPILE) -target:exe -out:$@ $(BUILT_SOURCES) $(EXTRA_SOURCES) @$(response)
+
+ifdef PROGRAM_USE_INTERMEDIATE_FILE
+$(the_lib): $(build_lib)
+	$(Q) cp $(build_lib) $@
+	$(Q) test ! -f $(build_lib).mdb || mv $(build_lib).mdb $@.mdb
+	$(Q) test ! -f $(build_lib:.exe=.pdb) || mv $(build_lib:.exe=.pdb) $(the_lib:.exe=.pdb)
 endif
 
 ifdef PROGRAM_config
@@ -117,13 +130,17 @@ endif
 endif
 
 $(makefrag): $(sourcefile)
-	@echo Creating $@ ...
-	@sed 's,^,$(PROGRAM): ,' $< > $@
+#	@echo Creating $@ ...
+	@sed 's,^,$(build_lib): ,' $< >$@
+	@if test ! -f $(sourcefile).makefrag; then :; else \
+	   cat $(sourcefile).makefrag >> $@ ; \
+	   echo '$@: $(sourcefile).makefrag' >> $@; \
+	   echo '$(sourcefile).makefrag:' >> $@; fi
 
 ifneq ($(response),$(sourcefile))
 $(response): $(sourcefile)
-	@echo Creating $@ ...
-	@( $(PLATFORM_CHANGE_SEPARATOR_CMD) ) <$< >$@
+	@echo Converting $(sourcefile) to $@ ...
+	@cat $(sourcefile) | $(PLATFORM_CHANGE_SEPARATOR_CMD) >$@
 endif
 
 -include $(makefrag)
@@ -132,14 +149,15 @@ all-local: $(makefrag) $(extra_targets)
 
 csproj-local:
 	config_file=`basename $(PROGRAM) .exe`-$(PROFILE).input; \
-	echo $(thisdir):$$config_file >> $(topdir)/../mono/msvc/scripts/order; \
+	echo $(thisdir):$$config_file >> $(topdir)/../msvc/scripts/order; \
 	(echo $(is_boot); \
 	echo $(MCS);	\
 	echo $(USE_MCS_FLAGS) $(LIBRARY_FLAGS) $(LIB_MCS_FLAGS); \
 	echo $(PROGRAM); \
 	echo $(BUILT_SOURCES_cmdline); \
 	echo $(build_lib); \
-	echo $(response)) > $(topdir)/../mono/msvc/scripts/inputs/$$config_file
+	echo $(FRAMEWORK_VERSION); \
+	echo $(response)) > $(topdir)/../msvc/scripts/inputs/$$config_file
 
 
 ifneq ($(response),$(sourcefile))
diff --git a/mcs/build/library.make b/mcs/build/library.make
index 614ac01..6a51df8 100644
--- a/mcs/build/library.make
+++ b/mcs/build/library.make
@@ -66,10 +66,12 @@ library_CLEAN_FILES += $(build_lib) $(build_lib).so $(build_lib).mdb $(build_lib
 ifdef NO_SIGN_ASSEMBLY
 SN = :
 else
-sn = $(topdir)/class/lib/basic/sn.exe
-SN = $(Q) MONO_PATH="$(topdir)/class/lib/basic$(PLATFORM_PATH_SEPARATOR)$$MONO_PATH" $(RUNTIME) $(RUNTIME_FLAGS) $(sn)
+ifeq ("$(SN)","")
+sn = $(topdir)/class/lib/$(BUILD_TOOLS_PROFILE)/sn.exe
+SN = $(Q) MONO_PATH="$(topdir)/class/lib/$(BUILD_TOOLS_PROFILE)$(PLATFORM_PATH_SEPARATOR)$$MONO_PATH" $(RUNTIME) $(RUNTIME_FLAGS) $(sn)
 SNFLAGS = -q
 endif
+endif
 
 ifeq ($(PLATFORM), win32)
 GACDIR = `cygpath -w $(mono_libdir)`
@@ -90,17 +92,21 @@ else
 is_boot=false
 endif
 
-csproj-local: 
+csproj-local: csproj-library csproj-test
+
+csproj-library:
 	config_file=`basename $(LIBRARY) .dll`-$(PROFILE).input; \
-	echo $(thisdir):$$config_file >> $(topdir)/../mono/msvc/scripts/order; \
+	echo $(thisdir):$$config_file >> $(topdir)/../msvc/scripts/order; \
 	(echo $(is_boot); \
 	echo $(MCS);	\
 	echo $(USE_MCS_FLAGS) $(LIBRARY_FLAGS) $(LIB_MCS_FLAGS); \
 	echo $(LIBRARY_NAME); \
 	echo $(BUILT_SOURCES_cmdline); \
 	echo $(build_lib); \
-	echo $(response)) > $(topdir)/../mono/msvc/scripts/inputs/$$config_file
+	echo $(FRAMEWORK_VERSION); \
+	echo $(response)) > $(topdir)/../msvc/scripts/inputs/$$config_file
 
+csproj-test:
 
 install-local: all-local
 test-local: all-local
@@ -178,6 +184,19 @@ include $(topdir)/build/tests.make
 
 ifdef HAVE_CS_TESTS
 DISTFILES += $(test_sourcefile)
+
+csproj-test:
+	config_file=`basename $(LIBRARY) .dll`-tests-$(PROFILE).input; \
+	echo $(thisdir):$$config_file >> $(topdir)/../msvc/scripts/order; \
+	(echo false; \
+	echo $(MCS);	\
+	echo $(USE_MCS_FLAGS) -r:$(the_assembly) $(TEST_MCS_FLAGS); \
+	echo $(test_lib); \
+	echo $(BUILT_SOURCES_cmdline); \
+	echo $(test_lib); \
+	echo $(FRAMEWORK_VERSION); \
+	echo $(test_response)) > $(topdir)/../msvc/scripts/inputs/$$config_file
+
 endif
 
 # make dist will collect files in .sources files from all profiles
@@ -290,10 +309,10 @@ $(makefrag) $(test_response) $(test_makefrag) $(btest_response) $(btest_makefrag
 ## Documentation stuff
 
 Q_MDOC_UP=$(if $(V),, at echo "MDOC-UP [$(PROFILE)] $(notdir $(@))";)
+# net_2_0 is needed because monodoc is only compiled in that profile
 MDOC_UP  =$(Q_MDOC_UP) \
-		MONO_PATH="$(topdir)/class/lib/net_4_0$(PLATFORM_PATH_SEPARATOR)$(topdir)/class/lib/net_2_0$(PLATFORM_PATH_SEPARATOR)$$MONO_PATH" \
-		$(RUNTIME) $(topdir)/tools/mdoc/mdoc.exe update --delete            \
-			-o Documentation/en $(the_lib)
+		MONO_PATH="$(topdir)/class/lib/$(DEFAULT_PROFILE)$(PLATFORM_PATH_SEPARATOR)$(topdir)/class/lib/net_2_0$(PLATFORM_PATH_SEPARATOR)$$MONO_PATH" $(RUNTIME) $(topdir)/tools/mdoc/mdoc.exe \
+		update --delete -o Documentation/en $(the_lib)
 
 doc-update-local: $(the_libdir)/.doc-stamp
 
diff --git a/mcs/build/platforms/darwin.make b/mcs/build/platforms/darwin.make
index bae26cb..266d5c8 100644
--- a/mcs/build/platforms/darwin.make
+++ b/mcs/build/platforms/darwin.make
@@ -12,7 +12,6 @@ PLATFORM_TEST_HARNESS_EXCLUDES = NotOnMac,
 EXTERNAL_MCS = gmcs
 EXTERNAL_MBAS = mbas
 EXTERNAL_RUNTIME = mono
-RESGEN = MONO_PATH="$(topdir)/class/lib/$(PROFILE)$(PLATFORM_PATH_SEPARATOR)$$MONO_PATH" $(INTERNAL_RESGEN)
 #ILDISASM = monodis
 ILDISASM = false
 
diff --git a/mcs/build/platforms/linux.make b/mcs/build/platforms/linux.make
index 4776c15..8149f09 100644
--- a/mcs/build/platforms/linux.make
+++ b/mcs/build/platforms/linux.make
@@ -12,7 +12,6 @@ PLATFORM_TEST_HARNESS_EXCLUDES =
 EXTERNAL_MCS = gmcs
 EXTERNAL_MBAS = mbas
 EXTERNAL_RUNTIME = mono
-RESGEN = MONO_PATH="$(topdir)/class/lib/$(PROFILE)$(PLATFORM_PATH_SEPARATOR)$$MONO_PATH" $(INTERNAL_RESGEN)
 #ILDISASM = monodis
 ILDISASM = false
 
diff --git a/mcs/build/platforms/win32.make b/mcs/build/platforms/win32.make
index 403a47e..b71633d 100644
--- a/mcs/build/platforms/win32.make
+++ b/mcs/build/platforms/win32.make
@@ -14,9 +14,7 @@ EXTERNAL_MBAS = vbc.exe
 EXTERNAL_RUNTIME =
 
 # Disabled since it needs the SDK
-#RESGEN = resgen.exe
 #ILDISASM = ildasm.exe /test
-RESGEN = MONO_PATH="$(topdir)/class/lib/$(PROFILE)$(PLATFORM_PATH_SEPARATOR)$$MONO_PATH" $(INTERNAL_RESGEN)
 
 #ILDISASM = monodis.bat
 ## Gross hack
diff --git a/mcs/build/profiles/basic.make b/mcs/build/profiles/basic.make
index 6c1e9af..d335d6a 100644
--- a/mcs/build/profiles/basic.make
+++ b/mcs/build/profiles/basic.make
@@ -6,9 +6,11 @@ with_mono_path_monolite = MONO_PATH="$(topdir)/class/lib/monolite$(PLATFORM_PATH
 monolite_flag := $(depsdir)/use-monolite
 use_monolite := $(wildcard $(monolite_flag))
 
+MONOLITE_MCS = $(topdir)/class/lib/monolite/basic.exe
+
 ifdef use_monolite
 PROFILE_RUNTIME = $(with_mono_path_monolite) $(RUNTIME)
-BOOTSTRAP_MCS = $(PROFILE_RUNTIME) $(RUNTIME_FLAGS) $(topdir)/class/lib/monolite/mcs.exe
+BOOTSTRAP_MCS = $(PROFILE_RUNTIME) $(RUNTIME_FLAGS) $(MONOLITE_MCS)
 else
 PROFILE_RUNTIME = $(EXTERNAL_RUNTIME)
 BOOTSTRAP_MCS = $(EXTERNAL_MCS)
@@ -58,9 +60,8 @@ do-profile-check: $(depsdir)/.stamp
 	@ok=:; \
 	rm -f $(PROFILE_EXE) $(PROFILE_OUT); \
 	$(MAKE) $(MAKE_Q) $(PROFILE_OUT) || ok=false; \
-	rm -f $(PROFILE_EXE) $(PROFILE_OUT); \
-	if $$ok; then :; else \
-	    if test -f $(topdir)/class/lib/monolite/mcs.exe; then \
+	if $$ok; then rm -f $(PROFILE_EXE) $(PROFILE_OUT); else \
+	    if test -f $(MONOLITE_MCS); then \
 		$(MAKE) -s do-profile-check-monolite ; \
 	    else \
 		echo "*** The compiler '$(BOOTSTRAP_MCS)' doesn't appear to be usable." 1>&2; \
diff --git a/mcs/build/profiles/build.make b/mcs/build/profiles/build.make
new file mode 100644
index 0000000..b09a441
--- /dev/null
+++ b/mcs/build/profiles/build.make
@@ -0,0 +1,22 @@
+# -*- makefile -*-
+
+BOOTSTRAP_PROFILE = basic
+BUILD_TOOLS_PROFILE = basic
+
+INTERNAL_GMCS = $(RUNTIME) $(RUNTIME_FLAGS) $(topdir)/class/lib/$(BUILD_TOOLS_PROFILE)/basic.exe
+BOOTSTRAP_MCS = MONO_PATH="$(topdir)/class/lib/$(BOOTSTRAP_PROFILE)$(PLATFORM_PATH_SEPARATOR)$$MONO_PATH" $(INTERNAL_GMCS)
+MCS = MONO_PATH="$(topdir)/class/lib/$(BOOTSTRAP_PROFILE)$(PLATFORM_PATH_SEPARATOR)$$MONO_PATH" $(INTERNAL_GMCS)
+
+# nuttzing!
+
+profile-check:
+	@:
+
+DEFAULT_REFERENCES = -r:mscorlib.dll
+PROFILE_MCS_FLAGS = -d:NET_1_1 -d:NET_2_0 -d:NET_3_0 -d:NET_3_5 -d:NET_4_0 -nowarn:1699 -nostdlib -lib:$(topdir)/class/lib/$(PROFILE) $(DEFAULT_REFERENCES)
+
+NO_SIGN_ASSEMBLY = yes
+NO_TEST = yes
+NO_INSTALL = yes
+
+FRAMEWORK_VERSION = 4.0
diff --git a/mcs/build/profiles/moonlight.make b/mcs/build/profiles/moonlight.make
deleted file mode 100644
index f3aba43..0000000
--- a/mcs/build/profiles/moonlight.make
+++ /dev/null
@@ -1,19 +0,0 @@
-#! -*- makefile -*-
-
-my_runtime = $(RUNTIME) $(RUNTIME_FLAGS) --security=temporary-smcs-hack
-INTERNAL_SMCS = $(my_runtime) $(topdir)/class/lib/$(PROFILE)/smcs.exe
-
-BOOTSTRAP_PROFILE = moonlight_bootstrap
-
-BOOTSTRAP_MCS = MONO_PATH="$(topdir)/class/lib/$(BOOTSTRAP_PROFILE)$(PLATFORM_PATH_SEPARATOR)$$MONO_PATH" $(my_runtime) $(topdir)/class/lib/$(BOOTSTRAP_PROFILE)/smcs.exe
-MCS = MONO_PATH="$(topdir)/class/lib/$(PROFILE)$(PLATFORM_PATH_SEPARATOR)$$MONO_PATH" $(INTERNAL_SMCS)
-
-profile-check:
-	@:
-
-PROFILE_MCS_FLAGS = -d:NET_1_1 -d:NET_2_0 -d:NET_2_1 -d:MOONLIGHT
-FRAMEWORK_VERSION = 2.1
-NO_TEST = yes
-
-# the tuner takes care of the install
-NO_INSTALL = yes
diff --git a/mcs/build/profiles/moonlight_raw.make b/mcs/build/profiles/moonlight_raw.make
index 1c53054..b9ad87d 100644
--- a/mcs/build/profiles/moonlight_raw.make
+++ b/mcs/build/profiles/moonlight_raw.make
@@ -1,15 +1,16 @@
 #! -*- makefile -*-
 
-BOOTSTRAP_PROFILE = basic
+BOOTSTRAP_PROFILE = build
 
 BOOTSTRAP_MCS = MONO_PATH="$(topdir)/class/lib/$(BOOTSTRAP_PROFILE)$(PLATFORM_PATH_SEPARATOR)$$MONO_PATH" $(INTERNAL_GMCS)
-MCS = MONO_PATH="$(topdir)/class/lib/$(BOOTSTRAP_PROFILE)$(PLATFORM_PATH_SEPARATOR)$$MONO_PATH" $(INTERNAL_GMCS)
+MCS = $(BOOTSTRAP_MCS)
 
-profile-check:
+profile-check: $(depsdir)/.stamp
 	@:
 
 DEFAULT_REFERENCES = -r:mscorlib.dll
-PROFILE_MCS_FLAGS = -d:NET_1_1 -d:NET_2_0 -d:NET_2_1 -d:MOONLIGHT -nowarn:1699 -nostdlib -lib:$(topdir)/class/lib/$(PROFILE) $(DEFAULT_REFERENCES)
+PROFILE_MCS_FLAGS = -lib:$(topdir)/class/lib/moonlight_raw -d:NET_1_1 -d:NET_2_0 -d:NET_2_1 -d:MOONLIGHT -d:SILVERLIGHT -nowarn:1699 -nostdlib -lib:$(topdir)/class/lib/$(PROFILE) $(DEFAULT_REFERENCES)
+SN = sn
 FRAMEWORK_VERSION = 2.1
 NO_TEST = yes
 
diff --git a/mcs/build/profiles/net_2_0.make b/mcs/build/profiles/net_2_0.make
index 0f79ea0..4880178 100644
--- a/mcs/build/profiles/net_2_0.make
+++ b/mcs/build/profiles/net_2_0.make
@@ -1,6 +1,6 @@
 # -*- makefile -*-
 
-BOOTSTRAP_PROFILE = basic
+BOOTSTRAP_PROFILE = build
 BOOTSTRAP_MCS = MONO_PATH="$(topdir)/class/lib/$(BOOTSTRAP_PROFILE)$(PLATFORM_PATH_SEPARATOR)$$MONO_PATH" $(INTERNAL_GMCS)
 MCS = MONO_PATH="$(topdir)/class/lib/$(BOOTSTRAP_PROFILE)$(PLATFORM_PATH_SEPARATOR)$$MONO_PATH" $(INTERNAL_GMCS)
 
@@ -10,6 +10,6 @@ profile-check:
 	@:
 
 DEFAULT_REFERENCES = -r:mscorlib.dll
-PROFILE_MCS_FLAGS = -d:NET_1_1 -d:NET_2_0 -nowarn:1699 -nostdlib -lib:$(topdir)/class/lib/$(PROFILE) $(DEFAULT_REFERENCES)
+PROFILE_MCS_FLAGS = -d:NET_1_1 -d:NET_2_0 -nowarn:1699 -nostdlib -lib:$(topdir)/class/lib/$(PROFILE) $(DEFAULT_REFERENCES) $(PLATFORM_DEBUG_FLAGS)
 
 FRAMEWORK_VERSION = 2.0
diff --git a/mcs/build/profiles/net_3_5.make b/mcs/build/profiles/net_3_5.make
index 6bd8a93..0f26f39 100644
--- a/mcs/build/profiles/net_3_5.make
+++ b/mcs/build/profiles/net_3_5.make
@@ -1,6 +1,6 @@
 # -*- makefile -*-
 
-BOOTSTRAP_PROFILE = basic
+BOOTSTRAP_PROFILE = build
 
 MCS = MONO_PATH="$(topdir)/class/lib/$(BOOTSTRAP_PROFILE)$(PLATFORM_PATH_SEPARATOR)$$MONO_PATH" $(INTERNAL_GMCS)
 
@@ -10,7 +10,7 @@ profile-check:
 	@:
 
 DEFAULT_REFERENCES = -r:mscorlib.dll
-PROFILE_MCS_FLAGS = -d:NET_1_1 -d:NET_2_0 -d:NET_3_5 -nowarn:1699 -nostdlib -lib:$(topdir)/class/lib/$(PROFILE) -lib:$(topdir)/class/lib/net_2_0 $(DEFAULT_REFERENCES)
+PROFILE_MCS_FLAGS = -d:NET_1_1 -d:NET_2_0 -d:NET_3_5 -nowarn:1699 -nostdlib -lib:$(topdir)/class/lib/$(PROFILE) -lib:$(topdir)/class/lib/net_2_0 $(DEFAULT_REFERENCES) $(PLATFORM_DEBUG_FLAGS)
 
 FRAMEWORK_VERSION = 3.5
 
diff --git a/mcs/build/profiles/net_4_0.make b/mcs/build/profiles/net_4_0.make
index 4574b47..0a26e1b 100644
--- a/mcs/build/profiles/net_4_0.make
+++ b/mcs/build/profiles/net_4_0.make
@@ -1,6 +1,6 @@
 # -*- makefile -*-
 
-BOOTSTRAP_PROFILE = basic
+BOOTSTRAP_PROFILE = build
 
 BOOTSTRAP_MCS = MONO_PATH="$(topdir)/class/lib/$(BOOTSTRAP_PROFILE)$(PLATFORM_PATH_SEPARATOR)$$MONO_PATH" $(INTERNAL_GMCS)
 MCS = MONO_PATH="$(topdir)/class/lib/$(BOOTSTRAP_PROFILE)$(PLATFORM_PATH_SEPARATOR)$$MONO_PATH" $(INTERNAL_GMCS)
@@ -14,3 +14,5 @@ DEFAULT_REFERENCES = -r:mscorlib.dll
 PROFILE_MCS_FLAGS = -d:NET_1_1 -d:NET_2_0 -d:NET_3_0 -d:NET_3_5 -d:NET_4_0 -nowarn:1699 -nostdlib -lib:$(topdir)/class/lib/$(PROFILE) $(DEFAULT_REFERENCES)
 
 FRAMEWORK_VERSION = 4.0
+
+LIBRARY_INSTALL_DIR = $(mono_libdir)/mono/$(FRAMEWORK_VERSION)
diff --git a/mcs/build/profiles/net_4_5.make b/mcs/build/profiles/net_4_5.make
new file mode 100644
index 0000000..c153792
--- /dev/null
+++ b/mcs/build/profiles/net_4_5.make
@@ -0,0 +1,16 @@
+# -*- makefile -*-
+
+BOOTSTRAP_PROFILE = build
+
+BOOTSTRAP_MCS = MONO_PATH="$(topdir)/class/lib/$(BOOTSTRAP_PROFILE)$(PLATFORM_PATH_SEPARATOR)$$MONO_PATH" $(INTERNAL_GMCS)
+MCS = MONO_PATH="$(topdir)/class/lib/$(BOOTSTRAP_PROFILE)$(PLATFORM_PATH_SEPARATOR)$$MONO_PATH" $(INTERNAL_GMCS)
+
+# nuttzing!
+
+profile-check:
+	@:
+
+DEFAULT_REFERENCES = -r:mscorlib.dll
+PROFILE_MCS_FLAGS = -d:NET_1_1 -d:NET_2_0 -d:NET_3_0 -d:NET_3_5 -d:NET_4_0 -d:NET_4_5 -nowarn:1699 -nostdlib -lib:$(topdir)/class/lib/$(PROFILE) $(DEFAULT_REFERENCES) $(PLATFORM_DEBUG_FLAGS)
+
+FRAMEWORK_VERSION = 4.5
diff --git a/mcs/build/rules.make b/mcs/build/rules.make
index 5d2d6ee..ed75e91 100644
--- a/mcs/build/rules.make
+++ b/mcs/build/rules.make
@@ -24,6 +24,10 @@ Q=$(if $(V),,@)
 # echo -e "\\t" does not work on some systems, so use 5 spaces
 Q_MCS=$(if $(V),, at echo "MCS     [$(PROFILE)] $(notdir $(@))";)
 
+ifndef BUILD_TOOLS_PROFILE
+BUILD_TOOLS_PROFILE = build
+endif
+
 USE_MCS_FLAGS = /codepage:$(CODEPAGE) $(LOCAL_MCS_FLAGS) $(PLATFORM_MCS_FLAGS) $(PROFILE_MCS_FLAGS) $(MCS_FLAGS)
 USE_MBAS_FLAGS = /codepage:$(CODEPAGE) $(LOCAL_MBAS_FLAGS) $(PLATFORM_MBAS_FLAGS) $(PROFILE_MBAS_FLAGS) $(MBAS_FLAGS)
 USE_CFLAGS = $(LOCAL_CFLAGS) $(CFLAGS)
@@ -37,15 +41,12 @@ INSTALL_BIN = $(INSTALL) -c -m 755
 INSTALL_LIB = $(INSTALL_BIN)
 MKINSTALLDIRS = $(SHELL) $(topdir)/mkinstalldirs
 INTERNAL_MBAS = $(RUNTIME) $(RUNTIME_FLAGS) $(topdir)/mbas/mbas.exe
-INTERNAL_GMCS = $(RUNTIME) $(RUNTIME_FLAGS) $(topdir)/class/lib/basic/mcs.exe
+INTERNAL_GMCS = $(RUNTIME) $(RUNTIME_FLAGS) $(topdir)/class/lib/$(BUILD_TOOLS_PROFILE)/mcs.exe
 INTERNAL_ILASM = $(RUNTIME) $(RUNTIME_FLAGS) $(topdir)/class/lib/$(PROFILE)/ilasm.exe
 corlib = mscorlib.dll
 
-ifndef BUILD_TOOLS_PROFILE
-BUILD_TOOLS_PROFILE = basic
-endif
-
-INTERNAL_RESGEN = $(RUNTIME) $(RUNTIME_FLAGS) $(topdir)/class/lib/$(BUILD_TOOLS_PROFILE)/resgen.exe
+INTERNAL_RESGEN = $(RUNTIME) $(RUNTIME_FLAGS) $(topdir)/class/lib/$(PROFILE)/resgen.exe
+RESGEN = MONO_PATH="$(topdir)/class/lib/$(PROFILE)$(PLATFORM_PATH_SEPARATOR)$$MONO_PATH" $(INTERNAL_RESGEN)
 
 depsdir = $(topdir)/build/deps
 
@@ -102,7 +103,7 @@ endif
 # Rest of the configuration
 
 ifndef PROFILE
-PROFILE = net_2_0
+PROFILE = $(DEFAULT_PROFILE)
 endif
 
 include $(topdir)/build/profiles/$(PROFILE).make
@@ -117,8 +118,8 @@ endif
 ifdef NO_INSTALL
 GACUTIL = :
 else
-gacutil = $(topdir)/class/lib/basic/gacutil.exe
-GACUTIL = MONO_PATH="$(topdir)/class/lib/basic$(PLATFORM_PATH_SEPARATOR)$$MONO_PATH" $(RUNTIME) $(RUNTIME_FLAGS) $(gacutil)
+gacutil = $(topdir)/class/lib/$(BUILD_TOOLS_PROFILE)/gacutil.exe
+GACUTIL = MONO_PATH="$(topdir)/class/lib/$(BUILD_TOOLS_PROFILE)$(PLATFORM_PATH_SEPARATOR)$$MONO_PATH" $(RUNTIME) $(RUNTIME_FLAGS) $(gacutil)
 endif
 
 STD_TARGETS = test run-test run-test-ondotnet clean install uninstall doc-update
@@ -199,6 +200,6 @@ dist-default:
 ## Documentation stuff
 
 Q_MDOC =$(if $(V),, at echo "MDOC    [$(PROFILE)] $(notdir $(@))";)
-MDOC   =$(Q_MDOC) MONO_PATH="$(topdir)/class/lib/net_4_0$(PLATFORM_PATH_SEPARATOR)$(topdir)/class/lib/net_2_0$(PLATFORM_PATH_SEPARATOR)$$MONO_PATH" \
-	$(RUNTIME) $(topdir)/tools/mdoc/mdoc.exe
+# net_2_0 is needed because monodoc is only compiled in that profile
+MDOC   =$(Q_MDOC) MONO_PATH="$(topdir)/class/lib/$(DEFAULT_PROFILE)$(PLATFORM_PATH_SEPARATOR)$(topdir)/class/lib/net_2_0$(PLATFORM_PATH_SEPARATOR)$$MONO_PATH" $(RUNTIME) $(topdir)/class/lib/$(DEFAULT_PROFILE)/mdoc.exe
 
diff --git a/mcs/build/tests.make b/mcs/build/tests.make
index 9476cc5..2b27381 100644
--- a/mcs/build/tests.make
+++ b/mcs/build/tests.make
@@ -84,7 +84,7 @@ endif
 ## FIXME: i18n problem in the 'sed' command below
 run-test-lib: test-local
 	ok=:; \
-	PATH="$(TEST_RUNTIME_WRAPPERS_PATH):$(PATH)" MONO_REGISTRY_PATH="$(HOME)/.mono/registry" $(TEST_RUNTIME) $(RUNTIME_FLAGS) $(TEST_HARNESS) $(test_assemblies) -noshadow $(TEST_HARNESS_FLAGS) $(LOCAL_TEST_HARNESS_FLAGS) $(TEST_HARNESS_EXCLUDES) $(TEST_HARNESS_OUTPUT) -xml=TestResult-$(PROFILE).xml $(FIXTURE_ARG) $(TESTNAME_ARG)|| ok=false; \
+	PATH="$(TEST_RUNTIME_WRAPPERS_PATH):$(PATH)" MONO_REGISTRY_PATH="$(HOME)/.mono/registry" MONO_TESTS_IN_PROGRESS="yes" $(TEST_RUNTIME) $(RUNTIME_FLAGS) $(TEST_HARNESS) $(test_assemblies) -noshadow $(TEST_HARNESS_FLAGS) $(LOCAL_TEST_HARNESS_FLAGS) $(TEST_HARNESS_EXCLUDES) $(TEST_HARNESS_OUTPUT) -xml=TestResult-$(PROFILE).xml $(FIXTURE_ARG) $(TESTNAME_ARG)|| ok=false; \
 	$(TEST_HARNESS_POSTPROC) ; $$ok
 
 ## Instructs compiler to compile to target .net execution, it can be usefull in rare cases when runtime detection is not possible
diff --git a/mcs/class/ChangeLog b/mcs/class/ChangeLog
index 4cf4eb3..f5bbf44 100644
--- a/mcs/class/ChangeLog
+++ b/mcs/class/ChangeLog
@@ -1,439 +1,3 @@
-2011-10-17  Rolf Bjarne Kvinge  <rolf at xamarin.com>
-
-	Add System.Numerics to the mobile profile.
-
-2011-01-13  Marek Safar  <marek.safar at gmail.com>
-
-	Fix System.Data.Services.Client public key
-
-2011-09-23  Rolf Bjarne Kvinge  <rolf at xamarin.com>
-
-	[Microsoft.Build] Stub out a lot of classes to make NuGet build
-	with mono.
-
-2011-09-21  Rolf Bjarne Kvinge  <rolf at xamarin.com>
-
-	[Microsoft.Build] Stub out a few types to make nuget run.
-
-2011-06-25  Leszek 'skolima' Ciesielski  <skolima at gmail.com>
-
-	[MSBuild] Fixed issues found by Paul Selormey.
-
-	Unset attributes should return String.Empty, null is only for
-	invalid.
-
-2011-06-21  Leszek 'skolima' Ciesielski  <skolima at gmail.com>
-
-	[MSBuild] LinkedList used for storing children
-
-	ProjectElementContainer should now handle modifications faster.
-
-2011-06-04  Leszek 'skolima' Ciesielski  <skolima at gmail.com>
-
-	[MSBuild] Preserve comments in build files
-
-	Contribution by Paul Selormey
-
-2011-06-04  Leszek 'skolima' Ciesielski  <skolima at gmail.com>
-
-	[MSBuild] Finishing Microsoft.Build.Construction
-
-	No more NotImplementedException.
-
-2011-04-29  Leszek 'skolima' Ciesielski  <skolima at gmail.com>
-
-	[MSBuild] Microsoft.Build.Construction loading project files
-
-2011-04-28  Leszek 'skolima' Ciesielski  <skolima at gmail.com>
-
-	fixing the build
-
-2011-02-13  Leszek 'skolima' Ciesielski  <skolima at gmail.com>
-
-	[MSBuild] Add Microsoft.Build for 4.0 profile
-
-	Namespace Microsoft.Build.Construction partiallly implemented,
-	enought to construct and save a valid project file. Some tests
-	present (work on .Net).
-
-2011-04-01  Marek Habersack  <grendel at twistedcode.net>
-
-	[mvc3] Part of fix for bug #683339. Override more
-	NameValueCollection methods.
-
-	Without those overrides, merging collections in
-	System.Web.HttpParamsCollection fails.
-
-2011-02-17  Jérémie Laval  <jeremie.laval at gmail.com>
-
-	Kill old IScheduler interface.
-
-	We still use the ParticipateUntil facility of IScheduler
-	internally and provide a default implementation for pure
-	TaskScheduler
-
-2011-02-17  Marek Habersack  <grendel at twistedcode.net>
-
-	[asp.net,mvc3] Fix for bug #668655. Implemented a few more
-	NameValueCollection method overloads.
-
-2011-02-15  Marek Safar  <marek.safar at gmail.com>
-
-	[671878] Fixes IKVM ordering of catch clauses
-
-2011-02-01  Atsushi Eno  <atsushi at ximian.com>
-
-	quick build workaround.
-
-2011-02-01  Atsushi Eno  <atsushi at ximian.com>
-
-	in NET_4_0, remove types that went into System.Xaml.dll. Change
-	build order.
-
-2011-01-27  Jérémie Laval  <jeremie.laval at gmail.com>
-
-	Leave db connection opened until requested to close it and add
-	more unit tests
-
-2011-01-25  Miguel de Icaza  <miguel at gnome.org>
-
-	Restoring some of the formal beauty of this text document as we
-	carefully restore the missing tabs that helped carefully align the
-	continuation characters in a list of assemblies.
-
-	As we align these newline separators, suddenly, a new form emerges
-	from the chaos, something that gives us the illusion that this
-	stream of bytes is indeed almost like a dawn of a new day as we
-	breathe the air in a valley overlooking a beautiful mountain at
-	the beginning of the spring.
-
-2011-01-25  Marek Habersack  <grendel at twistedcode.net>
-
-	[wcf] Install the System.Data.Services.Client properly.
-
-2011-01-22  Jérémie Laval  <jeremie.laval at gmail.com>
-
-	Add unit test for Database
-
-2011-01-22  Jérémie Laval  <jeremie.laval at gmail.com>
-
-	Add unit tests for DynamicRecord
-
-2011-01-22  Jérémie Laval  <jeremie.laval at gmail.com>
-
-	Just fixup comment
-
-2011-01-21  Jérémie Laval  <jeremie.laval at gmail.com>
-
-	Add GetLastInsertId
-
-2011-01-21  Jérémie Laval  <jeremie.laval at gmail.com>
-
-	Foobar trigger connection
-
-2011-01-21  Jérémie Laval  <jeremie.laval at gmail.com>
-
-	Add Close method
-
-2011-01-21  Jérémie Laval  <jeremie.laval at gmail.com>
-
-	Add ConnectionOpened event to Database
-
-2011-01-21  Jérémie Laval  <jeremie.laval at gmail.com>
-
-	Fix up compilation of Database and DynamicRecord
-
-2011-01-21  Jérémie Laval  <jeremie.laval at gmail.com>
-
-	Add Dispose calls to Database
-
-2011-01-21  Jérémie Laval  <jeremie.laval at gmail.com>
-
-	Add Database type
-
-2011-01-21  Jérémie Laval  <jeremie.laval at gmail.com>
-
-	Complete base DynamicRecord API
-
-2011-01-21  Jérémie Laval  <jeremie.laval at gmail.com>
-
-	Stub DynamicRecord
-
-2011-01-21  Jérémie Laval  <jeremie.laval at gmail.com>
-
-	Add WebMatrix.Data assembly skeleton
-
-2011-01-20  Andrew Jorgensen  <ajorgensen at novell.com>
-
-	remove conflict marker
-
-2011-01-19  Marek Habersack  <grendel at twistedcode.net>
-
-	[asp.net,mvc] Make unobtrustive request validation in MVC v3
-	possible
-
-	Validation is enabled early in the pipeline during request.
-	ValidationUtility makes sure that validation is indeed enabled and
-	replaces the default form and query string collections with a lazy
-	version which will validate values only when an existing key is
-	found and requested.
-
-2011-01-17  Marek Habersack  <grendel at twistedcode.net>
-
-	[asp.net] ValidationUtility implementation
-
-2011-01-17  Marek Habersack  <grendel at twistedcode.net>
-
-	[asp.net] Implemented dynamic HTTP module registration
-
-2011-01-13  Marek Habersack  <grendel at twistedcode.net>
-
-	[asp.net] Added the Microsoft.Web.Infrastructure assembly
-
-2011-01-17  Marek Safar  <marek.safar at gmail.com>
-
-	Update IKVM.Reflection
-
-2011-01-11  Jb Evain  <jbevain at gmail.com>
-
-	Update cecil from upstream
-
-2011-01-11  Zoltan Varga  <vargaz at gmail.com>
-
-	Dump the AOT log upon a failure.
-
-2011-01-10  Marek Safar  <marek.safar at gmail.com>
-
-	Fix IKVM float encoding on big-endian
-
-2010-12-21  Jb Evain  <jbevain at gmail.com>
-
-	Fix cecil update script
-
-2010-12-21  Jb Evain  <jbevain at gmail.com>
-
-	update cecil from upstream
-
-2010-12-20  Marek Safar  <marek.safar at gmail.com>
-
-	Import ikvm fixes
-
-2010-12-18  Marek Safar  <marek.safar at gmail.com>
-
-	Add aot-compiler to dist list
-
-2010-12-16  Marek Safar  <marek.safar at gmail.com>
-
-	Don't build aot symbols on make dist
-
-2010-12-16  Marek Safar  <marek.safar at gmail.com>
-
-	Monolite mcs compiler
-
-2010-12-16  Marek Safar  <marek.safar at gmail.com>
-
-	Add dist only Makefile
-
-2010-12-16  Marek Safar  <marek.safar at gmail.com>
-
-	Switch to single mcs compiler for all managed code build
-
-2010-12-16  Marek Safar  <marek.safar at gmail.com>
-
-	dist IKVM.Reflection
-
-2010-12-16  Marek Safar  <marek.safar at gmail.com>
-
-	Add IKVM.Reflection
-
-2010-12-01  Jb Evain  <jbevain at gmail.com>
-
-	Update Mono.Cecil
-
-2010-12-01  Jb Evain  <jbevain at gmail.com>
-
-	Add script to update Cecil from upstream
-
-2010-11-24  Jb Evain  <jbevain at gmail.com>
-
-	Add overloads to IAssemblyResolver.Resolve which take a
-	ReaderParameters for better control
-
-2010-11-23  Jb Evain  <jbevain at gmail.com>
-
-	Remove dead code
-
-2010-11-23  Jb Evain  <jbevain at gmail.com>
-
-	Fix corlib type lookup
-
-2010-11-21  Jb Evain  <jbevain at gmail.com>
-
-	update cecil to upstream
-
-2010-11-21  Zoltan Varga  <vargaz at gmail.com>
-
-	Remove the AOT log files on 'clean'.
-
-2010-11-05  Jb Evain  <jbevain at gmail.com>
-
-	Update Mono.Cecil from upstream
-
-2010-11-05  Marek Safar  <marek.safar at gmail.com>
-
-	Don't build obsolete Compat.ICSharpCode.SharpZipLib in 4.0 profile
-	to avoid another version conflict
-
-2010-11-03  Zoltan Varga  <vargaz at gmail.com>
-
-	Remove extra whitespace from a Makefile.
-
-2010-10-22  Jb Evain  <jbevain at gmail.com>
-
-	delete unused file
-
-2010-10-21  Atsushi Eno  <atsushi at ximian.com>
-
-	Add some WCF types in moonlight_raw System.Xml.Serialization.dll.
-
-2010-10-20  Jb Evain  <jbevain at gmail.com>
-
-	Pass the appropriate defines for the net_4_0 profile
-
-2010-10-06  Jb Evain  <jbevain at gmail.com>
-
-	Port Mono.CodeContract to cecil-light
-
-2010-09-27  Jb Evain  <jbevain at gmail.com>
-
-	Fix the net_4_0 build
-
-2010-09-26  Jonathan Pobst  <monkey at jpobst.com>
-
-	Commit some stuff I had implemented in my SVN tree.
-
-2010-09-23  Marek Habersack  <grendel at twistedcode.net>
-
-	[WCF] System.Data.Services.Client must be signed with the ECMA
-	public key
-
-2010-09-23  Marek Habersack  <grendel at twistedcode.net>
-
-	[WCF] Changes to System.Data.Services.Client to compile it for 4.0
-
-	It appears Microsoft didn't make any changes to the assembly in
-	.NET 4.0 - they simply changed its version number to 4.0.0.0 and
-	added few assembly attributes.
-
-2010-09-15  Marek Safar  <marek.safar at gmail.com>
-
-	There are actually some 3.5 only dlls, thanks to ankit for poiting
-	out.
-
-2010-09-15  Marek Safar  <marek.safar at gmail.com>
-
-	Remove net_3_5 dirs to fix 4.0 dependency and not to build some
-	dlls twice
-
-2010-09-09  Jb Evain  <jbevain at gmail.com>
-
-	add ignore file
-
-2010-09-08  Jb Evain  <jbevain at gmail.com>
-
-	Factorize the monotouch build into a mobile build for monodroid
-	and monotouch
-
-2010-08-31  Andrew Jorgensen  <ajorgensen at novell.com>
-
-	aot-compiler was not getting included in dist
-
-	dist-local: dist-default fixes dist of this dir
-
-2010-08-31  Zoltan Varga  <vargaz at gmail.com>
-
-	Really disable AOT on platforms which doesn't support it.
-
-2010-08-31  Zoltan Varga  <vargaz at gmail.com>
-
-	AOT mscorlib along with gmcs.
-
-2010-08-31  Zoltan Varga  <vargaz at gmail.com>
-
-	Fix make dist.
-
-2010-08-27  Zoltan Varga  <vargaz at gmail.com>
-
-	Install the generated gmcs.exe.so.
-
-2010-08-27  Zoltan Varga  <vargaz at gmail.com>
-
-	Delete gmcs.exe.so on make clean.
-
-2010-08-27  Zoltan Varga  <vargaz at gmail.com>
-
-	Use $(PROFILE)/gmcs.exe as INTERNAL_GMCS for consistency.
-
-2010-08-27  Zoltan Varga  <vargaz at gmail.com>
-
-	Add a new directory which is used for AOTing the c# compiler
-	before compiling most of the class libs. This cuts the mcs build
-	time by about 30%.
-
-2010-08-17  Miguel de Icaza  <miguel at gnome.org>
-
-	Copyright: the actual owner is Chris Bacon, not Novell, fix this
-
-2010-08-13  Marek Safar  <marek.safar at gmail.com>
-
-	Merge CodeContracts
-
-2010-08-13  jbevain  <jbevain at gmail.com>
-
-	[Fix] emit the proper metadata version for net_4_0 assemblies
-
-2010-08-13  Chris Bacon  <chrisbacon76 at gmail.com>
-
-	Removed code that is no longer required due to change to Cecil
-	0.6.*
-
-2010-08-12  Chris Bacon  <chrisbacon76 at gmail.com>
-
-	Moved back to Cecil version 0.6.* PDB files are not supported any
-	more. Symbol writing is not supported.
-
-2010-08-12  Chris Bacon  <chrisbacon76 at gmail.com>
-
-	Tidy up
-
-2010-08-12  Chris Bacon  <chrisbacon76 at gmail.com>
-
-	Minor updates
-
-2010-08-12  Chris Bacon  <chrisbacon76 at gmail.com>
-
-	Minor changes
-
-2010-08-12  Chris Bacon  <chrisbacon76 at gmail.com>
-
-	Improvements as suggested by Marek
-
-2010-08-11  Chris  <chris at ubuntuPC.(none)>
-
-	Added ccrewrite library, tool and tests.
-
-2010-08-10  Marek Safar  <marek.safar at gmail.com>
-
-	Add Mono code contracts skeletons.
-
-2010-08-04  atsushieno  <atsushi at ximian.com>
-
-	Add System.ServiceModel.Discovery (now that it builds fine).
-
-2010-08-01  Marek Safar  <marek.safar at gmail.com>
-
-	Update SymbolWriter to use generics collections
-
 2010-06-30  Atsushi Enomoto  <atsushi at ximian.com>
 
 	* Makefile: move back Mvc2.
diff --git a/mcs/class/ChangeLog.old b/mcs/class/ChangeLog.old
deleted file mode 100644
index f5bbf44..0000000
--- a/mcs/class/ChangeLog.old
+++ /dev/null
@@ -1,824 +0,0 @@
-2010-06-30  Atsushi Enomoto  <atsushi at ximian.com>
-
-	* Makefile: move back Mvc2.
-
-2010-06-30  Atsushi Enomoto  <atsushi at ximian.com>
-
-	* Makefile: add S.R.DurableInstancing dir to 4.0.
-
-2010-04-28  Marek Habersack  <mhabersack at novell.com>
-
-	* Makefile (common_dirs): added System.Web.ApplicationServices
-
-2010-04-14  Ankit Jain  <jankit at novell.com>
-
-	* Makefile: Add Moonlight.Build.Tasks to net_2_0_dirs and
-	net_3_5_dirs.
-	* Moonlight.Build.Tasks: New.
-
-2010-04-08  Atsushi Enomoto  <atsushi at ximian.com>
-
-	* Makefile : add 4.0 System.Xaml.
-
-2010-03-16  Rolf Bjarne Kvinge  <RKvinge at novell.com>
-
-	* Makefile: Add System.Xml.Serialization to the Moonlight build.
-
-2010-03-16  Jb Evain  <jbevain at novell.com>
-
-	* Makefile: rename the net_2_1 profile to moonlight.
-
-2010-03-15  Marek Habersack  <mhabersack at novell.com>
-
-	* Makefile (net_2_0_dirs): added System.Web.Mvc2
-
-2010-03-11  Atsushi Enomoto  <atsushi at ximian.com>
-
-	* Makefile : build Sys.Json after Sys.SM.Web.
-
-2010-03-10  Sebastien Pouliot  <sebastien at ximian.com>
-
-	* Makefile: For NET_2_1 build System.XML before System.Net
-
-2010-01-06  Atsushi Enomoto  <atsushi at ximian.com>
-
-	* Makefile : added System.ServiceModel.Routing (4.0).
-
-2009-12-15  Marek Safar  <marek.safar at gmail.com>
-
-	* Makefile: Add System.Core to 2.1 bootstrap.
-
-2009-12-07  Marek Safar  <marek.safar at gmail.com>
-
-	* Makefile: Add System.Core to basic.
-
-2009-11-26  Marek Safar  <marek.safar at gmail.com>
-
-	* Makefile: Add Mono.CSharp.
-
-2009-11-09  Marek Safar  <marek.safar at gmail.com>
-
-	* Makefile: dist dlr subdirs.
-
-2009-11-07  Zoltan Varga  <vargaz at gmail.com>
-
-	* Makefile (net_2_0_dirs): Add System.Data.Services.
-
-2009-11-02  Zoltan Varga  <vargaz at gmail.com>
-
-	* Makefile: Add Mono.Debugger.Soft.
-
-2009-10-30  Marek Safar  <marek.safar at gmail.com>
-
-	* Makefile: Add System.Windows.Forms.DataVisualization
-
-2009-10-14  Jonathan Pryor  <jpryor at novell.com>
-
-	* Makefile: Add Mono.Data.Tds, System.Transactions, System.Data, and
-	  Mono.Data.Sqlite to the MonoTouch build.
-
-2009-10-08  Jb Evain  <jbevain at novell.com>
-
-	* Makefile: build the i18n assemblies on MonoTouch.
-
-2009-10-01  Marek Safar  <marek.safar at gmail.com>
-
-	* Makefile: Updated a copy of monolite.
-
-2009-09-24  Marek Safar  <marek.safar at gmail.com>
-
-	* Makefile: Removed System.Json from net_4_0 profile.
-
-2009-09-17  Atsushi Enomoto  <atsushi at ximian.com>
-
-	* Makefile: move core WCF assemblies before Sys.Web.Extensions,
-	  which will depend on them.
-
-2009-09-11  Marek Safar  <marek.safar at gmail.com>
-
-	* Makefile: Add System.Core to net_4_0_boostrap.
-
-2009-09-02  Jb Evain  <jbevain at novell.com>
-
-	* Makefile: include System.Json in monotouch.
-
-2009-08-13  Atsushi Enomoto  <atsushi at ximian.com>
-
-	* Makefile: add System.Json to net_4_0 profile.
-
-2009-07-20  Jb Evain  <jbevain at novell.com>
-
-	* Makefile: set monotouch_SUBDIRS to the net_2_1 assemblies set.
-
-
-2009-07-18  Michael Barker  <mike at middlesoft.co.uk>
-
-	* Makefile:  Mono.Messaging.RabbitMQ back into all assemblies.
-
-2009-07-17  Zoltan Varga  <vargaz at gmail.com>
-
-	* Makefile: Applied patch from Marcus Griep <marcus at griep.us>.
-	Move Mono.C5 to net_2_0_dirs.
-
-2009-07-06  Raja R Harinath  <harinath at hurrynot.org>
-
-	* Makefile (common_dirs): Add SystemWebTestShim.
-
-2009-07-06  Raja R Harinath  <harinath at hurrynot.org>
-
-	* Makefile (net_1_1_dirs): Move Mono.Cecil ...
-	(common_dirs): ... here.
-
-2009-07-02  Marek Safar  <marek.safar at gmail.com>
-
-	* Makefile: Add System.Dynamic.
-
-2009-06-29  Marek Safar  <marek.safar at gmail.com>
-
-	* Makefile: Add Microsoft.CSharp.
-
-2009-04-07  Miguel de Icaza  <miguel at novell.com>
-
-	* Mono.Tasklets/Mono.Tasklets/Continuation.cs: Fix the signature
-	for store.
-
-2009-04-25  Jonathan Chambers  <joncham at gmail.com>
-	* Makefile: Add Microsoft.Build.* to 3.5 profile.
-
-Mon Apr 6 14:37:32 CEST 2009 Paolo Molaro <lupus at ximian.com>
-
-	* Makefile, Mono.Tasklets: managed part of continuation support.
-
-2009-03-27  Raja R Harinath  <harinath at hurrynot.org>
-
-	* Makefile (net_2_0_dirs): Build System.Runtime.Serialization
-	before System.Data.Linq.
-
-2009-01-22  Marek Habersack  <mhabersack at novell.com>
-
-	* Makefile (net_2_0_dirs): added System.Web - it now depends on
-	System.Core, so it needs to be recompiled one more time after
-	System.Core is done.
-
-2008-12-08  Atsushi Enomoto  <atsushi at ximian.com>
-
-	* Makefile : revert previous one and retry before I revert everything.
-
-2008-12-08  Atsushi Enomoto  <atsushi at ximian.com>
-
-	* Makefile : actually RabbitMQ.Client is under wrong build practice :(
-
-2008-12-08  Atsushi Enomoto  <atsushi at ximian.com>
-
-	* Makefile : add new sys.messaging implementation.
-
-2008-11-20  Jb Evain  <jbevain at novell.com>
-
-	* Makefile: add System.Xml.Linq to the net_2_1 build.
-
-2008-11-05  Marek Habersack  <mhabersack at novell.com>
-
-	* Makefile (net_2_0_dirs): Npgsql requires .NET 2.0+ now.
-
-2008-10-21  Atsushi Enomoto  <atsushi at ximian.com>
-
-	* Malefile: ... and Sys.ComponentModel.DataAnnotations.dll.
-
-2008-10-21  Atsushi Enomoto  <atsushi at ximian.com>
-
-	* Malefile: added Sys.Web.DynamicData to the build.
-
-2008-10-17  Jonathan Pryor  <jpryor at novell.com>
-
-	* I18N/Makefile: Add doc-update target support.
-
-2008-10-13  Jonathan Pryor  <jpryor at novell.com>
-
-	* Makefile (net_2_0_dirs): Add Mono.Options.
-
-2008-10-09  Atsushi Enomoto  <atsushi at ximian.com>
-
-	* Makefile: add System.Web.Abstractions and System.Web.Routing.
-
-2008-10-07  Atsushi Enomoto  <atsushi at ximian.com>
-
-	* Makefile : changed some net_2_0_dirs orders; Sys.Web.Extensions
-	  will depend on Sys.Data.Linq (LinqDataSource).
-
-2008-10-07  Zoltan Varga  <vargaz at gmail.com>
-
-	* Makefile (net_2_0_dirs): Add Mono.Simd.
-
-2008-09-30  Marek Habersack  <mhabersack at novell.com>
-
-	* Makefile (net_2_0_dirs): added System.Web.Extensions_1.0 and
-	System.Web.Extensions.Design_1.0
-	(net_3_5_dirs): removed System.Web.Extensions, the 3.5 version is
-	now built in the 2.0 profile.
-
-2008-09-24  Zoltan Varga  <vargaz at gmail.com>
-
-	* Makefile (net_2_0_dirs): Add Mono.Management.
-
-2008-09-23  Marek Safar  <marek.safar at gmail.com>
-
-	* Makefile: Build Mono.CompilerServices.SymbolWriter before it's
-	used.
-
-2008-09-23  Jb Evain  <jbevain at novell.com>
-
-	* Makefile: compile the SymbolWriter during net_2_1_raw.
-
-2008-09-12  Jb Evain  <jbevain at novell.com>
-
-	* Makefile: add System.ServiceModel.Web to the net_2_1_raw build.
-
-2008-09-12  Jb Evain  <jbevain at novell.com>
-
-	* Makefile: add System.ServiceModel to the net_2_1_raw build.
-
-2008-09-09  Jb Evain  <jbevain at novell.com>
-
-	* Makefile: build System.Runtime.Serialization
-	during the net_2_1_raw profile.
-
-2008-08-21  Jb Evain  <jbevain at novell.com>
-
-	* Makefile: add wcf and cardspace to the build.
-
-2008-07-31  Jb Evain  <jbevain at novell.com>
-
-	* Makefile: update net_2_1_bootstrap_SUBDIRS to only build
-	corlib and System.
-2008-05-22  Andreia Gaita <avidigal at novell.com> 
-
-	* Makefile, Mono.Mozilla, Mono.WebBrowser: Long overdue rename of
-	  Mono.Mozilla to Mono.WebBrowser. step 1 - directory moving
-
-2008-05-14  Atsushi Enomoto  <atsushi at ximian.com>
-
-	* Makefile : moved System.Data.DataSetExtensions.dll from net_3_5
-	  island to centum net_2_0 subdirs.
-
-2008-05-10  Sebastien Pouliot  <sebastien at ximian.com>
-
-	* Makefile: Include silverlight.pub in dist so monobuild goes on...
-
-2008-04-14  Raja R Harinath  <harinath at hurrynot.org>
-
-	* Makefile (DIST_ONLY_SUBDIRS): Remove.
-	(MONO_WEB, MONO_POSIX, MONO_SYMWRITER): Remove.  Inline	definitions.
-
-2008-04-13  Jb Evain  <jbevain at novell.com>
-
-	* Makefile: update the 2.1 assemblies.
-	Merged from the Moonlight 2 branch.
-
-2008-03-04  Marek Safar  <marek.safar at gmail.com>
-
-	* Makefile: Added System.Data.Linq
-	
-2008-03-03  Marek Habersack  <mhabersack at novell.com>
-
-	* Makefile: Move Mono.Web back to the common section.
-
-2008-03-03  Marek Safar  <marek.safar at gmail.com>
-
-	* Makefile: Moved Mono.Web to 2.0 section.
-
-2008-02-17  Raja R Harinath  <harinath at hurrynot.org>
-
-	* Makefile (net_3_5_dirs): Remove System.Xml.Linq, now that it's
-	built in the 2.0 profile.
-
-2008-02-11  Andrew Jorgensen  <ajorgensen at novell.com>
-
-	* Makefile: build System.Xml.Linq in the 2.0 profile
-
-2007-12-19  Jb Evain  <jbevain at novell.com>
-
-	* Makefile: include MicrosoftAjaxLibrary/License.htm
-	in the dist.
-
-2007-12-17  Jb Evain  <jbevain at novell.com>
-
-	* Makefile: build Mono.Cecil only in the default profile.
-
-2007-12-08  Marek Habersack  <mhabersack at novell.com>
-
-	* Makefile (common_dirs): Mono.Data.Sqlite must be built before
-	System.Web.
-
-2007-12-03  Marek Safar  <marek.safar at gmail.com>
-
-	* Makefile: Build 3.5 assemblies under NET_3_5 profile.
-	
-2007-11-29  Atsushi Enomoto  <atsushi at ximian.com>
-
-	* Makefile: added System.Xml.Linq.
-
-2007-11-13  Atsushi Enomoto  <atsushi at ximian.com>
-
-	* Makefile: In 2.0 System.EnterpriseServices.dll depends on
-	  System.Transactions.dll.
-
-2007-10-09  Atsushi Enomoto  <atsushi at ximian.com>
-
-	* Makefile: In 2.0 System.Design.dll has cyclic dep on
-	  System.Drawing.Design.dll.
-
-2007-09-11  Marek Habersack  <mhabersack at novell.com>
-
-	* Makefile (net_2_0_dirs): added the System.Web.Extensions.Design
-	directory.
-
-2007-08-27  Jb Evain  <jbevain at novell.com>
-
-	* Makefile: integrate Mono.Cecil.Mdb in the build.
-
-2007-08-11  Andreia Gaita  <avidigal at novell.com>
-
-	* Makefile: Ooops, Mono.Mozilla is being built out of
-	order, fixed :p
-
-2007-08-11  Andreia Gaita  <avidigal at novell.com>
-
-	* Makefile: integrate Mono.Mozilla wrapper in the build.
-
-2007-07-17  Jb Evain  <jbevain at novell.com>
-
-	* Makefile: integrate Cecil in the build.
-
-2007-07-11  Jb Evain  <jbevain at novell.com>
-
-	* Makefile: work on the 2.1 profile.
-
-2007-05-11  Raja R Harinath  <rharinath at novell.com>
-
-	* Makefile (DIST_PROFILE_DIRS, COMPAT_PROFILE_DIRS): Remove.
-	(dist-local): No need for additional actions.
-
-2007-02-22  Marek Habersack  <grendello at gmail.com>
-
-	* Makefile: Added Mono.Data.Sqlite to build.
-
-2007-02-05  Marek Safar  <marek.safar at gmail.com>
-
-	* Makefile: Add System.Core to build.
-
-2007-01-19  Atsushi Enomoto  <atsushi at ximian.com>
-
-	* Makefile: there are configuration dependency things in sys.xml too.
-
-2006-10-18  Marek Habersack  <grendello at gmail.com>
-
-	* Makefile: Change the order of assembly compilation to make it
-	possible to compile the global/local resources compiler.
-
-2006-09-04  Zoltan Varga  <vargaz at gmail.com>
-
-	* Makefile (BROKEN_SUBDIRS): Fix make dist.
-
-2006-09-02  Jordi Mas <jordimash at gmail.com>
-
-	* msfinal3.pub: Microsoft public key to be used for strongnaming
-	WinFX assemblies.
-
-2006-07-14  Raja R Harinath  <rharinath at novell.com>
-
-	* Makefile (net_2_0_dirs): Move System.Transactions ...
-	(common_dirs): ... here, before System.Data, which depends on it
-	in the net_2_0 profile.
-
-2006-01-18  Chris Toshok  <toshok at ximian.com>
-
-	* Makefile (common_dirs): add System.Web again after
-	System.Web.Services.
-
-2006-01-05  Raja R Harinath  <rharinath at novell.com>
-
-	* Makefile: Build FirebirdSql.Data.Firebird only in the "default"
-	profile.
-
-2006-01-03  Chris Toshok  <toshok at ximian.com>
-
-	* Makefile (default_SUBDIRS): more futzing with ordering, thanks
-	to the complicated circular deps.  Build System.Configuration
-	after System.Security, and build System yet another time after
-	System.Configuration has been built.
-
-2005-12-22  Raja R Harinath  <rharinath at novell.com>
-
-	* Makefile (default_SUBDIRS): Add Compat.ICSharpCode.SharpZipLib.
-	(COMPAT_PROFILE_DIRS): New.
-	(dist-local): Use it.
-	* compat/default, compat/net_2_0: New directories for holding
-	backwards-compatibility libraries.  These will not be used inside
-	the tree, but will be installed into the GAC.
-
-2005-12-12  Atsushi Enomoto  <atsushi at ximian.com>
-
-	* Makefile : seems like net_2_0_ONLY_SUBDIRS must precede.
-
-2005-12-12  Raja R Harinath  <rharinath at novell.com>
-
-	* Makefile (default_SUBDIRS): New.  Rename from SUBDIRS, and move
-	before including library.make.
-	(net_2_0_ONLY_SUBDIRS): New.
-	(DIST_ONLY_SUBDIRS): Add net_2_0_ONLY_SUBDIRS.
-
-2005-09-30  Miguel de Icaza  <miguel at novell.com>
-
-	* Recompile the
-	FirebirdSql.Data.Common/Resources/isc_error_msg.resources with the
-	resgen so it produces 1.x resources not 2.x resources which are
-	unreadable in 1.x profile.
-
-	* FirebirdSql.Data.Firebird.dll.resources: Add the full name that
-	will be used, otherwise no resources work.
-
-	* FirebirdSql.Data.Common/Resources/isc_error_msg.txt: Fix newline.
-
-2005-11-21  Raja R Harinath  <rharinath at novell.com>
-
-	* Makefile (net_2_0_bootstrap_SUBDIRS): Add PEAPI.
-	(net_1_1_java_SUBDIRS): New.  Don't use 'ifeq ($(PROFILE))' to
-	define SUBDIRS.
-
-2005-11-15 Vlad Spivak <spivak at mainsoft.com>
-
-	* Makefile: define net_1_1_java profile subdirs
-
-2005-10-06  Chris Lahey  <clahey at ximian.com>
-
-	* Makefile (SUBDIRS): Compile Mono Posix before Mono SqliteClient.
-
-2005-06-14  Lluis Sanchez Gual <lluis at novell.com>
-
-	* Makefile: Added System.Configuration to the build.
-
-2005-04-21  Raja R Harinath  <rharinath at novell.com>
-
-	* Makefile (net_1_1_bootstrap_SUBDIRS): Add PEAPI.
-
-2005-04-07  Raja R Harinath  <rharinath at novell.com>
-
-	* Makefile ($(basic_files:%=lib/basic/%)): Build the "basic"
-	profile if needed.  This is used when 'make dist' is invoked on a
-	clean tree.  Reported by Ben Maurer.
-
-2005-01-24  Raja R Harinath  <rharinath at novell.com>
-
-	* Makefile (bootstrap_dirs): Add Mono.Security and System.Security
-	ahead of System.
-	(SUBDIRS): Move Mono.Security and System.Security ahead of System.
-
-2005-01-13  Cesar Lopez Nataren  <cnataren at novell.com>
-
-	* Makefile (SUBDIRS): added Microsoft.JScript to the default build.
-
-2005-01-04  Raja R Harinath  <rharinath at novell.com>
-
-	* Makefile (DIST_ONLY_SUBDIRS): Remove Managed.Windows.Forms.
-
-2004-12-26  Peter Bartok  <pbartok at novell.com>
-
-	* Makefile (SUBDIRS): Switched from System.Windows.Forms to
-	  Managed.Windows.Forms to build with the managed implementation
-	  by default.
-
-2004-12-08  Martin Baulig  <martin at ximian.com>
-
-	* Mono.CSharp.Debugger/: Renamed to Mono.CSharp.CompilerServices.
-	(the DLL it creates has already been renamed a long time ago).
-
-2004-12-08  Raja R Harinath  <rharinath at novell.com>
-
-	* Makefile (monolite_files): New.  Do away with lib/basic.tar.gz.
-	Create the files in lib/monolite/.
-	(DISTFILES, dist-default, dist-local): Distribute them.
-
-2004-12-06  Raja R Harinath  <rharinath at novell.com>
-
-	* Makefile (SUBDIRS): Move I18N after second-pass of System.
-
-2004-12-03  Raja R Harinath  <rharinath at novell.com>
-
-	* Makefile (basic_SUBDIRS): Add second-pass System, too.
-	(basic_files): Add System.Xml.dll.
-
-2004-12-02  Atsushi Enomoto  <atsushi at ximian.com>
-
-	* Makefile : now we need System.Xml.dll for basic bootstrapping.
-
-2004-11-25  Raja R Harinath  <rharinath at novell.com>
-
-	* Makefile (DISTFILES): Add public and private keys.
-	(lib/basic.tar.gz): New.
-	(dist-local): Distribute it.
-	(DIST_ONLY_SUBDIRS): Distribute Managed.Windows.Forms.
-	* I18N/Makefile (DISTFILES): Add Assembly/ChangeLog and
-	Assembly/AssemblyInfo.cs.
-	* IBM.Data.DB2/Makefile (EXTRA_DISTFILES): Distribute ibm.pub.
-
-2004-11-22  Raja R Harinath  <rharinath at novell.com>
-
-	* Makefile (net_1_1_bootstrap_SUBDIRS): Add Mono.Security.
-
-2004-11-19  Raja R Harinath  <rharinath at novell.com>
-
-	* Makefile (DIST_PROFILES): New.
-	(dist-local): Create profile-specific directories in the tarball.
-
-2004-11-12  Martin Baulig  <martin at ximian.com>
-
-	* Makefile (SUBDIRS): Added Mono.C5.
-
-2004-11-09  Raja R Harinath  <rharinath at novell.com>
-
-	* Makefile (basic_SUBDIRS): New.
-
-2004-11-04  Raja R Harinath  <rharinath at novell.com>
-
-	* Makefile (net_1_1_bootstrap_SUBDIRS): New.
-
-2004-10-29  Raja R Harinath  <rharinath at novell.com>
-
-	* Makefile (net_2_0_bootstrap_SUBDIRS): New.
-
-2004-10-22  Daniel Morgan <danielmorgan at verizon.net>
-
-	* Mono.Data/.cvsignore
-	* Mono.Data/AssemblyInfo.cs
-	* Mono.Data/Makefile
-	* Mono.Data/Mono.Data.dll.sources: added files 
-	for build of Mono.Data.dll   
-	This assembly includes the ProviderFactory
-
-	* Makefile: added Mono.Data.dll to the build
-	* Mono.Data/app.config: added providers	and 
-	removed obsolete providers to app settings xml file
-	
-	* Mono.Data/test/Mono.Data.dll: delete
-
-2004-10-22  Atsushi Enomoto  <atsushi at ximian.com>
-
-	* Makefile : just remove System.Data.SqlXml.dll.
-
-2004-10-11  Duncan Mak  <duncan at ximian.com>
-
-	* Makefile: Move Microsoft.VisualBasic.dll to be built after
-	System.Windows.Forms.dll is built, because VB now requires SWF. This
-	fixes the build.
-
-2004-07-26  Atsushi Enomoto  <atsushi at ximian.com>
-
-	* Makefile: added System.Data.SqlXml.dll as a working target.
-
-2004-07-02  Raja R Harinath  <rharinath at novell.com>
-
-	* IBM.Data.DB2/Makefile (all-local $(STD_TARGETS:=-local)):
-	Simplify dummy rule somewhat.
-
-2004-06-24  Raja R Harinath  <rharinath at novell.com>
-
-	* IBM.Data.DB2/Makefile: Disable for 'net_2_0'.
-
-2004-06-23 Gonzalo Paniagua Javier <gonzalo at ximian.com>
-
-	* Makefile: enabled Mono.CSharp.Debugger on windows.
-
-2004-06-11  Duncan Mak  <duncan at ximian.com>
-
-	* IBM.Data.DB2/IBM.Data.DB2.dll.sources: 
-	* Makefile: Add IBM.Data.DB2.
-
-2004-05-07  Raja R Harinath  <rharinath at novell.com>
-
-	* Makefile (SUBDIRS): Build 'corlib' and first pass of 'System'
-	before anything else.  Remove duplicated Novell.Directory.Ldap.
-
-2004-05-02  Duncan Mak  <duncan at ximian.com>
-
-	* I18N/Assembly/AssemblyInfo.cs:
-	* Mono.CSharp.Debugger/Assembly/AssemblyInfo.cs:
-	* Mono.Cairo/Assembly/AssemblyInfo.cs:
-	* Mono.Data.SqliteClient/Assembly/AssemblyInfo.cs:
-	* Mono.Data.SybaseClient/Assembly/AssemblyInfo.cs:
-	* Mono.Data.Tds/Assembly/AssemblyInfo.cs:
-	* Mono.Data.TdsClient/Assembly/AssemblyInfo.cs: Fix the
-	AssemblyVersionAttribute ordering.
-
-2004-05-02  Duncan Mak  <duncan at ximian.com>
-
-	* ByteFX.Data/AssemblyInfo.cs:
-	* Mono.GetOptions/AssemblyInfo.cs:
-	* Microsoft.Vsa/Assembly/AssemblyInfo.cs: Add assembly-level
-	attributes for versioning (1.0 vs. 1.1 vs. 2.0).
-
-2004-04-22  Martin Baulig  <martin at ximian.com>
-
-	Renamed the `NET_1_2' conditional to `NET_2_0' in all files.
-
-2004-03-31  Dick Porter  <dick at ximian.com>
-
-	* I18N/CJK/gb2312.table:
-	* I18N/CJK/Gb2312Convert.cs: 
-	* I18N/CJK/CP936.cs: Rewrote the GB2312 conversion, using the iconv
-	algorithm as a base.  Fixes bug 53841.
-
-2004-03-23  Sebastien Pouliot  <sebastien at ximian.com>
-
-	* ecma.pub: New. ECMA key to be used for strongnaming assemblies.
-	* msfinal.pub: New. Microsoft public key to be used for strongnaming
-	assemblies.
-
-2004-02-04  Marek Safar <marek.safar at seznam.cz>
-
-	* Makefile: Build System.dll in two steps. Because of the circular
-        dependency with System.XML.dll.
-
-2004-01-04  Gonzalo Paniagua Javier <gonzalo at ximian.com>
-
-	* Makefile: disabled Mono.Posix for other platforms than linux until
-	it builds properly.
-
-2003-12-17  Sebastien Pouliot  <spouliot at videotron.ca>
-
-	* Makefile: Moved Mono.Security before Mono.Data.Tds because it's
-	now required for NTLM authentication.
-
-2003-10-21  Pedro Martínez Juliá  <yoros at wanadoo.es>
-
-	* Makefile: Removed Mono.Security.Tls.
-
-	* Mono.Security.Tls: Removed directory, now TLS support is in
-	Mono.Security assembly.
-
-2003-10-16  Pedro Martínez Juliá  <yoros at wanadoo.es>
-
-	* Makefile: Add Mono.Security.Tls assembly.
-
-2003-08-11  Duncan Mak  <duncan at ximian.com>
-
-	* Makefile (SUBDIRS): Add Mono.Cairo.dll
-
-2003-07-24  Gonzalo Paniagua Javier <gonzalo at ximian.com>
-
-	* Makefile: only build Mono.CSharp.Debugger under linux.
-
-2003-07-23  Peter Williams  <peter at newton.cx>
-
-	* Makefile (SUBDIRS): Add System.Drawing.Design.dll to the
-	default build.
-
-2003-07-22  Cesar Lopez Nataren  <cesar at ciencias.unam.mx>
-
-	* mcs/class/Makefile: Added Microsoft.Vsa.dll to the build.
-
-2003-04-04  Miguel de Icaza  <miguel at ximian.com>
-
-	*
-	ICSharpCode.SharpZipLib/ICSharpCode.SharpZipLib/Zip/Compression/Streams/InflaterInputStream.cs: Do not close the file.
-
-2003-04-03  Miguel de Icaza  <miguel at ximian.com>
-
-	*
-	ICSharpCode.SharpZipLib/ICSharpCode.SharpZipLib/Zip/Compression/Streams/InflaterInputStream.cs
-	(InflaterInputStream.Skip): Use a more memory friendly implementation.
-
-2003-04-17  Nick Drochak  <ndrochak at gol.com>
-
-	* library.make: Only try to run the unit tests if there is a Test
-	directory.
-
-2003-04-11 Duncan Mak  <duncan at ximian.com>
-        
-        * Mono.Globalization/Data/*.xml: Check in XML files used in
-        the implementation of System.Globalization.
-
-2003-03-31 Martin Willemoes Hansen
-
-	* Stubed System.Drawing.Design
-
-2003-03-31  Alan Tam <Tam at SiuLung.com>
-
-	* makefile.gnu: Added System.Design to build
-
-2003-03-31  Alan Tam <Tam at SiuLung.com>
-
-	* library.build: Added back System.Design to build
-
-2003-03-22  Martin Willemoes Hansen <mwh at sysrq.dk>
-
-	* Stubed Custommarshalers
-
-2003-03-20  Piers Haken  <piersh at friskit.com>
-
-	* makefile.gnu: really fix the System.Management build problems
-
-2003-03-11  Cesar Octavio Lopez Nataren  <cesar at ciencias.unam.mx>
-
-	* mcs/class: Added the directories Microsoft.JScript and Microsoft.Vsa that
-	will have the runtime support and CodeDom support for the JScript Compiler.
-
-2003-03-06 Jackson Harper <jackson at latitudegeo.com>
-
-	* makefile.gnu: Add PEAPI to the build
-
-2003-03-06  Sebastien Pouliot <spouliot at videotron.ca>
-
-	* library.build: added Mono.Security to build, test and clean. 
-
-2003-03-04  Gonzalo Paniagua Javier <gonzalo at ximian.com>
-
-	* class/library.build:
-	* class/makefile.gnu: added Mono.Posix and System.Management.
-
-2003-03-02 Jackson Harper <jackson at latitudegeo.com>
-
-	* mcs/class: Add PEAPI directory
-
-2003-02-22  Martin Baulig  <martin at ximian.com>
-
-	* library.make: Pass `MCS_FLAGS' to MCS.
-
-2003-02-15  Zoltan Varga  <vargaz at freemail.hu>
-
-	* makefile.gnu (test): do not install .dbg files since mcs no longer
-	generates them.
-
-2003-02-13  Tim Coleman <tim at timcoleman.com>
-	* makefile.gnu: Add System.Data.OracleClient to linux build.
-
-2003-02-10  Nick Drochak  <ndrochak at gol.com>
-
-	* library.build:
-	* makefile: add testcorlib target to run unit tests just for corlib.
-
-2003-02-05  Sebastien Pouliot <spouliot at videotron.ca>
-
-	* library.build: added Mono.Security.Win32 to build, test and 
-	clean. There's no makefile.gnu for this assembly as it is 
-	specific to Win32.
-
-2003-01-23  Nick Drochak <ndrochak at gol.com>
-
-	* makefile: install the .dbg files too so the debugger can use them.
-
-2003-01-17  Sebastien Pouliot <spouliot at videotron.ca>
-
-	* library.build: added System.Security to build, test and clean.
-	There's no makefile.gnu yet for this assembly.
-
-2003-01-16  Rodrigo Moya <rodrigo at ximian.com>
-
-	* makefile.gnu: added Mono.Data.DB2Client directory.
-
-2003-01-08  Gaurav Vaish <gvaish_mono AT lycos.com>
-
-	* System.Web.Mobile  : Added new directory
-
-2002-12-11  Jeroen Janssen <japj at darius.demon.nl>
-	
-	* enabled building Mono.Directory.LDAP and
-	  System.Design in .build file
-
-2002-12-10  Jeroen Janssen <japj at darius.demon.nl>
-	
-	* updated .build file(s) to correctly contain required buildfile 
-	  attribute for nant
-
-2002-12-09  Daniel Morgan <danmorg at sc.rr.com>
-
-	* library.build: add Mono.GetOptions to windows build
-	
-	* Mono.GetOptions/Mono.GetOptions.build: add file
-	for windows build
-
-2002-12-08  Radek Doulik  <rodo at ximian.com>
-
-	* makefile.gnu (DIRS): place System.Data before Mono.GetOptions,
-	Mono.GetOptions references System.Data
-
-2002-12-07 Jackson Harper <jackson at latitudegeo.com>
-
-	* library.build: Added Cscompmgd to the build
-
-2002-12-02  Cesar Octavio Lopez Nataren  <cesar at ciencias.unam.mx>
-
-	* mcs/class: Added assembly directory System.ServiceProcess
-
-2002-11-26  Daniel morgan <danmorg at sc.rr.com>
-
-	* makefile.gnu: add Mono.Data.PostgreSqlClient 
-	to Linux build
-	
-	* library.build: add Mono.Data.PostgreSqlClient
-	to Windows build
-
-2002-11-20  Nick Drochak <ndrochak at gol.com>
-
-	* library.make: for .response allow white space at the end of
-	the line 
-
diff --git a/mcs/class/Commons.Xml.Relaxng/ChangeLog b/mcs/class/Commons.Xml.Relaxng/ChangeLog
index 6e52c24..c0de63c 100644
--- a/mcs/class/Commons.Xml.Relaxng/ChangeLog
+++ b/mcs/class/Commons.Xml.Relaxng/ChangeLog
@@ -1,8 +1,3 @@
-2011-08-30  Chris Toshok  <toshok at gmail.com>
-
-	prepend $(CURDIR) to jay input files so that the debugging info
-	references the right .jay
-
 2009-01-20  Atsushi Enomoto <atsushi at ximian.com>
 
 	* Commons.Xml.Relaxng_test.dll.sources : forgot to add
diff --git a/mcs/class/Commons.Xml.Relaxng/ChangeLog.old b/mcs/class/Commons.Xml.Relaxng/ChangeLog.old
deleted file mode 100644
index c0de63c..0000000
--- a/mcs/class/Commons.Xml.Relaxng/ChangeLog.old
+++ /dev/null
@@ -1,112 +0,0 @@
-2009-01-20  Atsushi Enomoto <atsushi at ximian.com>
-
-	* Commons.Xml.Relaxng_test.dll.sources : forgot to add
-	  RelaxngDatatypeProviderTests.cs.
-
-2008-11-11  Atsushi Enomoto <atsushi at ximian.com>
-
-	* Makefile: what a messy EXTRA_DISTFILES.
-
-2007-04-18  Atsushi Enomoto <atsushi at ximian.com>
-
-	* Makefile (EXTRA_DISTFILES) :
-	  added schemas-xmlsoap-or-ws-2005-05-identity.rnc
-
-2006-06-15  Raja R Harinath  <rharinath at novell.com>
-
-	* Makefile (EXTRA_DISTFILES): Add Test/XmlFiles/nvdl.rng.
-
-2006-04-11  Atsushi Enomoto <atsushi at ximian.com>
-
-	* Commons.Xml.Relaxng_test.dll.sources :
-	  added NvdlValidatingReaderTests.cs.
-	* README: some updates.
-
-2005-12-28  Atsushi Enomoto <atsushi at ximian.com>
-
-	* README : updated the status.
-
-2005-03-28  Atsushi Enomoto <atsushi at ximian.com>
-
-	* Commons.Xml.Relaxnf.dll.sources : added XmlChar.cs
-
-2005-03-07  Atsushi Enomoto <atsushi at ximian.com>
-
-	* README :
-	  more description.
-
-2005-03-06  Atsushi Enomoto <atsushi at ximian.com>
-
-	* Commons.Xml.Relaxng.dll.sources : added NvdlFilteredXmlReader.
-
-2005-03-01  Atsushi Enomoto <atsushi at ximian.com>
-
-	* Commons.Xml.Relaxng.dll.sources : added NVDL support files.
-	* README : added halfbaked description.
-
-2005-01-26  Atsushi Enomoto <atsushi at ximian.com>
-
-	* Commons.Xml.Relaxng.dll.sources :
-	  added RncWriter.cs and RelaxngInference.cs.
-
-2004-12-06  Raja R Harinath  <rharinath at novell.com>
-
-	* Makefile (RESOURCE_FILES): List only filenames.
-	(LIB_MCS_FLAGS): Strip off directory of resource files to get
-	resource names.
-	(EXTRA_DISTFILES): Add $(RESOURCE_FILES).
-	(BUILT_SOURCES): Add Common.Xml.Relaxng.Rnc/RncParser.cs.
-	($(the_lib)): Depend on resource files too.
-	* Common.Xml.Relaxng.dll.sources: Remove RncParser.cs.
-
-2004-12-06  Atsushi Enomoto <atsushi at ximian.com>
-
-	* Makefile : added relaxng.rng as a resource.
-
-2004-11-25  Raja R Harinath  <rharinath at novell.com>
-
-	* Makefile (Commons.Xml.Relaxng.Rnc/RncParser.cs): Depend on jay/skeleton.cs.
-
-2004-11-04  Raja R Harinath  <rharinath at novell.com>
-
-	* Makefile (EXTRA_DISTFILES): Fix for 'make dist'.
-
-2004-03-18  Atsushi Enomoto <atsushi at ximian.com>
-
-	* Makefile : It was incorrect fix, and more fix on command line.
-
-2004-03-18  Atsushi Enomoto <atsushi at ximian.com>
-
-	* Makefile : path to jay should be supplied.
-
-2004-03-17  Atsushi Enomoto <atsushi at ximian.com>
-
-	* Commons.Xml.Relaxng.dll.sources : Added RncParser.cs and RncTokenizer.cs.
-	* Commons.Xml.Relaxng_test.dll.sources : Added RncTests.cs.
-	* Makefile : Added RncParser.jay build support.
-	* README : updated.
-
-2004-03-01  Atsushi Enomoto <atsushi at ximian.com>
-
-	* README : added usage descriptions.
-
-2004-02-28  Atsushi Enomoto <atsushi at ximian.com>
-
-	* Commons.Xml.Relaxng_test.dll.sources : Added XsdDatatypeTests.cs
-
-2004-02-25  Atsushi Enomoto <atsushi at ximian.com>
-
-	* Added README.
-	* Commons.Xml.Relaxng.dll.sources : added many new files.
-
-2003-04-30  Atsushi Enomoto <ginga at kit.hi-ho.ne.jp>
-
-	* list.unix,
-	  list: fixed incorrect reference to Util.cs (Misc.cs).
-
-2003-04-29  Atsushi Enomoto <ginga at kit.hi-ho.ne.jp>
-
-	* Started.
-	* added ChangeLog, list, list.unix, makefile.gnu and
-	  Commons.Xml.Relaxng.build.
-
diff --git a/mcs/class/Commons.Xml.Relaxng/Test/RdpPatternTests.cs b/mcs/class/Commons.Xml.Relaxng/Test/RdpPatternTests.cs
index 4c57ac0..b1f199f 100644
--- a/mcs/class/Commons.Xml.Relaxng/Test/RdpPatternTests.cs
+++ b/mcs/class/Commons.Xml.Relaxng/Test/RdpPatternTests.cs
@@ -17,7 +17,7 @@ using NUnit.Framework;
 namespace MonoTests.Commons.Xml.Relaxng
 {
 	[TestFixture]
-	public class RdpPatternTests : Assertion
+	public class RdpPatternTests
 	{
 		RelaxngValidatingReader reader;
 		RdpPattern result;
@@ -31,7 +31,7 @@ namespace MonoTests.Commons.Xml.Relaxng
 		
 		private void AssertPattern (string s, RelaxngPatternType expected, RdpPattern p)
 		{
-			AssertEquals (s, expected, p.PatternType);
+			Assert.AreEqual (expected, p.PatternType, s);
 		}
 
 		[Test]
diff --git a/mcs/class/Commons.Xml.Relaxng/Test/RelaxngReaderTests.cs b/mcs/class/Commons.Xml.Relaxng/Test/RelaxngReaderTests.cs
index e2f6220..802da2d 100644
--- a/mcs/class/Commons.Xml.Relaxng/Test/RelaxngReaderTests.cs
+++ b/mcs/class/Commons.Xml.Relaxng/Test/RelaxngReaderTests.cs
@@ -16,7 +16,7 @@ using NUnit.Framework;
 namespace MonoTests.Commons.Xml.Relaxng
 {
 	[TestFixture]
-	public class RelaxngReaderTests : Assertion
+	public class RelaxngReaderTests
 	{
 		RelaxngReader reader;
 
@@ -36,7 +36,7 @@ namespace MonoTests.Commons.Xml.Relaxng
 			loadGrammarFromUrl ("Test/XmlFiles/SimpleElementPattern1.rng");
 			RelaxngPattern p = reader.ReadPattern ();
 
-			AssertEquals (RelaxngPatternType.Element, p.PatternType);
+			Assert.AreEqual (RelaxngPatternType.Element, p.PatternType);
 		}
 
 		[Test]
@@ -45,7 +45,7 @@ namespace MonoTests.Commons.Xml.Relaxng
 			loadGrammarFromUrl ("Test/XmlFiles/relaxng.rng");
 			RelaxngPattern p = reader.ReadPattern ();
 
-			AssertEquals (RelaxngPatternType.Grammar, p.PatternType);
+			Assert.AreEqual (RelaxngPatternType.Grammar, p.PatternType);
 
 			p.Compile ();
 		}
diff --git a/mcs/class/Cscompmgd/Test/Microsoft.CSharp/CompilerTest.cs b/mcs/class/Cscompmgd/Test/Microsoft.CSharp/CompilerTest.cs
index 2e333dd..b13ced3 100644
--- a/mcs/class/Cscompmgd/Test/Microsoft.CSharp/CompilerTest.cs
+++ b/mcs/class/Cscompmgd/Test/Microsoft.CSharp/CompilerTest.cs
@@ -15,7 +15,7 @@ using NUnit.Framework;
 namespace MonoTests.Cscompmgd
 {
 	[TestFixture]
-	public class CompilerTest : Assertion
+	public class CompilerTest
 	{
 		[SetUp]
 		public void GetReady ()
diff --git a/mcs/class/I18N/CJK/CP51932.cs b/mcs/class/I18N/CJK/CP51932.cs
index bffb15b..5a396da 100644
--- a/mcs/class/I18N/CJK/CP51932.cs
+++ b/mcs/class/I18N/CJK/CP51932.cs
@@ -58,6 +58,11 @@ using System;
 using System.Text;
 using I18N.Common;
 
+#if DISABLE_UNSAFE
+using MonoEncoder = I18N.Common.MonoSafeEncoder;
+using MonoEncoding = I18N.Common.MonoSafeEncoding;
+#endif
+
 [Serializable]
 public class CP51932 : MonoEncoding
 {
@@ -69,12 +74,7 @@ public class CP51932 : MonoEncoding
 	{
 	}
 
-
-	public override int GetByteCount (char [] chars, int index, int length)
-	{
-		return new CP51932Encoder (this).GetByteCount (chars, index, length, true);
-	}
-
+#if !DISABLE_UNSAFE
 	public unsafe override int GetByteCountImpl (char* chars, int count)
 	{
 		return new CP51932Encoder (this).GetByteCountImpl (chars, count, true);
@@ -84,6 +84,17 @@ public class CP51932 : MonoEncoding
 	{
 		return new CP51932Encoder (this).GetBytesImpl (chars, charCount, bytes, byteCount, true);
 	}
+#else
+	public override int GetByteCount (char [] chars, int index, int length)
+	{
+		return new CP51932Encoder (this).GetByteCount (chars, index, length, true);
+	}
+
+	public override int GetBytes(char[] chars, int charIndex, int charCount, byte[] bytes, int byteIndex)
+	{
+		return new CP51932Encoder (this).GetBytes (chars, charIndex, charCount, bytes, byteIndex, true);
+	}
+#endif
 
 	public override int GetCharCount (byte [] bytes, int index, int count)
 	{
@@ -196,6 +207,7 @@ public class CP51932Encoder : MonoEncoder
 	{
 	}
 
+#if !DISABLE_UNSAFE
 	// Get the number of bytes needed to encode a character buffer.
 	public unsafe override int GetByteCountImpl (
 		char* chars, int count, bool refresh)
@@ -255,6 +267,7 @@ public class CP51932Encoder : MonoEncoder
 	{
 		int charIndex = 0;
 		int byteIndex = 0;
+		int end = charCount;
 
 		// Convert the characters into their byte form.
 		int posn = byteIndex;
@@ -265,8 +278,8 @@ public class CP51932Encoder : MonoEncoder
 		byte[] greekToJis = JISConvert.Convert.greekToJis;
 		byte[] extraToJis = JISConvert.Convert.extraToJis;
 
-		for (; charCount > 0; charIndex++, --charCount) {
-			ch = chars [charIndex];
+		for (int i = charIndex; i < end; i++, charCount--) {
+			ch = chars [i];
 			if (posn >= byteLength) {
 				throw new ArgumentException (Strings.GetString ("Arg_InsufficientSpace"), "bytes");
 			}
@@ -301,8 +314,8 @@ public class CP51932Encoder : MonoEncoder
 			if (value == 0) {
 #if NET_2_0
 				HandleFallback (
-					chars, ref charIndex, ref charCount,
-					bytes, ref posn, ref byteCount);
+					chars, ref i, ref charCount,
+					bytes, ref posn, ref byteCount, null);
 #else
 				bytes [posn++] = (byte) '?';
 #endif
@@ -329,6 +342,168 @@ public class CP51932Encoder : MonoEncoder
 		// Return the final length to the caller.
 		return posn - byteIndex;
 	}
+#else
+	// Get the number of bytes needed to encode a character buffer.
+	public override int GetByteCount(char[] chars, int index, int count, bool flush)
+	{
+		// Determine the length of the final output.
+		int length = 0;
+		int ch, value;
+		byte[] cjkToJis = JISConvert.Convert.cjkToJis;
+		byte[] extraToJis = JISConvert.Convert.extraToJis;
+
+		while (count > 0)
+		{
+			ch = chars[index++];
+			--count;
+			++length;
+			if (ch < 0x0080)
+			{
+				// Character maps to itself.
+				continue;
+			}
+			else if (ch < 0x0100)
+			{
+				// Check for special Latin 1 characters that
+				// can be mapped to double-byte code points.
+				if (ch == 0x00A2 || ch == 0x00A3 || ch == 0x00A7 ||
+				   ch == 0x00A8 || ch == 0x00AC || ch == 0x00B0 ||
+				   ch == 0x00B1 || ch == 0x00B4 || ch == 0x00B6 ||
+				   ch == 0x00D7 || ch == 0x00F7)
+				{
+					++length;
+				}
+			}
+			else if (ch >= 0x0391 && ch <= 0x0451)
+			{
+				// Greek subset characters.
+				++length;
+			}
+			else if (ch >= 0x2010 && ch <= 0x9FA5)
+			{
+				// This range contains the bulk of the CJK set.
+				value = (ch - 0x2010) * 2;
+				value = ((int)(cjkToJis[value])) | (((int)(cjkToJis[value + 1])) << 8);
+				if (value >= 0x0100)
+					++length;
+			}
+			else if (ch >= 0xFF01 && ch < 0xFF60)
+			{
+				// This range contains extra characters.
+				value = (ch - 0xFF01) * 2;
+				value = ((int)(extraToJis[value])) |
+						(((int)(extraToJis[value + 1])) << 8);
+				if (value >= 0x0100)
+					++length;
+			}
+			else if (ch >= 0xFF60 && ch <= 0xFFA0)
+			{
+				++length; // half-width kana
+			}
+		}
+
+		// Return the length to the caller.
+		return length;
+	}
+
+	// Get the bytes that result from encoding a character buffer.
+	public override int GetBytes(char[] chars, int charIndex, int charCount, byte[] bytes, int byteIndex, bool flush)
+	{
+		// Convert the characters into their byte form.
+		int posn = byteIndex;
+		int byteLength = bytes.Length;
+		int byteCount = bytes.Length;
+		int end = charIndex + charCount;
+		int ch, value;
+
+		byte[] cjkToJis = JISConvert.Convert.cjkToJis;
+		byte[] greekToJis = JISConvert.Convert.greekToJis;
+		byte[] extraToJis = JISConvert.Convert.extraToJis;
+
+		for (int i = charIndex; i < end; i++, charCount--)
+		{
+			ch = chars[i];
+			if (posn >= byteLength)
+			{
+				throw new ArgumentException(Strings.GetString("Arg_InsufficientSpace"), "bytes");
+			}
+
+			if (ch < 0x0080)
+			{
+				// Character maps to itself.
+				bytes[posn++] = (byte)ch;
+				continue;
+			}
+			else if (ch >= 0x0391 && ch <= 0x0451)
+			{
+				// Greek subset characters.
+				value = (ch - 0x0391) * 2;
+				value = ((int)(greekToJis[value])) |
+						(((int)(greekToJis[value + 1])) << 8);
+			}
+			else if (ch >= 0x2010 && ch <= 0x9FA5)
+			{
+				// This range contains the bulk of the CJK set.
+				value = (ch - 0x2010) * 2;
+				value = ((int)(cjkToJis[value])) |
+						(((int)(cjkToJis[value + 1])) << 8);
+			}
+			else if (ch >= 0xFF01 && ch <= 0xFF60)
+			{
+				// This range contains extra characters,
+				// including half-width katakana.
+				value = (ch - 0xFF01) * 2;
+				value = ((int)(extraToJis[value])) |
+						(((int)(extraToJis[value + 1])) << 8);
+			}
+			else if (ch >= 0xFF60 && ch <= 0xFFA0)
+			{
+				value = ch - 0xFF60 + 0x8EA0;
+			}
+			else
+			{
+				// Invalid character.
+				value = 0;
+			}
+
+			if (value == 0)
+			{
+#if NET_2_0
+				HandleFallback (chars, ref i, ref charCount,
+					bytes, ref posn, ref byteCount, null);
+#else
+				bytes [posn++] = (byte) '?';
+#endif
+			}
+			else if (value < 0x0100)
+			{
+				bytes[posn++] = (byte)value;
+			}
+			else if ((posn + 1) >= byteLength)
+			{
+				throw new ArgumentException(Strings.GetString("Arg_InsufficientSpace"), "bytes");
+			}
+			else if (value < 0x8000)
+			{
+				// general 2byte glyph/kanji
+				value -= 0x0100;
+				bytes[posn++] = (byte)(value / 0x5E + 0xA1);
+				bytes[posn++] = (byte)(value % 0x5E + 0xA1);
+				//Console.WriteLine ("{0:X04}", ch);
+				continue;
+			}
+			else
+			{
+				// half-width kana
+				bytes[posn++] = 0x8E;
+				bytes[posn++] = (byte)(value - 0x8E00);
+			}
+		}
+
+		// Return the final length to the caller.
+		return posn - byteIndex;
+	}
+#endif
 } // CP51932Encoder
 
 internal class CP51932Decoder : DbcsEncoding.DbcsDecoder
diff --git a/mcs/class/I18N/CJK/CP932.cs b/mcs/class/I18N/CJK/CP932.cs
index 7d3f2ce..65b86d0 100644
--- a/mcs/class/I18N/CJK/CP932.cs
+++ b/mcs/class/I18N/CJK/CP932.cs
@@ -33,8 +33,13 @@ namespace I18N.CJK
 	using System.Text;
 	using I18N.Common;
 
+#if DISABLE_UNSAFE
+	using MonoEncoder = I18N.Common.MonoSafeEncoder;
+	using MonoEncoding = I18N.Common.MonoSafeEncoding;
+#endif
+
 	[Serializable]
-	public unsafe class CP932 : MonoEncoding
+	public class CP932 : MonoEncoding
 	{
 		// Magic number used by Windows for the Shift-JIS code page.
 		private const int SHIFTJIS_CODE_PAGE = 932;
@@ -44,6 +49,7 @@ namespace I18N.CJK
 		{
 		}
 
+#if !DISABLE_UNSAFE
 		// Get the number of bytes needed to encode a character buffer.
 		public unsafe override int GetByteCountImpl (char* chars, int count)
 		{
@@ -130,6 +136,7 @@ namespace I18N.CJK
 
 			// Convert the characters into their byte form.
 			int posn = byteIndex;
+			int end = charCount;
 			int byteLength = byteCount;
 			int ch, value;
 #if __PNET__
@@ -141,10 +148,9 @@ namespace I18N.CJK
 			byte[] greekToJis = JISConvert.Convert.greekToJis;
 			byte[] extraToJis = JISConvert.Convert.extraToJis;
 #endif
-			while(charCount > 0)
+			for (int i = charIndex; i < end; i++, charCount--)
 			{
-				ch = chars[charIndex++];
-				--charCount;
+				ch = chars[i];
 				if(posn >= byteLength)
 				{
 					throw new ArgumentException
@@ -240,7 +246,7 @@ namespace I18N.CJK
 #if NET_2_0
 						HandleFallback (ref buffer,
 							chars, ref charIndex, ref charCount,
-							bytes, ref posn, ref byteCount);
+							bytes, ref posn, ref byteCount, null);
 #else
 						// Invalid character.
 						bytes[posn++] = (byte)'?';
@@ -292,7 +298,7 @@ namespace I18N.CJK
 #if NET_2_0
 					HandleFallback (ref buffer,
 						chars, ref charIndex, ref charCount,
-						bytes, ref posn, ref byteCount);
+						bytes, ref posn, ref byteCount, null);
 #else
 					bytes[posn++] = (byte)'?';
 #endif
@@ -345,6 +351,295 @@ namespace I18N.CJK
 			// Return the final length to the caller.
 			return posn - byteIndex;
 		}
+#else
+		// Get the number of bytes needed to encode a character buffer.
+		public override int GetByteCount(char[] chars, int index, int count)
+		{
+			// Determine the length of the final output.
+			int length = 0;
+			int ch, value;
+			byte[] cjkToJis = JISConvert.Convert.cjkToJis;
+			byte[] extraToJis = JISConvert.Convert.extraToJis;
+
+			while (count > 0)
+			{
+				ch = chars[index++];
+				--count;
+				++length;
+				if (ch < 0x0080)
+				{
+					// Character maps to itself.
+					continue;
+				}
+				else if (ch < 0x0100)
+				{
+					// Check for special Latin 1 characters that
+					// can be mapped to double-byte code points.
+					if (ch == 0x00A2 || ch == 0x00A3 || ch == 0x00A7 ||
+					   ch == 0x00A8 || ch == 0x00AC || ch == 0x00B0 ||
+					   ch == 0x00B1 || ch == 0x00B4 || ch == 0x00B6 ||
+					   ch == 0x00D7 || ch == 0x00F7)
+					{
+						++length;
+					}
+				}
+				else if (ch >= 0x0391 && ch <= 0x0451)
+				{
+					// Greek subset characters.
+					++length;
+				}
+				else if (ch >= 0x2010 && ch <= 0x9FA5)
+				{
+					// This range contains the bulk of the CJK set.
+					value = (ch - 0x2010) * 2;
+					value = ((int)(cjkToJis[value])) |
+							(((int)(cjkToJis[value + 1])) << 8);
+					if (value >= 0x0100)
+					{
+						++length;
+					}
+				}
+				else if (ch >= 0xE000 && ch <= 0xE757)
+					// PrivateUse
+					++length;
+				else if (ch >= 0xFF01 && ch <= 0xFFEF)
+				{
+					// This range contains extra characters,
+					// including half-width katakana.
+					value = (ch - 0xFF01) * 2;
+					value = ((int)(extraToJis[value])) |
+							(((int)(extraToJis[value + 1])) << 8);
+					if (value >= 0x0100)
+					{
+						++length;
+					}
+				}
+			}
+
+			// Return the length to the caller.
+			return length;
+		}
+
+		// Get the bytes that result from encoding a character buffer.
+		public override int GetBytes(char[] chars, int charIndex, int charCount, byte[] bytes, int byteIndex)
+		{
+			int byteCount = bytes.Length;
+#if NET_2_0
+			EncoderFallbackBuffer buffer = null;
+#endif
+
+			// Convert the characters into their byte form.
+			int posn = byteIndex;
+			int end = charIndex + charCount;
+			int byteLength = byteCount;
+			int /*ch,*/ value;
+			byte[] cjkToJis = JISConvert.Convert.cjkToJis;
+			byte[] greekToJis = JISConvert.Convert.greekToJis;
+			byte[] extraToJis = JISConvert.Convert.extraToJis;
+
+			for (int i = charIndex; i < end; i++, charCount--)
+			{
+				int ch = chars[i];
+
+				if (posn >= byteLength)
+				{
+					throw new ArgumentException
+						(Strings.GetString("Arg_InsufficientSpace"),
+						 "bytes");
+				}
+				if (ch < 0x0080)
+				{
+					// Character maps to itself.
+					bytes[posn++] = (byte)ch;
+					continue;
+				}
+				else if (ch < 0x0100)
+				{
+					// Check for special Latin 1 characters that
+					// can be mapped to double-byte code points.
+					if (ch == 0x00A2 || ch == 0x00A3 || ch == 0x00A7 ||
+					   ch == 0x00A8 || ch == 0x00AC || ch == 0x00B0 ||
+					   ch == 0x00B1 || ch == 0x00B4 || ch == 0x00B6 ||
+					   ch == 0x00D7 || ch == 0x00F7)
+					{
+						if ((posn + 1) >= byteLength)
+						{
+							throw new ArgumentException
+								(Strings.GetString
+									("Arg_InsufficientSpace"), "bytes");
+						}
+						switch (ch)
+						{
+							case 0x00A2:
+								bytes[posn++] = (byte)0x81;
+								bytes[posn++] = (byte)0x91;
+								break;
+
+							case 0x00A3:
+								bytes[posn++] = (byte)0x81;
+								bytes[posn++] = (byte)0x92;
+								break;
+
+							case 0x00A7:
+								bytes[posn++] = (byte)0x81;
+								bytes[posn++] = (byte)0x98;
+								break;
+
+							case 0x00A8:
+								bytes[posn++] = (byte)0x81;
+								bytes[posn++] = (byte)0x4E;
+								break;
+
+							case 0x00AC:
+								bytes[posn++] = (byte)0x81;
+								bytes[posn++] = (byte)0xCA;
+								break;
+
+							case 0x00B0:
+								bytes[posn++] = (byte)0x81;
+								bytes[posn++] = (byte)0x8B;
+								break;
+
+							case 0x00B1:
+								bytes[posn++] = (byte)0x81;
+								bytes[posn++] = (byte)0x7D;
+								break;
+
+							case 0x00B4:
+								bytes[posn++] = (byte)0x81;
+								bytes[posn++] = (byte)0x4C;
+								break;
+
+							case 0x00B6:
+								bytes[posn++] = (byte)0x81;
+								bytes[posn++] = (byte)0xF7;
+								break;
+
+							case 0x00D7:
+								bytes[posn++] = (byte)0x81;
+								bytes[posn++] = (byte)0x7E;
+								break;
+
+							case 0x00F7:
+								bytes[posn++] = (byte)0x81;
+								bytes[posn++] = (byte)0x80;
+								break;
+						}
+					}
+					else if (ch == 0x00A5)
+					{
+						// Yen sign.
+						bytes[posn++] = (byte)0x5C;
+					}
+					else
+					{
+#if NET_2_0
+						HandleFallback (ref buffer, chars, ref i, ref charCount, bytes, 
+							ref byteIndex, ref byteCount, null);
+#else
+						// Invalid character.
+						bytes[posn++] = (byte)'?';
+#endif
+					}
+					continue;
+				}
+				else if (ch >= 0x0391 && ch <= 0x0451)
+				{
+					// Greek subset characters.
+					value = (ch - 0x0391) * 2;
+					value = ((int)(greekToJis[value])) |
+							(((int)(greekToJis[value + 1])) << 8);
+				}
+				else if (ch >= 0x2010 && ch <= 0x9FA5)
+				{
+					// This range contains the bulk of the CJK set.
+					value = (ch - 0x2010) * 2;
+					value = ((int)(cjkToJis[value])) |
+							(((int)(cjkToJis[value + 1])) << 8);
+				}
+				else if (ch >= 0xE000 && ch <= 0xE757)
+				{
+					// PrivateUse
+					int diff = ch - 0xE000;
+					value = ((int)(diff / 0xBC) << 8)
+						+ (diff % 0xBC)
+						+ 0xF040;
+					if (value % 0x100 >= 0x7F)
+						value++;
+				}
+				else if (ch >= 0xFF01 && ch <= 0xFF60)
+				{
+					value = (ch - 0xFF01) * 2;
+					value = ((int)(extraToJis[value])) |
+							(((int)(extraToJis[value + 1])) << 8);
+				}
+				else if (ch >= 0xFF60 && ch <= 0xFFA0)
+				{
+					value = ch - 0xFF60 + 0xA0;
+				}
+				else
+				{
+					// Invalid character.
+					value = 0;
+				}
+				if (value == 0)
+				{
+#if NET_2_0
+					HandleFallback (ref buffer, chars, ref charIndex, ref charCount,
+						bytes, ref posn, ref byteCount, null);
+#else
+					bytes[posn++] = (byte)'?';
+#endif
+				}
+				else if (value < 0x0100)
+				{
+					bytes[posn++] = (byte)value;
+				}
+				else if ((posn + 1) >= byteLength)
+				{
+					throw new ArgumentException
+						(Strings.GetString("Arg_InsufficientSpace"),
+						 "bytes");
+				}
+				else if (value < 0x8000)
+				{
+					// JIS X 0208 character.
+					value -= 0x0100;
+					ch = (value / 0xBC);
+					value = (value % 0xBC) + 0x40;
+					if (value >= 0x7F)
+					{
+						++value;
+					}
+					if (ch < (0x9F - 0x80))
+					{
+						bytes[posn++] = (byte)(ch + 0x81);
+					}
+					else
+					{
+						bytes[posn++] = (byte)(ch - (0x9F - 0x80) + 0xE0);
+					}
+					bytes[posn++] = (byte)value;
+				}
+				else if (value >= 0xF040 && value <= 0xF9FC)
+				{
+					// PrivateUse
+					bytes[posn++] = (byte)(value / 0x100);
+					bytes[posn++] = (byte)(value % 0x100);
+				}
+				else
+				{
+					// JIS X 0212 character, which Shift-JIS doesn't
+					// support, but we've already allocated two slots.
+					bytes[posn++] = (byte)'?';
+					bytes[posn++] = (byte)'?';
+				}
+			}
+
+			// Return the final length to the caller.
+			return posn - byteIndex;
+		}
+#endif
 
 		public override int GetCharCount (byte [] bytes, int index, int count)
 		{
diff --git a/mcs/class/I18N/CJK/CP936.cs b/mcs/class/I18N/CJK/CP936.cs
index 7b83448..2eb40a6 100644
--- a/mcs/class/I18N/CJK/CP936.cs
+++ b/mcs/class/I18N/CJK/CP936.cs
@@ -28,70 +28,117 @@ namespace I18N.CJK
 			return DbcsConvert.Gb2312;
 		}
 
+#if !DISABLE_UNSAFE
 		// Get the bytes that result from encoding a character buffer.
-		public unsafe override int GetByteCountImpl (
-			char* chars, int count)
+		public unsafe override int GetByteCountImpl (char* chars, int count)
+		{
+			return GetBytesImpl(chars, count, null, 0);
+		}
+
+		// Get the bytes that result from encoding a character buffer.
+		public unsafe override int GetBytesImpl (char* chars, int charCount, byte* bytes, int byteCount)
 		{
 			DbcsConvert gb2312 = GetConvert ();
-			int index = 0;
-			int length = 0;
-			while (count-- > 0) {
-				char c = chars[index++];
+			int charIndex = 0;
+			int byteIndex = 0;
+			int end = charCount;
+#if NET_2_0
+			EncoderFallbackBuffer buffer = null;
+#endif
+
+			int origIndex = byteIndex;
+			for (int i = charIndex; i < end; i++, charCount--) {
+				char c = chars[i];
 				if (c <= 0x80 || c == 0xFF) { // ASCII
-					length++;
+					int offset = byteIndex++;
+					if (bytes != null) bytes[offset] = (byte)c;
 					continue;
 				}
 				byte b1 = gb2312.u2n[((int)c) * 2 + 1];
 				byte b2 = gb2312.u2n[((int)c) * 2];
 				if (b1 == 0 && b2 == 0) {
 #if NET_2_0
-					// FIXME: handle fallback for GetByteCount().
+					HandleFallback (ref buffer, chars,
+						ref i, ref charCount,
+						bytes, ref byteIndex, ref byteCount, null);
 #else
-					length++;
+					int offset = byteIndex++;
+					if (bytes != null) bytes[offset] = (byte)'?';
 #endif
+				} else {
+					if (bytes != null)
+					{
+						bytes[byteIndex++] = b1;
+						bytes[byteIndex++] = b2;
+					}
+					else
+					{
+						byteIndex += 2;
+					}
 				}
-				else
-					length += 2;
 			}
-			return length;
+			return byteIndex - origIndex;
 		}
-
-		// Get the bytes that result from encoding a character buffer.
-		public unsafe override int GetBytesImpl (char* chars, int charCount,
-					     byte* bytes, int byteCount)
+#else
+		protected int GetBytesInternal(char[] chars, int charIndex, int charCount, byte[] bytes, int byteIndex)
 		{
-			DbcsConvert gb2312 = GetConvert ();
-			int charIndex = 0;
-			int byteIndex = 0;
+			int origIndex = byteIndex;
+			int end = charIndex + charCount;
+			int byteCount = bytes != null ? bytes.Length : 0;
+
+			DbcsConvert gb2312 = GetConvert();
 #if NET_2_0
 			EncoderFallbackBuffer buffer = null;
 #endif
-
-			int origIndex = byteIndex;
-			while (charCount-- > 0) {
-				char c = chars[charIndex++];
-				if (c <= 0x80 || c == 0xFF) { // ASCII
-					bytes[byteIndex++] = (byte)c;
+			for (int i = charIndex; i < end; i++, charCount--)
+			{
+				char c = chars[i];
+				if (c <= 0x80 || c == 0xFF)
+				{ // ASCII
+					int offset = byteIndex++;
+					if (bytes != null) bytes[offset] = (byte)c;
 					continue;
 				}
 				byte b1 = gb2312.u2n[((int)c) * 2 + 1];
 				byte b2 = gb2312.u2n[((int)c) * 2];
-				if (b1 == 0 && b2 == 0) {
+				if (b1 == 0 && b2 == 0)
+				{
 #if NET_2_0
-					HandleFallback (ref buffer, chars,
-						ref charIndex, ref charCount,
-						bytes, ref byteIndex, ref byteCount);
+					HandleFallback (ref buffer, chars, ref i, ref charCount,
+						bytes, ref byteIndex, ref byteCount, null);
 #else
-					bytes[byteIndex++] = (byte)'?';
+					int offset = byteIndex++;
+					if (bytes != null) bytes[] = (byte)'?';
 #endif
-				} else {
-					bytes[byteIndex++] = b1;
-					bytes[byteIndex++] = b2;
+				}
+				else
+				{
+					if (bytes != null)
+					{
+						bytes[byteIndex++] = b1;
+						bytes[byteIndex++] = b2;
+					}
+					else
+					{
+						byteIndex += 2;
+					}
 				}
 			}
 			return byteIndex - origIndex;
 		}
-		
+
+		// Get the bytes that result from encoding a character buffer.
+		public override int GetByteCount(char[] chars, int index, int count)
+		{
+			return GetBytes(chars, index, count, null, 0);
+		}
+
+		// Get the bytes that result from encoding a character buffer.
+		public override int GetBytes(char[] chars, int charIndex, int charCount, byte[] bytes, int byteIndex)
+		{
+			return GetBytesInternal(chars, charIndex, charCount, bytes, byteIndex);
+		}
+#endif
 		// Get the characters that result from decoding a byte buffer.
 		public override int GetCharCount (byte [] bytes, int index, int count)
 		{
diff --git a/mcs/class/I18N/CJK/CP949.cs b/mcs/class/I18N/CJK/CP949.cs
index bda38c9..0d16d22 100644
--- a/mcs/class/I18N/CJK/CP949.cs
+++ b/mcs/class/I18N/CJK/CP949.cs
@@ -117,16 +117,18 @@ namespace I18N.CJK
 
         bool useUHC;
 
+#if !DISABLE_UNSAFE
         // Get the bytes that result from encoding a character buffer.
         public unsafe override int GetByteCountImpl (char* chars, int count)
         {
             int index = 0;
             int length = 0;
+			int end = count;
             DbcsConvert convert = GetConvert ();
 
             // 00 00 - FF FF
-            while (count-- > 0) {
-                char c = chars[index++];
+            for (int i = 0; i < end; i++, charCount--) {
+                char c = chars[i];
                 if (c <= 0x80 || c == 0xFF) { // ASCII
                     length++;
                     continue;
@@ -153,6 +155,7 @@ namespace I18N.CJK
         {
             int charIndex = 0;
             int byteIndex = 0;
+			int end = charCount;
             DbcsConvert convert = GetConvert ();
 #if NET_2_0
             EncoderFallbackBuffer buffer = null;
@@ -160,8 +163,8 @@ namespace I18N.CJK
 
             // 00 00 - FF FF
             int origIndex = byteIndex;
-            while (charCount-- > 0) {
-                char c = chars[charIndex++];
+            for (int = charIndex; i < end; i++, charCount--) {
+                char c = chars[i];
                 if (c <= 0x80 || c == 0xFF) { // ASCII
                     bytes[byteIndex++] = (byte)c;
                     continue;
@@ -170,8 +173,8 @@ namespace I18N.CJK
                 byte b2 = convert.u2n[((int)c) * 2 + 1];
                 if (b1 == 0 && b2 == 0) {
 #if NET_2_0
-                    HandleFallback (ref buffer, chars, ref charIndex, ref charCount,
-                        bytes, ref byteIndex, ref byteCount);
+                    HandleFallback (ref buffer, chars, ref i, ref charCount,
+                        bytes, ref byteIndex, ref byteCount, null);
 #else
                     bytes[byteIndex++] = (byte)'?';
 #endif
@@ -182,8 +185,81 @@ namespace I18N.CJK
             }
             return byteIndex - origIndex;
         }
+#else
+		// Get the bytes that result from encoding a character buffer.
+		public override int GetByteCount(char[] chars, int index, int count)
+		{
+			int length = 0;
+			DbcsConvert convert = GetConvert();
+
+			// 00 00 - FF FF
+			while (count-- > 0)
+			{
+				char c = chars[index++];
+				if (c <= 0x80 || c == 0xFF)
+				{ // ASCII
+					length++;
+					continue;
+				}
+				byte b1 = convert.u2n[((int)c) * 2];
+				byte b2 = convert.u2n[((int)c) * 2 + 1];
+				if (b1 == 0 && b2 == 0)
+				{
+#if NET_2_0
+					// FIXME: handle fallback for GetByteCountImpl().
+					length++;
+#else
+                    length++;
+#endif
+				}
+				else
+					length += 2;
+			}
+			return length;
+		}
+
+		// Get the bytes that result from encoding a character buffer.
+		public override int GetBytes(char[] chars, int charIndex, int charCount, byte[] bytes, int byteIndex)
+		{
+			int byteCount = bytes.Length;
+			int end = charIndex + charCount;
+
+			DbcsConvert convert = GetConvert();
+#if NET_2_0
+			EncoderFallbackBuffer buffer = null;
+#endif
 
-        // Get the characters that result from decoding a byte buffer.
+			// 00 00 - FF FF
+			int origIndex = byteIndex;
+			for (int i = charIndex; i < end; i++, charCount--)
+			{
+				char c = chars[i];
+				if (c <= 0x80 || c == 0xFF)
+				{ // ASCII
+					bytes[byteIndex++] = (byte)c;
+					continue;
+				}
+				byte b1 = convert.u2n[((int)c) * 2];
+				byte b2 = convert.u2n[((int)c) * 2 + 1];
+				if (b1 == 0 && b2 == 0)
+				{
+#if NET_2_0
+					HandleFallback (ref buffer, chars, ref i, ref charCount,
+						bytes, ref byteIndex, ref byteCount, null);
+#else
+                    bytes[byteIndex++] = (byte)'?';
+#endif
+				}
+				else
+				{
+					bytes[byteIndex++] = b1;
+					bytes[byteIndex++] = b2;
+				}
+			}
+			return byteIndex - origIndex;
+		}
+#endif
+		// Get the characters that result from decoding a byte buffer.
         public override int GetCharCount (byte[] bytes, int index, int count)
         {
             return GetDecoder ().GetCharCount (bytes, index, count);
diff --git a/mcs/class/I18N/CJK/CP950.cs b/mcs/class/I18N/CJK/CP950.cs
index acb1aee..c10d87e 100644
--- a/mcs/class/I18N/CJK/CP950.cs
+++ b/mcs/class/I18N/CJK/CP950.cs
@@ -27,6 +27,7 @@ namespace I18N.CJK
 			return DbcsConvert.Big5;
 		}
 
+#if !DISABLE_UNSAFE
 		// Get the bytes that result from encoding a character buffer.
 		public unsafe override int GetByteCountImpl (char* chars, int count)
 		{
@@ -63,13 +64,15 @@ namespace I18N.CJK
 			DbcsConvert convert = GetConvert ();
 			int charIndex = 0;
 			int byteIndex = 0;
+			int end = charCount;
 #if NET_2_0
 			EncoderFallbackBuffer buffer = null;
 #endif
 
 			int origIndex = byteIndex;
-			while (charCount-- > 0) {
-				char c = chars[charIndex++];
+			for (int i = charIndex; i < end; i++, charCount--) 
+			{
+				char c = chars[i];
 				if (c <= 0x80 || c == 0xFF) { // ASCII
 					bytes[byteIndex++] = (byte)c;
 					continue;
@@ -79,8 +82,8 @@ namespace I18N.CJK
 				if (b1 == 0 && b2 == 0) {
 #if NET_2_0
 					HandleFallback (ref buffer, chars,
-						ref charIndex, ref charCount,
-						bytes, ref byteIndex, ref byteCount);
+						ref i, ref charCount,
+						bytes, ref byteIndex, ref byteCount, null);
 #else
 					bytes[byteIndex++] = (byte)'?';
 #endif
@@ -91,7 +94,78 @@ namespace I18N.CJK
 			}
 			return byteIndex - origIndex;
 		}
-		
+#else
+		// Get the bytes that result from encoding a character buffer.
+		public override int GetByteCount(char[] chars, int index, int count)
+		{
+			DbcsConvert convert = GetConvert();
+			int length = 0;
+
+			while (count-- > 0)
+			{
+				char c = chars[index++];
+				if (c <= 0x80 || c == 0xFF)
+				{ // ASCII
+					length++;
+					continue;
+				}
+				byte b1 = convert.u2n[((int)c) * 2 + 1];
+				byte b2 = convert.u2n[((int)c) * 2];
+				if (b1 == 0 && b2 == 0)
+				{
+#if NET_2_0
+					// FIXME: handle fallback for GetByteCountImpl().
+					length++;
+#else
+					length++;
+#endif
+				}
+				else
+					length += 2;
+			}
+			return length;
+		}
+
+		// Get the bytes that result from encoding a character buffer.
+		public override int GetBytes(char[] chars, int charIndex, int charCount, byte[] bytes, int byteIndex)
+		{
+			int byteCount = bytes.Length;
+			int end = charIndex + charCount;
+
+			DbcsConvert convert = GetConvert();
+#if NET_2_0
+			EncoderFallbackBuffer buffer = null;
+#endif
+
+			int origIndex = byteIndex;
+			for (int i = charIndex; i < end; i++, charCount--)
+			{
+				char c = chars[i];
+				if (c <= 0x80 || c == 0xFF)
+				{ // ASCII
+					bytes[byteIndex++] = (byte)c;
+					continue;
+				}
+				byte b1 = convert.u2n[((int)c) * 2 + 1];
+				byte b2 = convert.u2n[((int)c) * 2];
+				if (b1 == 0 && b2 == 0)
+				{
+#if NET_2_0
+					HandleFallback (ref buffer, chars, ref i, ref charCount,
+						bytes, ref byteIndex, ref byteCount, null);
+#else
+					bytes[byteIndex++] = (byte)'?';
+#endif
+				}
+				else
+				{
+					bytes[byteIndex++] = b1;
+					bytes[byteIndex++] = b2;
+				}
+			}
+			return byteIndex - origIndex;
+		}
+#endif
 		// Get the characters that result from decoding a byte buffer.
 		public override int GetChars(byte[] bytes, int byteIndex, int byteCount,
 					     char[] chars, int charIndex)
diff --git a/mcs/class/I18N/CJK/ChangeLog b/mcs/class/I18N/CJK/ChangeLog
index c40f1e2..527dd30 100644
--- a/mcs/class/I18N/CJK/ChangeLog
+++ b/mcs/class/I18N/CJK/ChangeLog
@@ -1,7 +1,3 @@
-2010-10-15  Marek Safar  <marek.safar at gmail.com>
-
-	Clean up few more warnings
-
 2009-10-09  Atsushi Enomoto  <atsushi at ximian.com>
 
 	* ISO2022JP.cs : simply output wrong escape sequence bytes to the
diff --git a/mcs/class/I18N/CJK/ChangeLog.old b/mcs/class/I18N/CJK/ChangeLog.old
deleted file mode 100644
index 527dd30..0000000
--- a/mcs/class/I18N/CJK/ChangeLog.old
+++ /dev/null
@@ -1,295 +0,0 @@
-2009-10-09  Atsushi Enomoto  <atsushi at ximian.com>
-
-	* ISO2022JP.cs : simply output wrong escape sequence bytes to the
-	  output (like .NET does).
-
-2009-04-15  Atsushi Enomoto  <atsushi at ximian.com>
-
-	* jis.table : regenerated. Fixed bug #491799.
-
-2008-06-09  Atsushi Enomoto  <atsushi at ximian.com>
-
-	* ISO2022JP.cs : handle ESC-J sequence which is obsoleted in
-	  JIS X 0213. Fixed bug #398273.
-
-2008-05-16  Atsushi Enomoto  <atsushi at ximian.com>
-
-	* Makefile: I didn't know the syntax ;-)
-
-2008-05-16  Atsushi Enomoto  <atsushi at ximian.com>
-
-	* Makefile: added Test/texts/*.txt to EXTRA_DISTFILES.
-
-2006-01-30  Atsushi Enomoto  <atsushi at ximian.com>
-
-	* DbcsEncoding.cs ISO2022JP.cs GB18030Encoding.cs CP51932.cs
-	  CP949.cs : Fixed windows code page and some minor properties.
-
-2006-01-23  Atsushi Enomoto  <atsushi at ximian.com>
-
-	* DbcsConvert.cs ISO2022JP.cs CP950.cs CP932.cs: author lines.
-	  Monoized CP932.cs which is too deeply indented to read (and
-	  anyways no one other than myself is taking care of it).
-
-2006-01-23  Atsushi Enomoto  <atsushi at ximian.com>
-
-	* KSConvert.cs Big5Convert.cs Gb2312Convert.cs: removed. They could
-	  just be DbcsConvert instances.
-	* I18N.CJK.dll.sources : removed above.
-	* DbcsConvert.cs : added static fields: Big5 and KS.
-	* CP949.cs CP950.cs : use DbcsConvert class directly.
-
-2006-01-23  Atsushi Enomoto  <atsushi at ximian.com>
-
-	* CP936.cs, CP949.cs, CP950.cs :
-	  Added GetByteCountImpl() (there weren't GetByteCount() override
-	  in those classes, so they also save extra byte[] allocation).
-	* CP932.cs, CP51932.cs, GB18030Encoding.cs, ISO2022JP.cs :
-	  GetByteCount() -> GetByteCountImpl().
-	  Fixed ISO2022JPEncoder/Decoder to hold different "shifted_in" flags
-	  for GetByteCountImpl() and GetBytesImpl().
-
-2006-01-23  Atsushi Enomoto  <atsushi at ximian.com>
-
-	* ISO2022JP.cs GB18030Encoding.cs CP936.cs CP51932.cs:
-	  fix warnings.
-
-2006-01-23  Atsushi Enomoto  <atsushi at ximian.com>
-
-	* CP950.cs :
-	  This was the last one encoding which needed incomplete byte
-	  handling.
-	* DbcsEncoding.cs, GB18030Encoding.cs, CP950.cs, CP932.cs,
-	  CP936.cs, CP51932.cs, CP949.cs (all):
-	  Made GetCharCount() and GetChars() in DbcsDecoder as different
-	  internal CheckRange() methods (it is bad design to have those
-	  methods as base methods). Use CheckRange() everywhere.
-
-2006-01-23  Atsushi Enomoto  <atsushi at ximian.com>
-
-	* CP949.cs :
-	  handle incomplete byte (thus conversion implementation went into
-	  CP949Decoder like other DBCS encodings).
-
-2006-01-23  Atsushi Enomoto  <atsushi at ximian.com>
-
-	* CP936.cs :
-	  handle incomplete byte (thus conversion implementation went into
-	  CP936Decoder like other DBCS encodings).
-
-2006-01-20  Atsushi Enomoto  <atsushi at ximian.com>
-
-	* CP51932.cs :
-	  Encoding.GetChars() does not handle incomplete bytes but
-	  Decoder.GetChars() should do it (which was has vanished
-	  when I fixed CP51932 4 days ago). Now it uses Decoder which
-	  preserves incomplete byte like CP932 and CP54936.
-
-2006-01-20  Atsushi Enomoto  <atsushi at ximian.com>
-
-	* CP932.cs :
-	  Implemented Decoder to handle incomplete bytes correctly. Hold
-	  different incomplete bytes for GetChars() and GetCharCount().
-	  "reflesh" parameter in 2.0 is now handled correctly.
-	  Now GetChars()/GetCharCount() in Encoding are implemented
-	  correctly to use Decoder.
-
-2006-01-20  Atsushi Enomoto  <atsushi at ximian.com>
-
-	Fixed bug #77307.
-	* GB18030Encoding.cs : GetEncoder() and GetDecoder() should be
-	  overriden. in the Encoder, refresh parameter should handle
-	  incomplete field at its end of processing. Also it should
-	  differentiate GetByteCount() and GetChars() for its internal
-	  state.
-	* GB18030Source.cs : handle end index of GB18030Map as inclusive,
-	  not exclusive. Reject out-of-range GBX conversion.
-
-2006-01-20  Atsushi Enomoto  <atsushi at ximian.com>
-
-	* GB18030Encoding.cs : GetChars() ditto. Fixed bug #77306.
-
-2006-01-20  Atsushi Enomoto  <atsushi at ximian.com>
-
-	* CP949.cs : GetChars() exactly the same fix as CP950.
-	  Fixed bug #77298.
-
-2006-01-20  Atsushi Enomoto  <atsushi at ximian.com>
-
-	* CP950.cs : GetChars() should filter out invalid index to internal
-	  conversion array. Fixed bug #77274.
-
-2006-01-17  Atsushi Enomoto  <atsushi at ximian.com>
-
-	* DbcsEncoding.cs CP950.cs CP932.cs CP936.cs CP51932.cs CP949.cs :
-	  Made all as really serializable. Removed references to DbcsConvert
-	  and added GetConvert() methods instead.
-
-2006-01-17  Atsushi Enomoto  <atsushi at ximian.com>
-
-	* DbcsEncoding.cs ISO2022JP.cs GB18030Encoding.cs CP950.cs
-	  CP932.cs CP936.cs CP51932.cs CP949.cs (All) :
-	  Marked as [Serializable].
-
-2006-01-16  Atsushi Enomoto  <atsushi at ximian.com>
-
-	* CP936.cs :
-	  Implement GetCharCount(); it is too costy to use GetChars()
-	  in GetCharCount(). Removed extra code in GetChars(). Check table
-	  index range before accessing it by index.
-
-2006-01-16  Atsushi Enomoto  <atsushi at ximian.com>
-
-	* CP51932.cs :
-	  In GetChars(), insufficient byte is not preserved.
-	  Under 1.x profile it is just discarded.
-	  Under 2.0 profile it is converted to \u30FB.
-	  Fixed GetCharCount() to match GetChars().
-
-2006-01-13  Atsushi Enomoto  <atsushi at ximian.com>
-
-	* CP932.cs : GetByteCount() returned insufficient count at PrivateUse
-	  area. Fixed bug #77724.
-
-	  (Additionally, reduced extraneous indentation in switch-cases).
-
-2006-01-12  Atsushi Enomoto  <atsushi at ximian.com>
-
-	* CP51932.cs : oops, another extra debugging code was remaining.
-	  Fixed bug #77223.
-
-2005-12-06  Atsushi Enomoto  <atsushi at ximian.com>
-
-	Now I can rename new CP936_2.cs file to CP936.cs without svn diff mess.
-
-2005-12-06  Atsushi Enomoto  <atsushi at ximian.com>
-
-	* DbcsConvert.cs : added static Gb2312 field for common use.
-	* dbcs-table-generator.cs :
-	  Added shortcut options for BIG5 and GB2312. Compressed data a bit.
-	* CP936.cs, CP936_2.cs : GB2312.TXT does not exist anymore on
-	  unicode.org and it does not work like MS Codepage 936, so added
-	  fresh implementation which is almost the same as CP950.cs.
-	  CP936.cs is therefore removed.
-	* GB18030Encoding.cs :
-	  switched implementation from Gb2312Convert to (base) DbcsConvert
-	  as well as CP936.
-	* gb2312-build.sh : added note that we don't use it anymore.
-	* gb2312.table :
-	  with it CP936 can handles CP936-only codepoints as well.
-	* big5.table : compressed a bit.
-	* I18N.CJK.dll.sources : in the meantime, use CP936_2.cs
-
-2005-12-06  Atsushi Enomoto  <atsushi at ximian.com>
-
-	* renamed from big5-table-generator.cs to dbcs-table-generator.cs.
-
-2005-12-06  Atsushi Enomoto  <atsushi at ximian.com>
-
-	* big5-table-generator.cs : made it to work for GB2312 table
-	  generation purpose (different format than gb2312.table.)
-
-2005-12-06  Atsushi Enomoto  <atsushi at ximian.com>
-
-	* CP936.cs,
-	  GB18030Encoding.cs,
-	  GB18030Source.cs : conversion from Encoding to MonoEncoding and
-	  added fallback support in GEtBytes(Impl), as well as others.
-
-2005-12-05  Atsushi Enomoto  <atsushi at ximian.com>
-
-	* big5-table-generator.cs : new file to generate "big5.table".
-	* CP950.cs : added fallback support. switched to GetBytesImpl().
-	* DbcsEncoding.cs : switched to MonoEncoding (should have been
-	  committed when CP949.cs was committed).
-	* big5.table : updated to match MS CP950.
-
-2005-12-05  Atsushi Enomoto  <atsushi at ximian.com>
-
-	* CP949.cs : migration from GetBytes (of Encoding) to GetBytesImpl
-	  (of MonoEncoding). Added fallback support.
-
-2005-12-05  Atsushi Enomoto  <atsushi at ximian.com>
-
-	* I18N.CJK_test.dll.sources : new file for NUnit test.
-	* Makefile : removed NO_TEST.
-
-2005-12-03  Atsushi Enomoto  <atsushi at ximian.com>
-
-	* CP51932.cs :
-	  GetCharCount() was returning excessive size. Now it is also based
-	  on MonoEncoding, with fallback support.
-
-2005-12-03  Atsushi Enomoto  <atsushi at ximian.com>
-
-	* CP932.cs : oops, wrong range.
-
-2005-12-03  Atsushi Enomoto  <atsushi at ximian.com>
-
-	* CP932.cs :
-	  in GetBytes() \uFF01-\uFF60 are incorrectly mapped to ASCII
-	  characters (they should be mapped to full-width characters).
-	  Base type is now MonoEncoding, without adding fallback support.
-
-2005-12-02  Atsushi Enomoto  <atsushi at ximian.com>
-
-	* ISO2022JP.cs :
-	  Base type is now MonoEncoding (fallbacks are not handled yet).
-	  Largely rewritten to handle SI/SO flag (CP50222)
-	  and mode transition (all) correctly.
-
-2005-11-21  Atsushi Enomoto  <atsushi at ximian.com>
-
-	* CP949.cs : UHC level 2 base number is wrong.
-	  Fixed bug #76760 Patch by Hye-Shik Chang.
-
-2005-11-16  Atsushi Enomoto  <atsushi at ximian.com>
-
-	* GB18030Encoding.cs : check GB2312 first, and then check GB18030.
-	  Fixed GB18030 part of bug #76722.
-
-2005-11-16  Atsushi Enomoto  <atsushi at ximian.com>
-
-	* GB2312Convert.cs , CP936.cs, GB18030Encoding.cs : don't handle
-	  single byte characters in UcsToGbk. Fixed GB2312 part of #76722.
-
-2005-11-01  Atsushi Enomoto  <atsushi at ximian.com>
-
-	* CP949.cs : Now it contains both CP949 (UHC) and CP51949 (EUC) for
-	  Korean encoding. This should fix bug #76588.
-
-2005-09-25  Atsushi Enomoto  <atsushi at ximian.com>
-
-	* I18N.CJK.dll.sources : needs fix as well.
-
-2005-09-25  Atsushi Enomoto  <atsushi at ximian.com>
-
-	* CP50221.cs,
-	  ISO2022JP.cs :
-	  So, now "CP50221.cs" is improper, since it contains all 50220-50222.
-
-2005-09-25  Atsushi Enomoto  <atsushi at ximian.com>
-
-	* CP50221.cs : actually 50220 and 50222 are also iso-2022-jp encodings.
-	  Fixed bug #76139. This file is likely to be renamed.
-
-2005-09-18  Atsushi Enomoto  <atsushi at ximian.com>
-
-	* CP50221.cs, GB18030Encoding.cs : because of silly design
-	  Common/Manager expects fixed class names CPxxxxx. Fixed bug #76139.
-
-2005-08-22  Raja R Harinath  <rharinath at novell.com>
-
-	* Makefile (EXTRA_DISTFILES): Add README.gb18030 and gb18030.table.
-
-2005-08-19  Atsushi Enomoto  <atsushi at ximian.com>
-
-	why didn't we have it? ;-)
-
-	* README.gb18030,
-	  gb18030.table,
-	  GB18030Encoding.cs,
-	  GB18030Source.cs,
-	  Makefile,
-	  I18N.CJK.dll.sources : added support for GB18030 encoding.
-	* Gb2312Convert.cs : added utility conversion methods.
diff --git a/mcs/class/I18N/CJK/DbcsEncoding.cs b/mcs/class/I18N/CJK/DbcsEncoding.cs
index 5768ee4..9c644cd 100644
--- a/mcs/class/I18N/CJK/DbcsEncoding.cs
+++ b/mcs/class/I18N/CJK/DbcsEncoding.cs
@@ -9,6 +9,11 @@ using System;
 using System.Text;
 using I18N.Common;
 
+#if DISABLE_UNSAFE
+using MonoEncoder = I18N.Common.MonoSafeEncoder;
+using MonoEncoding = I18N.Common.MonoSafeEncoding;
+#endif
+
 namespace I18N.CJK
 {
 	[Serializable]
diff --git a/mcs/class/I18N/CJK/GB18030Encoding.cs b/mcs/class/I18N/CJK/GB18030Encoding.cs
index 2cb1ff1..957b72c 100644
--- a/mcs/class/I18N/CJK/GB18030Encoding.cs
+++ b/mcs/class/I18N/CJK/GB18030Encoding.cs
@@ -9,6 +9,11 @@ using System.Reflection;
 using System.Text;
 using I18N.Common;
 
+#if DISABLE_UNSAFE
+using MonoEncoder = I18N.Common.MonoSafeEncoder;
+using MonoEncoding = I18N.Common.MonoSafeEncoding;
+#endif
+
 namespace I18N.CJK
 {
 	[Serializable]
@@ -72,11 +77,7 @@ namespace I18N.CJK
 			return len;
 		}
 
-		public override int GetByteCount (char [] chars, int index, int length)
-		{
-			return new GB18030Encoder (this).GetByteCount (chars, index, length, true);
-		}
-
+#if !DISABLE_UNSAFE
 		public unsafe override int GetByteCountImpl (char* chars, int count)
 		{
 			return new GB18030Encoder (this).GetByteCountImpl (chars, count, true);
@@ -86,6 +87,17 @@ namespace I18N.CJK
 		{
 			return new GB18030Encoder (this).GetBytesImpl (chars, charCount, bytes, byteCount, true);
 		}
+#else
+		public override int GetByteCount (char [] chars, int index, int length)
+		{
+			return new GB18030Encoder (this).GetByteCount (chars, index, length, true);
+		}
+
+		public override int GetBytes(char[] chars, int charIndex, int charCount, byte[] bytes, int byteIndex)
+		{
+			return new GB18030Encoder (this).GetBytes (chars, charIndex, charCount, bytes, byteIndex, true);
+		}
+#endif
 
 		public override int GetCharCount (byte [] bytes, int start, int len)
 		{
@@ -286,6 +298,7 @@ namespace I18N.CJK
 		char incomplete_byte_count;
 		char incomplete_bytes;
 
+#if !DISABLE_UNSAFE
 		public unsafe override int GetByteCountImpl (char* chars, int count, bool refresh)
 		{
 			int start = 0;
@@ -374,7 +387,7 @@ namespace I18N.CJK
 #if NET_2_0
 						HandleFallback (
 							chars, ref charIndex, ref charCount,
-							bytes, ref byteIndex, ref byteCount);
+							bytes, ref byteIndex, ref byteCount, null);
 #else
 						bytes [byteIndex++] = (byte) '?';
 #endif
@@ -419,5 +432,158 @@ namespace I18N.CJK
 
 			return byteIndex - byteStart;
 		}
+#else
+
+		public override int GetByteCount(char[] chars, int index, int count, bool refresh)
+		{
+			int start = 0;
+			int end = count;
+			int ret = 0;
+			while (start < end)
+			{
+				char ch = chars[start];
+				if (ch < 0x80)
+				{
+					// ASCII
+					ret++;
+					start++;
+					continue;
+				}
+				else if (Char.IsSurrogate(ch))
+				{
+					// Surrogate
+					if (start + 1 == end)
+					{
+						incomplete_byte_count = ch;
+						start++;
+					}
+					else
+					{
+						ret += 4;
+						start += 2;
+					}
+					continue;
+				}
+
+				if (ch < 0x80 || ch == 0xFF)
+				{
+					// ASCII
+					ret++;
+					start++;
+					continue;
+				}
+
+				byte b1 = gb2312.u2n[((int)ch) * 2 + 1];
+				byte b2 = gb2312.u2n[((int)ch) * 2];
+				if (b1 != 0 && b2 != 0)
+				{
+					// GB2312
+					ret += 2;
+					start++;
+					continue;
+				}
+
+				// non-GB2312
+				long value = GB18030Source.FromUCS(ch);
+				if (value < 0)
+					ret++; // invalid(?)
+				else
+					ret += 4;
+				start++;
+			}
+
+			if (refresh)
+			{
+				if (incomplete_byte_count != char.MinValue)
+					ret++;
+				incomplete_byte_count = char.MinValue;
+			}
+			return ret;
+		}
+
+		public override int GetBytes(char[] chars, int charIndex, int charCount, byte[] bytes, int byteIndex, bool refresh)
+		{
+			int byteCount = bytes.Length;
+			int charEnd = charIndex + charCount;
+			int byteStart = byteIndex;
+			char ch = incomplete_bytes;
+
+			while (charIndex < charEnd)
+			{
+				if (incomplete_bytes == char.MinValue)
+					ch = chars[charIndex++];
+				else
+					incomplete_bytes = char.MinValue;
+
+				if (ch < 0x80)
+				{
+					// ASCII
+					bytes[byteIndex++] = (byte)ch;
+					continue;
+				}
+				else if (Char.IsSurrogate(ch))
+				{
+					// Surrogate
+					if (charIndex == charEnd)
+					{
+						incomplete_bytes = ch;
+						break; // incomplete
+					}
+					char ch2 = chars[charIndex++];
+					if (!Char.IsSurrogate(ch2))
+					{
+						// invalid surrogate
+#if NET_2_0
+						HandleFallback (chars, ref charIndex, ref charCount,
+							bytes, ref byteIndex, ref byteCount, null);
+#else
+						bytes [byteIndex++] = (byte) '?';
+#endif
+						continue;
+					}
+					int cp = (ch - 0xD800) * 0x400 + ch2 - 0xDC00;
+					GB18030Source.Unlinear(bytes,  byteIndex, GB18030Source.FromUCSSurrogate(cp));
+					byteIndex += 4;
+					continue;
+				}
+
+
+				if (ch <= 0x80 || ch == 0xFF)
+				{
+					// Character maps to itself
+					bytes[byteIndex++] = (byte)ch;
+					continue;
+				}
+
+				byte b1 = gb2312.u2n[((int)ch) * 2 + 1];
+				byte b2 = gb2312.u2n[((int)ch) * 2];
+				if (b1 != 0 && b2 != 0)
+				{
+					bytes[byteIndex++] = b1;
+					bytes[byteIndex++] = b2;
+					continue;
+				}
+
+				long value = GB18030Source.FromUCS(ch);
+				if (value < 0)
+					bytes[byteIndex++] = 0x3F; // invalid(?)
+				else
+				{
+					// non-GB2312
+					GB18030Source.Unlinear(bytes, byteIndex, value);
+					byteIndex += 4;
+				}
+			}
+
+			if (refresh)
+			{
+				if (incomplete_bytes != char.MinValue)
+					bytes[byteIndex++] = 0x3F; // incomplete
+				incomplete_bytes = char.MinValue;
+			}
+
+			return byteIndex - byteStart;
+		}
+#endif
 	}
 }
diff --git a/mcs/class/I18N/CJK/GB18030Source.cs b/mcs/class/I18N/CJK/GB18030Source.cs
index d5dc313..c2fe31f 100644
--- a/mcs/class/I18N/CJK/GB18030Source.cs
+++ b/mcs/class/I18N/CJK/GB18030Source.cs
@@ -8,6 +8,7 @@ using System;
 using System.Globalization;
 using System.Reflection;
 using System.Text;
+using System.Runtime.InteropServices;
 #if BUILD_GENERATOR
 using System.IO;
 using System.Xml;
@@ -49,11 +50,33 @@ namespace I18N.CJK
 			MethodInfo mi = typeof (Assembly).GetMethod (
 				"GetManifestResourceInternal",
 				BindingFlags.NonPublic | BindingFlags.Instance);
+
 			int size = 0;
 			Module mod = null;
-			IntPtr ret = (IntPtr) mi.Invoke (
-				Assembly.GetExecutingAssembly (),
-				new object [] {"gb18030.table", size, mod});
+			IntPtr ret = IntPtr.Zero;
+
+			if (mi != null)
+			{
+				ret = (IntPtr)mi.Invoke(
+				 Assembly.GetExecutingAssembly(),
+				 new object[] { "gb18030.table", size, mod });
+			}
+			else
+			{
+				// DotNet's way ;)
+				using (var ms = Assembly.GetExecutingAssembly()
+					.GetManifestResourceStream("gb18030.table"))
+				{
+					var len = (int)ms.Length;
+					byte* buf = (byte*)Marshal.AllocHGlobal(sizeof(byte) * len);
+
+					for (int i = 0; i < len; i++)
+						buf[i] = (byte)ms.ReadByte();
+					
+					ret = (IntPtr)buf;
+				}
+			}
+
 			if (ret != IntPtr.Zero) {
 				gbx2uni = (byte*) ((void*) ret);
 				gbx2uniSize =
diff --git a/mcs/class/I18N/CJK/ISO2022JP.cs b/mcs/class/I18N/CJK/ISO2022JP.cs
index 3550566..675cd2a 100644
--- a/mcs/class/I18N/CJK/ISO2022JP.cs
+++ b/mcs/class/I18N/CJK/ISO2022JP.cs
@@ -8,6 +8,11 @@ using System;
 using System.Text;
 using I18N.Common;
 
+#if DISABLE_UNSAFE
+using MonoEncoder = I18N.Common.MonoSafeEncoder;
+using MonoEncoding = I18N.Common.MonoSafeEncoding;
+#endif
+
 namespace I18N.CJK
 {
 	[Serializable]
@@ -85,9 +90,13 @@ namespace I18N.CJK
 			return byteCount;
 		}
 
-		public override int GetByteCount (char [] chars, int charIndex, int charCount)
+#if !DISABLE_UNSAFE
+		protected override unsafe int GetBytesInternal(char* chars, int charCount, byte* bytes, int byteCount, bool flush, object state)
 		{
-			return new ISO2022JPEncoder (this, allow_1byte_kana, allow_shift_io).GetByteCount (chars, charIndex, charCount, true);
+			if (state != null)
+				return ((ISO2022JPEncoder)state).GetBytesImpl (chars, charCount, bytes, byteCount, true);
+
+			return new ISO2022JPEncoder (this, allow_1byte_kana, allow_shift_io).GetBytesImpl (chars, charCount, bytes, byteCount, true);
 		}
 
 		public unsafe override int GetByteCountImpl (char* chars, int count)
@@ -99,6 +108,25 @@ namespace I18N.CJK
 		{
 			return new ISO2022JPEncoder (this, allow_1byte_kana, allow_shift_io).GetBytesImpl (chars, charCount, bytes, byteCount, true);
 		}
+#else
+		protected override int GetBytesInternal(char[] chars, int charIndex, int charCount, byte[] bytes, int byteIndex, bool flush, object state)
+		{
+			if (state != null)
+				return ((ISO2022JPEncoder)state).GetBytesInternal(chars, charIndex, charCount, bytes, byteIndex, true);
+
+			return new ISO2022JPEncoder(this, allow_1byte_kana, allow_shift_io).GetBytesInternal(chars, charIndex, charCount, bytes, byteIndex, true);
+		}
+
+		public override int GetByteCount(char[] chars, int charIndex, int charCount)
+		{
+			return new ISO2022JPEncoder(this, allow_1byte_kana, allow_shift_io).GetByteCount(chars, charIndex, charCount, true);
+		}
+
+		public override int  GetBytes(char[] chars, int charIndex, int charCount, byte[] bytes, int byteIndex)
+		{
+			return new ISO2022JPEncoder (this, allow_1byte_kana, allow_shift_io).GetBytes(chars, charIndex, charCount, bytes, byteIndex, true);
+		}
+#endif
 
 		public override int GetCharCount (byte [] bytes, int index, int count)
 		{
@@ -126,96 +154,37 @@ namespace I18N.CJK
 		ISO2022JPMode m = ISO2022JPMode.ASCII;
 		bool shifted_in_count, shifted_in_conv;
 
-		public ISO2022JPEncoder (MonoEncoding owner, bool allow1ByteKana, bool allowShiftIO)
+		public ISO2022JPEncoder(MonoEncoding owner, bool allow1ByteKana, bool allowShiftIO)
 			: base (owner)
 		{
 			this.allow_1byte_kana = allow1ByteKana;
 			this.allow_shift_io = allowShiftIO;
 		}
 
+#if !DISABLE_UNSAFE
 		public unsafe override int GetByteCountImpl (char* chars, int charCount, bool flush)
 		{
-			int charIndex = 0;
-			int end = charCount;
-			int value;
-			int byteCount = 0;
-
-			for (int i = charIndex; i < end; i++) {
-				char ch = chars [i];
-				// When half-kana is not allowed and it is
-				// actually in the input, convert to full width
-				// kana.
-				if (!allow_1byte_kana &&
-					ch >= 0xFF60 && ch <= 0xFFA0)
-					ch = full_width_map [ch - 0xFF60];
-
-				if (ch >= 0x2010 && ch <= 0x9FA5)
-				{
-					if (shifted_in_count) {
-						shifted_in_count = false;
-						byteCount++; // shift_out
-					}
-					if (m != ISO2022JPMode.JISX0208)
-						byteCount += 3;
-					m = ISO2022JPMode.JISX0208;
-					// This range contains the bulk of the CJK set.
-					value = (ch - 0x2010) * 2;
-					value = ((int)(convert.cjkToJis[value])) |
-							(((int)(convert.cjkToJis[value + 1])) << 8);
-				} else if (ch >= 0xFF01 && ch <= 0xFF60) {
-					if (shifted_in_count) {
-						shifted_in_count = false;
-						byteCount++;
-					}
-					if (m != ISO2022JPMode.JISX0208)
-						byteCount += 3;
-					m = ISO2022JPMode.JISX0208;
+			return GetBytesImpl(chars, charCount, null, 0, flush);
+		}
+#else
+		public override int GetByteCount(char[] chars, int charIndex, int charCount, bool flush)
+		{
+			return GetBytesInternal (chars, charIndex, charCount, null, 0, true);
+		}
+#endif
 
-					// This range contains extra characters,
-					value = (ch - 0xFF01) * 2;
-					value = ((int)(convert.extraToJis[value])) |
-							(((int)(convert.extraToJis[value + 1])) << 8);
-				} else if(ch >= 0xFF60 && ch <= 0xFFA0) {
-					if (allow_shift_io) {
-						if (!shifted_in_count) {
-							byteCount++;
-							shifted_in_count = true;
-						}
-					}
-					else if (m != ISO2022JPMode.JISX0201) {
-						byteCount += 3;
-						m = ISO2022JPMode.JISX0201;
-					}
-					value = ch - 0xFF60 + 0xA0;
-				} else if (ch < 128) {
-					if (shifted_in_count) {
-						shifted_in_count = false;
-						byteCount++;
-					}
-					if (m != ISO2022JPMode.ASCII)
-						byteCount += 3;
-					m = ISO2022JPMode.ASCII;
-					value = (int) ch;
-				} else
-					// skip non-convertible character
-					continue;
+#if !DISABLE_UNSAFE
+		private unsafe bool IsShifted(byte *bytes)
+		{
+			return bytes == null ? shifted_in_count : shifted_in_conv;
+		}
 
-				if (value > 0x100)
-					byteCount += 2;
-				else
-					byteCount++;
-			}
-			// must end in ASCII mode
-			if (flush) {
-				if (shifted_in_count) {
-					shifted_in_count = false;
-					byteCount++;
-				}
-				if (m != ISO2022JPMode.ASCII)
-					byteCount += 3;
-				m = ISO2022JPMode.ASCII;
-			}
-			return byteCount;
+		private unsafe void SetShifted(byte *bytes, bool state)
+		{
+			if (bytes == null)
+				shifted_in_count = state;
+			else
+				shifted_in_conv = state;
 		}
 
 		// returns false if it failed to add required ESC.
@@ -225,8 +194,16 @@ namespace I18N.CJK
 			if (cur == next)
 				return;
 
+			// If bytes == null we are just counting chars..
+			if (bytes == null) {
+				byteIndex += 3;
+				cur = next;
+				return;
+			}
+
 			if (byteCount <= 3)
 				throw new ArgumentOutOfRangeException ("Insufficient byte buffer.");
+
 			bytes [byteIndex++] = 0x1B;
 			switch (next) {
 			case ISO2022JPMode.JISX0201:
@@ -244,6 +221,57 @@ namespace I18N.CJK
 			}
 			cur = next;
 		}
+#else
+		private bool IsShifted(byte[] bytes)
+		{
+			return bytes == null ? shifted_in_count : shifted_in_conv;
+		}
+
+		private void SetShifted(byte[] bytes, bool state)
+		{
+			if (bytes == null)
+				shifted_in_count = state;
+			else
+				shifted_in_conv = state;
+		}
+
+		private void SwitchMode(byte[] bytes, ref int byteIndex,
+			ref int byteCount, ref ISO2022JPMode cur, ISO2022JPMode next)
+		{
+			if (cur == next)
+				return;
+
+			// If bytes == null we are just counting chars..
+			if (bytes == null)
+			{
+				byteIndex += 3;
+				cur = next;
+				return;
+			}
+
+			if (byteCount <= 3)
+				throw new ArgumentOutOfRangeException("Insufficient byte buffer.");
+
+			bytes[byteIndex++] = 0x1B;
+			switch (next)
+			{
+				case ISO2022JPMode.JISX0201:
+					bytes[byteIndex++] = 0x28;
+					bytes[byteIndex++] = 0x49;
+					break;
+				case ISO2022JPMode.JISX0208:
+					bytes[byteIndex++] = 0x24;
+					bytes[byteIndex++] = 0x42;
+					break;
+				default:
+					bytes[byteIndex++] = 0x28;
+					bytes[byteIndex++] = 0x42;
+					break;
+			}
+
+			cur = next;
+		}
+#endif
 
 		static readonly char [] full_width_map = new char [] {
 			'\0', '\u3002', '\u300C', '\u300D', '\u3001', '\u30FB', // to nakaguro
@@ -252,13 +280,14 @@ namespace I18N.CJK
 			'\u30AB', '\u30AD', '\u30AF', '\u30B1', '\u30B3',
 			'\u30B5', '\u30B7', '\u30B9', '\u30BB', '\u30BD',
 			'\u30BF', '\u30C1', '\u30C4', '\u30C6', '\u30C8',
-			'\u30C9', '\u30CA', '\u30CB', '\u30CC', '\u30CD',
+			'\u30CA', '\u30CB', '\u30CC', '\u30CD', '\u30CE',
 			'\u30CF', '\u30D2', '\u30D5', '\u30D8', '\u30DB',
 			'\u30DE', '\u30DF', '\u30E0', '\u30E1', '\u30E2',
 			'\u30E4', '\u30E6', '\u30E8', // Ya-Yo
 			'\u30E9', '\u30EA', '\u30EB', '\u30EC', '\u30ED',
-			'\u30EF', '\u30F1', '\u30F3', '\u309B', '\u309C'};
+			'\u30EF', '\u30F3', '\u309B', '\u309C' };
 
+#if !DISABLE_UNSAFE
 		public unsafe override int GetBytesImpl (
 			char* chars, int charCount,
 			byte* bytes, int byteCount, bool flush)
@@ -282,9 +311,10 @@ namespace I18N.CJK
 
 				if (ch >= 0x2010 && ch <= 0x9FA5)
 				{
-					if (shifted_in_conv) {
-						bytes [byteIndex++] = 0x0F;
-						shifted_in_conv = false;
+					if (IsShifted(bytes)) {
+						var offset = byteIndex++;
+						if (bytes != null) bytes [offset] = 0x0F;
+						SetShifted(bytes, false);
 						byteCount--;
 					}
 					switch (m) {
@@ -299,9 +329,10 @@ namespace I18N.CJK
 					value = ((int)(convert.cjkToJis[value])) |
 							(((int)(convert.cjkToJis[value + 1])) << 8);
 				} else if (ch >= 0xFF01 && ch <= 0xFF60) {
-					if (shifted_in_conv) {
-						bytes [byteIndex++] = 0x0F;
-						shifted_in_conv = false;
+					if (IsShifted(bytes)) {
+						var offset = byteIndex++;
+						if (bytes != null) bytes [offset] = 0x0F;
+						SetShifted(bytes, false);
 						byteCount--;
 					}
 					switch (m) {
@@ -322,9 +353,10 @@ namespace I18N.CJK
 					// so here we don't have to consider it.
 
 					if (allow_shift_io) {
-						if (!shifted_in_conv) {
-							bytes [byteIndex++] = 0x0E;
-							shifted_in_conv = true;
+						if (!IsShifted(bytes)) {
+							var offset = byteIndex++;
+							if (bytes != null) bytes [offset] = 0x0E;
+							SetShifted(bytes, true);
 							byteCount--;
 						}
 					} else {
@@ -338,9 +370,10 @@ namespace I18N.CJK
 					}
 					value = ch - 0xFF40;
 				} else if (ch < 128) {
-					if (shifted_in_conv) {
-						bytes [byteIndex++] = 0x0F;
-						shifted_in_conv = false;
+					if (IsShifted(bytes)) {
+						var offset = byteIndex++;
+						if (bytes != null) bytes [offset] = 0x0F;
+						SetShifted(bytes, false);
 						byteCount--;
 					}
 					SwitchMode (bytes, ref byteIndex, ref byteCount, ref m, ISO2022JPMode.ASCII);
@@ -349,29 +382,35 @@ namespace I18N.CJK
 #if NET_2_0
 					HandleFallback (
 						chars, ref i, ref charCount,
-						bytes, ref byteIndex, ref byteCount);
+						bytes, ref byteIndex, ref byteCount, this);
 #endif
 					// skip non-convertible character
 					continue;
 				}
 
 //Console.WriteLine ("{0:X04} : {1:x02} {2:x02}", v, (int) v / 94 + 33, v % 94 + 33);
-				if (value > 0x100) {
+				if (value >= 0x100) {
 					value -= 0x0100;
-					bytes [byteIndex++] = (byte) (value / 94 + 33);
-					bytes [byteIndex++] = (byte) (value % 94 + 33);
+					if (bytes != null) {
+						bytes [byteIndex++] = (byte) (value / 94 + 33);
+						bytes [byteIndex++] = (byte) (value % 94 + 33);
+					} else {
+						byteIndex += 2;
+					}
 					byteCount -= 2;
 				}
 				else {
-					bytes [byteIndex++] = (byte) value;
+					var offset = byteIndex++;
+					if (bytes != null) bytes [offset] = (byte) value;
 					byteCount--;
 				}
 			}
 			if (flush) {
 				// must end in ASCII mode
-				if (shifted_in_conv) {
-					bytes [byteIndex++] = 0x0F;
-					shifted_in_conv = false;
+				if (IsShifted(bytes)) {
+					var offset = byteIndex++;
+					if (bytes != null) bytes [offset] = 0x0F;
+					SetShifted(bytes, false);
 					byteCount--;
 				}
 				if (m != ISO2022JPMode.ASCII)
@@ -379,6 +418,165 @@ namespace I18N.CJK
 			}
 			return byteIndex - start;
 		}
+#else
+		internal int GetBytesInternal(char[] chars, int charIndex, int charCount, byte[] bytes, int byteIndex, bool flush)
+		{
+			int start = byteIndex;
+			int end = charIndex + charCount;
+			int value;
+			int byteCount = bytes != null ? bytes.Length : 0;
+
+			for (int i = charIndex; i < end; i++, charCount--)
+			{
+				char ch = chars[i];
+
+				// When half-kana is not allowed and it is
+				// actually in the input, convert to full width
+				// kana.
+				if (!allow_1byte_kana &&
+					ch >= 0xFF60 && ch <= 0xFFA0)
+					ch = full_width_map[ch - 0xFF60];
+
+				if (ch >= 0x2010 && ch <= 0x9FA5)
+				{
+					if (IsShifted (bytes))
+					{
+						var offset = byteIndex++;
+						if (bytes != null) bytes[offset] = 0x0F;
+						SetShifted (bytes, false);
+						byteCount--;
+					}
+					switch (m)
+					{
+						case ISO2022JPMode.JISX0208:
+							break;
+						default:
+							SwitchMode(bytes, ref byteIndex, ref byteCount, ref m, ISO2022JPMode.JISX0208);
+							break;
+					}
+					// This range contains the bulk of the CJK set.
+					value = (ch - 0x2010) * 2;
+					value = ((int)(convert.cjkToJis[value])) |
+							(((int)(convert.cjkToJis[value + 1])) << 8);
+				}
+				else if (ch >= 0xFF01 && ch <= 0xFF60)
+				{
+					if (IsShifted(bytes))
+					{
+						var offset = byteIndex++;
+						if (bytes != null) bytes[offset] = 0x0F;
+						SetShifted (bytes, false);
+						byteCount--;
+					}
+					switch (m)
+					{
+						case ISO2022JPMode.JISX0208:
+							break;
+						default:
+							SwitchMode(bytes, ref byteIndex, ref byteCount, ref m, ISO2022JPMode.JISX0208);
+							break;
+					}
+
+					// This range contains extra characters,
+					value = (ch - 0xFF01) * 2;
+					value = ((int)(convert.extraToJis[value])) |
+							(((int)(convert.extraToJis[value + 1])) << 8);
+				}
+				else if (ch >= 0xFF60 && ch <= 0xFFA0)
+				{
+					// disallowed half-width kana is
+					// already converted to full-width kana
+					// so here we don't have to consider it.
+
+					if (allow_shift_io)
+					{
+						if (!IsShifted (bytes))
+						{
+							var offset = byteIndex++;
+							if (bytes != null) bytes[offset] = 0x0E;
+							SetShifted (bytes, true);
+							byteCount--;
+						}
+					}
+					else
+					{
+						switch (m)
+						{
+							case ISO2022JPMode.JISX0201:
+								break;
+							default:
+								SwitchMode(bytes, ref byteIndex, ref byteCount, ref m, ISO2022JPMode.JISX0201);
+								break;
+						}
+					}
+					value = ch - 0xFF40;
+				}
+				else if (ch < 128)
+				{
+					if (IsShifted (bytes))
+					{
+						var offset = byteIndex++;
+						if (bytes != null) bytes[offset] = 0x0F;
+						SetShifted (bytes, false);
+						byteCount--;
+					}
+					SwitchMode(bytes, ref byteIndex, ref byteCount, ref m, ISO2022JPMode.ASCII);
+					value = (int)ch;
+				}
+				else
+				{
+#if NET_2_0
+					HandleFallback (chars, ref i, ref charCount,
+						bytes, ref byteIndex, ref byteCount, this);
+#endif
+					// skip non-convertible character
+					continue;
+				}
+
+				//Console.WriteLine ("{0:X04} : {1:x02} {2:x02}", v, (int) v / 94 + 33, v % 94 + 33);
+				if (value >= 0x100)
+				{
+					value -= 0x0100;
+					if (bytes != null)
+					{
+						bytes[byteIndex++] = (byte)(value / 94 + 33);
+						bytes[byteIndex++] = (byte)(value % 94 + 33);
+					}
+					else
+					{
+						byteIndex += 2;
+					}
+					byteCount -= 2;
+				}
+				else
+				{
+					var offset = byteIndex++;
+					if (bytes != null) bytes[offset] = (byte)value;
+					byteCount--;
+				}
+			}
+			if (flush)
+			{
+				// must end in ASCII mode
+				if (IsShifted (bytes))
+				{
+					var offset = byteIndex++;
+					if (bytes != null) bytes[offset] = 0x0F;
+					SetShifted (bytes, false);
+					byteCount--;
+				}
+				if (m != ISO2022JPMode.ASCII)
+					SwitchMode(bytes, ref byteIndex, ref byteCount, ref m, ISO2022JPMode.ASCII);
+			}
+
+			return byteIndex - start;
+		}
+		
+		public override int GetBytes(char[] chars, int charIndex, int charCount, byte[] bytes, int byteIndex, bool flush)
+		{
+			return GetBytesInternal (chars, charIndex, charCount, bytes, byteIndex, flush);
+		}
+#endif
 
 #if NET_2_0
 		public override void Reset ()
@@ -389,6 +587,7 @@ namespace I18N.CJK
 #endif
 	}
 
+
 	internal class ISO2022JPDecoder : Decoder
 	{
 		static JISConvert convert = JISConvert.Convert;
diff --git a/mcs/class/I18N/CJK/Makefile b/mcs/class/I18N/CJK/Makefile
index a91d595..9a22145 100644
--- a/mcs/class/I18N/CJK/Makefile
+++ b/mcs/class/I18N/CJK/Makefile
@@ -4,7 +4,7 @@ include ../../../build/rules.make
 
 LIBRARY = I18N.CJK.dll
 LIBRARY_USE_INTERMEDIATE_FILE = yes
-LOCAL_MCS_FLAGS = /unsafe /resource:big5.table /resource:gb2312.table /resource:jis.table /resource:ks.table /resource:gb18030.table /r:$(corlib) /r:I18N.dll
+LOCAL_MCS_FLAGS = /unsafe /resource:big5.table /resource:gb2312.table /resource:jis.table /resource:ks.table /resource:gb18030.table /r:$(corlib) /r:I18N.dll /define:DISABLE_UNSAFE
 
 EXTRA_DISTFILES = big5.table jis.table gb2312.table ks.table gb18030.table \
 	README.gb18030 \
diff --git a/mcs/class/I18N/CJK/Test/I18N.CJK.Test.cs b/mcs/class/I18N/CJK/Test/I18N.CJK.Test.cs
index 61260ad..ddc58c7 100644
--- a/mcs/class/I18N/CJK/Test/I18N.CJK.Test.cs
+++ b/mcs/class/I18N/CJK/Test/I18N.CJK.Test.cs
@@ -17,11 +17,13 @@ namespace MonoTests.I18N.CJK
 	[TestFixture]
 	public class TestCJK
 	{
+		private global::I18N.Common.Manager Manager = global::I18N.Common.Manager.PrimaryManager;
+
 		void AssertEncode (string utf8file, string decfile, int codepage)
 		{
 			string decoded = null;
 			byte [] encoded = null;
-			using (StreamReader sr = new StreamReader (utf8file,
+			using (StreamReader sr = new StreamReader (utf8file, 
 				Encoding.UTF8)) {
 				decoded = sr.ReadToEnd ();
 			}
@@ -29,7 +31,7 @@ namespace MonoTests.I18N.CJK
 				encoded = new byte [fs.Length];
 				fs.Read (encoded, 0, (int) fs.Length);
 			}
-			Encoding enc = Encoding.GetEncoding (codepage);
+			Encoding enc = Manager.GetEncoding (codepage);
 			byte [] actual;
 
 			// simple string case
@@ -61,7 +63,7 @@ namespace MonoTests.I18N.CJK
 				encoded = new byte [fs.Length];
 				fs.Read (encoded, 0, (int) fs.Length);
 			}
-			Encoding enc = Encoding.GetEncoding (codepage);
+			Encoding enc = Manager.GetEncoding (codepage);
 			char [] actual;
 
 			Assert.AreEqual (decoded.Length,
@@ -83,11 +85,30 @@ namespace MonoTests.I18N.CJK
 		}
 
 		[Test]
+		public void CP936_Encode3 ()
+		{
+			AssertEncode("Test/texts/chinese3-utf8.txt", "Test/texts/chinese3-936.txt", 936);
+		}
+
+		[Test]
 		public void CP936_Decode ()
 		{
 			AssertDecode ("Test/texts/chinese-utf8.txt", "Test/texts/chinese-936.txt", 936);
 		}
 
+		[Test]
+		public void Bug_1531()
+		{
+			string str = @"wqk=";
+			byte[] utf8 = Convert.FromBase64String(str);
+			char[] data = Encoding.UTF8.GetChars(utf8);
+
+			var encoding = Manager.GetEncoding("GB2312");
+			var result = encoding.GetBytes(data);
+
+			Assert.AreEqual(new byte[] { 63 }, result);
+		}
+
 		// BIG5
 
 		[Test]
@@ -97,6 +118,12 @@ namespace MonoTests.I18N.CJK
 		}
 
 		[Test]
+		public void CP950_Encode4 ()
+		{
+			AssertEncode("Test/texts/chinese4-utf8.txt", "Test/texts/chinese4-950.txt", 950);
+		}
+
+		[Test]
 		public void CP950_Decode ()
 		{
 			AssertDecode ("Test/texts/chinese2-utf8.txt", "Test/texts/chinese2-950.txt", 950);
@@ -157,6 +184,12 @@ namespace MonoTests.I18N.CJK
 		}
 
 		[Test]
+		public void CP50220_Encode_3 ()
+		{
+			AssertEncode("Test/texts/japanese3-utf8.txt", "Test/texts/japanese3-50220.txt", 50220);
+		}
+
+		[Test]
 		public void CP50220_Decode ()
 		{
 			AssertDecode ("Test/texts/japanese2-utf8.txt", "Test/texts/japanese2-50220.txt", 50220);
@@ -169,6 +202,12 @@ namespace MonoTests.I18N.CJK
 		}
 
 		[Test]
+		public void CP50221_Encode_3()
+		{
+			AssertEncode("Test/texts/japanese3-utf8.txt", "Test/texts/japanese3-50221.txt", 50221);
+		}
+
+		[Test]
 		public void CP50221_Decode ()
 		{
 			AssertDecode ("Test/texts/japanese-utf8.txt", "Test/texts/japanese-50221.txt", 50221);
@@ -195,7 +234,7 @@ namespace MonoTests.I18N.CJK
 		[Test]
 		public void CP50220BrokenESC ()
 		{
-			Assert.AreEqual ("\u001B$0", Encoding.GetEncoding (50220).GetString (new byte [] {0x1B, 0x24, 0x30}), "#1");
+			Assert.AreEqual ("\u001B$0", Manager.GetEncoding (50220).GetString (new byte [] {0x1B, 0x24, 0x30}), "#1");
 		}
 
 		[Test]
@@ -235,14 +274,14 @@ namespace MonoTests.I18N.CJK
 
 		void GetBytesAllSingleChars (int enc)
 		{
-			Encoding e = Encoding.GetEncoding (enc);
+			Encoding e = Manager.GetEncoding (enc);
 			for (int i = 0; i < 0x10000; i++)
 				e.GetBytes (new char [] { (char)i });
 		}
 
 		void GetCharsAllBytePairs (int enc)
 		{
-			Encoding e = Encoding.GetEncoding (enc);
+			Encoding e = Manager.GetEncoding (enc);
 			byte [] bytes = new byte [2];
 			for (int i0 = 0; i0 < 0x100; i0++) {
 				bytes [0] = (byte) i0;
@@ -289,7 +328,7 @@ namespace MonoTests.I18N.CJK
 #endif
 		public void Encoder54936Refresh ()
 		{
-			Encoding e = Encoding.GetEncoding ("gb18030");
+			Encoding e = Manager.GetEncoding ("gb18030");
 			Encoder d = e.GetEncoder ();
 			byte [] bytes;
 
@@ -313,14 +352,14 @@ namespace MonoTests.I18N.CJK
 		public void Bug491799 ()
 		{
 			Assert.AreEqual (new byte [] {0xEE, 0xFC},
-					   Encoding.GetEncoding (932).GetBytes ("\uFF02"));
+					   Manager.GetEncoding (932).GetBytes ("\uFF02"));
 		}
 
 #if NET_2_0
 		[Test]
 		public void Decoder932Refresh ()
 		{
-			Encoding e = Encoding.GetEncoding (932);
+			Encoding e = Manager.GetEncoding (932);
 			Decoder d = e.GetDecoder ();
 			char [] chars;
 
@@ -340,7 +379,7 @@ namespace MonoTests.I18N.CJK
 		[Test]
 		public void Decoder51932Refresh ()
 		{
-			Encoding e = Encoding.GetEncoding (51932);
+			Encoding e = Manager.GetEncoding (51932);
 			Decoder d = e.GetDecoder ();
 			char [] chars;
 
@@ -368,7 +407,7 @@ namespace MonoTests.I18N.CJK
 		[Test]
 		public void Decoder936Refresh ()
 		{
-			Encoding e = Encoding.GetEncoding (936);
+			Encoding e = Manager.GetEncoding (936);
 			Decoder d = e.GetDecoder ();
 			char [] chars;
 
@@ -391,7 +430,7 @@ namespace MonoTests.I18N.CJK
 		[Test]
 		public void Decoder949Refresh ()
 		{
-			Encoding e = Encoding.GetEncoding (949);
+			Encoding e = Manager.GetEncoding (949);
 			Decoder d = e.GetDecoder ();
 			char [] chars;
 
@@ -414,7 +453,7 @@ namespace MonoTests.I18N.CJK
 		[Test]
 		public void Decoder950Refresh ()
 		{
-			Encoding e = Encoding.GetEncoding (950);
+			Encoding e = Manager.GetEncoding (950);
 			Decoder d = e.GetDecoder ();
 			char [] chars;
 
@@ -439,7 +478,7 @@ namespace MonoTests.I18N.CJK
 		[Test]
 		public void Decoder51932NoRefresh ()
 		{
-			Encoding e = Encoding.GetEncoding (51932);
+			Encoding e = Manager.GetEncoding (51932);
 			Decoder d = e.GetDecoder ();
 			char [] chars;
 
@@ -462,7 +501,7 @@ namespace MonoTests.I18N.CJK
 		[Test]
 		public void Decoder936NoRefresh ()
 		{
-			Encoding e = Encoding.GetEncoding (936);
+			Encoding e = Manager.GetEncoding (936);
 			Decoder d = e.GetDecoder ();
 			char [] chars;
 
@@ -485,7 +524,7 @@ namespace MonoTests.I18N.CJK
 		[Test]
 		public void Decoder949NoRefresh ()
 		{
-			Encoding e = Encoding.GetEncoding (949);
+			Encoding e = Manager.GetEncoding (949);
 			Decoder d = e.GetDecoder ();
 			char [] chars;
 
@@ -508,7 +547,7 @@ namespace MonoTests.I18N.CJK
 		[Test]
 		public void Decoder950NoRefresh ()
 		{
-			Encoding e = Encoding.GetEncoding (950);
+			Encoding e = Manager.GetEncoding (950);
 			Decoder d = e.GetDecoder ();
 			char [] chars;
 
@@ -532,7 +571,7 @@ namespace MonoTests.I18N.CJK
 		public void HandleObsoletedESCJ () // bug #398273
 		{
 			byte [] b = new byte [] {0x64, 0x6f, 0x6e, 0x1b, 0x24, 0x42, 0x21, 0x47, 0x1b, 0x28, 0x4a, 0x74};
-			string s = Encoding.GetEncoding ("ISO-2022-JP").GetString (b);
+			string s = Manager.GetEncoding ("ISO-2022-JP").GetString (b);
 			Assert.AreEqual ("don\u2019t", s);
 
 		}
diff --git a/mcs/class/I18N/CJK/Test/texts/chinese3-936.txt b/mcs/class/I18N/CJK/Test/texts/chinese3-936.txt
new file mode 100644
index 0000000..f834b89
--- /dev/null
+++ b/mcs/class/I18N/CJK/Test/texts/chinese3-936.txt
@@ -0,0 +1 @@
+<title>ºÚ°×ÌõÎÆ´òµ×ÉÀ´îÅä - Å®ÐÔ¼ÒÔ° - Á÷ÐзþÊδîÅä²Î¿¼</title><meta http-equiv=Content-Type name=keywords content=?????¨°?¡Á??,????><meta http-equiv=Content-Type content="text/html; charset=GB2312">
\ No newline at end of file
diff --git a/mcs/class/I18N/CJK/Test/texts/chinese3-utf8.txt b/mcs/class/I18N/CJK/Test/texts/chinese3-utf8.txt
new file mode 100644
index 0000000..f697057
--- /dev/null
+++ b/mcs/class/I18N/CJK/Test/texts/chinese3-utf8.txt
@@ -0,0 +1 @@
+<title>黑白条纹打底衫搭配 - 女性家园 - 流行服饰搭配参考</title><meta http-equiv=Content-Type name=keywords content=ÌõÎÆ´òµ×ÉÀ,Å®ÐÔ><meta http-equiv=Content-Type content="text/html; charset=GB2312">
\ No newline at end of file
diff --git a/mcs/class/I18N/CJK/Test/texts/chinese4-950.txt b/mcs/class/I18N/CJK/Test/texts/chinese4-950.txt
new file mode 100644
index 0000000..f9b2da5
--- /dev/null
+++ b/mcs/class/I18N/CJK/Test/texts/chinese4-950.txt
@@ -0,0 +1,892 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+<meta http-equiv="imagetoolbar" content="no"/>
+<meta name="description" content="FreeBSD 6.x + Netatalk 2.0.3 CJK patched + Samba 3.0.22 ¥æ¤e´ú¸Õ... @. at a ¤@¨Çª`·N¨Æ¶µ¡G 1. ¦b smb.conf ·í¤¤³]©w \"unix charset\" »P \"display charset\" ®É³Ì¦n¬Û¦P¡A ?? §_«h«Ü®e©ö¥X²{¶Ã°¨ªº±¡ªp¡C¡]°Ñ¦Ò¤U­±¸Ñ»¡¡A¨Ã½Ð°Ñ¦Ò¡G ??? http://phorum.vb..." />
+<meta name="medium" content="blog" />
+<link rel="image_src" type="image/jpeg" href="http://l.yimg.com/f/i/tw/wretch/social/facebook_icon_blog.gif" />
+<title>FreeBSD 6.x + Netatalk + Samba ¥æ¤e´ú¸Õ... - ²ª¸ñ... - µL¦W¤p¯¸</title>
+<link rel="shortcut icon" type="image/x-icon" href="http://l.yimg.com/e/serv/common/favicon.ico" />
+<meta name="keywords" content="">
+<meta property="og:type" content="article" />
+<meta property="og:title" content="FreeBSD 6.x + Netatalk + Samba ¥æ¤e´ú¸Õ... - ²ª¸ñ... - µL¦W¤p¯¸" />
+<meta property="og:description" content="FreeBSD 6.x + Netatalk 2.0.3 CJK patched + Samba 3.0.22 ¥æ¤e´ú¸Õ... @. at a ¤@¨Çª`·N¨Æ¶µ¡G 1. ¦b smb.conf ·í¤¤³]©w \"unix charset\" »P \"display charset\" ®É³Ì¦n¬Û¦P¡A ?? §_«h«Ü®e©ö¥X²{¶Ã°¨ªº±¡ªp¡C¡]°Ñ¦Ò¤U­±¸Ñ»¡¡A¨Ã½Ð°Ñ¦Ò¡G ??? http://phorum.vb..." />
+<meta property="og:url" content="http://www.wretch.cc/blog/fsj/3269525" />
+<meta property="og:site_name" content="µL¦W¤p¯¸ºô»x" />
+<meta property="og:image" content="http://l.yimg.com/e/cover/fsj_90.jpg?2" />
+ 
+<link rel="canonical" href="http://www.wretch.cc/blog/fsj/3269525" />
+<link rel="stylesheet" href="http://l.yimg.com/e/serv/blog/css/top.css" type="text/css" />
+<link rel="stylesheet" href="http://f7.wretch.yimg.com/fsj/files/blog.css?1221572096" type="text/css">
+<link rel="stylesheet" href="http://l.yimg.com/e/serv/common/css/sharing.css?20110808" type="text/css">
+<link rel="stylesheet" href="http://l.yimg.com/e/serv/blog/css/font.css?20110209" type="text/css" />
+<link rel="stylesheet" type="text/css" href="http://yui.yahooapis.com/2.8.1/build/container/assets/skins/sam/container.css">
+<link rel="stylesheet" type="text/css" href="http://yui.yahooapis.com/2.8.1/build/button/assets/skins/sam/button.css">
+<link rel="stylesheet" type="text/css" href="http://l.yimg.com/e/serv/blog/css/antiPhishing.css">
+<link rel="stylesheet" type="text/css" href="http://l.yimg.com/e/serv/blog/css/trackback.css?20111123">
+
+
+<link rel="stylesheet" href="http://l.yimg.com/e/serv/blog/css/friend_picker.css" type="text/css">
+
+<script type="text/javascript" src="http://l.yimg.com/e/serv/blog/js/func_blog.js?20100908"></script>
+<script type="text/javascript" src="http://l.yimg.com/e/serv/common/js/swfobject.js"></script>
+<script type="text/javascript" src="http://l.yimg.com/e/serv/common/js/jwplayer.js"></script>
+<script type="text/javascript" src="http://l.yimg.com/qo/widget/kplizer_loader.js"></script>
+
+
+<script type="text/javascript" src="http://yui.yahooapis.com/combo?2.5.2/build/yahoo-dom-event/yahoo-dom-event.js&2.5.2/build/imageloader/imageloader-min.js&2.5.2/build/get/get-min.js"></script>
+<script type="text/javascript">
+var YUD = YAHOO.util.Dom, YUE = YAHOO.util.Event, YUG = YAHOO.util.Get, $ = YAHOO.util.Dom.get;
+</script>
+<style>
+</style>
+</head>
+
+<body id="blog_main" class="yui-skin-sam">
+<!-- nv hugewrepper --><div id="hugewrapper"><input id="wretch-crumb" type="hidden" value="&.c=Lp3GCObMNHg&.t=1322178371">
+<input id="static-path" type="hidden" value="http://l.yimg.com/e/serv/common/">
+<link rel="stylesheet" href="http://l.yimg.com/e/serv/common/css/kukubar.css?20111123" type="text/css">
+<style>
+.kukubar-customized {
+    background:#EEEDDD; /* old browsers */
+    background: -moz-linear-gradient(top, #FFFFFF 0%, #EEEDDD 100%); /* firefox */
+    background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#FFFFFF), color-stop(100%,#EEEDDD)); /* webkit */
+
+}
+</style>
+<div id="kukubar-upper" class="font-black kukubar-customized kukubar-bar">
+    <div class="left-side">
+        <div id="wretch-logo" class="bar-block bar-block-click">
+        <h1><a class="bar-link" tabindex="1" href="http://tw.rd.yahoo.com/referurl/wretch/kk/u/haha/logo/*http://www.wretch.cc/">µL¦W¤p¯¸</a></h1>
+        </div>
+        <div id="wretch-service" class="bar-block bar-block-click">
+                        <a class="current-service bar-link theme" tabindex="2" href="http://tw.rd.yahoo.com/referurl/wretch/kk/u/haha/B_FP/*http://www.wretch.cc/blog"/>Blog</a>
+            <span class="bar-block-btn" tabindex="3">®i¶}</span>
+            <ul class="dropdown blog-service">
+                <li class="album-index"><a class="bar-link" href="http://tw.rd.yahoo.com/referurl/wretch/kk/u/haha/A_FP/*http://www.wretch.cc/album">Album</a></li>
+                <li class="blog-index"><a class="bar-link" href="http://tw.rd.yahoo.com/referurl/wretch/kk/u/haha/B_FP/*http://www.wretch.cc/blog">Blog</a></li>
+                <li class="video-index"><a class="bar-link" href="http://tw.rd.yahoo.com/referurl/wretch/kk/u/haha/V_FP/*http://www.wretch.cc/video">Video</a></li>
+                <li class="digu-index"><a class="bar-link" href="http://tw.rd.yahoo.com/referurl/wretch/kk/u/haha/D_FP/*http://www.wretch.cc/digu">Digu</a></li>
+                <li class="join-index"><a class="bar-link" href="http://tw.rd.yahoo.com/referurl/wretch/kk/u/haha/J_FP/*http://www.wretch.cc/join">Join</a></li>
+                <li><a class="bar-link" href="http://tw.rd.yahoo.com/referurl/wretch/kk/u/haha/Y/*http://tw.yahoo.com/">Yahoo!</a></li>
+                <li><a class="bar-link" href="http://tw.rd.yahoo.com/referurl/wretch/kk/u/haha/help/*http://tw.help.cc.yahoo.com/help_cp.html?product=53">Help</a></li>
+                <li><a class="bar-link" href="http://tw.rd.yahoo.com/referurl/wretch/kk/u/haha/vip/*http://bill.wretch.cc/">Premium</a></li>
+            </ul>
+        </div>
+        <div id="infozone">
+             <ul>
+                            <li><a href="http://www.wretch.cc/?cid=1145" class="theme">¤µ¤é¥DÃD¡G¼¯¤H¨Ó±ÀÂË ¥­»ù¨É¤­¬P</a></li>
+                            <li><a href="http://www.wretch.cc/?cid=1146" class="theme">¤µ¤é¥DÃD¡G¥V¤Ñ«ç¬ï¡H ±Ð§AÂæ·d©w</a></li>
+                        </ul>
+        </div>
+    </div>
+    
+    
+    <div class="right-side">
+        <div id="wretch-search" class="bar-block">
+            <form method="get" action="http://tw.blog.search.yahoo.com/search" name="searchForm">
+                            <fieldset>
+                    <legend>Article<span>¿ï¾ÜªA°È</span></legend>
+                    <div class="service-list dropdown">
+                        <input type="radio" id="srch-blog" name="type" value="article" checked="checked" data="checked">
+                        <label for="srch-blog" _target="Article Search">Article</label>
+                        <input type="radio" id="srch-album" name="type" value="photo" checked="false" data="false">
+                        <label for="srch-album" _target="Album Search">Album</label>
+                        <input type="radio" id="srch-video" name="type" value="video" checked="false" data="false">
+                        <label for="srch-video" _target="Video Search">Video</label>
+                    </div>
+                    <div class="search-field">
+                        <label for="wretch-search-text" class="hidden">·j´M</label>
+                        <input id="wretch-search-text" type="text" name="p" title="Article Search" value="Article Search" class="blur">
+                        <input type="hidden" value="wretch" name="provider">
+                        <input type="hidden" value="cb-wretch" name="fr">
+                        <input id="wretch-search-btn" type="submit" value="°e¥X">
+                    </div>
+                </fieldset>
+            </form>
+        </div>        
+                <div id="wretch-login" class="bar-block bar-block-click bar-link no-hover">
+                            <ul class="login-links">
+                <li class="link-item first"><a class="bar-link theme" href="http://tw.rd.yahoo.com/referurl/wretch/kk/u/haha/login/*http://www.wretch.cc/IDintegration/?ref=%2525252Fblog%2525252Ffsj%2525252F3269525">Login</a></li>
+                <li class="link-item"><a class="bar-link theme" href="http://tw.rd.yahoo.com/referurl/wretch/kk/u/haha/activate/*http://www.wretch.cc/IDintegration/">Register</a></li>
+            </ul>
+                        </div>
+ 
+    </div>
+</div>
+<div id="bigcontainer" style="position: relative !important; zoom:1 !important;" >
+<div id="container1">
+<div id="container2">
+
+  <div id="banner">
+  <div id="pageheader">
+    <h1>
+      <a href="/blog/fsj">²ª¸ñ...</a>
+      <span class="description">
+        FreeBSD 6.x + Netatalk + Samba ¥æ¤e´ú¸Õ...      </span>
+    </h1>
+
+    <div id="description2">
+    <script>
+    var desc_iframeW=65535, tmpW=0;
+    tmpW = document.getElementById('container1').clientWidth;
+    if(tmpW > 0)
+      desc_iframeW = Math.min(desc_iframeW, tmpW);
+    tmpW = document.getElementById('container2').clientWidth;
+    if(tmpW > 0)
+      desc_iframeW = Math.min(desc_iframeW, tmpW);
+    tmpW = document.getElementById('banner').clientWidth;
+    if(tmpW > 0)
+      desc_iframeW = Math.min(desc_iframeW, tmpW);
+    tmpW = document.getElementById('pageheader').clientWidth;
+    if(tmpW > 0)
+      desc_iframeW = Math.min(desc_iframeW, tmpW);
+    tmpW = document.getElementById('description2').clientWidth;
+    if(tmpW > 0)
+      desc_iframeW = Math.min(desc_iframeW, tmpW);
+    function desc_autoWidth(iframe)
+    {
+      if(desc_iframeW > 0 && desc_iframeW < 65535)
+      {
+        iframe.width = desc_iframeW;
+      }
+    }
+    </script>
+      <span class="description">
+        There is no truth.  There is only perception.  ~Gustave Flaubert      </span>
+    </div>
+  </div>
+</div>
+
+
+<div id="main2">
+
+<div id="content">
+<input type="hidden" name="check_url" value="on">
+<div class="blog" >
+    
+          <div class="date">
+        <div class="datediv">
+          April 14, 2006        </div>
+      </div>
+
+      <div class="blogbody">
+        <div class="blogbody2">
+            <div class="articletext">
+            <a name="3269525"></a>
+            <h3 class="title">FreeBSD 6.x + Netatalk + Samba ¥æ¤e´ú¸Õ...</h3>
+                          <div class="social-wrapper">
+<div class="social-widget">
+  <div class="bd">  
+      <a class="fb" title="¤À¨É¦b§ÚªºFacebook" target="_blank" href="http://tw.rd.yahoo.com/referurl/wretch/shareout/blog/facebook/SIG=17veajg8v/*http%3A//www.facebook.com/sharer.php?u=http%3A%2F%2Fwww.wretch.cc%2Frd%2Fblog%2Ffacebook%2Fwww.wretch.cc%2Fblog%2Ffsj%2F3269525&t=FreeBSD+6.x+%2B+Netatalk+%2B+Samba+%E4%BA%A4%E5%8F%89%E6%B8%AC%E8%A9%A6...-fsj%E7%9A%84%E7%84%A1%E5%90%8D%E5%B0%8F%E7%AB%99">¤À¨É¦b§ÚªºFacebook</a>
+      <a class="plurk" title="¤À¨É¦b§ÚªºPlurk" target="_blank" href="http://tw.rd.yahoo.com/referurl/wretch/shareout/blog/plurk/SIG=189j25oqs/*http%3A//www.plurk.com/?qualifier=shares&status=http%3A%2F%2Fwww.wretch.cc%2Frd%2Fblog%2Fplurk%2Fwww.wretch.cc%2Fblog%2Ffsj%2F3269525+%28FreeBSD+6.x+%2B+Netatalk+%2B+Samba+%E4%BA%A4%E5%8F%89%E6%B8%AC%E8%A9%A6...-fsj%E7%9A%84%E7%84%A1%E5%90%8D%E5%B0%8F%E7%AB%99%29">¤À¨É¦b§ÚªºPlurk</a>
+      <a class="yim" title="¤À¨É¦b§Úªº§Y®É³q" href="ymsgr:customstatus?FreeBSD+6.x+%2B+Netatalk+%2B+Samba+%E4%BA%A4%E5%8F%89%E6%B8%AC%E8%A9%A6...-fsj%E7%9A%84%E7%84%A1%E5%90%8D%E5%B0%8F%E7%AB%99+http%3A%2F%2Fwww.wretch.cc%2Frd%2Fblog%2Fyim%2Fwww.wretch.cc%2Fblog%2Ffsj%2F3269525">¤À¨É¦b§Úªº§Y®É³q</a>
+  </div>
+</div>
+<div class="wretch-reblog fixinline">
+    <div class="bd bubble-none">  
+        <a class="wretch" href="http://www.wretch.cc/blog/post.php?rtype=article&t=FreeBSD+6.x+%2B+Netatalk+%2B+Samba+%E4%BA%A4%E5%8F%89%E6%B8%AC%E8%A9%A6...&tl=http%3A%2F%2Fwww.wretch.cc%2Fblog%2Ffsj%2F3269525&d=FreeBSD+6.x+%2B+Netatalk+2.0.3+CJK+patched+%2B+Samba+3.0.22+%E4%BA%A4%E5%8F%89%E6%B8%AC%E8%A9%A6...+%40.%40a%0D%0A%E4%B8%80%E4%BA%9B%E6%B3%A8%E6%84%8F%E4%BA%8B%E9%A0%85%EF%BC%9A%0D%0A1.+%E5%9C%A8+smb.conf+%E7%95%B6%E4%B8%AD%E8%A8%AD%E5%AE%9A+%22unix+charset%22+%E8%88%87+%22display+charset%22+%E6%99%82%E6%9C%80%E5%A5%BD%E7%9B%B8%E5%90%8C%E2%80%A6&a=fsj&al=http%3A%2F%2Fwww.wretch.cc%2Fuser%2Ffsj" target="_blank" title="µo¤å¦ÜµL¦W">µo¤å
+                </a>
+    </div>
+</div>
+
+<iframe class="fixinline" src="http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fwww.wretch.cc%2Fblog%2Ffsj%2F3269525&layout=button_count&show_faces=false&width=92&action=like&colorscheme=light&height=21" scrolling="no" frameborder="0" style="overflow:hidden; width:92px; height:21px;" allowTransparency="true"></iframe>
+</div>
+                        
+
+            <div class="innertext">
+              <p><p>FreeBSD 6.x + Netatalk 2.0.3 CJK patched + Samba 3.0.22 ¥æ¤e´ú¸Õ... @. at a</p>
+<p>¤@¨Çª`·N¨Æ¶µ¡G</p>
+<p>1. ¦b smb.conf ·í¤¤³]©w "unix charset" »P "display charset" ®É³Ì¦n¬Û¦P¡A<br/>
+?? §_«h«Ü®e©ö¥X²{¶Ã°¨ªº±¡ªp¡C¡]°Ñ¦Ò¤U­±¸Ñ»¡¡A¨Ã½Ð°Ñ¦Ò¡G<br/>
+??? <a href="http://phorum.vbird.org/viewtopic.php?t=22001" target="_blank">http://phorum.vbird.org/viewtopic.php?t=22001</a>¡^</p>
+<p>2. Write/Read OK ©Î Write/Read Mangled ¥Nªí±q PC ©Î Mac «þ¨©Àɮרì¤À¨É¥X<br/>
+?? ¨Óªº¨÷©vªºµ²ªG¡Anetatalk »P samba ³£³]©w¦b /home/share</p>
+<p>3. ¨C´ú¸Õ¤£¦Pªº³]©w¡A§Ú·|±N¬ÛÃöªA°È°±¤î¡AµM«á²M°£ /home/share ¸Ì­±©Ò¦³ªF<br/>
+?? ¦è¡C</p>
+<p>4. PC ¦³¨Ï¥Î Unicode ¸É§¹­pµe (<a href="http://uao.cpatch.org/" target="_blank">http://uao.cpatch.org/</a>) ­×¸É¹L¡C</p>
+<p>5. ´ú¸ÕÀÉ®×¥]¬A¤é¤åÀɦW¡A¨Ò¦p¡G"¦Ë¤«¸Ö´¨½ - ¥@¬É¤î??.mp3" <br/>
+?? ¡]·íµM¡A¨º¬O§Ú±q <a href="http://www.shinkong-being.com.tw" target="_blank">http://www.shinkong-being.com.tw</a> ¶Rªº CD Âà¥X¨Óªº XD¡^</p>
+<p>6. §Ú¥u³]©w setenv LC_CTYPE=zh_TW.Big5 »P LC_CTYPE=en_US.ISO8859-1 ¥H¤Î<br/>
+??? LC_CTYPE=UTF8, LANG «hºû«ù en_US.ISO8859-1 ·Pı¨S®t£°... ¥]¬A¥Î mc ¨Ó¬Ý<br/>
+?? ¡]¥]¬A¥Î SecureNetTerm ³z¹L ssh2 ³s½u©Îª½±µ¦b console ©³¤U...¡^<br/>
+?? ¦ü¥G­n¦b X ©³¤U¤~¯à°Ï¤À®t§O...</p>
+<p>7. ¨SªÅ¾ã²z¦¨ªí®æ¡A¦Û¤v¬Ý¬Ý§a... :p</p>
+<code>
+<p>===========================================================================<br/>
+smb.conf<br/>
+[global]<br/>
+??? dos charset = CP950<br/>
+??? unix charset = CP950<br/>
+??? display charset = CP950<br/>
+===========================================================================<br/>
+afpd.conf<br/>
+??? -unixcodepage ISO-8859-1 -maccodepage MAC_CHINESE_TRAD</p>
+<p>AppleVolumes.default<br/>
+??? volcharset:CP950 maccharset:MAC_CHINESE_TRAD</p>
+<p>Write/Read OK (in FreeBSD Mac OK, PC OK, but NOT Japanese file name, <br/>
+PC Japanese file name mangled, Mac Japanese file OK.)<br/>
+===========================================================================<br/>
+afpd.conf<br/>
+??? -unixcodepage ISO-8859-1 -maccodepage MAC_CHINESE_TRAD</p>
+<p>AppleVolumes.default<br/>
+??? volcharset:zh_TW.Big5 maccharset:MAC_CHINESE_TRAD</p>
+<p>Apr 14 15:01:24 bad afpd[1778]: Required conversion from zh_TW.Big5 to UCS-2 not supported<br/>
+Apr 14 15:01:24 bad afpd[1778]: Setting codepage zh_TW.Big5 as volume codepage failed</p>
+<p>Connection Failed<br/>
+===========================================================================<br/>
+afpd.conf<br/>
+??? -unixcodepage ISO-8859-1 -maccodepage MAC_CHINESE_TRAD</p>
+<p>AppleVolumes.default<br/>
+??? volcharset:BIG5 maccharset:MAC_CHINESE_TRAD</p>
+<p>Apr 14 15:17:58 bad afpd[1993]: WARNING: volume encoding BIG5 is *not* supported by netatalk, expect problems !!!!</p>
+<p>Write/Read OK<br/>
+===========================================================================<br/>
+afpd.conf<br/>
+??? -unixcodepage ISO-8859-1 -maccodepage MAC_CHINESE_TRAD</p>
+<p>AppleVolumes.default<br/>
+??? volcharset:MAC_CHINESE_TRAD maccharset:MAC_CHINESE_TRAD</p>
+<p>Apr 14 15:20:03 bad afpd[2051]: WARNING: volume encoding MAC_CHINESE_TRAD is *not* supported by netatalk, expect problems !!!!</p>
+<p>Write/Read OK<br/>
+===========================================================================<br/>
+afpd.conf<br/>
+??? -unixcodepage ISO-8859-1 -maccodepage MAC_CHINESE_TRAD</p>
+<p>AppleVolumes.default<br/>
+??? volcharset:FOOBAR maccharset:MAC_CHINESE_TRAD</p>
+<p>Apr 14 15:21:38 bad afpd[2087]: Required conversion from FOOBAR to UCS-2 not supported<br/>
+Apr 14 15:21:38 bad afpd[2087]: Setting codepage FOOBAR as volume codepage failed</p>
+<p>Connection Failed<br/>
+===========================================================================<br/>
+afpd.conf<br/>
+??? -unixcodepage ISO-8859-1 -maccodepage MAC_CHINESE_TRAD</p>
+<p>AppleVolumes.default<br/>
+??? volcharset:UTF8 maccharset:MAC_CHINESE_TRAD</p>
+<p>Write/Read Mangled<br/>
+===========================================================================<br/>
+===========================================================================<br/>
+afpd.conf<br/>
+??? -unixcodepage CP950 -maccodepage MAC_CHINESE_TRAD</p>
+<p>AppleVolumes.default<br/>
+??? volcharset:CP950 maccharset:MAC_CHINESE_TRAD</p>
+<p>Write/Read OK<br/>
+===========================================================================<br/>
+afpd.conf<br/>
+??? -unixcodepage CP950 -maccodepage MAC_CHINESE_TRAD</p>
+<p>AppleVolumes.default<br/>
+??? volcharset:zh_TW.Big5 maccharset:MAC_CHINESE_TRAD</p>
+<p>Apr 14 15:26:13 bad afpd[2176]: Required conversion from zh_TW.Big5 to UCS-2 notsupported<br/>
+Apr 14 15:26:13 bad afpd[2176]: Setting codepage zh_TW.Big5 as volume codepage failed</p>
+<p>Connection Failed<br/>
+===========================================================================<br/>
+afpd.conf<br/>
+??? -unixcodepage CP950 -maccodepage MAC_CHINESE_TRAD</p>
+<p>AppleVolumes.default<br/>
+??? volcharset:BIG5 maccharset:MAC_CHINESE_TRAD</p>
+<p>Apr 14 15:27:50 bad afpd[2210]: WARNING: volume encoding BIG5 is *not* supported by netatalk, expect problems !!!!</p>
+<p>Write/Read OK<br/>
+===========================================================================<br/>
+afpd.conf<br/>
+??? -unixcodepage CP950 -maccodepage MAC_CHINESE_TRAD</p>
+<p>AppleVolumes.default<br/>
+??? volcharset:MAC_CHINESE_TRAD maccharset:MAC_CHINESE_TRAD</p>
+<p>Apr 14 15:29:37 bad afpd[2260]: WARNING: volume encoding MAC_CHINESE_TRAD is *not* supported by netatalk, expect problems !!!!</p>
+<p>Write/Read OK<br/>
+===========================================================================<br/>
+afpd.conf<br/>
+??? -unixcodepage CP950 -maccodepage MAC_CHINESE_TRAD</p>
+<p>AppleVolumes.default<br/>
+??? volcharset:UTF8 maccharset:MAC_CHINESE_TRAD</p>
+<p>Write/Read OK<br/>
+===========================================================================<br/>
+afpd.conf<br/>
+??? -unixcodepage CP950 -maccodepage MAC_CHINESE_TRAD</p>
+<p>AppleVolumes.default<br/>
+??? volcharset:FOOBAR maccharset:MAC_CHINESE_TRAD</p>
+<p>Apr 14 15:23:43 bad afpd[2138]: Required conversion from FOOBAR to UCS-2 not supported<br/>
+Apr 14 15:23:43 bad afpd[2138]: Setting codepage FOOBAR as volume codepage failed</p>
+<p>Connection Failed<br/>
+===========================================================================<br/>
+===========================================================================<br/>
+afpd.conf<br/>
+??? -unixcodepage UTF8 -maccodepage MAC_CHINESE_TRAD</p>
+<p>AppleVolumes.default<br/>
+??? volcharset:CP950 maccharset:MAC_CHINESE_TRAD</p>
+<p>Write/Read OK<br/>
+===========================================================================<br/>
+afpd.conf<br/>
+??? -unixcodepage UTF8 -maccodepage MAC_CHINESE_TRAD</p>
+<p>AppleVolumes.default<br/>
+??? volcharset:zh_TW.Big5 maccharset:MAC_CHINESE_TRAD</p>
+<p>Apr 14 15:35:33 bad afpd[2383]: Required conversion from zh_TW.Big5 to UCS-2 not supported<br/>
+Apr 14 15:35:33 bad afpd[2383]: Setting codepage zh_TW.Big5 as volume codepage failed</p>
+<p>Connection Failed<br/>
+===========================================================================<br/>
+afpd.conf<br/>
+??? -unixcodepage UTF8 -maccodepage MAC_CHINESE_TRAD</p>
+<p>AppleVolumes.default<br/>
+??? volcharset:BIG5 maccharset:MAC_CHINESE_TRAD</p>
+<p>Apr 14 15:37:24 bad afpd[2426]: WARNING: volume encoding BIG5 is *not* supported by netatalk, expect problems !!!!</p>
+<p>Write/Read OK<br/>
+===========================================================================<br/>
+afpd.conf<br/>
+??? -unixcodepage UTF8 -maccodepage MAC_CHINESE_TRAD</p>
+<p>AppleVolumes.default<br/>
+??? volcharset:MAC_CHINESE_TRAD maccharset:MAC_CHINESE_TRAD</p>
+<p>Apr 14 15:32:12 bad afpd[2311]: WARNING: volume encoding MAC_CHINESE_TRAD is *not* supported by netatalk, expect problems !!!!</p>
+<p>Write/Read OK<br/>
+===========================================================================<br/>
+afpd.conf<br/>
+??? -unixcodepage UTF8 -maccodepage MAC_CHINESE_TRAD</p>
+<p>AppleVolumes.default<br/>
+??? volcharset:UTF8 maccharset:MAC_CHINESE_TRAD</p>
+<p>Write/Read Mangled<br/>
+===========================================================================<br/>
+===========================================================================<br/>
+afpd.conf<br/>
+??? -unixcodepage zh_TW.Big5 -maccodepage MAC_CHINESE_TRAD</p>
+<p>AppleVolumes.default<br/>
+??? volcharset:CP950 maccharset:MAC_CHINESE_TRAD</p>
+<p>Apr 14 14:55:07 bad afpd[1688]: Loading ConfigFile<br/>
+Apr 14 14:55:07 bad afpd[1688]: Required conversion from zh_TW.Big5 to UCS-2 not supported<br/>
+Apr 14 14:55:07 bad afpd[1688]: setting Unix codepage to 'zh_TW.Big5' failed</p>
+<p>Write/Read OK<br/>
+===========================================================================<br/>
+===========================================================================<br/>
+afpd.conf<br/>
+??? -unixcodepage BIG5 -maccodepage MAC_CHINESE_TRAD</p>
+<p>AppleVolumes.default<br/>
+??? volcharset:CP950 maccharset:MAC_CHINESE_TRAD</p>
+<p>Apr 14 15:48:10 bad afpd[2571]: WARNING: volume encoding CP950 is *not* supported by netatalk, expect problems !!!!</p>
+<p>Write/Read OK<br/>
+===========================================================================<br/>
+===========================================================================<br/>
+afpd.conf<br/>
+??? -unixcodepage MAC_CHINESE_TRAD -maccodepage MAC_CHINESE_TRAD</p>
+<p>AppleVolumes.default<br/>
+??? volcharset:CP950 maccharset:MAC_CHINESE_TRAD</p>
+<p>Apr 14 15:50:47 bad afpd[2628]: WARNING: volume encoding CP950 is *not* supported by netatalk, expect problems !!!!</p>
+<p>Write/Read OK<br/>
+===========================================================================<br/>
+===========================================================================<br/>
+smb.conf<br/>
+[global]<br/>
+??? dos charset = CP950<br/>
+??? unix charset = UTF8<br/>
+??? display charset = UTF8<br/>
+===========================================================================<br/>
+afpd.conf<br/>
+??? -unixcodepage UTF8 -maccodepage MAC_CHINESE_TRAD</p>
+<p>AppleVolumes.default<br/>
+??? volcharset:UTF8 maccharset:MAC_CHINESE_TRAD</p>
+<p>Write/Read OK incluse Japanese file name (in FreeBSD Mangled)<br/>
+===========================================================================<br/>
+===========================================================================<br/>
+smb.conf<br/>
+[global]<br/>
+??? dos charset = CP950<br/>
+??? unix charset = CP950<br/>
+??? display charset = UTF8<br/>
+===========================================================================<br/>
+afpd.conf<br/>
+??? -unixcodepage UTF8 -maccodepage MAC_CHINESE_TRAD</p>
+<p>AppleVolumes.default<br/>
+??? volcharset:UTF8 maccharset:MAC_CHINESE_TRAD</p>
+<p>Write/Read Mangled (in FreeBSD Mac Mangled PC OK)<br/>
+===========================================================================<br/>
+===========================================================================<br/>
+smb.conf<br/>
+[global]<br/>
+??? dos charset = UTF8<br/>
+??? unix charset = CP950<br/>
+??? display charset = UTF8<br/>
+===========================================================================<br/>
+afpd.conf<br/>
+??? -unixcodepage UTF8 -maccodepage MAC_CHINESE_TRAD</p>
+<p>AppleVolumes.default<br/>
+??? volcharset:UTF8 maccharset:MAC_CHINESE_TRAD</p>
+<p>Write/Read Mangled (in FreeBSD Mac Mangled PC OK, but NOT Japanese file name)<br/>
+===========================================================================<br/>
+<br/></code>
+¡° ¬ÛÃö³ø¾É¡G<br/>
+<br/>
+¡¯ <a href="http://www.wretch.cc/blog/fsj&article_id=4757068">Netatalk 2.x CJK ¤ä´©¤½¶}´ú¸Õ</a>?<br/>
+¡¯ <a href="http://www.wretch.cc/blog/fsj&article_id=3150183">Netatalk 2.0.3 + FreeBSD 4.x ¤¤¤å¦r½Xªº¤ä´©</a>?<br/>
+</p>
+</p>
+                        <div class="clearfix">
+                              <div id="push">
+                  <span id="recommendcount">0</span>±ÀÂ˦¹¤å³¹
+                  <a href="javascript:void(0)" id="pushbtn" class="push">±À</a>
+                  <a href="javascript:void(0)" id="collectbtn" class="pull">¦¬</a>
+                </div>
+                                          <div class="social-wrapper">
+<div class="social-widget">
+  <div class="bd">  
+      <a class="fb" title="¤À¨É¦b§ÚªºFacebook" target="_blank" href="http://tw.rd.yahoo.com/referurl/wretch/shareout/blog/facebook/SIG=17veajg8v/*http%3A//www.facebook.com/sharer.php?u=http%3A%2F%2Fwww.wretch.cc%2Frd%2Fblog%2Ffacebook%2Fwww.wretch.cc%2Fblog%2Ffsj%2F3269525&t=FreeBSD+6.x+%2B+Netatalk+%2B+Samba+%E4%BA%A4%E5%8F%89%E6%B8%AC%E8%A9%A6...-fsj%E7%9A%84%E7%84%A1%E5%90%8D%E5%B0%8F%E7%AB%99">¤À¨É¦b§ÚªºFacebook</a>
+      <a class="plurk" title="¤À¨É¦b§ÚªºPlurk" target="_blank" href="http://tw.rd.yahoo.com/referurl/wretch/shareout/blog/plurk/SIG=189j25oqs/*http%3A//www.plurk.com/?qualifier=shares&status=http%3A%2F%2Fwww.wretch.cc%2Frd%2Fblog%2Fplurk%2Fwww.wretch.cc%2Fblog%2Ffsj%2F3269525+%28FreeBSD+6.x+%2B+Netatalk+%2B+Samba+%E4%BA%A4%E5%8F%89%E6%B8%AC%E8%A9%A6...-fsj%E7%9A%84%E7%84%A1%E5%90%8D%E5%B0%8F%E7%AB%99%29">¤À¨É¦b§ÚªºPlurk</a>
+      <a class="yim" title="¤À¨É¦b§Úªº§Y®É³q" href="ymsgr:customstatus?FreeBSD+6.x+%2B+Netatalk+%2B+Samba+%E4%BA%A4%E5%8F%89%E6%B8%AC%E8%A9%A6...-fsj%E7%9A%84%E7%84%A1%E5%90%8D%E5%B0%8F%E7%AB%99+http%3A%2F%2Fwww.wretch.cc%2Frd%2Fblog%2Fyim%2Fwww.wretch.cc%2Fblog%2Ffsj%2F3269525">¤À¨É¦b§Úªº§Y®É³q</a>
+  </div>
+</div>
+<div class="wretch-reblog fixinline">
+    <div class="bd bubble-none">  
+        <a class="wretch" href="http://www.wretch.cc/blog/post.php?rtype=article&t=FreeBSD+6.x+%2B+Netatalk+%2B+Samba+%E4%BA%A4%E5%8F%89%E6%B8%AC%E8%A9%A6...&tl=http%3A%2F%2Fwww.wretch.cc%2Fblog%2Ffsj%2F3269525&d=FreeBSD+6.x+%2B+Netatalk+2.0.3+CJK+patched+%2B+Samba+3.0.22+%E4%BA%A4%E5%8F%89%E6%B8%AC%E8%A9%A6...+%40.%40a%0D%0A%E4%B8%80%E4%BA%9B%E6%B3%A8%E6%84%8F%E4%BA%8B%E9%A0%85%EF%BC%9A%0D%0A1.+%E5%9C%A8+smb.conf+%E7%95%B6%E4%B8%AD%E8%A8%AD%E5%AE%9A+%22unix+charset%22+%E8%88%87+%22display+charset%22+%E6%99%82%E6%9C%80%E5%A5%BD%E7%9B%B8%E5%90%8C%E2%80%A6&a=fsj&al=http%3A%2F%2Fwww.wretch.cc%2Fuser%2Ffsj" target="_blank" title="µo¤å¦ÜµL¦W">µo¤å
+                </a>
+    </div>
+</div>
+
+<iframe class="fixinline" src="http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fwww.wretch.cc%2Fblog%2Ffsj%2F3269525&layout=button_count&show_faces=false&width=92&action=like&colorscheme=light&height=21" scrolling="no" frameborder="0" style="overflow:hidden; width:92px; height:21px;" allowTransparency="true"></iframe>
+</div>
+                          </div>
+            
+                        <div id="article_counter" align="right">
+              Today's Visitors: 0 Total Visitors: 272            </div>
+          
+            
+      <div id="collection_comments" style="visibility:hidden">
+    <span><strong><nobr>You can leave comment to this collection</nobr></strong></span>
+    <img class="icon" src="http://l.yimg.com/e/serv/blog/img/close.gif" onclick="$('collection_comments').style.visibility = 'hidden'">
+    <form action="../do_collect.php" method="post" name='ajax_favorites_pop' id="word_form_pop">
+            <input type=hidden name=".c" value="Lp3GCObMNHg">
+        <input type=hidden name=".t" value="1322178371">    <p id="postContentPop">
+      <nobr>Collection Category:<select name="category">
+        <option value="0">¥¼¤ÀÃþ(0)</option>
+              </select>
+      <a href="/admin/blog/?func=collection&col=folder" target="_blank">Add Collection Category</a></nobr><br/>
+      <nobr>Collection Comment:<input type="text" class="text" name="comments_text_pop" value='' maxlength='100'></nobr>
+    </p>
+    <p id="submitPost">
+      <nobr>
+      <span class="head"></span>
+        <input name="owner" type="hidden" value="fsj" />
+        <input name="aid" type="hidden" value="3269525" />
+        <input name="viewer_id" type="hidden" value="">
+        <input name="title" type="hidden" value="FreeBSD 6.x + Netatalk + Samba ¥æ¤e´ú¸Õ..." />
+        <input name="save" type="submit" value="Confirm Collection" onclick="$('collection_comments').style.visibility = 'hidden'"/>
+        <input name="cancel" type="reset" value="Cancel" onclick="$('collection_comments').style.visibility='hidden'"/>
+      </nobr>
+    </p>
+    </form>
+  </div><!--end of div id=comments -->
+
+              </div>
+
+                        <div class="extended">
+              Personal Category: <a href="http://www.wretch.cc/blog/fsj&category_id=0">Uncategorized Articles</a>
+
+              <span>Topic:  <a href="/blog" target="_blank">¥¼¤ÀÃþ</a></span>
+              <br />
+              
+                          </div>
+                                    </div> <!-- end of articletext -->
+
+
+            <div class="posted">
+            <a href="/blog/fsj">fsj</a> at <a href="/blog/">µL¦W¤p¯¸</a> at 07:17 PM post            | <a href="/blog/fsj/3269525#postComments">Reply(0)</a>
+            | <a href="/blog/fsj/3269525#trackbacks">Trackback(0)</a>
+            | <a href="javascript:void(0)" id="showCollector">Collection(0)</a>
+                                                | <a href="http://cc.wretch.cc/help/prosecute.php?badid=fsj&aid=3269525&cs=YTo0OntpOjA7TjtpOjE7czozOiJmc2oiO2k6MjtzOjA6IiI7aTozO2k6MzY1NzM7fQ--" target="_blank">prosecute</a>
+                      </div>
+
+  
+                      
+            <div class="total-comments-div">
+                                <div class="trackback-url">
+                  [Trackback URL]
+                  <input type="text" id="trackback_url" value='http://www.wretch.cc/blog/trackback.php?blog_id=fsj&article_id=3269525'>
+                  <input type="button" value="Copy Trackback Url" onClick="copy_to_clipborad('trackback_url'); alert('Already copy to the clipboard')">
+                                  </div>
+                                          
+              <br />
+
+              
+                      <br /><a href="http://www.wretch.cc/IDintegration/?ref=%2525252Fblog%2525252Ffsj%2525252F3269525">Only friends can post a comment, Login first</a>
+            </div> <!--  end of total-comments-div -->
+          
+        </div> <!-- end of blogbody2 -->
+
+      </div> <!-- end of blogbody -->
+
+                
+</div> <!-- end of class=blog -->
+</div> <!-- end of content -->
+
+
+<div id="links">
+
+  <div id="links2">
+
+  <div id="boxMySpace">
+ <div class="boxMySpace0">
+  <div class="sidetitle">
+   <a target="_blank" href="http://tw.rd.yahoo.com/referurl/wretch/vip/insidepage/evt=47619/*http://bill.wretch.cc/">
+    <img align="middle" border="0" class="vip_icon" src="http://l.yimg.com/e/serv/common/img/isAuth_silver.gif" alt="vip_icon"/>
+   </a>
+   fsj's Home  </div>
+ </div>
+ <div class="boxMySpace1">
+  <div class="side">
+   <div class="boxMySpaceImg">
+    <a href="/user/fsj">
+     <img border="0" src="http://l.yimg.com/e/cover/fsj_90.jpg?2"/>
+    </a>
+   </div>
+
+   <div id="blogCategory">
+    <span>Topic:</span>
+    <a href="http://www.wretch.cc//blog/?tab=hot&class_id=9">Political Affairs</a>
+   </div>
+
+   <div id="service">
+    <ul id="serviceList">
+     <li><a class="mySpaceLink" id="linkMypage" href="http://tw.rd.yahoo.com/referurl/wretch/index/mprd/*http://www.wretch.cc/">Mypage</a></li>
+     <li><a class="mySpaceLink" id="linkAlbum" href="/album/fsj">album</a></li>
+     <li><a class="mySpaceLink" id="linkBlog" href="/blog/fsj">blog</a></li>
+     <li><a class="mySpaceLink" id="linkGbook" href="/guestbook/fsj">guestbook</a></li>
+     <li><a class="mySpaceLink" id="linkUser" href="/user/fsj">User</a></li>
+     <li><a class="mySpaceLink" id="linkFriend" href="/friend/fsj">Friend</a></li>
+     <li><a class="mySpaceLink" id="linkVideo" href="/video/fsj">Video</a></li>
+    </ul>
+
+    <ul id="interactionList">
+     <li class="boxAddFriendLink"><a class="mySpaceLink" href="/album/addfriend.php?uid=fsj" id="link_addfriend">Add to Friend List</a></li>
+    </ul>
+   </div>
+    <select id="friendlist" name="friendlist" onChange="MeetFriend('http://www.wretch.cc/blog/', this);">
+  <option>- Friends' Blog -</option>
+    <option value=angela5247>angela5247</option>
+    <option value=brightpu>brightpu</option>
+    <option value=cry555666>cry555666</option>
+    <option value=cwwany>cwwany</option>
+    <option value=ipeggyhsu>ipeggyhsu</option>
+    <option value=mrock>mrock</option>
+    <option value=poyee221>poyee221</option>
+    <option value=sesther88>sesther88</option>
+    <option value=SHE911>SHE911</option>
+    <option value=skymirage>skymirage</option>
+    <option value=sweetyjoan>sweetyjoan</option>
+    <option value=thebz1>thebz1</option>
+</select>
+  </div>
+ </div>
+</div>
+
+      <div id="boxCategory">
+      <div class="boxCategory0">
+        <div class="sidetitle">
+          Categories        </div>
+      </div>
+      <div class="boxCategory1">
+        <div class="side">
+                              <a href="/blog/fsj&category_id=0">Uncategorized Articles</a><br />
+                  </div>
+      </div>
+      <br />
+    </div>
+
+      <div id="boxDate">
+      <div class="boxDate0">
+        <div class="sidetitle">
+          Monthly Archives        </div>
+      </div>
+      <div class="boxDate1">
+        <div class="side">
+          <a href="http://www.wretch.cc/blog/fsj&list=1">All Articles</a>
+          <br />
+          <select onChange="goMonthly(this);">
+            <option value="-1">- Monthly Archives -</option>
+                        <option value="http://www.wretch.cc/blog/fsj&schedule=1&year=2007&month=8">August 2007(161)</option>
+                        <option value="http://www.wretch.cc/blog/fsj&schedule=1&year=2007&month=7">July 2007(429)</option>
+                        <option value="http://www.wretch.cc/blog/fsj&schedule=1&year=2007&month=6">June 2007(447)</option>
+                        <option value="http://www.wretch.cc/blog/fsj&schedule=1&year=2007&month=5">May 2007(432)</option>
+                        <option value="http://www.wretch.cc/blog/fsj&schedule=1&year=2007&month=4">April 2007(323)</option>
+                        <option value="http://www.wretch.cc/blog/fsj&schedule=1&year=2007&month=3">March 2007(154)</option>
+                        <option value="http://www.wretch.cc/blog/fsj&schedule=1&year=2007&month=2">February 2007(185)</option>
+                        <option value="http://www.wretch.cc/blog/fsj&schedule=1&year=2007&month=1">January 2007(393)</option>
+                        <option value="http://www.wretch.cc/blog/fsj&schedule=1&year=2006&month=12">December 2006(238)</option>
+                        <option value="http://www.wretch.cc/blog/fsj&schedule=1&year=2006&month=11">November 2006(420)</option>
+                        <option value="http://www.wretch.cc/blog/fsj&schedule=1&year=2006&month=10">October 2006(426)</option>
+                        <option value="http://www.wretch.cc/blog/fsj&schedule=1&year=2006&month=9">September 2006(368)</option>
+                        <option value="http://www.wretch.cc/blog/fsj&schedule=1&year=2006&month=8">August 2006(410)</option>
+                        <option value="http://www.wretch.cc/blog/fsj&schedule=1&year=2006&month=7">July 2006(423)</option>
+                        <option value="http://www.wretch.cc/blog/fsj&schedule=1&year=2006&month=6">June 2006(476)</option>
+                        <option value="http://www.wretch.cc/blog/fsj&schedule=1&year=2006&month=5">May 2006(493)</option>
+                        <option value="http://www.wretch.cc/blog/fsj&schedule=1&year=2006&month=4">April 2006(441)</option>
+                        <option value="http://www.wretch.cc/blog/fsj&schedule=1&year=2006&month=3">March 2006(422)</option>
+                        <option value="http://www.wretch.cc/blog/fsj&schedule=1&year=2006&month=2">February 2006(329)</option>
+                        <option value="http://www.wretch.cc/blog/fsj&schedule=1&year=2006&month=1">January 2006(301)</option>
+                        <option value="http://www.wretch.cc/blog/fsj&schedule=1&year=2005&month=12">December 2005(259)</option>
+                        <option value="http://www.wretch.cc/blog/fsj&schedule=1&year=2005&month=11">November 2005(204)</option>
+                        <option value="http://www.wretch.cc/blog/fsj&schedule=1&year=2005&month=10">October 2005(220)</option>
+                        <option value="http://www.wretch.cc/blog/fsj&schedule=1&year=2005&month=9">September 2005(168)</option>
+                        <option value="http://www.wretch.cc/blog/fsj&schedule=1&year=2005&month=8">August 2005(102)</option>
+                        <option value="http://www.wretch.cc/blog/fsj&schedule=1&year=2005&month=7">July 2005(73)</option>
+                        <option value="http://www.wretch.cc/blog/fsj&schedule=1&year=2005&month=6">June 2005(38)</option>
+                        <option value="http://www.wretch.cc/blog/fsj&schedule=1&year=2005&month=5">May 2005(35)</option>
+                        <option value="http://www.wretch.cc/blog/fsj&schedule=1&year=2005&month=4">April 2005(49)</option>
+                        <option value="http://www.wretch.cc/blog/fsj&schedule=1&year=2005&month=3">March 2005(28)</option>
+                        <option value="http://www.wretch.cc/blog/fsj&schedule=1&year=2005&month=2">February 2005(20)</option>
+                        <option value="http://www.wretch.cc/blog/fsj&schedule=1&year=2005&month=1">January 2005(11)</option>
+                      </select>
+          <br />
+        </div>
+      </div>
+      <br />
+    </div>
+
+      <div id="boxSearch">
+      <div class="boxSearch0">
+        <div class="sidetitle">
+          Search This Blog        </div>
+      </div>
+      <div class="boxSearch1">
+        <div class="side">
+          <br />
+          <form action="http://www.wretch.cc/blog/blog.php" method="get" >
+            <input type="hidden" name="id" value='fsj'>
+            <input type="text" name="search" id="blog_search_key" size="12" maxlength="12">
+            <input type="submit" id="blog_search_submit" value="Search">
+            <br />
+
+            <input type="checkbox" name="search_title" class="blog_search_filter" value="1" checked>Title</input>
+            <input type="checkbox" name="search_content" class="blog_search_filter" value="1">Contents</input>
+          </form>
+        </div>
+      </div>
+      <br />
+    </div>
+
+    <div id="divThird">
+    <div id="divThird2">
+        <script>
+      var iframeW=65535, tmpW=0;
+      tmpW = document.getElementById('links').clientWidth;
+      if(tmpW > 0)
+        iframeW = Math.min(iframeW, tmpW);
+      tmpW = document.getElementById('links2').clientWidth;
+      if(tmpW > 0)
+        iframeW = Math.min(iframeW, tmpW);
+      tmpW = document.getElementById('divThird').clientWidth;
+      if(tmpW > 0)
+        iframeW = Math.min(iframeW, tmpW);
+      tmpW = document.getElementById('divThird2').clientWidth;
+      if(tmpW > 0)
+        iframeW = Math.min(iframeW, tmpW);
+      function autoWidth(iframe)
+      {
+        if(iframeW > 0 && iframeW < 65535)
+          iframe.width = iframeW;
+      }
+      </script>
+          <div id="boxFolder">
+        <div class="boxFolder0">
+          <div class="sidetitle">
+                        ±ÀÂ˳sµ²¡A·sºô»x½Ð¬Ý¤U­±          </div>
+        </div>
+        <div class="boxFolder1">
+        <div class="side" style=" ">
+                           
+                <a target="_blank" href="http://only-perception.blogspot.com" title="·s®a...">
+                                    Only Perception                </a><br />
+                                         
+                <a target="_blank" href="http://www.npo.org.tw/Bulletin/index.asp" title="¥xÆWNPO¤j¥»Àç">
+                                    ¤½¯q¬¡°Ê§G§iÄæ                </a><br />
+                                         
+                <a target="_blank" href="http://www.thefreedictionary.com/" title="Free oline dctionary, free access">
+                                    TheFreeDictionary                </a><br />
+                                         
+                <a target="_blank" href="http://www.tvcr.org.tw/" title="¤£µ¹´CÅé²oµÛ»ó¤l¨«">
+                                    ´CÅéÃÑŪ±À¼s¤¤¤ß                </a><br />
+                                         
+                <a target="_blank" href="http://digg.com/" title="«õ·s»D">
+                                    Digg                </a><br />
+                                         
+                <a target="_blank" href="http://boingboing.net/" title="¤°»ò°­ªF¦è³£¦³ªº blog ¶°¹Î...">
+                                    BoingBoing                </a><br />
+                                         
+                <a target="_blank" href="http://www.shoutcast.com/" title="Free internet radio!">
+                                    SHOUTcast                </a><br />
+                                         
+                <a target="_blank" href="http://tw.myblog.yahoo.com/jw!NIohvKaLExS1bKAMroNE" title="·N«ä¬O»¡½ß¿ú§O§ä¥L">
+                                    µL³d¥ô§ë¸ê½×¾Â                </a><br />
+                                         
+                <a target="_blank" href="http://www.chromasia.com/" title="¦n¯S§OªºÄá¼v¤âªk">
+                                    c h r o m a s i a                </a><br />
+                                         
+                <a target="_blank" href="http://www.cambridgeincolour.com/" title="¼Æ¦ìÄá¼v±Ðµ{">
+                                    Cambridge in Colour                </a><br />
+                                         
+                <a target="_blank" href="http://findbook.tw/" title="®ÑÄy¤ñ»ù¨Ó³o¸Ì">
+                                    Findbook.tw                </a><br />
+                                         
+                <a target="_blank" href="http://www.librarything.com/" title="ctalog your books online">
+                                    LibraryThing                </a><br />
+                                         
+                <a target="_blank" href="http://www.keko.com.cn/" title="¥þ²y³Ì¤j¤¤¤å­¹Ãзj¯Á¥­¥x">
+                                    ¥i¤fºô                </a><br />
+                                         
+                <a target="_blank" href="http://www.eol.org/" title="¥Íª«¤j¦Ê¬ì">
+                                    Encyclopedia of Life                </a><br />
+                                                </div>
+        </div>
+        <br />
+      </div>
+          <div id="boxFolder">
+        <div class="boxFolder0">
+          <div class="sidetitle">
+                        ¥»¤H¤å³¹±Ä¥Î¤U¦C¤è¦¡±ÂÅv          </div>
+        </div>
+        <div class="boxFolder1">
+        <div class="side" style=" ">
+                           
+                <a target="_blank" href="http://creativecommons.org/licenses/by-sa/3.0/" title="">
+                                    Creative Commons Attribution-Share Alike 3.0 Unported                </a><br />
+                                                </div>
+        </div>
+        <br />
+      </div>
+    
+        <div id="boxCounter">
+        <div class="boxCounter0">
+          <div class="sidetitle">
+            Visitors Counter          </div>
+        </div>
+        <div class="boxCounter1">
+          <div class="side">
+            Today's Visitors: 11<br />
+            Total Visitors: 1691735          </div>
+        </div>
+      </div>
+
+    </div> <!-- end of divThird2 -->
+    </div> <!-- end of divThird -->
+    
+  </div> <!-- end of links2 -->
+
+</div> <!-- end of links -->
+
+
+</div> <!-- end of main2 -->
+
+<div id="extraDiv1"><span></span></div>
+<div id="extraDiv2"><span></span></div>
+
+
+</div> <!-- end of container2 -->
+
+<div id="footer"></div>
+
+<div id="extraDiv3"><span></span></div>
+<div id="extraDiv4"><span></span></div>
+
+</div> <!-- end of container1 -->
+
+<br clear="all" />
+
+<div id="extraDiv5"><span></span></div>
+<div id="extraDiv6"><span></span></div>
+
+
+  <div id="friend-picker">
+    <div id="friend-picker-container">
+      <div id="friend-picker-hd">
+        <span>½Ö¨Ó¦¬ÂÃ</span>
+        <div id="loading">Loading ...</div>
+        <a id="friend-picker-closebtn"><img height="15" width="15" src="http://l.yimg.com/e/serv/blog/img/close.gif"></a>
+      </div>
+      <div id="friend-picker-pagination"></div>
+      <div id="friend-picker-bd"></div>
+    </div><!-- div#friend-picker-container -->
+  </div><!-- div#friend-picker-->
+
+      <script>
+  var ownerid= 'fsj';
+  var aid = '3269525';
+  var ajax_crumb = '&.c=Lp3GCObMNHg&.t=1322178371';
+  var ajax_server_name = 'http://www.wretch.cc/ajax/';
+</script>
+<script type="text/javascript" src="http://l.yimg.com/e/serv/blog/js/friend_picker.js"></script>
+      
+<script id="bcw" type="text/javascript">var random_num=Math.random();document.write("<img style=\"display:none;\" width=1 height=1 src=\"http://geo.yahoo.com/b?s=2022137480&make=yahoo&type=wretch&t="+random_num+"&r="+escape(document.referrer)+"\">");</script><!-- START Nielsen Online SiteCensus V5.3 Compact --><script type="text/javascript">var _rsCI="tw-yahoo";var _rsCG="0";var _rsIMG=new Image(1,1);_rsIMG.src="//secure-yt.imrworldwide.com/cgi-bin/m?rn="+(new Date()).getTime()+"&ci="+_rsCI+"&cg="+_rsCG+"&si="+escape(window.location.href)+"&rp="+escape(document.referrer);</script><noscript><div><img src="//secure-yt.imrworldwide.com/cgi-bin/m?ci=tw-yahoo&cg=0" alt=""/></div></noscript><!-- END Nielsen Online SiteCensus V5.3 Compact --><script language="JavaScript" type="text/javascript" charset="big5" src="http://global.adserver.yahoo.com/a?f=2022137480&p=tw_kwretch&l=FOOT9&c=r"></script><noscript><iframe src="http://global.adserver.yahoo.com/a?f=2022137480&p=tw_kwretch&l=FOOT9&c=h&bg=white" width=1 height=1 marginwidth=0 marginheight=0 hspace=0 vspace=0 frameborder=0 scrolling=no></iframe></noscript><script language="JavaScript" src="http://l.yimg.com/e/serv/blog/js/smart_address.js"></script>
+</div>
+</div><!-- nv hugewrepper --><div id="kukubar-lower" class="kukubar-bar  ">
+        <div class="login-request dropdown">
+        <div class="login-btn">
+            <a class="footer-ok-btn" href="http://tw.rd.yahoo.com/referurl/wretch/kk/u/PF/V_C/login/*http://www.wretch.cc/IDintegration/?ref=%2525252Fblog%2525252Ffsj%2525252F3269525">µn¤J</a>
+        </div>
+        <div class="login-msg login-msg-vitality">
+            µn¤JµL¦W¤p¯¸ÂsÄý±ÀÂ˪B¤Í°ÊºA
+        </div>
+        <div class="login-msg login-msg-subscription">
+            µn¤JµL¦W¤p¯¸ÂsÄý¥DÃD­q¾\
+        </div>
+    </div>
+        <div class="left-side">
+        <div id="footer-feedback" class="bar-block">
+            <a class="" href="http://tw.rd.yahoo.com/referurl/wretch/kk/u/PF/AD/*http://tw.help.cc.yahoo.com/?product=53" target="_blank">
+            <img src="http://l.yimg.com/e/serv/common/img/footer_left.png" alt="§Ú¦³«ØÄ³" __href="http://tw.help.cc.yahoo.com/?product=53">
+            </a>
+        </div>
+                <div id="footer-fb" class="bar-block bar-block-click">
+            <a class="footer-fb-btn" href="#">ªñ´Á°ÊºA <span class="bar-block-btn">®i¶}</span></a>
+            <iframe src="http://www.facebook.com/plugins/activity.php?site=www.wretch.cc&width=300&height=267&header=false&colorscheme=light&recommendations=true" scrolling="no" frameborder="0" style="border:none; overflow:hidden; width:300px; height:267px;" allowTransparency="false"></iframe>
+        </div>
+        <div id="footer-subscription" class="bar-block bar-block-click">
+            <a class="footer-subscription-btn" href="#">¥DÃD­q¾\<span class="bar-block-btn">®i¶}</span></a>
+                <div id="scrb-panel" class="dropdown ">
+                <div class="hd panel-block">
+                </div>
+                <div class="bd panel-block">
+                </div>
+            </div>
+        </div>
+    </div>
+    <div class="right-side">
+        <ul id="footer-ugc-compose">
+            <li class="bar-block bar-block-click blog-service"><em>ºô»x</em>
+                <ul class="dropdown">
+                    <li><a class="bar-link" href="http://tw.rd.yahoo.com/referurl/wretch/kk/u/PF/sc/blog/post/*http://www.wretch.cc/blog/post.php?blog_id=">Post Article</a></li>
+                    <li><a class="bar-link" href="http://tw.rd.yahoo.com/referurl/wretch/kk/u/PF/sc/blog/css/*http://www.wretch.cc/admin/style/?func=template_new&source=B">Blog Style</a></li>
+                    <li class="last"><a class="bar-link" href="http://tw.rd.yahoo.com/referurl/wretch/kk/u/PF/sc/blog/mgr/*http://www.wretch.cc/admin/blog/">Blog Setting</a></li>
+                </ul>
+            </li>
+            <li class="bar-block bar-block-click album-service"><em>¬Ûï</em>
+                <ul class="dropdown">
+                    <li><a class="bar-link" href="http://tw.rd.yahoo.com/referurl/wretch/kk/u/PF/sc/album/upload/*http://www.wretch.cc/album/yuiuploader.php">Upload Photo</a></li>
+                    <li><a class="bar-link" href="http://tw.rd.yahoo.com/referurl/wretch/kk/u/PF/sc/album/css/*http://www.wretch.cc/admin/style/?func=template_new&source=A">Album Style</a></li>
+                    <li class="last"><a class="bar-link" href="http://tw.rd.yahoo.com/referurl/wretch/kk/u/PF/sc/album/mgr/*http://www.wretch.cc/admin/album/">Album Setting</a></li>
+                </ul>
+            </li>
+            <li class="bar-block bar-block-click video-service"><em>¼v­µ</em>
+                <ul class="dropdown">
+                    <li><a class="bar-link" href="http://tw.rd.yahoo.com/referurl/wretch/kk/u/PF/sc/video/upload/*http://www.wretch.cc/video/yuiuploader.php">Upload Video</a></li>
+                    <li><a class="bar-link" href="http://tw.rd.yahoo.com/referurl/wretch/kk/u/PF/sc/video/css/*http://www.wretch.cc/admin/style/?func=template_new&source=V">Video Style</a></li>
+                    <li class="last"><a class="bar-link" href="http://tw.rd.yahoo.com/referurl/wretch/kk/u/PF/sc/video/mgr/*http://www.wretch.cc/video/_manage/?func=set">Video Setting</a></li>
+                </ul>
+            </li>
+        </ul>
+    </div>
+</div>
+<div id="footer-switch" class=" ">
+<button>Ãö³¬¤u¨ã¦C</button>
+</div>
+<script src="http://yui.yahooapis.com/3.4.1/build/yui/yui-min.js"></script><script src="http://l.yimg.com/e/serv/common/js/kukubar.js?20111123"></script>
+<link rel="stylesheet" href="http://l.yimg.com/e/serv/common/css/promotion.css" type="text/css" />
+<script src="http://l.yimg.com/e/serv/common/js/promotion.js"></script></body>
+<script src="http://yui.yahooapis.com/combo?2.8.1/build/connection/connection-min.js&2.8.1/build/container/container-min.js&2.8.1/build/element/element-min.js&2.8.1/build/button/button-min.js&2.8.1/build/json/json-min.js"></script>
+<script src="http://l.yimg.com/e/serv/blog/js/antiPhishing.js"></script>
+<script src="http://l.yimg.com/e/serv/blog/js/trackback.js?20110808"></script>
+<script>
+window.onload = function () {
+    var flash = document.getElementsByTagName('embed');
+    for (var i = 0; i < flash.length; i++) {
+        var newFlash = flash[i].cloneNode(true);
+        newFlash.src = flash[i].src;
+        newFlash.setAttribute('type', flash[i].getAttribute('type'));
+        newFlash.setAttribute('wmode', 'transparent');
+        flash[i].parentNode.replaceChild(newFlash, flash[i]);
+    }
+}
+</script>
+</html>
+<!-- w366.wretch.tp2.yahoo.com compressed/chunked Fri Nov 25 07:46:11 CST 2011 -->
diff --git a/mcs/class/I18N/CJK/Test/texts/chinese4-utf8.txt b/mcs/class/I18N/CJK/Test/texts/chinese4-utf8.txt
new file mode 100644
index 0000000..f14418e
--- /dev/null
+++ b/mcs/class/I18N/CJK/Test/texts/chinese4-utf8.txt
@@ -0,0 +1,892 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+<meta http-equiv="imagetoolbar" content="no"/>
+<meta name="description" content="FreeBSD 6.x + Netatalk 2.0.3 CJK patched + Samba 3.0.22 交叉測試... @. at a 一些注意事項: 1. 在 smb.conf 當中設定 \"unix charset\" 與 \"display charset\" 時最好相同,    否則很容易出現亂馬的情況。(參考下面解說,並請參考:     http://phorum.vb..." />
+<meta name="medium" content="blog" />
+<link rel="image_src" type="image/jpeg" href="http://l.yimg.com/f/i/tw/wretch/social/facebook_icon_blog.gif" />
+<title>FreeBSD 6.x + Netatalk + Samba 交叉測試... - 痕跡... - 無名小站</title>
+<link rel="shortcut icon" type="image/x-icon" href="http://l.yimg.com/e/serv/common/favicon.ico" />
+<meta name="keywords" content="">
+<meta property="og:type" content="article" />
+<meta property="og:title" content="FreeBSD 6.x + Netatalk + Samba 交叉測試... - 痕跡... - 無名小站" />
+<meta property="og:description" content="FreeBSD 6.x + Netatalk 2.0.3 CJK patched + Samba 3.0.22 交叉測試... @. at a 一些注意事項: 1. 在 smb.conf 當中設定 \"unix charset\" 與 \"display charset\" 時最好相同,    否則很容易出現亂馬的情況。(參考下面解說,並請參考:     http://phorum.vb..." />
+<meta property="og:url" content="http://www.wretch.cc/blog/fsj/3269525" />
+<meta property="og:site_name" content="無名小站網誌" />
+<meta property="og:image" content="http://l.yimg.com/e/cover/fsj_90.jpg?2" />
+ 
+<link rel="canonical" href="http://www.wretch.cc/blog/fsj/3269525" />
+<link rel="stylesheet" href="http://l.yimg.com/e/serv/blog/css/top.css" type="text/css" />
+<link rel="stylesheet" href="http://f7.wretch.yimg.com/fsj/files/blog.css?1221572096" type="text/css">
+<link rel="stylesheet" href="http://l.yimg.com/e/serv/common/css/sharing.css?20110808" type="text/css">
+<link rel="stylesheet" href="http://l.yimg.com/e/serv/blog/css/font.css?20110209" type="text/css" />
+<link rel="stylesheet" type="text/css" href="http://yui.yahooapis.com/2.8.1/build/container/assets/skins/sam/container.css">
+<link rel="stylesheet" type="text/css" href="http://yui.yahooapis.com/2.8.1/build/button/assets/skins/sam/button.css">
+<link rel="stylesheet" type="text/css" href="http://l.yimg.com/e/serv/blog/css/antiPhishing.css">
+<link rel="stylesheet" type="text/css" href="http://l.yimg.com/e/serv/blog/css/trackback.css?20111123">
+
+
+<link rel="stylesheet" href="http://l.yimg.com/e/serv/blog/css/friend_picker.css" type="text/css">
+
+<script type="text/javascript" src="http://l.yimg.com/e/serv/blog/js/func_blog.js?20100908"></script>
+<script type="text/javascript" src="http://l.yimg.com/e/serv/common/js/swfobject.js"></script>
+<script type="text/javascript" src="http://l.yimg.com/e/serv/common/js/jwplayer.js"></script>
+<script type="text/javascript" src="http://l.yimg.com/qo/widget/kplizer_loader.js"></script>
+
+
+<script type="text/javascript" src="http://yui.yahooapis.com/combo?2.5.2/build/yahoo-dom-event/yahoo-dom-event.js&2.5.2/build/imageloader/imageloader-min.js&2.5.2/build/get/get-min.js"></script>
+<script type="text/javascript">
+var YUD = YAHOO.util.Dom, YUE = YAHOO.util.Event, YUG = YAHOO.util.Get, $ = YAHOO.util.Dom.get;
+</script>
+<style>
+</style>
+</head>
+
+<body id="blog_main" class="yui-skin-sam">
+<!-- nv hugewrepper --><div id="hugewrapper"><input id="wretch-crumb" type="hidden" value="&.c=Lp3GCObMNHg&.t=1322178371">
+<input id="static-path" type="hidden" value="http://l.yimg.com/e/serv/common/">
+<link rel="stylesheet" href="http://l.yimg.com/e/serv/common/css/kukubar.css?20111123" type="text/css">
+<style>
+.kukubar-customized {
+    background:#EEEDDD; /* old browsers */
+    background: -moz-linear-gradient(top, #FFFFFF 0%, #EEEDDD 100%); /* firefox */
+    background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#FFFFFF), color-stop(100%,#EEEDDD)); /* webkit */
+
+}
+</style>
+<div id="kukubar-upper" class="font-black kukubar-customized kukubar-bar">
+    <div class="left-side">
+        <div id="wretch-logo" class="bar-block bar-block-click">
+        <h1><a class="bar-link" tabindex="1" href="http://tw.rd.yahoo.com/referurl/wretch/kk/u/haha/logo/*http://www.wretch.cc/">無名小站</a></h1>
+        </div>
+        <div id="wretch-service" class="bar-block bar-block-click">
+                        <a class="current-service bar-link theme" tabindex="2" href="http://tw.rd.yahoo.com/referurl/wretch/kk/u/haha/B_FP/*http://www.wretch.cc/blog"/>Blog</a>
+            <span class="bar-block-btn" tabindex="3">展開</span>
+            <ul class="dropdown blog-service">
+                <li class="album-index"><a class="bar-link" href="http://tw.rd.yahoo.com/referurl/wretch/kk/u/haha/A_FP/*http://www.wretch.cc/album">Album</a></li>
+                <li class="blog-index"><a class="bar-link" href="http://tw.rd.yahoo.com/referurl/wretch/kk/u/haha/B_FP/*http://www.wretch.cc/blog">Blog</a></li>
+                <li class="video-index"><a class="bar-link" href="http://tw.rd.yahoo.com/referurl/wretch/kk/u/haha/V_FP/*http://www.wretch.cc/video">Video</a></li>
+                <li class="digu-index"><a class="bar-link" href="http://tw.rd.yahoo.com/referurl/wretch/kk/u/haha/D_FP/*http://www.wretch.cc/digu">Digu</a></li>
+                <li class="join-index"><a class="bar-link" href="http://tw.rd.yahoo.com/referurl/wretch/kk/u/haha/J_FP/*http://www.wretch.cc/join">Join</a></li>
+                <li><a class="bar-link" href="http://tw.rd.yahoo.com/referurl/wretch/kk/u/haha/Y/*http://tw.yahoo.com/">Yahoo!</a></li>
+                <li><a class="bar-link" href="http://tw.rd.yahoo.com/referurl/wretch/kk/u/haha/help/*http://tw.help.cc.yahoo.com/help_cp.html?product=53">Help</a></li>
+                <li><a class="bar-link" href="http://tw.rd.yahoo.com/referurl/wretch/kk/u/haha/vip/*http://bill.wretch.cc/">Premium</a></li>
+            </ul>
+        </div>
+        <div id="infozone">
+             <ul>
+                            <li><a href="http://www.wretch.cc/?cid=1145" class="theme">今日主題:摩人來推薦 平價享五星</a></li>
+                            <li><a href="http://www.wretch.cc/?cid=1146" class="theme">今日主題:冬天怎穿? 教你醬搞定</a></li>
+                        </ul>
+        </div>
+    </div>
+    
+    
+    <div class="right-side">
+        <div id="wretch-search" class="bar-block">
+            <form method="get" action="http://tw.blog.search.yahoo.com/search" name="searchForm">
+                            <fieldset>
+                    <legend>Article<span>選擇服務</span></legend>
+                    <div class="service-list dropdown">
+                        <input type="radio" id="srch-blog" name="type" value="article" checked="checked" data="checked">
+                        <label for="srch-blog" _target="Article Search">Article</label>
+                        <input type="radio" id="srch-album" name="type" value="photo" checked="false" data="false">
+                        <label for="srch-album" _target="Album Search">Album</label>
+                        <input type="radio" id="srch-video" name="type" value="video" checked="false" data="false">
+                        <label for="srch-video" _target="Video Search">Video</label>
+                    </div>
+                    <div class="search-field">
+                        <label for="wretch-search-text" class="hidden">搜尋</label>
+                        <input id="wretch-search-text" type="text" name="p" title="Article Search" value="Article Search" class="blur">
+                        <input type="hidden" value="wretch" name="provider">
+                        <input type="hidden" value="cb-wretch" name="fr">
+                        <input id="wretch-search-btn" type="submit" value="送出">
+                    </div>
+                </fieldset>
+            </form>
+        </div>        
+                <div id="wretch-login" class="bar-block bar-block-click bar-link no-hover">
+                            <ul class="login-links">
+                <li class="link-item first"><a class="bar-link theme" href="http://tw.rd.yahoo.com/referurl/wretch/kk/u/haha/login/*http://www.wretch.cc/IDintegration/?ref=%2525252Fblog%2525252Ffsj%2525252F3269525">Login</a></li>
+                <li class="link-item"><a class="bar-link theme" href="http://tw.rd.yahoo.com/referurl/wretch/kk/u/haha/activate/*http://www.wretch.cc/IDintegration/">Register</a></li>
+            </ul>
+                        </div>
+ 
+    </div>
+</div>
+<div id="bigcontainer" style="position: relative !important; zoom:1 !important;" >
+<div id="container1">
+<div id="container2">
+
+  <div id="banner">
+  <div id="pageheader">
+    <h1>
+      <a href="/blog/fsj">ç—•è·¡...</a>
+      <span class="description">
+        FreeBSD 6.x + Netatalk + Samba 交叉測試...      </span>
+    </h1>
+
+    <div id="description2">
+    <script>
+    var desc_iframeW=65535, tmpW=0;
+    tmpW = document.getElementById('container1').clientWidth;
+    if(tmpW > 0)
+      desc_iframeW = Math.min(desc_iframeW, tmpW);
+    tmpW = document.getElementById('container2').clientWidth;
+    if(tmpW > 0)
+      desc_iframeW = Math.min(desc_iframeW, tmpW);
+    tmpW = document.getElementById('banner').clientWidth;
+    if(tmpW > 0)
+      desc_iframeW = Math.min(desc_iframeW, tmpW);
+    tmpW = document.getElementById('pageheader').clientWidth;
+    if(tmpW > 0)
+      desc_iframeW = Math.min(desc_iframeW, tmpW);
+    tmpW = document.getElementById('description2').clientWidth;
+    if(tmpW > 0)
+      desc_iframeW = Math.min(desc_iframeW, tmpW);
+    function desc_autoWidth(iframe)
+    {
+      if(desc_iframeW > 0 && desc_iframeW < 65535)
+      {
+        iframe.width = desc_iframeW;
+      }
+    }
+    </script>
+      <span class="description">
+        There is no truth.  There is only perception.  ~Gustave Flaubert      </span>
+    </div>
+  </div>
+</div>
+
+
+<div id="main2">
+
+<div id="content">
+<input type="hidden" name="check_url" value="on">
+<div class="blog" >
+    
+          <div class="date">
+        <div class="datediv">
+          April 14, 2006        </div>
+      </div>
+
+      <div class="blogbody">
+        <div class="blogbody2">
+            <div class="articletext">
+            <a name="3269525"></a>
+            <h3 class="title">FreeBSD 6.x + Netatalk + Samba 交叉測試...</h3>
+                          <div class="social-wrapper">
+<div class="social-widget">
+  <div class="bd">  
+      <a class="fb" title="分享在我的Facebook" target="_blank" href="http://tw.rd.yahoo.com/referurl/wretch/shareout/blog/facebook/SIG=17veajg8v/*http%3A//www.facebook.com/sharer.php?u=http%3A%2F%2Fwww.wretch.cc%2Frd%2Fblog%2Ffacebook%2Fwww.wretch.cc%2Fblog%2Ffsj%2F3269525&t=FreeBSD+6.x+%2B+Netatalk+%2B+Samba+%E4%BA%A4%E5%8F%89%E6%B8%AC%E8%A9%A6...-fsj%E7%9A%84%E7%84%A1%E5%90%8D%E5%B0%8F%E7%AB%99">分享在我的Facebook</a>
+      <a class="plurk" title="分享在我的Plurk" target="_blank" href="http://tw.rd.yahoo.com/referurl/wretch/shareout/blog/plurk/SIG=189j25oqs/*http%3A//www.plurk.com/?qualifier=shares&status=http%3A%2F%2Fwww.wretch.cc%2Frd%2Fblog%2Fplurk%2Fwww.wretch.cc%2Fblog%2Ffsj%2F3269525+%28FreeBSD+6.x+%2B+Netatalk+%2B+Samba+%E4%BA%A4%E5%8F%89%E6%B8%AC%E8%A9%A6...-fsj%E7%9A%84%E7%84%A1%E5%90%8D%E5%B0%8F%E7%AB%99%29">分享在我的Plurk</a>
+      <a class="yim" title="分享在我的即時通" href="ymsgr:customstatus?FreeBSD+6.x+%2B+Netatalk+%2B+Samba+%E4%BA%A4%E5%8F%89%E6%B8%AC%E8%A9%A6...-fsj%E7%9A%84%E7%84%A1%E5%90%8D%E5%B0%8F%E7%AB%99+http%3A%2F%2Fwww.wretch.cc%2Frd%2Fblog%2Fyim%2Fwww.wretch.cc%2Fblog%2Ffsj%2F3269525">分享在我的即時通</a>
+  </div>
+</div>
+<div class="wretch-reblog fixinline">
+    <div class="bd bubble-none">  
+        <a class="wretch" href="http://www.wretch.cc/blog/post.php?rtype=article&t=FreeBSD+6.x+%2B+Netatalk+%2B+Samba+%E4%BA%A4%E5%8F%89%E6%B8%AC%E8%A9%A6...&tl=http%3A%2F%2Fwww.wretch.cc%2Fblog%2Ffsj%2F3269525&d=FreeBSD+6.x+%2B+Netatalk+2.0.3+CJK+patched+%2B+Samba+3.0.22+%E4%BA%A4%E5%8F%89%E6%B8%AC%E8%A9%A6...+%40.%40a%0D%0A%E4%B8%80%E4%BA%9B%E6%B3%A8%E6%84%8F%E4%BA%8B%E9%A0%85%EF%BC%9A%0D%0A1.+%E5%9C%A8+smb.conf+%E7%95%B6%E4%B8%AD%E8%A8%AD%E5%AE%9A+%22unix+charset%22+%E8%88%87+%22display+charset%22+%E6%99%82%E6%9C%80%E5%A5%BD%E7%9B%B8%E5%90%8C%E2%80%A6&a=fsj&al=http%3A%2F%2Fwww.wretch.cc%2Fuser%2Ffsj" target="_blank" title="發文至無名">發文
+                </a>
+    </div>
+</div>
+
+<iframe class="fixinline" src="http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fwww.wretch.cc%2Fblog%2Ffsj%2F3269525&layout=button_count&show_faces=false&width=92&action=like&colorscheme=light&height=21" scrolling="no" frameborder="0" style="overflow:hidden; width:92px; height:21px;" allowTransparency="true"></iframe>
+</div>
+                        
+
+            <div class="innertext">
+              <p><p>FreeBSD 6.x + Netatalk 2.0.3 CJK patched + Samba 3.0.22 交叉測試... @. at a</p>
+<p>一些注意事項:</p>
+<p>1. 在 smb.conf 當中設定 "unix charset" 與 "display charset" 時最好相同,<br/>
+   否則很容易出現亂馬的情況。(參考下面解說,並請參考:<br/>
+    <a href="http://phorum.vbird.org/viewtopic.php?t=22001" target="_blank">http://phorum.vbird.org/viewtopic.php?t=22001</a>)</p>
+<p>2. Write/Read OK 或 Write/Read Mangled 代表從 PC 或 Mac 拷貝檔案到分享出<br/>
+   來的卷宗的結果,netatalk 與 samba 都設定在 /home/share</p>
+<p>3. 每測試不同的設定,我會將相關服務停止,然後清除 /home/share 裡面所有東<br/>
+   西。</p>
+<p>4. PC 有使用 Unicode 補完計畫 (<a href="http://uao.cpatch.org/" target="_blank">http://uao.cpatch.org/</a>) 修補過。</p>
+<p>5. 測試檔案包括日文檔名,例如:"竹井詩織里 - 世界止めて.mp3" <br/>
+   (當然,那是我從 <a href="http://www.shinkong-being.com.tw" target="_blank">http://www.shinkong-being.com.tw</a> 買的 CD 轉出來的 XD)</p>
+<p>6. 我只設定 setenv LC_CTYPE=zh_TW.Big5 與 LC_CTYPE=en_US.ISO8859-1 以及<br/>
+    LC_CTYPE=UTF8, LANG 則維持 en_US.ISO8859-1 感覺沒差ㄟ... 包括用 mc 來看<br/>
+   (包括用 SecureNetTerm 透過 ssh2 連線或直接在 console 底下...)<br/>
+   似乎要在 X 底下才能區分差別...</p>
+<p>7. 沒空整理成表格,自己看看吧... :p</p>
+<code>
+<p>===========================================================================<br/>
+smb.conf<br/>
+[global]<br/>
+    dos charset = CP950<br/>
+    unix charset = CP950<br/>
+    display charset = CP950<br/>
+===========================================================================<br/>
+afpd.conf<br/>
+    -unixcodepage ISO-8859-1 -maccodepage MAC_CHINESE_TRAD</p>
+<p>AppleVolumes.default<br/>
+    volcharset:CP950 maccharset:MAC_CHINESE_TRAD</p>
+<p>Write/Read OK (in FreeBSD Mac OK, PC OK, but NOT Japanese file name, <br/>
+PC Japanese file name mangled, Mac Japanese file OK.)<br/>
+===========================================================================<br/>
+afpd.conf<br/>
+    -unixcodepage ISO-8859-1 -maccodepage MAC_CHINESE_TRAD</p>
+<p>AppleVolumes.default<br/>
+    volcharset:zh_TW.Big5 maccharset:MAC_CHINESE_TRAD</p>
+<p>Apr 14 15:01:24 bad afpd[1778]: Required conversion from zh_TW.Big5 to UCS-2 not supported<br/>
+Apr 14 15:01:24 bad afpd[1778]: Setting codepage zh_TW.Big5 as volume codepage failed</p>
+<p>Connection Failed<br/>
+===========================================================================<br/>
+afpd.conf<br/>
+    -unixcodepage ISO-8859-1 -maccodepage MAC_CHINESE_TRAD</p>
+<p>AppleVolumes.default<br/>
+    volcharset:BIG5 maccharset:MAC_CHINESE_TRAD</p>
+<p>Apr 14 15:17:58 bad afpd[1993]: WARNING: volume encoding BIG5 is *not* supported by netatalk, expect problems !!!!</p>
+<p>Write/Read OK<br/>
+===========================================================================<br/>
+afpd.conf<br/>
+    -unixcodepage ISO-8859-1 -maccodepage MAC_CHINESE_TRAD</p>
+<p>AppleVolumes.default<br/>
+    volcharset:MAC_CHINESE_TRAD maccharset:MAC_CHINESE_TRAD</p>
+<p>Apr 14 15:20:03 bad afpd[2051]: WARNING: volume encoding MAC_CHINESE_TRAD is *not* supported by netatalk, expect problems !!!!</p>
+<p>Write/Read OK<br/>
+===========================================================================<br/>
+afpd.conf<br/>
+    -unixcodepage ISO-8859-1 -maccodepage MAC_CHINESE_TRAD</p>
+<p>AppleVolumes.default<br/>
+    volcharset:FOOBAR maccharset:MAC_CHINESE_TRAD</p>
+<p>Apr 14 15:21:38 bad afpd[2087]: Required conversion from FOOBAR to UCS-2 not supported<br/>
+Apr 14 15:21:38 bad afpd[2087]: Setting codepage FOOBAR as volume codepage failed</p>
+<p>Connection Failed<br/>
+===========================================================================<br/>
+afpd.conf<br/>
+    -unixcodepage ISO-8859-1 -maccodepage MAC_CHINESE_TRAD</p>
+<p>AppleVolumes.default<br/>
+    volcharset:UTF8 maccharset:MAC_CHINESE_TRAD</p>
+<p>Write/Read Mangled<br/>
+===========================================================================<br/>
+===========================================================================<br/>
+afpd.conf<br/>
+    -unixcodepage CP950 -maccodepage MAC_CHINESE_TRAD</p>
+<p>AppleVolumes.default<br/>
+    volcharset:CP950 maccharset:MAC_CHINESE_TRAD</p>
+<p>Write/Read OK<br/>
+===========================================================================<br/>
+afpd.conf<br/>
+    -unixcodepage CP950 -maccodepage MAC_CHINESE_TRAD</p>
+<p>AppleVolumes.default<br/>
+    volcharset:zh_TW.Big5 maccharset:MAC_CHINESE_TRAD</p>
+<p>Apr 14 15:26:13 bad afpd[2176]: Required conversion from zh_TW.Big5 to UCS-2 notsupported<br/>
+Apr 14 15:26:13 bad afpd[2176]: Setting codepage zh_TW.Big5 as volume codepage failed</p>
+<p>Connection Failed<br/>
+===========================================================================<br/>
+afpd.conf<br/>
+    -unixcodepage CP950 -maccodepage MAC_CHINESE_TRAD</p>
+<p>AppleVolumes.default<br/>
+    volcharset:BIG5 maccharset:MAC_CHINESE_TRAD</p>
+<p>Apr 14 15:27:50 bad afpd[2210]: WARNING: volume encoding BIG5 is *not* supported by netatalk, expect problems !!!!</p>
+<p>Write/Read OK<br/>
+===========================================================================<br/>
+afpd.conf<br/>
+    -unixcodepage CP950 -maccodepage MAC_CHINESE_TRAD</p>
+<p>AppleVolumes.default<br/>
+    volcharset:MAC_CHINESE_TRAD maccharset:MAC_CHINESE_TRAD</p>
+<p>Apr 14 15:29:37 bad afpd[2260]: WARNING: volume encoding MAC_CHINESE_TRAD is *not* supported by netatalk, expect problems !!!!</p>
+<p>Write/Read OK<br/>
+===========================================================================<br/>
+afpd.conf<br/>
+    -unixcodepage CP950 -maccodepage MAC_CHINESE_TRAD</p>
+<p>AppleVolumes.default<br/>
+    volcharset:UTF8 maccharset:MAC_CHINESE_TRAD</p>
+<p>Write/Read OK<br/>
+===========================================================================<br/>
+afpd.conf<br/>
+    -unixcodepage CP950 -maccodepage MAC_CHINESE_TRAD</p>
+<p>AppleVolumes.default<br/>
+    volcharset:FOOBAR maccharset:MAC_CHINESE_TRAD</p>
+<p>Apr 14 15:23:43 bad afpd[2138]: Required conversion from FOOBAR to UCS-2 not supported<br/>
+Apr 14 15:23:43 bad afpd[2138]: Setting codepage FOOBAR as volume codepage failed</p>
+<p>Connection Failed<br/>
+===========================================================================<br/>
+===========================================================================<br/>
+afpd.conf<br/>
+    -unixcodepage UTF8 -maccodepage MAC_CHINESE_TRAD</p>
+<p>AppleVolumes.default<br/>
+    volcharset:CP950 maccharset:MAC_CHINESE_TRAD</p>
+<p>Write/Read OK<br/>
+===========================================================================<br/>
+afpd.conf<br/>
+    -unixcodepage UTF8 -maccodepage MAC_CHINESE_TRAD</p>
+<p>AppleVolumes.default<br/>
+    volcharset:zh_TW.Big5 maccharset:MAC_CHINESE_TRAD</p>
+<p>Apr 14 15:35:33 bad afpd[2383]: Required conversion from zh_TW.Big5 to UCS-2 not supported<br/>
+Apr 14 15:35:33 bad afpd[2383]: Setting codepage zh_TW.Big5 as volume codepage failed</p>
+<p>Connection Failed<br/>
+===========================================================================<br/>
+afpd.conf<br/>
+    -unixcodepage UTF8 -maccodepage MAC_CHINESE_TRAD</p>
+<p>AppleVolumes.default<br/>
+    volcharset:BIG5 maccharset:MAC_CHINESE_TRAD</p>
+<p>Apr 14 15:37:24 bad afpd[2426]: WARNING: volume encoding BIG5 is *not* supported by netatalk, expect problems !!!!</p>
+<p>Write/Read OK<br/>
+===========================================================================<br/>
+afpd.conf<br/>
+    -unixcodepage UTF8 -maccodepage MAC_CHINESE_TRAD</p>
+<p>AppleVolumes.default<br/>
+    volcharset:MAC_CHINESE_TRAD maccharset:MAC_CHINESE_TRAD</p>
+<p>Apr 14 15:32:12 bad afpd[2311]: WARNING: volume encoding MAC_CHINESE_TRAD is *not* supported by netatalk, expect problems !!!!</p>
+<p>Write/Read OK<br/>
+===========================================================================<br/>
+afpd.conf<br/>
+    -unixcodepage UTF8 -maccodepage MAC_CHINESE_TRAD</p>
+<p>AppleVolumes.default<br/>
+    volcharset:UTF8 maccharset:MAC_CHINESE_TRAD</p>
+<p>Write/Read Mangled<br/>
+===========================================================================<br/>
+===========================================================================<br/>
+afpd.conf<br/>
+    -unixcodepage zh_TW.Big5 -maccodepage MAC_CHINESE_TRAD</p>
+<p>AppleVolumes.default<br/>
+    volcharset:CP950 maccharset:MAC_CHINESE_TRAD</p>
+<p>Apr 14 14:55:07 bad afpd[1688]: Loading ConfigFile<br/>
+Apr 14 14:55:07 bad afpd[1688]: Required conversion from zh_TW.Big5 to UCS-2 not supported<br/>
+Apr 14 14:55:07 bad afpd[1688]: setting Unix codepage to 'zh_TW.Big5' failed</p>
+<p>Write/Read OK<br/>
+===========================================================================<br/>
+===========================================================================<br/>
+afpd.conf<br/>
+    -unixcodepage BIG5 -maccodepage MAC_CHINESE_TRAD</p>
+<p>AppleVolumes.default<br/>
+    volcharset:CP950 maccharset:MAC_CHINESE_TRAD</p>
+<p>Apr 14 15:48:10 bad afpd[2571]: WARNING: volume encoding CP950 is *not* supported by netatalk, expect problems !!!!</p>
+<p>Write/Read OK<br/>
+===========================================================================<br/>
+===========================================================================<br/>
+afpd.conf<br/>
+    -unixcodepage MAC_CHINESE_TRAD -maccodepage MAC_CHINESE_TRAD</p>
+<p>AppleVolumes.default<br/>
+    volcharset:CP950 maccharset:MAC_CHINESE_TRAD</p>
+<p>Apr 14 15:50:47 bad afpd[2628]: WARNING: volume encoding CP950 is *not* supported by netatalk, expect problems !!!!</p>
+<p>Write/Read OK<br/>
+===========================================================================<br/>
+===========================================================================<br/>
+smb.conf<br/>
+[global]<br/>
+    dos charset = CP950<br/>
+    unix charset = UTF8<br/>
+    display charset = UTF8<br/>
+===========================================================================<br/>
+afpd.conf<br/>
+    -unixcodepage UTF8 -maccodepage MAC_CHINESE_TRAD</p>
+<p>AppleVolumes.default<br/>
+    volcharset:UTF8 maccharset:MAC_CHINESE_TRAD</p>
+<p>Write/Read OK incluse Japanese file name (in FreeBSD Mangled)<br/>
+===========================================================================<br/>
+===========================================================================<br/>
+smb.conf<br/>
+[global]<br/>
+    dos charset = CP950<br/>
+    unix charset = CP950<br/>
+    display charset = UTF8<br/>
+===========================================================================<br/>
+afpd.conf<br/>
+    -unixcodepage UTF8 -maccodepage MAC_CHINESE_TRAD</p>
+<p>AppleVolumes.default<br/>
+    volcharset:UTF8 maccharset:MAC_CHINESE_TRAD</p>
+<p>Write/Read Mangled (in FreeBSD Mac Mangled PC OK)<br/>
+===========================================================================<br/>
+===========================================================================<br/>
+smb.conf<br/>
+[global]<br/>
+    dos charset = UTF8<br/>
+    unix charset = CP950<br/>
+    display charset = UTF8<br/>
+===========================================================================<br/>
+afpd.conf<br/>
+    -unixcodepage UTF8 -maccodepage MAC_CHINESE_TRAD</p>
+<p>AppleVolumes.default<br/>
+    volcharset:UTF8 maccharset:MAC_CHINESE_TRAD</p>
+<p>Write/Read Mangled (in FreeBSD Mac Mangled PC OK, but NOT Japanese file name)<br/>
+===========================================================================<br/>
+<br/></code>
+※ 相關報導:<br/>
+<br/>
+* <a href="http://www.wretch.cc/blog/fsj&article_id=4757068">Netatalk 2.x CJK 支援公開測試</a> <br/>
+* <a href="http://www.wretch.cc/blog/fsj&article_id=3150183">Netatalk 2.0.3 + FreeBSD 4.x 中文字碼的支援</a> <br/>
+</p>
+</p>
+                        <div class="clearfix">
+                              <div id="push">
+                  <span id="recommendcount">0</span>推薦此文章
+                  <a href="javascript:void(0)" id="pushbtn" class="push">推</a>
+                  <a href="javascript:void(0)" id="collectbtn" class="pull">æ”¶</a>
+                </div>
+                                          <div class="social-wrapper">
+<div class="social-widget">
+  <div class="bd">  
+      <a class="fb" title="分享在我的Facebook" target="_blank" href="http://tw.rd.yahoo.com/referurl/wretch/shareout/blog/facebook/SIG=17veajg8v/*http%3A//www.facebook.com/sharer.php?u=http%3A%2F%2Fwww.wretch.cc%2Frd%2Fblog%2Ffacebook%2Fwww.wretch.cc%2Fblog%2Ffsj%2F3269525&t=FreeBSD+6.x+%2B+Netatalk+%2B+Samba+%E4%BA%A4%E5%8F%89%E6%B8%AC%E8%A9%A6...-fsj%E7%9A%84%E7%84%A1%E5%90%8D%E5%B0%8F%E7%AB%99">分享在我的Facebook</a>
+      <a class="plurk" title="分享在我的Plurk" target="_blank" href="http://tw.rd.yahoo.com/referurl/wretch/shareout/blog/plurk/SIG=189j25oqs/*http%3A//www.plurk.com/?qualifier=shares&status=http%3A%2F%2Fwww.wretch.cc%2Frd%2Fblog%2Fplurk%2Fwww.wretch.cc%2Fblog%2Ffsj%2F3269525+%28FreeBSD+6.x+%2B+Netatalk+%2B+Samba+%E4%BA%A4%E5%8F%89%E6%B8%AC%E8%A9%A6...-fsj%E7%9A%84%E7%84%A1%E5%90%8D%E5%B0%8F%E7%AB%99%29">分享在我的Plurk</a>
+      <a class="yim" title="分享在我的即時通" href="ymsgr:customstatus?FreeBSD+6.x+%2B+Netatalk+%2B+Samba+%E4%BA%A4%E5%8F%89%E6%B8%AC%E8%A9%A6...-fsj%E7%9A%84%E7%84%A1%E5%90%8D%E5%B0%8F%E7%AB%99+http%3A%2F%2Fwww.wretch.cc%2Frd%2Fblog%2Fyim%2Fwww.wretch.cc%2Fblog%2Ffsj%2F3269525">分享在我的即時通</a>
+  </div>
+</div>
+<div class="wretch-reblog fixinline">
+    <div class="bd bubble-none">  
+        <a class="wretch" href="http://www.wretch.cc/blog/post.php?rtype=article&t=FreeBSD+6.x+%2B+Netatalk+%2B+Samba+%E4%BA%A4%E5%8F%89%E6%B8%AC%E8%A9%A6...&tl=http%3A%2F%2Fwww.wretch.cc%2Fblog%2Ffsj%2F3269525&d=FreeBSD+6.x+%2B+Netatalk+2.0.3+CJK+patched+%2B+Samba+3.0.22+%E4%BA%A4%E5%8F%89%E6%B8%AC%E8%A9%A6...+%40.%40a%0D%0A%E4%B8%80%E4%BA%9B%E6%B3%A8%E6%84%8F%E4%BA%8B%E9%A0%85%EF%BC%9A%0D%0A1.+%E5%9C%A8+smb.conf+%E7%95%B6%E4%B8%AD%E8%A8%AD%E5%AE%9A+%22unix+charset%22+%E8%88%87+%22display+charset%22+%E6%99%82%E6%9C%80%E5%A5%BD%E7%9B%B8%E5%90%8C%E2%80%A6&a=fsj&al=http%3A%2F%2Fwww.wretch.cc%2Fuser%2Ffsj" target="_blank" title="發文至無名">發文
+                </a>
+    </div>
+</div>
+
+<iframe class="fixinline" src="http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fwww.wretch.cc%2Fblog%2Ffsj%2F3269525&layout=button_count&show_faces=false&width=92&action=like&colorscheme=light&height=21" scrolling="no" frameborder="0" style="overflow:hidden; width:92px; height:21px;" allowTransparency="true"></iframe>
+</div>
+                          </div>
+            
+                        <div id="article_counter" align="right">
+              Today's Visitors: 0 Total Visitors: 272            </div>
+          
+            
+      <div id="collection_comments" style="visibility:hidden">
+    <span><strong><nobr>You can leave comment to this collection</nobr></strong></span>
+    <img class="icon" src="http://l.yimg.com/e/serv/blog/img/close.gif" onclick="$('collection_comments').style.visibility = 'hidden'">
+    <form action="../do_collect.php" method="post" name='ajax_favorites_pop' id="word_form_pop">
+            <input type=hidden name=".c" value="Lp3GCObMNHg">
+        <input type=hidden name=".t" value="1322178371">    <p id="postContentPop">
+      <nobr>Collection Category:<select name="category">
+        <option value="0">未分類(0)</option>
+              </select>
+      <a href="/admin/blog/?func=collection&col=folder" target="_blank">Add Collection Category</a></nobr><br/>
+      <nobr>Collection Comment:<input type="text" class="text" name="comments_text_pop" value='' maxlength='100'></nobr>
+    </p>
+    <p id="submitPost">
+      <nobr>
+      <span class="head"></span>
+        <input name="owner" type="hidden" value="fsj" />
+        <input name="aid" type="hidden" value="3269525" />
+        <input name="viewer_id" type="hidden" value="">
+        <input name="title" type="hidden" value="FreeBSD 6.x + Netatalk + Samba 交叉測試..." />
+        <input name="save" type="submit" value="Confirm Collection" onclick="$('collection_comments').style.visibility = 'hidden'"/>
+        <input name="cancel" type="reset" value="Cancel" onclick="$('collection_comments').style.visibility='hidden'"/>
+      </nobr>
+    </p>
+    </form>
+  </div><!--end of div id=comments -->
+
+              </div>
+
+                        <div class="extended">
+              Personal Category: <a href="http://www.wretch.cc/blog/fsj&category_id=0">Uncategorized Articles</a>
+
+              <span>Topic:  <a href="/blog" target="_blank">未分類</a></span>
+              <br />
+              
+                          </div>
+                                    </div> <!-- end of articletext -->
+
+
+            <div class="posted">
+            <a href="/blog/fsj">fsj</a> at <a href="/blog/">無名小站</a> at 07:17 PM post            | <a href="/blog/fsj/3269525#postComments">Reply(0)</a>
+            | <a href="/blog/fsj/3269525#trackbacks">Trackback(0)</a>
+            | <a href="javascript:void(0)" id="showCollector">Collection(0)</a>
+                                                | <a href="http://cc.wretch.cc/help/prosecute.php?badid=fsj&aid=3269525&cs=YTo0OntpOjA7TjtpOjE7czozOiJmc2oiO2k6MjtzOjA6IiI7aTozO2k6MzY1NzM7fQ--" target="_blank">prosecute</a>
+                      </div>
+
+  
+                      
+            <div class="total-comments-div">
+                                <div class="trackback-url">
+                  [Trackback URL]
+                  <input type="text" id="trackback_url" value='http://www.wretch.cc/blog/trackback.php?blog_id=fsj&article_id=3269525'>
+                  <input type="button" value="Copy Trackback Url" onClick="copy_to_clipborad('trackback_url'); alert('Already copy to the clipboard')">
+                                  </div>
+                                          
+              <br />
+
+              
+                      <br /><a href="http://www.wretch.cc/IDintegration/?ref=%2525252Fblog%2525252Ffsj%2525252F3269525">Only friends can post a comment, Login first</a>
+            </div> <!--  end of total-comments-div -->
+          
+        </div> <!-- end of blogbody2 -->
+
+      </div> <!-- end of blogbody -->
+
+                
+</div> <!-- end of class=blog -->
+</div> <!-- end of content -->
+
+
+<div id="links">
+
+  <div id="links2">
+
+  <div id="boxMySpace">
+ <div class="boxMySpace0">
+  <div class="sidetitle">
+   <a target="_blank" href="http://tw.rd.yahoo.com/referurl/wretch/vip/insidepage/evt=47619/*http://bill.wretch.cc/">
+    <img align="middle" border="0" class="vip_icon" src="http://l.yimg.com/e/serv/common/img/isAuth_silver.gif" alt="vip_icon"/>
+   </a>
+   fsj's Home  </div>
+ </div>
+ <div class="boxMySpace1">
+  <div class="side">
+   <div class="boxMySpaceImg">
+    <a href="/user/fsj">
+     <img border="0" src="http://l.yimg.com/e/cover/fsj_90.jpg?2"/>
+    </a>
+   </div>
+
+   <div id="blogCategory">
+    <span>Topic:</span>
+    <a href="http://www.wretch.cc//blog/?tab=hot&class_id=9">Political Affairs</a>
+   </div>
+
+   <div id="service">
+    <ul id="serviceList">
+     <li><a class="mySpaceLink" id="linkMypage" href="http://tw.rd.yahoo.com/referurl/wretch/index/mprd/*http://www.wretch.cc/">Mypage</a></li>
+     <li><a class="mySpaceLink" id="linkAlbum" href="/album/fsj">album</a></li>
+     <li><a class="mySpaceLink" id="linkBlog" href="/blog/fsj">blog</a></li>
+     <li><a class="mySpaceLink" id="linkGbook" href="/guestbook/fsj">guestbook</a></li>
+     <li><a class="mySpaceLink" id="linkUser" href="/user/fsj">User</a></li>
+     <li><a class="mySpaceLink" id="linkFriend" href="/friend/fsj">Friend</a></li>
+     <li><a class="mySpaceLink" id="linkVideo" href="/video/fsj">Video</a></li>
+    </ul>
+
+    <ul id="interactionList">
+     <li class="boxAddFriendLink"><a class="mySpaceLink" href="/album/addfriend.php?uid=fsj" id="link_addfriend">Add to Friend List</a></li>
+    </ul>
+   </div>
+    <select id="friendlist" name="friendlist" onChange="MeetFriend('http://www.wretch.cc/blog/', this);">
+  <option>- Friends' Blog -</option>
+    <option value=angela5247>angela5247</option>
+    <option value=brightpu>brightpu</option>
+    <option value=cry555666>cry555666</option>
+    <option value=cwwany>cwwany</option>
+    <option value=ipeggyhsu>ipeggyhsu</option>
+    <option value=mrock>mrock</option>
+    <option value=poyee221>poyee221</option>
+    <option value=sesther88>sesther88</option>
+    <option value=SHE911>SHE911</option>
+    <option value=skymirage>skymirage</option>
+    <option value=sweetyjoan>sweetyjoan</option>
+    <option value=thebz1>thebz1</option>
+</select>
+  </div>
+ </div>
+</div>
+
+      <div id="boxCategory">
+      <div class="boxCategory0">
+        <div class="sidetitle">
+          Categories        </div>
+      </div>
+      <div class="boxCategory1">
+        <div class="side">
+                              <a href="/blog/fsj&category_id=0">Uncategorized Articles</a><br />
+                  </div>
+      </div>
+      <br />
+    </div>
+
+      <div id="boxDate">
+      <div class="boxDate0">
+        <div class="sidetitle">
+          Monthly Archives        </div>
+      </div>
+      <div class="boxDate1">
+        <div class="side">
+          <a href="http://www.wretch.cc/blog/fsj&list=1">All Articles</a>
+          <br />
+          <select onChange="goMonthly(this);">
+            <option value="-1">- Monthly Archives -</option>
+                        <option value="http://www.wretch.cc/blog/fsj&schedule=1&year=2007&month=8">August 2007(161)</option>
+                        <option value="http://www.wretch.cc/blog/fsj&schedule=1&year=2007&month=7">July 2007(429)</option>
+                        <option value="http://www.wretch.cc/blog/fsj&schedule=1&year=2007&month=6">June 2007(447)</option>
+                        <option value="http://www.wretch.cc/blog/fsj&schedule=1&year=2007&month=5">May 2007(432)</option>
+                        <option value="http://www.wretch.cc/blog/fsj&schedule=1&year=2007&month=4">April 2007(323)</option>
+                        <option value="http://www.wretch.cc/blog/fsj&schedule=1&year=2007&month=3">March 2007(154)</option>
+                        <option value="http://www.wretch.cc/blog/fsj&schedule=1&year=2007&month=2">February 2007(185)</option>
+                        <option value="http://www.wretch.cc/blog/fsj&schedule=1&year=2007&month=1">January 2007(393)</option>
+                        <option value="http://www.wretch.cc/blog/fsj&schedule=1&year=2006&month=12">December 2006(238)</option>
+                        <option value="http://www.wretch.cc/blog/fsj&schedule=1&year=2006&month=11">November 2006(420)</option>
+                        <option value="http://www.wretch.cc/blog/fsj&schedule=1&year=2006&month=10">October 2006(426)</option>
+                        <option value="http://www.wretch.cc/blog/fsj&schedule=1&year=2006&month=9">September 2006(368)</option>
+                        <option value="http://www.wretch.cc/blog/fsj&schedule=1&year=2006&month=8">August 2006(410)</option>
+                        <option value="http://www.wretch.cc/blog/fsj&schedule=1&year=2006&month=7">July 2006(423)</option>
+                        <option value="http://www.wretch.cc/blog/fsj&schedule=1&year=2006&month=6">June 2006(476)</option>
+                        <option value="http://www.wretch.cc/blog/fsj&schedule=1&year=2006&month=5">May 2006(493)</option>
+                        <option value="http://www.wretch.cc/blog/fsj&schedule=1&year=2006&month=4">April 2006(441)</option>
+                        <option value="http://www.wretch.cc/blog/fsj&schedule=1&year=2006&month=3">March 2006(422)</option>
+                        <option value="http://www.wretch.cc/blog/fsj&schedule=1&year=2006&month=2">February 2006(329)</option>
+                        <option value="http://www.wretch.cc/blog/fsj&schedule=1&year=2006&month=1">January 2006(301)</option>
+                        <option value="http://www.wretch.cc/blog/fsj&schedule=1&year=2005&month=12">December 2005(259)</option>
+                        <option value="http://www.wretch.cc/blog/fsj&schedule=1&year=2005&month=11">November 2005(204)</option>
+                        <option value="http://www.wretch.cc/blog/fsj&schedule=1&year=2005&month=10">October 2005(220)</option>
+                        <option value="http://www.wretch.cc/blog/fsj&schedule=1&year=2005&month=9">September 2005(168)</option>
+                        <option value="http://www.wretch.cc/blog/fsj&schedule=1&year=2005&month=8">August 2005(102)</option>
+                        <option value="http://www.wretch.cc/blog/fsj&schedule=1&year=2005&month=7">July 2005(73)</option>
+                        <option value="http://www.wretch.cc/blog/fsj&schedule=1&year=2005&month=6">June 2005(38)</option>
+                        <option value="http://www.wretch.cc/blog/fsj&schedule=1&year=2005&month=5">May 2005(35)</option>
+                        <option value="http://www.wretch.cc/blog/fsj&schedule=1&year=2005&month=4">April 2005(49)</option>
+                        <option value="http://www.wretch.cc/blog/fsj&schedule=1&year=2005&month=3">March 2005(28)</option>
+                        <option value="http://www.wretch.cc/blog/fsj&schedule=1&year=2005&month=2">February 2005(20)</option>
+                        <option value="http://www.wretch.cc/blog/fsj&schedule=1&year=2005&month=1">January 2005(11)</option>
+                      </select>
+          <br />
+        </div>
+      </div>
+      <br />
+    </div>
+
+      <div id="boxSearch">
+      <div class="boxSearch0">
+        <div class="sidetitle">
+          Search This Blog        </div>
+      </div>
+      <div class="boxSearch1">
+        <div class="side">
+          <br />
+          <form action="http://www.wretch.cc/blog/blog.php" method="get" >
+            <input type="hidden" name="id" value='fsj'>
+            <input type="text" name="search" id="blog_search_key" size="12" maxlength="12">
+            <input type="submit" id="blog_search_submit" value="Search">
+            <br />
+
+            <input type="checkbox" name="search_title" class="blog_search_filter" value="1" checked>Title</input>
+            <input type="checkbox" name="search_content" class="blog_search_filter" value="1">Contents</input>
+          </form>
+        </div>
+      </div>
+      <br />
+    </div>
+
+    <div id="divThird">
+    <div id="divThird2">
+        <script>
+      var iframeW=65535, tmpW=0;
+      tmpW = document.getElementById('links').clientWidth;
+      if(tmpW > 0)
+        iframeW = Math.min(iframeW, tmpW);
+      tmpW = document.getElementById('links2').clientWidth;
+      if(tmpW > 0)
+        iframeW = Math.min(iframeW, tmpW);
+      tmpW = document.getElementById('divThird').clientWidth;
+      if(tmpW > 0)
+        iframeW = Math.min(iframeW, tmpW);
+      tmpW = document.getElementById('divThird2').clientWidth;
+      if(tmpW > 0)
+        iframeW = Math.min(iframeW, tmpW);
+      function autoWidth(iframe)
+      {
+        if(iframeW > 0 && iframeW < 65535)
+          iframe.width = iframeW;
+      }
+      </script>
+          <div id="boxFolder">
+        <div class="boxFolder0">
+          <div class="sidetitle">
+                        推薦連結,新網誌請看下面          </div>
+        </div>
+        <div class="boxFolder1">
+        <div class="side" style=" ">
+                           
+                <a target="_blank" href="http://only-perception.blogspot.com" title="æ–°å®¶...">
+                                    Only Perception                </a><br />
+                                         
+                <a target="_blank" href="http://www.npo.org.tw/Bulletin/index.asp" title="台灣NPO大本營">
+                                    公益活動佈告欄                </a><br />
+                                         
+                <a target="_blank" href="http://www.thefreedictionary.com/" title="Free oline dctionary, free access">
+                                    TheFreeDictionary                </a><br />
+                                         
+                <a target="_blank" href="http://www.tvcr.org.tw/" title="不給媒體牽著鼻子走">
+                                    媒體識讀推廣中心                </a><br />
+                                         
+                <a target="_blank" href="http://digg.com/" title="挖新聞">
+                                    Digg                </a><br />
+                                         
+                <a target="_blank" href="http://boingboing.net/" title="什麼鬼東西都有的 blog 集團...">
+                                    BoingBoing                </a><br />
+                                         
+                <a target="_blank" href="http://www.shoutcast.com/" title="Free internet radio!">
+                                    SHOUTcast                </a><br />
+                                         
+                <a target="_blank" href="http://tw.myblog.yahoo.com/jw!NIohvKaLExS1bKAMroNE" title="意思是說賠錢別找他">
+                                    無責任投資論壇                </a><br />
+                                         
+                <a target="_blank" href="http://www.chromasia.com/" title="好特別的攝影手法">
+                                    c h r o m a s i a                </a><br />
+                                         
+                <a target="_blank" href="http://www.cambridgeincolour.com/" title="數位攝影教程">
+                                    Cambridge in Colour                </a><br />
+                                         
+                <a target="_blank" href="http://findbook.tw/" title="書籍比價來這裡">
+                                    Findbook.tw                </a><br />
+                                         
+                <a target="_blank" href="http://www.librarything.com/" title="ctalog your books online">
+                                    LibraryThing                </a><br />
+                                         
+                <a target="_blank" href="http://www.keko.com.cn/" title="全球最大中文食譜搜索平台">
+                                    可口網                </a><br />
+                                         
+                <a target="_blank" href="http://www.eol.org/" title="生物大百科">
+                                    Encyclopedia of Life                </a><br />
+                                                </div>
+        </div>
+        <br />
+      </div>
+          <div id="boxFolder">
+        <div class="boxFolder0">
+          <div class="sidetitle">
+                        本人文章採用下列方式授權          </div>
+        </div>
+        <div class="boxFolder1">
+        <div class="side" style=" ">
+                           
+                <a target="_blank" href="http://creativecommons.org/licenses/by-sa/3.0/" title="">
+                                    Creative Commons Attribution-Share Alike 3.0 Unported                </a><br />
+                                                </div>
+        </div>
+        <br />
+      </div>
+    
+        <div id="boxCounter">
+        <div class="boxCounter0">
+          <div class="sidetitle">
+            Visitors Counter          </div>
+        </div>
+        <div class="boxCounter1">
+          <div class="side">
+            Today's Visitors: 11<br />
+            Total Visitors: 1691735          </div>
+        </div>
+      </div>
+
+    </div> <!-- end of divThird2 -->
+    </div> <!-- end of divThird -->
+    
+  </div> <!-- end of links2 -->
+
+</div> <!-- end of links -->
+
+
+</div> <!-- end of main2 -->
+
+<div id="extraDiv1"><span></span></div>
+<div id="extraDiv2"><span></span></div>
+
+
+</div> <!-- end of container2 -->
+
+<div id="footer"></div>
+
+<div id="extraDiv3"><span></span></div>
+<div id="extraDiv4"><span></span></div>
+
+</div> <!-- end of container1 -->
+
+<br clear="all" />
+
+<div id="extraDiv5"><span></span></div>
+<div id="extraDiv6"><span></span></div>
+
+
+  <div id="friend-picker">
+    <div id="friend-picker-container">
+      <div id="friend-picker-hd">
+        <span>誰來收藏</span>
+        <div id="loading">Loading ...</div>
+        <a id="friend-picker-closebtn"><img height="15" width="15" src="http://l.yimg.com/e/serv/blog/img/close.gif"></a>
+      </div>
+      <div id="friend-picker-pagination"></div>
+      <div id="friend-picker-bd"></div>
+    </div><!-- div#friend-picker-container -->
+  </div><!-- div#friend-picker-->
+
+      <script>
+  var ownerid= 'fsj';
+  var aid = '3269525';
+  var ajax_crumb = '&.c=Lp3GCObMNHg&.t=1322178371';
+  var ajax_server_name = 'http://www.wretch.cc/ajax/';
+</script>
+<script type="text/javascript" src="http://l.yimg.com/e/serv/blog/js/friend_picker.js"></script>
+      
+<script id="bcw" type="text/javascript">var random_num=Math.random();document.write("<img style=\"display:none;\" width=1 height=1 src=\"http://geo.yahoo.com/b?s=2022137480&make=yahoo&type=wretch&t="+random_num+"&r="+escape(document.referrer)+"\">");</script><!-- START Nielsen Online SiteCensus V5.3 Compact --><script type="text/javascript">var _rsCI="tw-yahoo";var _rsCG="0";var _rsIMG=new Image(1,1);_rsIMG.src="//secure-yt.imrworldwide.com/cgi-bin/m?rn="+(new Date()).getTime()+"&ci="+_rsCI+"&cg="+_rsCG+"&si="+escape(window.location.href)+"&rp="+escape(document.referrer);</script><noscript><div><img src="//secure-yt.imrworldwide.com/cgi-bin/m?ci=tw-yahoo&cg=0" alt=""/></div></noscript><!-- END Nielsen Online SiteCensus V5.3 Compact --><script language="JavaScript" type="text/javascript" charset="big5" src="http://global.adserver.yahoo.com/a?f=2022137480&p=tw_kwretch&l=FOOT9&c=r"></script><noscript><iframe src="http://global.adserver.yahoo.com/a?f=2022137480&p=tw_kwretch&l=FOOT9&c=h&bg=white" width=1 height=1 marginwidth=0 marginheight=0 hspace=0 vspace=0 frameborder=0 scrolling=no></iframe></noscript><script language="JavaScript" src="http://l.yimg.com/e/serv/blog/js/smart_address.js"></script>
+</div>
+</div><!-- nv hugewrepper --><div id="kukubar-lower" class="kukubar-bar  ">
+        <div class="login-request dropdown">
+        <div class="login-btn">
+            <a class="footer-ok-btn" href="http://tw.rd.yahoo.com/referurl/wretch/kk/u/PF/V_C/login/*http://www.wretch.cc/IDintegration/?ref=%2525252Fblog%2525252Ffsj%2525252F3269525">登入</a>
+        </div>
+        <div class="login-msg login-msg-vitality">
+            登入無名小站瀏覽推薦朋友動態
+        </div>
+        <div class="login-msg login-msg-subscription">
+            登入無名小站瀏覽主題訂閱
+        </div>
+    </div>
+        <div class="left-side">
+        <div id="footer-feedback" class="bar-block">
+            <a class="" href="http://tw.rd.yahoo.com/referurl/wretch/kk/u/PF/AD/*http://tw.help.cc.yahoo.com/?product=53" target="_blank">
+            <img src="http://l.yimg.com/e/serv/common/img/footer_left.png" alt="我有建議" __href="http://tw.help.cc.yahoo.com/?product=53">
+            </a>
+        </div>
+                <div id="footer-fb" class="bar-block bar-block-click">
+            <a class="footer-fb-btn" href="#">近期動態 <span class="bar-block-btn">展開</span></a>
+            <iframe src="http://www.facebook.com/plugins/activity.php?site=www.wretch.cc&width=300&height=267&header=false&colorscheme=light&recommendations=true" scrolling="no" frameborder="0" style="border:none; overflow:hidden; width:300px; height:267px;" allowTransparency="false"></iframe>
+        </div>
+        <div id="footer-subscription" class="bar-block bar-block-click">
+            <a class="footer-subscription-btn" href="#">主題訂閱<span class="bar-block-btn">展開</span></a>
+                <div id="scrb-panel" class="dropdown ">
+                <div class="hd panel-block">
+                </div>
+                <div class="bd panel-block">
+                </div>
+            </div>
+        </div>
+    </div>
+    <div class="right-side">
+        <ul id="footer-ugc-compose">
+            <li class="bar-block bar-block-click blog-service"><em>網誌</em>
+                <ul class="dropdown">
+                    <li><a class="bar-link" href="http://tw.rd.yahoo.com/referurl/wretch/kk/u/PF/sc/blog/post/*http://www.wretch.cc/blog/post.php?blog_id=">Post Article</a></li>
+                    <li><a class="bar-link" href="http://tw.rd.yahoo.com/referurl/wretch/kk/u/PF/sc/blog/css/*http://www.wretch.cc/admin/style/?func=template_new&source=B">Blog Style</a></li>
+                    <li class="last"><a class="bar-link" href="http://tw.rd.yahoo.com/referurl/wretch/kk/u/PF/sc/blog/mgr/*http://www.wretch.cc/admin/blog/">Blog Setting</a></li>
+                </ul>
+            </li>
+            <li class="bar-block bar-block-click album-service"><em>相簿</em>
+                <ul class="dropdown">
+                    <li><a class="bar-link" href="http://tw.rd.yahoo.com/referurl/wretch/kk/u/PF/sc/album/upload/*http://www.wretch.cc/album/yuiuploader.php">Upload Photo</a></li>
+                    <li><a class="bar-link" href="http://tw.rd.yahoo.com/referurl/wretch/kk/u/PF/sc/album/css/*http://www.wretch.cc/admin/style/?func=template_new&source=A">Album Style</a></li>
+                    <li class="last"><a class="bar-link" href="http://tw.rd.yahoo.com/referurl/wretch/kk/u/PF/sc/album/mgr/*http://www.wretch.cc/admin/album/">Album Setting</a></li>
+                </ul>
+            </li>
+            <li class="bar-block bar-block-click video-service"><em>影音</em>
+                <ul class="dropdown">
+                    <li><a class="bar-link" href="http://tw.rd.yahoo.com/referurl/wretch/kk/u/PF/sc/video/upload/*http://www.wretch.cc/video/yuiuploader.php">Upload Video</a></li>
+                    <li><a class="bar-link" href="http://tw.rd.yahoo.com/referurl/wretch/kk/u/PF/sc/video/css/*http://www.wretch.cc/admin/style/?func=template_new&source=V">Video Style</a></li>
+                    <li class="last"><a class="bar-link" href="http://tw.rd.yahoo.com/referurl/wretch/kk/u/PF/sc/video/mgr/*http://www.wretch.cc/video/_manage/?func=set">Video Setting</a></li>
+                </ul>
+            </li>
+        </ul>
+    </div>
+</div>
+<div id="footer-switch" class=" ">
+<button>關閉工具列</button>
+</div>
+<script src="http://yui.yahooapis.com/3.4.1/build/yui/yui-min.js"></script><script src="http://l.yimg.com/e/serv/common/js/kukubar.js?20111123"></script>
+<link rel="stylesheet" href="http://l.yimg.com/e/serv/common/css/promotion.css" type="text/css" />
+<script src="http://l.yimg.com/e/serv/common/js/promotion.js"></script></body>
+<script src="http://yui.yahooapis.com/combo?2.8.1/build/connection/connection-min.js&2.8.1/build/container/container-min.js&2.8.1/build/element/element-min.js&2.8.1/build/button/button-min.js&2.8.1/build/json/json-min.js"></script>
+<script src="http://l.yimg.com/e/serv/blog/js/antiPhishing.js"></script>
+<script src="http://l.yimg.com/e/serv/blog/js/trackback.js?20110808"></script>
+<script>
+window.onload = function () {
+    var flash = document.getElementsByTagName('embed');
+    for (var i = 0; i < flash.length; i++) {
+        var newFlash = flash[i].cloneNode(true);
+        newFlash.src = flash[i].src;
+        newFlash.setAttribute('type', flash[i].getAttribute('type'));
+        newFlash.setAttribute('wmode', 'transparent');
+        flash[i].parentNode.replaceChild(newFlash, flash[i]);
+    }
+}
+</script>
+</html>
+<!-- w366.wretch.tp2.yahoo.com compressed/chunked Fri Nov 25 07:46:11 CST 2011 -->
diff --git a/mcs/class/I18N/CJK/Test/texts/japanese3-50220.txt b/mcs/class/I18N/CJK/Test/texts/japanese3-50220.txt
new file mode 100644
index 0000000..764cda2
--- /dev/null
+++ b/mcs/class/I18N/CJK/Test/texts/japanese3-50220.txt
@@ -0,0 +1,108 @@
+<title>$B0lHV$*F@$J%+(B?$B$l$N%K(B?            $B0lHV$*F@$J%+$rA*$V$?$a$N5U0z$-(B   $B!!!!(B  $B!!(B    
+$B!!!!!!%/%l%8%C%H%+(B> $B0lHV$*F@$J%+(B     $B0lHV$*F@$J%+(B            
+$B%/%l%8%C%H%+$N5U0z$-L\E*JL!"%i%$%U%9%?%$%kJL!"5!G=JL!"CO0hJL!"G/NpJL$KJ,$+$l$F$*$j!"$=$l$>$l$N%K(B  
+$B%/%l%8%C%H%+(B     <$BL\E*JL(B>    $BHt9T5!$N%^%$%k$,Cy$^$j!"L5NA9R6u7t$,$b$i$($k%+(B 
+$B('(B $BF|K\9R6u(B JAL$B%+(B $B=iG/EYG/2qHqL5NA(B
+$B('(B $BBg4Z9R6u(B JCB$B%9%+%$%Q%9%+(B $B=iG/EYG/2qHqL5NA(B
+$B('(B $B%3%s%A%M%s%?%k9R6u(B $B%o%s%Q%9(BJCB$B%0%"%`%+(B $B=iG/EYG/2qHqL5NA(B 
+$B('(B $B%f%J%$%F%C%I9R6u(B $B%^%$%l(B $B=iG/EYG/2qHqL5NA(B
+$B('(B $B%?%$9R6u(B $B%m%$%d%k%*(B $B=iG/EYG/2qHqL5NA(B
+$B('(B $B%7%s%,%]%/%j%9%U%i%$%d(B $B=iG/EYG/2qHqL5NA(B
+$B(&(B $B%(%U%i%$%s%0!&%V%k(B $B=iG/EYG/2qHqL5NA(B   
+$B;29M(B $B!'(B $B%^%$%k$H$O!)(B       $B%]%$%s%H$,8zN($h$/Cy$^$k$*F@$J%+(B 
+$B('(B $B3ZE7;T>l$G#2!s!"3ZE7%+(B $BG/2qHqL5NA(B
+$B('(B UFJ $B%S%"%=%+(B $BG/2qHqL5NA(B
+$B('(B $B%i%$%U%+(B $BG/2qHqL5NA(B
+$B(&(B $B%*%j%3%"%W%F%#(BiD $BG/2qHqL5NA(B       $B3$30N99T=}32J]81$,(B 
+$B('(B $B%K%3%9(B $B%S%"%=%+(B $BG/2qHqL5NA(B
+$B('(B $B%*%j%3%"%W%F%#(BiD $BG/2qHqL5NA(B
+$B('(B DC$B%+(B $BG/2qHqL5NA(B 
+$B('(B DC$B%4(B $B%+(B
+$B('(B DC$B%4(B $B=iG/EYG/2qHqL5NA(B
+$B('(B DC$B%+(B $B=iG/EYG/2qHqL5NA(B 
+$B('(B  $B=iG/EYG/2qHqL5NA(B
+$B(&(B $B%=%K(B $B=iG/EYG/2qHqL5NA(B 1$BG/$K(B1$BEY$N7h:Q$GG/2qHqL5NA(B
+      $B%]%$%s%H$r8=6b2=$G$-$k%/%l%8%C%H%+(B 
+$B('(B P-one$B%+(B $BG/2qHqL5NA(B
+$B('(B UFJ $B%S%"%=%+(B $BG/2qHqL5NA(B
+$B('(B NTT$B%0%k(B $BG/2qHqL5NA(B
+$B(&(B $B$5$/$i(BJCB$B%$(B $BG/2qHqL5NA(B       $BA4$F$N>&IJ$,#1!s3d0z$5$l$k%9(B 
+$B(&(B P-one$B%+(B $BG/2qHqL5NA(B       $B%;%>%s1J5WITLG(B.com$B$G$N$*Gc$$J*$G%]%$%s%H:GBg#1#9G\!*(B 
+$B(&(B $B!T%;%>%s!U%+(B       $BCB at 8F|7n$O%]%$%s%H#5G\!"Cy$^$C$?%]%$%s%H$O>&IJ7t$K8r49(B 
+$B(&(B $B%i%$%U%+(B $BG/2qHqL5NA(B       $B;}$C$F$$$k$@$1$G@($$!*%9%F%$%?%9%+(B 
+$B('(B $B%@%$%J(B
+$B('(B $B%"%a%j%+%s!&%(%-%9%W%l%9!&%+(B
+$B(&(B $B!T%;%>%s!U%W%i%A%J!&%"%a%j%+%s!&%(%-%9%W%l%9!&%+(B       $BMxMQ8BEY3[$,L5@)8B$N%9(B 
+$B(&(B $B%@%$%J(B      $B%4(B 
+$B(&(B $B%*%j%3%"%W%F%#(BiD $BG/2qHqL5NA(B       $B?M5$%3%9%a$,Ev$?$kG/2qHqL5NA$N=w at -8~$1(BJCB$B%+(B 
+$B(&(B JCB $B%j%s%@%+(B $BG/2qHqL5NA(B       $B7HBSBe$,:GBg#6#0!s3d0z$5$l$kG/2qHqL5NA%+(B 
+$B(&(B NTT$B%0%k(B $BG/2qHqL5NA(B       $B%-%c%C%7%s%0$rDc6bMx$G$G$-$k%+(B 
+$B(&(B $B$5$/$i(B JCB$B%$(B $BG/2qHqL5NA(B $B#3K|1_$^$G$J$iG/Mx#1!s!*(B
+      $B%,%=%j%sBe$,%-%c%C%7%e%P%C%/$5$l!"3$30J]81(B 
+$B(&(B  $B=iG/EYG/2qHqL5NA(B       $B1G2h!&%3%s%5(B 
+$B(&(B $B$T$"%+(B $B=iG/EYG/2qHqL5NA(B       $B0YBX%l(B 
+$B(&(B SBI$B%+(B       $B%H%i%Y%i(B. at Z 
+$B(&(B $B%7%F%#(B $B%(%j(B       $B%,%=%j%sBe!"9bB.F;O)NA6b$r%-%c%C%7%e%P%C%/(B 
+$B(&(B JCB$B%4(B       $B%m(B 
+$B(&(B $B%I%s!&%-%[(B(VISA$B!"(BJCB$B$N$_(B)
+      FC$B%P%m%;%m%J!"(BAC$B%_%i%s(B $B%5%C%+(B 
+$B('(B AC$B%_%i%s%+(B
+$B('(B AC$B%_%i%s%+(B
+$B(&(B FC$B%P%k%;%m%J%*%U%#%7%c%k3ZE7%+(B       $B1G2h$r1G2h4[$G3d0zNA6b$G8+$k!*(B 
+$B('(B $B1G2h$r3d0zNA6b$G8+$l$k%/%l%8%C%H%+(B
+$B(&(B $B1G2h$r3d0zNA6b$G8+$l$k%/%l%8%C%H%+(BF|K\JT)       $B%$%s%?(B 
+$B(&(B $B%=%K=iG/EYG/2qHqL5NA(B
+$B#1G/$K#1EY$N7h:Q$GG/2qHqL5NA(B
+      $BI42_E9$G:GBg#5!s3d0z(B 
+$B(&(B $BEl5^%[%F%k%:%3%s%U%)(B $BG/2qHqL5NA(B       $BN99TA0$K$f$C$?$jM%2m$J5$J,!*6u9A%i%&%s%8$rL5NA$GMxMQ(B 
+$B('(B  $B%@%$%J(B
+$B('(B $B%7%F%#(B $B%4(B
+$B('(B $B%N(B 
+$B('(B $B%7%F%#(B $B%(%j(B
+$B('(B $B%"%a%j%+%s!&%(%-%9%W%l%9!&%+(B
+$B('(B $B%"%a%j%+%s!&%(%-%9%W%l%9!&%4(B 
+$B('(B $B%"%a%j%+%s!&%(%-%9%W%l%9!&%S%8%M%9%+(B
+$B('(B UFJ $B%4(B
+$B('(B UFJ $B%d%s%0%4(B 
+$B('(B DC$B%+(B
+$B('(B $BEl5^(BTOP$B%4(B($B0lItM-NA$"$j(B)
+$B('(B 
+$B(&(B $B3ZE7%W%l%_%"%`%+(B       $BM%BT%5(B 
+$B(&(B JCB$B%+(B $B=iG/EYG/2qHqL5NA(B       $B7c0B$NEBF2%I%s!&%-%[(B 
+$B(&(B $B%I%s%-!&%[(B $BG/2qHqL5NA(B        $B?3::$N$$$i$J$$(BVISA$B%G%S%C%H%+(B 
+$B('(B H.I.S.$B%o(B $BG/2qHqL5NA(B
+$B('(B KNT$B%H%i%Y%k%-%c%C%7%e%+(B $BG/2qHqL5NA(B
+$B(&(B $B%9%k%,6d9T(BVISA$B%G%S%C%H%+(B $BG/2qHqL5NA(B       $B8x6&NA6b$b3d0z$G$-$k%+(B 
+$B(&(B P-one$B%+(B $BG/2qHqL5NA(B       $B2?$G$b#1!s3d0z$5$l$k$*F@$J%+(B 
+$B(&(B P-one$B%+(B $BG/2qHqL5NA(B      <$B%i%$%U%9%?%$%kJL(B>    $B%3%s%S%K$G$*F@!uJXMx$J%+(B 
+$B(&(B UCS $B%+%k%o%6%+(B($B%5G/2qHqL5NA(B       $B%9#5!s!A#1#5!s3d0z$G$*Gc$$J*"v(B 
+$B('(B $B@>M'(B
+$B('(B $B%$%H(B
+$B('(B $B%(%9%Q(B 
+$B('(B $B%f%K(B
+$B('(B $B%"%T%?(B
+$B(&(B $B%f(B       $BEl5^@~$GDL6P$7$F$$$k?M$N$?$a$N%+(B 
+$B(&(B $BEl5^%]%$%s%H%+(B $BG/2qHqL5NA(B       $B%$%s%?(B 
+$B('(B UFJ$B%K%3%9(B $B%S%"%=%+(B $BG/2qHqL5NA(B
+$B(&(B $B3ZE7%+(B $BG/2qHqL5NA(B    <$B5!G=JL(B>    $BEE;R%^%M(B 
+$B('(B UCS $B%+%k%o%6%+(B $BG/2qHqL5NA(B
+$B('(B $B%M%/%9%3CfF|K\(B $B%W%l%_%"%`%I%i%$%P(B $B=iG/EYG/2qHqL5NA(B
+$B#1G/$K#1EY$N7h:Q$GG/2qHqL5NA(B 
+$B('(B $B%=%K(B
+$B(&(B $B%=%K(B $B=iG/EYG/2qHqL5NA(B
+$B#1G/$K#1EY$N7h:Q$GG/2qHqL5NA(B
+   <$BCO0hJL(B> <$B9qFbJT(B>   $BEl5~ET$K$*=;$^$$$NJ}$,F@$9$k%+(B 
+$B(&(B $BEl5^%+(B $BG/2qHqL5NA(B       $B0&CN8)!&4tIl8)!&D9Ln8)$K$*=;$^$$$NJ}$,F@$9$k%+(B 
+$B(&(B UCS $B%+%k%o%6%+(B $BG/2qHqL5NA(B       $BCO0hJL(B $B$*F@$J(BETC$B%+(B 
+$B(&(B $BElF|K\%$(B
+$B#1G/$K#1EY$N7h:Q$GG/2qHqL5NA(B
+    <$B3$30JT(B>   $B%O%o%$!&%0%"%`!&%"%a%j%+K\EZ$N$*E9$GM%BT!"3d0z$,B?$$%+(B 
+$B('(B $B%K%3%9%+(B($B%/=iG/EYG/2qHqL5NA(B
+$B(&(B UFJ$B%+(B($B%/=iG/EYG/2qHqL5NA(B       $B3$30$N(BATM$B$G8=CO$N$*6b$r0z$-=P$;$k%+(B 
+$B('(B $B%9%k%,6d9T(BVISA$B%G%S%C%H%+(B $BG/2qHqL5NA(B
+$B('(B H.I.S.$B%o(B $BG/2qHqL5NA(B
+$B(&(B KNT$B%H%i%Y%k%-%c%C%7%e%+(B $BG/2qHqL5NA(B      <$BG/NpJL(B>    $B#1#5:P$+$i;}$F$k(BVISA$B%G%S%C%H%+(B 
+$B('(B $B%9%k%,6d9T(BVISA$B%G%S%C%H%+(B $BG/2qHqL5NA(B
+$B('(B H.I.S.$B%o(B $BG/2qHqL5NA(B
+$B(&(B KNT$B%H%i%Y%k%-%c%C%7%e%+(B $BG/2qHqL5NA(B                                    $BA0$X!'%/%l%8%C%H%+(B TOP$B!'%/%l%8%C%H%+(B                                  ?N???W?b?g?J?[?h?$B%U(B?m?$B%C(B   ?E ?N???W?b?g?J?[?h?$B%U(B?$B%%(B?$B!,(B?I   ?E ?N???W?b?g?J?[?h?$B%X(B?M?p?$B%U(B?$B%j(B?H   ?E ?N???W?b?g?J?[?h?$B%U(B?d?g?$B%s(B   ?E ?N???W?b?g?J?[?h?$B%U(B?@?\??????   ?E ?N???W?b?g?J?[?h?$B%U(B???$B!+(B   ?E ?N???W?b?g?J?[?h?$B%U(B?????N   ?E ?N???W?b?g?J?[?h?$B%U(B?$B%%(B??   ?E IC?`?b?v?????N???W?b?g?J?[?h   ?E ?J?[?h?$B%U(B?x?$B!&(B???@?$B%U(B???$B!+(B   ?E ?N???W?b?g?J?[?h?u?$B%((B?v???p?p?I       ?N???W?b?g?J?[?h?$B%U(B?$B%m(B?$B%C(B   ?E ?N???W?b?g?J?[?h?$B%U(B?t?$B%`(B?$B%m(B?$B%C(B   ?E ?C?O?$B%-(B?s?$B%m(B?$B%C(B?$B%K(B?$B%X(B?H   ?E ?C?O?$B%-(B?s?$B%m(B?$B%C(B?$B%U(B???$B%b(B?_   ?E ?C?O?$B%-(B?s?$B%m(B?$B%C(B?$B%U(B???{?p??   ?E ?C?O?$B%-(B?s?$B%m(B?$B%C(B?$B%U(B?e?N?j?b?N   ?E ?$B%-(B?s?$B%U(B?$B%J(B?$B%e(B?N???W?b?g?J?[?h       ?$B%d(B?E?K?\?????????$B!,(B??   ?E ?K?\?????????$B!,(B???$B%J(B?$B%)(B???J?[?h   ?E ???[?h?T?[?r?X?t?$B%)(B?J?[?h   ?E ?K?\?????? ?L???b?V???o?b?N   ?E ?V?[?g?x???g???Q?$B%m(B?$B%C(B?J?[?h   ?E ?$B%d(B?$B%U(B?$B%J(B?$B%e(B?N???W?b?g?J?[?h       ?$B%A(B?T?E?????$B%%(B???I?$B%d(B   ?E ?|?C???g?$B%a(B?$B%&(B?$B%r(BUP?J?[?h   ?E ?A?j???E?L?????N?^?[?n?J?[?h   ?E ?????$B%A(B?T?t?$B%)(B?N???W?b?g?J?[?h       ?N???W?b?g?J?[?h?$B%U(B????   ?E ?N???W?b?g?J?[?h?$B%K(B?$B!,(B?$B%[(B??   ?E ?v???p?[?J?[?h???????r   ?E ?v???p?[?J?[?h?$B%m(B?$B%C(B???r   ?E ?N?????$B%&(B?$B%=(B?J?[?h?$B%N(B???$B%b(B?H   ?E ?S?[???h?J?[?h?$B%U(B?????b?g
+      ?@ [?$B%-(B?s?$B%a(B?E?V???b?s???O?$B%a(B?E???`]   ?E ?N???W?b?g?J?[?h?p???$B%)(B?T   ?E ?$B%#(B?$B%;(B?$B%M(B?J?[?h?I?$B%`(B?t???$B%)(B?$B%)(B?T        ?N???W?b?g?J?[?h?$B%=(B???$B%K(B????   ?E ?N???W?b?g?J?[?h???$B%e(B?????$B%=(B??????   ?E ?N???W?b?g?J?[?h ?\???$B%s(B?$B%a(B   ?E ?N???W?b?g?J?[?h ?R?$B%/(B?$B%a(B   ?E ?N???W?b?g?J?[?h ?V???b?s???O?$B%a(B   ?E ?N???W?b?g?J?[?h ?x?$B!&(B???@?$B%a(B   ?E ?N???W?b?g?J?[?h ?????$B%a(B   ?E ?N???W?b?g?J?[?h ?g???u???$B%a(B         ?$B%#(B?$B%%(B?$B!,(B?T?C?g????    ?E ?$B%j(B?????$B%_(B(?l?b?g?$B%j(B??) ???r     ?E FX(?O???$B%i(B?$B%h(B?$B%j(B????????)    ?E ?$B%5(B???v???[???g?L?????y?[??   ?E ?l?b?g?o???N(?l?b?g???s) ???r   ?E ?Z?MSBI?l?b?g???s ???p?p   ?E ???$B%C(B?N???E???$B%+(B?N??????        ???T?C?g?$B%N(B?$B%D(B?$B!V(B?$B%H(B   ?E ???T?C?g?$B%h(B?$B%U(B?????N?$B%N(B?$B%D(B?$B!V(B?$B%H(B   ?E ???$B%s(B?????N?$B%N(B?$B%D(B?$B!V(B?$B%H(B???????N?W   ?E ?$B%A(B???$B!"(B?????@?$B%N(B???$B%F(B?$B%e(B?\?L   ?E ?$B%#(B???$B!V(B?????$B%1(B?t?H?[??   ?E ?T?C?g?}?b?v 1 2 3 4 5 6 7 8             </title><meta http-equiv=Content-Type content="text/html; charset=iso-2022-jp"><meta http-equiv=Content-Type content="text/html; charset=Shift_JIS"><c>?N???W?b?g?J?[?h?\???$B%s(B???r.com
\ No newline at end of file
diff --git a/mcs/class/I18N/CJK/Test/texts/japanese3-50221.txt b/mcs/class/I18N/CJK/Test/texts/japanese3-50221.txt
new file mode 100644
index 0000000..2a2212c
--- /dev/null
+++ b/mcs/class/I18N/CJK/Test/texts/japanese3-50221.txt
@@ -0,0 +1,108 @@
+<title>$B0lHV$*F@$J%+(B?$B$l$N%K(B?            $B0lHV$*F@$J%+$rA*$V$?$a$N5U0z$-(B   $B!!!!(B  $B!!(B    
+$B!!!!!!%/%l%8%C%H%+(B> $B0lHV$*F@$J%+(B     $B0lHV$*F@$J%+(B            
+$B%/%l%8%C%H%+$N5U0z$-L\E*JL!"%i%$%U%9%?%$%kJL!"5!G=JL!"CO0hJL!"G/NpJL$KJ,$+$l$F$*$j!"$=$l$>$l$N%K(B  
+$B%/%l%8%C%H%+(B     <$BL\E*JL(B>    $BHt9T5!$N%^%$%k$,Cy$^$j!"L5NA9R6u7t$,$b$i$($k%+(B 
+$B('(B $BF|K\9R6u(B JAL$B%+(B $B=iG/EYG/2qHqL5NA(B
+$B('(B $BBg4Z9R6u(B JCB$B%9%+%$%Q%9%+(B $B=iG/EYG/2qHqL5NA(B
+$B('(B $B%3%s%A%M%s%?%k9R6u(B $B%o%s%Q%9(BJCB$B%0%"%`%+(B $B=iG/EYG/2qHqL5NA(B 
+$B('(B $B%f%J%$%F%C%I9R6u(B $B%^%$%l(B $B=iG/EYG/2qHqL5NA(B
+$B('(B $B%?%$9R6u(B $B%m%$%d%k%*(B $B=iG/EYG/2qHqL5NA(B
+$B('(B $B%7%s%,%]%/%j%9%U%i%$%d(B $B=iG/EYG/2qHqL5NA(B
+$B(&(B $B%(%U%i%$%s%0!&%V%k(B $B=iG/EYG/2qHqL5NA(B   
+$B;29M(B $B!'(B $B%^%$%k$H$O!)(B       $B%]%$%s%H$,8zN($h$/Cy$^$k$*F@$J%+(B 
+$B('(B $B3ZE7;T>l$G#2!s!"3ZE7%+(B $BG/2qHqL5NA(B
+$B('(B UFJ $B%S%"%=%+(B $BG/2qHqL5NA(B
+$B('(B $B%i%$%U%+(B $BG/2qHqL5NA(B
+$B(&(B $B%*%j%3%"%W%F%#(BiD $BG/2qHqL5NA(B       $B3$30N99T=}32J]81$,(B 
+$B('(B $B%K%3%9(B $B%S%"%=%+(B $BG/2qHqL5NA(B
+$B('(B $B%*%j%3%"%W%F%#(BiD $BG/2qHqL5NA(B
+$B('(B DC$B%+(B $BG/2qHqL5NA(B 
+$B('(B DC$B%4(B $B%+(B
+$B('(B DC$B%4(B $B=iG/EYG/2qHqL5NA(B
+$B('(B DC$B%+(B $B=iG/EYG/2qHqL5NA(B 
+$B('(B  $B=iG/EYG/2qHqL5NA(B
+$B(&(B $B%=%K(B $B=iG/EYG/2qHqL5NA(B 1$BG/$K(B1$BEY$N7h:Q$GG/2qHqL5NA(B
+      $B%]%$%s%H$r8=6b2=$G$-$k%/%l%8%C%H%+(B 
+$B('(B P-one$B%+(B $BG/2qHqL5NA(B
+$B('(B UFJ $B%S%"%=%+(B $BG/2qHqL5NA(B
+$B('(B NTT$B%0%k(B $BG/2qHqL5NA(B
+$B(&(B $B$5$/$i(BJCB$B%$(B $BG/2qHqL5NA(B       $BA4$F$N>&IJ$,#1!s3d0z$5$l$k%9(B 
+$B(&(B P-one$B%+(B $BG/2qHqL5NA(B       $B%;%>%s1J5WITLG(B.com$B$G$N$*Gc$$J*$G%]%$%s%H:GBg#1#9G\!*(B 
+$B(&(B $B!T%;%>%s!U%+(B       $BCB at 8F|7n$O%]%$%s%H#5G\!"Cy$^$C$?%]%$%s%H$O>&IJ7t$K8r49(B 
+$B(&(B $B%i%$%U%+(B $BG/2qHqL5NA(B       $B;}$C$F$$$k$@$1$G@($$!*%9%F%$%?%9%+(B 
+$B('(B $B%@%$%J(B
+$B('(B $B%"%a%j%+%s!&%(%-%9%W%l%9!&%+(B
+$B(&(B $B!T%;%>%s!U%W%i%A%J!&%"%a%j%+%s!&%(%-%9%W%l%9!&%+(B       $BMxMQ8BEY3[$,L5@)8B$N%9(B 
+$B(&(B $B%@%$%J(B      $B%4(B 
+$B(&(B $B%*%j%3%"%W%F%#(BiD $BG/2qHqL5NA(B       $B?M5$%3%9%a$,Ev$?$kG/2qHqL5NA$N=w at -8~$1(BJCB$B%+(B 
+$B(&(B JCB $B%j%s%@%+(B $BG/2qHqL5NA(B       $B7HBSBe$,:GBg#6#0!s3d0z$5$l$kG/2qHqL5NA%+(B 
+$B(&(B NTT$B%0%k(B $BG/2qHqL5NA(B       $B%-%c%C%7%s%0$rDc6bMx$G$G$-$k%+(B 
+$B(&(B $B$5$/$i(B JCB$B%$(B $BG/2qHqL5NA(B $B#3K|1_$^$G$J$iG/Mx#1!s!*(B
+      $B%,%=%j%sBe$,%-%c%C%7%e%P%C%/$5$l!"3$30J]81(B 
+$B(&(B  $B=iG/EYG/2qHqL5NA(B       $B1G2h!&%3%s%5(B 
+$B(&(B $B$T$"%+(B $B=iG/EYG/2qHqL5NA(B       $B0YBX%l(B 
+$B(&(B SBI$B%+(B       $B%H%i%Y%i(B. at Z 
+$B(&(B $B%7%F%#(B $B%(%j(B       $B%,%=%j%sBe!"9bB.F;O)NA6b$r%-%c%C%7%e%P%C%/(B 
+$B(&(B JCB$B%4(B       $B%m(B 
+$B(&(B $B%I%s!&%-%[(B(VISA$B!"(BJCB$B$N$_(B)
+      FC$B%P%m%;%m%J!"(BAC$B%_%i%s(B $B%5%C%+(B 
+$B('(B AC$B%_%i%s%+(B
+$B('(B AC$B%_%i%s%+(B
+$B(&(B FC$B%P%k%;%m%J%*%U%#%7%c%k3ZE7%+(B       $B1G2h$r1G2h4[$G3d0zNA6b$G8+$k!*(B 
+$B('(B $B1G2h$r3d0zNA6b$G8+$l$k%/%l%8%C%H%+(B
+$B(&(B $B1G2h$r3d0zNA6b$G8+$l$k%/%l%8%C%H%+(BF|K\JT)       $B%$%s%?(B 
+$B(&(B $B%=%K=iG/EYG/2qHqL5NA(B
+$B#1G/$K#1EY$N7h:Q$GG/2qHqL5NA(B
+      $BI42_E9$G:GBg#5!s3d0z(B 
+$B(&(B $BEl5^%[%F%k%:%3%s%U%)(B $BG/2qHqL5NA(B       $BN99TA0$K$f$C$?$jM%2m$J5$J,!*6u9A%i%&%s%8$rL5NA$GMxMQ(B 
+$B('(B  $B%@%$%J(B
+$B('(B $B%7%F%#(B $B%4(B
+$B('(B $B%N(B 
+$B('(B $B%7%F%#(B $B%(%j(B
+$B('(B $B%"%a%j%+%s!&%(%-%9%W%l%9!&%+(B
+$B('(B $B%"%a%j%+%s!&%(%-%9%W%l%9!&%4(B 
+$B('(B $B%"%a%j%+%s!&%(%-%9%W%l%9!&%S%8%M%9%+(B
+$B('(B UFJ $B%4(B
+$B('(B UFJ $B%d%s%0%4(B 
+$B('(B DC$B%+(B
+$B('(B $BEl5^(BTOP$B%4(B($B0lItM-NA$"$j(B)
+$B('(B 
+$B(&(B $B3ZE7%W%l%_%"%`%+(B       $BM%BT%5(B 
+$B(&(B JCB$B%+(B $B=iG/EYG/2qHqL5NA(B       $B7c0B$NEBF2%I%s!&%-%[(B 
+$B(&(B $B%I%s%-!&%[(B $BG/2qHqL5NA(B        $B?3::$N$$$i$J$$(BVISA$B%G%S%C%H%+(B 
+$B('(B H.I.S.$B%o(B $BG/2qHqL5NA(B
+$B('(B KNT$B%H%i%Y%k%-%c%C%7%e%+(B $BG/2qHqL5NA(B
+$B(&(B $B%9%k%,6d9T(BVISA$B%G%S%C%H%+(B $BG/2qHqL5NA(B       $B8x6&NA6b$b3d0z$G$-$k%+(B 
+$B(&(B P-one$B%+(B $BG/2qHqL5NA(B       $B2?$G$b#1!s3d0z$5$l$k$*F@$J%+(B 
+$B(&(B P-one$B%+(B $BG/2qHqL5NA(B      <$B%i%$%U%9%?%$%kJL(B>    $B%3%s%S%K$G$*F@!uJXMx$J%+(B 
+$B(&(B UCS $B%+%k%o%6%+(B($B%5G/2qHqL5NA(B       $B%9#5!s!A#1#5!s3d0z$G$*Gc$$J*"v(B 
+$B('(B $B@>M'(B
+$B('(B $B%$%H(B
+$B('(B $B%(%9%Q(B 
+$B('(B $B%f%K(B
+$B('(B $B%"%T%?(B
+$B(&(B $B%f(B       $BEl5^@~$GDL6P$7$F$$$k?M$N$?$a$N%+(B 
+$B(&(B $BEl5^%]%$%s%H%+(B $BG/2qHqL5NA(B       $B%$%s%?(B 
+$B('(B UFJ$B%K%3%9(B $B%S%"%=%+(B $BG/2qHqL5NA(B
+$B(&(B $B3ZE7%+(B $BG/2qHqL5NA(B    <$B5!G=JL(B>    $BEE;R%^%M(B 
+$B('(B UCS $B%+%k%o%6%+(B $BG/2qHqL5NA(B
+$B('(B $B%M%/%9%3CfF|K\(B $B%W%l%_%"%`%I%i%$%P(B $B=iG/EYG/2qHqL5NA(B
+$B#1G/$K#1EY$N7h:Q$GG/2qHqL5NA(B 
+$B('(B $B%=%K(B
+$B(&(B $B%=%K(B $B=iG/EYG/2qHqL5NA(B
+$B#1G/$K#1EY$N7h:Q$GG/2qHqL5NA(B
+   <$BCO0hJL(B> <$B9qFbJT(B>   $BEl5~ET$K$*=;$^$$$NJ}$,F@$9$k%+(B 
+$B(&(B $BEl5^%+(B $BG/2qHqL5NA(B       $B0&CN8)!&4tIl8)!&D9Ln8)$K$*=;$^$$$NJ}$,F@$9$k%+(B 
+$B(&(B UCS $B%+%k%o%6%+(B $BG/2qHqL5NA(B       $BCO0hJL(B $B$*F@$J(BETC$B%+(B 
+$B(&(B $BElF|K\%$(B
+$B#1G/$K#1EY$N7h:Q$GG/2qHqL5NA(B
+    <$B3$30JT(B>   $B%O%o%$!&%0%"%`!&%"%a%j%+K\EZ$N$*E9$GM%BT!"3d0z$,B?$$%+(B 
+$B('(B $B%K%3%9%+(B($B%/=iG/EYG/2qHqL5NA(B
+$B(&(B UFJ$B%+(B($B%/=iG/EYG/2qHqL5NA(B       $B3$30$N(BATM$B$G8=CO$N$*6b$r0z$-=P$;$k%+(B 
+$B('(B $B%9%k%,6d9T(BVISA$B%G%S%C%H%+(B $BG/2qHqL5NA(B
+$B('(B H.I.S.$B%o(B $BG/2qHqL5NA(B
+$B(&(B KNT$B%H%i%Y%k%-%c%C%7%e%+(B $BG/2qHqL5NA(B      <$BG/NpJL(B>    $B#1#5:P$+$i;}$F$k(BVISA$B%G%S%C%H%+(B 
+$B('(B $B%9%k%,6d9T(BVISA$B%G%S%C%H%+(B $BG/2qHqL5NA(B
+$B('(B H.I.S.$B%o(B $BG/2qHqL5NA(B
+$B(&(B KNT$B%H%i%Y%k%-%c%C%7%e%+(B $BG/2qHqL5NA(B                                    $BA0$X!'%/%l%8%C%H%+(B TOP$B!'%/%l%8%C%H%+(B                                  ?N???W?b?g?J?[?h?(IL(B?m?(I/(B   ?E ?N???W?b?g?J?[?h?(IL(B?(I)(B?(I_(B?I   ?E ?N???W?b?g?J?[?h?(IM(B?M?p?(IL(B?(IX(B?H   ?E ?N???W?b?g?J?[?h?(IL(B?d?g?(I](B   ?E ?N???W?b?g?J?[?h?(IL(B?@?\??????   ?E ?N???W?b?g?J?[?h?(IL(B???(I^(B   ?E ?N???W?b?g?J?[?h?(IL(B?????N   ?E ?N???W?b?g?J?[?h?(IL(B?(I)(B??   ?E IC?`?b?v?????N???W?b?g?J?[?h   ?E ?J?[?h?(IL(B?x?(I%(B???@?(IL(B???(I^(B   ?E ?N???W?b?g?J?[?h?u?(I4(B?v???p?p?I       ?N???W?b?g?J?[?h?(IL(B?(I[(B?(I/(B   ?E ?N???W?b?g?J?[?h?(IL(B?t?(IQ(B?(I[(B?(I/(B   ?E ?C?O?(I7(B?s?(I[(B?(I/(B?(IF(B?(IM(B?H   ?E ?C?O?(I7(B?s?(I[(B?(I/(B?(IL(B???(IS(B?_   ?E ?C?O?(I7(B?s?(I[(B?(I/(B?(IL(B???{?p??   ?E ?C?O?(I7(B?s?(I[(B?(I/(B?(IL(B?e?N?j?b?N   ?E ?(I7(B?s?(IL(B?(IE(B?(I-(B?N???W?b?g?J?[?h       ?(IT(B?E?K?\?????????(I_(B??   ?E ?K?\?????????(I_(B???(IE(B?(I+(B???J?[?h   ?E ???[?h?T?[?r?X?t?(I+(B?J?[?h   ?E ?K?\?????? ?L???b?V???o?b?N   ?E ?V?[?g?x???g???Q?(I[(B?(I/(B?J?[?h   ?E ?(IT(B?(IL(B?(IE(B?(I-(B?N???W?b?g?J?[?h       ?(IA(B?T?E?????(I)(B???I?(IT(B   ?E ?|?C???g?(IR(B?(I3(B?(I&(BUP?J?[?h   ?E ?A?j???E?L?????N?^?[?n?J?[?h   ?E ?????(IA(B?T?t?(I+(B?N???W?b?g?J?[?h       ?N???W?b?g?J?[?h?(IL(B????   ?E ?N???W?b?g?J?[?h?(IF(B?(I_(B?(IN(B??   ?E ?v???p?[?J?[?h???????r   ?E ?v???p?[?J?[?h?(I[(B?(I/(B???r   ?E ?N?????(I3(B?(I?(B?J?[?h?(II(B???(IS(B?H   ?E ?S?[???h?J?[?h?(IL(B?????b?g
+      ?@ [?(I7(B?s?(IR(B?E?V???b?s???O?(IR(B?E???`]   ?E ?N???W?b?g?J?[?h?p???(I+(B?T   ?E ?(I((B?(I>(B?(IH(B?J?[?h?I?(IQ(B?t???(I+(B?(I+(B?T        ?N???W?b?g?J?[?h?(I?(B???(IF(B????   ?E ?N???W?b?g?J?[?h???(I-(B?????(I?(B??????   ?E ?N???W?b?g?J?[?h ?\???(I](B?(IR(B   ?E ?N???W?b?g?J?[?h ?R?(I8(B?(IR(B   ?E ?N???W?b?g?J?[?h ?V???b?s???O?(IR(B   ?E ?N???W?b?g?J?[?h ?x?(I%(B???@?(IR(B   ?E ?N???W?b?g?J?[?h ?????(IR(B   ?E ?N???W?b?g?J?[?h ?g???u???(IR(B         ?(I((B?(I)(B?(I_(B?T?C?g????    ?E ?(IX(B?????(IP(B(?l?b?g?(IX(B??) ???r     ?E FX(?O???(IW(B?(IV(B?(IX(B????????)    ?E ?(I;(B???v???[???g?L?????y?[??   ?E ?l?b?g?o???N(?l?b?g???s) ???r   ?E ?Z?MSBI?l?b?g???s ???p?p   ?E ???(I/(B?N???E???(I6(B?N??????        ???T?C?g?(II(B?(IB(B?(I"(B?(ID(B   ?E ???T?C?g?(IV(B?(IL(B?????N?(II(B?(IB(B?(I"(B?(ID(B   ?E ???(I](B?????N?(II(B?(IB(B?(I"(B?(ID(B???????N?W   ?E ?(IA(B???(I$(B?????@?(II(B???(IC(B?(I-(B?\?L   ?E ?(I((B???(I"(B?????(I9(B?t?H?[??   ?E ?T?C?g?}?b?v 1 2 3 4 5 6 7 8             </title><meta http-equiv=Content-Type content="text/html; charset=iso-2022-jp"><meta http-equiv=Content-Type content="text/html; charset=Shift_JIS"><c>?N???W?b?g?J?[?h?\???(I](B???r.com
\ No newline at end of file
diff --git a/mcs/class/I18N/CJK/Test/texts/japanese3-utf8.txt b/mcs/class/I18N/CJK/Test/texts/japanese3-utf8.txt
new file mode 100644
index 0000000..4326777
--- /dev/null
+++ b/mcs/class/I18N/CJK/Test/texts/japanese3-utf8.txt
@@ -0,0 +1,108 @@
+<title>一番お得なカ?れのニ?            一番お得なカを選ぶための逆引き            
+   クレジットカ> 一番お得なカ     一番お得なカ            
+クレジットカの逆引き目的別、ライフスタイル別、機能別、地域別、年齢別に分かれており、それぞれのニ  
+クレジットカ     <目的別>    飛行機のマイルが貯まり、無料航空券がもらえるカ 
+├ 日本航空 JALカ 初年度年会費無料
+├ 大韓航空 JCBスカイパスカ 初年度年会費無料
+├ コンチネンタル航空 ワンパスJCBグアムカ 初年度年会費無料 
+├ ユナイテッド航空 マイレ 初年度年会費無料
+├ タイ航空 ロイヤルオ 初年度年会費無料
+├ シンガポクリスフライヤ 初年度年会費無料
+└ エフライング・ブル 初年度年会費無料   
+参考 : マイルとは?       ポイントが効率よく貯まるお得なカ 
+├ 楽天市場で2%、楽天カ 年会費無料
+├ UFJ ビアソカ 年会費無料
+├ ライフカ 年会費無料
+└ オリコアプティiD 年会費無料       海外旅行傷害保険が 
+├ ニコス ビアソカ 年会費無料
+├ オリコアプティiD 年会費無料
+├ DCカ 年会費無料 
+├ DCゴ カ
+├ DCゴ 初年度年会費無料
+├ DCカ 初年度年会費無料 
+├  初年度年会費無料
+└ ソニ 初年度年会費無料 1年に1度の決済で年会費無料
+      ポイントを現金化できるクレジットカ 
+├ P-oneカ 年会費無料
+├ UFJ ビアソカ 年会費無料
+├ NTTグル 年会費無料
+└ さくらJCBイ 年会費無料       全ての商品が1%割引されるス 
+└ P-oneカ 年会費無料       セゾン永久不滅.comでのお買い物でポイント最大19倍! 
+└ 《セゾン》カ       誕生日月はポイント5倍、貯まったポイントは商品券に交換 
+└ ライフカ 年会費無料       持っているだけで凄い!ステイタスカ 
+├ ダイナ
+├ アメリカン・エキスプレス・カ
+└ 《セゾン》プラチナ・アメリカン・エキスプレス・カ       利用限度額が無制限のス 
+└ ダイナ      ゴ 
+└ オリコアプティiD 年会費無料       人気コスメが当たる年会費無料の女性向けJCBカ 
+└ JCB リンダカ 年会費無料       携帯代が最大60%割引される年会費無料カ 
+└ NTTグル 年会費無料       キャッシングを低金利でできるカ 
+└ さくら JCBイ 年会費無料 3万円までなら年利1%!
+      ガソリン代がキャッシュバックされ、海外保険 
+└  初年度年会費無料       映画・コンサ 
+└ ぴあカ 初年度年会費無料       為替レ 
+└ SBIカ       トラベラ. at Z 
+└ シティ エリ       ガソリン代、高速道路料金をキャッシュバック 
+└ JCBゴ       ロ 
+└ ドン・キホ(VISA、JCBのみ)
+      FCバロセロナ、ACミラン サッカ 
+├ ACミランカ
+├ ACミランカ
+└ FCバルセロナオフィシャル楽天カ       映画を映画館で割引料金で見る! 
+├ 映画を割引料金で見れるクレジットカ
+└ 映画を割引料金で見れるクレジットカF|K\JT)       インタ 
+└ ソニ初年度年会費無料
+1年に1度の決済で年会費無料
+      百貨店で最大5%割引 
+└ 東急ホテルズコンフォ 年会費無料       旅行前にゆったり優雅な気分!空港ラウンジを無料で利用 
+├  ダイナ
+├ シティ ゴ
+├ ノ 
+├ シティ エリ
+├ アメリカン・エキスプレス・カ
+├ アメリカン・エキスプレス・ゴ 
+├ アメリカン・エキスプレス・ビジネスカ
+├ UFJ ゴ
+├ UFJ ヤングゴ 
+├ DCカ
+├ 東急TOPゴ(一部有料あり)
+├ 
+└ 楽天プレミアムカ       優待サ 
+└ JCBカ 初年度年会費無料       激安の殿堂ドン・キホ 
+└ ドンキ・ホ 年会費無料        審査のいらないVISAデビットカ 
+├ H.I.S.ワ 年会費無料
+├ KNTトラベルキャッシュカ 年会費無料
+└ スルガ銀行VISAデビットカ 年会費無料       公共料金も割引できるカ 
+└ P-oneカ 年会費無料       何でも1%割引されるお得なカ 
+└ P-oneカ 年会費無料      <ライフスタイル別>    コンビニでお得&便利なカ 
+└ UCS カルワザカ(サ年会費無料       ス5%~15%割引でお買い物♪ 
+├ 西友
+├ イト
+├ エスパ 
+├ ユニ
+├ アピタ
+└ ユ       東急線で通勤している人のためのカ 
+└ 東急ポイントカ 年会費無料       インタ 
+├ UFJニコス ビアソカ 年会費無料
+└ 楽天カ 年会費無料    <機能別>    電子マネ 
+├ UCS カルワザカ 年会費無料
+├ ネクスコ中日本 プレミアムドライバ 初年度年会費無料
+1年に1度の決済で年会費無料 
+├ ソニ
+└ ソニ 初年度年会費無料
+1年に1度の決済で年会費無料
+   <地域別> <国内編>   東京都にお住まいの方が得するカ 
+└ 東急カ 年会費無料       愛知県・岐阜県・長野県にお住まいの方が得するカ 
+└ UCS カルワザカ 年会費無料       地域別 お得なETCカ 
+└ 東日本イ
+1年に1度の決済で年会費無料
+    <海外編>   ハワイ・グアム・アメリカ本土のお店で優待、割引が多いカ 
+├ ニコスカ(ク初年度年会費無料
+└ UFJカ(ク初年度年会費無料       海外のATMで現地のお金を引き出せるカ 
+├ スルガ銀行VISAデビットカ 年会費無料
+├ H.I.S.ワ 年会費無料
+└ KNTトラベルキャッシュカ 年会費無料      <年齢別>    15歳から持てるVISAデビットカ 
+├ スルガ銀行VISAデビットカ 年会費無料
+├ H.I.S.ワ 年会費無料
+└ KNTトラベルキャッシュカ 年会費無料                                    前へ:クレジットカ TOP:クレジットカ                                  ƒNƒŒƒWƒbƒgƒJ[ƒh‚フ’mŽッ   E ƒNƒŒƒWƒbƒgƒJ[ƒh‚フŠゥ‚゚I   E ƒNƒŒƒWƒbƒgƒJ[ƒh‚ヘM—p‚フリH   E ƒNƒŒƒWƒbƒgƒJ[ƒh‚フŽd‘g‚ン   E ƒNƒŒƒWƒbƒgƒJ[ƒh‚フ‹@”\‚â–ðŠ„   E ƒNƒŒƒWƒbƒgƒJ[ƒh‚フŽí—゙   E ƒNƒŒƒWƒbƒgƒJ[ƒh‚フƒ‰ƒ“ƒN   E ƒNƒŒƒWƒbƒgƒJ[ƒh‚フŒゥ•û   E ICƒ`ƒbƒv“à‘ ƒNƒŒƒWƒbƒgƒJ[ƒh   E ƒJ[ƒh‚フŽx•・•û–@‚フŽí—゙   E ƒNƒŒƒWƒbƒgƒJ[ƒhu’エvŠˆ—ppI       ƒNƒŒƒWƒbƒgƒJ[ƒh‚フ•ロŒッ   E ƒNƒŒƒWƒbƒgƒJ[ƒh‚フ•t‘ム•ロŒッ   E ŠCŠO—キs•ロŒッ‚ニ‚ヘH   E ŠCŠO—キs•ロŒッ‚フ’ˆモ“_   E ŠCŠO—キs•ロŒッ‚フŠî–{—pŒê   E ŠCŠO—キs•ロŒッ‚フƒeƒNƒjƒbƒN   E —キs‚フナ‹ュƒNƒŒƒWƒbƒgƒJ[ƒh       ŽヤEƒKƒ\ƒŠƒ“‘ã‚ð゚–ñ   E ƒKƒ\ƒŠƒ“‘ã‚ð゚–ñ‚ナ‚ォ‚éƒJ[ƒh   E ƒ[ƒhƒT[ƒrƒX•t‚ォƒJ[ƒh   E ƒKƒ\ƒŠƒ“‘ã ƒLƒƒƒbƒVƒ…ƒoƒbƒN   E ƒV[ƒgƒxƒ‹ƒgŠQ•ロŒッƒJ[ƒh   E Žヤ‚フナ‹ュƒNƒŒƒWƒbƒgƒJ[ƒh       “チ“TEŠ„ˆø‚ゥ‚ç‘I‚ヤ   E ƒ|ƒCƒ“ƒgŠメŒウ—ヲUPƒJ[ƒh   E ƒAƒjƒEƒLƒƒƒ‰ƒNƒ^[ŒnƒJ[ƒh   E Š„ˆø“チ“T•t‚ォƒNƒŒƒWƒbƒgƒJ[ƒh       ƒNƒŒƒWƒbƒgƒJ[ƒh‚フî•ñ   E ƒNƒŒƒWƒbƒgƒJ[ƒh”ニ゚‘ホô   E ƒvƒƒp[ƒJ[ƒh‹à—˜”äŠr   E ƒvƒƒp[ƒJ[ƒh•ロŒッ”äŠr   E ”N‰ï”ï–ウ—ソƒJ[ƒh‚ノ’ˆモH   E ƒS[ƒ‹ƒhƒJ[ƒh‚フƒƒŠƒbƒg
+      @ [—キs•メEƒVƒ‡ƒbƒsƒ“ƒO•メE‹ó`]   E ƒNƒŒƒWƒbƒgƒJ[ƒh—pŒêŽォ“T   E ‚ィ“セ‚ネƒJ[ƒh‘I‚ム‹tˆø‚ォŽォ“T        ƒNƒŒƒWƒbƒgƒJ[ƒhŽソ–â‚ニ‰ñ“š   E ƒNƒŒƒWƒbƒgƒJ[ƒh‚æ‚ュ‚ ‚éŽソ–âˆê——   E ƒNƒŒƒWƒbƒgƒJ[ƒh \ž‚ン•メ   E ƒNƒŒƒWƒbƒgƒJ[ƒh Rク•メ   E ƒNƒŒƒWƒbƒgƒJ[ƒh ƒVƒ‡ƒbƒsƒ“ƒO•メ   E ƒNƒŒƒWƒbƒgƒJ[ƒh Žx•・•û–@•メ   E ƒNƒŒƒWƒbƒgƒJ[ƒh ‰ð–ñ•メ   E ƒNƒŒƒWƒbƒgƒJ[ƒh ƒgƒ‰ƒuƒ‹•メ         ‚ィŠゥ‚゚ƒTƒCƒgˆê——    E リŒ”‰ïŽミ(ƒlƒbƒgリŒ”) ”äŠr     E FX(ŠO‘ˆラ‘ヨリ‹’‹àŽæˆø)    E Œサ‹àƒvƒŒƒ[ƒ“ƒgƒLƒƒƒ“ƒy[ƒ“   E ƒlƒbƒgƒoƒ“ƒN(ƒlƒbƒg‹âs) ”äŠr   E ZMSBIƒlƒbƒg‹âs Šˆ—pp   E ‘–ッ”N‹àEŒúカ”N‹à“ü–å        “–ƒTƒCƒg‚ノ‚ツ‚「‚ト   E “–ƒTƒCƒg‚ヨ‚フƒŠƒ“ƒN‚ノ‚ツ‚「‚ト   E ‘ŠŒンƒŠƒ“ƒN‚ノ‚ツ‚「‚ト•ƒŠƒ“ƒNW   E “チ’è、Žæˆø–@‚ノŠî‚テ‚ュ•\‹L   E ‚ィ–â‚「‡‚í‚ケƒtƒH[ƒ€   E ƒTƒCƒgƒ}ƒbƒv 1 2 3 4 5 6 7 8             </title><meta http-equiv=Content-Type content="text/html; charset=iso-2022-jp"><meta http-equiv=Content-Type content="text/html; charset=Shift_JIS"><c>ƒNƒŒƒWƒbƒgƒJ[ƒh\ž‚ン”äŠr.com
\ No newline at end of file
diff --git a/mcs/class/I18N/Common/ByteSafeEncoding.cs b/mcs/class/I18N/Common/ByteSafeEncoding.cs
new file mode 100644
index 0000000..5177345
--- /dev/null
+++ b/mcs/class/I18N/Common/ByteSafeEncoding.cs
@@ -0,0 +1,460 @@
+/*
+ * ByteSafeEncoding.cs - Implementation of the "I18N.Common.ByteSafeEncoding" class.
+ *
+ * Copyright (c) 2002  Southern Storm Software, Pty Ltd
+ * Copytight (c) 2011  Pablo Ruiz García
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining
+ * a copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included
+ * in all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+ * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
+ * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
+ * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+ * OTHER DEALINGS IN THE SOFTWARE.
+ */
+
+namespace I18N.Common
+{
+
+using System;
+using System.Runtime.InteropServices;
+using System.Text;
+
+// This class provides an abstract base for encodings that use a single
+// byte per character.  The bulk of the work is done in this class, with
+// subclasses providing implementations of the "ToBytes" methods to perform
+// the char->byte conversion.
+
+#if DISABLE_UNSAFE
+
+[Serializable]
+public abstract class ByteSafeEncoding : MonoSafeEncoding
+{
+	// Internal state.
+	protected char[] toChars;
+	protected String encodingName;
+	protected String bodyName;
+	protected String headerName;
+	protected String webName;
+	protected bool isBrowserDisplay;
+	protected bool isBrowserSave;
+	protected bool isMailNewsDisplay;
+	protected bool isMailNewsSave;
+	protected int windowsCodePage;
+#if NET_2_0
+	static byte [] isNormalized;
+	static byte [] isNormalizedComputed;
+	static byte [] normalization_bytes;
+#endif
+
+	// Constructor.
+	protected ByteSafeEncoding(int codePage, char[] toChars,
+						   String encodingName, String bodyName,
+						   String headerName, String webName,
+						   bool isBrowserDisplay, bool isBrowserSave,
+						   bool isMailNewsDisplay, bool isMailNewsSave,
+						   int windowsCodePage)
+			: base(codePage)
+			{
+				if (toChars.Length != byte.MaxValue + 1)
+					throw new ArgumentException("toChars");
+
+				this.toChars = toChars;
+				this.encodingName = encodingName;
+				this.bodyName = bodyName;
+				this.headerName = headerName;
+				this.webName = webName;
+				this.isBrowserDisplay = isBrowserDisplay;
+				this.isBrowserSave = isBrowserSave;
+				this.isMailNewsDisplay = isMailNewsDisplay;
+				this.isMailNewsSave = isMailNewsSave;
+				this.windowsCodePage = windowsCodePage;
+			}
+
+#if NET_2_0
+	public override bool IsAlwaysNormalized (NormalizationForm form)
+	{
+		if (form != NormalizationForm.FormC)
+			return false;
+
+		if (isNormalized == null)
+			isNormalized = new byte [0x10000 / 8];
+		if (isNormalizedComputed == null)
+			isNormalizedComputed = new byte [0x10000 / 8];
+
+		if (normalization_bytes == null) {
+			normalization_bytes = new byte [0x100];
+			lock (normalization_bytes) {
+				for (int i = 0; i < 0x100; i++)
+					normalization_bytes [i] = (byte) i;
+			}
+		}
+
+		byte offset = (byte) (1 << (CodePage % 8));
+		if ((isNormalizedComputed [CodePage / 8] & offset) == 0) {
+			Encoding e = Clone () as Encoding;
+			e.DecoderFallback = new DecoderReplacementFallback ("");
+			string s = e.GetString (normalization_bytes);
+			// note that the flag only stores FormC information.
+			if (s != s.Normalize (form))
+				isNormalized [CodePage / 8] |= offset;
+			isNormalizedComputed [CodePage / 8] |= offset;
+		}
+
+		return (isNormalized [CodePage / 8] & offset) == 0;
+	}
+
+	public override bool IsSingleByte {
+		get { return true; }
+	}
+#endif
+
+	public override int GetByteCount(String s)
+	{
+		if(s == null)
+			throw new ArgumentNullException("s");
+		
+		return s.Length;
+	}
+
+	// Get the number of bytes needed to encode a character buffer.
+	public override int GetByteCount(char[] chars, int index, int count)
+	{
+		return count - index;
+	}
+
+	public override unsafe int GetByteCount(char* chars, int count)
+	{
+		return count;
+	}
+
+	// Convert an array of characters into a byte buffer,
+	// once the parameters have been validated.
+	protected abstract void ToBytes(char[] chars, int charIndex, int charCount, byte[] bytes, int byteIndex);
+
+	// Convert a string into a byte buffer, once the parameters
+	// have been validated.
+	protected virtual void ToBytes(String s, int charIndex, int charCount, byte[] bytes, int byteIndex)
+	{
+		// When it is not overriden, use ToBytes() with pointers
+		// (Ideal solution)
+		if (s.Length == 0 || bytes.Length == byteIndex)
+			return;
+
+		ToBytes(s.ToCharArray(), charIndex, charCount, bytes, byteIndex);
+	}
+
+	// Get the bytes that result from encoding a character buffer.
+	public override int GetBytes(char[] chars, int charIndex, int charCount, byte[] bytes, int byteIndex)
+	{
+		if(chars == null)
+		{
+			throw new ArgumentNullException("chars");
+		}
+		if(bytes == null)
+		{
+			throw new ArgumentNullException("bytes");
+		}
+		if(charIndex < 0 || charIndex > chars.Length)
+		{
+			throw new ArgumentOutOfRangeException
+				("charIndex", Strings.GetString("ArgRange_Array"));
+		}
+		if(charCount < 0 || charCount > (chars.Length - charIndex))
+		{
+			throw new ArgumentOutOfRangeException
+				("charCount", Strings.GetString("ArgRange_Array"));
+		}
+		if(byteIndex < 0 || byteIndex > bytes.Length)
+		{
+			throw new ArgumentOutOfRangeException
+				("byteIndex", Strings.GetString("ArgRange_Array"));
+		}
+		if((bytes.Length - byteIndex) < charCount)
+		{
+			throw new ArgumentException
+				(Strings.GetString("Arg_InsufficientSpace"));
+		}
+
+		ToBytes(chars, charIndex, charCount, bytes, byteIndex);
+		return charCount;
+	}
+
+	// Convenience wrappers for "GetBytes".
+	public override int GetBytes(string s, int charIndex, int charCount, byte[] bytes, int byteIndex)
+	{
+		if(s == null)
+		{
+			throw new ArgumentNullException("s");
+		}
+		if(bytes == null)
+		{
+			throw new ArgumentNullException("bytes");
+		}
+		if(charIndex < 0 || charIndex > s.Length)
+		{
+			throw new ArgumentOutOfRangeException
+				("charIndex",
+					Strings.GetString("ArgRange_StringIndex"));
+		}
+		if(charCount < 0 || charCount > (s.Length - charIndex))
+		{
+			throw new ArgumentOutOfRangeException
+				("charCount",
+					Strings.GetString("ArgRange_StringRange"));
+		}
+		if(byteIndex < 0 || byteIndex > bytes.Length)
+		{
+			throw new ArgumentOutOfRangeException
+				("byteIndex", Strings.GetString("ArgRange_Array"));
+		}
+		if((bytes.Length - byteIndex) < charCount)
+		{
+			throw new ArgumentException
+				(Strings.GetString("Arg_InsufficientSpace"));
+		}
+
+		ToBytes(s, charIndex, charCount, bytes, byteIndex);
+		return charCount;
+	}
+
+	public override byte[] GetBytes(string s)
+	{
+		if (s == null)
+			throw new ArgumentNullException("s");
+
+		char[] data = s.ToCharArray();
+
+		return GetBytes(data, 0, data.Length);
+	}
+
+	// Get the number of characters needed to decode a byte buffer.
+	public override int GetCharCount(byte[] bytes, int index, int count)
+			{
+				if(bytes == null)
+				{
+					throw new ArgumentNullException("bytes");
+				}
+				if(index < 0 || index > bytes.Length)
+				{
+					throw new ArgumentOutOfRangeException
+						("index", Strings.GetString("ArgRange_Array"));
+				}
+				if(count < 0 || count > (bytes.Length - index))
+				{
+					throw new ArgumentOutOfRangeException
+						("count", Strings.GetString("ArgRange_Array"));
+				}
+				return count;
+			}
+
+	// Get the characters that result from decoding a byte buffer.
+	public override int GetChars(byte[] bytes, int byteIndex, int byteCount,
+								 char[] chars, int charIndex)
+			{
+				if(bytes == null)
+				{
+					throw new ArgumentNullException("bytes");
+				}
+				if(chars == null)
+				{
+					throw new ArgumentNullException("chars");
+				}
+				if(byteIndex < 0 || byteIndex > bytes.Length)
+				{
+					throw new ArgumentOutOfRangeException
+						("byteIndex", Strings.GetString("ArgRange_Array"));
+				}
+				if(byteCount < 0 || byteCount > (bytes.Length - byteIndex))
+				{
+					throw new ArgumentOutOfRangeException
+						("byteCount", Strings.GetString("ArgRange_Array"));
+				}
+				if(charIndex < 0 || charIndex > chars.Length)
+				{
+					throw new ArgumentOutOfRangeException
+						("charIndex", Strings.GetString("ArgRange_Array"));
+				}
+				if((chars.Length - charIndex) < byteCount)
+				{
+					throw new ArgumentException
+						(Strings.GetString("Arg_InsufficientSpace"));
+				}
+				int count = byteCount;
+				char[] cvt = toChars;
+				while(count-- > 0)
+				{
+					chars[charIndex++] = cvt[(int)(bytes[byteIndex++])];
+				}
+				return byteCount;
+			}
+
+	// Get the maximum number of bytes needed to encode a
+	// specified number of characters.
+	public override int GetMaxByteCount(int charCount)
+			{
+				if(charCount < 0)
+				{
+					throw new ArgumentOutOfRangeException
+						("charCount",
+						 Strings.GetString("ArgRange_NonNegative"));
+				}
+				return charCount;
+			}
+
+	// Get the maximum number of characters needed to decode a
+	// specified number of bytes.
+	public override int GetMaxCharCount(int byteCount)
+			{
+				if(byteCount < 0)
+				{
+					throw new ArgumentOutOfRangeException
+						("byteCount",
+						 Strings.GetString("ArgRange_NonNegative"));
+				}
+				return byteCount;
+			}
+
+	// Decode a buffer of bytes into a string.
+	public unsafe override String GetString(byte[] bytes, int index, int count)
+			{
+				if(bytes == null)
+				{
+					throw new ArgumentNullException("bytes");
+				}
+				if(index < 0 || index > bytes.Length)
+				{
+					throw new ArgumentOutOfRangeException
+						("index", Strings.GetString("ArgRange_Array"));
+				}
+				if(count < 0 || count > (bytes.Length - index))
+				{
+					throw new ArgumentOutOfRangeException
+						("count", Strings.GetString("ArgRange_Array"));
+				}
+
+				if (count == 0)
+					return string.Empty;
+
+				string s = new string ((char) 0, count);
+
+				fixed (byte* bytePtr = bytes)
+					fixed (char* charPtr = s)
+						fixed (char* cvt = toChars) {
+							byte* b = bytePtr + index;
+							char* c = charPtr;
+							while(count-- != 0)
+								*(c++) = cvt[*(b++)];
+						}
+
+				return s;
+			}
+	public override String GetString(byte[] bytes)
+			{
+				if(bytes == null)
+				{
+					throw new ArgumentNullException("bytes");
+				}
+
+				return GetString (bytes, 0, bytes.Length);
+			}
+
+#if !ECMA_COMPAT
+
+	// Get the mail body name for this encoding.
+	public override String BodyName
+			{
+				get
+				{
+					return bodyName;
+				}
+			}
+
+	// Get the human-readable name for this encoding.
+	public override String EncodingName
+			{
+				get
+				{
+					return encodingName;
+				}
+			}
+
+	// Get the mail agent header name for this encoding.
+	public override String HeaderName
+			{
+				get
+				{
+					return headerName;
+				}
+			}
+
+	// Determine if this encoding can be displayed in a Web browser.
+	public override bool IsBrowserDisplay
+			{
+				get
+				{
+					return isBrowserDisplay;
+				}
+			}
+
+	// Determine if this encoding can be saved from a Web browser.
+	public override bool IsBrowserSave
+			{
+				get
+				{
+					return isBrowserSave;
+				}
+			}
+
+	// Determine if this encoding can be displayed in a mail/news agent.
+	public override bool IsMailNewsDisplay
+			{
+				get
+				{
+					return isMailNewsDisplay;
+				}
+			}
+
+	// Determine if this encoding can be saved from a mail/news agent.
+	public override bool IsMailNewsSave
+			{
+				get
+				{
+					return isMailNewsSave;
+				}
+			}
+
+	// Get the IANA-preferred Web name for this encoding.
+	public override String WebName
+			{
+				get
+				{
+					return webName;
+				}
+			}
+
+	// Get the Windows code page represented by this object.
+	public override int WindowsCodePage
+			{
+				get
+				{
+					return windowsCodePage;
+				}
+			}
+
+#endif // !ECMA_COMPAT
+
+}; // class ByteEncoding
+
+#endif
+}; // namespace I18N.Encoding
diff --git a/mcs/class/I18N/Common/ChangeLog b/mcs/class/I18N/Common/ChangeLog
index 4eb077e..0117b89 100644
--- a/mcs/class/I18N/Common/ChangeLog
+++ b/mcs/class/I18N/Common/ChangeLog
@@ -1,7 +1,3 @@
-2010-10-15  Marek Safar  <marek.safar at gmail.com>
-
-	Clean up few more warnings
-
 2006-08-24  Atsushi Enomoto  <atsushi at ximian.com>
 
 	* ByteEncoding.cs : Implemented IsAlwaysNormalized().
diff --git a/mcs/class/I18N/Common/ChangeLog.old b/mcs/class/I18N/Common/ChangeLog.old
deleted file mode 100644
index 0117b89..0000000
--- a/mcs/class/I18N/Common/ChangeLog.old
+++ /dev/null
@@ -1,75 +0,0 @@
-2006-08-24  Atsushi Enomoto  <atsushi at ximian.com>
-
-	* ByteEncoding.cs : Implemented IsAlwaysNormalized().
-	  (only SingleByte and FormC may return true for IsAlwaysNormalized
-	  on .NET.)
-	  Ask String.Normalize() for every possible single byte character
-	  which is valid for the encoding and see if it has changed the
-	  string (i.e. it returns the value based on the actual
-	  normalization.)
-
-2006-06-13  Kornél Pál  <kornelpal at gmail.com>
-
-	* ByteEncoding.cs: Use unsafe code in GetString() that results in
-	  significant performance improvement.
-
-2006-01-30  Atsushi Enomoto  <atsushi at ximian.com>
-
-	* MonoEncoding.cs :
-	  Added another overload that takes windows code page.
-
-2006-01-23  Atsushi Enomoto  <atsushi at ximian.com>
-
-	* MonoEncoding.cs :
-	  Added abstract GetByteCountImpl() in MonoEncoding and MonoEncoder.
-	  GetByteCount() is now based on the method above.
-	* ByteEncoding.cs : so GetByteCount() became GetByteCountImpl() and
-	  is based on char*.
-
-2006-01-17  Atsushi Enomoto  <atsushi at ximian.com>
-
-	* MonoEncoding.cs, ByteEncoding.cs :
-	  Marked as [Serializable].
-
-2005-12-01  Atsushi Enomoto  <atsushi at ximian.com>
-
-	* MonoEncoding.cs : new file, which is going to be used as the
-	  abstract class for all Encoding classes in I18N.*.dll. Only
-	  GetBytesImpl() is required in derived classes.
-	* I18N.dll.sources : added above.
-	* ByteEncoding : HandleFallback() is moved to MonoEncoding.
-	  Now that only ToBytes() with pointers is required, commented out
-	  other ToBytes() overloads.
-	  GetBytesImpl() is implemented to call ToBytes() and thus all of
-	  the derived classes work as they used to be.
-
-2005-11-30  Atsushi Enomoto  <atsushi at ximian.com>
-
-	* Makefile : now it uses unsafe pointers.
-	* ByteEncoding.cs : Now there is three versions of ToBytes(): the only
-	  one with pointers will be in use in the future. ToBytes(string) and
-	  ToBytes() with arrays will be implemented to dispatch pointer-based
-	  one and will be only one conversion implementation while they keep
-	  avoiding extra array creation.
-
-2005-11-28  Atsushi Enomoto  <atsushi at ximian.com>
-
-	* ByteEncoding.cs : added IsSingleByte.
-
-2005-11-01  Atsushi Enomoto  <atsushi at ximian.com>
-
-	* Handler.cs : added 51949 (true euc-kr).
-
-2005-09-25  Atsushi Enomoto  <atsushi at ximian.com>
-
-	* Handler.cs : added 50220 and 50222.
-
-2005-09-18  Atsushi Enomoto  <atsushi at ximian.com>
-
-	* Handler.cs : Required changes wrt some class renames.
-
-2005-08-19  Atsushi Enomoto  <atsushi at ximian.com>
-
-	why didn't we have it? ;-)
-
-	* Handlers.cs : added GB18030 support.
diff --git a/mcs/class/I18N/Common/Handlers.cs b/mcs/class/I18N/Common/Handlers.cs
index 5d9c61a..2b50d3e 100644
--- a/mcs/class/I18N/Common/Handlers.cs
+++ b/mcs/class/I18N/Common/Handlers.cs
@@ -303,6 +303,8 @@ public sealed class Handlers
 		aliases.Add ("x-ms-cp932", "shift_jis");
 		aliases.Add ("x-sjis", "shift_jis");
 
+		aliases.Add ("iso_2022_kr", "euc_kr");
+
 		aliases.Add ("csISOLatin3", "iso_8859_3");
 		aliases.Add ("ISO_8859_3:1988", "iso_8859_3");
 		aliases.Add ("iso_ir_109", "iso_8859_3");
diff --git a/mcs/class/I18N/Common/I18N.dll.sources b/mcs/class/I18N/Common/I18N.dll.sources
index 260db77..6ea2d37 100755
--- a/mcs/class/I18N/Common/I18N.dll.sources
+++ b/mcs/class/I18N/Common/I18N.dll.sources
@@ -1,7 +1,9 @@
 ../Assembly/AssemblyInfo.cs
 ../../../build/common/Consts.cs
 ByteEncoding.cs
+ByteSafeEncoding.cs
 Handlers.cs
 Manager.cs
 MonoEncoding.cs
+MonoSafeEncoding.cs
 Strings.cs
diff --git a/mcs/class/I18N/Common/Makefile b/mcs/class/I18N/Common/Makefile
index 2a42d86..cfdd37f 100644
--- a/mcs/class/I18N/Common/Makefile
+++ b/mcs/class/I18N/Common/Makefile
@@ -4,7 +4,7 @@ include ../../../build/rules.make
 
 LIBRARY = I18N.dll
 LIBRARY_USE_INTERMEDIATE_FILE = yes
-LOCAL_MCS_FLAGS = /r:$(corlib) /unsafe
+LOCAL_MCS_FLAGS = /r:$(corlib) /unsafe /define:DISABLE_UNSAFE
 NO_TEST = yes
 
 include ../../../build/library.make
diff --git a/mcs/class/I18N/Common/MonoEncoding.cs b/mcs/class/I18N/Common/MonoEncoding.cs
index a4f70e8..6807fc0 100644
--- a/mcs/class/I18N/Common/MonoEncoding.cs
+++ b/mcs/class/I18N/Common/MonoEncoding.cs
@@ -33,14 +33,34 @@ namespace I18N.Common
 		}
 
 #if NET_2_0
+		/// <summary>
+		/// GetBytes method used internally by state-full encoders/encodings.
+		/// </summary>
+		/// <param name="chars">The chars.</param>
+		/// <param name="charIndex">Index of the char.</param>
+		/// <param name="charCount">The char count.</param>
+		/// <param name="bytes">The bytes.</param>
+		/// <param name="byteIndex">Index of the byte.</param>
+		/// <param name="flush">if set to <c>true</c> [flush].</param>
+		/// <param name="encoding">The encoding class to use (or null if state-less).</param>
+		/// <returns></returns>
+		/// <remarks>
+		/// Only state-full encoders need to implement this method (ie. ISO-2022-JP)
+		/// </remarks>
+		protected unsafe virtual int GetBytesInternal(char *chars, int charCount,
+				byte *bytes, int byteCount, bool flush, object state)
+		{
+			throw new NotImplementedException("Statefull encoding is not implemented (yet?) by this encoding class.");
+		}
+
 		public unsafe void HandleFallback (ref EncoderFallbackBuffer buffer,
 			char* chars, ref int charIndex, ref int charCount,
-			byte* bytes, ref int byteIndex, ref int byteCount)
+			byte* bytes, ref int byteIndex, ref int byteCount, object state)
 		{
 			if (buffer == null)
 				buffer = EncoderFallback.CreateFallbackBuffer ();
-			if (Char.IsSurrogate (chars [charIndex]) && charCount > 0 &&
-				Char.IsSurrogate (chars [charIndex + 1])) {
+
+			if (charCount > 1 && (Char.IsSurrogate (chars [charIndex]) && Char.IsSurrogate (chars [charIndex + 1]))) {
 				buffer.Fallback (chars [charIndex], chars [charIndex + 1], charIndex);
 				charIndex++;
 				charCount--;
@@ -51,10 +71,25 @@ namespace I18N.Common
 			int idx = 0;
 			while (buffer.Remaining > 0)
 				tmp [idx++] = buffer.GetNextChar ();
+
 			fixed (char* tmparr = tmp) {
-				byteIndex += GetBytes (tmparr, tmp.Length, bytes + byteIndex, byteCount);
+				var outbytes = bytes == null ? null : bytes + byteIndex;
+				var len = state == null ?
+					GetBytes(tmparr, tmp.Length, outbytes, byteCount)
+					: GetBytesInternal(tmparr, tmp.Length, outbytes, byteCount, true, state);
+
+				byteIndex += len;
+				byteCount -= len;
 			}
 		}
+
+		public unsafe void HandleFallback (ref EncoderFallbackBuffer buffer,
+			char* chars, ref int charIndex, ref int charCount,
+			byte* bytes, ref int byteIndex, ref int byteCount)
+		{
+			HandleFallback(ref buffer, chars, ref charIndex, ref charCount,
+				bytes, ref byteIndex, ref byteCount, null);
+		}
 #endif
 
 		// Get the bytes that result from encoding a character buffer.
@@ -262,13 +297,21 @@ namespace I18N.Common
 
 			public unsafe void HandleFallback (
 				char* chars, ref int charIndex, ref int charCount,
-				byte* bytes, ref int byteIndex, ref int byteCount)
+				byte* bytes, ref int byteIndex, ref int byteCount, object state)
 			{
 				EncoderFallbackBuffer buffer = FallbackBuffer;
 				encoding.HandleFallback (ref buffer,
 					chars, ref charIndex, ref charCount,
-					bytes, ref byteIndex, ref byteCount);
+					bytes, ref byteIndex, ref byteCount, state);
 			}
+
+/*			public unsafe void HandleFallback(
+				char* chars, ref int charIndex, ref int charCount,
+				byte* bytes, ref int byteIndex, ref int byteCount)
+			{
+				HandleFallback(chars, ref charIndex, ref charCount,
+					bytes, ref byteIndex, ref byteCount, null);
+			}*/
 		#endif
 		}
 }
diff --git a/mcs/class/I18N/Common/MonoSafeEncoding.cs b/mcs/class/I18N/Common/MonoSafeEncoding.cs
new file mode 100644
index 0000000..c7caf0f
--- /dev/null
+++ b/mcs/class/I18N/Common/MonoSafeEncoding.cs
@@ -0,0 +1,111 @@
+//
+// MonoEncoding.cs
+//
+// Author:
+//	Atsushi Enomoto <atsushi at ximian.com>
+//  Pablo Ruiz García <pruiz at netway.org>
+//
+// Copyright (C) 2005 Novell, Inc.  http://www.novell.com
+// Copyright (C) 2011 Pablo Ruiz García
+//
+using System;
+using System.Runtime.InteropServices;
+using System.Text;
+
+namespace I18N.Common
+{
+#if DISABLE_UNSAFE
+	[Serializable]
+	public abstract class MonoSafeEncoding : Encoding
+	{
+		readonly int win_code_page;
+
+		public MonoSafeEncoding (int codePage)
+			: this (codePage, 0)
+		{
+		}
+
+		public MonoSafeEncoding(int codePage, int windowsCodePage)
+			: base (codePage)
+		{ 
+			win_code_page = windowsCodePage;
+		}
+
+		public override int WindowsCodePage {
+			get { return win_code_page != 0 ? win_code_page : base.WindowsCodePage; }
+		}
+
+		/// <summary>
+		/// GetBytes method used internally by state-full encoders/encodings.
+		/// </summary>
+		/// <param name="chars">The chars.</param>
+		/// <param name="charIndex">Index of the char.</param>
+		/// <param name="charCount">The char count.</param>
+		/// <param name="bytes">The bytes.</param>
+		/// <param name="byteIndex">Index of the byte.</param>
+		/// <param name="flush">if set to <c>true</c> [flush].</param>
+		/// <param name="encoding">The encoding class to use (or null if state-less).</param>
+		/// <returns></returns>
+		/// <remarks>
+		/// Only state-full encoders need to implement this method (ie. ISO-2022-JP)
+		/// </remarks>
+		protected virtual int GetBytesInternal(char[] chars, int charIndex, int charCount, 
+			byte[] bytes, int byteIndex, bool flush, object state)
+		{
+			throw new NotImplementedException("Statefull encoding is not implemented (yet?) by this encoding class.");
+		}
+
+		public void HandleFallback(ref EncoderFallbackBuffer buffer,
+			char[] chars, ref int charIndex, ref int charCount,
+			byte[] bytes, ref int byteIndex, ref int byteCount, object state)
+		{
+			if (buffer == null)
+				buffer = EncoderFallback.CreateFallbackBuffer();
+
+			if (charCount > 1 && (Char.IsSurrogate(chars[charIndex]) && Char.IsSurrogate(chars[charIndex + 1])))
+			{
+				buffer.Fallback (chars[charIndex], chars[charIndex + 1], charIndex);
+				charIndex++;
+				charCount--;
+			}
+			else
+				buffer.Fallback (chars[charIndex], charIndex);
+
+			char[] tmp = new char[buffer.Remaining];
+			int idx = 0;
+			while (buffer.Remaining > 0)
+				tmp[idx++] = buffer.GetNextChar();
+
+			var len = state == null ?
+				GetBytes(tmp, 0, tmp.Length, bytes, byteIndex)
+				: GetBytesInternal(tmp, 0, tmp.Length, bytes, byteIndex, true, state);
+			byteIndex += len;
+			byteCount -= len;
+		}
+
+	}
+
+		public abstract class MonoSafeEncoder : Encoder
+		{
+#if NET_2_0
+			MonoSafeEncoding encoding;
+#endif
+
+			public MonoSafeEncoder (MonoSafeEncoding encoding)
+			{
+#if NET_2_0
+				this.encoding = encoding;
+#endif
+			}
+
+			public void HandleFallback(
+				char[] chars, ref int charIndex, ref int charCount,
+				byte[] bytes, ref int byteIndex, ref int byteCount, object state)
+			{
+				EncoderFallbackBuffer buffer = FallbackBuffer;
+				encoding.HandleFallback(ref buffer, chars, ref charIndex, ref charCount,
+					bytes, ref byteIndex, ref byteCount, state);
+			}
+		}
+#endif
+}
diff --git a/mcs/class/I18N/Other/CP1251.cs b/mcs/class/I18N/Other/CP1251.cs
index f588fdb..e5e612f 100644
--- a/mcs/class/I18N/Other/CP1251.cs
+++ b/mcs/class/I18N/Other/CP1251.cs
@@ -31,6 +31,10 @@ using System;
 using System.Text;
 using I18N.Common;
 
+#if DISABLE_UNSAFE
+using ByteEncoding = I18N.Common.ByteSafeEncoding;
+#endif
+
 [Serializable]
 public class CP1251 : ByteEncoding
 {
@@ -86,18 +90,23 @@ public class CP1251 : ByteEncoding
 		'\u044C', '\u044D', '\u044E', '\u044F', 
 	};
 
+#if !DISABLE_UNSAFE
 	protected unsafe override void ToBytes(char* chars, int charCount,
 	                                byte* bytes, int byteCount)
 	{
 		int ch;
 		int charIndex = 0;
 		int byteIndex = 0;
+		int end = charCount;
 #if NET_2_0
 		EncoderFallbackBuffer buffer = null;
 #endif
-		while(charCount > 0)
+		for (int i = charIndex; i < end; i++, charCount--)
 		{
-			ch = (int)(chars[charIndex++]);
+			if (byteCount <= 0)
+				throw new ArgumentOutOfRangeException ("Insufficient byte buffer.");
+
+			ch = (int)(chars[i]);
 			if(ch >= 128) switch(ch)
 			{
 				case 0x0098:
@@ -233,11 +242,14 @@ public class CP1251 : ByteEncoding
 				case 0x2122: ch = 0x99; break;
 				default:
 				{
-					if(ch >= 0xFF01 && ch <= 0xFF5E)
+					if (ch >= 0xFF01 && ch <= 0xFF5E)
 						ch -= 0xFEE0;
 					else
 #if NET_2_0
-						HandleFallback (ref buffer, chars, ref charIndex, ref charCount, bytes, ref byteIndex, ref byteCount);
+					{
+						HandleFallback (ref buffer, chars, ref i, ref charCount, bytes, ref byteIndex, ref byteCount);
+						continue;
+					}
 #else
 						ch = 0x3F;
 #endif
@@ -245,20 +257,28 @@ public class CP1251 : ByteEncoding
 				break;
 			}
 			bytes[byteIndex++] = (byte)ch;
-			--charCount;
 			--byteCount;
 		}
 	}
 
-	/*
-	protected override void ToBytes(String s, int charIndex, int charCount,
-	                                byte[] bytes, int byteIndex)
+#else
+
+	protected override void ToBytes(char[] chars, int charIndex, int charCount, byte[] bytes, int byteIndex)
 	{
-		int ch;
-		while(charCount > 0)
+		int byteCount = bytes.Length;
+		int end = charIndex + charCount;
+#if NET_2_0
+		EncoderFallbackBuffer buffer = null;
+#endif
+
+		for (int i = charIndex; i < end; i++, charCount--)
 		{
-			ch = (int)(s[charIndex++]);
-			if(ch >= 128) switch(ch)
+			if (byteCount <= 0)
+				throw new ArgumentOutOfRangeException ("Insufficient byte buffer.");
+
+			int ch = (int)(chars[i]);
+
+			if (ch >= 128) switch (ch)
 			{
 				case 0x0098:
 				case 0x00A0:
@@ -396,7 +416,14 @@ public class CP1251 : ByteEncoding
 					if(ch >= 0xFF01 && ch <= 0xFF5E)
 						ch -= 0xFEE0;
 					else
+#if NET_2_0
+					{
+						HandleFallback(ref buffer, chars, ref i, ref charCount, bytes, ref byteIndex, ref byteCount, null);
+						continue;
+					}
+#else
 						ch = 0x3F;
+#endif
 				}
 				break;
 			}
@@ -404,7 +431,7 @@ public class CP1251 : ByteEncoding
 			--charCount;
 		}
 	}
-	*/
+#endif
 
 }; // class CP1251
 
diff --git a/mcs/class/I18N/Other/CP1257.cs b/mcs/class/I18N/Other/CP1257.cs
index b95d2e9..33148ed 100644
--- a/mcs/class/I18N/Other/CP1257.cs
+++ b/mcs/class/I18N/Other/CP1257.cs
@@ -92,12 +92,16 @@ public class CP1257 : ByteEncoding
 		int ch;
 		int charIndex = 0;
 		int byteIndex = 0;
+		int end = charCount;
 #if NET_2_0
 		EncoderFallbackBuffer buffer = null;
 #endif
-		while(charCount > 0)
+		for (int i = charIndex; i < end; i++, charCount--)
 		{
-			ch = (int)(chars[charIndex++]);
+			if (byteCount <= 0)
+				throw new ArgumentOutOfRangeException ("Insufficient byte buffer.");
+
+			ch = (int)(chars[i]);
 			if(ch >= 128) switch(ch)
 			{
 				case 0x0081:
@@ -229,19 +233,20 @@ public class CP1257 : ByteEncoding
 				case 0x2122: ch = 0x99; break;
 				default:
 				{
-					if(ch >= 0xFF01 && ch <= 0xFF5E)
+					if (ch >= 0xFF01 && ch <= 0xFF5E)
 						ch -= 0xFEE0;
-					else
+					else {
 #if NET_2_0
-						HandleFallback (ref buffer, chars, ref charIndex, ref charCount, bytes, ref byteIndex, ref byteCount);
+						HandleFallback (ref buffer, chars, ref i, ref charCount, bytes, ref byteIndex, ref byteCount);
+						continue;
 #else
 						ch = 0x3F;
 #endif
+					}
 				}
 				break;
 			}
 			bytes[byteIndex++] = (byte)ch;
-			--charCount;
 			--byteCount;
 		}
 	}
diff --git a/mcs/class/I18N/Other/CP1258.cs b/mcs/class/I18N/Other/CP1258.cs
index 190d7ff..9ab0e94 100644
--- a/mcs/class/I18N/Other/CP1258.cs
+++ b/mcs/class/I18N/Other/CP1258.cs
@@ -92,12 +92,16 @@ public class CP1258 : ByteEncoding
 		int ch;
 		int charIndex = 0;
 		int byteIndex = 0;
+		int end = charCount;
 #if NET_2_0
 		EncoderFallbackBuffer buffer = null;
 #endif
-		while(charCount > 0)
+		for (int i = charIndex; i < end; i++, charCount--)
 		{
-			ch = (int)(chars[charIndex++]);
+			if (byteCount <= 0)
+				throw new ArgumentOutOfRangeException ("Insufficient byte buffer.");
+
+			ch = (int)(chars[i]);
 			if(ch >= 128) switch(ch)
 			{
 				case 0x0081:
@@ -231,19 +235,20 @@ public class CP1258 : ByteEncoding
 				case 0x2122: ch = 0x99; break;
 				default:
 				{
-					if(ch >= 0xFF01 && ch <= 0xFF5E)
+					if (ch >= 0xFF01 && ch <= 0xFF5E)
 						ch -= 0xFEE0;
-					else
+					else {
 #if NET_2_0
-						HandleFallback (ref buffer, chars, ref charIndex, ref charCount, bytes, ref byteIndex, ref byteCount);
+						HandleFallback (ref buffer, chars, ref i, ref charCount, bytes, ref byteIndex, ref byteCount);
+						continue;
 #else
 						ch = 0x3F;
 #endif
+					}
 				}
 				break;
 			}
 			bytes[byteIndex++] = (byte)ch;
-			--charCount;
 			--byteCount;
 		}
 	}
diff --git a/mcs/class/I18N/Other/CP20866.cs b/mcs/class/I18N/Other/CP20866.cs
index 704e29f..7bc4216 100644
--- a/mcs/class/I18N/Other/CP20866.cs
+++ b/mcs/class/I18N/Other/CP20866.cs
@@ -92,12 +92,16 @@ public class CP20866 : ByteEncoding
 		int ch;
 		int charIndex = 0;
 		int byteIndex = 0;
+		int end = charCount;
 #if NET_2_0
 		EncoderFallbackBuffer buffer = null;
 #endif
-		while(charCount > 0)
+		for (int i = charIndex; i < end; i++, charCount--)
 		{
-			ch = (int)(chars[charIndex++]);
+			if (byteCount <= 0)
+				throw new ArgumentOutOfRangeException ("Insufficient byte buffer.");
+
+			ch = (int)(chars[i]);
 			if(ch >= 128) switch(ch)
 			{
 				case 0x00A0: ch = 0x9A; break;
@@ -246,19 +250,21 @@ public class CP20866 : ByteEncoding
 				case 0xFFED: ch = 0x94; break;
 				default:
 				{
-					if(ch >= 0xFF01 && ch <= 0xFF5E)
+					if (ch >= 0xFF01 && ch <= 0xFF5E)
 						ch -= 0xFEE0;
 					else
+					{
 #if NET_2_0
-						HandleFallback (ref buffer, chars, ref charIndex, ref charCount, bytes, ref byteIndex, ref byteCount);
+						HandleFallback(ref buffer, chars, ref i, ref charCount, bytes, ref byteIndex, ref byteCount);
+						continue;
 #else
 						ch = 0x3F;
 #endif
+					}
 				}
 				break;
 			}
 			bytes[byteIndex++] = (byte)ch;
-			--charCount;
 			--byteCount;
 		}
 	}
diff --git a/mcs/class/I18N/Other/CP21866.cs b/mcs/class/I18N/Other/CP21866.cs
index a6b56f6..95717aa 100644
--- a/mcs/class/I18N/Other/CP21866.cs
+++ b/mcs/class/I18N/Other/CP21866.cs
@@ -92,12 +92,16 @@ public class CP21866 : ByteEncoding
 		int ch;
 		int charIndex = 0;
 		int byteIndex = 0;
+		int end = charCount;
 #if NET_2_0
 		EncoderFallbackBuffer buffer = null;
 #endif
-		while(charCount > 0)
+		for (int i = charIndex; i < end; i++, charCount--)
 		{
-			ch = (int)(chars[charIndex++]);
+			if (byteCount <= 0)
+				throw new ArgumentOutOfRangeException ("Insufficient byte buffer.");
+			
+			ch = (int)(chars[i]);
 			if(ch >= 128) switch(ch)
 			{
 				case 0x00A0: ch = 0x9A; break;
@@ -246,19 +250,21 @@ public class CP21866 : ByteEncoding
 				case 0x25A0: ch = 0x94; break;
 				default:
 				{
-					if(ch >= 0xFF01 && ch <= 0xFF5E)
+					if (ch >= 0xFF01 && ch <= 0xFF5E)
 						ch -= 0xFEE0;
 					else
+					{
 #if NET_2_0
-						HandleFallback (ref buffer, chars, ref charIndex, ref charCount, bytes, ref byteIndex, ref byteCount);
+						HandleFallback(ref buffer, chars, ref i, ref charCount, bytes, ref byteIndex, ref byteCount);
+						continue;
 #else
 						ch = 0x3F;
 #endif
+					}
 				}
 				break;
 			}
 			bytes[byteIndex++] = (byte)ch;
-			--charCount;
 			--byteCount;
 		}
 	}
diff --git a/mcs/class/I18N/Other/CP28594.cs b/mcs/class/I18N/Other/CP28594.cs
index b366a94..d6c71d4 100644
--- a/mcs/class/I18N/Other/CP28594.cs
+++ b/mcs/class/I18N/Other/CP28594.cs
@@ -92,12 +92,16 @@ public class CP28594 : ByteEncoding
 		int ch;
 		int charIndex = 0;
 		int byteIndex = 0;
+		int end = charCount;
 #if NET_2_0
 		EncoderFallbackBuffer buffer = null;
 #endif
-		while(charCount > 0)
+		for (int i = charIndex; i < end; i++, charCount--)
 		{
-			ch = (int)(chars[charIndex++]);
+			if (byteCount <= 0)
+				throw new ArgumentOutOfRangeException ("Insufficient byte buffer.");
+			
+			ch = (int)(chars[i]);
 			if(ch >= 161) switch(ch)
 			{
 				case 0x00A4:
@@ -198,19 +202,21 @@ public class CP28594 : ByteEncoding
 				case 0x02DB: ch = 0xB2; break;
 				default:
 				{
-					if(ch >= 0xFF01 && ch <= 0xFF5E)
+					if (ch >= 0xFF01 && ch <= 0xFF5E)
 						ch -= 0xFEE0;
 					else
+					{
 #if NET_2_0
-						HandleFallback (ref buffer, chars, ref charIndex, ref charCount, bytes, ref byteIndex, ref byteCount);
+						HandleFallback(ref buffer, chars, ref i, ref charCount, bytes, ref byteIndex, ref byteCount);
+						continue;
 #else
 						ch = 0x3F;
 #endif
+					}
 				}
 				break;
 			}
 			bytes[byteIndex++] = (byte)ch;
-			--charCount;
 			--byteCount;
 		}
 	}
diff --git a/mcs/class/I18N/Other/CP28595.cs b/mcs/class/I18N/Other/CP28595.cs
index 046bb70..1e7d385 100644
--- a/mcs/class/I18N/Other/CP28595.cs
+++ b/mcs/class/I18N/Other/CP28595.cs
@@ -92,13 +92,17 @@ public class CP28595 : ByteEncoding
 		int ch;
 		int charIndex = 0;
 		int byteIndex = 0;
+		int end = charCount;
 #if NET_2_0
 		EncoderFallbackBuffer buffer = null;
 #endif
-		while(charCount > 0)
+		for (int i = charIndex; i < end; i++, charCount--)
 		{
-			ch = (int)(chars[charIndex++]);
-			if(ch >= 161) switch(ch)
+			if (byteCount <= 0)
+				throw new ArgumentOutOfRangeException ("Insufficient byte buffer.");
+
+			ch = (int)(chars[i]);
+			if (ch >= 161) switch (ch)
 			{
 				case 0x00AD:
 					break;
@@ -204,19 +208,21 @@ public class CP28595 : ByteEncoding
 				case 0x2116: ch = 0xF0; break;
 				default:
 				{
-					if(ch >= 0xFF01 && ch <= 0xFF5E)
+					if (ch >= 0xFF01 && ch <= 0xFF5E)
 						ch -= 0xFEE0;
 					else
+					{
 #if NET_2_0
-						HandleFallback (ref buffer, chars, ref charIndex, ref charCount, bytes, ref byteIndex, ref byteCount);
+						HandleFallback(ref buffer, chars, ref i, ref charCount, bytes, ref byteIndex, ref byteCount);
+						continue;
 #else
 						ch = 0x3F;
 #endif
+					}
 				}
 				break;
 			}
 			bytes[byteIndex++] = (byte)ch;
-			--charCount;
 			--byteCount;
 		}
 	}
diff --git a/mcs/class/I18N/Other/CP57002.cs b/mcs/class/I18N/Other/CP57002.cs
index b449c6d..22c0ed8 100644
--- a/mcs/class/I18N/Other/CP57002.cs
+++ b/mcs/class/I18N/Other/CP57002.cs
@@ -95,6 +95,7 @@ public abstract class ISCIIEncoding : MonoEncoding
 				char ch;
 				char first = (char)shift;
 				char last = (char)(shift + 0x7F);
+
 				while(count-- > 0)
 				{
 					ch = chars[index++];
@@ -133,8 +134,9 @@ public abstract class ISCIIEncoding : MonoEncoding
 #if NET_2_0
 				EncoderFallbackBuffer buffer = null;
 #endif
-				int charIndex = 0;
+				//int charIndex = 0;
 				int byteIndex = 0;
+				int end = charCount;
 
 				if(chars == null)
 				{
@@ -150,9 +152,10 @@ public abstract class ISCIIEncoding : MonoEncoding
 				int posn = byteIndex;
 				char first = (char)shift;
 				char last = (char)(shift + 0x7F);
-				while(charCount-- > 0)
+
+				for (int i = 0; i < end; i++, charCount--)
 				{
-					ch = chars[charIndex++];
+					ch = chars[i];
 					if(ch < (char)0x0080)
 					{
 						// Regular ASCII subset.
@@ -171,7 +174,7 @@ public abstract class ISCIIEncoding : MonoEncoding
 					else
 					{
 #if NET_2_0
-						HandleFallback (ref buffer, chars, ref charIndex, ref charCount, bytes, ref posn, ref byteCount);
+						HandleFallback (ref buffer, chars, ref i, ref charCount, bytes, ref posn, ref byteCount);
 						continue;
 #else
 						bytes[posn++] = (byte)'?';
diff --git a/mcs/class/I18N/Other/CP874.cs b/mcs/class/I18N/Other/CP874.cs
index 1f08062..0e30ad5 100644
--- a/mcs/class/I18N/Other/CP874.cs
+++ b/mcs/class/I18N/Other/CP874.cs
@@ -92,13 +92,17 @@ public class CP874 : ByteEncoding
 		int ch;
 		int charIndex = 0;
 		int byteIndex = 0;
+		int end = charCount;
 #if NET_2_0
 		EncoderFallbackBuffer buffer = null;
 #endif
-		while(charCount > 0)
+		for (int i = charIndex; i < end; i++, charCount--)
 		{
-			ch = (int)(chars[charIndex++]);
-			if(ch >= 26) switch(ch)
+			if (byteCount <= 0)
+				throw new ArgumentOutOfRangeException ("Insufficient byte buffer.");
+
+			ch = (int)(chars[i]);
+			if (ch >= 26) switch (ch)
 			{
 				case 0x001B:
 				case 0x001D:
@@ -300,19 +304,21 @@ public class CP874 : ByteEncoding
 					break;
 				default:
 				{
-					if(ch >= 0xFF01 && ch <= 0xFF5E)
+					if (ch >= 0xFF01 && ch <= 0xFF5E)
 						ch -= 0xFEE0;
 					else
+					{
 #if NET_2_0
-						HandleFallback (ref buffer, chars, ref charIndex, ref charCount, bytes, ref byteIndex, ref byteCount);
+						HandleFallback(ref buffer, chars, ref i, ref charCount, bytes, ref byteIndex, ref byteCount);
+						continue;
 #else
 						ch = 0x3F;
 #endif
+					}
 				}
 				break;
 			}
 			bytes[byteIndex++] = (byte)ch;
-			--charCount;
 			--byteCount;
 		}
 	}
diff --git a/mcs/class/IBM.Data.DB2/Makefile b/mcs/class/IBM.Data.DB2/Makefile
index d64e175..abdcbe6 100644
--- a/mcs/class/IBM.Data.DB2/Makefile
+++ b/mcs/class/IBM.Data.DB2/Makefile
@@ -4,7 +4,7 @@ include ../../build/rules.make
 
 LIBRARY = IBM.Data.DB2.dll
 LIB_MCS_FLAGS = /unsafe /r:$(corlib) /r:System.dll \
-	/r:System.Xml.dll /r:System.Data.dll
+	/r:System.Xml.dll /r:System.Data.dll -warn:1
 NO_TEST = yes
 
 EXTRA_DISTFILES = ibm.pub
diff --git a/mcs/class/ICSharpCode.SharpZipLib/ChangeLog b/mcs/class/ICSharpCode.SharpZipLib/ChangeLog
index f61df27..7ef058d 100644
--- a/mcs/class/ICSharpCode.SharpZipLib/ChangeLog
+++ b/mcs/class/ICSharpCode.SharpZipLib/ChangeLog
@@ -1,8 +1,3 @@
-2010-11-04  Marek Safar  <marek.safar at gmail.com>
-
-	Fix SharpZipLib 4.0 profile version number to not overwrite
-	non-4.0 version of same assembly in GAC
-
 2005-10-15  Zoltan Varga  <vargaz at freemail.hu>
 
 	* Import 0.84 version of SharpZipLib and merge local changes. This is
diff --git a/mcs/class/ICSharpCode.SharpZipLib/ChangeLog.old b/mcs/class/ICSharpCode.SharpZipLib/ChangeLog.old
deleted file mode 100644
index 7ef058d..0000000
--- a/mcs/class/ICSharpCode.SharpZipLib/ChangeLog.old
+++ /dev/null
@@ -1,24 +0,0 @@
-2005-10-15  Zoltan Varga  <vargaz at freemail.hu>
-
-	* Import 0.84 version of SharpZipLib and merge local changes. This is
-	needed by newer versions of IKVM.
-	
-	* ICSharpCode.SharpZipLib: Remove 0.6 version.
-
-2004-11-25  Raja R Harinath  <rharinath at novell.com>
-
-	* Makefile (EXTRA_DISTFILES): Add SharpZipLib.pub.
-
-2004-06-21  Raja R Harinath  <rharinath at novell.com>
-
-	* Makefile (LIBRARY_SNK): Sign with SharpZipLib.key.  The library
-	is delay-signed according to ICSharpCode.SharpZipLib/AssemblyInfo.cs.
-
-2004-06-09  Sebastien Pouliot  <sebastien at ximian.com>
-
-	* Makefile: Don't sign this assembly as it is fully signed during
-	compilation (we have the original private key). Thanks to Jackson.
-
-2004-05-28  Duncan Mak  <duncan at ximian.com>
-
-	* SharpZipLib.pub: Added public key.
diff --git a/mcs/class/ICSharpCode.SharpZipLib/Makefile b/mcs/class/ICSharpCode.SharpZipLib/Makefile
index fe5ae55..263107e 100644
--- a/mcs/class/ICSharpCode.SharpZipLib/Makefile
+++ b/mcs/class/ICSharpCode.SharpZipLib/Makefile
@@ -5,7 +5,7 @@ include ../../build/rules.make
 LIBRARY = ICSharpCode.SharpZipLib.dll
 LIBRARY_SNK = SharpZipLib.key
 
-LIB_MCS_FLAGS = /r:$(corlib) /r:System.dll /r:System.Xml.dll
+LIB_MCS_FLAGS = /r:$(corlib) /r:System.dll /r:System.Xml.dll -warn:1
 NO_TEST = yes
 EXTRA_DISTFILES = SharpZipLib.pub $(LIBRARY_SNK)
 
diff --git a/mcs/class/IKVM.Reflection/Assembly.cs b/mcs/class/IKVM.Reflection/Assembly.cs
index 8e547ae..2020410 100644
--- a/mcs/class/IKVM.Reflection/Assembly.cs
+++ b/mcs/class/IKVM.Reflection/Assembly.cs
@@ -29,6 +29,7 @@ namespace IKVM.Reflection
 	public abstract class Assembly : ICustomAttributeProvider
 	{
 		internal readonly Universe universe;
+		protected string fullName;	// AssemblyBuilder needs access to this field to clear it when the name changes
 
 		internal Assembly(Universe universe)
 		{
@@ -36,7 +37,6 @@ namespace IKVM.Reflection
 		}
 
 		public abstract Type[] GetTypes();
-		public abstract string FullName { get; }
 		public abstract AssemblyName GetName();
 		public abstract string ImageRuntimeVersion { get; }
 		public abstract Module ManifestModule { get; }
@@ -50,7 +50,30 @@ namespace IKVM.Reflection
 		public abstract ManifestResourceInfo GetManifestResourceInfo(string resourceName);
 		public abstract System.IO.Stream GetManifestResourceStream(string resourceName);
 
-		internal abstract Type GetTypeImpl(string typeName);
+		internal Type GetTypeImpl(string typeName)
+		{
+			Type type = FindType(TypeName.Split(TypeNameParser.Unescape(typeName)));
+			if (type == null && __IsMissing)
+			{
+				throw new MissingAssemblyException((MissingAssembly)this);
+			}
+			return type;
+		}
+
+		internal abstract Type FindType(TypeName name);
+
+		// The differences between ResolveType and FindType are:
+		// - ResolveType is only used when a type is assumed to exist (because another module's metadata claims it)
+		// - ResolveType can return a MissingType
+		internal Type ResolveType(TypeName typeName)
+		{
+			return FindType(typeName) ?? universe.GetMissingTypeOrThrow(this.ManifestModule, null, typeName);
+		}
+
+		public string FullName
+		{
+			get { return fullName ?? (fullName = GetName().FullName); }
+		}
 
 		public Module[] GetModules()
 		{
@@ -108,7 +131,7 @@ namespace IKVM.Reflection
 					return null;
 				}
 			}
-			return parser.Expand(GetTypeImpl(parser.FirstNamePart), this, throwOnError, typeName);
+			return parser.Expand(GetTypeImpl(parser.FirstNamePart), this, throwOnError, typeName, false);
 		}
 
 		public virtual Module LoadModule(string moduleName, byte[] rawModule)
@@ -154,6 +177,16 @@ namespace IKVM.Reflection
 			}
 		}
 
+		public virtual bool __IsMissing
+		{
+			get { return false; }
+		}
+
+		public virtual AssemblyNameFlags __AssemblyFlags
+		{
+			get { return GetName().Flags; }
+		}
+
 		internal abstract IList<CustomAttributeData> GetCustomAttributesData(Type attributeType);
 	}
 }
diff --git a/mcs/class/IKVM.Reflection/AssemblyName.cs b/mcs/class/IKVM.Reflection/AssemblyName.cs
index e89e80d..8452f1b 100644
--- a/mcs/class/IKVM.Reflection/AssemblyName.cs
+++ b/mcs/class/IKVM.Reflection/AssemblyName.cs
@@ -1,5 +1,5 @@
 /*
-  Copyright (C) 2009 Jeroen Frijters
+  Copyright (C) 2009-2012 Jeroen Frijters
 
   This software is provided 'as-is', without any express or implied
   warranty.  In no event will the authors be held liable for any damages
@@ -25,138 +25,324 @@ using System;
 using System.Globalization;
 using System.Configuration.Assemblies;
 using System.IO;
+using System.Text;
 using IKVM.Reflection.Reader;
 
 namespace IKVM.Reflection
 {
 	public sealed class AssemblyName : ICloneable
 	{
-		private readonly System.Reflection.AssemblyName name;
+		private string name;
 		private string culture;
-
-		private AssemblyName(System.Reflection.AssemblyName name, string culture)
-		{
-			this.name = name;
-			this.culture = culture;
-		}
+		private Version version;
+		private byte[] publicKeyToken;
+		private byte[] publicKey;
+		private StrongNameKeyPair keyPair;
+		private AssemblyNameFlags flags;
+		private AssemblyHashAlgorithm hashAlgorithm;
+		private AssemblyVersionCompatibility versionCompatibility = AssemblyVersionCompatibility.SameMachine;
+		private string codeBase;
+		internal byte[] hash;
 
 		public AssemblyName()
 		{
-			name = new System.Reflection.AssemblyName();
 		}
 
 		public AssemblyName(string assemblyName)
 		{
-			name = new System.Reflection.AssemblyName(assemblyName);
+			if (assemblyName == null)
+			{
+				throw new ArgumentNullException("assemblyName");
+			}
+			if (assemblyName == "")
+			{
+				throw new ArgumentException();
+			}
+			ParsedAssemblyName parsed;
+			switch (Fusion.ParseAssemblyName(assemblyName, out parsed))
+			{
+				case ParseAssemblyResult.GenericError:
+					throw new FileLoadException();
+				case ParseAssemblyResult.DuplicateKey:
+					throw new System.Runtime.InteropServices.COMException();
+			}
+			name = parsed.Name;
+			if (parsed.Culture != null)
+			{
+				if (parsed.Culture.Equals("neutral", StringComparison.InvariantCultureIgnoreCase))
+				{
+					culture = "";
+				}
+				else if (parsed.Culture == "")
+				{
+					throw new FileLoadException();
+				}
+				else
+				{
+					culture = new CultureInfo(parsed.Culture).Name;
+				}
+			}
+			if (parsed.Version != null && parsed.Version.Major != 65535 && parsed.Version.Minor != 65535)
+			{
+				// our Fusion parser returns -1 for build and revision for incomplete version numbers (and we want 65535)
+				version = new Version(parsed.Version.Major, parsed.Version.Minor, parsed.Version.Build & 0xFFFF, parsed.Version.Revision & 0xFFFF);
+			}
+			if (parsed.PublicKeyToken != null)
+			{
+				if (parsed.PublicKeyToken.Equals("null", StringComparison.InvariantCultureIgnoreCase))
+				{
+					publicKeyToken = Empty<byte>.Array;
+				}
+				else if (parsed.PublicKeyToken.Length != 16)
+				{
+					throw new FileLoadException();
+				}
+				else
+				{
+					publicKeyToken = new byte[8];
+					for (int i = 0, pos = 0; i < publicKeyToken.Length; i++, pos += 2)
+					{
+						publicKeyToken[i] = (byte)("0123456789abcdef".IndexOf(char.ToLowerInvariant(parsed.PublicKeyToken[pos])) * 16
+							+ "0123456789abcdef".IndexOf(char.ToLowerInvariant(parsed.PublicKeyToken[pos + 1])));
+					}
+				}
+			}
+			if (parsed.Retargetable.HasValue)
+			{
+				if (parsed.Culture == null || parsed.PublicKeyToken == null || parsed.Version == null || parsed.Version.Build == -1 || parsed.Version.Revision == -1)
+				{
+					throw new FileLoadException();
+				}
+				if (parsed.Retargetable.Value)
+				{
+					flags |= AssemblyNameFlags.Retargetable;
+				}
+			}
+			ProcessorArchitecture = parsed.ProcessorArchitecture;
 		}
 
 		public override string ToString()
 		{
-			string str = name.ToString();
-			if (culture != null)
-			{
-				str = str.Replace("Culture=neutral", "Culture=" + culture);
-			}
-			return str;
+			return FullName;
 		}
 
 		public string Name
 		{
-			get { return name.Name; }
-			set { name.Name = value; }
+			get { return name; }
+			set { name = value; }
 		}
 
 		public CultureInfo CultureInfo
 		{
-			get { return name.CultureInfo; }
-			set
-			{
-				name.CultureInfo = value;
-				culture = null;
-			}
+			get { return culture == null ? null : new CultureInfo(culture); }
+			set { culture = value == null ? null : value.Name; }
 		}
 
 		internal string Culture
 		{
-			set
-			{
-				culture = value;
-				name.CultureInfo = CultureInfo.InvariantCulture;
-			}
+			get { return culture; }
+			set { culture = value; }
 		}
 
 		public Version Version
 		{
-			get { return name.Version; }
-			set { name.Version = value; }
+			get { return version; }
+			set { version = value; }
 		}
 
 		public StrongNameKeyPair KeyPair
 		{
-			get { return name.KeyPair == null ?  null : new StrongNameKeyPair(name.KeyPair); }
-			set { name.KeyPair = value == null ? null : value.keyPair; }
+			get { return keyPair; }
+			set { keyPair = value; }
 		}
 
 		public string CodeBase
 		{
-			get { return name.CodeBase; }
-			set { name.CodeBase = value; }
+			get { return codeBase; }
+			set { codeBase = value; }
+		}
+
+		public string EscapedCodeBase
+		{
+			get
+			{
+				// HACK use the real AssemblyName to escape the codebase
+				System.Reflection.AssemblyName tmp = new System.Reflection.AssemblyName();
+				tmp.CodeBase = codeBase;
+				return tmp.EscapedCodeBase;
+			}
 		}
 
 		public ProcessorArchitecture ProcessorArchitecture
 		{
-			get { return (ProcessorArchitecture)name.ProcessorArchitecture; }
-			set { name.ProcessorArchitecture = (System.Reflection.ProcessorArchitecture)value; }
+			get { return (ProcessorArchitecture)(((int)flags & 0x70) >> 4); }
+			set
+			{
+				if (value >= ProcessorArchitecture.None && value <= ProcessorArchitecture.Arm)
+				{
+					flags = (flags & ~(AssemblyNameFlags)0x70) | (AssemblyNameFlags)((int)value << 4);
+				}
+			}
 		}
 
 		public AssemblyNameFlags Flags
 		{
-			get { return (AssemblyNameFlags)name.Flags; }
-			set { name.Flags = (System.Reflection.AssemblyNameFlags)value; }
+			get { return flags & (AssemblyNameFlags)~0xF0; }
+			set { flags = (flags & (AssemblyNameFlags)0xF0) | (value & (AssemblyNameFlags)~0xF0); }
 		}
 
 		public AssemblyVersionCompatibility VersionCompatibility
 		{
-			get { return name.VersionCompatibility; }
-			set { name.VersionCompatibility = value; }
+			get { return versionCompatibility; }
+			set { versionCompatibility = value; }
 		}
 
 		public byte[] GetPublicKey()
 		{
-			return name.GetPublicKey();
+			return publicKey;
 		}
 
 		public void SetPublicKey(byte[] publicKey)
 		{
-			name.SetPublicKey(publicKey);
+			this.publicKey = publicKey;
+			flags = (flags & ~AssemblyNameFlags.PublicKey) | (publicKey == null ? 0 : AssemblyNameFlags.PublicKey);
 		}
 
 		public byte[] GetPublicKeyToken()
 		{
-			return name.GetPublicKeyToken();
+			if (publicKeyToken == null && publicKey != null)
+			{
+				// note that GetPublicKeyToken() has a side effect in this case, because we retain this token even after the public key subsequently gets changed
+				publicKeyToken = ComputePublicKeyToken(publicKey);
+			}
+			return publicKeyToken;
 		}
 
 		public void SetPublicKeyToken(byte[] publicKeyToken)
 		{
-			name.SetPublicKeyToken(publicKeyToken);
+			this.publicKeyToken = publicKeyToken;
 		}
 
 		public AssemblyHashAlgorithm HashAlgorithm
 		{
-			get { return name.HashAlgorithm; }
-			set { name.HashAlgorithm = value; }
+			get { return hashAlgorithm; }
+			set { hashAlgorithm = value; }
+		}
+
+		public byte[] __Hash
+		{
+			get { return hash; }
 		}
 
 		public string FullName
 		{
 			get
 			{
-				string str = name.FullName;
+				if (name == null)
+				{
+					return "";
+				}
+				StringBuilder sb = new StringBuilder();
+				bool doubleQuotes = name.StartsWith(" ") || name.EndsWith(" ") || name.IndexOf('\'') != -1;
+				bool singleQuotes = name.IndexOf('"') != -1;
+				if (singleQuotes)
+				{
+					sb.Append('\'');
+				}
+				else if (doubleQuotes)
+				{
+					sb.Append('"');
+				}
+				if (name.IndexOf(',') != -1 || name.IndexOf('\\') != -1 || name.IndexOf('=') != -1 || (singleQuotes && name.IndexOf('\'') != -1))
+				{
+					for (int i = 0; i < name.Length; i++)
+					{
+						char c = name[i];
+						if (c == ',' || c == '\\' || c == '=' || (singleQuotes && c == '\''))
+						{
+							sb.Append('\\');
+						}
+						sb.Append(c);
+					}
+				}
+				else
+				{
+					sb.Append(name);
+				}
+				if (singleQuotes)
+				{
+					sb.Append('\'');
+				}
+				else if (doubleQuotes)
+				{
+					sb.Append('"');
+				}
+				if (version != null)
+				{
+					if ((version.Major & 0xFFFF) != 0xFFFF)
+					{
+						sb.Append(", Version=").Append(version.Major & 0xFFFF);
+						if ((version.Minor & 0xFFFF) != 0xFFFF)
+						{
+							sb.Append('.').Append(version.Minor & 0xFFFF);
+							if ((version.Build & 0xFFFF) != 0xFFFF)
+							{
+								sb.Append('.').Append(version.Build & 0xFFFF);
+								if ((version.Revision & 0xFFFF) != 0xFFFF)
+								{
+									sb.Append('.').Append(version.Revision & 0xFFFF);
+								}
+							}
+						}
+					}
+				}
 				if (culture != null)
 				{
-					str = str.Replace("Culture=neutral", "Culture=" + culture);
+					sb.Append(", Culture=").Append(culture == "" ? "neutral" : culture);
 				}
-				return str;
+				byte[] publicKeyToken = this.publicKeyToken;
+				if ((publicKeyToken == null || publicKeyToken.Length == 0) && publicKey != null)
+				{
+					publicKeyToken = ComputePublicKeyToken(publicKey);
+				}
+				if (publicKeyToken != null)
+				{
+					sb.Append(", PublicKeyToken=");
+					if (publicKeyToken.Length == 0)
+					{
+						sb.Append("null");
+					}
+					else
+					{
+						AppendPublicKey(sb, publicKeyToken);
+					}
+				}
+				if ((Flags & AssemblyNameFlags.Retargetable) != 0)
+				{
+					sb.Append(", Retargetable=Yes");
+				}
+				return sb.ToString();
+			}
+		}
+
+		private static byte[] ComputePublicKeyToken(byte[] publicKey)
+		{
+			if (publicKey.Length == 0)
+			{
+				return publicKey;
+			}
+			// HACK use the real AssemblyName to convert PublicKey to PublicKeyToken
+			StringBuilder sb = new StringBuilder("Foo, PublicKey=", 20 + publicKey.Length * 2);
+			AppendPublicKey(sb, publicKey);
+			return new System.Reflection.AssemblyName(sb.ToString()).GetPublicKeyToken();
+		}
+
+		private static void AppendPublicKey(StringBuilder sb, byte[] publicKey)
+		{
+			for (int i = 0; i < publicKey.Length; i++)
+			{
+				sb.Append("0123456789abcdef"[publicKey[i] >> 4]);
+				sb.Append("0123456789abcdef"[publicKey[i] & 0x0F]);
 			}
 		}
 
@@ -173,12 +359,21 @@ namespace IKVM.Reflection
 
 		public object Clone()
 		{
-			return new AssemblyName((System.Reflection.AssemblyName)name.Clone(), culture);
+			AssemblyName copy = (AssemblyName)MemberwiseClone();
+			copy.publicKey = Copy(publicKey);
+			copy.publicKeyToken = Copy(publicKeyToken);
+			return copy;
+		}
+
+		private static byte[] Copy(byte[] b)
+		{
+			return b == null || b.Length == 0 ? b : (byte[])b.Clone();
 		}
 
 		public static bool ReferenceMatchesDefinition(AssemblyName reference, AssemblyName definition)
 		{
-			return System.Reflection.AssemblyName.ReferenceMatchesDefinition(reference.name, definition.name);
+			// HACK use the real AssemblyName to implement the (broken) ReferenceMatchesDefinition method
+			return System.Reflection.AssemblyName.ReferenceMatchesDefinition(new System.Reflection.AssemblyName(reference.FullName), new System.Reflection.AssemblyName(definition.FullName));
 		}
 
 		public static AssemblyName GetAssemblyName(string path)
@@ -205,5 +400,11 @@ namespace IKVM.Reflection
 				throw new FileNotFoundException(x.Message, x);
 			}
 		}
+
+		internal AssemblyNameFlags RawFlags
+		{
+			get { return flags; }
+			set { flags = value; }
+		}
 	}
 }
diff --git a/mcs/class/IKVM.Reflection/ConstructorInfo.cs b/mcs/class/IKVM.Reflection/ConstructorInfo.cs
index 69e2b4d..72524e0 100644
--- a/mcs/class/IKVM.Reflection/ConstructorInfo.cs
+++ b/mcs/class/IKVM.Reflection/ConstructorInfo.cs
@@ -28,6 +28,11 @@ namespace IKVM.Reflection
 {
 	public abstract class ConstructorInfo : MethodBase
 	{
+		// prevent external subclasses
+		internal ConstructorInfo()
+		{
+		}
+
 		public static readonly string ConstructorName = ".ctor";
 		public static readonly string TypeConstructorName = ".cctor";
 
@@ -38,16 +43,31 @@ namespace IKVM.Reflection
 			return new ConstructorInfoImpl((MethodInfo)GetMethodInfo().BindTypeParameters(type));
 		}
 
+		public sealed override MethodBase __GetMethodOnTypeDefinition()
+		{
+			return new ConstructorInfoImpl((MethodInfo)GetMethodInfo().__GetMethodOnTypeDefinition());
+		}
+
 		public sealed override MemberTypes MemberType
 		{
 			get { return MemberTypes.Constructor; }
 		}
 
+		public sealed override int __MethodRVA
+		{
+			get { return GetMethodInfo().__MethodRVA; }
+		}
+
 		public override bool ContainsGenericParameters
 		{
 			get { return GetMethodInfo().ContainsGenericParameters; }
 		}
 
+		public ParameterInfo __ReturnParameter
+		{
+			get { return new ParameterInfoWrapper(this, GetMethodInfo().ReturnParameter); }
+		}
+
 		public sealed override ParameterInfo[] GetParameters()
 		{
 			ParameterInfo[] parameters = GetMethodInfo().GetParameters();
@@ -94,14 +114,9 @@ namespace IKVM.Reflection
 				get { return forward.RawDefaultValue; }
 			}
 
-			public override Type[] GetOptionalCustomModifiers()
+			public override CustomModifiers __GetCustomModifiers()
 			{
-				return forward.GetOptionalCustomModifiers();
-			}
-
-			public override Type[] GetRequiredCustomModifiers()
-			{
-				return forward.GetRequiredCustomModifiers();
+				return forward.__GetCustomModifiers();
 			}
 
 			public override MemberInfo Member
@@ -196,6 +211,11 @@ namespace IKVM.Reflection
 			get { return method.MetadataToken; }
 		}
 
+		public override bool __IsMissing
+		{
+			get { return method.__IsMissing; }
+		}
+
 		internal override MethodInfo GetMethodInfo()
 		{
 			return method;
diff --git a/mcs/class/IKVM.Reflection/CustomAttributeData.cs b/mcs/class/IKVM.Reflection/CustomAttributeData.cs
index 5af366b..ff6e04f 100644
--- a/mcs/class/IKVM.Reflection/CustomAttributeData.cs
+++ b/mcs/class/IKVM.Reflection/CustomAttributeData.cs
@@ -1,5 +1,5 @@
 /*
-  Copyright (C) 2009-2010 Jeroen Frijters
+  Copyright (C) 2009-2011 Jeroen Frijters
 
   This software is provided 'as-is', without any express or implied
   warranty.  In no event will the authors be held liable for any damages
@@ -34,28 +34,99 @@ namespace IKVM.Reflection
 	public sealed class CustomAttributeData
 	{
 		internal static readonly IList<CustomAttributeData> EmptyList = new List<CustomAttributeData>(0).AsReadOnly();
-		private Module module;
-		private int index;
+
+		/*
+		 * There are several states a CustomAttributeData object can be in:
+		 * 
+		 * 1) Unresolved Custom Attribute
+		 *    - customAttributeIndex >= 0
+		 *    - declSecurityIndex == -1
+		 *    - declSecurityBlob == null
+		 *    - lazyConstructor = null
+		 *    - lazyConstructorArguments = null
+		 *    - lazyNamedArguments = null
+		 * 
+		 * 2) Resolved Custom Attribute
+		 *    - customAttributeIndex >= 0
+		 *    - declSecurityIndex == -1
+		 *    - declSecurityBlob == null
+		 *    - lazyConstructor != null
+		 *    - lazyConstructorArguments != null
+		 *    - lazyNamedArguments != null
+		 *    
+		 * 3) Pre-resolved Custom Attribute
+		 *    - customAttributeIndex = -1
+		 *    - declSecurityIndex == -1
+		 *    - declSecurityBlob == null
+		 *    - lazyConstructor != null
+		 *    - lazyConstructorArguments != null
+		 *    - lazyNamedArguments != null
+		 *    
+		 * 4) Pseudo Custom Attribute, .NET 1.x declarative security or result of CustomAttributeBuilder.ToData()
+		 *    - customAttributeIndex = -1
+		 *    - declSecurityIndex == -1
+		 *    - declSecurityBlob == null
+		 *    - lazyConstructor != null
+		 *    - lazyConstructorArguments != null
+		 *    - lazyNamedArguments != null
+		 *    
+		 * 5) Unresolved declarative security
+		 *    - customAttributeIndex = -1
+		 *    - declSecurityIndex >= 0
+		 *    - declSecurityBlob != null
+		 *    - lazyConstructor != null
+		 *    - lazyConstructorArguments != null
+		 *    - lazyNamedArguments == null
+		 * 
+		 * 6) Resolved declarative security
+		 *    - customAttributeIndex = -1
+		 *    - declSecurityIndex >= 0
+		 *    - declSecurityBlob == null
+		 *    - lazyConstructor != null
+		 *    - lazyConstructorArguments != null
+		 *    - lazyNamedArguments != null
+		 * 
+		 */
+		private readonly Module module;
+		private readonly int customAttributeIndex;
+		private readonly int declSecurityIndex;
+		private readonly byte[] declSecurityBlob;
 		private ConstructorInfo lazyConstructor;
 		private IList<CustomAttributeTypedArgument> lazyConstructorArguments;
 		private IList<CustomAttributeNamedArgument> lazyNamedArguments;
 
+		// 1) Unresolved Custom Attribute
 		internal CustomAttributeData(Module module, int index)
 		{
 			this.module = module;
-			this.index = index;
+			this.customAttributeIndex = index;
+			this.declSecurityIndex = -1;
 		}
 
-		internal CustomAttributeData(ConstructorInfo constructor, object[] args, List<CustomAttributeNamedArgument> namedArguments)
+		// 4) Pseudo Custom Attribute, .NET 1.x declarative security
+		internal CustomAttributeData(Module module, ConstructorInfo constructor, object[] args, List<CustomAttributeNamedArgument> namedArguments)
+			: this(module, constructor, WrapConstructorArgs(args, constructor.MethodSignature), namedArguments)
+		{
+		}
+
+		private static List<CustomAttributeTypedArgument> WrapConstructorArgs(object[] args, MethodSignature sig)
 		{
-			this.lazyConstructor = constructor;
-			MethodSignature sig = constructor.MethodSignature;
 			List<CustomAttributeTypedArgument> list = new List<CustomAttributeTypedArgument>();
 			for (int i = 0; i < args.Length; i++)
 			{
 				list.Add(new CustomAttributeTypedArgument(sig.GetParameterType(i), args[i]));
 			}
-			lazyConstructorArguments = list.AsReadOnly();
+			return list;
+		}
+
+		// 4) Pseudo Custom Attribute, .NET 1.x declarative security or result of CustomAttributeBuilder.ToData()
+		internal CustomAttributeData(Module module, ConstructorInfo constructor, List<CustomAttributeTypedArgument> constructorArgs, List<CustomAttributeNamedArgument> namedArguments)
+		{
+			this.module = module;
+			this.customAttributeIndex = -1;
+			this.declSecurityIndex = -1;
+			this.lazyConstructor = constructor;
+			lazyConstructorArguments = constructorArgs.AsReadOnly();
 			if (namedArguments == null)
 			{
 				this.lazyNamedArguments = Empty<CustomAttributeNamedArgument>.Array;
@@ -66,8 +137,12 @@ namespace IKVM.Reflection
 			}
 		}
 
+		// 3) Pre-resolved Custom Attribute
 		internal CustomAttributeData(Assembly asm, ConstructorInfo constructor, ByteReader br)
 		{
+			this.module = asm.ManifestModule;
+			this.customAttributeIndex = -1;
+			this.declSecurityIndex = -1;
 			this.lazyConstructor = constructor;
 			if (br.Length == 0)
 			{
@@ -93,11 +168,13 @@ namespace IKVM.Reflection
 			sb.Append(Constructor.DeclaringType.FullName);
 			sb.Append('(');
 			string sep = "";
-			foreach (CustomAttributeTypedArgument arg in ConstructorArguments)
+			ParameterInfo[] parameters = Constructor.GetParameters();
+			IList<CustomAttributeTypedArgument> args = ConstructorArguments;
+			for (int i = 0; i < parameters.Length; i++)
 			{
 				sb.Append(sep);
 				sep = ", ";
-				AppendValue(sb, arg);
+				AppendValue(sb, parameters[i].ParameterType, args[i]);
 			}
 			foreach (CustomAttributeNamedArgument named in NamedArguments)
 			{
@@ -105,22 +182,49 @@ namespace IKVM.Reflection
 				sep = ", ";
 				sb.Append(named.MemberInfo.Name);
 				sb.Append(" = ");
-				AppendValue(sb, named.TypedValue);
+				FieldInfo fi = named.MemberInfo as FieldInfo;
+				Type type = fi != null ? fi.FieldType : ((PropertyInfo)named.MemberInfo).PropertyType;
+				AppendValue(sb, type, named.TypedValue);
 			}
 			sb.Append(')');
 			sb.Append(']');
 			return sb.ToString();
 		}
 
-		private static void AppendValue(StringBuilder sb, CustomAttributeTypedArgument arg)
+		private static void AppendValue(StringBuilder sb, Type type, CustomAttributeTypedArgument arg)
 		{
 			if (arg.ArgumentType == arg.ArgumentType.Module.universe.System_String)
 			{
 				sb.Append('"').Append(arg.Value).Append('"');
 			}
+			else if (arg.ArgumentType.IsArray)
+			{
+				Type elementType = arg.ArgumentType.GetElementType();
+				string elementTypeName;
+				if (elementType.IsPrimitive
+					|| elementType == type.Module.universe.System_Object
+					|| elementType == type.Module.universe.System_String
+					|| elementType == type.Module.universe.System_Type)
+				{
+					elementTypeName = elementType.Name;
+				}
+				else
+				{
+					elementTypeName = elementType.FullName;
+				}
+				sb.Append("new ").Append(elementTypeName).Append("[").Append(((Array)arg.Value).Length).Append("] { ");
+				string sep = "";
+				foreach (CustomAttributeTypedArgument elem in (CustomAttributeTypedArgument[])arg.Value)
+				{
+					sb.Append(sep);
+					sep = ", ";
+					AppendValue(sb, elementType, elem);
+				}
+				sb.Append(" }");
+			}
 			else
 			{
-				if (arg.ArgumentType.IsEnum)
+				if (arg.ArgumentType != type)
 				{
 					sb.Append('(');
 					sb.Append(arg.ArgumentType.FullName);
@@ -130,9 +234,12 @@ namespace IKVM.Reflection
 			}
 		}
 
-		internal static void ReadDeclarativeSecurity(Assembly asm, List<CustomAttributeData> list, int action, ByteReader br)
+		internal static void ReadDeclarativeSecurity(Module module, int index, List<CustomAttributeData> list)
 		{
-			Universe u = asm.universe;
+			Universe u = module.universe;
+			Assembly asm = module.Assembly;
+			int action = module.DeclSecurity.records[index].Action;
+			ByteReader br = module.GetBlob(module.DeclSecurity.records[index].PermissionSet);
 			if (br.PeekByte() == '.')
 			{
 				br.ReadByte();
@@ -140,19 +247,10 @@ namespace IKVM.Reflection
 				for (int j = 0; j < count; j++)
 				{
 					Type type = ReadType(asm, br);
-					ConstructorInfo constructor;
-					if (type == u.System_Security_Permissions_HostProtectionAttribute && action == (int)System.Security.Permissions.SecurityAction.LinkDemand)
-					{
-						constructor = type.GetConstructor(BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic, null, Type.EmptyTypes, null);
-					}
-					else
-					{
-						constructor = type.GetConstructor(BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic, null, new Type[] { u.System_Security_Permissions_SecurityAction }, null);
-					}
+					ConstructorInfo constructor = type.GetPseudoCustomAttributeConstructor(u.System_Security_Permissions_SecurityAction);
 					// LAMESPEC there is an additional length here (probably of the named argument list)
-					ByteReader slice = br.Slice(br.ReadCompressedInt());
-					// LAMESPEC the count of named arguments is a compressed integer (instead of UInt16 as NumNamed in custom attributes)
-					list.Add(new CustomAttributeData(constructor, action, ReadNamedArguments(asm, slice, slice.ReadCompressedInt(), type)));
+					byte[] blob = br.ReadBytes(br.ReadCompressedInt());
+					list.Add(new CustomAttributeData(asm, constructor, action, blob, index));
 				}
 			}
 			else
@@ -164,22 +262,26 @@ namespace IKVM.Reflection
 					buf[i] = br.ReadChar();
 				}
 				string xml = new String(buf);
-				ConstructorInfo constructor = u.System_Security_Permissions_PermissionSetAttribute.GetConstructor(new Type[] { u.System_Security_Permissions_SecurityAction });
+				ConstructorInfo constructor = u.System_Security_Permissions_PermissionSetAttribute.GetPseudoCustomAttributeConstructor(u.System_Security_Permissions_SecurityAction);
 				List<CustomAttributeNamedArgument> args = new List<CustomAttributeNamedArgument>();
-				args.Add(new CustomAttributeNamedArgument(u.System_Security_Permissions_PermissionSetAttribute.GetProperty("XML"),
+				args.Add(new CustomAttributeNamedArgument(GetProperty(u.System_Security_Permissions_PermissionSetAttribute, "XML", u.System_String),
 					new CustomAttributeTypedArgument(u.System_String, xml)));
-				list.Add(new CustomAttributeData(constructor, action, args));
+				list.Add(new CustomAttributeData(asm.ManifestModule, constructor, new object[] { action }, args));
 			}
 		}
 
-		private CustomAttributeData(ConstructorInfo constructor, int securityAction, IList<CustomAttributeNamedArgument> namedArguments)
+		// 5) Unresolved declarative security
+		internal CustomAttributeData(Assembly asm, ConstructorInfo constructor, int securityAction, byte[] blob, int index)
 		{
+			this.module = asm.ManifestModule;
+			this.customAttributeIndex = -1;
+			this.declSecurityIndex = index;
 			Universe u = constructor.Module.universe;
 			this.lazyConstructor = constructor;
 			List<CustomAttributeTypedArgument> list = new List<CustomAttributeTypedArgument>();
 			list.Add(new CustomAttributeTypedArgument(u.System_Security_Permissions_SecurityAction, securityAction));
 			this.lazyConstructorArguments =  list.AsReadOnly();
-			this.lazyNamedArguments = namedArguments;
+			this.declSecurityBlob = blob;
 		}
 
 		private static Type ReadFieldOrPropType(Assembly asm, ByteReader br)
@@ -222,7 +324,7 @@ namespace IKVM.Reflection
 				case 0x51:
 					return u.System_Object;
 				default:
-					throw new InvalidOperationException();
+					throw new BadImageFormatException();
 			}
 		}
 
@@ -233,6 +335,54 @@ namespace IKVM.Reflection
 			{
 				return new CustomAttributeTypedArgument(type, br.ReadString());
 			}
+			else if (type == u.System_Boolean)
+			{
+				return new CustomAttributeTypedArgument(type, br.ReadByte() != 0);
+			}
+			else if (type == u.System_Char)
+			{
+				return new CustomAttributeTypedArgument(type, br.ReadChar());
+			}
+			else if (type == u.System_Single)
+			{
+				return new CustomAttributeTypedArgument(type, br.ReadSingle());
+			}
+			else if (type == u.System_Double)
+			{
+				return new CustomAttributeTypedArgument(type, br.ReadDouble());
+			}
+			else if (type == u.System_SByte)
+			{
+				return new CustomAttributeTypedArgument(type, br.ReadSByte());
+			}
+			else if (type == u.System_Int16)
+			{
+				return new CustomAttributeTypedArgument(type, br.ReadInt16());
+			}
+			else if (type == u.System_Int32)
+			{
+				return new CustomAttributeTypedArgument(type, br.ReadInt32());
+			}
+			else if (type == u.System_Int64)
+			{
+				return new CustomAttributeTypedArgument(type, br.ReadInt64());
+			}
+			else if (type == u.System_Byte)
+			{
+				return new CustomAttributeTypedArgument(type, br.ReadByte());
+			}
+			else if (type == u.System_UInt16)
+			{
+				return new CustomAttributeTypedArgument(type, br.ReadUInt16());
+			}
+			else if (type == u.System_UInt32)
+			{
+				return new CustomAttributeTypedArgument(type, br.ReadUInt32());
+			}
+			else if (type == u.System_UInt64)
+			{
+				return new CustomAttributeTypedArgument(type, br.ReadUInt64());
+			}
 			else if (type == u.System_Type)
 			{
 				return new CustomAttributeTypedArgument(type, ReadType(asm, br));
@@ -262,35 +412,7 @@ namespace IKVM.Reflection
 			}
 			else
 			{
-				switch (Type.GetTypeCode(type))
-				{
-					case TypeCode.Boolean:
-						return new CustomAttributeTypedArgument(type, br.ReadByte() != 0);
-					case TypeCode.Char:
-						return new CustomAttributeTypedArgument(type, br.ReadChar());
-					case TypeCode.Single:
-						return new CustomAttributeTypedArgument(type, br.ReadSingle());
-					case TypeCode.Double:
-						return new CustomAttributeTypedArgument(type, br.ReadDouble());
-					case TypeCode.SByte:
-						return new CustomAttributeTypedArgument(type, br.ReadSByte());
-					case TypeCode.Int16:
-						return new CustomAttributeTypedArgument(type, br.ReadInt16());
-					case TypeCode.Int32:
-						return new CustomAttributeTypedArgument(type, br.ReadInt32());
-					case TypeCode.Int64:
-						return new CustomAttributeTypedArgument(type, br.ReadInt64());
-					case TypeCode.Byte:
-						return new CustomAttributeTypedArgument(type, br.ReadByte());
-					case TypeCode.UInt16:
-						return new CustomAttributeTypedArgument(type, br.ReadUInt16());
-					case TypeCode.UInt32:
-						return new CustomAttributeTypedArgument(type, br.ReadUInt32());
-					case TypeCode.UInt64:
-						return new CustomAttributeTypedArgument(type, br.ReadUInt64());
-					default:
-						throw new InvalidOperationException();
-				}
+				throw new InvalidOperationException();
 			}
 		}
 
@@ -306,7 +428,7 @@ namespace IKVM.Reflection
 				// there are broken compilers that emit an extra NUL character after the type name
 				typeName = typeName.Substring(0, typeName.Length - 1);
 			}
-			return asm.universe.GetType(asm, typeName, true);
+			return TypeNameParser.Parse(typeName, true).GetType(asm.universe, asm, true, typeName, true);
 		}
 
 		private static IList<CustomAttributeTypedArgument> ReadConstructorArguments(Assembly asm, ByteReader br, ConstructorInfo constructor)
@@ -334,26 +456,23 @@ namespace IKVM.Reflection
 				switch (fieldOrProperty)
 				{
 					case 0x53:
-						member = GetField(type, name);
+						member = GetField(type, name, fieldOrPropertyType);
 						break;
 					case 0x54:
-						member = GetProperty(type, name);
+						member = GetProperty(type, name, fieldOrPropertyType);
 						break;
 					default:
 						throw new BadImageFormatException();
 				}
-				if (member == null)
-				{
-					throw new BadImageFormatException();
-				}
 				list.Add(new CustomAttributeNamedArgument(member, value));
 			}
 			return list.AsReadOnly();
 		}
 
-		private static FieldInfo GetField(Type type, string name)
+		private static FieldInfo GetField(Type type, string name, Type fieldType)
 		{
-			for (; type != null; type = type.BaseType)
+			Type org = type;
+			for (; type != null && !type.__IsMissing; type = type.BaseType)
 			{
 				foreach (FieldInfo field in type.__GetDeclaredFields())
 				{
@@ -363,12 +482,20 @@ namespace IKVM.Reflection
 					}
 				}
 			}
-			return null;
+			// if the field is missing, we stick the missing field on the first missing base type
+			if (type == null)
+			{
+				type = org;
+			}
+			FieldSignature sig = FieldSignature.Create(fieldType, new CustomModifiers());
+			return type.FindField(name, sig)
+				?? type.Module.universe.GetMissingFieldOrThrow(type, name, sig);
 		}
 
-		private static PropertyInfo GetProperty(Type type, string name)
+		private static PropertyInfo GetProperty(Type type, string name, Type propertyType)
 		{
-			for (; type != null; type = type.BaseType)
+			Type org = type;
+			for (; type != null && !type.__IsMissing; type = type.BaseType)
 			{
 				foreach (PropertyInfo property in type.__GetDeclaredProperties())
 				{
@@ -378,34 +505,54 @@ namespace IKVM.Reflection
 					}
 				}
 			}
-			return null;
+			// if the property is missing, we stick the missing property on the first missing base type
+			if (type == null)
+			{
+				type = org;
+			}
+			return type.Module.universe.GetMissingPropertyOrThrow(type, name, PropertySignature.Create(CallingConventions.Standard | CallingConventions.HasThis, propertyType, null, new PackedCustomModifiers()));
 		}
 
-		public void __ReadTypeName(out string ns, out string name)
+		[Obsolete("Use Constructor.DeclaringType instead.")]
+		internal bool __TryReadTypeName(out string ns, out string name)
 		{
-			if (lazyConstructor == null)
+			if (Constructor.DeclaringType.IsNested)
 			{
-				ModuleReader mod = module as ModuleReader;
-				if (mod != null)
-				{
-					int methodToken = mod.CustomAttribute.records[index].Type;
-					if ((methodToken >> 24) == MemberRefTable.Index)
-					{
-						int methodIndex = (methodToken & 0xFFFFFF) - 1;
-						int typeToken = mod.MemberRef.records[methodIndex].Class;
-						if ((typeToken >> 24) == TypeRefTable.Index)
-						{
-							int typeIndex = (typeToken & 0xFFFFFF) - 1;
-							int typeNameSpace = mod.TypeRef.records[typeIndex].TypeNameSpace;
-							ns = typeNameSpace == 0 ? null : mod.GetString(typeNameSpace);
-							name = mod.GetString(mod.TypeRef.records[typeIndex].TypeName);
-							return;
-						}
-					}
-				}
+				ns = null;
+				name = null;
+				return false;
+			}
+			ns = Constructor.DeclaringType.__Namespace;
+			name = Constructor.DeclaringType.__Name;
+			return true;
+		}
+
+		public byte[] __GetBlob()
+		{
+			if (declSecurityBlob != null)
+			{
+				return (byte[])declSecurityBlob.Clone();
+			}
+			else if (customAttributeIndex == -1)
+			{
+				return __ToBuilder().GetBlob(module.Assembly);
+			}
+			else
+			{
+				return ((ModuleReader)module).GetBlobCopy(module.CustomAttribute.records[customAttributeIndex].Value);
+			}
+		}
+
+		public int __Parent
+		{
+			get
+			{
+				return customAttributeIndex >= 0
+					? module.CustomAttribute.records[customAttributeIndex].Parent
+					: declSecurityIndex >= 0
+						? module.DeclSecurity.records[declSecurityIndex].Parent
+						: 0;
 			}
-			ns = Constructor.DeclaringType.Namespace;
-			name = Constructor.DeclaringType.Name;
 		}
 
 		public ConstructorInfo Constructor
@@ -414,7 +561,7 @@ namespace IKVM.Reflection
 			{
 				if (lazyConstructor == null)
 				{
-					lazyConstructor = (ConstructorInfo)module.ResolveMethod(module.CustomAttribute.records[index].Type);
+					lazyConstructor = (ConstructorInfo)module.ResolveMethod(module.CustomAttribute.records[customAttributeIndex].Type);
 				}
 				return lazyConstructor;
 			}
@@ -438,7 +585,18 @@ namespace IKVM.Reflection
 			{
 				if (lazyNamedArguments == null)
 				{
-					LazyParseArguments();
+					if (customAttributeIndex >= 0)
+					{
+						// 1) Unresolved Custom Attribute
+						LazyParseArguments();
+					}
+					else
+					{
+						// 5) Unresolved declarative security
+						ByteReader br = new ByteReader(declSecurityBlob, 0, declSecurityBlob.Length);
+						// LAMESPEC the count of named arguments is a compressed integer (instead of UInt16 as NumNamed in custom attributes)
+						lazyNamedArguments = ReadNamedArguments(module.Assembly, br, br.ReadCompressedInt(), Constructor.DeclaringType);
+					}
 				}
 				return lazyNamedArguments;
 			}
@@ -446,7 +604,7 @@ namespace IKVM.Reflection
 
 		private void LazyParseArguments()
 		{
-			ByteReader br = module.GetBlob(module.CustomAttribute.records[index].Value);
+			ByteReader br = module.GetBlob(module.CustomAttribute.records[customAttributeIndex].Value);
 			if (br.Length == 0)
 			{
 				// it's legal to have an empty blob
@@ -466,10 +624,11 @@ namespace IKVM.Reflection
 
 		public CustomAttributeBuilder __ToBuilder()
 		{
+			ParameterInfo[] parameters = Constructor.GetParameters();
 			object[] args = new object[ConstructorArguments.Count];
 			for (int i = 0; i < args.Length; i++)
 			{
-				args[i] = ConstructorArguments[i].Value;
+				args[i] = RewrapArray(parameters[i].ParameterType, ConstructorArguments[i]);
 			}
 			List<PropertyInfo> namedProperties = new List<PropertyInfo>();
 			List<object> propertyValues = new List<object>();
@@ -477,20 +636,45 @@ namespace IKVM.Reflection
 			List<object> fieldValues = new List<object>();
 			foreach (CustomAttributeNamedArgument named in NamedArguments)
 			{
-				if (named.MemberInfo is PropertyInfo)
+				PropertyInfo pi = named.MemberInfo as PropertyInfo;
+				if (pi != null)
 				{
-					namedProperties.Add((PropertyInfo)named.MemberInfo);
-					propertyValues.Add(named.TypedValue.Value);
+					namedProperties.Add(pi);
+					propertyValues.Add(RewrapArray(pi.PropertyType, named.TypedValue));
 				}
 				else
 				{
-					namedFields.Add((FieldInfo)named.MemberInfo);
-					fieldValues.Add(named.TypedValue.Value);
+					FieldInfo fi = (FieldInfo)named.MemberInfo;
+					namedFields.Add(fi);
+					fieldValues.Add(RewrapArray(fi.FieldType, named.TypedValue));
 				}
 			}
 			return new CustomAttributeBuilder(Constructor, args, namedProperties.ToArray(), propertyValues.ToArray(), namedFields.ToArray(), fieldValues.ToArray());
 		}
 
+		private static object RewrapArray(Type type, CustomAttributeTypedArgument arg)
+		{
+			IList<CustomAttributeTypedArgument> list = arg.Value as IList<CustomAttributeTypedArgument>;
+			if (list != null)
+			{
+				Type elementType = arg.ArgumentType.GetElementType();
+				object[] arr = new object[list.Count];
+				for (int i = 0; i < arr.Length; i++)
+				{
+					arr[i] = RewrapArray(elementType, list[i]);
+				}
+				if (type == type.Module.universe.System_Object)
+				{
+					return CustomAttributeBuilder.__MakeTypedArgument(arg.ArgumentType, arr);
+				}
+				return arr;
+			}
+			else
+			{
+				return arg.Value;
+			}
+		}
+
 		public static IList<CustomAttributeData> GetCustomAttributes(MemberInfo member)
 		{
 			return member.GetCustomAttributesData(null);
@@ -563,8 +747,17 @@ namespace IKVM.Reflection
 			}
 		}
 
+		public static IList<CustomAttributeData> __GetCustomAttributes(Type type, Type interfaceType, Type attributeType, bool inherit)
+		{
+			return type.GetInterfaceImplCustomAttributes(interfaceType, attributeType);
+		}
+
 		public static IList<CustomAttributeData> __GetDeclarativeSecurity(Assembly assembly)
 		{
+			if (assembly.__IsMissing)
+			{
+				throw new MissingAssemblyException((MissingAssembly)assembly);
+			}
 			return assembly.ManifestModule.GetDeclarativeSecurity(0x20000001);
 		}
 
diff --git a/mcs/class/IKVM.Reflection/CustomModifiers.cs b/mcs/class/IKVM.Reflection/CustomModifiers.cs
new file mode 100644
index 0000000..499a120
--- /dev/null
+++ b/mcs/class/IKVM.Reflection/CustomModifiers.cs
@@ -0,0 +1,352 @@
+/*
+  Copyright (C) 2011 Jeroen Frijters
+
+  This software is provided 'as-is', without any express or implied
+  warranty.  In no event will the authors be held liable for any damages
+  arising from the use of this software.
+
+  Permission is granted to anyone to use this software for any purpose,
+  including commercial applications, and to alter it and redistribute it
+  freely, subject to the following restrictions:
+
+  1. The origin of this software must not be misrepresented; you must not
+     claim that you wrote the original software. If you use this software
+     in a product, an acknowledgment in the product documentation would be
+     appreciated but is not required.
+  2. Altered source versions must be plainly marked as such, and must not be
+     misrepresented as being the original software.
+  3. This notice may not be removed or altered from any source distribution.
+
+  Jeroen Frijters
+  jeroen at frijters.net
+  
+*/
+using System;
+using System.Collections.Generic;
+using System.Diagnostics;
+using System.Text;
+using IKVM.Reflection.Emit;
+using IKVM.Reflection.Reader;
+
+namespace IKVM.Reflection
+{
+	public struct CustomModifiers : IEquatable<CustomModifiers>, IEnumerable<CustomModifiers.Entry>
+	{
+		private static readonly Type ModOpt = new MarkerType();
+		private static readonly Type ModReq = new MarkerType();
+		private static readonly Type Initial = ModOpt;
+		private readonly Type[] types;
+
+		internal CustomModifiers(List<CustomModifiersBuilder.Item> list)
+		{
+			bool required = Initial == ModReq;
+			int count = list.Count;
+			foreach (CustomModifiersBuilder.Item item in list)
+			{
+				if (item.required != required)
+				{
+					required = item.required;
+					count++;
+				}
+			}
+			types = new Type[count];
+			required = Initial == ModReq;
+			int index = 0;
+			foreach (CustomModifiersBuilder.Item item in list)
+			{
+				if (item.required != required)
+				{
+					required = item.required;
+					types[index++] = required ? ModReq : ModOpt;
+				}
+				types[index++] = item.type;
+			}
+		}
+
+		private CustomModifiers(Type[] types)
+		{
+			Debug.Assert(types == null || types.Length != 0);
+			this.types = types;
+		}
+
+		public struct Enumerator : IEnumerator<Entry>
+		{
+			private readonly Type[] types;
+			private int index;
+			private bool required;
+
+			internal Enumerator(Type[] types)
+			{
+				this.types = types;
+				this.index = -1;
+				this.required = Initial == ModReq;
+			}
+
+			void System.Collections.IEnumerator.Reset()
+			{
+				this.index = -1;
+				this.required = Initial == ModReq;
+			}
+
+			public Entry Current
+			{
+				get { return new Entry(types[index], required); }
+			}
+
+			public bool MoveNext()
+			{
+				if (types == null || index == types.Length)
+				{
+					return false;
+				}
+				index++;
+				if (index == types.Length)
+				{
+					return false;
+				}
+				else if (types[index] == ModOpt)
+				{
+					required = false;
+					index++;
+				}
+				else if (types[index] == ModReq)
+				{
+					required = true;
+					index++;
+				}
+				return true;
+			}
+
+			object System.Collections.IEnumerator.Current
+			{
+				get { return Current; }
+			}
+
+			void IDisposable.Dispose()
+			{
+			}
+		}
+
+		public struct Entry
+		{
+			private readonly Type type;
+			private readonly bool required;
+
+			internal Entry(Type type, bool required)
+			{
+				this.type = type;
+				this.required = required;
+			}
+
+			public Type Type
+			{
+				get { return type; }
+			}
+
+			public bool IsRequired
+			{
+				get { return required; }
+			}
+		}
+
+		public Enumerator GetEnumerator()
+		{
+			return new Enumerator(types);
+		}
+
+		IEnumerator<Entry> IEnumerable<Entry>.GetEnumerator()
+		{
+			return GetEnumerator();
+		}
+
+		System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator()
+		{
+			return GetEnumerator();
+		}
+
+		public bool IsEmpty
+		{
+			get { return types == null; }
+		}
+
+		public bool Equals(CustomModifiers other)
+		{
+			return Util.ArrayEquals(types, other.types);
+		}
+
+		public override bool Equals(object obj)
+		{
+			CustomModifiers? other = obj as CustomModifiers?;
+			return other != null && Equals(other.Value);
+		}
+
+		public override int GetHashCode()
+		{
+			return Util.GetHashCode(types);
+		}
+
+		public override string ToString()
+		{
+			if (types == null)
+			{
+				return string.Empty;
+			}
+			StringBuilder sb = new StringBuilder();
+			string sep = "";
+			foreach (Entry e in this)
+			{
+				sb.Append(sep).Append(e.IsRequired ? "modreq(" : "modopt(").Append(e.Type.FullName).Append(')');
+				sep = " ";
+			}
+			return sb.ToString();
+		}
+
+		private Type[] GetRequiredOrOptional(bool required)
+		{
+			if (types == null)
+			{
+				return Type.EmptyTypes;
+			}
+			int count = 0;
+			foreach (Entry e in this)
+			{
+				if (e.IsRequired == required)
+				{
+					count++;
+				}
+			}
+			Type[] result = new Type[count];
+			foreach (Entry e in this)
+			{
+				if (e.IsRequired == required)
+				{
+					// FXBUG reflection (and ildasm) return custom modifiers in reverse order
+					// while SRE writes them in the specified order
+					result[--count] = e.Type;
+				}
+			}
+			return result;
+		}
+
+		internal Type[] GetRequired()
+		{
+			return GetRequiredOrOptional(true);
+		}
+
+		internal Type[] GetOptional()
+		{
+			return GetRequiredOrOptional(false);
+		}
+
+		internal CustomModifiers Bind(IGenericBinder binder)
+		{
+			if (types == null)
+			{
+				return this;
+			}
+			Type[] result = types;
+			for (int i = 0; i < types.Length; i++)
+			{
+				if (types[i] == ModOpt || types[i] == ModReq)
+				{
+					continue;
+				}
+				Type type = types[i].BindTypeParameters(binder);
+				if (!ReferenceEquals(type, types[i]))
+				{
+					if (result == types)
+					{
+						result = (Type[])types.Clone();
+					}
+					result[i] = type;
+				}
+			}
+			return new CustomModifiers(result);
+		}
+
+		internal static CustomModifiers Read(ModuleReader module, ByteReader br, IGenericContext context)
+		{
+			byte b = br.PeekByte();
+			if (!IsCustomModifier(b))
+			{
+				return new CustomModifiers();
+			}
+			List<Type> list = new List<Type>();
+			Type mode = Initial;
+			do
+			{
+				Type cmod = br.ReadByte() == Signature.ELEMENT_TYPE_CMOD_REQD ? ModReq : ModOpt;
+				if (mode != cmod)
+				{
+					mode = cmod;
+					list.Add(mode);
+				}
+				list.Add(Signature.ReadTypeDefOrRefEncoded(module, br, context));
+				b = br.PeekByte();
+			}
+			while (IsCustomModifier(b));
+			return new CustomModifiers(list.ToArray());
+		}
+
+		internal static void Skip(ByteReader br)
+		{
+			byte b = br.PeekByte();
+			while (IsCustomModifier(b))
+			{
+				br.ReadByte();
+				br.ReadCompressedInt();
+				b = br.PeekByte();
+			}
+		}
+
+		internal static CustomModifiers FromReqOpt(Type[] req, Type[] opt)
+		{
+			List<Type> list = null;
+			if (opt != null && opt.Length != 0)
+			{
+				list = new List<Type>(opt);
+			}
+			if (req != null && req.Length != 0)
+			{
+				if (list == null)
+				{
+					list = new List<Type>();
+				}
+				list.Add(ModReq);
+				list.AddRange(req);
+			}
+			if (list == null)
+			{
+				return new CustomModifiers();
+			}
+			else
+			{
+				return new CustomModifiers(list.ToArray());
+			}
+		}
+
+		private static bool IsCustomModifier(byte b)
+		{
+			return b == Signature.ELEMENT_TYPE_CMOD_OPT || b == Signature.ELEMENT_TYPE_CMOD_REQD;
+		}
+
+		internal static CustomModifiers Combine(CustomModifiers mods1, CustomModifiers mods2)
+		{
+			if (mods1.IsEmpty)
+			{
+				return mods2;
+			}
+			else if (mods2.IsEmpty)
+			{
+				return mods1;
+			}
+			else
+			{
+				Type[] combo = new Type[mods1.types.Length + mods2.types.Length];
+				Array.Copy(mods1.types, combo, mods1.types.Length);
+				Array.Copy(mods2.types, 0, combo, mods1.types.Length, mods2.types.Length);
+				return new CustomModifiers(combo);
+			}
+		}
+	}
+}
diff --git a/mcs/class/IKVM.Reflection/Emit/AssemblyBuilder.cs b/mcs/class/IKVM.Reflection/Emit/AssemblyBuilder.cs
index 9919fd3..a573f5f 100644
--- a/mcs/class/IKVM.Reflection/Emit/AssemblyBuilder.cs
+++ b/mcs/class/IKVM.Reflection/Emit/AssemblyBuilder.cs
@@ -1,5 +1,5 @@
 /*
-  Copyright (C) 2008-2010 Jeroen Frijters
+  Copyright (C) 2008-2011 Jeroen Frijters
 
   This software is provided 'as-is', without any express or implied
   warranty.  In no event will the authors be held liable for any damages
@@ -77,11 +77,11 @@ namespace IKVM.Reflection.Emit
 		{
 			this.name = name.Name;
 			SetVersionHelper(name.Version);
-			if (name.CultureInfo != null && !string.IsNullOrEmpty(name.CultureInfo.Name))
+			if (!string.IsNullOrEmpty(name.Culture))
 			{
-				this.culture = name.CultureInfo.Name;
+				this.culture = name.Culture;
 			}
-			this.flags = name.Flags;
+			this.flags = name.RawFlags;
 			this.hashAlgorithm = name.HashAlgorithm;
 			if (this.hashAlgorithm == AssemblyHashAlgorithm.None)
 			{
@@ -104,7 +104,7 @@ namespace IKVM.Reflection.Emit
 			this.requiredPermissions = requiredPermissions;
 			this.optionalPermissions = optionalPermissions;
 			this.refusedPermissions = refusedPermissions;
-			if (universe.HasMscorlib && universe.Mscorlib.ImageRuntimeVersion != null)
+			if (universe.HasMscorlib && !universe.Mscorlib.__IsMissing && universe.Mscorlib.ImageRuntimeVersion != null)
 			{
 				this.imageRuntimeVersion = universe.Mscorlib.ImageRuntimeVersion;
 			}
@@ -132,18 +132,24 @@ namespace IKVM.Reflection.Emit
 			}
 		}
 
+		private void Rename(AssemblyName oldName)
+		{
+			this.fullName = null;
+			universe.RenameAssembly(this, oldName);
+		}
+
 		public void __SetAssemblyVersion(Version version)
 		{
 			AssemblyName oldName = GetName();
 			SetVersionHelper(version);
-			universe.RenameAssembly(this, oldName);
+			Rename(oldName);
 		}
 
 		public void __SetAssemblyCulture(string cultureName)
 		{
 			AssemblyName oldName = GetName();
 			this.culture = cultureName;
-			universe.RenameAssembly(this, oldName);
+			Rename(oldName);
 		}
 
 		public void __SetAssemblyKeyPair(StrongNameKeyPair keyPair)
@@ -154,7 +160,7 @@ namespace IKVM.Reflection.Emit
 			{
 				this.publicKey = keyPair.PublicKey;
 			}
-			universe.RenameAssembly(this, oldName);
+			Rename(oldName);
 		}
 
 		// this is used in combination with delay signing
@@ -162,7 +168,7 @@ namespace IKVM.Reflection.Emit
 		{
 			AssemblyName oldName = GetName();
 			this.publicKey = publicKey == null ? null : (byte[])publicKey.Clone();
-			universe.RenameAssembly(this, oldName);
+			Rename(oldName);
 		}
 
 		public void __SetAssemblyAlgorithmId(AssemblyHashAlgorithm hashAlgorithm)
@@ -172,7 +178,19 @@ namespace IKVM.Reflection.Emit
 
 		public void __SetAssemblyFlags(AssemblyNameFlags flags)
 		{
+			AssemblyName oldName = GetName();
 			this.flags = flags;
+			Rename(oldName);
+		}
+
+		public override AssemblyNameFlags __AssemblyFlags
+		{
+			get { return flags; }
+		}
+
+		internal string Name
+		{
+			get { return name; }
 		}
 
 		public override AssemblyName GetName()
@@ -180,19 +198,14 @@ namespace IKVM.Reflection.Emit
 			AssemblyName n = new AssemblyName();
 			n.Name = name;
 			n.Version = new Version(majorVersion, minorVersion, buildVersion, revisionVersion);
-			n.Culture = culture;
+			n.Culture = culture ?? "";
 			n.HashAlgorithm = hashAlgorithm;
-			n.Flags = flags;
+			n.RawFlags = flags;
 			n.SetPublicKey(publicKey != null ? (byte[])publicKey.Clone() : Empty<byte>.Array);
 			n.KeyPair = keyPair;
 			return n;
 		}
 
-		public override string FullName
-		{
-			get { return GetName().FullName; }
-		}
-
 		public override string Location
 		{
 			get { throw new NotSupportedException(); }
@@ -253,6 +266,19 @@ namespace IKVM.Reflection.Emit
 			this.fileKind = fileKind;
 		}
 
+		public void __Save(Stream stream, PortableExecutableKinds portableExecutableKind, ImageFileMachine imageFileMachine)
+		{
+			if (!stream.CanRead || !stream.CanWrite || !stream.CanSeek || stream.Position != 0)
+			{
+				throw new ArgumentException("Stream must support read/write/seek and current position must be zero.", "stream");
+			}
+			if (modules.Count != 1)
+			{
+				throw new NotSupportedException("Saving to a stream is only supported for single module assemblies.");
+			}
+			SaveImpl(modules[0].fileName, stream, portableExecutableKind, imageFileMachine);
+		}
+
 		public void Save(string assemblyFileName)
 		{
 			Save(assemblyFileName, PortableExecutableKinds.ILOnly, ImageFileMachine.I386);
@@ -260,6 +286,11 @@ namespace IKVM.Reflection.Emit
 
 		public void Save(string assemblyFileName, PortableExecutableKinds portableExecutableKind, ImageFileMachine imageFileMachine)
 		{
+			SaveImpl(assemblyFileName, null, portableExecutableKind, imageFileMachine);
+		}
+
+		private void SaveImpl(string assemblyFileName, Stream streamOrNull, PortableExecutableKinds portableExecutableKind, ImageFileMachine imageFileMachine)
+		{
 			ModuleBuilder manifestModule = null;
 
 			foreach (ModuleBuilder moduleBuilder in modules)
@@ -398,7 +429,7 @@ namespace IKVM.Reflection.Emit
 			}
 
 			// finally, write the manifest module
-			ModuleWriter.WriteModule(keyPair, publicKey, manifestModule, fileKind, portableExecutableKind, imageFileMachine, unmanagedResources ?? manifestModule.unmanagedResources, entryPointToken);
+			ModuleWriter.WriteModule(keyPair, publicKey, manifestModule, fileKind, portableExecutableKind, imageFileMachine, unmanagedResources ?? manifestModule.unmanagedResources, entryPointToken, streamOrNull);
 		}
 
 		private int AddFile(ModuleBuilder manifestModule, string fileName, int flags)
@@ -417,11 +448,7 @@ namespace IKVM.Reflection.Emit
 					ModuleWriter.HashChunk(fs, cs, buf, (int)fs.Length);
 				}
 			}
-			FileTable.Record file = new FileTable.Record();
-			file.Flags = flags;
-			file.Name = manifestModule.Strings.Add(Path.GetFileName(fileName));
-			file.HashValue = manifestModule.Blobs.Add(ByteBuffer.Wrap(hash.Hash));
-			return 0x26000000 + manifestModule.File.AddRecord(file);
+			return manifestModule.__AddModule(flags, Path.GetFileName(fileName), hash.Hash);
 		}
 
 		public void AddResourceFile(string name, string fileName)
@@ -489,11 +516,11 @@ namespace IKVM.Reflection.Emit
 			return list.ToArray();
 		}
 
-		internal override Type GetTypeImpl(string typeName)
+		internal override Type FindType(TypeName typeName)
 		{
 			foreach (ModuleBuilder mb in modules)
 			{
-				Type type = mb.GetTypeImpl(typeName);
+				Type type = mb.FindType(typeName);
 				if (type != null)
 				{
 					return type;
@@ -501,7 +528,7 @@ namespace IKVM.Reflection.Emit
 			}
 			foreach (Module module in addedModules)
 			{
-				Type type = module.GetTypeImpl(typeName);
+				Type type = module.FindType(typeName);
 				if (type != null)
 				{
 					return type;
@@ -623,7 +650,7 @@ namespace IKVM.Reflection.Emit
 		}
 	}
 
-	sealed class ManifestModule : Module
+	sealed class ManifestModule : NonPEModule
 	{
 		private readonly AssemblyBuilder assembly;
 		private readonly Guid guid = Guid.NewGuid();
@@ -644,7 +671,7 @@ namespace IKVM.Reflection.Emit
 			get { return assembly; }
 		}
 
-		internal override Type GetTypeImpl(string typeName)
+		internal override Type FindType(TypeName typeName)
 		{
 			return null;
 		}
@@ -668,54 +695,14 @@ namespace IKVM.Reflection.Emit
 			get { return guid; }
 		}
 
-		public override Type ResolveType(int metadataToken, Type[] genericTypeArguments, Type[] genericMethodArguments)
-		{
-			throw new ArgumentException();
-		}
-
-		public override MethodBase ResolveMethod(int metadataToken, Type[] genericTypeArguments, Type[] genericMethodArguments)
-		{
-			throw new ArgumentException();
-		}
-
-		public override FieldInfo ResolveField(int metadataToken, Type[] genericTypeArguments, Type[] genericMethodArguments)
-		{
-			throw new ArgumentException();
-		}
-
-		public override MemberInfo ResolveMember(int metadataToken, Type[] genericTypeArguments, Type[] genericMethodArguments)
-		{
-			throw new ArgumentException();
-		}
-
-		public override string ResolveString(int metadataToken)
-		{
-			throw new ArgumentException();
-		}
-
-		public override Type[] __ResolveOptionalParameterTypes(int metadataToken)
-		{
-			throw new ArgumentException();
-		}
-
 		public override string ScopeName
 		{
 			get { return "RefEmit_InMemoryManifestModule"; }
 		}
 
-		public override AssemblyName[] __GetReferencedAssemblies()
-		{
-			throw new InvalidOperationException();
-		}
-
-		internal override Type GetModuleType()
-		{
-			throw new InvalidOperationException();
-		}
-
-		internal override IKVM.Reflection.Reader.ByteReader GetBlob(int blobIndex)
+		protected override Exception NotSupportedException()
 		{
-			throw new InvalidOperationException();
+			return new InvalidOperationException();
 		}
 	}
 }
diff --git a/mcs/class/IKVM.Reflection/Emit/ConstructorBuilder.cs b/mcs/class/IKVM.Reflection/Emit/ConstructorBuilder.cs
index 9ffc918..3ce26b0 100644
--- a/mcs/class/IKVM.Reflection/Emit/ConstructorBuilder.cs
+++ b/mcs/class/IKVM.Reflection/Emit/ConstructorBuilder.cs
@@ -1,5 +1,5 @@
 /*
-  Copyright (C) 2008 Jeroen Frijters
+  Copyright (C) 2008-2011 Jeroen Frijters
 
   This software is provided 'as-is', without any express or implied
   warranty.  In no event will the authors be held liable for any damages
@@ -45,6 +45,17 @@ namespace IKVM.Reflection.Emit
 			return methodBuilder.GetHashCode();
 		}
 
+		public void __SetSignature(Type returnType, CustomModifiers returnTypeCustomModifiers, Type[] parameterTypes, CustomModifiers[] parameterTypeCustomModifiers)
+		{
+			methodBuilder.__SetSignature(returnType, returnTypeCustomModifiers, parameterTypes, parameterTypeCustomModifiers);
+		}
+
+		[Obsolete("Please use __SetSignature(Type, CustomModifiers, Type[], CustomModifiers[]) instead.")]
+		public void __SetSignature(Type returnType, Type[] returnTypeRequiredCustomModifiers, Type[] returnTypeOptionalCustomModifiers, Type[] parameterTypes, Type[][] parameterTypeRequiredCustomModifiers, Type[][] parameterTypeOptionalCustomModifiers)
+		{
+			methodBuilder.SetSignature(returnType, returnTypeRequiredCustomModifiers, returnTypeOptionalCustomModifiers, parameterTypes, parameterTypeRequiredCustomModifiers, parameterTypeOptionalCustomModifiers);
+		}
+
 		public ParameterBuilder DefineParameter(int position, ParameterAttributes attributes, string strParamName)
 		{
 			return methodBuilder.DefineParameter(position, attributes, strParamName);
@@ -85,6 +96,11 @@ namespace IKVM.Reflection.Emit
 			return methodBuilder.GetILGenerator(streamSize);
 		}
 
+		public void __ReleaseILGenerator()
+		{
+			methodBuilder.__ReleaseILGenerator();
+		}
+
 		public override CallingConventions CallingConvention
 		{
 			get { return methodBuilder.CallingConvention; }
diff --git a/mcs/class/IKVM.Reflection/Emit/CustomAttributeBuilder.cs b/mcs/class/IKVM.Reflection/Emit/CustomAttributeBuilder.cs
index e4fcff2..0571578 100644
--- a/mcs/class/IKVM.Reflection/Emit/CustomAttributeBuilder.cs
+++ b/mcs/class/IKVM.Reflection/Emit/CustomAttributeBuilder.cs
@@ -1,5 +1,5 @@
 /*
-  Copyright (C) 2008 Jeroen Frijters
+  Copyright (C) 2008-2011 Jeroen Frijters
 
   This software is provided 'as-is', without any express or implied
   warranty.  In no event will the authors be held liable for any damages
@@ -25,6 +25,7 @@ using System;
 using System.IO;
 using System.Collections.Generic;
 using System.Diagnostics;
+using System.Text;
 using IKVM.Reflection.Writer;
 
 namespace IKVM.Reflection.Emit
@@ -45,6 +46,13 @@ namespace IKVM.Reflection.Emit
 			this.blob = blob;
 		}
 
+		private CustomAttributeBuilder(ConstructorInfo con, int securityAction, byte[] blob)
+		{
+			this.con = con;
+			this.blob = blob;
+			this.constructorArgs = new object[] { securityAction };
+		}
+
 		public CustomAttributeBuilder(ConstructorInfo con, object[] constructorArgs)
 			: this(con, constructorArgs, null, null, null,null)
 		{
@@ -70,15 +78,30 @@ namespace IKVM.Reflection.Emit
 			this.fieldValues = fieldValues;
 		}
 
+		public static CustomAttributeBuilder __FromBlob(ConstructorInfo con, byte[] blob)
+		{
+			return new CustomAttributeBuilder(con, blob);
+		}
+
+		public static CustomAttributeBuilder __FromBlob(ConstructorInfo con, int securityAction, byte[] blob)
+		{
+			return new CustomAttributeBuilder(con, securityAction, blob);
+		}
+
+		public static CustomAttributeTypedArgument __MakeTypedArgument(Type type, object value)
+		{
+			return new CustomAttributeTypedArgument(type, value);
+		}
+
 		private sealed class BlobWriter
 		{
-			private readonly ModuleBuilder moduleBuilder;
+			private readonly Assembly assembly;
 			private readonly CustomAttributeBuilder cab;
 			private readonly ByteBuffer bb;
 
-			internal BlobWriter(ModuleBuilder moduleBuilder, CustomAttributeBuilder cab, ByteBuffer bb)
+			internal BlobWriter(Assembly assembly, CustomAttributeBuilder cab, ByteBuffer bb)
 			{
-				this.moduleBuilder = moduleBuilder;
+				this.assembly = assembly;
 				this.cab = cab;
 				this.bb = bb;
 			}
@@ -156,11 +179,59 @@ namespace IKVM.Reflection.Emit
 
 			private void WriteFixedArg(Type type, object value)
 			{
-				Universe u = moduleBuilder.universe;
+				Universe u = assembly.universe;
 				if (type == u.System_String)
 				{
 					WriteString((string)value);
 				}
+				else if (type == u.System_Boolean)
+				{
+					WriteByte((bool)value ? (byte)1 : (byte)0);
+				}
+				else if (type == u.System_Char)
+				{
+					WriteUInt16((char)value);
+				}
+				else if (type == u.System_SByte)
+				{
+					WriteByte((byte)(sbyte)value);
+				}
+				else if (type == u.System_Byte)
+				{
+					WriteByte((byte)value);
+				}
+				else if (type == u.System_Int16)
+				{
+					WriteUInt16((ushort)(short)value);
+				}
+				else if (type == u.System_UInt16)
+				{
+					WriteUInt16((ushort)value);
+				}
+				else if (type == u.System_Int32)
+				{
+					WriteInt32((int)value);
+				}
+				else if (type == u.System_UInt32)
+				{
+					WriteInt32((int)(uint)value);
+				}
+				else if (type == u.System_Int64)
+				{
+					WriteInt64((long)value);
+				}
+				else if (type == u.System_UInt64)
+				{
+					WriteInt64((long)(ulong)value);
+				}
+				else if (type == u.System_Single)
+				{
+					WriteSingle((float)value);
+				}
+				else if (type == u.System_Double)
+				{
+					WriteDouble((double)value);
+				}
 				else if (type == u.System_Type)
 				{
 					WriteTypeName((Type)value);
@@ -176,6 +247,12 @@ namespace IKVM.Reflection.Emit
 						// value.GetType() would return a subclass of Type, but we don't want to deal with that
 						type = u.System_Type;
 					}
+					else if (value is CustomAttributeTypedArgument)
+					{
+						CustomAttributeTypedArgument cta = (CustomAttributeTypedArgument)value;
+						value = cta.Value;
+						type = cta.ArgumentType;
+					}
 					else
 					{
 						type = u.Import(value.GetType());
@@ -206,47 +283,7 @@ namespace IKVM.Reflection.Emit
 				}
 				else
 				{
-					switch (Type.GetTypeCode(type))
-					{
-						case TypeCode.Boolean:
-							WriteByte((bool)value ? (byte)1 : (byte)0);
-							break;
-						case TypeCode.Char:
-							WriteUInt16((char)value);
-							break;
-						case TypeCode.SByte:
-							WriteByte((byte)(sbyte)value);
-							break;
-						case TypeCode.Byte:
-							WriteByte((byte)value);
-							break;
-						case TypeCode.Int16:
-							WriteUInt16((ushort)(short)value);
-							break;
-						case TypeCode.UInt16:
-							WriteUInt16((ushort)value);
-							break;
-						case TypeCode.Int32:
-							WriteInt32((int)value);
-							break;
-						case TypeCode.UInt32:
-							WriteInt32((int)(uint)value);
-							break;
-						case TypeCode.Int64:
-							WriteInt64((long)value);
-							break;
-						case TypeCode.UInt64:
-							WriteInt64((long)(ulong)value);
-							break;
-						case TypeCode.Single:
-							WriteSingle((float)value);
-							break;
-						case TypeCode.Double:
-							WriteDouble((double)value);
-							break;
-						default:
-							throw new ArgumentException();
-					}
+					throw new ArgumentException();
 				}
 			}
 
@@ -270,18 +307,69 @@ namespace IKVM.Reflection.Emit
 				string name = null;
 				if (type != null)
 				{
-					if (type.Assembly == moduleBuilder.Assembly)
+					StringBuilder sb = new StringBuilder();
+					GetTypeName(sb, type, false);
+					name = sb.ToString();
+				}
+				WriteString(name);
+			}
+
+			private void GetTypeName(StringBuilder sb, Type type, bool isTypeParam)
+			{
+				bool v1 = !assembly.ManifestModule.__IsMissing && assembly.ManifestModule.MDStreamVersion < 0x20000;
+				bool includeAssemblyName = type.Assembly != assembly && (!v1 || type.Assembly != type.Module.universe.Mscorlib);
+				if (isTypeParam && includeAssemblyName)
+				{
+					sb.Append('[');
+				}
+				GetTypeNameImpl(sb, type);
+				if (includeAssemblyName)
+				{
+					if (v1)
+					{
+						sb.Append(',');
+					}
+					else
 					{
-						name = type.FullName;
+						sb.Append(", ");
+					}
+					if (isTypeParam)
+					{
+						sb.Append(type.Assembly.FullName.Replace("]", "\\]")).Append(']');
 					}
 					else
 					{
-						name = type.AssemblyQualifiedName;
+						sb.Append(type.Assembly.FullName);
 					}
 				}
-				WriteString(name);
 			}
 
+			private void GetTypeNameImpl(StringBuilder sb, Type type)
+			{
+				if (type.HasElementType)
+				{
+					GetTypeNameImpl(sb, type.GetElementType());
+					sb.Append(((ElementHolderType)type).GetSuffix());
+				}
+				else if (type.IsGenericTypeInstance)
+				{
+					sb.Append(type.GetGenericTypeDefinition().FullName);
+					sb.Append('[');
+					string sep = "";
+					foreach (Type typeParam in type.GetGenericArguments())
+					{
+						sb.Append(sep);
+						GetTypeName(sb, typeParam, true);
+						sep = ",";
+					}
+					sb.Append(']');
+				}
+				else
+				{
+					sb.Append(type.FullName);
+				}
+			}
+	
 			private void WriteString(string val)
 			{
 				bb.Write(val);
@@ -303,6 +391,58 @@ namespace IKVM.Reflection.Emit
 				{
 					WriteByte(0x51);
 				}
+				else if (type == u.System_Boolean)
+				{
+					WriteByte(0x02);
+				}
+				else if (type == u.System_Char)
+				{
+					WriteByte(0x03);
+				}
+				else if (type == u.System_SByte)
+				{
+					WriteByte(0x04);
+				}
+				else if (type == u.System_Byte)
+				{
+					WriteByte(0x05);
+				}
+				else if (type == u.System_Int16)
+				{
+					WriteByte(0x06);
+				}
+				else if (type == u.System_UInt16)
+				{
+					WriteByte(0x07);
+				}
+				else if (type == u.System_Int32)
+				{
+					WriteByte(0x08);
+				}
+				else if (type == u.System_UInt32)
+				{
+					WriteByte(0x09);
+				}
+				else if (type == u.System_Int64)
+				{
+					WriteByte(0x0A);
+				}
+				else if (type == u.System_UInt64)
+				{
+					WriteByte(0x0B);
+				}
+				else if (type == u.System_Single)
+				{
+					WriteByte(0x0C);
+				}
+				else if (type == u.System_Double)
+				{
+					WriteByte(0x0D);
+				}
+				else if (type == u.System_String)
+				{
+					WriteByte(0x0E);
+				}
 				else if (type.IsArray)
 				{
 					WriteByte(0x1D);
@@ -315,50 +455,7 @@ namespace IKVM.Reflection.Emit
 				}
 				else
 				{
-					switch (Type.GetTypeCode(type))
-					{
-						case TypeCode.Boolean:
-							WriteByte(0x02);
-							break;
-						case TypeCode.Char:
-							WriteByte(0x03);
-							break;
-						case TypeCode.SByte:
-							WriteByte(0x04);
-							break;
-						case TypeCode.Byte:
-							WriteByte(0x05);
-							break;
-						case TypeCode.Int16:
-							WriteByte(0x06);
-							break;
-						case TypeCode.UInt16:
-							WriteByte(0x07);
-							break;
-						case TypeCode.Int32:
-							WriteByte(0x08);
-							break;
-						case TypeCode.UInt32:
-							WriteByte(0x09);
-							break;
-						case TypeCode.Int64:
-							WriteByte(0x0A);
-							break;
-						case TypeCode.UInt64:
-							WriteByte(0x0B);
-							break;
-						case TypeCode.Single:
-							WriteByte(0x0C);
-							break;
-						case TypeCode.Double:
-							WriteByte(0x0D);
-							break;
-						case TypeCode.String:
-							WriteByte(0x0E);
-							break;
-						default:
-							throw new ArgumentException();
-					}
+					throw new ArgumentException();
 				}
 			}
 		}
@@ -375,14 +472,15 @@ namespace IKVM.Reflection.Emit
 
 		internal int WriteBlob(ModuleBuilder moduleBuilder)
 		{
-			ByteBuffer bb = new ByteBuffer(100);
+			ByteBuffer bb;
 			if (blob != null)
 			{
-				bb.Write(blob);
+				bb = ByteBuffer.Wrap(blob);
 			}
 			else
 			{
-				BlobWriter bw = new BlobWriter(moduleBuilder, this, bb);
+				bb = new ByteBuffer(100);
+				BlobWriter bw = new BlobWriter(moduleBuilder.Assembly, this, bb);
 				bw.WriteCustomAttributeBlob();
 			}
 			return moduleBuilder.Blobs.Add(bb);
@@ -439,16 +537,41 @@ namespace IKVM.Reflection.Emit
 			return null;
 		}
 
+		internal string GetLegacyDeclSecurity()
+		{
+			if (con.DeclaringType == con.Module.universe.System_Security_Permissions_PermissionSetAttribute
+				&& blob == null
+				&& (namedFields == null || namedFields.Length == 0)
+				&& namedProperties != null
+				&& namedProperties.Length == 1
+				&& namedProperties[0].Name == "XML")
+			{
+				return propertyValues[0] as string;
+			}
+			return null;
+		}
+
 		internal void WriteNamedArgumentsForDeclSecurity(ModuleBuilder moduleBuilder, ByteBuffer bb)
 		{
-			BlobWriter bw = new BlobWriter(moduleBuilder, this, bb);
-			bw.WriteNamedArguments(true);
+			if (blob != null)
+			{
+				bb.Write(blob);
+			}
+			else
+			{
+				BlobWriter bw = new BlobWriter(moduleBuilder.Assembly, this, bb);
+				bw.WriteNamedArguments(true);
+			}
 		}
 
 		internal CustomAttributeData ToData(Assembly asm)
 		{
 			if (blob != null)
 			{
+				if (constructorArgs != null)
+				{
+					return new CustomAttributeData(asm, con, (int)constructorArgs[0], blob, -1);
+				}
 				return new CustomAttributeData(asm, con, new IKVM.Reflection.Reader.ByteReader(blob, 0, blob.Length));
 			}
 			else
@@ -458,20 +581,60 @@ namespace IKVM.Reflection.Emit
 				{
 					for (int i = 0; i < namedProperties.Length; i++)
 					{
-						namedArgs.Add(new CustomAttributeNamedArgument(namedProperties[i], new CustomAttributeTypedArgument(namedProperties[i].PropertyType, propertyValues[i])));
+						namedArgs.Add(new CustomAttributeNamedArgument(namedProperties[i], RewrapValue(namedProperties[i].PropertyType, propertyValues[i])));
 					}
 				}
 				if (namedFields != null)
 				{
 					for (int i = 0; i < namedFields.Length; i++)
 					{
-						namedArgs.Add(new CustomAttributeNamedArgument(namedFields[i], new CustomAttributeTypedArgument(namedFields[i].FieldType, fieldValues[i])));
+						namedArgs.Add(new CustomAttributeNamedArgument(namedFields[i], RewrapValue(namedFields[i].FieldType, fieldValues[i])));
 					}
 				}
-				return new CustomAttributeData(con, constructorArgs, namedArgs);
+				List<CustomAttributeTypedArgument> args = new List<CustomAttributeTypedArgument>(constructorArgs.Length);
+				ParameterInfo[] parameters = this.Constructor.GetParameters();
+				for (int i = 0; i < constructorArgs.Length; i++)
+				{
+					args.Add(RewrapValue(parameters[i].ParameterType, constructorArgs[i]));
+				}
+				return new CustomAttributeData(asm.ManifestModule, con, args, namedArgs);
 			}
 		}
 
+		private static CustomAttributeTypedArgument RewrapValue(Type type, object value)
+		{
+			if (value is Array)
+			{
+				Array array = (Array)value;
+				Type arrayType = type.Module.universe.Import(array.GetType());
+				return RewrapArray(arrayType, array);
+			}
+			else if (value is CustomAttributeTypedArgument)
+			{
+				CustomAttributeTypedArgument arg = (CustomAttributeTypedArgument)value;
+				if (arg.Value is Array)
+				{
+					return RewrapArray(arg.ArgumentType, (Array)arg.Value);
+				}
+				return arg;
+			}
+			else
+			{
+				return new CustomAttributeTypedArgument(type, value);
+			}
+		}
+
+		private static CustomAttributeTypedArgument RewrapArray(Type arrayType, Array array)
+		{
+			Type elementType = arrayType.GetElementType();
+			CustomAttributeTypedArgument[] newArray = new CustomAttributeTypedArgument[array.Length];
+			for (int i = 0; i < newArray.Length; i++)
+			{
+				newArray[i] = RewrapValue(elementType, array.GetValue(i));
+			}
+			return new CustomAttributeTypedArgument(arrayType, newArray);
+		}
+
 		internal bool HasBlob
 		{
 			get { return blob != null; }
@@ -488,5 +651,13 @@ namespace IKVM.Reflection.Emit
 				return ToData(asm).__ToBuilder();
 			}
 		}
+
+		internal byte[] GetBlob(Assembly asm)
+		{
+			ByteBuffer bb = new ByteBuffer(100);
+			BlobWriter bw = new BlobWriter(asm, this, bb);
+			bw.WriteCustomAttributeBlob();
+			return bb.ToArray();
+		}
 	}
 }
diff --git a/mcs/class/IKVM.Reflection/Emit/CustomModifiersBuilder.cs b/mcs/class/IKVM.Reflection/Emit/CustomModifiersBuilder.cs
new file mode 100644
index 0000000..91f5b83
--- /dev/null
+++ b/mcs/class/IKVM.Reflection/Emit/CustomModifiersBuilder.cs
@@ -0,0 +1,75 @@
+/*
+  Copyright (C) 2011 Jeroen Frijters
+
+  This software is provided 'as-is', without any express or implied
+  warranty.  In no event will the authors be held liable for any damages
+  arising from the use of this software.
+
+  Permission is granted to anyone to use this software for any purpose,
+  including commercial applications, and to alter it and redistribute it
+  freely, subject to the following restrictions:
+
+  1. The origin of this software must not be misrepresented; you must not
+     claim that you wrote the original software. If you use this software
+     in a product, an acknowledgment in the product documentation would be
+     appreciated but is not required.
+  2. Altered source versions must be plainly marked as such, and must not be
+     misrepresented as being the original software.
+  3. This notice may not be removed or altered from any source distribution.
+
+  Jeroen Frijters
+  jeroen at frijters.net
+  
+*/
+using System;
+using System.Collections.Generic;
+using System.Text;
+
+namespace IKVM.Reflection.Emit
+{
+	public sealed class CustomModifiersBuilder
+	{
+		private readonly List<Item> list = new List<Item>();
+
+		internal struct Item
+		{
+			internal Type type;
+			internal bool required;
+		}
+
+		public void AddRequired(Type type)
+		{
+			Item item;
+			item.type = type;
+			item.required = true;
+			list.Add(item);
+		}
+
+		public void AddOptional(Type type)
+		{
+			Item item;
+			item.type = type;
+			item.required = false;
+			list.Add(item);
+		}
+
+		// this adds the custom modifiers in the same order as the normal SRE APIs
+		// (the advantage over using the SRE APIs is that a CustomModifiers object is slightly more efficient,
+		// because unlike the Type arrays it doesn't need to be copied)
+		public void Add(Type[] requiredCustomModifiers, Type[] optionalCustomModifiers)
+		{
+			foreach (CustomModifiers.Entry entry in CustomModifiers.FromReqOpt(requiredCustomModifiers, optionalCustomModifiers))
+			{
+				Item item;
+				item.type = entry.Type;
+				item.required = entry.IsRequired;
+				list.Add(item);
+			}
+		}
+
+		public CustomModifiers Create()
+		{
+			return new CustomModifiers(list);
+		}
+	}
+}
diff --git a/mcs/class/IKVM.Reflection/Emit/EnumBuilder.cs b/mcs/class/IKVM.Reflection/Emit/EnumBuilder.cs
index 5ad9686..b38860f 100644
--- a/mcs/class/IKVM.Reflection/Emit/EnumBuilder.cs
+++ b/mcs/class/IKVM.Reflection/Emit/EnumBuilder.cs
@@ -33,14 +33,30 @@ namespace IKVM.Reflection.Emit
 		private readonly FieldBuilder fieldBuilder;
 
 		internal EnumBuilder(TypeBuilder typeBuilder, FieldBuilder fieldBuilder)
+			: base(typeBuilder)
 		{
 			this.typeBuilder = typeBuilder;
 			this.fieldBuilder = fieldBuilder;
 		}
 
-		public override Type UnderlyingSystemType
+		public override string __Name
 		{
-			get { return typeBuilder.UnderlyingSystemType; }
+			get { return typeBuilder.__Name; }
+		}
+
+		public override string __Namespace
+		{
+			get { return typeBuilder.__Namespace; }
+		}
+
+		public override string Name
+		{
+			get { return typeBuilder.Name; }
+		}
+
+		public override string FullName
+		{
+			get { return typeBuilder.FullName; }
 		}
 
 		public override Type BaseType
diff --git a/mcs/class/IKVM.Reflection/Emit/EventBuilder.cs b/mcs/class/IKVM.Reflection/Emit/EventBuilder.cs
index be29644..c0e2842 100644
--- a/mcs/class/IKVM.Reflection/Emit/EventBuilder.cs
+++ b/mcs/class/IKVM.Reflection/Emit/EventBuilder.cs
@@ -1,5 +1,5 @@
 /*
-  Copyright (C) 2009 Jeroen Frijters
+  Copyright (C) 2009-2011 Jeroen Frijters
 
   This software is provided 'as-is', without any express or implied
   warranty.  In no event will the authors be held liable for any damages
@@ -38,9 +38,15 @@ namespace IKVM.Reflection.Emit
 		private MethodBuilder addOnMethod;
 		private MethodBuilder removeOnMethod;
 		private MethodBuilder fireMethod;
-		private List<MethodBuilder> otherMethods;
+		private readonly List<Accessor> accessors = new List<Accessor>();
 		private int lazyPseudoToken;
 
+		private struct Accessor
+		{
+			internal short Semantics;
+			internal MethodBuilder Method;
+		}
+
 		internal EventBuilder(TypeBuilder typeBuilder, string name, EventAttributes attributes, Type eventtype)
 		{
 			this.typeBuilder = typeBuilder;
@@ -52,25 +58,36 @@ namespace IKVM.Reflection.Emit
 		public void SetAddOnMethod(MethodBuilder mdBuilder)
 		{
 			addOnMethod = mdBuilder;
+			Accessor acc;
+			acc.Semantics = MethodSemanticsTable.AddOn;
+			acc.Method = mdBuilder;
+			accessors.Add(acc);
 		}
 
 		public void SetRemoveOnMethod(MethodBuilder mdBuilder)
 		{
 			removeOnMethod = mdBuilder;
+			Accessor acc;
+			acc.Semantics = MethodSemanticsTable.RemoveOn;
+			acc.Method = mdBuilder;
+			accessors.Add(acc);
 		}
 
 		public void SetRaiseMethod(MethodBuilder mdBuilder)
 		{
 			fireMethod = mdBuilder;
+			Accessor acc;
+			acc.Semantics = MethodSemanticsTable.Fire;
+			acc.Method = mdBuilder;
+			accessors.Add(acc);
 		}
 
 		public void AddOtherMethod(MethodBuilder mdBuilder)
 		{
-			if (otherMethods == null)
-			{
-				otherMethods = new List<MethodBuilder>();
-			}
-			otherMethods.Add(mdBuilder);
+			Accessor acc;
+			acc.Semantics = MethodSemanticsTable.Other;
+			acc.Method = mdBuilder;
+			accessors.Add(acc);
 		}
 
 		public void SetCustomAttribute(ConstructorInfo con, byte[] binaryAttribute)
@@ -118,19 +135,26 @@ namespace IKVM.Reflection.Emit
 		public override MethodInfo[] GetOtherMethods(bool nonPublic)
 		{
 			List<MethodInfo> list = new List<MethodInfo>();
-			if (otherMethods != null)
+			foreach (Accessor acc in accessors)
 			{
-				foreach (MethodInfo method in otherMethods)
+				if (acc.Semantics == MethodSemanticsTable.Other && (nonPublic || acc.Method.IsPublic))
 				{
-					if (nonPublic || method.IsPublic)
-					{
-						list.Add(method);
-					}
+					list.Add(acc.Method);
 				}
 			}
 			return list.ToArray();
 		}
 
+		public override MethodInfo[] __GetMethods()
+		{
+			List<MethodInfo> list = new List<MethodInfo>();
+			foreach (Accessor acc in accessors)
+			{
+				list.Add(acc.Method);
+			}
+			return list.ToArray();
+		}
+
 		public override Type DeclaringType
 		{
 			get { return typeBuilder; }
@@ -173,24 +197,9 @@ namespace IKVM.Reflection.Emit
 				typeBuilder.ModuleBuilder.RegisterTokenFixup(lazyPseudoToken, token);
 			}
 
-			if (addOnMethod != null)
-			{
-				AddMethodSemantics(MethodSemanticsTable.AddOn, addOnMethod.MetadataToken, token);
-			}
-			if (removeOnMethod != null)
+			foreach (Accessor acc in accessors)
 			{
-				AddMethodSemantics(MethodSemanticsTable.RemoveOn, removeOnMethod.MetadataToken, token);
-			}
-			if (fireMethod != null)
-			{
-				AddMethodSemantics(MethodSemanticsTable.Fire, fireMethod.MetadataToken, token);
-			}
-			if (otherMethods != null)
-			{
-				foreach (MethodBuilder method in otherMethods)
-				{
-					AddMethodSemantics(MethodSemanticsTable.Other, method.MetadataToken, token);
-				}
+				AddMethodSemantics(acc.Semantics, acc.Method.MetadataToken, token);
 			}
 		}
 
@@ -207,18 +216,11 @@ namespace IKVM.Reflection.Emit
 		{
 			get
 			{
-				if ((addOnMethod != null && addOnMethod.IsPublic) || (removeOnMethod != null && removeOnMethod.IsPublic) || (fireMethod != null && fireMethod.IsPublic))
-				{
-					return true;
-				}
-				if (otherMethods != null)
+				foreach (Accessor acc in accessors)
 				{
-					foreach (MethodBuilder method in otherMethods)
+					if (acc.Method.IsPublic)
 					{
-						if (method.IsPublic)
-						{
-							return true;
-						}
+						return true;
 					}
 				}
 				return false;
@@ -229,18 +231,11 @@ namespace IKVM.Reflection.Emit
 		{
 			get
 			{
-				if ((addOnMethod != null && addOnMethod.IsStatic) || (removeOnMethod != null && removeOnMethod.IsStatic) || (fireMethod != null && fireMethod.IsStatic))
-				{
-					return true;
-				}
-				if (otherMethods != null)
+				foreach (Accessor acc in accessors)
 				{
-					foreach (MethodBuilder method in otherMethods)
+					if (acc.Method.IsStatic)
 					{
-						if (method.IsStatic)
-						{
-							return true;
-						}
+						return true;
 					}
 				}
 				return false;
diff --git a/mcs/class/IKVM.Reflection/Emit/FieldBuilder.cs b/mcs/class/IKVM.Reflection/Emit/FieldBuilder.cs
index 4316117..3a31ec0 100644
--- a/mcs/class/IKVM.Reflection/Emit/FieldBuilder.cs
+++ b/mcs/class/IKVM.Reflection/Emit/FieldBuilder.cs
@@ -38,13 +38,13 @@ namespace IKVM.Reflection.Emit
 		private readonly int signature;
 		private readonly FieldSignature fieldSig;
 
-		internal FieldBuilder(TypeBuilder type, string name, Type fieldType, Type[] requiredCustomModifiers, Type[] optionalCustomModifiers, FieldAttributes attribs)
+		internal FieldBuilder(TypeBuilder type, string name, Type fieldType, CustomModifiers customModifiers, FieldAttributes attribs)
 		{
 			this.typeBuilder = type;
 			this.name = name;
 			this.pseudoToken = type.ModuleBuilder.AllocPseudoToken();
 			this.nameIndex = type.ModuleBuilder.Strings.Add(name);
-			this.fieldSig = FieldSignature.Create(fieldType, optionalCustomModifiers, requiredCustomModifiers);
+			this.fieldSig = FieldSignature.Create(fieldType, customModifiers);
 			ByteBuffer sig = new ByteBuffer(5);
 			fieldSig.WriteSig(this.typeBuilder.ModuleBuilder, sig);
 			this.signature = this.typeBuilder.ModuleBuilder.Blobs.Add(sig);
@@ -65,12 +65,23 @@ namespace IKVM.Reflection.Emit
 
 		public void __SetDataAndRVA(byte[] data)
 		{
+			SetDataAndRvaImpl(data, typeBuilder.ModuleBuilder.initializedData, 0);
+		}
+
+		public void __SetReadOnlyDataAndRVA(byte[] data)
+		{
+			SetDataAndRvaImpl(data, typeBuilder.ModuleBuilder.methodBodies, unchecked((int)0x80000000));
+		}
+
+		private void SetDataAndRvaImpl(byte[] data, ByteBuffer bb, int readonlyMarker)
+		{
 			attribs |= FieldAttributes.HasFieldRVA;
 			FieldRVATable.Record rec = new FieldRVATable.Record();
-			rec.RVA = typeBuilder.ModuleBuilder.initializedData.Position;
+			bb.Align(8);
+			rec.RVA = bb.Position + readonlyMarker;
 			rec.Field = pseudoToken;
 			typeBuilder.ModuleBuilder.FieldRVA.AddRecord(rec);
-			typeBuilder.ModuleBuilder.initializedData.Write(data);
+			bb.Write(data);
 		}
 
 		public override void __GetDataFromRVA(byte[] data, int offset, int length)
@@ -78,6 +89,11 @@ namespace IKVM.Reflection.Emit
 			throw new NotImplementedException();
 		}
 
+		public override int __FieldRVA
+		{
+			get { throw new NotImplementedException(); }
+		}
+
 		public void SetCustomAttribute(ConstructorInfo con, byte[] binaryAttribute)
 		{
 			SetCustomAttribute(new CustomAttributeBuilder(con, binaryAttribute));
diff --git a/mcs/class/IKVM.Reflection/Emit/ILGenerator.cs b/mcs/class/IKVM.Reflection/Emit/ILGenerator.cs
index 4f7e248..d18ec5e 100644
--- a/mcs/class/IKVM.Reflection/Emit/ILGenerator.cs
+++ b/mcs/class/IKVM.Reflection/Emit/ILGenerator.cs
@@ -1,5 +1,5 @@
 /*
-  Copyright (C) 2008-2010 Jeroen Frijters
+  Copyright (C) 2008-2011 Jeroen Frijters
 
   This software is provided 'as-is', without any express or implied
   warranty.  In no event will the authors be held liable for any damages
@@ -116,12 +116,43 @@ namespace IKVM.Reflection.Emit
 		}
 	}
 
+	sealed class MarkerType : Type
+	{
+		public override Type BaseType
+		{
+			get { throw new InvalidOperationException(); }
+		}
+
+		public override TypeAttributes Attributes
+		{
+			get { throw new InvalidOperationException(); }
+		}
+
+		public override string Name
+		{
+			get { throw new InvalidOperationException(); }
+		}
+
+		public override string FullName
+		{
+			get { throw new InvalidOperationException(); }
+		}
+
+		public override Module Module
+		{
+			get { throw new InvalidOperationException(); }
+		}
+	}
+
 	public sealed class ILGenerator
 	{
-		private static readonly Type FAULT = new BakedType(null); // the type we use here doesn't matter, as long as it can never be used as a real exception type
+		private static readonly Type FAULT = new MarkerType();
+		private static readonly Type FINALLY = new MarkerType();
+		private static readonly Type FILTER = new MarkerType();
 		private readonly ModuleBuilder moduleBuilder;
 		private readonly ByteBuffer code;
 		private readonly List<LocalBuilder> locals = new List<LocalBuilder>();
+		private List<CustomModifiers> localCustomModifiers;
 		private readonly List<int> tokenFixups = new List<int>();
 		private readonly List<int> labels = new List<int>();
 		private readonly List<int> labelStackHeight = new List<int>();
@@ -130,6 +161,7 @@ namespace IKVM.Reflection.Emit
 		private readonly List<ExceptionBlock> exceptions = new List<ExceptionBlock>();
 		private readonly Stack<ExceptionBlock> exceptionStack = new Stack<ExceptionBlock>();
 		private ushort maxStack;
+		private bool fatHeader;
 		private int stackHeight;
 		private Scope scope;
 		private byte exceptionBlockAssistanceMode = EBAM_COMPAT;
@@ -151,7 +183,7 @@ namespace IKVM.Reflection.Emit
 			internal int tryLength;
 			internal int handlerOffset;
 			internal int handlerLength;
-			internal Type exceptionType;	// null = finally block or handler with filter, FAULT = fault block
+			internal Type exceptionType;	// FINALLY = finally block, FILTER = handler with filter, FAULT = fault block
 			internal int filterOffset;
 
 			internal ExceptionBlock(int ordinal)
@@ -219,11 +251,6 @@ namespace IKVM.Reflection.Emit
 			}
 		}
 
-		private bool IsLabelReachable(Label label)
-		{
-			return labelStackHeight[label.Index] != -1;
-		}
-
 		// non-standard API
 		public void __DisableExceptionBlockAssistance()
 		{
@@ -236,6 +263,24 @@ namespace IKVM.Reflection.Emit
 			exceptionBlockAssistanceMode = EBAM_CLEVER;
 		}
 
+		// non-standard API
+		public int __MaxStackSize
+		{
+			get { return maxStack; }
+			set
+			{
+				maxStack = (ushort)value;
+				fatHeader = true;
+			}
+		}
+
+		// non-standard API
+		// returns -1 if the current position is currently unreachable
+		public int __StackHeight
+		{
+			get { return stackHeight; }
+		}
+
 		// new in .NET 4.0
 		public int ILOffset
 		{
@@ -258,24 +303,42 @@ namespace IKVM.Reflection.Emit
 			}
 			stackHeight = 0;
 			UpdateStack(1);
-			if (block.tryLength == 0)
+			if (exceptionType == null)
 			{
-				block.tryLength = code.Position - block.tryOffset;
+				if (block.exceptionType != FILTER || block.handlerOffset != 0)
+				{
+					throw new ArgumentNullException("exceptionType");
+				}
+				block.handlerOffset = code.Position;
 			}
-			else if (exceptionType != null)
+			else
 			{
-				block.handlerLength = code.Position - block.handlerOffset;
-				exceptionStack.Pop();
-				ExceptionBlock newBlock = new ExceptionBlock(exceptions.Count);
-				newBlock.labelEnd = block.labelEnd;
-				newBlock.tryOffset = block.tryOffset;
-				newBlock.tryLength = block.tryLength;
-				block = newBlock;
-				exceptions.Add(block);
-				exceptionStack.Push(block);
+				if (block.tryLength == 0)
+				{
+					block.tryLength = code.Position - block.tryOffset;
+				}
+				else
+				{
+					block.handlerLength = code.Position - block.handlerOffset;
+					exceptionStack.Pop();
+					ExceptionBlock newBlock = new ExceptionBlock(exceptions.Count);
+					newBlock.labelEnd = block.labelEnd;
+					newBlock.tryOffset = block.tryOffset;
+					newBlock.tryLength = block.tryLength;
+					block = newBlock;
+					exceptions.Add(block);
+					exceptionStack.Push(block);
+				}
+				block.exceptionType = exceptionType;
+				if (exceptionType == FILTER)
+				{
+					block.filterOffset = code.Position;
+				}
+				else
+				{
+					block.handlerOffset = code.Position;
+				}
 			}
-			block.handlerOffset = code.Position;
-			block.exceptionType = exceptionType;
 		}
 
 		public Label BeginExceptionBlock()
@@ -291,25 +354,20 @@ namespace IKVM.Reflection.Emit
 
 		public void BeginExceptFilterBlock()
 		{
-			ExceptionBlock block = BeginFinallyFilterFaultBlock();
-			block.filterOffset = code.Position;
-			UpdateStack(1);
+			BeginCatchBlock(FILTER);
 		}
 
 		public void BeginFaultBlock()
 		{
-			ExceptionBlock block = BeginFinallyFilterFaultBlock();
-			block.handlerOffset = code.Position;
-			block.exceptionType = FAULT;
+			BeginFinallyFaultBlock(FAULT);
 		}
 
 		public void BeginFinallyBlock()
 		{
-			ExceptionBlock block = BeginFinallyFilterFaultBlock();
-			block.handlerOffset = code.Position;
+			BeginFinallyFaultBlock(FINALLY);
 		}
 
-		private ExceptionBlock BeginFinallyFilterFaultBlock()
+		private void BeginFinallyFaultBlock(Type type)
 		{
 			ExceptionBlock block = exceptionStack.Peek();
 			if (exceptionBlockAssistanceMode == EBAM_COMPAT || (exceptionBlockAssistanceMode == EBAM_CLEVER && stackHeight != -1))
@@ -343,8 +401,9 @@ namespace IKVM.Reflection.Emit
 				exceptions.Add(block);
 				exceptionStack.Push(block);
 			}
+			block.handlerOffset = code.Position;
+			block.exceptionType = type;
 			stackHeight = 0;
-			return block;
 		}
 
 		public void EndExceptionBlock()
@@ -352,7 +411,7 @@ namespace IKVM.Reflection.Emit
 			ExceptionBlock block = exceptionStack.Pop();
 			if (exceptionBlockAssistanceMode == EBAM_COMPAT || (exceptionBlockAssistanceMode == EBAM_CLEVER && stackHeight != -1))
 			{
-				if (block.filterOffset != 0 || (block.exceptionType != null && block.exceptionType != FAULT))
+				if (block.filterOffset != 0 || (block.exceptionType != FINALLY && block.exceptionType != FAULT))
 				{
 					Emit(OpCodes.Leave, block.labelEnd);
 				}
@@ -397,6 +456,26 @@ namespace IKVM.Reflection.Emit
 			return local;
 		}
 
+		public LocalBuilder __DeclareLocal(Type localType, bool pinned, CustomModifiers customModifiers)
+		{
+			if (!customModifiers.IsEmpty)
+			{
+				if (localCustomModifiers == null)
+				{
+					localCustomModifiers = new List<CustomModifiers>();
+				}
+				// we lazily fill up the list (to sync with the locals list) and we don't need to
+				// make sure that the list has the same length as the locals list, because
+				// Signature.WriteLocalVarSig() can tolerate that.
+				while (localCustomModifiers.Count < locals.Count)
+				{
+					localCustomModifiers.Add(new CustomModifiers());
+				}
+				localCustomModifiers.Add(customModifiers);
+			}
+			return DeclareLocal(localType, pinned);
+		}
+
 		public Label DefineLabel()
 		{
 			Label label = new Label(labels.Count);
@@ -677,9 +756,9 @@ namespace IKVM.Reflection.Emit
 
 		public void Emit(OpCode opc, MethodInfo method)
 		{
+			UpdateStack(opc, method.HasThis, method.ReturnType, method.ParameterCount);
 			Emit(opc);
 			WriteToken(moduleBuilder.GetMethodTokenForIL(method));
-			UpdateStack(opc, method.HasThis, method.ReturnType, method.ParameterCount);
 		}
 
 		public void Emit(OpCode opc, ConstructorInfo constructor)
@@ -727,6 +806,11 @@ namespace IKVM.Reflection.Emit
 
 		public void EmitCall(OpCode opc, MethodInfo method, Type[] optionalParameterTypes)
 		{
+			__EmitCall(opc, method, optionalParameterTypes, null);
+		}
+
+		public void __EmitCall(OpCode opc, MethodInfo method, Type[] optionalParameterTypes, CustomModifiers[] customModifiers)
+		{
 			if (optionalParameterTypes == null || optionalParameterTypes.Length == 0)
 			{
 				Emit(opc, method);
@@ -736,7 +820,7 @@ namespace IKVM.Reflection.Emit
 				Emit(opc);
 				UpdateStack(opc, method.HasThis, method.ReturnType, method.ParameterCount + optionalParameterTypes.Length);
 				ByteBuffer sig = new ByteBuffer(16);
-				method.MethodSignature.WriteMethodRefSig(moduleBuilder, sig, optionalParameterTypes);
+				method.MethodSignature.WriteMethodRefSig(moduleBuilder, sig, optionalParameterTypes, customModifiers);
 				MemberRefTable.Record record = new MemberRefTable.Record();
 				if (method.Module == moduleBuilder)
 				{
@@ -757,25 +841,36 @@ namespace IKVM.Reflection.Emit
 			EmitCall(opc, constructor.GetMethodInfo(), optionalParameterTypes);
 		}
 
+		public void __EmitCall(OpCode opc, ConstructorInfo constructor, Type[] optionalParameterTypes, CustomModifiers[] customModifiers)
+		{
+			__EmitCall(opc, constructor.GetMethodInfo(), optionalParameterTypes, customModifiers);
+		}
+
 		public void EmitCalli(OpCode opc, CallingConvention callingConvention, Type returnType, Type[] parameterTypes)
 		{
-			returnType = returnType ?? moduleBuilder.universe.System_Void;
-			Emit(opc);
-			UpdateStack(opc, false, returnType, parameterTypes.Length);
-			ByteBuffer sig = new ByteBuffer(16);
-			Signature.WriteStandAloneMethodSig(moduleBuilder, sig, callingConvention, returnType, parameterTypes);
-			code.Write(0x11000000 | moduleBuilder.StandAloneSig.FindOrAddRecord(moduleBuilder.Blobs.Add(sig)));
+			__EmitCalli(opc, moduleBuilder.universe.MakeStandAloneMethodSig(callingConvention, returnType, new CustomModifiers(), parameterTypes, null));
 		}
 
 		public void EmitCalli(OpCode opc, CallingConventions callingConvention, Type returnType, Type[] parameterTypes, Type[] optionalParameterTypes)
 		{
-			returnType = returnType ?? moduleBuilder.universe.System_Void;
-			optionalParameterTypes = optionalParameterTypes ?? Type.EmptyTypes;
+			__EmitCalli(opc, moduleBuilder.universe.MakeStandAloneMethodSig(callingConvention, returnType, new CustomModifiers(), parameterTypes, optionalParameterTypes, null));
+		}
+
+		public void __EmitCalli(OpCode opc, __StandAloneMethodSig sig)
+		{
 			Emit(opc);
-			UpdateStack(opc, (callingConvention & CallingConventions.HasThis | CallingConventions.ExplicitThis) == CallingConventions.HasThis, returnType, parameterTypes.Length + optionalParameterTypes.Length);
-			ByteBuffer sig = new ByteBuffer(16);
-			Signature.WriteStandAloneMethodSig(moduleBuilder, sig, callingConvention, returnType, parameterTypes, optionalParameterTypes);
-			code.Write(0x11000000 | moduleBuilder.StandAloneSig.FindOrAddRecord(moduleBuilder.Blobs.Add(sig)));
+			if (sig.IsUnmanaged)
+			{
+				UpdateStack(opc, false, sig.ReturnType, sig.ParameterCount);
+			}
+			else
+			{
+				CallingConventions callingConvention = sig.CallingConvention;
+				UpdateStack(opc, (callingConvention & CallingConventions.HasThis | CallingConventions.ExplicitThis) == CallingConventions.HasThis, sig.ReturnType, sig.ParameterCount);
+			}
+			ByteBuffer bb = new ByteBuffer(16);
+			Signature.WriteStandAloneMethodSig(moduleBuilder, bb, sig);
+			code.Write(0x11000000 | moduleBuilder.StandAloneSig.FindOrAddRecord(moduleBuilder.Blobs.Add(bb)));
 		}
 
 		public void EmitWriteLine(string text)
@@ -874,7 +969,7 @@ namespace IKVM.Reflection.Emit
 			int localVarSigTok = 0;
 
 			int rva;
-			if (locals.Count == 0 && exceptions.Count == 0 && maxStack <= 8 && code.Length < 64)
+			if (locals.Count == 0 && exceptions.Count == 0 && maxStack <= 8 && code.Length < 64 && !fatHeader)
 			{
 				rva = WriteTinyHeaderAndCode(bb);
 			}
@@ -965,7 +1060,7 @@ namespace IKVM.Reflection.Emit
 			if (locals.Count != 0)
 			{
 				ByteBuffer localVarSig = new ByteBuffer(locals.Count + 2);
-				Signature.WriteLocalVarSig(moduleBuilder, localVarSig, locals);
+				Signature.WriteLocalVarSig(moduleBuilder, localVarSig, locals, localCustomModifiers);
 				localVarSigTok = 0x11000000 | moduleBuilder.StandAloneSig.FindOrAddRecord(moduleBuilder.Blobs.Add(localVarSig));
 			}
 
@@ -1028,23 +1123,23 @@ namespace IKVM.Reflection.Emit
 						{
 							bb.Write((int)COR_ILEXCEPTION_CLAUSE_FAULT);
 						}
-						else if (block.filterOffset != 0)
+						else if (block.exceptionType == FILTER)
 						{
 							bb.Write((int)COR_ILEXCEPTION_CLAUSE_FILTER);
 						}
-						else if (block.exceptionType != null)
+						else if (block.exceptionType == FINALLY)
 						{
-							bb.Write((int)COR_ILEXCEPTION_CLAUSE_EXCEPTION);
+							bb.Write((int)COR_ILEXCEPTION_CLAUSE_FINALLY);
 						}
 						else
 						{
-							bb.Write((int)COR_ILEXCEPTION_CLAUSE_FINALLY);
+							bb.Write((int)COR_ILEXCEPTION_CLAUSE_EXCEPTION);
 						}
 						bb.Write(block.tryOffset);
 						bb.Write(block.tryLength);
 						bb.Write(block.handlerOffset);
 						bb.Write(block.handlerLength);
-						if (block.exceptionType != null && block.exceptionType != FAULT)
+						if (block.exceptionType != FAULT && block.exceptionType != FILTER && block.exceptionType != FINALLY)
 						{
 							bb.Write(moduleBuilder.GetTypeTokenForMemberRef(block.exceptionType));
 						}
@@ -1065,23 +1160,23 @@ namespace IKVM.Reflection.Emit
 						{
 							bb.Write(COR_ILEXCEPTION_CLAUSE_FAULT);
 						}
-						else if (block.filterOffset != 0)
+						else if (block.exceptionType == FILTER)
 						{
 							bb.Write(COR_ILEXCEPTION_CLAUSE_FILTER);
 						}
-						else if (block.exceptionType != null)
+						else if (block.exceptionType == FINALLY)
 						{
-							bb.Write(COR_ILEXCEPTION_CLAUSE_EXCEPTION);
+							bb.Write(COR_ILEXCEPTION_CLAUSE_FINALLY);
 						}
 						else
 						{
-							bb.Write(COR_ILEXCEPTION_CLAUSE_FINALLY);
+							bb.Write(COR_ILEXCEPTION_CLAUSE_EXCEPTION);
 						}
 						bb.Write((short)block.tryOffset);
 						bb.Write((byte)block.tryLength);
 						bb.Write((short)block.handlerOffset);
 						bb.Write((byte)block.handlerLength);
-						if (block.exceptionType != null && block.exceptionType != FAULT)
+						if (block.exceptionType != FAULT && block.exceptionType != FILTER && block.exceptionType != FINALLY)
 						{
 							bb.Write(moduleBuilder.GetTypeTokenForMemberRef(block.exceptionType));
 						}
diff --git a/mcs/class/IKVM.Reflection/Emit/MethodBuilder.cs b/mcs/class/IKVM.Reflection/Emit/MethodBuilder.cs
index a54e637..ce3791d 100644
--- a/mcs/class/IKVM.Reflection/Emit/MethodBuilder.cs
+++ b/mcs/class/IKVM.Reflection/Emit/MethodBuilder.cs
@@ -1,5 +1,5 @@
 /*
-  Copyright (C) 2008-2010 Jeroen Frijters
+  Copyright (C) 2008-2011 Jeroen Frijters
 
   This software is provided 'as-is', without any express or implied
   warranty.  In no event will the authors be held liable for any damages
@@ -37,17 +37,17 @@ namespace IKVM.Reflection.Emit
 	{
 		private readonly TypeBuilder typeBuilder;
 		private readonly string name;
-		private readonly int nameIndex;
 		private readonly int pseudoToken;
+		private int nameIndex;
 		private int signature;
 		private Type returnType;
 		private Type[] parameterTypes;
-		private Type[][][] modifiers;	// see PackedCustomModifiers
+		private PackedCustomModifiers customModifiers;
 		private MethodAttributes attributes;
 		private MethodImplAttributes implFlags;
 		private ILGenerator ilgen;
-		private int rva;
-		private readonly CallingConventions callingConvention;
+		private int rva = -1;
+		private CallingConventions callingConvention;
 		private List<ParameterBuilder> parameters;
 		private GenericTypeParameterBuilder[] gtpb;
 		private List<CustomAttributeBuilder> declarativeSecurity;
@@ -59,9 +59,6 @@ namespace IKVM.Reflection.Emit
 			this.typeBuilder = typeBuilder;
 			this.name = name;
 			this.pseudoToken = typeBuilder.ModuleBuilder.AllocPseudoToken();
-			// because all the MethodBuilders constitute a virtual MethodDef table, we cannot allocate the string during WriteMethodDefRecord,
-			// since by then the metadata has already been frozen
-			this.nameIndex = typeBuilder.ModuleBuilder.Strings.Add(name);
 			this.attributes = attributes;
 			if ((attributes & MethodAttributes.Static) == 0)
 			{
@@ -77,6 +74,10 @@ namespace IKVM.Reflection.Emit
 
 		public ILGenerator GetILGenerator(int streamSize)
 		{
+			if (rva != -1)
+			{
+				throw new InvalidOperationException();
+			}
 			if (ilgen == null)
 			{
 				ilgen = new ILGenerator(typeBuilder.ModuleBuilder, streamSize);
@@ -84,6 +85,23 @@ namespace IKVM.Reflection.Emit
 			return ilgen;
 		}
 
+		public void __ReleaseILGenerator()
+		{
+			if (ilgen != null)
+			{
+				if (this.ModuleBuilder.symbolWriter != null)
+				{
+					this.ModuleBuilder.symbolWriter.OpenMethod(new SymbolToken(-pseudoToken | 0x06000000), this);
+				}
+				rva = ilgen.WriteBody(initLocals);
+				if (this.ModuleBuilder.symbolWriter != null)
+				{
+					this.ModuleBuilder.symbolWriter.CloseMethod();
+				}
+				ilgen = null;
+			}
+		}
+
 		public void SetCustomAttribute(ConstructorInfo con, byte[] binaryAttribute)
 		{
 			SetCustomAttribute(new CustomAttributeBuilder(con, binaryAttribute));
@@ -125,7 +143,6 @@ namespace IKVM.Reflection.Emit
 			const short BestFitOff = 0x0020;
 			const short CharMapErrorOn = 0x1000;
 			const short CharMapErrorOff = 0x2000;
-			int name = this.nameIndex;
 			short flags = CharSetNotSpec | CallConvWinapi;
 			if (bestFitMapping.HasValue)
 			{
@@ -174,10 +191,6 @@ namespace IKVM.Reflection.Emit
 						break;
 				}
 			}
-			if (entryName != null)
-			{
-				name = this.ModuleBuilder.Strings.Add(entryName);
-			}
 			if (exactSpelling.HasValue && exactSpelling.Value)
 			{
 				flags |= NoMangle;
@@ -193,7 +206,7 @@ namespace IKVM.Reflection.Emit
 			ImplMapTable.Record rec = new ImplMapTable.Record();
 			rec.MappingFlags = flags;
 			rec.MemberForwarded = pseudoToken;
-			rec.ImportName = name;
+			rec.ImportName = this.ModuleBuilder.Strings.Add(entryName ?? name);
 			rec.ImportScope = this.ModuleBuilder.ModuleRef.FindOrAddRecord(dllName == null ? 0 : this.ModuleBuilder.Strings.Add(dllName));
 			this.ModuleBuilder.ImplMap.AddRecord(rec);
 		}
@@ -326,10 +339,20 @@ namespace IKVM.Reflection.Emit
 
 		public void SetSignature(Type returnType, Type[] returnTypeRequiredCustomModifiers, Type[] returnTypeOptionalCustomModifiers, Type[] parameterTypes, Type[][] parameterTypeRequiredCustomModifiers, Type[][] parameterTypeOptionalCustomModifiers)
 		{
+			SetSignature(returnType, parameterTypes, PackedCustomModifiers.CreateFromExternal(returnTypeOptionalCustomModifiers, returnTypeRequiredCustomModifiers,
+				parameterTypeOptionalCustomModifiers, parameterTypeRequiredCustomModifiers, Util.NullSafeLength(parameterTypes)));
+		}
+
+		public void __SetSignature(Type returnType, CustomModifiers returnTypeCustomModifiers, Type[] parameterTypes, CustomModifiers[] parameterTypeCustomModifiers)
+		{
+			SetSignature(returnType, parameterTypes, PackedCustomModifiers.CreateFromExternal(returnTypeCustomModifiers, parameterTypeCustomModifiers, Util.NullSafeLength(parameterTypes)));
+		}
+
+		private void SetSignature(Type returnType, Type[] parameterTypes, PackedCustomModifiers customModifiers)
+		{
 			this.returnType = returnType ?? this.Module.universe.System_Void;
 			this.parameterTypes = Util.Copy(parameterTypes);
-			this.modifiers = PackedCustomModifiers.CreateFromExternal(returnTypeOptionalCustomModifiers, returnTypeRequiredCustomModifiers,
-				parameterTypeOptionalCustomModifiers, parameterTypeRequiredCustomModifiers, this.parameterTypes.Length);
+			this.customModifiers = customModifiers;
 		}
 
 		public GenericTypeParameterBuilder[] DefineGenericParameters(params string[] names)
@@ -391,6 +414,11 @@ namespace IKVM.Reflection.Emit
 			this.attributes = attributes;
 		}
 
+		public void __SetCallingConvention(CallingConventions callingConvention)
+		{
+			this.callingConvention = callingConvention;
+		}
+
 		public override MethodImplAttributes GetMethodImplementationFlags()
 		{
 			return implFlags;
@@ -470,23 +498,9 @@ namespace IKVM.Reflection.Emit
 				}
 			}
 
-			private Type[] GetCustomModifiers(int optOrReq)
-			{
-				if (method.modifiers == null || method.modifiers[parameter + 1] == null)
-				{
-					return Type.EmptyTypes;
-				}
-				return Util.Copy(method.modifiers[parameter + 1][optOrReq]);
-			}
-
-			public override Type[] GetOptionalCustomModifiers()
+			public override CustomModifiers __GetCustomModifiers()
 			{
-				return GetCustomModifiers(0);
-			}
-
-			public override Type[] GetRequiredCustomModifiers()
-			{
-				return GetCustomModifiers(1);
+				return method.customModifiers.GetParameterCustomModifiers(parameter);
 			}
 
 			public override MemberInfo Member
@@ -574,33 +588,28 @@ namespace IKVM.Reflection.Emit
 			throw new NotSupportedException();
 		}
 
+		public override int __MethodRVA
+		{
+			get { throw new NotImplementedException(); }
+		}
+
 		public bool InitLocals
 		{
 			get { return initLocals; }
 			set { initLocals = value; }
 		}
 
+		public void __AddUnmanagedExport(string name, int ordinal)
+		{
+			this.ModuleBuilder.AddUnmanagedExport(name, ordinal, this, new RelativeVirtualAddress(0xFFFFFFFF));
+		}
+
 		internal void Bake()
 		{
+			this.nameIndex = this.ModuleBuilder.Strings.Add(name);
 			this.signature = this.ModuleBuilder.GetSignatureBlobIndex(this.MethodSignature);
 
-			if (ilgen != null)
-			{
-				if (this.ModuleBuilder.symbolWriter != null)
-				{
-					this.ModuleBuilder.symbolWriter.OpenMethod(new SymbolToken(-pseudoToken | 0x06000000));
-				}
-				rva = ilgen.WriteBody(initLocals);
-				if (this.ModuleBuilder.symbolWriter != null)
-				{
-					this.ModuleBuilder.symbolWriter.CloseMethod();
-				}
-				ilgen = null;
-			}
-			else
-			{
-				rva = -1;
-			}
+			__ReleaseILGenerator();
 
 			if (declarativeSecurity != null)
 			{
@@ -663,7 +672,7 @@ namespace IKVM.Reflection.Emit
 			{
 				if (methodSignature == null)
 				{
-					methodSignature = MethodSignature.MakeFromBuilder(returnType, parameterTypes, modifiers, callingConvention, gtpb == null ? 0 : gtpb.Length);
+					methodSignature = MethodSignature.MakeFromBuilder(returnType, parameterTypes, customModifiers, callingConvention, gtpb == null ? 0 : gtpb.Length);
 				}
 				return methodSignature;
 			}
diff --git a/mcs/class/IKVM.Reflection/Emit/ModuleBuilder.cs b/mcs/class/IKVM.Reflection/Emit/ModuleBuilder.cs
index 07dc278..db0e58b 100644
--- a/mcs/class/IKVM.Reflection/Emit/ModuleBuilder.cs
+++ b/mcs/class/IKVM.Reflection/Emit/ModuleBuilder.cs
@@ -1,5 +1,5 @@
 /*
-  Copyright (C) 2008-2010 Jeroen Frijters
+  Copyright (C) 2008-2011 Jeroen Frijters
 
   This software is provided 'as-is', without any express or implied
   warranty.  In no event will the authors be held liable for any damages
@@ -38,8 +38,9 @@ namespace IKVM.Reflection.Emit
 	public sealed class ModuleBuilder : Module, ITypeOwner
 	{
 		private static readonly bool usePublicKeyAssemblyReference = false;
-		private readonly Guid mvid = Guid.NewGuid();
+		private Guid mvid = Guid.NewGuid();
 		private long imageBaseAddress = 0x00400000;
+		private long stackReserve = -1;
 		private readonly AssemblyBuilder asm;
 		internal readonly string moduleName;
 		internal readonly string fileName;
@@ -48,7 +49,6 @@ namespace IKVM.Reflection.Emit
 		private readonly List<TypeBuilder> types = new List<TypeBuilder>();
 		private readonly Dictionary<Type, int> typeTokens = new Dictionary<Type, int>();
 		private readonly Dictionary<Type, int> memberRefTypeTokens = new Dictionary<Type, int>();
-		private readonly Dictionary<string, TypeBuilder> fullNameToType = new Dictionary<string, TypeBuilder>();
 		internal readonly ByteBuffer methodBodies = new ByteBuffer(128 * 1024);
 		internal readonly List<int> tokenFixupOffsets = new List<int>();
 		internal readonly ByteBuffer initializedData = new ByteBuffer(512);
@@ -65,6 +65,28 @@ namespace IKVM.Reflection.Emit
 		internal readonly UserStringHeap UserStrings = new UserStringHeap();
 		internal readonly GuidHeap Guids = new GuidHeap();
 		internal readonly BlobHeap Blobs = new BlobHeap();
+		internal readonly List<VTableFixups> vtablefixups = new List<VTableFixups>();
+		internal readonly List<UnmanagedExport> unmanagedExports = new List<UnmanagedExport>();
+		private List<InterfaceImplCustomAttribute> interfaceImplCustomAttributes;
+
+		internal struct VTableFixups
+		{
+			internal uint initializedDataOffset;
+			internal ushort count;
+			internal ushort type;
+
+			internal int SlotWidth
+			{
+				get { return (type & 0x02) == 0 ? 4 : 8; }
+			}
+		}
+
+		struct InterfaceImplCustomAttribute
+		{
+			internal int type;
+			internal int interfaceType;
+			internal int pseudoToken;
+		}
 
 		struct MemberRefKey : IEquatable<MemberRefKey>
 		{
@@ -109,7 +131,7 @@ namespace IKVM.Reflection.Emit
 				symbolWriter = SymbolSupport.CreateSymbolWriterFor(this);
 			}
 			// <Module> must be the first record in the TypeDef table
-			moduleType = new TypeBuilder(this, "<Module>", null, 0);
+			moduleType = new TypeBuilder(this, null, "<Module>");
 			types.Add(moduleType);
 		}
 
@@ -201,54 +223,48 @@ namespace IKVM.Reflection.Emit
 
 		public TypeBuilder DefineType(string name, TypeAttributes attr, Type parent, PackingSize packingSize, int typesize)
 		{
-			if (parent == null && (attr & TypeAttributes.Interface) == 0)
+			string ns = null;
+			int lastdot = name.LastIndexOf('.');
+			if (lastdot > 0)
+			{
+				ns = name.Substring(0, lastdot);
+				name = name.Substring(lastdot + 1);
+			}
+			TypeBuilder typeBuilder = __DefineType(ns, name);
+			typeBuilder.__SetAttributes(attr);
+			typeBuilder.SetParent(parent);
+			if (packingSize != PackingSize.Unspecified || typesize != 0)
 			{
-				parent = universe.System_Object;
+				typeBuilder.__SetLayout((int)packingSize, typesize);
 			}
-			TypeBuilder typeBuilder = new TypeBuilder(this, name, parent, attr);
-			PostDefineType(typeBuilder, packingSize, typesize);
 			return typeBuilder;
 		}
 
-		public EnumBuilder DefineEnum(string name, TypeAttributes visibility, Type underlyingType)
+		public TypeBuilder __DefineType(string ns, string name)
 		{
-			TypeBuilder tb = DefineType(name, (visibility & TypeAttributes.VisibilityMask) | TypeAttributes.Sealed, universe.System_Enum);
-			FieldBuilder fb = tb.DefineField("value__", underlyingType, FieldAttributes.Public | FieldAttributes.SpecialName | FieldAttributes.RTSpecialName);
-			return new EnumBuilder(tb, fb);
+			return DefineType(this, ns, name);
 		}
 
-		internal TypeBuilder DefineNestedTypeHelper(TypeBuilder enclosingType, string name, TypeAttributes attr, Type parent, PackingSize packingSize, int typesize)
+		internal TypeBuilder DefineType(ITypeOwner owner, string ns, string name)
 		{
-			if (parent == null && (attr & TypeAttributes.Interface) == 0)
-			{
-				parent = universe.System_Object;
-			}
-			TypeBuilder typeBuilder = new TypeBuilder(enclosingType, name, parent, attr);
-			PostDefineType(typeBuilder, packingSize, typesize);
-			if (enclosingType != null)
-			{
-				NestedClassTable.Record rec = new NestedClassTable.Record();
-				rec.NestedClass = typeBuilder.MetadataToken;
-				rec.EnclosingClass = enclosingType.MetadataToken;
-				this.NestedClass.AddRecord(rec);
-			}
+			TypeBuilder typeBuilder = new TypeBuilder(owner, ns, name);
+			types.Add(typeBuilder);
 			return typeBuilder;
 		}
 
-		private void PostDefineType(TypeBuilder typeBuilder, PackingSize packingSize, int typesize)
+		public EnumBuilder DefineEnum(string name, TypeAttributes visibility, Type underlyingType)
+		{
+			TypeBuilder tb = DefineType(name, (visibility & TypeAttributes.VisibilityMask) | TypeAttributes.Sealed, universe.System_Enum);
+			FieldBuilder fb = tb.DefineField("value__", underlyingType, FieldAttributes.Public | FieldAttributes.SpecialName | FieldAttributes.RTSpecialName);
+			return new EnumBuilder(tb, fb);
+		}
+
+		public FieldBuilder __DefineField(string name, Type type, CustomModifiers customModifiers, FieldAttributes attributes)
 		{
-			types.Add(typeBuilder);
-			fullNameToType.Add(typeBuilder.FullName, typeBuilder);
-			if (packingSize != PackingSize.Unspecified || typesize != 0)
-			{
-				ClassLayoutTable.Record rec = new ClassLayoutTable.Record();
-				rec.PackingSize = (short)packingSize;
-				rec.ClassSize = typesize;
-				rec.Parent = typeBuilder.MetadataToken;
-				this.ClassLayout.AddRecord(rec);
-			}
+			return moduleType.__DefineField(name, type, customModifiers, attributes);
 		}
 
+		[Obsolete("Please use __DefineField(string, Type, CustomModifiers, FieldAttributes) instead.")]
 		public FieldBuilder __DefineField(string name, Type type, Type[] requiredCustomModifiers, Type[] optionalCustomModifiers, FieldAttributes attributes)
 		{
 			return moduleType.DefineField(name, type, requiredCustomModifiers, optionalCustomModifiers, attributes);
@@ -302,11 +318,14 @@ namespace IKVM.Reflection.Emit
 		internal void AddTypeForwarder(Type type)
 		{
 			ExportType(type);
-			foreach (Type nested in type.GetNestedTypes(BindingFlags.Public | BindingFlags.NonPublic))
+			if (!type.__IsMissing)
 			{
-				// we export all nested types (i.e. even the private ones)
-				// (this behavior is the same as the C# compiler)
-				AddTypeForwarder(nested);
+				foreach (Type nested in type.GetNestedTypes(BindingFlags.Public | BindingFlags.NonPublic))
+				{
+					// we export all nested types (i.e. even the private ones)
+					// (this behavior is the same as the C# compiler)
+					AddTypeForwarder(nested);
+				}
 			}
 		}
 
@@ -314,7 +333,7 @@ namespace IKVM.Reflection.Emit
 		{
 			ExportedTypeTable.Record rec = new ExportedTypeTable.Record();
 			rec.TypeDefId = type.MetadataToken;
-			rec.TypeName = this.Strings.Add(TypeNameParser.Unescape(type.Name));
+			rec.TypeName = this.Strings.Add(type.__Name);
 			if (type.IsNested)
 			{
 				rec.Flags = 0;
@@ -324,8 +343,8 @@ namespace IKVM.Reflection.Emit
 			else
 			{
 				rec.Flags = 0x00200000;	// CorTypeAttr.tdForwarder
-				string ns = type.Namespace;
-				rec.TypeNamespace = ns == null ? 0 : this.Strings.Add(TypeNameParser.Unescape(ns));
+				string ns = type.__Namespace;
+				rec.TypeNamespace = ns == null ? 0 : this.Strings.Add(ns);
 				rec.Implementation = ImportAssemblyRef(type.Assembly);
 			}
 			return 0x27000000 | this.ExportedType.FindOrAddRecord(rec);
@@ -396,6 +415,12 @@ namespace IKVM.Reflection.Emit
 
 		private int WriteDeclSecurityBlob(List<CustomAttributeBuilder> list)
 		{
+			string xml;
+			if (list.Count == 1 && (xml = list[0].GetLegacyDeclSecurity()) != null)
+			{
+				// write .NET 1.1 format
+				return this.Blobs.Add(ByteBuffer.Wrap(System.Text.Encoding.Unicode.GetBytes(xml)));
+			}
 			ByteBuffer namedArgs = new ByteBuffer(100);
 			ByteBuffer bb = new ByteBuffer(list.Count * 100);
 			bb.Write((byte)'.');
@@ -413,6 +438,7 @@ namespace IKVM.Reflection.Emit
 
 		public void DefineManifestResource(string name, Stream stream, ResourceAttributes attribute)
 		{
+			manifestResources.Align(8);
 			ManifestResourceTable.Record rec = new ManifestResourceTable.Record();
 			rec.Offset = manifestResources.Position;
 			rec.Flags = (int)attribute;
@@ -432,11 +458,16 @@ namespace IKVM.Reflection.Emit
 			get { return asm; }
 		}
 
-		internal override Type GetTypeImpl(string typeName)
+		internal override Type FindType(TypeName name)
 		{
-			TypeBuilder type;
-			fullNameToType.TryGetValue(typeName, out type);
-			return type;
+			foreach (Type type in types)
+			{
+				if (type.__Namespace == name.Namespace && type.__Name == name.Name)
+				{
+					return type;
+				}
+			}
+			return null;
 		}
 
 		internal override void GetTypesImpl(List<Type> list)
@@ -474,7 +505,11 @@ namespace IKVM.Reflection.Emit
 
 		internal int GetTypeTokenForMemberRef(Type type)
 		{
-			if (type.IsGenericTypeDefinition)
+			if (type.__IsMissing)
+			{
+				return ImportType(type);
+			}
+			else if (type.IsGenericTypeDefinition)
 			{
 				int token;
 				if (!memberRefTypeTokens.TryGetValue(type, out token))
@@ -499,7 +534,7 @@ namespace IKVM.Reflection.Emit
 		private static bool IsFromGenericTypeDefinition(MemberInfo member)
 		{
 			Type decl = member.DeclaringType;
-			return decl != null && decl.IsGenericTypeDefinition;
+			return decl != null && !decl.__IsMissing && decl.IsGenericTypeDefinition;
 		}
 
 		public FieldToken GetFieldToken(FieldInfo field)
@@ -605,7 +640,7 @@ namespace IKVM.Reflection.Emit
 			int token;
 			if (!typeTokens.TryGetValue(type, out token))
 			{
-				if (type.HasElementType || (type.IsGenericType && !type.IsGenericTypeDefinition))
+				if (type.HasElementType || type.IsGenericTypeInstance)
 				{
 					ByteBuffer spec = new ByteBuffer(5);
 					Signature.WriteTypeSpec(this, spec, type);
@@ -617,16 +652,14 @@ namespace IKVM.Reflection.Emit
 					if (type.IsNested)
 					{
 						rec.ResolutionScope = GetTypeToken(type.DeclaringType).Token;
-						rec.TypeName = this.Strings.Add(TypeNameParser.Unescape(type.Name));
-						rec.TypeNameSpace = 0;
 					}
 					else
 					{
 						rec.ResolutionScope = ImportAssemblyRef(type.Assembly);
-						rec.TypeName = this.Strings.Add(TypeNameParser.Unescape(type.Name));
-						string ns = type.Namespace;
-						rec.TypeNameSpace = ns == null ? 0 : this.Strings.Add(TypeNameParser.Unescape(ns));
 					}
+					rec.TypeName = this.Strings.Add(type.__Name);
+					string ns = type.__Namespace;
+					rec.TypeNameSpace = ns == null ? 0 : this.Strings.Add(ns);
 					token = 0x01000000 | this.TypeRef.AddRecord(rec);
 				}
 				typeTokens.Add(type, token);
@@ -654,13 +687,16 @@ namespace IKVM.Reflection.Emit
 			int[] realtokens = new int[referencedAssemblies.Count];
 			foreach (KeyValuePair<Assembly, int> kv in referencedAssemblies)
 			{
-				realtokens[(kv.Value & 0x7FFFFF) - 1] = FindOrAddAssemblyRef(kv.Key.GetName());
+				if ((kv.Value & 0x7F800000) == 0x23800000)
+				{
+					realtokens[(kv.Value & 0x7FFFFF) - 1] = FindOrAddAssemblyRef(kv.Key.GetName(), false);
+				}
 			}
 			// now fixup the resolution scopes in TypeRef
 			for (int i = 0; i < this.TypeRef.records.Length; i++)
 			{
 				int resolutionScope = this.TypeRef.records[i].ResolutionScope;
-				if ((resolutionScope >> 24) == AssemblyRefTable.Index)
+				if ((resolutionScope & 0x7F800000) == 0x23800000)
 				{
 					this.TypeRef.records[i].ResolutionScope = realtokens[(resolutionScope & 0x7FFFFF) - 1];
 				}
@@ -669,22 +705,28 @@ namespace IKVM.Reflection.Emit
 			for (int i = 0; i < this.ExportedType.records.Length; i++)
 			{
 				int implementation = this.ExportedType.records[i].Implementation;
-				if ((implementation >> 24) == AssemblyRefTable.Index)
+				if ((implementation & 0x7F800000) == 0x23800000)
 				{
 					this.ExportedType.records[i].Implementation = realtokens[(implementation & 0x7FFFFF) - 1];
 				}
 			}
 		}
 
-		private int FindOrAddAssemblyRef(AssemblyName name)
+		private int FindOrAddAssemblyRef(AssemblyName name, bool alwaysAdd)
 		{
 			AssemblyRefTable.Record rec = new AssemblyRefTable.Record();
-			Version ver = name.Version;
+			Version ver = name.Version ?? new Version(0, 0, 0, 0);
 			rec.MajorVersion = (ushort)ver.Major;
 			rec.MinorVersion = (ushort)ver.Minor;
 			rec.BuildNumber = (ushort)ver.Build;
 			rec.RevisionNumber = (ushort)ver.Revision;
-			rec.Flags = (int)(name.Flags & AssemblyNameFlags.Retargetable);
+			rec.Flags = (int)(name.Flags & ~AssemblyNameFlags.PublicKey);
+			const AssemblyNameFlags afPA_Specified = (AssemblyNameFlags)0x0080;
+			const AssemblyNameFlags afPA_Mask = (AssemblyNameFlags)0x0070;
+			if ((name.RawFlags & afPA_Specified) != 0)
+			{
+				rec.Flags |= (int)(name.RawFlags & afPA_Mask);
+			}
 			byte[] publicKeyOrToken = null;
 			if (usePublicKeyAssemblyReference)
 			{
@@ -692,7 +734,7 @@ namespace IKVM.Reflection.Emit
 			}
 			if (publicKeyOrToken == null || publicKeyOrToken.Length == 0)
 			{
-				publicKeyOrToken = name.GetPublicKeyToken();
+				publicKeyOrToken = name.GetPublicKeyToken() ?? Empty<byte>.Array;
 			}
 			else
 			{
@@ -701,16 +743,16 @@ namespace IKVM.Reflection.Emit
 			}
 			rec.PublicKeyOrToken = this.Blobs.Add(ByteBuffer.Wrap(publicKeyOrToken));
 			rec.Name = this.Strings.Add(name.Name);
-			if (name.CultureInfo != null)
+			rec.Culture = name.Culture == null ? 0 : this.Strings.Add(name.Culture);
+			if (name.hash != null)
 			{
-				rec.Culture = this.Strings.Add(name.CultureInfo.Name);
+				rec.HashValue = this.Blobs.Add(ByteBuffer.Wrap(name.hash));
 			}
 			else
 			{
-				rec.Culture = 0;
+				rec.HashValue = 0;
 			}
-			rec.HashValue = 0;
-			return 0x23000000 | this.AssemblyRef.FindOrAddRecord(rec);
+			return 0x23000000 | (alwaysAdd ? this.AssemblyRef.AddRecord(rec) : this.AssemblyRef.FindOrAddRecord(rec));
 		}
 
 		internal void WriteSymbolTokenMap()
@@ -747,6 +789,46 @@ namespace IKVM.Reflection.Emit
 			return resolvedTokens[index];
 		}
 
+		internal void ApplyUnmanagedExports(ImageFileMachine imageFileMachine)
+		{
+			if (unmanagedExports.Count != 0)
+			{
+				int type;
+				int size;
+				if (imageFileMachine == ImageFileMachine.I386)
+				{
+					type = 0x05;
+					size = 4;
+				}
+				else
+				{
+					type = 0x06;
+					size = 8;
+				}
+				List<MethodBuilder> methods = new List<MethodBuilder>();
+				for (int i = 0; i < unmanagedExports.Count; i++)
+				{
+					if (unmanagedExports[i].mb != null)
+					{
+						methods.Add(unmanagedExports[i].mb);
+					}
+				}
+				if (methods.Count != 0)
+				{
+					RelativeVirtualAddress rva = __AddVTableFixups(methods.ToArray(), type);
+					for (int i = 0; i < unmanagedExports.Count; i++)
+					{
+						if (unmanagedExports[i].mb != null)
+						{
+							UnmanagedExport exp = unmanagedExports[i];
+							exp.rva = new RelativeVirtualAddress(rva.initializedDataOffset + (uint)(methods.IndexOf(unmanagedExports[i].mb) * size));
+							unmanagedExports[i] = exp;
+						}
+					}
+				}
+			}
+		}
+
 		internal void FixupMethodBodyTokens()
 		{
 			int methodToken = 0x06000001;
@@ -762,6 +844,14 @@ namespace IKVM.Reflection.Emit
 				int pseudoToken = methodBodies.GetInt32AtCurrentPosition();
 				methodBodies.Write(ResolvePseudoToken(pseudoToken));
 			}
+			foreach (VTableFixups fixup in vtablefixups)
+			{
+				for (int i = 0; i < fixup.count; i++)
+				{
+					initializedData.Position = (int)fixup.initializedDataOffset + i * fixup.SlotWidth;
+					initializedData.Write(ResolvePseudoToken(initializedData.GetInt32AtCurrentPosition()));
+				}
+			}
 		}
 
 		private int GetHeaderLength()
@@ -890,9 +980,9 @@ namespace IKVM.Reflection.Emit
 					ExportedTypeTable.Record rec = new ExportedTypeTable.Record();
 					rec.Flags = (int)type.Attributes;
 					rec.TypeDefId = type.MetadataToken & 0xFFFFFF;
-					rec.TypeName = this.Strings.Add(TypeNameParser.Unescape(type.Name));
-					string ns = type.Namespace;
-					rec.TypeNamespace = ns == null ? 0 : this.Strings.Add(TypeNameParser.Unescape(ns));
+					rec.TypeName = this.Strings.Add(type.__Name);
+					string ns = type.__Namespace;
+					rec.TypeNamespace = ns == null ? 0 : this.Strings.Add(ns);
 					if (type.IsNested)
 					{
 						rec.Implementation = declaringTypes[type.DeclaringType];
@@ -1081,7 +1171,12 @@ namespace IKVM.Reflection.Emit
 			get { return mvid; }
 		}
 
-		public override Type[] __ResolveOptionalParameterTypes(int metadataToken)
+		public void __SetModuleVersionId(Guid guid)
+		{
+			mvid = guid;
+		}
+
+		public override Type[] __ResolveOptionalParameterTypes(int metadataToken, Type[] genericTypeArguments, Type[] genericMethodArguments, out CustomModifiers[] customModifiers)
 		{
 			throw new NotImplementedException();
 		}
@@ -1165,12 +1260,32 @@ namespace IKVM.Reflection.Emit
 		}
 
 		// non-standard API
-		public long __ImageBase
+		public new long __ImageBase
 		{
 			get { return imageBaseAddress; }
 			set { imageBaseAddress = value; }
 		}
 
+		protected override long GetImageBaseImpl()
+		{
+			return imageBaseAddress;
+		}
+
+		public override long __StackReserve
+		{
+			get { return stackReserve; }
+		}
+
+		public void __SetStackReserve(long stackReserve)
+		{
+			this.stackReserve = stackReserve;
+		}
+
+		internal ulong GetStackReserve(ulong defaultValue)
+		{
+			return stackReserve == -1 ? defaultValue : (ulong)stackReserve;
+		}
+
 		public override int MDStreamVersion
 		{
 			get { return asm.mdStreamVersion; }
@@ -1187,6 +1302,20 @@ namespace IKVM.Reflection.Emit
 
 		public void __Save(PortableExecutableKinds portableExecutableKind, ImageFileMachine imageFileMachine)
 		{
+			SaveImpl(null, portableExecutableKind, imageFileMachine);
+		}
+
+		public void __Save(Stream stream, PortableExecutableKinds portableExecutableKind, ImageFileMachine imageFileMachine)
+		{
+			if (!stream.CanRead || !stream.CanWrite || !stream.CanSeek || stream.Position != 0)
+			{
+				throw new ArgumentException("Stream must support read/write/seek and current position must be zero.", "stream");
+			}
+			SaveImpl(stream, portableExecutableKind, imageFileMachine);
+		}
+
+		private void SaveImpl(Stream streamOrNull, PortableExecutableKinds portableExecutableKind, ImageFileMachine imageFileMachine)
+		{
 			PopulatePropertyAndEventTables();
 			IList<CustomAttributeData> attributes = asm.GetCustomAttributesData(null);
 			if (attributes.Count > 0)
@@ -1225,17 +1354,26 @@ namespace IKVM.Reflection.Emit
 				}
 			}
 			FillAssemblyRefTable();
-			ModuleWriter.WriteModule(null, null, this, PEFileKinds.Dll, portableExecutableKind, imageFileMachine, unmanagedResources, 0);
+			ModuleWriter.WriteModule(null, null, this, PEFileKinds.Dll, portableExecutableKind, imageFileMachine, unmanagedResources, 0, streamOrNull);
 		}
 
 		public void __AddAssemblyReference(AssemblyName assemblyName)
 		{
+			__AddAssemblyReference(assemblyName, null);
+		}
+
+		public void __AddAssemblyReference(AssemblyName assemblyName, Assembly assembly)
+		{
 			if (referencedAssemblyNames == null)
 			{
 				referencedAssemblyNames = new List<AssemblyName>();
 			}
-			FindOrAddAssemblyRef(assemblyName);
 			referencedAssemblyNames.Add((AssemblyName)assemblyName.Clone());
+			int token = FindOrAddAssemblyRef(assemblyName, true);
+			if (assembly != null)
+			{
+				referencedAssemblies.Add(assembly, token);
+			}
 		}
 
 		public override AssemblyName[] __GetReferencedAssemblies()
@@ -1261,6 +1399,169 @@ namespace IKVM.Reflection.Emit
 			}
 			return list.ToArray();
 		}
+
+		public void __AddModuleReference(string module)
+		{
+			this.ModuleRef.FindOrAddRecord(module == null ? 0 : this.Strings.Add(module));
+		}
+
+		public override string[] __GetReferencedModules()
+		{
+			string[] arr = new string[this.ModuleRef.RowCount];
+			for (int i = 0; i < arr.Length; i++)
+			{
+				arr[i] = this.Strings.Find(this.ModuleRef.records[i]);
+			}
+			return arr;
+		}
+
+		public override Type[] __GetReferencedTypes()
+		{
+			List<Type> list = new List<Type>();
+			foreach (KeyValuePair<Type, int> kv in typeTokens)
+			{
+				if (kv.Value >> 24 == TypeRefTable.Index)
+				{
+					list.Add(kv.Key);
+				}
+			}
+			return list.ToArray();
+		}
+
+		public override Type[] __GetExportedTypes()
+		{
+			throw new NotImplementedException();
+		}
+
+		public int __AddModule(int flags, string name, byte[] hash)
+		{
+			FileTable.Record file = new FileTable.Record();
+			file.Flags = flags;
+			file.Name = this.Strings.Add(name);
+			file.HashValue = this.Blobs.Add(ByteBuffer.Wrap(hash));
+			return 0x26000000 + this.File.AddRecord(file);
+		}
+
+		public int __AddManifestResource(int offset, ResourceAttributes flags, string name, int implementation)
+		{
+			ManifestResourceTable.Record res = new ManifestResourceTable.Record();
+			res.Offset = offset;
+			res.Flags = (int)flags;
+			res.Name = this.Strings.Add(name);
+			res.Implementation = implementation;
+			return 0x28000000 + this.ManifestResource.AddRecord(res);
+		}
+
+		public void __SetCustomAttributeFor(int token, CustomAttributeBuilder customBuilder)
+		{
+			SetCustomAttribute(token, customBuilder);
+		}
+
+		public RelativeVirtualAddress __AddVTableFixups(MethodBuilder[] methods, int type)
+		{
+			initializedData.Align(8);
+			VTableFixups fixups;
+			fixups.initializedDataOffset = (uint)initializedData.Position;
+			fixups.count = (ushort)methods.Length;
+			fixups.type = (ushort)type;
+			foreach (MethodBuilder mb in methods)
+			{
+				initializedData.Write(mb.MetadataToken);
+				if (fixups.SlotWidth == 8)
+				{
+					initializedData.Write(0);
+				}
+			}
+			vtablefixups.Add(fixups);
+			return new RelativeVirtualAddress(fixups.initializedDataOffset);
+		}
+
+		public void __AddUnmanagedExportStub(string name, int ordinal, RelativeVirtualAddress rva)
+		{
+			AddUnmanagedExport(name, ordinal, null, rva);
+		}
+
+		internal void AddUnmanagedExport(string name, int ordinal, MethodBuilder methodBuilder, RelativeVirtualAddress rva)
+		{
+			UnmanagedExport export;
+			export.name = name;
+			export.ordinal = ordinal;
+			export.mb = methodBuilder;
+			export.rva = rva;
+			unmanagedExports.Add(export);
+		}
+
+		internal void SetInterfaceImplementationCustomAttribute(TypeBuilder typeBuilder, Type interfaceType, CustomAttributeBuilder cab)
+		{
+			// NOTE since interfaceimpls are extremely common and custom attributes on them are extremely rare,
+			// we store (and resolve) the custom attributes in such away as to avoid impacting the common case performance
+			if (interfaceImplCustomAttributes == null)
+			{
+				interfaceImplCustomAttributes = new List<InterfaceImplCustomAttribute>();
+			}
+			InterfaceImplCustomAttribute rec;
+			rec.type = typeBuilder.MetadataToken;
+			int token = GetTypeToken(interfaceType).Token;
+			switch (token >> 24)
+			{
+				case TypeDefTable.Index:
+					token = (token & 0xFFFFFF) << 2 | 0;
+					break;
+				case TypeRefTable.Index:
+					token = (token & 0xFFFFFF) << 2 | 1;
+					break;
+				case TypeSpecTable.Index:
+					token = (token & 0xFFFFFF) << 2 | 2;
+					break;
+				default:
+					throw new InvalidOperationException();
+			}
+			rec.interfaceType = token;
+			rec.pseudoToken = AllocPseudoToken();
+			interfaceImplCustomAttributes.Add(rec);
+			SetCustomAttribute(rec.pseudoToken, cab);
+		}
+
+		internal void ResolveInterfaceImplPseudoTokens()
+		{
+			if (interfaceImplCustomAttributes != null)
+			{
+				foreach (InterfaceImplCustomAttribute rec in interfaceImplCustomAttributes)
+				{
+					for (int i = 0; i < InterfaceImpl.records.Length; i++)
+					{
+						if (InterfaceImpl.records[i].Class == rec.type && InterfaceImpl.records[i].Interface == rec.interfaceType)
+						{
+							RegisterTokenFixup(rec.pseudoToken, (InterfaceImplTable.Index << 24) | (i + 1));
+							break;
+						}
+					}
+				}
+			}
+		}
+	}
+
+	struct UnmanagedExport
+	{
+		internal string name;
+		internal int ordinal;
+		internal RelativeVirtualAddress rva;
+		internal MethodBuilder mb;
+	}
+
+	public struct RelativeVirtualAddress
+	{
+		internal readonly uint initializedDataOffset;
+
+		internal RelativeVirtualAddress(uint initializedDataOffset)
+		{
+			this.initializedDataOffset = initializedDataOffset;
+		}
+
+		public static RelativeVirtualAddress operator +(RelativeVirtualAddress rva, int offset)
+		{
+			return new RelativeVirtualAddress(rva.initializedDataOffset + (uint)offset);
+		}
 	}
 
 	class ArrayMethod : MethodInfo
@@ -1288,6 +1589,11 @@ namespace IKVM.Reflection.Emit
 			throw new InvalidOperationException();
 		}
 
+		public override int __MethodRVA
+		{
+			get { throw new InvalidOperationException(); }
+		}
+
 		public override MethodImplAttributes GetMethodImplementationFlags()
 		{
 			throw new NotSupportedException();
@@ -1324,7 +1630,7 @@ namespace IKVM.Reflection.Emit
 			{
 				if (methodSignature == null)
 				{
-					methodSignature = MethodSignature.MakeFromBuilder(returnType, parameterTypes, null, callingConvention, 0);
+					methodSignature = MethodSignature.MakeFromBuilder(returnType, parameterTypes, new PackedCustomModifiers(), callingConvention, 0);
 				}
 				return methodSignature;
 			}
diff --git a/mcs/class/IKVM.Reflection/Emit/OpCodes.cs b/mcs/class/IKVM.Reflection/Emit/OpCodes.cs
index 7d4bcb0..bb2ddd8 100644
--- a/mcs/class/IKVM.Reflection/Emit/OpCodes.cs
+++ b/mcs/class/IKVM.Reflection/Emit/OpCodes.cs
@@ -25,7 +25,7 @@ using System;
 
 namespace IKVM.Reflection.Emit
 {
-	public class OpCodes
+	public sealed class OpCodes
 	{
 		public static readonly OpCode Nop = new OpCode(4888);
 		public static readonly OpCode Break = new OpCode(4199116);
diff --git a/mcs/class/IKVM.Reflection/Emit/PropertyBuilder.cs b/mcs/class/IKVM.Reflection/Emit/PropertyBuilder.cs
index 1815355..f177857 100644
--- a/mcs/class/IKVM.Reflection/Emit/PropertyBuilder.cs
+++ b/mcs/class/IKVM.Reflection/Emit/PropertyBuilder.cs
@@ -1,5 +1,5 @@
 /*
-  Copyright (C) 2008 Jeroen Frijters
+  Copyright (C) 2008-2011 Jeroen Frijters
 
   This software is provided 'as-is', without any express or implied
   warranty.  In no event will the authors be held liable for any damages
@@ -37,10 +37,16 @@ namespace IKVM.Reflection.Emit
 		private PropertySignature sig;
 		private MethodBuilder getter;
 		private MethodBuilder setter;
-		private List<MethodBuilder> otherMethods;
+		private readonly List<Accessor> accessors = new List<Accessor>();
 		private int lazyPseudoToken;
 		private bool patchCallingConvention;
 
+		private struct Accessor
+		{
+			internal short Semantics;
+			internal MethodBuilder Method;
+		}
+
 		internal PropertyBuilder(TypeBuilder typeBuilder, string name, PropertyAttributes attributes, PropertySignature sig, bool patchCallingConvention)
 		{
 			this.typeBuilder = typeBuilder;
@@ -55,34 +61,30 @@ namespace IKVM.Reflection.Emit
 			get { return sig; }
 		}
 
-		private void PatchCallingConvention(MethodBuilder mdBuilder)
-		{
-			if (patchCallingConvention && !mdBuilder.IsStatic)
-			{
-				sig.HasThis = true;
-			}
-		}
-
 		public void SetGetMethod(MethodBuilder mdBuilder)
 		{
-			PatchCallingConvention(mdBuilder);
 			getter = mdBuilder;
+			Accessor acc;
+			acc.Semantics = MethodSemanticsTable.Getter;
+			acc.Method = mdBuilder;
+			accessors.Add(acc);
 		}
 
 		public void SetSetMethod(MethodBuilder mdBuilder)
 		{
-			PatchCallingConvention(mdBuilder);
 			setter = mdBuilder;
+			Accessor acc;
+			acc.Semantics = MethodSemanticsTable.Setter;
+			acc.Method = mdBuilder;
+			accessors.Add(acc);
 		}
 
 		public void AddOtherMethod(MethodBuilder mdBuilder)
 		{
-			PatchCallingConvention(mdBuilder);
-			if (otherMethods == null)
-			{
-				otherMethods = new List<MethodBuilder>();
-			}
-			otherMethods.Add(mdBuilder);
+			Accessor acc;
+			acc.Semantics = MethodSemanticsTable.Other;
+			acc.Method = mdBuilder;
+			accessors.Add(acc);
 		}
 
 		public void SetCustomAttribute(ConstructorInfo con, byte[] binaryAttribute)
@@ -144,14 +146,9 @@ namespace IKVM.Reflection.Emit
 		public override MethodInfo[] GetAccessors(bool nonPublic)
 		{
 			List<MethodInfo> list = new List<MethodInfo>();
-			AddAccessor(list, nonPublic, getter);
-			AddAccessor(list, nonPublic, setter);
-			if (otherMethods != null)
+			foreach (Accessor acc in accessors)
 			{
-				foreach (MethodInfo method in otherMethods)
-				{
-					AddAccessor(list, nonPublic, method);
-				}
+				AddAccessor(list, nonPublic, acc.Method);
 			}
 			return list.ToArray();
 		}
@@ -191,6 +188,11 @@ namespace IKVM.Reflection.Emit
 
 		internal void Bake()
 		{
+			if (patchCallingConvention)
+			{
+				sig.HasThis = !this.IsStatic;
+			}
+
 			PropertyTable.Record rec = new PropertyTable.Record();
 			rec.Flags = (short)attributes;
 			rec.Name = typeBuilder.ModuleBuilder.Strings.Add(name);
@@ -202,20 +204,9 @@ namespace IKVM.Reflection.Emit
 				typeBuilder.ModuleBuilder.RegisterTokenFixup(lazyPseudoToken, token);
 			}
 
-			if (getter != null)
-			{
-				AddMethodSemantics(MethodSemanticsTable.Getter, getter.MetadataToken, token);
-			}
-			if (setter != null)
-			{
-				AddMethodSemantics(MethodSemanticsTable.Setter, setter.MetadataToken, token);
-			}
-			if (otherMethods != null)
+			foreach (Accessor acc in accessors)
 			{
-				foreach (MethodBuilder method in otherMethods)
-				{
-					AddMethodSemantics(MethodSemanticsTable.Other, method.MetadataToken, token);
-				}
+				AddMethodSemantics(acc.Semantics, acc.Method.MetadataToken, token);
 			}
 		}
 
@@ -232,18 +223,11 @@ namespace IKVM.Reflection.Emit
 		{
 			get
 			{
-				if ((getter != null && getter.IsPublic) || (setter != null && setter.IsPublic))
-				{
-					return true;
-				}
-				if (otherMethods != null)
+				foreach (Accessor acc in accessors)
 				{
-					foreach (MethodBuilder method in otherMethods)
+					if (acc.Method.IsPublic)
 					{
-						if (method.IsPublic)
-						{
-							return true;
-						}
+						return true;
 					}
 				}
 				return false;
@@ -254,18 +238,11 @@ namespace IKVM.Reflection.Emit
 		{
 			get
 			{
-				if ((getter != null && getter.IsStatic) || (setter != null && setter.IsStatic))
-				{
-					return true;
-				}
-				if (otherMethods != null)
+				foreach (Accessor acc in accessors)
 				{
-					foreach (MethodBuilder method in otherMethods)
+					if (acc.Method.IsStatic)
 					{
-						if (method.IsStatic)
-						{
-							return true;
-						}
+						return true;
 					}
 				}
 				return false;
diff --git a/mcs/class/IKVM.Reflection/Emit/SignatureHelper.cs b/mcs/class/IKVM.Reflection/Emit/SignatureHelper.cs
index 788c370..9c6c350 100644
--- a/mcs/class/IKVM.Reflection/Emit/SignatureHelper.cs
+++ b/mcs/class/IKVM.Reflection/Emit/SignatureHelper.cs
@@ -1,5 +1,5 @@
 /*
-  Copyright (C) 2008, 2010 Jeroen Frijters
+  Copyright (C) 2008-2011 Jeroen Frijters
 
   This software is provided 'as-is', without any express or implied
   warranty.  In no event will the authors be held liable for any damages
@@ -35,12 +35,10 @@ namespace IKVM.Reflection.Emit
 		private readonly byte type;
 		private readonly List<Type> args = new List<Type>();
 		private readonly List<LocalBuilder> locals = new List<LocalBuilder>();
-		private readonly List<Type[]> requiredCustomModifiers = new List<Type[]>();
-		private readonly List<Type[]> optionalCustomModifiers = new List<Type[]>();
+		private readonly List<CustomModifiers> customModifiers = new List<CustomModifiers>();
 		private readonly List<Type> optionalArgs = new List<Type>();
 		private Type returnType;
-		private Type[] returnTypeRequiredCustomModifiers;
-		private Type[] returnTypeOptionalCustomModifiers;
+		private CustomModifiers returnTypeCustomModifiers;
 		private CallingConventions callingConvention;
 		private CallingConvention unmanagedCallConv;
 		private bool unmanaged;
@@ -86,8 +84,6 @@ namespace IKVM.Reflection.Emit
 		{
 			SignatureHelper sig = new SignatureHelper(mod as ModuleBuilder, Signature.PROPERTY);
 			sig.returnType = returnType;
-			sig.returnTypeOptionalCustomModifiers = Type.EmptyTypes;
-			sig.returnTypeRequiredCustomModifiers = Type.EmptyTypes;
 			foreach (Type type in parameterTypes)
 			{
 				sig.AddArgument(type);
@@ -105,8 +101,7 @@ namespace IKVM.Reflection.Emit
 			SignatureHelper sig = new SignatureHelper(mod as ModuleBuilder, Signature.PROPERTY);
 			sig.callingConvention = callingConvention;
 			sig.returnType = returnType;
-			sig.returnTypeOptionalCustomModifiers = requiredReturnTypeCustomModifiers;
-			sig.returnTypeRequiredCustomModifiers = optionalReturnTypeCustomModifiers;
+			sig.returnTypeCustomModifiers = CustomModifiers.FromReqOpt(requiredReturnTypeCustomModifiers, optionalReturnTypeCustomModifiers);
 			sig.AddArguments(parameterTypes, requiredParameterTypeCustomModifiers, optionalParameterTypeCustomModifiers);
 			return sig;
 		}
@@ -167,21 +162,21 @@ namespace IKVM.Reflection.Emit
 				case 0:
 					if (unmanaged)
 					{
-						Signature.WriteStandAloneMethodSig(module, bb, unmanagedCallConv, returnType, args.ToArray());
+						Signature.WriteStandAloneMethodSig(module, bb, module.universe.MakeStandAloneMethodSig(unmanagedCallConv, returnType, returnTypeCustomModifiers, args.ToArray(), customModifiers.ToArray()));
 					}
 					else
 					{
-						Signature.WriteStandAloneMethodSig(module, bb, callingConvention, returnType, args.ToArray(), optionalArgs.ToArray());
+						Signature.WriteStandAloneMethodSig(module, bb, module.universe.MakeStandAloneMethodSig(callingConvention, returnType, returnTypeCustomModifiers, args.ToArray(), optionalArgs.ToArray(), customModifiers.ToArray()));
 					}
 					break;
 				case Signature.FIELD:
-					FieldSignature.Create(args[0], optionalCustomModifiers[0], requiredCustomModifiers[0]).WriteSig(module, bb);
+					FieldSignature.Create(args[0], customModifiers[0]).WriteSig(module, bb);
 					break;
 				case Signature.PROPERTY:
-					Signature.WritePropertySig(module, bb, callingConvention, returnType, returnTypeRequiredCustomModifiers, returnTypeOptionalCustomModifiers, args.ToArray(), requiredCustomModifiers.ToArray(), optionalCustomModifiers.ToArray());
+					Signature.WritePropertySig(module, bb, callingConvention, returnType, returnTypeCustomModifiers, args.ToArray(), customModifiers.ToArray());
 					break;
 				case Signature.LOCAL_SIG:
-					Signature.WriteLocalVarSig(module, bb, locals);
+					Signature.WriteLocalVarSig(module, bb, locals, customModifiers);
 					break;
 				default:
 					throw new InvalidOperationException();
@@ -202,15 +197,15 @@ namespace IKVM.Reflection.Emit
 
 		public void AddArgument(Type argument, bool pinned)
 		{
-			AddArgument(argument, pinned, Type.EmptyTypes, Type.EmptyTypes);
+			__AddArgument(argument, pinned, new CustomModifiers());
 		}
 
 		public void AddArgument(Type argument, Type[] requiredCustomModifiers, Type[] optionalCustomModifiers)
 		{
-			AddArgument(argument, false, requiredCustomModifiers, optionalCustomModifiers);
+			__AddArgument(argument, false, CustomModifiers.FromReqOpt(requiredCustomModifiers, optionalCustomModifiers));
 		}
 
-		private void AddArgument(Type argument, bool pinned, Type[] requiredCustomModifiers, Type[] optionalCustomModifiers)
+		public void __AddArgument(Type argument, bool pinned, CustomModifiers customModifiers)
 		{
 			if (type == Signature.LOCAL_SIG)
 			{
@@ -223,16 +218,15 @@ namespace IKVM.Reflection.Emit
 			else
 			{
 				this.args.Add(argument);
-				this.requiredCustomModifiers.Add(requiredCustomModifiers);
-				this.optionalCustomModifiers.Add(optionalCustomModifiers);
 			}
+			this.customModifiers.Add(customModifiers);
 		}
 
 		public void AddArguments(Type[] arguments, Type[][] requiredCustomModifiers, Type[][] optionalCustomModifiers)
 		{
 			for (int i = 0; i < arguments.Length; i++)
 			{
-				AddArgument(arguments[i], false, requiredCustomModifiers[i], optionalCustomModifiers[i]);
+				__AddArgument(arguments[i], false, CustomModifiers.FromReqOpt(requiredCustomModifiers[i], optionalCustomModifiers[i]));
 			}
 		}
 	}
diff --git a/mcs/class/IKVM.Reflection/Emit/TypeBuilder.cs b/mcs/class/IKVM.Reflection/Emit/TypeBuilder.cs
index 9d206eb..bbc1edd 100644
--- a/mcs/class/IKVM.Reflection/Emit/TypeBuilder.cs
+++ b/mcs/class/IKVM.Reflection/Emit/TypeBuilder.cs
@@ -1,5 +1,5 @@
 /*
-  Copyright (C) 2008-2010 Jeroen Frijters
+  Copyright (C) 2008-2011 Jeroen Frijters
 
   This software is provided 'as-is', without any express or implied
   warranty.  In no event will the authors be held liable for any damages
@@ -86,11 +86,6 @@ namespace IKVM.Reflection.Emit
 			get { return DeclaringType.Namespace; }
 		}
 
-		public override Type UnderlyingSystemType
-		{
-			get { return this; }
-		}
-
 		public override string Name
 		{
 			get { return name; }
@@ -226,45 +221,32 @@ namespace IKVM.Reflection.Emit
 		private readonly ITypeOwner owner;
 		private readonly int token;
 		private int extends;
-		private Type baseType;
+		private Type lazyBaseType;		// (lazyBaseType == null && attribs & TypeAttributes.Interface) == 0) => BaseType == System.Object
 		private readonly int typeName;
 		private readonly int typeNameSpace;
-		private readonly string nameOrFullName;
+		private readonly string ns;
+		private readonly string name;
 		private readonly List<MethodBuilder> methods = new List<MethodBuilder>();
 		private readonly List<FieldBuilder> fields = new List<FieldBuilder>();
 		private List<PropertyBuilder> properties;
 		private List<EventBuilder> events;
 		private TypeAttributes attribs;
-		private TypeFlags typeFlags;
 		private GenericTypeParameterBuilder[] gtpb;
 		private List<CustomAttributeBuilder> declarativeSecurity;
 		private List<Type> interfaces;
+		private int size;
+		private short pack;
+		private bool hasLayout;
 
-		[Flags]
-		private enum TypeFlags
-		{
-			IsGenericTypeDefinition = 1,
-			HasNestedTypes = 2,
-			Baked = 4,
-		}
-
-		internal TypeBuilder(ITypeOwner owner, string name, Type baseType, TypeAttributes attribs)
+		internal TypeBuilder(ITypeOwner owner, string ns, string name)
 		{
 			this.owner = owner;
 			this.token = this.ModuleBuilder.TypeDef.AllocToken();
-			this.nameOrFullName = TypeNameParser.Escape(name);
-			SetParent(baseType);
-			this.attribs = attribs;
-			if (!this.IsNested)
-			{
-				int lastdot = name.LastIndexOf('.');
-				if (lastdot > 0)
-				{
-					this.typeNameSpace = this.ModuleBuilder.Strings.Add(name.Substring(0, lastdot));
-					name = name.Substring(lastdot + 1);
-				}
-			}
+			this.ns = ns;
+			this.name = name;
+			this.typeNameSpace = ns == null ? 0 : this.ModuleBuilder.Strings.Add(ns);
 			this.typeName = this.ModuleBuilder.Strings.Add(name);
+			MarkEnumOrValueType(ns, name);
 		}
 
 		public ConstructorBuilder DefineDefaultConstructor(MethodAttributes attributes)
@@ -272,7 +254,7 @@ namespace IKVM.Reflection.Emit
 			ConstructorBuilder cb = DefineConstructor(attributes, CallingConventions.Standard, Type.EmptyTypes);
 			ILGenerator ilgen = cb.GetILGenerator();
 			ilgen.Emit(OpCodes.Ldarg_0);
-			ilgen.Emit(OpCodes.Call, baseType.GetConstructor(BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic, null, Type.EmptyTypes, null));
+			ilgen.Emit(OpCodes.Call, BaseType.GetConstructor(BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic, null, Type.EmptyTypes, null));
 			ilgen.Emit(OpCodes.Ret);
 			return cb;
 		}
@@ -369,7 +351,12 @@ namespace IKVM.Reflection.Emit
 
 		public FieldBuilder DefineField(string fieldName, Type type, Type[] requiredCustomModifiers, Type[] optionalCustomModifiers, FieldAttributes attributes)
 		{
-			FieldBuilder fb = new FieldBuilder(this, fieldName, type, requiredCustomModifiers, optionalCustomModifiers, attributes);
+			return __DefineField(fieldName, type, CustomModifiers.FromReqOpt(requiredCustomModifiers, optionalCustomModifiers), attributes);
+		}
+
+		public FieldBuilder __DefineField(string fieldName, Type type, CustomModifiers customModifiers, FieldAttributes attributes)
+		{
+			FieldBuilder fb = new FieldBuilder(this, fieldName, type, customModifiers, attributes);
 			fields.Add(fb);
 			return fb;
 		}
@@ -382,28 +369,33 @@ namespace IKVM.Reflection.Emit
 		public PropertyBuilder DefineProperty(string name, PropertyAttributes attributes, Type returnType, Type[] returnTypeRequiredCustomModifiers, Type[] returnTypeOptionalCustomModifiers,
 			Type[] parameterTypes, Type[][] parameterTypeRequiredCustomModifiers, Type[][] parameterTypeOptionalCustomModifiers)
 		{
-			return DefinePropertyImpl(name, attributes, CallingConventions.Standard, true, returnType, returnTypeRequiredCustomModifiers, returnTypeOptionalCustomModifiers,
-				parameterTypes, parameterTypeRequiredCustomModifiers, parameterTypeOptionalCustomModifiers);
+			return DefinePropertyImpl(name, attributes, CallingConventions.Standard, true, returnType, parameterTypes,
+				PackedCustomModifiers.CreateFromExternal(returnTypeOptionalCustomModifiers, returnTypeRequiredCustomModifiers, parameterTypeOptionalCustomModifiers, parameterTypeRequiredCustomModifiers, Util.NullSafeLength(parameterTypes)));
 		}
 
 		public PropertyBuilder DefineProperty(string name, PropertyAttributes attributes, CallingConventions callingConvention,
 			Type returnType, Type[] returnTypeRequiredCustomModifiers, Type[] returnTypeOptionalCustomModifiers,
 			Type[] parameterTypes, Type[][] parameterTypeRequiredCustomModifiers, Type[][] parameterTypeOptionalCustomModifiers)
 		{
-			return DefinePropertyImpl(name, attributes, callingConvention, false, returnType, returnTypeRequiredCustomModifiers, returnTypeOptionalCustomModifiers,
-				parameterTypes, parameterTypeRequiredCustomModifiers, parameterTypeOptionalCustomModifiers);
+			return DefinePropertyImpl(name, attributes, callingConvention, false, returnType, parameterTypes,
+				PackedCustomModifiers.CreateFromExternal(returnTypeOptionalCustomModifiers, returnTypeRequiredCustomModifiers, parameterTypeOptionalCustomModifiers, parameterTypeRequiredCustomModifiers, Util.NullSafeLength(parameterTypes)));
+		}
+
+		public PropertyBuilder __DefineProperty(string name, PropertyAttributes attributes, CallingConventions callingConvention,
+			Type returnType, CustomModifiers returnTypeCustomModifiers, Type[] parameterTypes, CustomModifiers[] parameterTypeCustomModifiers)
+		{
+			return DefinePropertyImpl(name, attributes, callingConvention, false, returnType, parameterTypes,
+				PackedCustomModifiers.CreateFromExternal(returnTypeCustomModifiers, parameterTypeCustomModifiers, Util.NullSafeLength(parameterTypes)));
 		}
 
 		private PropertyBuilder DefinePropertyImpl(string name, PropertyAttributes attributes, CallingConventions callingConvention, bool patchCallingConvention,
-			Type returnType, Type[] returnTypeRequiredCustomModifiers, Type[] returnTypeOptionalCustomModifiers,
-			Type[] parameterTypes, Type[][] parameterTypeRequiredCustomModifiers, Type[][] parameterTypeOptionalCustomModifiers)
+			Type returnType, Type[] parameterTypes, PackedCustomModifiers customModifiers)
 		{
 			if (properties == null)
 			{
 				properties = new List<PropertyBuilder>();
 			}
-			PropertySignature sig = PropertySignature.Create(callingConvention, returnType, returnTypeOptionalCustomModifiers, returnTypeRequiredCustomModifiers,
-				parameterTypes, parameterTypeOptionalCustomModifiers, parameterTypeRequiredCustomModifiers);
+			PropertySignature sig = PropertySignature.Create(callingConvention, returnType, parameterTypes, customModifiers);
 			PropertyBuilder pb = new PropertyBuilder(this, name, attributes, sig, patchCallingConvention);
 			properties.Add(pb);
 			return pb;
@@ -433,34 +425,64 @@ namespace IKVM.Reflection.Emit
 		public TypeBuilder DefineNestedType(string name, TypeAttributes attr, Type parent, Type[] interfaces)
 		{
 			TypeBuilder tb = DefineNestedType(name, attr, parent);
-			foreach (Type iface in interfaces)
+			if (interfaces != null)
 			{
-				tb.AddInterfaceImplementation(iface);
+				foreach (Type iface in interfaces)
+				{
+					tb.AddInterfaceImplementation(iface);
+				}
 			}
 			return tb;
 		}
 
 		public TypeBuilder DefineNestedType(string name, TypeAttributes attr, Type parent)
 		{
-			this.typeFlags |= TypeFlags.HasNestedTypes;
-			return this.ModuleBuilder.DefineNestedTypeHelper(this, name, attr, parent, PackingSize.Unspecified, 0);
+			return DefineNestedType(name, attr, parent, 0);
 		}
 
 		public TypeBuilder DefineNestedType(string name, TypeAttributes attr, Type parent, int typeSize)
 		{
-			this.typeFlags |= TypeFlags.HasNestedTypes;
-			return this.ModuleBuilder.DefineNestedTypeHelper(this, name, attr, parent, PackingSize.Unspecified, typeSize);
+			return DefineNestedType(name, attr, parent, PackingSize.Unspecified, typeSize);
 		}
 
 		public TypeBuilder DefineNestedType(string name, TypeAttributes attr, Type parent, PackingSize packSize)
 		{
+			return DefineNestedType(name, attr, parent, packSize, 0);
+		}
+
+		private TypeBuilder DefineNestedType(string name, TypeAttributes attr, Type parent, PackingSize packSize, int typeSize)
+		{
+			string ns = null;
+			int lastdot = name.LastIndexOf('.');
+			if (lastdot > 0)
+			{
+				ns = name.Substring(0, lastdot);
+				name = name.Substring(lastdot + 1);
+			}
+			TypeBuilder typeBuilder = __DefineNestedType(ns, name);
+			typeBuilder.__SetAttributes(attr);
+			typeBuilder.SetParent(parent);
+			if (packSize != PackingSize.Unspecified || typeSize != 0)
+			{
+				typeBuilder.__SetLayout((int)packSize, typeSize);
+			}
+			return typeBuilder;
+		}
+
+		public TypeBuilder __DefineNestedType(string ns, string name)
+		{
 			this.typeFlags |= TypeFlags.HasNestedTypes;
-			return this.ModuleBuilder.DefineNestedTypeHelper(this, name, attr, parent, packSize, 0);
+			TypeBuilder typeBuilder = this.ModuleBuilder.DefineType(this, ns, name);
+			NestedClassTable.Record rec = new NestedClassTable.Record();
+			rec.NestedClass = typeBuilder.MetadataToken;
+			rec.EnclosingClass = this.MetadataToken;
+			this.ModuleBuilder.NestedClass.AddRecord(rec);
+			return typeBuilder;
 		}
 
 		public void SetParent(Type parent)
 		{
-			baseType = parent;
+			lazyBaseType = parent;
 		}
 
 		public void AddInterfaceImplementation(Type interfaceType)
@@ -472,34 +494,33 @@ namespace IKVM.Reflection.Emit
 			interfaces.Add(interfaceType);
 		}
 
+		public void __SetInterfaceImplementationCustomAttribute(Type interfaceType, CustomAttributeBuilder cab)
+		{
+			this.ModuleBuilder.SetInterfaceImplementationCustomAttribute(this, interfaceType, cab);
+		}
+
 		public int Size
 		{
-			get
-			{
-				for (int i = 0; i < this.ModuleBuilder.ClassLayout.records.Length; i++)
-				{
-					if (this.ModuleBuilder.ClassLayout.records[i].Parent == token)
-					{
-						return this.ModuleBuilder.ClassLayout.records[i].ClassSize;
-					}
-				}
-				return 0;
-			}
+			get { return size; }
 		}
 
 		public PackingSize PackingSize
 		{
-			get
-			{
-				for (int i = 0; i < this.ModuleBuilder.ClassLayout.records.Length; i++)
-				{
-					if (this.ModuleBuilder.ClassLayout.records[i].Parent == token)
-					{
-						return (PackingSize)this.ModuleBuilder.ClassLayout.records[i].PackingSize;
-					}
-				}
-				return PackingSize.Unspecified;
-			}
+			get { return (PackingSize)pack; }
+		}
+
+		public override bool __GetLayout(out int packingSize, out int typeSize)
+		{
+			packingSize = this.pack;
+			typeSize = this.size;
+			return hasLayout;
+		}
+
+		public void __SetLayout(int packingSize, int typesize)
+		{
+			this.pack = (short)packingSize;
+			this.size = typesize;
+			this.hasLayout = true;
 		}
 
 		private void SetStructLayoutPseudoCustomAttribute(CustomAttributeBuilder customBuilder)
@@ -514,18 +535,12 @@ namespace IKVM.Reflection.Emit
 			{
 				layout = (LayoutKind)val;
 			}
-			int? pack = (int?)customBuilder.GetFieldValue("Pack");
-			int? size = (int?)customBuilder.GetFieldValue("Size");
-			if (pack.HasValue || size.HasValue)
-			{
-				ClassLayoutTable.Record rec = new ClassLayoutTable.Record();
-				rec.PackingSize = (short)(pack ?? 0);
-				rec.ClassSize = size ?? 0;
-				rec.Parent = token;
-				this.ModuleBuilder.ClassLayout.AddOrReplaceRecord(rec);
-			}
+			StructLayoutAttribute attr = new StructLayoutAttribute(layout);
+			attr.Pack = (int?)customBuilder.GetFieldValue("Pack") ?? 0;
+			attr.Size = (int?)customBuilder.GetFieldValue("Size") ?? 0;
+			attr.CharSet = customBuilder.GetFieldValue<CharSet>("CharSet") ?? CharSet.None;
 			attribs &= ~TypeAttributes.LayoutMask;
-			switch (layout)
+			switch (attr.Value)
 			{
 				case LayoutKind.Auto:
 					attribs |= TypeAttributes.AutoLayout;
@@ -537,9 +552,8 @@ namespace IKVM.Reflection.Emit
 					attribs |= TypeAttributes.SequentialLayout;
 					break;
 			}
-			CharSet? charSet = customBuilder.GetFieldValue<CharSet>("CharSet");
 			attribs &= ~TypeAttributes.StringFormatMask;
-			switch (charSet ?? CharSet.None)
+			switch (attr.CharSet)
 			{
 				case CharSet.None:
 				case CharSet.Ansi:
@@ -552,6 +566,9 @@ namespace IKVM.Reflection.Emit
 					attribs |= TypeAttributes.UnicodeClass;
 					break;
 			}
+			pack = (short)attr.Pack;
+			size = attr.Size;
+			hasLayout = pack != 0 || size != 0;
 		}
 
 		public void SetCustomAttribute(ConstructorInfo con, byte[] binaryAttribute)
@@ -621,14 +638,9 @@ namespace IKVM.Reflection.Emit
 			return Util.Copy(gtpb);
 		}
 
-		public override Type[][] __GetGenericArgumentsOptionalCustomModifiers()
-		{
-			return gtpb == null ? Empty<Type[]>.Array : Util.Copy(new Type[gtpb.Length][]);
-		}
-
-		public override Type[][] __GetGenericArgumentsRequiredCustomModifiers()
+		public override CustomModifiers[] __GetGenericArgumentsCustomModifiers()
 		{
-			return gtpb == null ? Empty<Type[]>.Array : Util.Copy(new Type[gtpb.Length][]);
+			return gtpb == null ? Empty<CustomModifiers>.Array : new CustomModifiers[gtpb.Length];
 		}
 
 		internal override Type GetGenericTypeArgument(int index)
@@ -654,6 +666,14 @@ namespace IKVM.Reflection.Emit
 				throw new NotImplementedException();
 			}
 			typeFlags |= TypeFlags.Baked;
+			if (hasLayout)
+			{
+				ClassLayoutTable.Record rec = new ClassLayoutTable.Record();
+				rec.PackingSize = pack;
+				rec.ClassSize = size;
+				rec.Parent = token;
+				this.ModuleBuilder.ClassLayout.AddRecord(rec);
+			}
 			foreach (MethodBuilder mb in methods)
 			{
 				mb.Bake();
@@ -662,9 +682,13 @@ namespace IKVM.Reflection.Emit
 			{
 				this.ModuleBuilder.AddDeclarativeSecurity(token, declarativeSecurity);
 			}
-			if (baseType != null)
+			if (!IsModulePseudoType)
 			{
-				extends = this.ModuleBuilder.GetTypeToken(baseType).Token;
+				Type baseType = this.BaseType;
+				if (baseType != null)
+				{
+					extends = this.ModuleBuilder.GetTypeToken(baseType).Token;
+				}
 			}
 			if (interfaces != null)
 			{
@@ -707,55 +731,65 @@ namespace IKVM.Reflection.Emit
 
 		public override Type BaseType
 		{
-			get { return baseType; }
-		}
-
-		public override string FullName
-		{
 			get
 			{
-				if (this.IsNested)
-				{
-					return this.DeclaringType.FullName + "+" + nameOrFullName;
-				}
-				else
+				if (lazyBaseType == null && !IsInterface)
 				{
-					return nameOrFullName;
+					Type obj = Module.universe.System_Object;
+					if (this != obj)
+					{
+						lazyBaseType = obj;
+					}
 				}
+				return lazyBaseType;
 			}
 		}
 
-		public override string Name
+		public override string FullName
 		{
 			get
 			{
 				if (this.IsNested)
 				{
-					return nameOrFullName;
+					return this.DeclaringType.FullName + "+" + TypeNameParser.Escape(name);
+				}
+				if (ns == null)
+				{
+					return TypeNameParser.Escape(name);
 				}
 				else
 				{
-					return base.Name;
+					return TypeNameParser.Escape(ns) + "." + TypeNameParser.Escape(name);
 				}
 			}
 		}
 
+		public override string __Name
+		{
+			get { return name; }
+		}
+
+		public override string __Namespace
+		{
+			get { return ns; }
+		}
+
+		public override string Name
+		{
+			// FXBUG for a TypeBuilder the name is not escaped
+			get { return name; }
+		}
+
 		public override string Namespace
 		{
 			get
 			{
 				// for some reason, TypeBuilder doesn't return null (and mcs depends on this)
-				return base.Namespace ?? "";
+				// note also that we don't return the declaring type namespace for nested types
+				return ns ?? "";
 			}
 		}
 
-		internal string GetBakedNamespace()
-		{
-			// if you refer to the TypeBuilder via its baked Type, Namespace will return null
-			// for the empty namespace (instead of "" like TypeBuilder.Namespace above does)
-			return base.Namespace;
-		}
-
 		public override TypeAttributes Attributes
 		{
 			get { return attribs; }
@@ -793,20 +827,22 @@ namespace IKVM.Reflection.Emit
 		{
 			get
 			{
-				StructLayoutAttribute attr;
-				if ((attribs & TypeAttributes.ExplicitLayout) != 0)
-				{
-					attr = new StructLayoutAttribute(LayoutKind.Explicit);
-					attr.Pack = 8;
-					attr.Size = 0;
-					this.ModuleBuilder.ClassLayout.GetLayout(token, ref attr.Pack, ref attr.Size);
-				}
-				else
+				LayoutKind layout;
+				switch (attribs & TypeAttributes.LayoutMask)
 				{
-					attr = new StructLayoutAttribute((attribs & TypeAttributes.SequentialLayout) != 0 ? LayoutKind.Sequential : LayoutKind.Auto);
-					attr.Pack = 8;
-					attr.Size = 0;
+					case TypeAttributes.ExplicitLayout:
+						layout = LayoutKind.Explicit;
+						break;
+					case TypeAttributes.SequentialLayout:
+						layout = LayoutKind.Sequential;
+						break;
+					default:
+						layout = LayoutKind.Auto;
+						break;
 				}
+				StructLayoutAttribute attr = new StructLayoutAttribute(layout);
+				attr.Pack = (ushort)pack;
+				attr.Size = size;
 				switch (attribs & TypeAttributes.StringFormatMask)
 				{
 					case TypeAttributes.AutoClass:
@@ -818,6 +854,9 @@ namespace IKVM.Reflection.Emit
 					case TypeAttributes.AnsiClass:
 						attr.CharSet = CharSet.Ansi;
 						break;
+					default:
+						attr.CharSet = CharSet.None;
+						break;
 				}
 				return attr;
 			}
@@ -1022,142 +1061,135 @@ namespace IKVM.Reflection.Emit
 
 	sealed class BakedType : Type
 	{
-		private readonly TypeBuilder typeBuilder;
-
 		internal BakedType(TypeBuilder typeBuilder)
+			: base(typeBuilder)
 		{
-			this.typeBuilder = typeBuilder;
 		}
 
 		public override string AssemblyQualifiedName
 		{
-			get { return typeBuilder.AssemblyQualifiedName; }
+			get { return underlyingType.AssemblyQualifiedName; }
 		}
 
 		public override Type BaseType
 		{
-			get { return typeBuilder.BaseType; }
+			get { return underlyingType.BaseType; }
 		}
 
-		public override string Name
+		public override string __Name
 		{
-			get { return typeBuilder.Name; }
+			get { return underlyingType.__Name; }
 		}
 
-		public override string Namespace
+		public override string __Namespace
 		{
-			get { return typeBuilder.GetBakedNamespace(); }
+			get { return underlyingType.__Namespace; }
+		}
+
+		public override string Name
+		{
+			// we need to escape here, because TypeBuilder.Name does not escape
+			get { return TypeNameParser.Escape(underlyingType.__Name); }
 		}
 
 		public override string FullName
 		{
-			get { return typeBuilder.FullName; }
+			get { return GetFullName(); }
 		}
 
 		public override TypeAttributes Attributes
 		{
-			get { return typeBuilder.Attributes; }
+			get { return underlyingType.Attributes; }
 		}
 
 		public override Type[] __GetDeclaredInterfaces()
 		{
-			return typeBuilder.__GetDeclaredInterfaces();
+			return underlyingType.__GetDeclaredInterfaces();
 		}
 
 		public override MethodBase[] __GetDeclaredMethods()
 		{
-			return typeBuilder.__GetDeclaredMethods();
+			return underlyingType.__GetDeclaredMethods();
 		}
 
 		public override __MethodImplMap __GetMethodImplMap()
 		{
-			return typeBuilder.__GetMethodImplMap();
+			return underlyingType.__GetMethodImplMap();
 		}
 
 		public override FieldInfo[] __GetDeclaredFields()
 		{
-			return typeBuilder.__GetDeclaredFields();
+			return underlyingType.__GetDeclaredFields();
 		}
 
 		public override EventInfo[] __GetDeclaredEvents()
 		{
-			return typeBuilder.__GetDeclaredEvents();
+			return underlyingType.__GetDeclaredEvents();
 		}
 
 		public override PropertyInfo[] __GetDeclaredProperties()
 		{
-			return typeBuilder.__GetDeclaredProperties();
+			return underlyingType.__GetDeclaredProperties();
 		}
 
 		public override Type[] __GetDeclaredTypes()
 		{
-			return typeBuilder.__GetDeclaredTypes();
+			return underlyingType.__GetDeclaredTypes();
 		}
 
 		public override Type DeclaringType
 		{
-			get { return typeBuilder.DeclaringType; }
+			get { return underlyingType.DeclaringType; }
 		}
 
 		public override StructLayoutAttribute StructLayoutAttribute
 		{
-			get { return typeBuilder.StructLayoutAttribute; }
-		}
-
-		public override Type UnderlyingSystemType
-		{
-			// Type.Equals/GetHashCode relies on this
-			get { return typeBuilder; }
+			get { return underlyingType.StructLayoutAttribute; }
 		}
 
 		public override Type[] GetGenericArguments()
 		{
-			return typeBuilder.GetGenericArguments();
+			return underlyingType.GetGenericArguments();
 		}
 
 		internal override Type GetGenericTypeArgument(int index)
 		{
-			return typeBuilder.GetGenericTypeArgument(index);
-		}
-
-		public override Type[][] __GetGenericArgumentsOptionalCustomModifiers()
-		{
-			return typeBuilder.__GetGenericArgumentsOptionalCustomModifiers();
+			return underlyingType.GetGenericTypeArgument(index);
 		}
 
-		public override Type[][] __GetGenericArgumentsRequiredCustomModifiers()
+		public override CustomModifiers[] __GetGenericArgumentsCustomModifiers()
 		{
-			return typeBuilder.__GetGenericArgumentsRequiredCustomModifiers();
+			return underlyingType.__GetGenericArgumentsCustomModifiers();
 		}
 
 		public override bool IsGenericType
 		{
-			get { return typeBuilder.IsGenericType; }
+			get { return underlyingType.IsGenericType; }
 		}
 
 		public override bool IsGenericTypeDefinition
 		{
-			get { return typeBuilder.IsGenericTypeDefinition; }
+			get { return underlyingType.IsGenericTypeDefinition; }
 		}
 
 		public override bool ContainsGenericParameters
 		{
-			get { return typeBuilder.ContainsGenericParameters; }
+			get { return underlyingType.ContainsGenericParameters; }
 		}
 
 		public override int MetadataToken
 		{
-			get { return typeBuilder.MetadataToken; }
+			get { return underlyingType.MetadataToken; }
 		}
 
 		public override Module Module
 		{
-			get { return typeBuilder.Module; }
+			get { return underlyingType.Module; }
 		}
 
 		internal override int GetModuleBuilderToken()
 		{
-			return typeBuilder.GetModuleBuilderToken();
+			return underlyingType.GetModuleBuilderToken();
 		}
 	}
 }
diff --git a/mcs/class/IKVM.Reflection/Enums.cs b/mcs/class/IKVM.Reflection/Enums.cs
index 7dd5b34..de429c8 100644
--- a/mcs/class/IKVM.Reflection/Enums.cs
+++ b/mcs/class/IKVM.Reflection/Enums.cs
@@ -106,6 +106,7 @@ namespace IKVM.Reflection
 	public enum ImageFileMachine
 	{
 		I386 = 332,
+		ARM = 452,
 		IA64 = 512,
 		AMD64 = 34404,
 	}
@@ -174,6 +175,7 @@ namespace IKVM.Reflection
 		Synchronized		= 0x0020,
 		NoInlining			= 0x0008,
 		NoOptimization		= 0x0040,
+		AggressiveInlining  = 0x0100,
 
 		MaxMethodImplVal	= 0xffff,
 	}
@@ -202,6 +204,7 @@ namespace IKVM.Reflection
 		Required32Bit = 2,
 		PE32Plus = 4,
 		Unmanaged32Bit = 8,
+		Preferred32Bit = 16,
 	}
 
 	public enum ProcessorArchitecture
@@ -211,6 +214,8 @@ namespace IKVM.Reflection
 		X86 = 2,
 		IA64 = 3,
 		Amd64 = 4,
+		Arm = 5,
+		// if an item is added here, make sure to update AssemblyName.ProcessorArchitecture and Fusion.ParseAssemblyName as well
 	}
 
 	[Flags]
@@ -262,6 +267,7 @@ namespace IKVM.Reflection
 		RTSpecialName = 2048,
 		Import = 4096,
 		Serializable = 8192,
+		WindowsRuntime = 16384,
 		UnicodeClass = 65536,
 		AutoClass = 131072,
 		CustomFormatClass = 196608,
diff --git a/mcs/class/IKVM.Reflection/EventInfo.cs b/mcs/class/IKVM.Reflection/EventInfo.cs
index 816acbc..658f954 100644
--- a/mcs/class/IKVM.Reflection/EventInfo.cs
+++ b/mcs/class/IKVM.Reflection/EventInfo.cs
@@ -26,6 +26,11 @@ namespace IKVM.Reflection
 {
 	public abstract class EventInfo : MemberInfo
 	{
+		// prevent external subclasses
+		internal EventInfo()
+		{
+		}
+
 		public sealed override MemberTypes MemberType
 		{
 			get { return MemberTypes.Event; }
@@ -36,6 +41,7 @@ namespace IKVM.Reflection
 		public abstract MethodInfo GetRaiseMethod(bool nonPublic);
 		public abstract MethodInfo GetRemoveMethod(bool nonPublic);
 		public abstract MethodInfo[] GetOtherMethods(bool nonPublic);
+		public abstract MethodInfo[] __GetMethods();
 		public abstract Type EventHandlerType { get; }
 		internal abstract bool IsPublic { get; }
 		internal abstract bool IsStatic { get; }
@@ -69,5 +75,10 @@ namespace IKVM.Reflection
 		{
 			return new GenericEventInfo(this.DeclaringType.BindTypeParameters(type), this);
 		}
+
+		public override string ToString()
+		{
+			return this.DeclaringType.ToString() + " " + Name;
+		}
 	}
 }
diff --git a/mcs/class/IKVM.Reflection/ExceptionHandlingClause.cs b/mcs/class/IKVM.Reflection/ExceptionHandlingClause.cs
index dddc532..3553f90 100644
--- a/mcs/class/IKVM.Reflection/ExceptionHandlingClause.cs
+++ b/mcs/class/IKVM.Reflection/ExceptionHandlingClause.cs
@@ -26,6 +26,7 @@ using IKVM.Reflection.Reader;
 
 namespace IKVM.Reflection
 {
+	[Flags]
 	public enum ExceptionHandlingClauseOptions
 	{
 		Clause  = 0x0000,
diff --git a/mcs/class/IKVM.Reflection/FieldInfo.cs b/mcs/class/IKVM.Reflection/FieldInfo.cs
index b64ea2c..dea054d 100644
--- a/mcs/class/IKVM.Reflection/FieldInfo.cs
+++ b/mcs/class/IKVM.Reflection/FieldInfo.cs
@@ -27,6 +27,11 @@ namespace IKVM.Reflection
 {
 	public abstract class FieldInfo : MemberInfo
 	{
+		// prevent external subclasses
+		internal FieldInfo()
+		{
+		}
+
 		public sealed override MemberTypes MemberType
 		{
 			get { return MemberTypes.Field; }
@@ -34,6 +39,7 @@ namespace IKVM.Reflection
 
 		public abstract FieldAttributes Attributes { get; }
 		public abstract void __GetDataFromRVA(byte[] data, int offset, int length);
+		public abstract int __FieldRVA { get; }
 		public abstract Object GetRawConstantValue();
 		internal abstract FieldSignature FieldSignature { get; }
 
@@ -42,14 +48,19 @@ namespace IKVM.Reflection
 			get { return this.FieldSignature.FieldType; }
 		}
 
+		public CustomModifiers __GetCustomModifiers()
+		{
+			return this.FieldSignature.GetCustomModifiers();
+		}
+
 		public Type[] GetOptionalCustomModifiers()
 		{
-			return this.FieldSignature.GetOptionalCustomModifiers();
+			return __GetCustomModifiers().GetOptional();
 		}
 
 		public Type[] GetRequiredCustomModifiers()
 		{
-			return this.FieldSignature.GetRequiredCustomModifiers();
+			return __GetCustomModifiers().GetRequired();
 		}
 
 		public bool IsStatic
@@ -99,7 +110,7 @@ namespace IKVM.Reflection
 
 		public bool IsAssembly
 		{
-			get { return (Attributes & FieldAttributes.FieldAccessMask) == FieldAttributes.Family; }
+			get { return (Attributes & FieldAttributes.FieldAccessMask) == FieldAttributes.Assembly; }
 		}
 
 		public bool IsFamilyAndAssembly
@@ -112,6 +123,11 @@ namespace IKVM.Reflection
 			get { return (Attributes & FieldAttributes.PinvokeImpl) != 0; }
 		}
 
+		public virtual FieldInfo __GetFieldOnTypeDefinition()
+		{
+			return this;
+		}
+
 		internal abstract int ImportTo(Emit.ModuleBuilder module);
 
 		internal virtual FieldInfo BindTypeParameters(Type type)
diff --git a/mcs/class/IKVM.Reflection/FieldSignature.cs b/mcs/class/IKVM.Reflection/FieldSignature.cs
index 0a4ff94..481fc61 100644
--- a/mcs/class/IKVM.Reflection/FieldSignature.cs
+++ b/mcs/class/IKVM.Reflection/FieldSignature.cs
@@ -34,19 +34,17 @@ namespace IKVM.Reflection
 	sealed class FieldSignature : Signature
 	{
 		private readonly Type fieldType;
-		private readonly Type[] optionalCustomModifiers;
-		private readonly Type[] requiredCustomModifiers;
+		private readonly CustomModifiers mods;
 
-		internal static FieldSignature Create(Type fieldType, Type[] optionalCustomModifiers, Type[] requiredCustomModifiers)
+		internal static FieldSignature Create(Type fieldType, CustomModifiers customModifiers)
 		{
-			return new FieldSignature(fieldType, Util.Copy(optionalCustomModifiers), Util.Copy(requiredCustomModifiers));
+			return new FieldSignature(fieldType, customModifiers);
 		}
 
-		private FieldSignature(Type fieldType, Type[] optionalCustomModifiers, Type[] requiredCustomModifiers)
+		private FieldSignature(Type fieldType, CustomModifiers mods)
 		{
 			this.fieldType = fieldType;
-			this.optionalCustomModifiers = optionalCustomModifiers;
-			this.requiredCustomModifiers = requiredCustomModifiers;
+			this.mods = mods;
 		}
 
 		public override bool Equals(object obj)
@@ -54,13 +52,12 @@ namespace IKVM.Reflection
 			FieldSignature other = obj as FieldSignature;
 			return other != null
 				&& other.fieldType.Equals(fieldType)
-				&& Util.ArrayEquals(other.optionalCustomModifiers, optionalCustomModifiers)
-				&& Util.ArrayEquals(other.requiredCustomModifiers, requiredCustomModifiers);
+				&& other.mods.Equals(mods);
 		}
 
 		public override int GetHashCode()
 		{
-			return fieldType.GetHashCode() ^ Util.GetHashCode(optionalCustomModifiers) ^ Util.GetHashCode(requiredCustomModifiers);
+			return fieldType.GetHashCode() ^ mods.GetHashCode();
 		}
 
 		internal Type FieldType
@@ -68,22 +65,16 @@ namespace IKVM.Reflection
 			get { return fieldType; }
 		}
 
-		internal Type[] GetOptionalCustomModifiers()
+		internal CustomModifiers GetCustomModifiers()
 		{
-			return Util.Copy(optionalCustomModifiers);
-		}
-
-		internal Type[] GetRequiredCustomModifiers()
-		{
-			return Util.Copy(requiredCustomModifiers);
+			return mods;
 		}
 
 		internal FieldSignature ExpandTypeParameters(Type declaringType)
 		{
 			return new FieldSignature(
 				fieldType.BindTypeParameters(declaringType),
-				BindTypeParameters(declaringType, optionalCustomModifiers),
-				BindTypeParameters(declaringType, requiredCustomModifiers));
+				mods.Bind(declaringType));
 		}
 
 		internal static FieldSignature ReadSig(ModuleReader module, ByteReader br, IGenericContext context)
@@ -92,19 +83,15 @@ namespace IKVM.Reflection
 			{
 				throw new BadImageFormatException();
 			}
-			Type fieldType;
-			Type[] optionalCustomModifiers;
-			Type[] requiredCustomModifiers;
-			ReadCustomModifiers(module, br, context, out requiredCustomModifiers, out optionalCustomModifiers);
-			fieldType = ReadType(module, br, context);
-			return new FieldSignature(fieldType, optionalCustomModifiers, requiredCustomModifiers);
+			CustomModifiers mods = CustomModifiers.Read(module, br, context);
+			Type fieldType = ReadType(module, br, context);
+			return new FieldSignature(fieldType, mods);
 		}
 
 		internal override void WriteSig(ModuleBuilder module, ByteBuffer bb)
 		{
 			bb.Write(FIELD);
-			WriteCustomModifiers(module, bb, ELEMENT_TYPE_CMOD_OPT, optionalCustomModifiers);
-			WriteCustomModifiers(module, bb, ELEMENT_TYPE_CMOD_REQD, requiredCustomModifiers);
+			WriteCustomModifiers(module, bb, mods);
 			WriteType(module, bb, fieldType);
 		}
 	}
diff --git a/mcs/class/IKVM.Reflection/Fusion.cs b/mcs/class/IKVM.Reflection/Fusion.cs
index b18a8d1..7dc7dc5 100644
--- a/mcs/class/IKVM.Reflection/Fusion.cs
+++ b/mcs/class/IKVM.Reflection/Fusion.cs
@@ -1,5 +1,5 @@
 /*
-  Copyright (C) 2010 Jeroen Frijters
+  Copyright (C) 2010-2012 Jeroen Frijters
   Copyright (C) 2011 Marek Safar
 
   This software is provided 'as-is', without any express or implied
@@ -35,24 +35,25 @@ namespace IKVM.Reflection
 		internal Version Version;
 		internal string Culture;
 		internal string PublicKeyToken;
+		internal bool? Retargetable;
+		internal ProcessorArchitecture ProcessorArchitecture;
+		internal bool HasPublicKey;
 	}
 
-	static class Fusion
+	enum ParseAssemblyResult
 	{
-		private static readonly bool UseNativeFusion = Environment.OSVersion.Platform == PlatformID.Win32NT && System.Type.GetType("Mono.Runtime") == null && Environment.GetEnvironmentVariable("IKVM_DISABLE_FUSION") == null;
+		OK,
+		GenericError,
+		DuplicateKey,
+	}
 
-		internal static bool CompareAssemblyIdentity(string assemblyIdentity1, bool unified1, string assemblyIdentity2, bool unified2, out AssemblyComparisonResult result)
+	static class Fusion
+	{
+		internal static bool CompareAssemblyIdentityNative(string assemblyIdentity1, bool unified1, string assemblyIdentity2, bool unified2, out AssemblyComparisonResult result)
 		{
-			if (UseNativeFusion)
-			{
-				bool equivalent;
-				Marshal.ThrowExceptionForHR(CompareAssemblyIdentity(assemblyIdentity1, unified1, assemblyIdentity2, unified2, out equivalent, out result));
-				return equivalent;
-			}
-			else
-			{
-				return CompareAssemblyIdentityPure(assemblyIdentity1, unified1, assemblyIdentity2, unified2, out result);
-			}
+			bool equivalent;
+			Marshal.ThrowExceptionForHR(CompareAssemblyIdentity(assemblyIdentity1, unified1, assemblyIdentity2, unified2, out equivalent, out result));
+			return equivalent;
 		}
 
 		[DllImport("fusion", CharSet = CharSet.Unicode)]
@@ -64,11 +65,18 @@ namespace IKVM.Reflection
 			ParsedAssemblyName name1;
 			ParsedAssemblyName name2;
 
-			if (!ParseAssemblyName(assemblyIdentity1, out name1)
-				|| !ParseAssemblyName(assemblyIdentity2, out name2))
+			ParseAssemblyResult r = ParseAssemblyName(assemblyIdentity1, out name1);
+			if (r != ParseAssemblyResult.OK || (r = ParseAssemblyName(assemblyIdentity2, out name2)) != ParseAssemblyResult.OK)
 			{
 				result = AssemblyComparisonResult.NonEquivalent;
-				throw new ArgumentException();
+				switch (r)
+				{
+					case ParseAssemblyResult.DuplicateKey:
+						throw new System.IO.FileLoadException();
+					case ParseAssemblyResult.GenericError:
+					default:
+						throw new ArgumentException();
+				}
 			}
 
 			bool partial = IsPartial(name1);
@@ -116,6 +124,11 @@ namespace IKVM.Reflection
 					result = partial ? AssemblyComparisonResult.EquivalentPartialFXUnified : AssemblyComparisonResult.EquivalentFXUnified;
 					return true;
 				}
+				else if (name1.Version.Revision == -1 || name2.Version.Revision == -1)
+				{
+					result = AssemblyComparisonResult.NonEquivalent;
+					throw new ArgumentException();
+				}
 				else if (name1.Version < name2.Version)
 				{
 					if (unified2)
@@ -216,12 +229,20 @@ namespace IKVM.Reflection
 			return false;
 		}
 
-		// note that this is the fusion specific parser, it is not the same as System.Reflection.AssemblyName
-		private static bool ParseAssemblyName(string fullName, out ParsedAssemblyName parsedName)
+		internal static ParseAssemblyResult ParseAssemblySimpleName(string fullName, out int pos, out string simpleName)
 		{
-			parsedName = new ParsedAssemblyName();
 			StringBuilder sb = new StringBuilder();
-			int pos = 0;
+			pos = 0;
+			simpleName = null;
+			while (pos < fullName.Length && char.IsWhiteSpace(fullName[pos]))
+			{
+				pos++;
+			}
+			char quoteOrComma = ',';
+			if (pos < fullName.Length && (fullName[pos] == '\"' || fullName[pos] == '\''))
+			{
+				quoteOrComma = fullName[pos++];
+			}
 			while (pos < fullName.Length)
 			{
 				char ch = fullName[pos++];
@@ -229,89 +250,218 @@ namespace IKVM.Reflection
 				{
 					if (pos == fullName.Length)
 					{
-						return false;
+						return ParseAssemblyResult.GenericError;
 					}
 					ch = fullName[pos++];
+					if (ch == '\\')
+					{
+						return ParseAssemblyResult.GenericError;
+					}
 				}
-				else if (ch == ',')
+				else if (ch == quoteOrComma)
 				{
+					if (ch != ',')
+					{
+						while (pos != fullName.Length)
+						{
+							ch = fullName[pos++];
+							if (ch == ',')
+							{
+								break;
+							}
+							if (!char.IsWhiteSpace(ch))
+							{
+								return ParseAssemblyResult.GenericError;
+							}
+						}
+					}
 					break;
 				}
+				else if (ch == '=' || (quoteOrComma == ',' && (ch == '\'' || ch == '"')))
+				{
+					return ParseAssemblyResult.GenericError;
+				}
 				sb.Append(ch);
 			}
-			parsedName.Name = sb.ToString().Trim();
-			if (pos < fullName.Length)
+			simpleName = sb.ToString().Trim();
+			if (simpleName.Length == 0)
+			{
+				return ParseAssemblyResult.GenericError;
+			}
+			if (pos == fullName.Length && fullName[fullName.Length - 1] == ',')
 			{
+				return ParseAssemblyResult.GenericError;
+			}
+			return ParseAssemblyResult.OK;
+		}
+
+		internal static ParseAssemblyResult ParseAssemblyName(string fullName, out ParsedAssemblyName parsedName)
+		{
+			parsedName = new ParsedAssemblyName();
+			int pos;
+			ParseAssemblyResult res = ParseAssemblySimpleName(fullName, out pos, out parsedName.Name);
+			if (res != ParseAssemblyResult.OK || pos == fullName.Length)
+			{
+				return res;
+			}
+			else
+			{
+				System.Collections.Generic.Dictionary<string, string> unknownAttributes = null;
+				bool hasProcessorArchitecture = false;
 				string[] parts = fullName.Substring(pos).Split(',');
 				for (int i = 0; i < parts.Length; i++)
 				{
 					string[] kv = parts[i].Split('=');
 					if (kv.Length != 2)
 					{
-						return false;
+						return ParseAssemblyResult.GenericError;
 					}
 					switch (kv[0].Trim().ToLowerInvariant())
 					{
 						case "version":
 							if (parsedName.Version != null)
 							{
-								return false;
+								return ParseAssemblyResult.DuplicateKey;
 							}
 							if (!ParseVersion(kv[1].Trim(), out parsedName.Version))
 							{
-								return false;
+								return ParseAssemblyResult.GenericError;
 							}
 							break;
 						case "culture":
 							if (parsedName.Culture != null)
 							{
-								return false;
+								return ParseAssemblyResult.DuplicateKey;
 							}
 							if (!ParseCulture(kv[1].Trim(), out parsedName.Culture))
 							{
-								return false;
+								return ParseAssemblyResult.GenericError;
 							}
 							break;
 						case "publickeytoken":
 							if (parsedName.PublicKeyToken != null)
 							{
-								return false;
+								return ParseAssemblyResult.DuplicateKey;
 							}
 							if (!ParsePublicKeyToken(kv[1].Trim(), out parsedName.PublicKeyToken))
 							{
-								return false;
+								return ParseAssemblyResult.GenericError;
 							}
 							break;
 						case "publickey":
 							if (parsedName.PublicKeyToken != null)
 							{
-								return false;
+								return ParseAssemblyResult.DuplicateKey;
 							}
 							if (!ParsePublicKey(kv[1].Trim(), out parsedName.PublicKeyToken))
 							{
-								return false;
+								return ParseAssemblyResult.GenericError;
 							}
+							parsedName.HasPublicKey = true;
+							break;
+						case "retargetable":
+							if (parsedName.Retargetable.HasValue)
+							{
+								return ParseAssemblyResult.DuplicateKey;
+							}
+							switch (kv[1].Trim().ToLowerInvariant())
+							{
+								case "yes":
+									parsedName.Retargetable = true;
+									break;
+								case "no":
+									parsedName.Retargetable = false;
+									break;
+								default:
+									return ParseAssemblyResult.GenericError;
+							}
+							break;
+						case "processorarchitecture":
+							if (hasProcessorArchitecture)
+							{
+								return ParseAssemblyResult.DuplicateKey;
+							}
+							hasProcessorArchitecture = true;
+							switch (kv[1].Trim().ToLowerInvariant())
+							{
+								case "none":
+									parsedName.ProcessorArchitecture = ProcessorArchitecture.None;
+									break;
+								case "msil":
+									parsedName.ProcessorArchitecture = ProcessorArchitecture.MSIL;
+									break;
+								case "x86":
+									parsedName.ProcessorArchitecture = ProcessorArchitecture.X86;
+									break;
+								case "ia64":
+									parsedName.ProcessorArchitecture = ProcessorArchitecture.IA64;
+									break;
+								case "amd64":
+									parsedName.ProcessorArchitecture = ProcessorArchitecture.Amd64;
+									break;
+								case "arm":
+									parsedName.ProcessorArchitecture = ProcessorArchitecture.Arm;
+									break;
+								default:
+									return ParseAssemblyResult.GenericError;
+							}
+							break;
+						default:
+							if (kv[1].Trim() == "")
+							{
+								return ParseAssemblyResult.GenericError;
+							}
+							if (unknownAttributes == null)
+							{
+								unknownAttributes = new System.Collections.Generic.Dictionary<string, string>();
+							}
+							if (unknownAttributes.ContainsKey(kv[0].Trim().ToLowerInvariant()))
+							{
+								return ParseAssemblyResult.DuplicateKey;
+							}
+							unknownAttributes.Add(kv[0].Trim().ToLowerInvariant(), null);
 							break;
 					}
 				}
 			}
-			return true;
+			return ParseAssemblyResult.OK;
 		}
 
 		private static bool ParseVersion(string str, out Version version)
 		{
 			string[] parts = str.Split('.');
-			if (parts.Length == 4)
+			if (parts.Length < 2 || parts.Length > 4)
+			{
+				version = null;
+				ushort dummy;
+				// if the version consists of a single integer, it is invalid, but not invalid enough to fail the parse of the whole assembly name
+				return parts.Length == 1 && ushort.TryParse(parts[0], System.Globalization.NumberStyles.Integer, null, out dummy);
+			}
+			if (parts[0] == "" || parts[1] == "")
+			{
+				// this is a strange scenario, the version is invalid, but not invalid enough to fail the parse of the whole assembly name
+				version = null;
+				return true;
+			}
+			ushort major, minor, build = 65535, revision = 65535;
+			if (ushort.TryParse(parts[0], System.Globalization.NumberStyles.Integer, null, out major)
+				&& ushort.TryParse(parts[1], System.Globalization.NumberStyles.Integer, null, out minor)
+				&& (parts.Length <= 2 || parts[2] == "" || ushort.TryParse(parts[2], System.Globalization.NumberStyles.Integer, null, out build))
+				&& (parts.Length <= 3 || parts[3] == "" || (parts[2] != "" && ushort.TryParse(parts[3], System.Globalization.NumberStyles.Integer, null, out revision))))
 			{
-				ushort major, minor, build, revision;
-				if (ushort.TryParse(parts[0], System.Globalization.NumberStyles.Integer, null, out major)
-					&& ushort.TryParse(parts[1], System.Globalization.NumberStyles.Integer, null, out minor)
-					&& ushort.TryParse(parts[2], System.Globalization.NumberStyles.Integer, null, out build)
-					&& ushort.TryParse(parts[3], System.Globalization.NumberStyles.Integer, null, out revision))
+				if (parts.Length == 4 && parts[3] != "" && parts[2] != "")
 				{
 					version = new Version(major, minor, build, revision);
-					return true;
 				}
+				else if (parts.Length == 3 && parts[2] != "")
+				{
+					version = new Version(major, minor, build);
+				}
+				else
+				{
+					version = new Version(major, minor);
+				}
+				return true;
 			}
 			version = null;
 			return false;
@@ -347,7 +497,7 @@ namespace IKVM.Reflection
 				return false;
 			}
 			// HACK use AssemblyName to convert PublicKey to PublicKeyToken
-			byte[] token = new AssemblyName("Foo, PublicKey=" + str).GetPublicKeyToken();
+			byte[] token = new System.Reflection.AssemblyName("Foo, PublicKey=" + str).GetPublicKeyToken();
 			StringBuilder sb = new StringBuilder(token.Length * 2);
 			for (int i = 0; i < token.Length; i++)
 			{
@@ -366,21 +516,5 @@ namespace IKVM.Reflection
 		{
 			return name.PublicKeyToken != null && name.PublicKeyToken != "null";
 		}
-
-		private static bool IsEqual(byte[] b1, byte[] b2)
-		{
-			if (b1.Length != b2.Length)
-			{
-				return false;
-			}
-			for (int i = 0; i < b1.Length; i++)
-			{
-				if (b1[i] != b2[i])
-				{
-					return false;
-				}
-			}
-			return true;
-		}
 	}
 }
diff --git a/mcs/class/IKVM.Reflection/GenericWrappers.cs b/mcs/class/IKVM.Reflection/GenericWrappers.cs
index 8290f14..4d5041e 100644
--- a/mcs/class/IKVM.Reflection/GenericWrappers.cs
+++ b/mcs/class/IKVM.Reflection/GenericWrappers.cs
@@ -128,6 +128,11 @@ namespace IKVM.Reflection
 			throw new NotSupportedException();
 		}
 
+		public override int __MethodRVA
+		{
+			get { return method.__MethodRVA; }
+		}
+
 		public override MethodInfo MakeGenericMethod(params Type[] typeArguments)
 		{
 			return new GenericMethodInstance(declaringType, method, typeArguments);
@@ -173,7 +178,7 @@ namespace IKVM.Reflection
 				{
 					return this;
 				}
-				else if (declaringType.IsGenericType && !declaringType.IsGenericTypeDefinition)
+				else if (declaringType.IsGenericTypeInstance)
 				{
 					return new GenericMethodInstance(declaringType, method, null);
 				}
@@ -185,6 +190,11 @@ namespace IKVM.Reflection
 			throw new InvalidOperationException();
 		}
 
+		public override MethodBase __GetMethodOnTypeDefinition()
+		{
+			return method;
+		}
+
 		public override Type[] GetGenericArguments()
 		{
 			if (methodArgs == null)
@@ -259,6 +269,21 @@ namespace IKVM.Reflection
 			System.Diagnostics.Debug.Assert(methodArgs == null);
 			return new GenericMethodInstance(declaringType.BindTypeParameters(type), method, null);
 		}
+
+		internal override bool HasThis
+		{
+			get { return method.HasThis; }
+		}
+
+		public override MethodInfo[] __GetMethodImpls()
+		{
+			MethodInfo[] methods = method.__GetMethodImpls();
+			for (int i = 0; i < methods.Length; i++)
+			{
+				methods[i] = (MethodInfo)methods[i].BindTypeParameters(declaringType);
+			}
+			return methods;
+		}
 	}
 
 	sealed class GenericFieldInstance : FieldInfo
@@ -318,6 +343,16 @@ namespace IKVM.Reflection
 			field.__GetDataFromRVA(data, offset, length);
 		}
 
+		public override int __FieldRVA
+		{
+			get { return field.__FieldRVA; }
+		}
+
+		public override FieldInfo __GetFieldOnTypeDefinition()
+		{
+			return field;
+		}
+
 		internal override IList<CustomAttributeData> GetCustomAttributesData(Type attributeType)
 		{
 			return field.GetCustomAttributesData(attributeType);
@@ -375,18 +410,9 @@ namespace IKVM.Reflection
 			get { return parameterInfo.RawDefaultValue; }
 		}
 
-		public override Type[] GetOptionalCustomModifiers()
+		public override CustomModifiers __GetCustomModifiers()
 		{
-			Type[] modifiers = parameterInfo.GetOptionalCustomModifiers();
-			Type.InplaceBindTypeParameters(method, modifiers);
-			return modifiers;
-		}
-
-		public override Type[] GetRequiredCustomModifiers()
-		{
-			Type[] modifiers = parameterInfo.GetRequiredCustomModifiers();
-			Type.InplaceBindTypeParameters(method, modifiers);
-			return modifiers;
+			return parameterInfo.__GetCustomModifiers().Bind(method);
 		}
 
 		public override MemberInfo Member
@@ -583,6 +609,16 @@ namespace IKVM.Reflection
 			return others;
 		}
 
+		public override MethodInfo[] __GetMethods()
+		{
+			MethodInfo[] others = eventInfo.__GetMethods();
+			for (int i = 0; i < others.Length; i++)
+			{
+				others[i] = Wrap(others[i]);
+			}
+			return others;
+		}
+
 		public override Type EventHandlerType
 		{
 			get { return eventInfo.EventHandlerType.BindTypeParameters(typeInstance); }
diff --git a/mcs/class/IKVM.Reflection/IKVM.Reflection.csproj b/mcs/class/IKVM.Reflection/IKVM.Reflection.csproj
index c038274..a103ec1 100644
--- a/mcs/class/IKVM.Reflection/IKVM.Reflection.csproj
+++ b/mcs/class/IKVM.Reflection/IKVM.Reflection.csproj
@@ -50,9 +50,11 @@
     <Compile Include="CustomAttributeData.cs" />
     <Compile Include="CustomAttributeNamedArgument.cs" />
     <Compile Include="CustomAttributeTypedArgument.cs" />
+    <Compile Include="CustomModifiers.cs" />
     <Compile Include="Emit\AssemblyBuilder.cs" />
     <Compile Include="Emit\ConstructorBuilder.cs" />
     <Compile Include="Emit\CustomAttributeBuilder.cs" />
+    <Compile Include="Emit\CustomModifiersBuilder.cs" />
     <Compile Include="Emit\EnumBuilder.cs" />
     <Compile Include="Emit\Enums.cs" />
     <Compile Include="Emit\EventBuilder.cs" />
@@ -93,6 +95,7 @@
     <Compile Include="MethodImplMap.cs" />
     <Compile Include="MethodInfo.cs" />
     <Compile Include="MethodSignature.cs" />
+    <Compile Include="Missing.cs" />
     <Compile Include="Module.cs" />
     <Compile Include="ParameterInfo.cs" />
     <Compile Include="ParameterModifier.cs" />
diff --git a/mcs/class/IKVM.Reflection/Impl/MdbWriter.cs b/mcs/class/IKVM.Reflection/Impl/MdbWriter.cs
index 06d3ed0..226137b 100644
--- a/mcs/class/IKVM.Reflection/Impl/MdbWriter.cs
+++ b/mcs/class/IKVM.Reflection/Impl/MdbWriter.cs
@@ -134,13 +134,16 @@ namespace IKVM.Reflection.Impl
 			return writer;
 		}
 
-		public void OpenMethod(System.Diagnostics.SymbolStore.SymbolToken token)
+		public void OpenMethod(System.Diagnostics.SymbolStore.SymbolToken method)
+		{
+			throw new NotImplementedException();
+		}
+
+		public void OpenMethod(System.Diagnostics.SymbolStore.SymbolToken token, MethodBase mb)
 		{
 			Method method = new Method();
 			method.token = token.GetToken();
-			// name doesn't appear to be used. We can look it up, but ModuleBuilder.ResolveMethod() is inefficient,
-			// so if it isn't used, why bother?
-			method.name = null; // moduleBuilder.ResolveMethod(token.GetToken()).Name;
+			method.name = mb.Name;
 			methods.Add(token.GetToken(), method);
 			currentMethod = method;
 		}
diff --git a/mcs/class/IKVM.Reflection/Impl/PdbWriter.cs b/mcs/class/IKVM.Reflection/Impl/PdbWriter.cs
index aacc6c9..b8976bb 100644
--- a/mcs/class/IKVM.Reflection/Impl/PdbWriter.cs
+++ b/mcs/class/IKVM.Reflection/Impl/PdbWriter.cs
@@ -247,6 +247,7 @@ namespace IKVM.Reflection.Impl
 		private readonly List<Method> methods = new List<Method>();
 		private readonly Dictionary<int, int> remap = new Dictionary<int, int>();
 		private readonly Dictionary<int, int> reversemap = new Dictionary<int, int>();
+		private readonly Dictionary<int, MethodBase> methodMap = new Dictionary<int, MethodBase>();
 		private Method currentMethod;
 
 		internal PdbWriter(ModuleBuilder moduleBuilder)
@@ -381,7 +382,14 @@ namespace IKVM.Reflection.Impl
 
 		public void OpenMethod(SymbolToken method)
 		{
-			currentMethod = new Method(method.GetToken());
+			throw new NotImplementedException();
+		}
+
+		public void OpenMethod(SymbolToken method, MethodBase mb)
+		{
+			int token = method.GetToken();
+			currentMethod = new Method(token);
+			methodMap.Add(token, mb);
 		}
 
 		public void CloseMethod()
@@ -754,7 +762,7 @@ namespace IKVM.Reflection.Impl
 			{
 				throw new NotImplementedException();
 			}
-			MethodBase method = moduleBuilder.ResolveMethod(reversemap[mb]);
+			MethodBase method = methodMap[reversemap[mb]];
 			WriteToken(pClass, method.DeclaringType);
 			WriteString(szMethod, pchMethod, method.Name, cchMethod);
 		}
diff --git a/mcs/class/IKVM.Reflection/Impl/SymbolSupport.cs b/mcs/class/IKVM.Reflection/Impl/SymbolSupport.cs
index 945187e..b1e1420 100644
--- a/mcs/class/IKVM.Reflection/Impl/SymbolSupport.cs
+++ b/mcs/class/IKVM.Reflection/Impl/SymbolSupport.cs
@@ -46,16 +46,19 @@ namespace IKVM.Reflection.Impl
 		byte[] GetDebugInfo(ref IMAGE_DEBUG_DIRECTORY idd);
 		void RemapToken(int oldToken, int newToken);
 		void DefineLocalVariable2(string name, FieldAttributes attributes, int signature, SymAddressKind addrKind, int addr1, int addr2, int addr3, int startOffset, int endOffset);
+		void OpenMethod(SymbolToken symbolToken, MethodBase mb);
 	}
 
 	static class SymbolSupport
 	{
+#if !NO_SYMBOL_WRITER
 		private static readonly bool runningOnMono = System.Type.GetType("Mono.Runtime") != null;
+#endif
 
 		internal static ISymbolWriterImpl CreateSymbolWriterFor(ModuleBuilder moduleBuilder)
 		{
-#if !NO_SYMBOL_WRITER
-			throw new NotSupportedException ("IKVM.Reflection with no symbol writer support");
+#if NO_SYMBOL_WRITER
+			throw new NotSupportedException("IKVM.Reflection compiled with NO_SYMBOL_WRITER does not support writing debugging symbols.");
 #else
 			if (runningOnMono)
 			{
diff --git a/mcs/class/IKVM.Reflection/LocalVariableInfo.cs b/mcs/class/IKVM.Reflection/LocalVariableInfo.cs
index a6875d9..e7f0567 100644
--- a/mcs/class/IKVM.Reflection/LocalVariableInfo.cs
+++ b/mcs/class/IKVM.Reflection/LocalVariableInfo.cs
@@ -1,5 +1,5 @@
 /*
-  Copyright (C) 2009 Jeroen Frijters
+  Copyright (C) 2009-2011 Jeroen Frijters
 
   This software is provided 'as-is', without any express or implied
   warranty.  In no event will the authors be held liable for any damages
@@ -25,32 +25,39 @@ using System;
 
 namespace IKVM.Reflection
 {
-	public class LocalVariableInfo
+	public sealed class LocalVariableInfo
 	{
 		private readonly int index;
 		private readonly Type type;
 		private readonly bool pinned;
+		private readonly CustomModifiers customModifiers;
 
-		internal LocalVariableInfo(int index, Type type, bool pinned)
+		internal LocalVariableInfo(int index, Type type, bool pinned, CustomModifiers customModifiers)
 		{
 			this.index = index;
 			this.type = type;
 			this.pinned = pinned;
+			this.customModifiers = customModifiers;
 		}
 
-		public virtual bool IsPinned
+		public bool IsPinned
 		{
 			get { return pinned; }
 		}
 
-		public virtual int LocalIndex
+		public int LocalIndex
 		{
 			get { return index; }
 		}
 
-		public virtual Type LocalType
+		public Type LocalType
 		{
 			get { return type; }
 		}
+
+		public CustomModifiers __GetCustomModifiers()
+		{
+			return customModifiers;
+		}
 	}
 }
diff --git a/mcs/class/IKVM.Reflection/ManifestResourceInfo.cs b/mcs/class/IKVM.Reflection/ManifestResourceInfo.cs
index a17b0d1..296e4ef 100644
--- a/mcs/class/IKVM.Reflection/ManifestResourceInfo.cs
+++ b/mcs/class/IKVM.Reflection/ManifestResourceInfo.cs
@@ -27,7 +27,7 @@ using IKVM.Reflection.Metadata;
 
 namespace IKVM.Reflection
 {
-	public class ManifestResourceInfo
+	public sealed class ManifestResourceInfo
 	{
 		private readonly ModuleReader module;
 		private readonly int index;
@@ -38,6 +38,16 @@ namespace IKVM.Reflection
 			this.index = index;
 		}
 
+		public ResourceAttributes __ResourceAttributes
+		{
+			get { return (ResourceAttributes)module.ManifestResource.records[index].Flags; }
+		}
+
+		public int __Offset
+		{
+			get { return module.ManifestResource.records[index].Offset; }
+		}
+
 		public ResourceLocation ResourceLocation
 		{
 			get
diff --git a/mcs/class/IKVM.Reflection/MarshalSpec.cs b/mcs/class/IKVM.Reflection/MarshalSpec.cs
index 7078196..596830e 100644
--- a/mcs/class/IKVM.Reflection/MarshalSpec.cs
+++ b/mcs/class/IKVM.Reflection/MarshalSpec.cs
@@ -1,5 +1,5 @@
 /*
-  Copyright (C) 2008, 2010 Jeroen Frijters
+  Copyright (C) 2008-2011 Jeroen Frijters
 
   This software is provided 'as-is', without any express or implied
   warranty.  In no event will the authors be held liable for any damages
@@ -38,131 +38,142 @@ namespace IKVM.Reflection
 
 		internal static CustomAttributeData GetMarshalAsAttribute(Module module, int token)
 		{
-			// TODO use binary search?
-			for (int i = 0; i < module.FieldMarshal.records.Length; i++)
+			foreach (int i in module.FieldMarshal.Filter(token))
 			{
-				if (module.FieldMarshal.records[i].Parent == token)
+				ByteReader blob = module.GetBlob(module.FieldMarshal.records[i].NativeType);
+				UnmanagedType unmanagedType = (UnmanagedType)blob.ReadCompressedInt();
+				UnmanagedType? arraySubType = null;
+				short? sizeParamIndex = null;
+				int? sizeConst = null;
+				VarEnum? safeArraySubType = null;
+				Type safeArrayUserDefinedSubType = null;
+				int? iidParameterIndex = null;
+				string marshalType = null;
+				string marshalCookie = null;
+				Type marshalTypeRef = null;
+				if (unmanagedType == UnmanagedType.LPArray)
 				{
-					ByteReader blob = module.GetBlob(module.FieldMarshal.records[i].NativeType);
-					UnmanagedType unmanagedType = (UnmanagedType)blob.ReadCompressedInt();
-					UnmanagedType? arraySubType = null;
-					short? sizeParamIndex = null;
-					int? sizeConst = null;
-					VarEnum? safeArraySubType = null;
-					Type safeArrayUserDefinedSubType = null;
-					int? iidParameterIndex = null;
-					string marshalType = null;
-					string marshalCookie = null;
-					Type marshalTypeRef = null;
-					if (unmanagedType == UnmanagedType.LPArray)
+					arraySubType = (UnmanagedType)blob.ReadCompressedInt();
+					if (arraySubType == NATIVE_TYPE_MAX)
 					{
-						arraySubType = (UnmanagedType)blob.ReadCompressedInt();
-						if (arraySubType == NATIVE_TYPE_MAX)
-						{
-							arraySubType = null;
-						}
-						if (blob.Length != 0)
-						{
-							sizeParamIndex = (short)blob.ReadCompressedInt();
-							if (blob.Length != 0)
-							{
-								sizeConst = blob.ReadCompressedInt();
-								if (blob.Length != 0 && blob.ReadCompressedInt() == 0)
-								{
-									sizeParamIndex = null;
-								}
-							}
-						}
+						arraySubType = null;
 					}
-					else if (unmanagedType == UnmanagedType.SafeArray)
+					if (blob.Length != 0)
 					{
+						sizeParamIndex = (short)blob.ReadCompressedInt();
 						if (blob.Length != 0)
 						{
-							safeArraySubType = (VarEnum)blob.ReadCompressedInt();
-							if (blob.Length != 0)
+							sizeConst = blob.ReadCompressedInt();
+							if (blob.Length != 0 && blob.ReadCompressedInt() == 0)
 							{
-								safeArrayUserDefinedSubType = ReadType(module, blob);
+								sizeParamIndex = null;
 							}
 						}
 					}
-					else if (unmanagedType == UnmanagedType.ByValArray)
+				}
+				else if (unmanagedType == UnmanagedType.SafeArray)
+				{
+					if (blob.Length != 0)
 					{
-						sizeConst = blob.ReadCompressedInt();
+						safeArraySubType = (VarEnum)blob.ReadCompressedInt();
 						if (blob.Length != 0)
 						{
-							arraySubType = (UnmanagedType)blob.ReadCompressedInt();
+							safeArrayUserDefinedSubType = ReadType(module, blob);
 						}
 					}
-					else if (unmanagedType == UnmanagedType.ByValTStr)
-					{
-						sizeConst = blob.ReadCompressedInt();
-					}
-					else if (unmanagedType == UnmanagedType.Interface
-						|| unmanagedType == UnmanagedType.IDispatch
-						|| unmanagedType == UnmanagedType.IUnknown)
+				}
+				else if (unmanagedType == UnmanagedType.ByValArray)
+				{
+					sizeConst = blob.ReadCompressedInt();
+					if (blob.Length != 0)
 					{
-						if (blob.Length != 0)
-						{
-							iidParameterIndex = blob.ReadCompressedInt();
-						}
+						arraySubType = (UnmanagedType)blob.ReadCompressedInt();
 					}
-					else if (unmanagedType == UnmanagedType.CustomMarshaler)
+				}
+				else if (unmanagedType == UnmanagedType.ByValTStr)
+				{
+					sizeConst = blob.ReadCompressedInt();
+				}
+				else if (unmanagedType == UnmanagedType.Interface
+					|| unmanagedType == UnmanagedType.IDispatch
+					|| unmanagedType == UnmanagedType.IUnknown)
+				{
+					if (blob.Length != 0)
 					{
-						blob.ReadCompressedInt();
-						blob.ReadCompressedInt();
-						marshalType = ReadString(blob);
-						marshalCookie = ReadString(blob);
-						marshalTypeRef = module.Assembly.GetType(marshalType) ?? module.universe.GetType(marshalType);
+						iidParameterIndex = blob.ReadCompressedInt();
 					}
+				}
+				else if (unmanagedType == UnmanagedType.CustomMarshaler)
+				{
+					blob.ReadCompressedInt();
+					blob.ReadCompressedInt();
+					marshalType = ReadString(blob);
+					marshalCookie = ReadString(blob);
 
-					Type typeofMarshalAs = module.universe.System_Runtime_InteropServices_MarshalAsAttribute;
-					Type typeofUnmanagedType = module.universe.System_Runtime_InteropServices_UnmanagedType;
-					Type typeofVarEnum = module.universe.System_Runtime_InteropServices_VarEnum;
-					Type typeofType = module.universe.System_Type;
-					List<CustomAttributeNamedArgument> named = new List<CustomAttributeNamedArgument>();
-					if (arraySubType != null)
-					{
-						named.Add(new CustomAttributeNamedArgument(typeofMarshalAs.GetField("ArraySubType"), new CustomAttributeTypedArgument(typeofUnmanagedType, arraySubType.Value)));
-					}
-					if (sizeParamIndex != null)
-					{
-						named.Add(new CustomAttributeNamedArgument(typeofMarshalAs.GetField("SizeParamIndex"), new CustomAttributeTypedArgument(module.universe.System_Int16, sizeParamIndex.Value)));
-					}
-					if (sizeConst != null)
-					{
-						named.Add(new CustomAttributeNamedArgument(typeofMarshalAs.GetField("SizeConst"), new CustomAttributeTypedArgument(module.universe.System_Int32, sizeConst.Value)));
-					}
-					if (safeArraySubType != null)
-					{
-						named.Add(new CustomAttributeNamedArgument(typeofMarshalAs.GetField("SafeArraySubType"), new CustomAttributeTypedArgument(typeofVarEnum, safeArraySubType.Value)));
-					}
-					if (safeArrayUserDefinedSubType != null)
-					{
-						named.Add(new CustomAttributeNamedArgument(typeofMarshalAs.GetField("SafeArrayUserDefinedSubType"), new CustomAttributeTypedArgument(typeofType, safeArrayUserDefinedSubType)));
-					}
-					if (iidParameterIndex != null)
+					TypeNameParser parser = TypeNameParser.Parse(marshalType, false);
+					if (!parser.Error)
 					{
-						named.Add(new CustomAttributeNamedArgument(typeofMarshalAs.GetField("IidParameterIndex"), new CustomAttributeTypedArgument(module.universe.System_Int32, iidParameterIndex.Value)));
+						marshalTypeRef = parser.GetType(module.universe, module.Assembly, false, marshalType, false);
 					}
-					if (marshalType != null)
-					{
-						named.Add(new CustomAttributeNamedArgument(typeofMarshalAs.GetField("MarshalType"), new CustomAttributeTypedArgument(module.universe.System_String, marshalType)));
-					}
-					if (marshalTypeRef != null)
-					{
-						named.Add(new CustomAttributeNamedArgument(typeofMarshalAs.GetField("MarshalTypeRef"), new CustomAttributeTypedArgument(module.universe.System_Type, marshalTypeRef)));
-					}
-					if (marshalCookie != null)
-					{
-						named.Add(new CustomAttributeNamedArgument(typeofMarshalAs.GetField("MarshalCookie"), new CustomAttributeTypedArgument(module.universe.System_String, marshalCookie)));
-					}
-					ConstructorInfo constructor = typeofMarshalAs.GetConstructor(new Type[] { typeofUnmanagedType });
-					return new CustomAttributeData(constructor, new object[] { unmanagedType }, named);
 				}
+
+				Type typeofMarshalAs = module.universe.System_Runtime_InteropServices_MarshalAsAttribute;
+				Type typeofUnmanagedType = module.universe.System_Runtime_InteropServices_UnmanagedType;
+				Type typeofVarEnum = module.universe.System_Runtime_InteropServices_VarEnum;
+				Type typeofType = module.universe.System_Type;
+				List<CustomAttributeNamedArgument> named = new List<CustomAttributeNamedArgument>();
+				if (arraySubType != null)
+				{
+					AddNamedArgument(named, typeofMarshalAs, "ArraySubType", typeofUnmanagedType, arraySubType.Value);
+				}
+				if (sizeParamIndex != null)
+				{
+					AddNamedArgument(named, typeofMarshalAs, "SizeParamIndex", module.universe.System_Int16, sizeParamIndex.Value);
+				}
+				if (sizeConst != null)
+				{
+					AddNamedArgument(named, typeofMarshalAs, "SizeConst", module.universe.System_Int32, sizeConst.Value);
+				}
+				if (safeArraySubType != null)
+				{
+					AddNamedArgument(named, typeofMarshalAs, "SafeArraySubType", typeofVarEnum, safeArraySubType.Value);
+				}
+				if (safeArrayUserDefinedSubType != null)
+				{
+					AddNamedArgument(named, typeofMarshalAs, "SafeArrayUserDefinedSubType", typeofType, safeArrayUserDefinedSubType);
+				}
+				if (iidParameterIndex != null)
+				{
+					AddNamedArgument(named, typeofMarshalAs, "IidParameterIndex", module.universe.System_Int32, iidParameterIndex.Value);
+				}
+				if (marshalType != null)
+				{
+					AddNamedArgument(named, typeofMarshalAs, "MarshalType", module.universe.System_String, marshalType);
+				}
+				if (marshalTypeRef != null)
+				{
+					AddNamedArgument(named, typeofMarshalAs, "MarshalTypeRef", module.universe.System_Type, marshalTypeRef);
+				}
+				if (marshalCookie != null)
+				{
+					AddNamedArgument(named, typeofMarshalAs, "MarshalCookie", module.universe.System_String, marshalCookie);
+				}
+				ConstructorInfo constructor = typeofMarshalAs.GetPseudoCustomAttributeConstructor(typeofUnmanagedType);
+				return new CustomAttributeData(module, constructor, new object[] { unmanagedType }, named);
 			}
 			throw new BadImageFormatException();
 		}
 
+		private static void AddNamedArgument(List<CustomAttributeNamedArgument> list, Type attributeType, string fieldName, Type valueType, object value)
+		{
+			// some fields are not available on the .NET Compact Framework version of MarshalAsAttribute
+			FieldInfo field = attributeType.FindField(fieldName, FieldSignature.Create(valueType, new CustomModifiers()));
+			if (field != null)
+			{
+				list.Add(new CustomAttributeNamedArgument(field, new CustomAttributeTypedArgument(valueType, value)));
+			}
+		}
+
 		internal static void SetMarshalAsAttribute(ModuleBuilder module, int token, CustomAttributeBuilder attribute)
 		{
 			attribute = attribute.DecodeBlob(module.Assembly);
diff --git a/mcs/class/IKVM.Reflection/MemberInfo.cs b/mcs/class/IKVM.Reflection/MemberInfo.cs
index 5406c32..afa91c5 100644
--- a/mcs/class/IKVM.Reflection/MemberInfo.cs
+++ b/mcs/class/IKVM.Reflection/MemberInfo.cs
@@ -33,6 +33,11 @@ namespace IKVM.Reflection
 #pragma warning disable 660, 661
 	public abstract class MemberInfo : ICustomAttributeProvider
 	{
+		// prevent external subclasses
+		internal MemberInfo()
+		{
+		}
+
 		public abstract string Name { get; }
 		public abstract Type DeclaringType { get; }
 		public abstract MemberTypes MemberType { get; }
@@ -47,6 +52,11 @@ namespace IKVM.Reflection
 			get;
 		}
 
+		public virtual bool __IsMissing
+		{
+			get { return false; }
+		}
+
 		public bool IsDefined(Type attributeType, bool inherit)
 		{
 			return CustomAttributeData.__GetCustomAttributes(this, attributeType, inherit).Count != 0;
diff --git a/mcs/class/IKVM.Reflection/Metadata/CliHeader.cs b/mcs/class/IKVM.Reflection/Metadata/CliHeader.cs
index 90258c3..3281229 100644
--- a/mcs/class/IKVM.Reflection/Metadata/CliHeader.cs
+++ b/mcs/class/IKVM.Reflection/Metadata/CliHeader.cs
@@ -22,6 +22,7 @@
   
 */
 using System.IO;
+using IMAGE_DATA_DIRECTORY = IKVM.Reflection.Reader.IMAGE_DATA_DIRECTORY;
 
 namespace IKVM.Reflection.Metadata
 {
@@ -31,42 +32,35 @@ namespace IKVM.Reflection.Metadata
 		internal const uint COMIMAGE_FLAGS_32BITREQUIRED = 0x00000002;
 		internal const uint COMIMAGE_FLAGS_STRONGNAMESIGNED = 0x00000008;
 		internal const uint COMIMAGE_FLAGS_NATIVE_ENTRYPOINT = 0x00000010;
+		internal const uint COMIMAGE_FLAGS_32BITPREFERRED = 0x00020000;
 
 		internal uint Cb = 0x48;
 		internal ushort MajorRuntimeVersion;
 		internal ushort MinorRuntimeVersion;
-		internal uint MetaDataRVA;
-		internal uint MetaDataSize;
+		internal IMAGE_DATA_DIRECTORY MetaData;
 		internal uint Flags;
 		internal uint EntryPointToken;
-		internal uint ResourcesRVA;
-		internal uint ResourcesSize;
-		internal uint StrongNameSignatureRVA;
-		internal uint StrongNameSignatureSize;
-		internal ulong CodeManagerTable;
-		internal uint VTableFixupsRVA;
-		internal uint VTableFixupsSize;
-		internal ulong ExportAddressTableJumps;
-		internal ulong ManagedNativeHeader;
+		internal IMAGE_DATA_DIRECTORY Resources;
+		internal IMAGE_DATA_DIRECTORY StrongNameSignature;
+		internal IMAGE_DATA_DIRECTORY CodeManagerTable;
+		internal IMAGE_DATA_DIRECTORY VTableFixups;
+		internal IMAGE_DATA_DIRECTORY ExportAddressTableJumps;
+		internal IMAGE_DATA_DIRECTORY ManagedNativeHeader;
 
 		internal void Read(BinaryReader br)
 		{
 			Cb = br.ReadUInt32();
 			MajorRuntimeVersion = br.ReadUInt16();
 			MinorRuntimeVersion = br.ReadUInt16();
-			MetaDataRVA = br.ReadUInt32();
-			MetaDataSize = br.ReadUInt32();
+			MetaData.Read(br);
 			Flags = br.ReadUInt32();
 			EntryPointToken = br.ReadUInt32();
-			ResourcesRVA = br.ReadUInt32();
-			ResourcesSize = br.ReadUInt32();
-			StrongNameSignatureRVA = br.ReadUInt32();
-			StrongNameSignatureSize = br.ReadUInt32();
-			CodeManagerTable = br.ReadUInt32();
-			VTableFixupsRVA = br.ReadUInt32();
-			VTableFixupsSize = br.ReadUInt32();
-			ExportAddressTableJumps = br.ReadUInt32();
-			ManagedNativeHeader = br.ReadUInt32();
+			Resources.Read(br);
+			StrongNameSignature.Read(br);
+			CodeManagerTable.Read(br);
+			VTableFixups.Read(br);
+			ExportAddressTableJumps.Read(br);
+			ManagedNativeHeader.Read(br);
 		}
 
 		internal void Write(IKVM.Reflection.Writer.MetadataWriter mw)
@@ -74,19 +68,15 @@ namespace IKVM.Reflection.Metadata
 			mw.Write(Cb);
 			mw.Write(MajorRuntimeVersion);
 			mw.Write(MinorRuntimeVersion);
-			mw.Write(MetaDataRVA);
-			mw.Write(MetaDataSize);
+			MetaData.Write(mw);
 			mw.Write(Flags);
 			mw.Write(EntryPointToken);
-			mw.Write(ResourcesRVA);
-			mw.Write(ResourcesSize);
-			mw.Write(StrongNameSignatureRVA);
-			mw.Write(StrongNameSignatureSize);
-			mw.Write(CodeManagerTable);
-			mw.Write(VTableFixupsRVA);
-			mw.Write(VTableFixupsSize);
-			mw.Write(ExportAddressTableJumps);
-			mw.Write(ManagedNativeHeader);
+			Resources.Write(mw);
+			StrongNameSignature.Write(mw);
+			CodeManagerTable.Write(mw);
+			VTableFixups.Write(mw);
+			ExportAddressTableJumps.Write(mw);
+			ManagedNativeHeader.Write(mw);
 		}
 	}
 }
diff --git a/mcs/class/IKVM.Reflection/Metadata/Tables.cs b/mcs/class/IKVM.Reflection/Metadata/Tables.cs
index c4a5b0b..3bce69a 100644
--- a/mcs/class/IKVM.Reflection/Metadata/Tables.cs
+++ b/mcs/class/IKVM.Reflection/Metadata/Tables.cs
@@ -1,5 +1,5 @@
 /*
-  Copyright (C) 2009 Jeroen Frijters
+  Copyright (C) 2009-2012 Jeroen Frijters
 
   This software is provided 'as-is', without any express or implied
   warranty.  In no event will the authors be held liable for any damages
@@ -32,6 +32,8 @@ namespace IKVM.Reflection.Metadata
 {
 	internal abstract class Table
 	{
+		internal bool Sorted;
+
 		internal bool IsBig
 		{
 			get { return RowCount > 65535; }
@@ -421,6 +423,152 @@ namespace IKVM.Reflection.Metadata
 		{
 			throw new InvalidOperationException();
 		}
+
+#if STABLE_SORT
+		private struct OrdinalWrapper
+		{
+			internal int ordinal;
+			internal T value;
+		}
+
+		protected void Sort(IComparer<T> comparer)
+		{
+			OrdinalWrapper[] items = new OrdinalWrapper[rowCount];
+			for (int i = 0; i < items.Length; i++)
+			{
+				items[i].ordinal = i;
+				items[i].value = records[i];
+			}
+			Array.Sort(items, delegate(OrdinalWrapper x, OrdinalWrapper y)
+			{
+				int res = comparer.Compare(x.value, y.value);
+				if (res == 0)
+				{
+					res = x.ordinal.CompareTo(y.ordinal);
+				}
+				return res;
+			});
+			for (int i = 0; i < items.Length; i++)
+			{
+				records[i] = items[i].value;
+			}
+		}
+#else
+		protected void Sort(IComparer<T> comparer)
+		{
+			Array.Sort(records, 0, rowCount, comparer);
+		}
+#endif
+	}
+
+	abstract class SortedTable<T> : Table<T>
+		where T : SortedTable<T>.ISortKey
+	{
+		internal interface ISortKey
+		{
+			int Key { get; }
+		}
+
+		internal struct Enumerable
+		{
+			private readonly SortedTable<T> table;
+			private readonly int token;
+
+			internal Enumerable(SortedTable<T> table, int token)
+			{
+				this.table = table;
+				this.token = token;
+			}
+
+			public Enumerator GetEnumerator()
+			{
+				T[] records = table.records;
+				if (!table.Sorted)
+				{
+					return new Enumerator(records, table.RowCount - 1, -1, token);
+				}
+				int index = BinarySearch(records, table.RowCount, token & 0xFFFFFF);
+				if (index < 0)
+				{
+					return new Enumerator(null, 0, 1, -1);
+				}
+				int start = index;
+				while (start > 0 && (records[start - 1].Key & 0xFFFFFF) == (token & 0xFFFFFF))
+				{
+					start--;
+				}
+				int end = index;
+				int max = table.RowCount - 1;
+				while (end < max && (records[end + 1].Key & 0xFFFFFF) == (token & 0xFFFFFF))
+				{
+					end++;
+				}
+				return new Enumerator(records, end, start - 1, token);
+			}
+
+			private static int BinarySearch(T[] records, int length, int maskedToken)
+			{
+				int min = 0;
+				int max = length - 1;
+				while (min <= max)
+				{
+					int mid = min + ((max - min) / 2);
+					int maskedValue = records[mid].Key & 0xFFFFFF;
+					if (maskedToken == maskedValue)
+					{
+						return mid;
+					}
+					else if (maskedToken < maskedValue)
+					{
+						max = mid - 1;
+					}
+					else
+					{
+						min = mid + 1;
+					}
+				}
+				return -1;
+			}
+		}
+
+		internal struct Enumerator
+		{
+			private readonly T[] records;
+			private readonly int token;
+			private readonly int max;
+			private int index;
+
+			internal Enumerator(T[] records, int max, int index, int token)
+			{
+				this.records = records;
+				this.token = token;
+				this.max = max;
+				this.index = index;
+			}
+
+			public int Current
+			{
+				get { return index; }
+			}
+
+			public bool MoveNext()
+			{
+				while (index < max)
+				{
+					index++;
+					if (records[index].Key == token)
+					{
+						return true;
+					}
+				}
+				return false;
+			}
+		}
+
+		internal Enumerable Filter(int token)
+		{
+			return new Enumerable(this, token);
+		}
 	}
 
 	sealed class ModuleTable : Table<ModuleTable.Record>
@@ -574,6 +722,19 @@ namespace IKVM.Reflection.Metadata
 		}
 	}
 
+	sealed class FieldPtrTable : Table<int>
+	{
+		internal const int Index = 0x03;
+
+		internal override void Read(MetadataReader mr)
+		{
+			for (int i = 0; i < records.Length; i++)
+			{
+				records[i] = mr.ReadField();
+			}
+		}
+	}
+
 	sealed class FieldTable : Table<FieldTable.Record>
 	{
 		internal const int Index = 0x04;
@@ -610,6 +771,19 @@ namespace IKVM.Reflection.Metadata
 		}
 	}
 
+	sealed class MethodPtrTable : Table<int>
+	{
+		internal const int Index = 0x05;
+
+		internal override void Read(MetadataReader mr)
+		{
+			for (int i = 0; i < records.Length; i++)
+			{
+				records[i] = mr.ReadMethodDef();
+			}
+		}
+	}
+
 	sealed class MethodDefTable : Table<MethodDefTable.Record>
 	{
 		internal const int Index = 0x06;
@@ -659,6 +833,19 @@ namespace IKVM.Reflection.Metadata
 		}
 	}
 
+	sealed class ParamPtrTable : Table<int>
+	{
+		internal const int Index = 0x07;
+
+		internal override void Read(MetadataReader mr)
+		{
+			for (int i = 0; i < records.Length; i++)
+			{
+				records[i] = mr.ReadParam();
+			}
+		}
+	}
+
 	sealed class ParamTable : Table<ParamTable.Record>
 	{
 		internal const int Index = 0x08;
@@ -694,14 +881,19 @@ namespace IKVM.Reflection.Metadata
 		}
 	}
 
-	sealed class InterfaceImplTable : Table<InterfaceImplTable.Record>, IComparer<InterfaceImplTable.Record>
+	sealed class InterfaceImplTable : SortedTable<InterfaceImplTable.Record>, IComparer<InterfaceImplTable.Record>
 	{
 		internal const int Index = 0x09;
 
-		internal struct Record
+		internal struct Record : ISortKey
 		{
 			internal int Class;
 			internal int Interface;
+
+			int ISortKey.Key
+			{
+				get { return Class; }
+			}
 		}
 
 		internal override void Read(MetadataReader mr)
@@ -753,14 +945,20 @@ namespace IKVM.Reflection.Metadata
 				}
 				records[i].Interface = token;
 			}
-			Array.Sort(records, 0, rowCount, this);
+			Sort(this);
 		}
 
 		int IComparer<Record>.Compare(Record x, Record y)
 		{
 			if (x.Class == y.Class)
 			{
+#if STABLE_SORT
+				return 0;
+#else
+				// LAMESPEC the CLI spec says that InterfaceImpl should be sorted by { Class, Interface }, but it appears to be
+				// only necessary to sort by Class.
 				return x.Interface == y.Interface ? 0 : (x.Interface > y.Interface ? 1 : -1);
+#endif
 			}
 			return x.Class > y.Class ? 1 : -1;
 		}
@@ -832,15 +1030,20 @@ namespace IKVM.Reflection.Metadata
 		}
 	}
 
-	sealed class ConstantTable : Table<ConstantTable.Record>, IComparer<ConstantTable.Record>
+	sealed class ConstantTable : SortedTable<ConstantTable.Record>, IComparer<ConstantTable.Record>
 	{
 		internal const int Index = 0x0B;
 
-		internal struct Record
+		internal struct Record : ISortKey
 		{
 			internal short Type;
 			internal int Parent;
 			internal int Value;
+
+			int ISortKey.Key
+			{
+				get { return Parent; }
+			}
 		}
 
 		internal override void Read(MetadataReader mr)
@@ -907,72 +1110,73 @@ namespace IKVM.Reflection.Metadata
 
 		internal object GetRawConstantValue(Module module, int parent)
 		{
-			// TODO use binary search (if sorted)
-			for (int i = 0; i < module.Constant.records.Length; i++)
-			{
-				if (module.Constant.records[i].Parent == parent)
-				{
-					ByteReader br = module.GetBlob(module.Constant.records[i].Value);
-					switch (module.Constant.records[i].Type)
-					{
-						// see ModuleBuilder.AddConstant for the encodings
-						case Signature.ELEMENT_TYPE_BOOLEAN:
-							return br.ReadByte() != 0;
-						case Signature.ELEMENT_TYPE_I1:
-							return br.ReadSByte();
-						case Signature.ELEMENT_TYPE_I2:
-							return br.ReadInt16();
-						case Signature.ELEMENT_TYPE_I4:
-							return br.ReadInt32();
-						case Signature.ELEMENT_TYPE_I8:
-							return br.ReadInt64();
-						case Signature.ELEMENT_TYPE_U1:
-							return br.ReadByte();
-						case Signature.ELEMENT_TYPE_U2:
-							return br.ReadUInt16();
-						case Signature.ELEMENT_TYPE_U4:
-							return br.ReadUInt32();
-						case Signature.ELEMENT_TYPE_U8:
-							return br.ReadUInt64();
-						case Signature.ELEMENT_TYPE_R4:
-							return br.ReadSingle();
-						case Signature.ELEMENT_TYPE_R8:
-							return br.ReadDouble();
-						case Signature.ELEMENT_TYPE_CHAR:
-							return br.ReadChar();
-						case Signature.ELEMENT_TYPE_STRING:
-							{
-								char[] chars = new char[br.Length / 2];
-								for (int j = 0; j < chars.Length; j++)
-								{
-									chars[j] = br.ReadChar();
-								}
-								return new String(chars);
-							}
-						case Signature.ELEMENT_TYPE_CLASS:
-							if (br.ReadInt32() != 0)
+			foreach (int i in Filter(parent))
+			{
+				ByteReader br = module.GetBlob(module.Constant.records[i].Value);
+				switch (module.Constant.records[i].Type)
+				{
+					// see ModuleBuilder.AddConstant for the encodings
+					case Signature.ELEMENT_TYPE_BOOLEAN:
+						return br.ReadByte() != 0;
+					case Signature.ELEMENT_TYPE_I1:
+						return br.ReadSByte();
+					case Signature.ELEMENT_TYPE_I2:
+						return br.ReadInt16();
+					case Signature.ELEMENT_TYPE_I4:
+						return br.ReadInt32();
+					case Signature.ELEMENT_TYPE_I8:
+						return br.ReadInt64();
+					case Signature.ELEMENT_TYPE_U1:
+						return br.ReadByte();
+					case Signature.ELEMENT_TYPE_U2:
+						return br.ReadUInt16();
+					case Signature.ELEMENT_TYPE_U4:
+						return br.ReadUInt32();
+					case Signature.ELEMENT_TYPE_U8:
+						return br.ReadUInt64();
+					case Signature.ELEMENT_TYPE_R4:
+						return br.ReadSingle();
+					case Signature.ELEMENT_TYPE_R8:
+						return br.ReadDouble();
+					case Signature.ELEMENT_TYPE_CHAR:
+						return br.ReadChar();
+					case Signature.ELEMENT_TYPE_STRING:
+						{
+							char[] chars = new char[br.Length / 2];
+							for (int j = 0; j < chars.Length; j++)
 							{
-								throw new BadImageFormatException();
+								chars[j] = br.ReadChar();
 							}
-							return null;
-						default:
+							return new String(chars);
+						}
+					case Signature.ELEMENT_TYPE_CLASS:
+						if (br.ReadInt32() != 0)
+						{
 							throw new BadImageFormatException();
-					}
+						}
+						return null;
+					default:
+						throw new BadImageFormatException();
 				}
 			}
 			throw new InvalidOperationException();
 		}
 	}
 
-	sealed class CustomAttributeTable : Table<CustomAttributeTable.Record>, IComparer<CustomAttributeTable.Record>
+	sealed class CustomAttributeTable : SortedTable<CustomAttributeTable.Record>, IComparer<CustomAttributeTable.Record>
 	{
 		internal const int Index = 0x0C;
 
-		internal struct Record
+		internal struct Record : ISortKey
 		{
 			internal int Parent;
 			internal int Type;
 			internal int Value;
+
+			int ISortKey.Key
+			{
+				get { return Parent; }
+			}
 		}
 
 		internal override void Read(MetadataReader mr)
@@ -1083,7 +1287,7 @@ namespace IKVM.Reflection.Metadata
 						throw new InvalidOperationException();
 				}
 			}
-			Array.Sort(records, 0, rowCount, this);
+			Sort(this);
 		}
 
 		int IComparer<Record>.Compare(Record x, Record y)
@@ -1092,14 +1296,19 @@ namespace IKVM.Reflection.Metadata
 		}
 	}
 
-	sealed class FieldMarshalTable : Table<FieldMarshalTable.Record>, IComparer<FieldMarshalTable.Record>
+	sealed class FieldMarshalTable : SortedTable<FieldMarshalTable.Record>, IComparer<FieldMarshalTable.Record>
 	{
 		internal const int Index = 0x0D;
 
-		internal struct Record
+		internal struct Record : ISortKey
 		{
 			internal int Parent;
 			internal int NativeType;
+
+			int ISortKey.Key
+			{
+				get { return Parent; }
+			}
 		}
 
 		internal override void Read(MetadataReader mr)
@@ -1155,15 +1364,20 @@ namespace IKVM.Reflection.Metadata
 		}
 	}
 
-	sealed class DeclSecurityTable : Table<DeclSecurityTable.Record>, IComparer<DeclSecurityTable.Record>
+	sealed class DeclSecurityTable : SortedTable<DeclSecurityTable.Record>, IComparer<DeclSecurityTable.Record>
 	{
 		internal const int Index = 0x0E;
 
-		internal struct Record
+		internal struct Record : ISortKey
 		{
 			internal short Action;
 			internal int Parent;
 			internal int PermissionSet;
+
+			int ISortKey.Key
+			{
+				get { return Parent; }
+			}
 		}
 
 		internal override void Read(MetadataReader mr)
@@ -1221,7 +1435,7 @@ namespace IKVM.Reflection.Metadata
 				}
 				records[i].Parent = token;
 			}
-			Array.Sort(records, 0, rowCount, this);
+			Sort(this);
 		}
 
 		int IComparer<Record>.Compare(Record x, Record y)
@@ -1230,28 +1444,20 @@ namespace IKVM.Reflection.Metadata
 		}
 	}
 
-	sealed class ClassLayoutTable : Table<ClassLayoutTable.Record>, IComparer<ClassLayoutTable.Record>
+	sealed class ClassLayoutTable : SortedTable<ClassLayoutTable.Record>, IComparer<ClassLayoutTable.Record>
 	{
 		internal const int Index = 0x0f;
 
-		internal struct Record
+		internal struct Record : ISortKey
 		{
 			internal short PackingSize;
 			internal int ClassSize;
 			internal int Parent;
-		}
 
-		internal void AddOrReplaceRecord(Record rec)
-		{
-			for (int i = 0; i < records.Length; i++)
+			int ISortKey.Key
 			{
-				if (records[i].Parent == rec.Parent)
-				{
-					records[i] = rec;
-					return;
-				}
+				get { return Parent; }
 			}
-			AddRecord(rec);
 		}
 
 		internal override void Read(MetadataReader mr)
@@ -1287,29 +1493,21 @@ namespace IKVM.Reflection.Metadata
 		{
 			return x.Parent == y.Parent ? 0 : (x.Parent > y.Parent ? 1 : -1);
 		}
-
-		internal void GetLayout(int token, ref int pack, ref int size)
-		{
-			for (int i = 0; i < rowCount; i++)
-			{
-				if (records[i].Parent == token)
-				{
-					pack = records[i].PackingSize;
-					size = records[i].ClassSize;
-					break;
-				}
-			}
-		}
 	}
 
-	sealed class FieldLayoutTable : Table<FieldLayoutTable.Record>, IComparer<FieldLayoutTable.Record>
+	sealed class FieldLayoutTable : SortedTable<FieldLayoutTable.Record>, IComparer<FieldLayoutTable.Record>
 	{
 		internal const int Index = 0x10;
 
-		internal struct Record
+		internal struct Record : ISortKey
 		{
 			internal int Offset;
 			internal int Field;
+
+			int ISortKey.Key
+			{
+				get { return Field; }
+			}
 		}
 
 		internal override void Read(MetadataReader mr)
@@ -1391,14 +1589,19 @@ namespace IKVM.Reflection.Metadata
 		}
 	}
 
-	sealed class EventMapTable : Table<EventMapTable.Record>
+	sealed class EventMapTable : SortedTable<EventMapTable.Record>
 	{
 		internal const int Index = 0x12;
 
-		internal struct Record
+		internal struct Record : ISortKey
 		{
 			internal int Parent;
 			internal int EventList;
+
+			int ISortKey.Key
+			{
+				get { return Parent; }
+			}
 		}
 
 		internal override void Read(MetadataReader mr)
@@ -1428,6 +1631,19 @@ namespace IKVM.Reflection.Metadata
 		}
 	}
 
+	sealed class EventPtrTable : Table<int>
+	{
+		internal const int Index = 0x13;
+
+		internal override void Read(MetadataReader mr)
+		{
+			for (int i = 0; i < records.Length; i++)
+			{
+				records[i] = mr.ReadEvent();
+			}
+		}
+	}
+
 	sealed class EventTable : Table<EventTable.Record>
 	{
 		internal const int Index = 0x14;
@@ -1469,14 +1685,19 @@ namespace IKVM.Reflection.Metadata
 		}
 	}
 
-	sealed class PropertyMapTable : Table<PropertyMapTable.Record>
+	sealed class PropertyMapTable : SortedTable<PropertyMapTable.Record>
 	{
 		internal const int Index = 0x15;
 
-		internal struct Record
+		internal struct Record : ISortKey
 		{
 			internal int Parent;
 			internal int PropertyList;
+
+			int ISortKey.Key
+			{
+				get { return Parent; }
+			}
 		}
 
 		internal override void Read(MetadataReader mr)
@@ -1506,6 +1727,19 @@ namespace IKVM.Reflection.Metadata
 		}
 	}
 
+	sealed class PropertyPtrTable : Table<int>
+	{
+		internal const int Index = 0x16;
+
+		internal override void Read(MetadataReader mr)
+		{
+			for (int i = 0; i < records.Length; i++)
+			{
+				records[i] = mr.ReadProperty();
+			}
+		}
+	}
+
 	sealed class PropertyTable : Table<PropertyTable.Record>
 	{
 		internal const int Index = 0x17;
@@ -1547,7 +1781,7 @@ namespace IKVM.Reflection.Metadata
 		}
 	}
 
-	sealed class MethodSemanticsTable : Table<MethodSemanticsTable.Record>, IComparer<MethodSemanticsTable.Record>
+	sealed class MethodSemanticsTable : SortedTable<MethodSemanticsTable.Record>, IComparer<MethodSemanticsTable.Record>
 	{
 		internal const int Index = 0x18;
 
@@ -1559,11 +1793,16 @@ namespace IKVM.Reflection.Metadata
 		internal const short RemoveOn = 0x0010;
 		internal const short Fire = 0x0020;
 
-		internal struct Record
+		internal struct Record : ISortKey
 		{
 			internal short Semantics;
 			internal int Method;
 			internal int Association;
+
+			int ISortKey.Key
+			{
+				get { return Association; }
+			}
 		}
 
 		internal override void Read(MetadataReader mr)
@@ -1618,7 +1857,7 @@ namespace IKVM.Reflection.Metadata
 				}
 				records[i].Association = token;
 			}
-			Array.Sort(records, 0, rowCount, this);
+			Sort(this);
 		}
 
 		int IComparer<Record>.Compare(Record x, Record y)
@@ -1628,70 +1867,64 @@ namespace IKVM.Reflection.Metadata
 
 		internal MethodInfo GetMethod(Module module, int token, bool nonPublic, short semantics)
 		{
-			int i = 0;
-			return GetNextMethod(module, token, nonPublic, semantics, ref i);
-		}
-
-		internal MethodInfo[] GetMethods(Module module, int token, bool nonPublic, short semantics)
-		{
-			List<MethodInfo> methods = new List<MethodInfo>();
-			MethodInfo method;
-			for (int i = 0; (method = GetNextMethod(module, token, nonPublic, semantics, ref i)) != null; )
+			foreach (int i in Filter(token))
 			{
-				methods.Add(method);
+				if ((records[i].Semantics & semantics) != 0)
+				{
+					MethodBase method = module.ResolveMethod((MethodDefTable.Index << 24) + records[i].Method);
+					if (nonPublic || method.IsPublic)
+					{
+						return (MethodInfo)method;
+					}
+				}
 			}
-			return methods.ToArray();
+			return null;
 		}
 
-		private MethodInfo GetNextMethod(Module module, int token, bool nonPublic, short semantics, ref int i)
+		internal MethodInfo[] GetMethods(Module module, int token, bool nonPublic, short semantics)
 		{
-			// TODO use binary search?
-			for (; i < records.Length; i++)
+			List<MethodInfo> methods = new List<MethodInfo>();
+			foreach (int i in Filter(token))
 			{
-				if (records[i].Association == token)
+				if ((records[i].Semantics & semantics) != 0)
 				{
-					if ((records[i].Semantics & semantics) != 0)
+					MethodInfo method = (MethodInfo)module.ResolveMethod((MethodDefTable.Index << 24) + records[i].Method);
+					if (nonPublic || method.IsPublic)
 					{
-						MethodInfo method = (MethodInfo)module.ResolveMethod((MethodDefTable.Index << 24) + records[i].Method);
-						if (nonPublic || method.IsPublic)
-						{
-							i++;
-							return method;
-						}
+						methods.Add(method);
 					}
 				}
 			}
-			return null;
+			return methods.ToArray();
 		}
 
 		internal void ComputeFlags(Module module, int token, out bool isPublic, out bool isStatic)
 		{
 			isPublic = false;
 			isStatic = false;
-			MethodInfo method;
-			for (int i = 0; (method = GetNextMethod(module, token, true, -1, ref i)) != null; )
+			foreach (int i in Filter(token))
 			{
-				if (method.IsPublic)
-				{
-					isPublic = true;
-				}
-				if (method.IsStatic)
-				{
-					isStatic = true;
-				}
+				MethodBase method = module.ResolveMethod((MethodDefTable.Index << 24) + records[i].Method);
+				isPublic |= method.IsPublic;
+				isStatic |= method.IsStatic;
 			}
 		}
 	}
 
-	sealed class MethodImplTable : Table<MethodImplTable.Record>, IComparer<MethodImplTable.Record>
+	sealed class MethodImplTable : SortedTable<MethodImplTable.Record>, IComparer<MethodImplTable.Record>
 	{
 		internal const int Index = 0x19;
 
-		internal struct Record
+		internal struct Record : ISortKey
 		{
 			internal int Class;
 			internal int MethodBody;
 			internal int MethodDeclaration;
+
+			int ISortKey.Key
+			{
+				get { return Class; }
+			}
 		}
 
 		internal override void Read(MetadataReader mr)
@@ -1736,7 +1969,7 @@ namespace IKVM.Reflection.Metadata
 					records[i].MethodDeclaration = moduleBuilder.ResolvePseudoToken(records[i].MethodDeclaration);
 				}
 			}
-			Array.Sort(records, 0, rowCount, this);
+			Sort(this);
 		}
 
 		int IComparer<Record>.Compare(Record x, Record y)
@@ -1811,16 +2044,21 @@ namespace IKVM.Reflection.Metadata
 		}
 	}
 
-	sealed class ImplMapTable : Table<ImplMapTable.Record>, IComparer<ImplMapTable.Record>
+	sealed class ImplMapTable : SortedTable<ImplMapTable.Record>, IComparer<ImplMapTable.Record>
 	{
 		internal const int Index = 0x1C;
 
-		internal struct Record
+		internal struct Record : ISortKey
 		{
 			internal short MappingFlags;
 			internal int MemberForwarded;
 			internal int ImportName;
 			internal int ImportScope;
+
+			int ISortKey.Key
+			{
+				get { return MemberForwarded; }
+			}
 		}
 
 		internal override void Read(MetadataReader mr)
@@ -1873,14 +2111,19 @@ namespace IKVM.Reflection.Metadata
 		}
 	}
 
-	sealed class FieldRVATable : Table<FieldRVATable.Record>, IComparer<FieldRVATable.Record>
+	sealed class FieldRVATable : SortedTable<FieldRVATable.Record>, IComparer<FieldRVATable.Record>
 	{
 		internal const int Index = 0x1D;
 
-		internal struct Record
+		internal struct Record : ISortKey
 		{
-			internal int RVA;
+			internal int RVA;		// we set the high bit to signify that the RVA is in the CIL stream (instead of .sdata)
 			internal int Field;
+
+			int ISortKey.Key
+			{
+				get { return Field; }
+			}
 		}
 
 		internal override void Read(MetadataReader mr)
@@ -1909,11 +2152,18 @@ namespace IKVM.Reflection.Metadata
 				.Value;
 		}
 
-		internal void Fixup(ModuleBuilder moduleBuilder, int sdataRVA)
+		internal void Fixup(ModuleBuilder moduleBuilder, int sdataRVA, int cilRVA)
 		{
 			for (int i = 0; i < rowCount; i++)
 			{
-				records[i].RVA += sdataRVA;
+				if (records[i].RVA < 0)
+				{
+					records[i].RVA = (records[i].RVA & 0x7fffffff) + cilRVA;
+				}
+				else
+				{
+					records[i].RVA += sdataRVA;
+				}
 				if (moduleBuilder.IsPseudoToken(records[i].Field))
 				{
 					records[i].Field = moduleBuilder.ResolvePseudoToken(records[i].Field);
@@ -2009,6 +2259,7 @@ namespace IKVM.Reflection.Metadata
 		{
 			for (int i = 0; i < rowCount; i++)
 			{
+				// note that we ignore HashValue here!
 				if (records[i].Name == rec.Name
 					&& records[i].MajorVersion == rec.MajorVersion
 					&& records[i].MinorVersion == rec.MinorVersion
@@ -2017,7 +2268,6 @@ namespace IKVM.Reflection.Metadata
 					&& records[i].Flags == rec.Flags
 					&& records[i].PublicKeyOrToken == rec.PublicKeyOrToken
 					&& records[i].Culture == rec.Culture
-					&& records[i].HashValue == rec.HashValue
 					)
 				{
 					return i + 1;
@@ -2217,14 +2467,19 @@ namespace IKVM.Reflection.Metadata
 		}
 	}
 
-	sealed class NestedClassTable : Table<NestedClassTable.Record>
+	sealed class NestedClassTable : SortedTable<NestedClassTable.Record>
 	{
 		internal const int Index = 0x29;
 
-		internal struct Record
+		internal struct Record : ISortKey
 		{
 			internal int NestedClass;
 			internal int EnclosingClass;
+
+			int ISortKey.Key
+			{
+				get { return NestedClass; }
+			}
 		}
 
 		internal override void Read(MetadataReader mr)
@@ -2267,11 +2522,11 @@ namespace IKVM.Reflection.Metadata
 		}
 	}
 
-	sealed class GenericParamTable : Table<GenericParamTable.Record>, IComparer<GenericParamTable.Record>
+	sealed class GenericParamTable : SortedTable<GenericParamTable.Record>, IComparer<GenericParamTable.Record>
 	{
 		internal const int Index = 0x2A;
 
-		internal struct Record
+		internal struct Record : ISortKey
 		{
 			internal short Number;
 			internal short Flags;
@@ -2279,6 +2534,11 @@ namespace IKVM.Reflection.Metadata
 			internal int Name;
 			// not part of the table, we use it to be able to fixup the GenericParamConstraint table
 			internal int unsortedIndex;
+
+			int ISortKey.Key
+			{
+				get { return Owner; }
+			}
 		}
 
 		internal override void Read(MetadataReader mr)
@@ -2347,11 +2607,6 @@ namespace IKVM.Reflection.Metadata
 			return x.Owner > y.Owner ? 1 : -1;
 		}
 
-		internal GenericParameterAttributes GetAttributes(int token)
-		{
-			return (GenericParameterAttributes)records[(token & 0xFFFFFF) - 1].Flags;
-		}
-
 		internal void PatchAttribute(int token, GenericParameterAttributes genericParameterAttributes)
 		{
 			records[(token & 0xFFFFFF) - 1].Flags = (short)genericParameterAttributes;
@@ -2369,13 +2624,9 @@ namespace IKVM.Reflection.Metadata
 
 		internal int FindFirstByOwner(int token)
 		{
-			// TODO use binary search (if sorted)
-			for (int i = 0; i < records.Length; i++)
+			foreach (int i in Filter(token))
 			{
-				if (records[i].Owner == token)
-				{
-					return i;
-				}
+				return i;
 			}
 			return -1;
 		}
@@ -2442,14 +2693,19 @@ namespace IKVM.Reflection.Metadata
 		}
 	}
 
-	sealed class GenericParamConstraintTable : Table<GenericParamConstraintTable.Record>, IComparer<GenericParamConstraintTable.Record>
+	sealed class GenericParamConstraintTable : SortedTable<GenericParamConstraintTable.Record>, IComparer<GenericParamConstraintTable.Record>
 	{
 		internal const int Index = 0x2C;
 
-		internal struct Record
+		internal struct Record : ISortKey
 		{
 			internal int Owner;
 			internal int Constraint;
+
+			int ISortKey.Key
+			{
+				get { return Owner; }
+			}
 		}
 
 		internal override void Read(MetadataReader mr)
@@ -2485,7 +2741,7 @@ namespace IKVM.Reflection.Metadata
 			{
 				records[i].Owner = fixups[records[i].Owner - 1] + 1;
 			}
-			Array.Sort(records, 0, rowCount, this);
+			Sort(this);
 		}
 
 		int IComparer<Record>.Compare(Record x, Record y)
diff --git a/mcs/class/IKVM.Reflection/MethodBase.cs b/mcs/class/IKVM.Reflection/MethodBase.cs
index b7e4b85..916cd8d 100644
--- a/mcs/class/IKVM.Reflection/MethodBase.cs
+++ b/mcs/class/IKVM.Reflection/MethodBase.cs
@@ -27,6 +27,11 @@ namespace IKVM.Reflection
 {
 	public abstract class MethodBase : MemberInfo
 	{
+		// prevent external subclasses
+		internal MethodBase()
+		{
+		}
+
 		internal abstract MethodSignature MethodSignature { get; }
 		internal abstract int ParameterCount { get; }
 		public abstract ParameterInfo[] GetParameters();
@@ -34,6 +39,7 @@ namespace IKVM.Reflection
 		public abstract MethodImplAttributes GetMethodImplementationFlags();
 		public abstract MethodBody GetMethodBody();
 		public abstract CallingConventions CallingConvention { get; }
+		public abstract int __MethodRVA { get; }
 
 		public bool IsConstructor
 		{
@@ -128,6 +134,11 @@ namespace IKVM.Reflection
 			get { return IsGenericMethodDefinition; }
 		}
 
+		public virtual MethodBase __GetMethodOnTypeDefinition()
+		{
+			return this;
+		}
+
 		// This goes to the (uninstantiated) MethodInfo on the (uninstantiated) Type. For constructors
 		// it also has the effect of removing the ConstructorInfo wrapper and returning the underlying MethodInfo.
 		internal abstract MethodInfo GetMethodOnTypeDefinition();
diff --git a/mcs/class/IKVM.Reflection/MethodBody.cs b/mcs/class/IKVM.Reflection/MethodBody.cs
index 7e14992..fc26f6f 100644
--- a/mcs/class/IKVM.Reflection/MethodBody.cs
+++ b/mcs/class/IKVM.Reflection/MethodBody.cs
@@ -56,6 +56,7 @@ namespace IKVM.Reflection
 			{
 				initLocals = true;
 				body = br.ReadBytes(b >> 2);
+				maxStack = 8;
 			}
 			else if ((b & 3) == CorILMethod_FatFormat)
 			{
@@ -108,7 +109,7 @@ namespace IKVM.Reflection
 				}
 				if (localVarSigTok != 0)
 				{
-					ByteReader sig = module.ResolveSignature(localVarSigTok);
+					ByteReader sig = module.GetStandAloneSig((localVarSigTok & 0xFFFFFF) - 1);
 					Signature.ReadLocalVarSig(module, sig, context, locals);
 				}
 			}
diff --git a/mcs/class/IKVM.Reflection/MethodInfo.cs b/mcs/class/IKVM.Reflection/MethodInfo.cs
index 6d8e997..ee4e4fb 100644
--- a/mcs/class/IKVM.Reflection/MethodInfo.cs
+++ b/mcs/class/IKVM.Reflection/MethodInfo.cs
@@ -28,6 +28,11 @@ namespace IKVM.Reflection
 {
 	public abstract class MethodInfo : MethodBase, IGenericContext, IGenericBinder
 	{
+		// prevent external subclasses
+		internal MethodInfo()
+		{
+		}
+
 		public sealed override MemberTypes MemberType
 		{
 			get { return MemberTypes.Method; }
@@ -95,6 +100,11 @@ namespace IKVM.Reflection
 			return match;
 		}
 
+		public virtual MethodInfo[] __GetMethodImpls()
+		{
+			throw new NotSupportedException();
+		}
+
 		Type IGenericContext.GetGenericTypeArgument(int index)
 		{
 			return this.DeclaringType.GetGenericTypeArgument(index);
diff --git a/mcs/class/IKVM.Reflection/MethodSignature.cs b/mcs/class/IKVM.Reflection/MethodSignature.cs
index 8db04bc..a45c238 100644
--- a/mcs/class/IKVM.Reflection/MethodSignature.cs
+++ b/mcs/class/IKVM.Reflection/MethodSignature.cs
@@ -1,5 +1,5 @@
 /*
-  Copyright (C) 2009-2010 Jeroen Frijters
+  Copyright (C) 2009-2011 Jeroen Frijters
 
   This software is provided 'as-is', without any express or implied
   warranty.  In no event will the authors be held liable for any damages
@@ -34,11 +34,11 @@ namespace IKVM.Reflection
 	{
 		private readonly Type returnType;
 		private readonly Type[] parameterTypes;
-		private readonly Type[][][] modifiers;	// see PackedCustomModifiers
+		private readonly PackedCustomModifiers modifiers;
 		private readonly CallingConventions callingConvention;
 		private readonly int genericParamCount;
 
-		private MethodSignature(Type returnType, Type[] parameterTypes, Type[][][] modifiers, CallingConventions callingConvention, int genericParamCount)
+		internal MethodSignature(Type returnType, Type[] parameterTypes, PackedCustomModifiers modifiers, CallingConventions callingConvention, int genericParamCount)
 		{
 			this.returnType = returnType;
 			this.parameterTypes = parameterTypes;
@@ -55,7 +55,7 @@ namespace IKVM.Reflection
 				&& other.genericParamCount == genericParamCount
 				&& other.returnType.Equals(returnType)
 				&& Util.ArrayEquals(other.parameterTypes, parameterTypes)
-				&& Util.ArrayEquals(other.modifiers, modifiers);
+				&& other.modifiers.Equals(modifiers);
 		}
 
 		public override int GetHashCode()
@@ -63,7 +63,7 @@ namespace IKVM.Reflection
 			return genericParamCount ^ 77 * (int)callingConvention
 				^ 3 * returnType.GetHashCode()
 				^ Util.GetHashCode(parameterTypes) * 5
-				^ Util.GetHashCode(modifiers) * 55;
+				^ modifiers.GetHashCode() * 55;
 		}
 
 		private sealed class UnboundGenericMethodContext : IGenericContext
@@ -119,14 +119,10 @@ namespace IKVM.Reflection
 				context = new UnboundGenericMethodContext(context);
 			}
 			int paramCount = br.ReadCompressedInt();
-			Type[][][] modifiers = null;
-			Type[] optionalCustomModifiers;
-			Type[] requiredCustomModifiers;
-			ReadCustomModifiers(module, br, context, out requiredCustomModifiers, out optionalCustomModifiers);
+			CustomModifiers[] modifiers = null;
+			PackedCustomModifiers.Pack(ref modifiers, 0, CustomModifiers.Read(module, br, context), paramCount + 1);
 			returnType = ReadRetType(module, br, context);
 			parameterTypes = new Type[paramCount];
-			PackedCustomModifiers.SetModifiers(ref modifiers, 0, 0, optionalCustomModifiers, paramCount + 1);
-			PackedCustomModifiers.SetModifiers(ref modifiers, 0, 1, requiredCustomModifiers, paramCount + 1);
 			for (int i = 0; i < parameterTypes.Length; i++)
 			{
 				if ((callingConvention & CallingConventions.VarArgs) != 0 && br.PeekByte() == SENTINEL)
@@ -138,12 +134,10 @@ namespace IKVM.Reflection
 					}
 					break;
 				}
-				ReadCustomModifiers(module, br, context, out requiredCustomModifiers, out optionalCustomModifiers);
-				PackedCustomModifiers.SetModifiers(ref modifiers, i + 1, 0, optionalCustomModifiers, paramCount + 1);
-				PackedCustomModifiers.SetModifiers(ref modifiers, i + 1, 1, requiredCustomModifiers, paramCount + 1);
+				PackedCustomModifiers.Pack(ref modifiers, i + 1, CustomModifiers.Read(module, br, context), paramCount + 1);
 				parameterTypes[i] = ReadParam(module, br, context);
 			}
-			return new MethodSignature(returnType, parameterTypes, modifiers, callingConvention, genericParamCount);
+			return new MethodSignature(returnType, parameterTypes, PackedCustomModifiers.Wrap(modifiers), callingConvention, genericParamCount);
 		}
 
 		internal static __StandAloneMethodSig ReadStandAloneMethodSig(ModuleReader module, ByteReader br, IGenericContext context)
@@ -194,7 +188,8 @@ namespace IKVM.Reflection
 				throw new BadImageFormatException();
 			}
 			int paramCount = br.ReadCompressedInt();
-			SkipCustomModifiers(br);
+			CustomModifiers[] customModifiers = null;
+			PackedCustomModifiers.Pack(ref customModifiers, 0, CustomModifiers.Read(module, br, context), paramCount + 1);
 			Type returnType = ReadRetType(module, br, context);
 			List<Type> parameterTypes = new List<Type>();
 			List<Type> optionalParameterTypes = new List<Type>();
@@ -206,10 +201,10 @@ namespace IKVM.Reflection
 					br.ReadByte();
 					curr = optionalParameterTypes;
 				}
-				SkipCustomModifiers(br);
+				PackedCustomModifiers.Pack(ref customModifiers, i + 1, CustomModifiers.Read(module, br, context), paramCount + 1);
 				curr.Add(ReadParam(module, br, context));
 			}
-			return new __StandAloneMethodSig(unmanaged, unmanagedCallingConvention, callingConvention, returnType, parameterTypes.ToArray(), optionalParameterTypes.ToArray());
+			return new __StandAloneMethodSig(unmanaged, unmanagedCallingConvention, callingConvention, returnType, parameterTypes.ToArray(), optionalParameterTypes.ToArray(), PackedCustomModifiers.Wrap(customModifiers));
 		}
 
 		internal int GetParameterCount()
@@ -227,14 +222,9 @@ namespace IKVM.Reflection
 			return returnType.BindTypeParameters(binder);
 		}
 
-		internal Type[] GetReturnTypeOptionalCustomModifiers(IGenericBinder binder)
-		{
-			return BindTypeParameters(binder, modifiers, 0, 0);
-		}
-
-		internal Type[] GetReturnTypeRequiredCustomModifiers(IGenericBinder binder)
+		internal CustomModifiers GetReturnTypeCustomModifiers(IGenericBinder binder)
 		{
-			return BindTypeParameters(binder, modifiers, 0, 1);
+			return modifiers.GetReturnTypeCustomModifiers().Bind(binder);
 		}
 
 		internal Type GetParameterType(IGenericBinder binder, int index)
@@ -242,19 +232,19 @@ namespace IKVM.Reflection
 			return parameterTypes[index].BindTypeParameters(binder);
 		}
 
-		internal Type[] GetParameterOptionalCustomModifiers(IGenericBinder binder, int index)
+		internal CustomModifiers GetParameterCustomModifiers(IGenericBinder binder, int index)
 		{
-			return BindTypeParameters(binder, modifiers, index + 1, 0);
+			return modifiers.GetParameterCustomModifiers(index).Bind(binder);
 		}
 
-		internal Type[] GetParameterRequiredCustomModifiers(IGenericBinder binder, int index)
+		internal CallingConventions CallingConvention
 		{
-			return BindTypeParameters(binder, modifiers, index + 1, 1);
+			get { return callingConvention; }
 		}
 
-		internal CallingConventions CallingConvention
+		internal int GenericParameterCount
 		{
-			get { return callingConvention; }
+			get { return genericParamCount; }
 		}
 
 		private sealed class Binder : IGenericBinder
@@ -288,7 +278,7 @@ namespace IKVM.Reflection
 			Binder binder = new Binder(type, methodArgs);
 			return new MethodSignature(returnType.BindTypeParameters(binder),
 				BindTypeParameters(binder, parameterTypes),
-				BindTypeParameters(binder, modifiers),
+				modifiers.Bind(binder),
 				callingConvention, genericParamCount);
 		}
 
@@ -311,13 +301,13 @@ namespace IKVM.Reflection
 			}
 		}
 
-		internal static MethodSignature MakeFromBuilder(Type returnType, Type[] parameterTypes, Type[][][] modifiers, CallingConventions callingConvention, int genericParamCount)
+		internal static MethodSignature MakeFromBuilder(Type returnType, Type[] parameterTypes, PackedCustomModifiers modifiers, CallingConventions callingConvention, int genericParamCount)
 		{
 			if (genericParamCount > 0)
 			{
 				returnType = returnType.BindTypeParameters(Unbinder.Instance);
 				parameterTypes = BindTypeParameters(Unbinder.Instance, parameterTypes);
-				modifiers = BindTypeParameters(Unbinder.Instance, modifiers);
+				modifiers = modifiers.Bind(Unbinder.Instance);
 			}
 			return new MethodSignature(returnType, parameterTypes, modifiers, callingConvention, genericParamCount);
 		}
@@ -355,15 +345,16 @@ namespace IKVM.Reflection
 			WriteSigImpl(module, bb, parameterTypes.Length);
 		}
 
-		internal void WriteMethodRefSig(ModuleBuilder module, ByteBuffer bb, Type[] optionalParameterTypes)
+		internal void WriteMethodRefSig(ModuleBuilder module, ByteBuffer bb, Type[] optionalParameterTypes, CustomModifiers[] customModifiers)
 		{
 			WriteSigImpl(module, bb, parameterTypes.Length + optionalParameterTypes.Length);
 			if (optionalParameterTypes.Length > 0)
 			{
 				bb.Write(SENTINEL);
-				foreach (Type type in optionalParameterTypes)
+				for (int i = 0; i < optionalParameterTypes.Length; i++)
 				{
-					WriteType(module, bb, type);
+					WriteCustomModifiers(module, bb, Util.NullSafeElementAt(customModifiers, i));
+					WriteType(module, bb, optionalParameterTypes[i]);
 				}
 			}
 		}
@@ -399,94 +390,116 @@ namespace IKVM.Reflection
 			}
 			bb.WriteCompressedInt(parameterCount);
 			// RetType
-			if (modifiers != null && modifiers[0] != null)
-			{
-				WriteCustomModifiers(module, bb, ELEMENT_TYPE_CMOD_OPT, modifiers[0][0]);
-				WriteCustomModifiers(module, bb, ELEMENT_TYPE_CMOD_REQD, modifiers[0][1]);
-			}
+			WriteCustomModifiers(module, bb, modifiers.GetReturnTypeCustomModifiers());
 			WriteType(module, bb, returnType);
 			// Param
 			for (int i = 0; i < parameterTypes.Length; i++)
 			{
-				if (modifiers != null && modifiers[i + 1] != null)
-				{
-					WriteCustomModifiers(module, bb, ELEMENT_TYPE_CMOD_OPT, modifiers[i + 1][0]);
-					WriteCustomModifiers(module, bb, ELEMENT_TYPE_CMOD_REQD, modifiers[i + 1][1]);
-				}
+				WriteCustomModifiers(module, bb, modifiers.GetParameterCustomModifiers(i));
 				WriteType(module, bb, parameterTypes[i]);
 			}
 		}
 	}
 
-	static class PackedCustomModifiers
+	struct PackedCustomModifiers
 	{
-		// modifiers are packed in a very specific way (and required to be so, otherwise equality checks will fail)
-		// For modifiers[x][y][z]:
-		//  x = parameter index, 0 = return type, 1 = first parameters, ...
-		//  y = 0 = optional custom modifiers, 1 = required custom modifiers
-		//  z = the custom modifiers
-		// At any level the reference can be null (and *must* be null, if there are no modifiers below that level).
-		// Empty arrays are not allowed at any level.
+		// element 0 is the return type, the rest are the parameters
+		private readonly CustomModifiers[] customModifiers;
+
+		private PackedCustomModifiers(CustomModifiers[] customModifiers)
+		{
+			this.customModifiers = customModifiers;
+		}
+
+		public override int GetHashCode()
+		{
+			return Util.GetHashCode(customModifiers);
+		}
+
+		public override bool Equals(object obj)
+		{
+			PackedCustomModifiers? other = obj as PackedCustomModifiers?;
+			return other != null && Equals(other.Value);
+		}
+
+		internal bool Equals(PackedCustomModifiers other)
+		{
+			return Util.ArrayEquals(customModifiers, other.customModifiers);
+		}
 
-		// this can be used to "add" elements to the modifiers array (and the elements are assumed to already be in normalized form)
-		internal static void SetModifiers(ref Type[][][] modifiers, int index, int optOrReq, Type[] add, int count)
+		internal CustomModifiers GetReturnTypeCustomModifiers()
 		{
-			if (add != null)
+			if (customModifiers == null)
 			{
-				if (modifiers == null)
-				{
-					modifiers = new Type[count][][];
-				}
-				if (modifiers[index] == null)
-				{
-					modifiers[index] = new Type[2][];
-				}
-				modifiers[index][optOrReq] = add;
+				return new CustomModifiers();
 			}
+			return customModifiers[0];
 		}
 
-		// this method make a copy of the incoming arrays (where necessary) and returns a normalized modifiers array
-		internal static Type[][][] CreateFromExternal(Type[] returnOptional, Type[] returnRequired, Type[][] parameterOptional, Type[][] parameterRequired, int parameterCount)
+		internal CustomModifiers GetParameterCustomModifiers(int index)
 		{
-			Type[][][] modifiers = null;
-			SetModifiers(ref modifiers, 0, 0, NormalizeAndCopy(returnOptional), parameterCount + 1);
-			SetModifiers(ref modifiers, 0, 1, NormalizeAndCopy(returnRequired), parameterCount + 1);
-			for (int i = 0; i < parameterCount; i++)
+			if (customModifiers == null)
 			{
-				SetModifiers(ref modifiers, i + 1, 0, NormalizeAndCopy(parameterOptional, i), parameterCount + 1);
-				SetModifiers(ref modifiers, i + 1, 1, NormalizeAndCopy(parameterRequired, i), parameterCount + 1);
+				return new CustomModifiers();
 			}
-			return modifiers;
+			return customModifiers[index + 1];
 		}
 
-		private static Type[] NormalizeAndCopy(Type[] array)
+		internal PackedCustomModifiers Bind(IGenericBinder binder)
 		{
-			if (array == null || array.Length == 0)
+			if (customModifiers == null)
 			{
-				return null;
+				return new PackedCustomModifiers();
 			}
-			Type[] copy = null;
-			for (int i = 0; i < array.Length; i++)
+			CustomModifiers[] expanded = new CustomModifiers[customModifiers.Length];
+			for (int i = 0; i < customModifiers.Length; i++)
+			{
+				expanded[i] = customModifiers[i].Bind(binder);
+			}
+			return new PackedCustomModifiers(expanded);
+		}
+
+		// this method make a copy of the incoming arrays (where necessary) and returns a normalized modifiers array
+		internal static PackedCustomModifiers CreateFromExternal(Type[] returnOptional, Type[] returnRequired, Type[][] parameterOptional, Type[][] parameterRequired, int parameterCount)
+		{
+			CustomModifiers[] modifiers = null;
+			Pack(ref modifiers, 0, CustomModifiers.FromReqOpt(returnRequired, returnOptional), parameterCount + 1);
+			for (int i = 0; i < parameterCount; i++)
 			{
-				if (array[i] != null)
+				Pack(ref modifiers, i + 1, CustomModifiers.FromReqOpt(Util.NullSafeElementAt(parameterRequired, i), Util.NullSafeElementAt(parameterOptional, i)), parameterCount + 1);
+			}
+			return new PackedCustomModifiers(modifiers);
+		}
+
+		internal static PackedCustomModifiers CreateFromExternal(CustomModifiers returnTypeCustomModifiers, CustomModifiers[] parameterTypeCustomModifiers, int parameterCount)
+		{
+			CustomModifiers[] customModifiers = null;
+			Pack(ref customModifiers, 0, returnTypeCustomModifiers, parameterCount + 1);
+			if (parameterTypeCustomModifiers != null)
+			{
+				for (int i = 0; i < parameterCount; i++)
 				{
-					if (copy == null)
-					{
-						copy = new Type[array.Length];
-					}
-					copy[i] = array[i];
+					Pack(ref customModifiers, i + 1, parameterTypeCustomModifiers[i], parameterCount + 1);
 				}
 			}
-			return copy;
+			return new PackedCustomModifiers(customModifiers);
+		}
+
+		internal static PackedCustomModifiers Wrap(CustomModifiers[] modifiers)
+		{
+			return new PackedCustomModifiers(modifiers);
 		}
 
-		private static Type[] NormalizeAndCopy(Type[][] array, int index)
+		internal static void Pack(ref CustomModifiers[] array, int index, CustomModifiers mods, int count)
 		{
-			if (array == null || array.Length == 0)
+			if (!mods.IsEmpty)
 			{
-				return null;
+				if (array == null)
+				{
+					array = new CustomModifiers[count];
+				}
+				array[index] = mods;
 			}
-			return NormalizeAndCopy(array[index]);
 		}
 	}
 }
diff --git a/mcs/class/IKVM.Reflection/Missing.cs b/mcs/class/IKVM.Reflection/Missing.cs
new file mode 100644
index 0000000..7c3305e
--- /dev/null
+++ b/mcs/class/IKVM.Reflection/Missing.cs
@@ -0,0 +1,1109 @@
+/*
+  Copyright (C) 2011 Jeroen Frijters
+
+  This software is provided 'as-is', without any express or implied
+  warranty.  In no event will the authors be held liable for any damages
+  arising from the use of this software.
+
+  Permission is granted to anyone to use this software for any purpose,
+  including commercial applications, and to alter it and redistribute it
+  freely, subject to the following restrictions:
+
+  1. The origin of this software must not be misrepresented; you must not
+     claim that you wrote the original software. If you use this software
+     in a product, an acknowledgment in the product documentation would be
+     appreciated but is not required.
+  2. Altered source versions must be plainly marked as such, and must not be
+     misrepresented as being the original software.
+  3. This notice may not be removed or altered from any source distribution.
+
+  Jeroen Frijters
+  jeroen at frijters.net
+  
+*/
+using System;
+using System.Collections.Generic;
+using System.Runtime.InteropServices;
+
+namespace IKVM.Reflection
+{
+	[Serializable]
+	public sealed class MissingAssemblyException : InvalidOperationException
+	{
+		[NonSerialized]
+		private readonly MissingAssembly assembly;
+
+		internal MissingAssemblyException(MissingAssembly assembly)
+			: base("Assembly '" + assembly.FullName + "' is a missing assembly and does not support the requested operation.")
+		{
+			this.assembly = assembly;
+		}
+
+		private MissingAssemblyException(System.Runtime.Serialization.SerializationInfo info, System.Runtime.Serialization.StreamingContext context)
+			: base(info, context)
+		{
+		}
+
+		public Assembly Assembly
+		{
+			get { return assembly; }
+		}
+	}
+
+	[Serializable]
+	public sealed class MissingModuleException : InvalidOperationException
+	{
+		[NonSerialized]
+		private readonly MissingModule module;
+
+		internal MissingModuleException(MissingModule module)
+			: base("Module from missing assembly '" + module.Assembly.FullName + "' does not support the requested operation.")
+		{
+			this.module = module;
+		}
+
+		private MissingModuleException(System.Runtime.Serialization.SerializationInfo info, System.Runtime.Serialization.StreamingContext context)
+			: base(info, context)
+		{
+		}
+
+		public Module Module
+		{
+			get { return module; }
+		}
+	}
+
+	[Serializable]
+	public sealed class MissingMemberException : InvalidOperationException
+	{
+		[NonSerialized]
+		private readonly MemberInfo member;
+
+		internal MissingMemberException(MemberInfo member)
+			: base("Member '" + member + "' is a missing member and does not support the requested operation.")
+		{
+			this.member = member;
+		}
+
+		private MissingMemberException(System.Runtime.Serialization.SerializationInfo info, System.Runtime.Serialization.StreamingContext context)
+			: base(info, context)
+		{
+		}
+
+		public MemberInfo MemberInfo
+		{
+			get { return member; }
+		}
+	}
+
+	public struct MissingGenericMethodBuilder
+	{
+		private readonly MissingMethod method;
+
+		public MissingGenericMethodBuilder(Type declaringType, CallingConventions callingConvention, string name, int genericParameterCount)
+		{
+			method = new MissingMethod(declaringType, name, new MethodSignature(null, null, new PackedCustomModifiers(), callingConvention, genericParameterCount));
+		}
+
+		public Type[] GetGenericArguments()
+		{
+			return method.GetGenericArguments();
+		}
+
+		public void SetSignature(Type returnType, CustomModifiers returnTypeCustomModifiers, Type[] parameterTypes, CustomModifiers[] parameterTypeCustomModifiers)
+		{
+			method.signature = new MethodSignature(
+				returnType ?? method.Module.universe.System_Void,
+				Util.Copy(parameterTypes),
+				PackedCustomModifiers.CreateFromExternal(returnTypeCustomModifiers, parameterTypeCustomModifiers, parameterTypes.Length),
+				method.signature.CallingConvention,
+				method.signature.GenericParameterCount);
+		}
+
+		[Obsolete("Please use SetSignature(Type, CustomModifiers, Type[], CustomModifiers[]) instead.")]
+		public void SetSignature(Type returnType, Type[] returnTypeRequiredCustomModifiers, Type[] returnTypeOptionalCustomModifiers, Type[] parameterTypes, Type[][] parameterTypeRequiredCustomModifiers, Type[][] parameterTypeOptionalCustomModifiers)
+		{
+			method.signature = new MethodSignature(
+				returnType ?? method.Module.universe.System_Void,
+				Util.Copy(parameterTypes),
+				PackedCustomModifiers.CreateFromExternal(returnTypeOptionalCustomModifiers, returnTypeRequiredCustomModifiers, parameterTypeOptionalCustomModifiers, parameterTypeRequiredCustomModifiers, parameterTypes.Length),
+				method.signature.CallingConvention,
+				method.signature.GenericParameterCount);
+		}
+
+		public MethodInfo Finish()
+		{
+			return method;
+		}
+	}
+
+	sealed class MissingAssembly : Assembly
+	{
+		private readonly MissingModule module;
+
+		internal MissingAssembly(Universe universe, string name)
+			: base(universe)
+		{
+			module = new MissingModule(this);
+			this.fullName = name;
+		}
+
+		public override Type[] GetTypes()
+		{
+			throw new MissingAssemblyException(this);
+		}
+
+		public override AssemblyName GetName()
+		{
+			return new AssemblyName(fullName);
+		}
+
+		public override string ImageRuntimeVersion
+		{
+			get { throw new MissingAssemblyException(this); }
+		}
+
+		public override Module ManifestModule
+		{
+			get { return module; }
+		}
+
+		public override MethodInfo EntryPoint
+		{
+			get { throw new MissingAssemblyException(this); }
+		}
+
+		public override string Location
+		{
+			get { throw new MissingAssemblyException(this); }
+		}
+
+		public override AssemblyName[] GetReferencedAssemblies()
+		{
+			throw new MissingAssemblyException(this);
+		}
+
+		public override Module[] GetModules(bool getResourceModules)
+		{
+			throw new MissingAssemblyException(this);
+		}
+
+		public override Module[] GetLoadedModules(bool getResourceModules)
+		{
+			throw new MissingAssemblyException(this);
+		}
+
+		public override Module GetModule(string name)
+		{
+			throw new MissingAssemblyException(this);
+		}
+
+		public override string[] GetManifestResourceNames()
+		{
+			throw new MissingAssemblyException(this);
+		}
+
+		public override ManifestResourceInfo GetManifestResourceInfo(string resourceName)
+		{
+			throw new MissingAssemblyException(this);
+		}
+
+		public override System.IO.Stream GetManifestResourceStream(string resourceName)
+		{
+			throw new MissingAssemblyException(this);
+		}
+
+		public override bool __IsMissing
+		{
+			get { return true; }
+		}
+
+		internal override Type FindType(TypeName typeName)
+		{
+			return null;
+		}
+
+		internal override IList<CustomAttributeData> GetCustomAttributesData(Type attributeType)
+		{
+			throw new MissingAssemblyException(this);
+		}
+	}
+
+	sealed class MissingModule : NonPEModule
+	{
+		private readonly MissingAssembly assembly;
+
+		internal MissingModule(MissingAssembly assembly)
+			: base(assembly.universe)
+		{
+			this.assembly = assembly;
+		}
+
+		public override int MDStreamVersion
+		{
+			get { throw new MissingModuleException(this); }
+		}
+
+		public override Assembly Assembly
+		{
+			get { return assembly; }
+		}
+
+		public override string FullyQualifiedName
+		{
+			get { throw new MissingModuleException(this); }
+		}
+
+		public override string Name
+		{
+			get { throw new MissingModuleException(this); }
+		}
+
+		public override Guid ModuleVersionId
+		{
+			get { throw new MissingModuleException(this); }
+		}
+
+		public override string ScopeName
+		{
+			get { throw new MissingModuleException(this); }
+		}
+
+		internal override Type FindType(TypeName typeName)
+		{
+			return null;
+		}
+
+		internal override void GetTypesImpl(System.Collections.Generic.List<Type> list)
+		{
+			throw new MissingModuleException(this);
+		}
+
+		public override void __GetDataDirectoryEntry(int index, out int rva, out int length)
+		{
+			throw new MissingModuleException(this);
+		}
+
+		public override IList<CustomAttributeData> __GetPlaceholderAssemblyCustomAttributes(bool multiple, bool security)
+		{
+			throw new MissingModuleException(this);
+		}
+
+		public override long __RelativeVirtualAddressToFileOffset(int rva)
+		{
+			throw new MissingModuleException(this);
+		}
+
+		public override __StandAloneMethodSig __ResolveStandAloneMethodSig(int metadataToken, Type[] genericTypeArguments, Type[] genericMethodArguments)
+		{
+			throw new MissingModuleException(this);
+		}
+
+		public override int __Subsystem
+		{
+			get { throw new MissingModuleException(this); }
+		}
+
+		internal override void ExportTypes(int fileToken, IKVM.Reflection.Emit.ModuleBuilder manifestModule)
+		{
+			throw new MissingModuleException(this);
+		}
+
+		public override void GetPEKind(out PortableExecutableKinds peKind, out ImageFileMachine machine)
+		{
+			throw new MissingModuleException(this);
+		}
+
+		public override bool __IsMissing
+		{
+			get { return true; }
+		}
+
+		internal override IList<CustomAttributeData> GetCustomAttributesData(Type attributeType)
+		{
+			throw new MissingModuleException(this);
+		}
+
+		protected override Exception InvalidOperationException()
+		{
+			return new MissingModuleException(this);
+		}
+
+		protected override Exception NotSupportedException()
+		{
+			return new MissingModuleException(this);
+		}
+
+		protected override Exception ArgumentOutOfRangeException()
+		{
+			return new MissingModuleException(this);
+		}
+	}
+
+	sealed class MissingType : Type
+	{
+		private readonly Module module;
+		private readonly Type declaringType;
+		private readonly string ns;
+		private readonly string name;
+		private Type[] typeArgs;
+		private int token;
+
+		internal MissingType(Module module, Type declaringType, string ns, string name)
+		{
+			this.module = module;
+			this.declaringType = declaringType;
+			this.ns = ns;
+			this.name = name;
+			MarkEnumOrValueType(ns, name);
+		}
+
+		internal override MethodBase FindMethod(string name, MethodSignature signature)
+		{
+			MethodInfo method = new MissingMethod(this, name, signature);
+			if (name == ".ctor")
+			{
+				return new ConstructorInfoImpl(method);
+			}
+			return method;
+		}
+
+		internal override FieldInfo FindField(string name, FieldSignature signature)
+		{
+			return new MissingField(this, name, signature);
+		}
+
+		internal override Type FindNestedType(TypeName name)
+		{
+			return null;
+		}
+
+		public override bool __IsMissing
+		{
+			get { return true; }
+		}
+
+		public override Type DeclaringType
+		{
+			get { return declaringType; }
+		}
+
+		public override string __Name
+		{
+			get { return name; }
+		}
+
+		public override string __Namespace
+		{
+			get { return ns; }
+		}
+
+		public override string Name
+		{
+			get { return TypeNameParser.Escape(name); }
+		}
+
+		public override string FullName
+		{
+			get { return GetFullName(); }
+		}
+
+		public override Module Module
+		{
+			get { return module; }
+		}
+
+		public override int MetadataToken
+		{
+			get { return token; }
+		}
+
+		public override bool IsValueType
+		{
+			get
+			{
+				switch (typeFlags & (TypeFlags.ValueType | TypeFlags.NotValueType))
+				{
+					case TypeFlags.ValueType:
+						return true;
+					case TypeFlags.NotValueType:
+						return false;
+					default:
+						throw new MissingMemberException(this);
+				}
+			}
+		}
+
+		public override Type BaseType
+		{
+			get { throw new MissingMemberException(this); }
+		}
+
+		public override TypeAttributes Attributes
+		{
+			get { throw new MissingMemberException(this); }
+		}
+
+		public override Type[] __GetDeclaredTypes()
+		{
+			throw new MissingMemberException(this);
+		}
+
+		public override Type[] __GetDeclaredInterfaces()
+		{
+			throw new MissingMemberException(this);
+		}
+
+		public override MethodBase[] __GetDeclaredMethods()
+		{
+			throw new MissingMemberException(this);
+		}
+
+		public override __MethodImplMap __GetMethodImplMap()
+		{
+			throw new MissingMemberException(this);
+		}
+
+		public override FieldInfo[] __GetDeclaredFields()
+		{
+			throw new MissingMemberException(this);
+		}
+
+		public override EventInfo[] __GetDeclaredEvents()
+		{
+			throw new MissingMemberException(this);
+		}
+
+		public override PropertyInfo[] __GetDeclaredProperties()
+		{
+			throw new MissingMemberException(this);
+		}
+
+		public override CustomModifiers __GetCustomModifiers()
+		{
+			throw new MissingMemberException(this);
+		}
+
+		public override Type[] GetGenericArguments()
+		{
+			throw new MissingMemberException(this);
+		}
+
+		public override CustomModifiers[] __GetGenericArgumentsCustomModifiers()
+		{
+			throw new MissingMemberException(this);
+		}
+
+		public override StructLayoutAttribute StructLayoutAttribute
+		{
+			get { throw new MissingMemberException(this); }
+		}
+
+		public override bool IsGenericType
+		{
+			get { throw new MissingMemberException(this); }
+		}
+
+		public override bool IsGenericTypeDefinition
+		{
+			get { throw new MissingMemberException(this); }
+		}
+
+		internal override Type GetGenericTypeArgument(int index)
+		{
+			if (typeArgs == null)
+			{
+				typeArgs = new Type[index + 1];
+			}
+			else if (typeArgs.Length <= index)
+			{
+				Array.Resize(ref typeArgs, index + 1);
+			}
+			return typeArgs[index] ?? (typeArgs[index] = new MissingTypeParameter(this, index));
+		}
+
+		internal override IList<CustomAttributeData> GetCustomAttributesData(Type attributeType)
+		{
+			throw new MissingMemberException(this);
+		}
+
+		internal override Type BindTypeParameters(IGenericBinder binder)
+		{
+			return this;
+		}
+
+		internal override Type SetMetadataTokenForMissing(int token)
+		{
+			this.token = token;
+			return this;
+		}
+	}
+
+	sealed class MissingTypeParameter : IKVM.Reflection.Reader.TypeParameterType
+	{
+		private readonly MemberInfo owner;
+		private readonly int index;
+
+		internal MissingTypeParameter(MemberInfo owner, int index)
+		{
+			this.owner = owner;
+			this.index = index;
+		}
+
+		public override Module Module
+		{
+			get { return owner.Module; }
+		}
+
+		public override string Name
+		{
+			get { return null; }
+		}
+
+		public override int GenericParameterPosition
+		{
+			get { return index; }
+		}
+
+		public override MethodBase DeclaringMethod
+		{
+			get { return owner as MethodBase; }
+		}
+
+		public override Type DeclaringType
+		{
+			get { return owner as Type; }
+		}
+
+		internal override Type BindTypeParameters(IGenericBinder binder)
+		{
+			if (owner is MethodBase)
+			{
+				return binder.BindMethodParameter(this);
+			}
+			else
+			{
+				return binder.BindTypeParameter(this);
+			}
+		}
+	}
+
+	sealed class MissingMethod : MethodInfo
+	{
+		private readonly Type declaringType;
+		private readonly string name;
+		internal MethodSignature signature;
+		private MethodInfo forwarder;
+		private Type[] typeArgs;
+
+		internal MissingMethod(Type declaringType, string name, MethodSignature signature)
+		{
+			this.declaringType = declaringType;
+			this.name = name;
+			this.signature = signature;
+		}
+
+		private MethodInfo Forwarder
+		{
+			get
+			{
+				MethodInfo method = TryGetForwarder();
+				if (method == null)
+				{
+					throw new MissingMemberException(this);
+				}
+				return method;
+			}
+		}
+
+		private MethodInfo TryGetForwarder()
+		{
+			if (forwarder == null && !declaringType.__IsMissing)
+			{
+				MethodBase mb = declaringType.FindMethod(name, signature);
+				ConstructorInfo ci = mb as ConstructorInfo;
+				if (ci != null)
+				{
+					forwarder = ci.GetMethodInfo();
+				}
+				else
+				{
+					forwarder = (MethodInfo)mb;
+				}
+			}
+			return forwarder;
+		}
+
+		public override bool __IsMissing
+		{
+			get { return TryGetForwarder() == null; }
+		}
+
+		public override Type ReturnType
+		{
+			get { return signature.GetReturnType(this); }
+		}
+
+		public override ParameterInfo ReturnParameter
+		{
+			get { return new ParameterInfoImpl(this, -1); }
+		}
+
+		internal override MethodSignature MethodSignature
+		{
+			get { return signature; }
+		}
+
+		internal override int ParameterCount
+		{
+			get { return signature.GetParameterCount(); }
+		}
+
+		private sealed class ParameterInfoImpl : ParameterInfo
+		{
+			private readonly MissingMethod method;
+			private readonly int index;
+
+			internal ParameterInfoImpl(MissingMethod method, int index)
+			{
+				this.method = method;
+				this.index = index;
+			}
+
+			private ParameterInfo Forwarder
+			{
+				get { return index == -1 ? method.Forwarder.ReturnParameter : method.Forwarder.GetParameters()[index]; }
+			}
+
+			public override string Name
+			{
+				get { return Forwarder.Name; }
+			}
+
+			public override Type ParameterType
+			{
+				get { return index == -1 ? method.signature.GetReturnType(method) : method.signature.GetParameterType(method, index); }
+			}
+
+			public override ParameterAttributes Attributes
+			{
+				get { return Forwarder.Attributes; }
+			}
+
+			public override int Position
+			{
+				get { return index; }
+			}
+
+			public override object RawDefaultValue
+			{
+				get { return Forwarder.RawDefaultValue; }
+			}
+
+			public override CustomModifiers __GetCustomModifiers()
+			{
+				return index == -1
+					? method.signature.GetReturnTypeCustomModifiers(method)
+					: method.signature.GetParameterCustomModifiers(method, index);
+			}
+
+			public override MemberInfo Member
+			{
+				get { return method; }
+			}
+
+			public override int MetadataToken
+			{
+				get { return Forwarder.MetadataToken; }
+			}
+
+			internal override Module Module
+			{
+				get { return method.Module; }
+			}
+
+			internal override IList<CustomAttributeData> GetCustomAttributesData(Type attributeType)
+			{
+				return Forwarder.GetCustomAttributesData(attributeType);
+			}
+
+			public override string ToString()
+			{
+				return Forwarder.ToString();
+			}
+		}
+
+		public override ParameterInfo[] GetParameters()
+		{
+			ParameterInfo[] parameters = new ParameterInfo[signature.GetParameterCount()];
+			for (int i = 0; i < parameters.Length; i++)
+			{
+				parameters[i] = new ParameterInfoImpl(this, i);
+			}
+			return parameters;
+		}
+
+		public override MethodAttributes Attributes
+		{
+			get { return Forwarder.Attributes; }
+		}
+
+		public override MethodImplAttributes GetMethodImplementationFlags()
+		{
+			return Forwarder.GetMethodImplementationFlags();
+		}
+
+		public override MethodBody GetMethodBody()
+		{
+			return Forwarder.GetMethodBody();
+		}
+
+		public override int __MethodRVA
+		{
+			get { return Forwarder.__MethodRVA; }
+		}
+
+		public override CallingConventions CallingConvention
+		{
+			get { return signature.CallingConvention; }
+		}
+
+		internal override int ImportTo(IKVM.Reflection.Emit.ModuleBuilder module)
+		{
+			MethodInfo method = TryGetForwarder();
+			if (method != null)
+			{
+				return method.ImportTo(module);
+			}
+			return module.ImportMethodOrField(declaringType, this.Name, this.MethodSignature);
+		}
+
+		public override string Name
+		{
+			get { return name; }
+		}
+
+		public override Type DeclaringType
+		{
+			get { return declaringType.IsModulePseudoType ? null : declaringType; }
+		}
+
+		public override Module Module
+		{
+			get { return declaringType.Module; }
+		}
+
+		public override bool Equals(object obj)
+		{
+			MissingMethod other = obj as MissingMethod;
+			return other != null
+				&& other.declaringType == declaringType
+				&& other.name == name
+				&& other.signature.Equals(signature);
+		}
+
+		public override int GetHashCode()
+		{
+			return declaringType.GetHashCode() ^ name.GetHashCode() ^ signature.GetHashCode();
+		}
+
+		internal override MethodBase BindTypeParameters(Type type)
+		{
+			MethodInfo forwarder = TryGetForwarder();
+			if (forwarder != null)
+			{
+				return forwarder.BindTypeParameters(type);
+			}
+			return new GenericMethodInstance(type, this, null);
+		}
+
+		public override bool ContainsGenericParameters
+		{
+			get { return Forwarder.ContainsGenericParameters; }
+		}
+
+		internal override IList<CustomAttributeData> GetCustomAttributesData(Type attributeType)
+		{
+			return Forwarder.GetCustomAttributesData(attributeType);
+		}
+
+		public override Type[] GetGenericArguments()
+		{
+			MethodInfo method = TryGetForwarder();
+			if (method != null)
+			{
+				return Forwarder.GetGenericArguments();
+			}
+			if (typeArgs == null)
+			{
+				typeArgs = new Type[signature.GenericParameterCount];
+				for (int i = 0; i < typeArgs.Length; i++)
+				{
+					typeArgs[i] = new MissingTypeParameter(this, i);
+				}
+			}
+			return Util.Copy(typeArgs);
+		}
+
+		internal override Type GetGenericMethodArgument(int index)
+		{
+			return GetGenericArguments()[index];
+		}
+
+		internal override int GetGenericMethodArgumentCount()
+		{
+			return Forwarder.GetGenericMethodArgumentCount();
+		}
+
+		public override MethodInfo GetGenericMethodDefinition()
+		{
+			return Forwarder.GetGenericMethodDefinition();
+		}
+
+		internal override MethodInfo GetMethodOnTypeDefinition()
+		{
+			return Forwarder.GetMethodOnTypeDefinition();
+		}
+
+		internal override bool HasThis
+		{
+			get { return (signature.CallingConvention & (CallingConventions.HasThis | CallingConventions.ExplicitThis)) == CallingConventions.HasThis; }
+		}
+
+		public override bool IsGenericMethod
+		{
+			get { return IsGenericMethodDefinition; }
+		}
+
+		public override bool IsGenericMethodDefinition
+		{
+			get { return signature.GenericParameterCount != 0; }
+		}
+
+		public override MethodInfo MakeGenericMethod(params Type[] typeArguments)
+		{
+			MethodInfo method = TryGetForwarder();
+			if (method != null)
+			{
+				return method.MakeGenericMethod(typeArguments);
+			}
+			return new GenericMethodInstance(declaringType, this, typeArguments);
+		}
+
+		public override int MetadataToken
+		{
+			get { return Forwarder.MetadataToken; }
+		}
+	}
+
+	sealed class MissingField : FieldInfo
+	{
+		private readonly Type declaringType;
+		private readonly string name;
+		private readonly FieldSignature signature;
+		private FieldInfo forwarder;
+
+		internal MissingField(Type declaringType, string name, FieldSignature signature)
+		{
+			this.declaringType = declaringType;
+			this.name = name;
+			this.signature = signature;
+		}
+
+		private FieldInfo Forwarder
+		{
+			get
+			{
+				FieldInfo field = TryGetForwarder();
+				if (field == null)
+				{
+					throw new MissingMemberException(this);
+				}
+				return field;
+			}
+		}
+
+		private FieldInfo TryGetForwarder()
+		{
+			if (forwarder == null && !declaringType.__IsMissing)
+			{
+				forwarder = declaringType.FindField(name, signature);
+			}
+			return forwarder;
+		}
+
+		public override bool __IsMissing
+		{
+			get { return TryGetForwarder() == null; }
+		}
+
+		public override FieldAttributes Attributes
+		{
+			get { return Forwarder.Attributes; }
+		}
+
+		public override void __GetDataFromRVA(byte[] data, int offset, int length)
+		{
+			Forwarder.__GetDataFromRVA(data, offset, length);
+		}
+
+		public override int __FieldRVA
+		{
+			get { return Forwarder.__FieldRVA; }
+		}
+
+		public override object GetRawConstantValue()
+		{
+			return Forwarder.GetRawConstantValue();
+		}
+
+		internal override FieldSignature FieldSignature
+		{
+			get { return signature; }
+		}
+
+		internal override int ImportTo(IKVM.Reflection.Emit.ModuleBuilder module)
+		{
+			FieldInfo field = TryGetForwarder();
+			if (field != null)
+			{
+				return field.ImportTo(module);
+			}
+			return module.ImportMethodOrField(declaringType, this.Name, this.FieldSignature);
+		}
+
+		public override string Name
+		{
+			get { return name; }
+		}
+
+		public override Type DeclaringType
+		{
+			get { return declaringType.IsModulePseudoType ? null : declaringType; }
+		}
+
+		public override Module Module
+		{
+			get { return declaringType.Module; }
+		}
+
+		internal override FieldInfo BindTypeParameters(Type type)
+		{
+			FieldInfo forwarder = TryGetForwarder();
+			if (forwarder != null)
+			{
+				return forwarder.BindTypeParameters(type);
+			}
+			return new GenericFieldInstance(type, this);
+		}
+
+		internal override IList<CustomAttributeData> GetCustomAttributesData(Type attributeType)
+		{
+			return Forwarder.GetCustomAttributesData(attributeType);
+		}
+
+		public override int MetadataToken
+		{
+			get { return Forwarder.MetadataToken; }
+		}
+
+		public override bool Equals(object obj)
+		{
+			MissingField other = obj as MissingField;
+			return other != null
+				&& other.declaringType == declaringType
+				&& other.name == name
+				&& other.signature.Equals(signature);
+		}
+
+		public override int GetHashCode()
+		{
+			return declaringType.GetHashCode() ^ name.GetHashCode() ^ signature.GetHashCode();
+		}
+
+		public override string ToString()
+		{
+			return this.FieldType.Name + " " + this.Name;
+		}
+	}
+
+	// NOTE this is currently only used by CustomAttributeData (because there is no other way to refer to a property)
+	sealed class MissingProperty : PropertyInfo
+	{
+		private readonly Type declaringType;
+		private readonly string name;
+		private readonly PropertySignature signature;
+
+		internal MissingProperty(Type declaringType, string name, PropertySignature signature)
+		{
+			this.declaringType = declaringType;
+			this.name = name;
+			this.signature = signature;
+		}
+
+		public override PropertyAttributes Attributes
+		{
+			get { throw new MissingMemberException(this); }
+		}
+
+		public override bool CanRead
+		{
+			get { throw new MissingMemberException(this); }
+		}
+
+		public override bool CanWrite
+		{
+			get { throw new MissingMemberException(this); }
+		}
+
+		public override MethodInfo GetGetMethod(bool nonPublic)
+		{
+			throw new MissingMemberException(this);
+		}
+
+		public override MethodInfo GetSetMethod(bool nonPublic)
+		{
+			throw new MissingMemberException(this);
+		}
+
+		public override MethodInfo[] GetAccessors(bool nonPublic)
+		{
+			throw new MissingMemberException(this);
+		}
+
+		public override object GetRawConstantValue()
+		{
+			throw new MissingMemberException(this);
+		}
+
+		internal override bool IsPublic
+		{
+			get { throw new MissingMemberException(this); }
+		}
+
+		internal override bool IsStatic
+		{
+			get { throw new MissingMemberException(this); }
+		}
+
+		internal override PropertySignature PropertySignature
+		{
+			get { return signature; }
+		}
+
+		public override string Name
+		{
+			get { return name; }
+		}
+
+		public override Type DeclaringType
+		{
+			get { return declaringType; }
+		}
+
+		public override Module Module
+		{
+			get { return declaringType.Module; }
+		}
+	}
+}
diff --git a/mcs/class/IKVM.Reflection/Module.cs b/mcs/class/IKVM.Reflection/Module.cs
index a481ae2..9c50091 100644
--- a/mcs/class/IKVM.Reflection/Module.cs
+++ b/mcs/class/IKVM.Reflection/Module.cs
@@ -1,5 +1,5 @@
 /*
-  Copyright (C) 2009-2010 Jeroen Frijters
+  Copyright (C) 2009-2012 Jeroen Frijters
 
   This software is provided 'as-is', without any express or implied
   warranty.  In no event will the authors be held liable for any damages
@@ -50,6 +50,11 @@ namespace IKVM.Reflection
 			get { return isManifestModule; }
 		}
 
+		public Guid ModuleVersionId
+		{
+			get { return module.ModuleVersionId; }
+		}
+
 		private void CheckManifestModule()
 		{
 			if (!IsManifestModule)
@@ -77,14 +82,14 @@ namespace IKVM.Reflection
 			}
 		}
 
-		internal Assembly ToAssembly()
+		internal AssemblyReader ToAssembly()
 		{
 			if (imported)
 			{
 				throw new InvalidOperationException();
 			}
 			imported = true;
-			return module.Assembly;
+			return (AssemblyReader)module.Assembly;
 		}
 
 		internal Module ToModule(Assembly assembly)
@@ -105,6 +110,7 @@ namespace IKVM.Reflection
 		internal readonly ModuleTable ModuleTable = new ModuleTable();
 		internal readonly TypeRefTable TypeRef = new TypeRefTable();
 		internal readonly TypeDefTable TypeDef = new TypeDefTable();
+		internal readonly FieldPtrTable FieldPtr = new FieldPtrTable();
 		internal readonly FieldTable Field = new FieldTable();
 		internal readonly MemberRefTable MemberRef = new MemberRefTable();
 		internal readonly ConstantTable Constant = new ConstantTable();
@@ -113,12 +119,15 @@ namespace IKVM.Reflection
 		internal readonly DeclSecurityTable DeclSecurity = new DeclSecurityTable();
 		internal readonly ClassLayoutTable ClassLayout = new ClassLayoutTable();
 		internal readonly FieldLayoutTable FieldLayout = new FieldLayoutTable();
+		internal readonly ParamPtrTable ParamPtr = new ParamPtrTable();
 		internal readonly ParamTable Param = new ParamTable();
 		internal readonly InterfaceImplTable InterfaceImpl = new InterfaceImplTable();
 		internal readonly StandAloneSigTable StandAloneSig = new StandAloneSigTable();
 		internal readonly EventMapTable EventMap = new EventMapTable();
+		internal readonly EventPtrTable EventPtr = new EventPtrTable();
 		internal readonly EventTable Event = new EventTable();
 		internal readonly PropertyMapTable PropertyMap = new PropertyMapTable();
+		internal readonly PropertyPtrTable PropertyPtr = new PropertyPtrTable();
 		internal readonly PropertyTable Property = new PropertyTable();
 		internal readonly MethodSemanticsTable MethodSemantics = new MethodSemanticsTable();
 		internal readonly MethodImplTable MethodImpl = new MethodImplTable();
@@ -128,6 +137,7 @@ namespace IKVM.Reflection
 		internal readonly FieldRVATable FieldRVA = new FieldRVATable();
 		internal readonly AssemblyTable AssemblyTable = new AssemblyTable();
 		internal readonly AssemblyRefTable AssemblyRef = new AssemblyRefTable();
+		internal readonly MethodPtrTable MethodPtr = new MethodPtrTable();
 		internal readonly MethodDefTable MethodDef = new MethodDefTable();
 		internal readonly NestedClassTable NestedClass = new NestedClassTable();
 		internal readonly FileTable File = new FileTable();
@@ -137,7 +147,7 @@ namespace IKVM.Reflection
 		internal readonly MethodSpecTable MethodSpec = new MethodSpecTable();
 		internal readonly GenericParamConstraintTable GenericParamConstraint = new GenericParamConstraintTable();
 
-		internal Module(Universe universe)
+		protected Module(Universe universe)
 		{
 			this.universe = universe;
 		}
@@ -148,6 +158,7 @@ namespace IKVM.Reflection
 			tables[ModuleTable.Index] = ModuleTable;
 			tables[TypeRefTable.Index] = TypeRef;
 			tables[TypeDefTable.Index] = TypeDef;
+			tables[FieldPtrTable.Index] = FieldPtr;
 			tables[FieldTable.Index] = Field;
 			tables[MemberRefTable.Index] = MemberRef;
 			tables[ConstantTable.Index] = Constant;
@@ -156,12 +167,15 @@ namespace IKVM.Reflection
 			tables[DeclSecurityTable.Index] = DeclSecurity;
 			tables[ClassLayoutTable.Index] = ClassLayout;
 			tables[FieldLayoutTable.Index] = FieldLayout;
+			tables[ParamPtrTable.Index] = ParamPtr;
 			tables[ParamTable.Index] = Param;
 			tables[InterfaceImplTable.Index] = InterfaceImpl;
 			tables[StandAloneSigTable.Index] = StandAloneSig;
 			tables[EventMapTable.Index] = EventMap;
+			tables[EventPtrTable.Index] = EventPtr;
 			tables[EventTable.Index] = Event;
 			tables[PropertyMapTable.Index] = PropertyMap;
+			tables[PropertyPtrTable.Index] = PropertyPtr;
 			tables[PropertyTable.Index] = Property;
 			tables[MethodSemanticsTable.Index] = MethodSemantics;
 			tables[MethodImplTable.Index] = MethodImpl;
@@ -171,6 +185,7 @@ namespace IKVM.Reflection
 			tables[FieldRVATable.Index] = FieldRVA;
 			tables[AssemblyTable.Index] = AssemblyTable;
 			tables[AssemblyRefTable.Index] = AssemblyRef;
+			tables[MethodPtrTable.Index] = MethodPtr;
 			tables[MethodDefTable.Index] = MethodDef;
 			tables[NestedClassTable.Index] = NestedClass;
 			tables[FileTable.Index] = File;
@@ -192,6 +207,16 @@ namespace IKVM.Reflection
 			throw new NotSupportedException();
 		}
 
+		public virtual bool __GetSectionInfo(int rva, out string name, out int characteristics)
+		{
+			throw new NotSupportedException();
+		}
+
+		public virtual int __ReadDataFromRVA(int rva, byte[] data, int offset, int length)
+		{
+			throw new NotSupportedException();
+		}
+
 		public virtual void GetPEKind(out PortableExecutableKinds peKind, out ImageFileMachine machine)
 		{
 			throw new NotSupportedException();
@@ -204,47 +229,47 @@ namespace IKVM.Reflection
 
 		public FieldInfo GetField(string name)
 		{
-			return IsResource() ? null : GetModuleType().GetField(name);
+			return GetField(name, BindingFlags.Public | BindingFlags.Static | BindingFlags.Instance | BindingFlags.DeclaredOnly);
 		}
 
 		public FieldInfo GetField(string name, BindingFlags bindingFlags)
 		{
-			return IsResource() ? null : GetModuleType().GetField(name, bindingFlags);
+			return IsResource() ? null : GetModuleType().GetField(name, bindingFlags | BindingFlags.DeclaredOnly);
 		}
 
 		public FieldInfo[] GetFields()
 		{
-			return IsResource() ? Empty<FieldInfo>.Array : GetModuleType().GetFields();
+			return GetFields(BindingFlags.Public | BindingFlags.Static | BindingFlags.Instance | BindingFlags.DeclaredOnly);
 		}
 
 		public FieldInfo[] GetFields(BindingFlags bindingFlags)
 		{
-			return IsResource() ? Empty<FieldInfo>.Array : GetModuleType().GetFields(bindingFlags);
+			return IsResource() ? Empty<FieldInfo>.Array : GetModuleType().GetFields(bindingFlags | BindingFlags.DeclaredOnly);
 		}
 
 		public MethodInfo GetMethod(string name)
 		{
-			return IsResource() ? null : GetModuleType().GetMethod(name);
+			return IsResource() ? null : GetModuleType().GetMethod(name, BindingFlags.Public | BindingFlags.Static | BindingFlags.Instance | BindingFlags.DeclaredOnly);
 		}
 
 		public MethodInfo GetMethod(string name, Type[] types)
 		{
-			return IsResource() ? null : GetModuleType().GetMethod(name, types);
+			return IsResource() ? null : GetModuleType().GetMethod(name, BindingFlags.Public | BindingFlags.Static | BindingFlags.Instance | BindingFlags.DeclaredOnly, null, types, null);
 		}
 
 		public MethodInfo GetMethod(string name, BindingFlags bindingAttr, Binder binder, CallingConventions callConv, Type[] types, ParameterModifier[] modifiers)
 		{
-			return IsResource() ? null : GetModuleType().GetMethod(name, bindingAttr, binder, callConv, types, modifiers);
+			return IsResource() ? null : GetModuleType().GetMethod(name, bindingAttr | BindingFlags.DeclaredOnly, binder, callConv, types, modifiers);
 		}
 
 		public MethodInfo[] GetMethods()
 		{
-			return IsResource() ? Empty<MethodInfo>.Array : GetModuleType().GetMethods();
+			return GetMethods(BindingFlags.Public | BindingFlags.Static | BindingFlags.Instance | BindingFlags.DeclaredOnly);
 		}
 
 		public MethodInfo[] GetMethods(BindingFlags bindingFlags)
 		{
-			return IsResource() ? Empty<MethodInfo>.Array : GetModuleType().GetMethods(bindingFlags);
+			return IsResource() ? Empty<MethodInfo>.Array : GetModuleType().GetMethods(bindingFlags | BindingFlags.DeclaredOnly);
 		}
 
 		public ConstructorInfo __ModuleInitializer
@@ -252,14 +277,8 @@ namespace IKVM.Reflection
 			get { return IsResource() ? null : GetModuleType().TypeInitializer; }
 		}
 
-		public byte[] ResolveSignature(int metadataToken)
+		public virtual byte[] ResolveSignature(int metadataToken)
 		{
-			ModuleReader rdr = this as ModuleReader;
-			if (rdr != null)
-			{
-				ByteReader br = rdr.ResolveSignature(metadataToken);
-				return br.ReadBytes(br.Length);
-			}
 			throw new NotSupportedException();
 		}
 
@@ -284,12 +303,20 @@ namespace IKVM.Reflection
 		public abstract MemberInfo ResolveMember(int metadataToken, Type[] genericTypeArguments, Type[] genericMethodArguments);
 
 		public abstract string ResolveString(int metadataToken);
-		public abstract Type[] __ResolveOptionalParameterTypes(int metadataToken);
+		public abstract Type[] __ResolveOptionalParameterTypes(int metadataToken, Type[] genericTypeArguments, Type[] genericMethodArguments, out CustomModifiers[] customModifiers);
 		public abstract string ScopeName { get; }
 
-		internal abstract Type GetTypeImpl(string typeName);
 		internal abstract void GetTypesImpl(List<Type> list);
 
+		internal abstract Type FindType(TypeName name);
+
+		[Obsolete("Please use __ResolveOptionalParameterTypes(int, Type[], Type[], out CustomModifiers[]) instead.")]
+		public Type[] __ResolveOptionalParameterTypes(int metadataToken)
+		{
+			CustomModifiers[] dummy;
+			return __ResolveOptionalParameterTypes(metadataToken, null, null, out dummy);
+		}
+
 		public Type GetType(string className)
 		{
 			return GetType(className, false, false);
@@ -322,7 +349,12 @@ namespace IKVM.Reflection
 					return null;
 				}
 			}
-			return parser.Expand(GetTypeImpl(parser.FirstNamePart), this.Assembly, throwOnError, className);
+			Type type = FindType(TypeName.Split(TypeNameParser.Unescape(parser.FirstNamePart)));
+			if (type == null && __IsMissing)
+			{
+				throw new MissingModuleException((MissingModule)this);
+			}
+			return parser.Expand(type, this.Assembly, throwOnError, className, false);
 		}
 
 		public Type[] GetTypes()
@@ -387,22 +419,80 @@ namespace IKVM.Reflection
 
 		public abstract AssemblyName[] __GetReferencedAssemblies();
 
-		internal Type CanonicalizeType(Type type)
+		public virtual void __ResolveReferencedAssemblies(Assembly[] assemblies)
 		{
-			Type canon;
-			if (!universe.canonicalizedTypes.TryGetValue(type, out canon))
+			throw new NotSupportedException();
+		}
+
+		public abstract string[] __GetReferencedModules();
+
+		public abstract Type[] __GetReferencedTypes();
+
+		public abstract Type[] __GetExportedTypes();
+
+		public virtual bool __IsMissing
+		{
+			get { return false; }
+		}
+
+		public long __ImageBase
+		{
+			get { return GetImageBaseImpl(); }
+		}
+
+		protected abstract long GetImageBaseImpl();
+
+		public virtual long __StackReserve
+		{
+			get { throw new NotSupportedException(); }
+		}
+
+		public virtual int __FileAlignment
+		{
+			get { throw new NotSupportedException(); }
+		}
+
+		public virtual byte[] __ModuleHash
+		{
+			get { throw new NotSupportedException(); }
+		}
+
+		public virtual int __EntryPointRVA
+		{
+			get { throw new NotSupportedException(); }
+		}
+
+		public virtual int __EntryPointToken
+		{
+			get { throw new NotSupportedException(); }
+		}
+
+		public virtual string __ImageRuntimeVersion
+		{
+			get { throw new NotSupportedException(); }
+		}
+
+		public IEnumerable<CustomAttributeData> __EnumerateCustomAttributeTable()
+		{
+			List<CustomAttributeData> list = new List<CustomAttributeData>(CustomAttribute.RowCount);
+			for (int i = 0; i < CustomAttribute.RowCount; i++)
 			{
-				canon = type;
-				universe.canonicalizedTypes.Add(canon, canon);
+				list.Add(new CustomAttributeData(this, i));
 			}
-			return canon;
+			return list;
+		}
+
+		[Obsolete]
+		public List<CustomAttributeData> __GetCustomAttributesFor(int token)
+		{
+			return GetCustomAttributes(token, null);
 		}
 
 		internal abstract Type GetModuleType();
 
 		internal abstract ByteReader GetBlob(int blobIndex);
 
-		internal IList<CustomAttributeData> GetCustomAttributesData(Type attributeType)
+		internal virtual IList<CustomAttributeData> GetCustomAttributesData(Type attributeType)
 		{
 			return GetCustomAttributes(0x00000001, attributeType);
 		}
@@ -410,23 +500,19 @@ namespace IKVM.Reflection
 		internal List<CustomAttributeData> GetCustomAttributes(int metadataToken, Type attributeType)
 		{
 			List<CustomAttributeData> list = new List<CustomAttributeData>();
-			// TODO use binary search?
-			for (int i = 0; i < CustomAttribute.records.Length; i++)
+			foreach (int i in CustomAttribute.Filter(metadataToken))
 			{
-				if (CustomAttribute.records[i].Parent == metadataToken)
+				if (attributeType == null)
 				{
-					if (attributeType == null)
+					list.Add(new CustomAttributeData(this, i));
+				}
+				else
+				{
+					ConstructorInfo constructor = (ConstructorInfo)ResolveMethod(CustomAttribute.records[i].Type);
+					if (attributeType.IsAssignableFrom(constructor.DeclaringType))
 					{
 						list.Add(new CustomAttributeData(this, i));
 					}
-					else
-					{
-						ConstructorInfo constructor = (ConstructorInfo)ResolveMethod(CustomAttribute.records[i].Type);
-						if (attributeType.IsAssignableFrom(constructor.DeclaringType))
-						{
-							list.Add(new CustomAttributeData(this.Assembly, constructor, GetBlob(CustomAttribute.records[i].Value)));
-						}
-					}
 				}
 			}
 			return list;
@@ -435,15 +521,9 @@ namespace IKVM.Reflection
 		internal IList<CustomAttributeData> GetDeclarativeSecurity(int metadataToken)
 		{
 			List<CustomAttributeData> list = new List<CustomAttributeData>();
-			// TODO use binary search?
-			for (int i = 0; i < DeclSecurity.records.Length; i++)
+			foreach (int i in DeclSecurity.Filter(metadataToken))
 			{
-				if (DeclSecurity.records[i].Parent == metadataToken)
-				{
-					int action = DeclSecurity.records[i].Action;
-					int permissionSet = DeclSecurity.records[i].PermissionSet;
-					CustomAttributeData.ReadDeclarativeSecurity(this.Assembly, list, action, GetBlob(permissionSet));
-				}
+				CustomAttributeData.ReadDeclarativeSecurity(this, i, list);
 			}
 			return list;
 		}
@@ -457,6 +537,94 @@ namespace IKVM.Reflection
 		}
 	}
 
+	abstract class NonPEModule : Module
+	{
+		protected NonPEModule(Universe universe)
+			: base(universe)
+		{
+		}
+
+		protected virtual Exception InvalidOperationException()
+		{
+			return new InvalidOperationException();
+		}
+
+		protected virtual Exception NotSupportedException()
+		{
+			return new NotSupportedException();
+		}
+
+		protected virtual Exception ArgumentOutOfRangeException()
+		{
+			return new ArgumentOutOfRangeException();
+		}
+
+		internal sealed override Type GetModuleType()
+		{
+			throw InvalidOperationException();
+		}
+
+		internal sealed override ByteReader GetBlob(int blobIndex)
+		{
+			throw InvalidOperationException();
+		}
+
+		public sealed override AssemblyName[] __GetReferencedAssemblies()
+		{
+			throw NotSupportedException();
+		}
+
+		public sealed override string[] __GetReferencedModules()
+		{
+			throw NotSupportedException();
+		}
+
+		public override Type[] __GetReferencedTypes()
+		{
+			throw NotSupportedException();
+		}
+
+		public override Type[] __GetExportedTypes()
+		{
+			throw NotSupportedException();
+		}
+
+		protected sealed override long GetImageBaseImpl()
+		{
+			throw NotSupportedException();
+		}
+
+		public sealed override Type ResolveType(int metadataToken, Type[] genericTypeArguments, Type[] genericMethodArguments)
+		{
+			throw ArgumentOutOfRangeException();
+		}
+
+		public sealed override MethodBase ResolveMethod(int metadataToken, Type[] genericTypeArguments, Type[] genericMethodArguments)
+		{
+			throw ArgumentOutOfRangeException();
+		}
+
+		public sealed override FieldInfo ResolveField(int metadataToken, Type[] genericTypeArguments, Type[] genericMethodArguments)
+		{
+			throw ArgumentOutOfRangeException();
+		}
+
+		public sealed override MemberInfo ResolveMember(int metadataToken, Type[] genericTypeArguments, Type[] genericMethodArguments)
+		{
+			throw ArgumentOutOfRangeException();
+		}
+
+		public sealed override string ResolveString(int metadataToken)
+		{
+			throw ArgumentOutOfRangeException();
+		}
+
+		public sealed override Type[] __ResolveOptionalParameterTypes(int metadataToken, Type[] genericTypeArguments, Type[] genericMethodArguments, out CustomModifiers[] customModifiers)
+		{
+			throw ArgumentOutOfRangeException();
+		}
+	}
+
 	public delegate bool TypeFilter(Type m, object filterCriteria);
 	public delegate bool MemberFilter(MemberInfo m, object filterCriteria);
 }
diff --git a/mcs/class/IKVM.Reflection/ParameterInfo.cs b/mcs/class/IKVM.Reflection/ParameterInfo.cs
index 6bc2fff..693c5ca 100644
--- a/mcs/class/IKVM.Reflection/ParameterInfo.cs
+++ b/mcs/class/IKVM.Reflection/ParameterInfo.cs
@@ -27,6 +27,11 @@ namespace IKVM.Reflection
 {
 	public abstract class ParameterInfo : ICustomAttributeProvider
 	{
+		// prevent external subclasses
+		internal ParameterInfo()
+		{
+		}
+
 		public sealed override bool Equals(object obj)
 		{
 			ParameterInfo other = obj as ParameterInfo;
@@ -53,12 +58,21 @@ namespace IKVM.Reflection
 		public abstract ParameterAttributes Attributes { get; }
 		public abstract int Position { get; }
 		public abstract object RawDefaultValue { get; }
-		public abstract Type[] GetOptionalCustomModifiers();
-		public abstract Type[] GetRequiredCustomModifiers();
+		public abstract CustomModifiers __GetCustomModifiers();
 		public abstract MemberInfo Member { get; }
 		public abstract int MetadataToken { get; }
 		internal abstract Module Module { get; }
 
+		public Type[] GetOptionalCustomModifiers()
+		{
+			return __GetCustomModifiers().GetOptional();
+		}
+
+		public Type[] GetRequiredCustomModifiers()
+		{
+			return __GetCustomModifiers().GetRequired();
+		}
+
 		public bool IsIn
 		{
 			get { return (Attributes & ParameterAttributes.In) != 0; }
diff --git a/mcs/class/IKVM.Reflection/PropertyInfo.cs b/mcs/class/IKVM.Reflection/PropertyInfo.cs
index de991aa..1644aaa 100644
--- a/mcs/class/IKVM.Reflection/PropertyInfo.cs
+++ b/mcs/class/IKVM.Reflection/PropertyInfo.cs
@@ -27,6 +27,11 @@ namespace IKVM.Reflection
 {
 	public abstract class PropertyInfo : MemberInfo
 	{
+		// prevent external subclasses
+		internal PropertyInfo()
+		{
+		}
+
 		public sealed override MemberTypes MemberType
 		{
 			get { return MemberTypes.Property; }
@@ -79,14 +84,9 @@ namespace IKVM.Reflection
 				get { throw new InvalidOperationException(); }
 			}
 
-			public override Type[] GetOptionalCustomModifiers()
-			{
-				return property.PropertySignature.GetOptionalCustomModifiers(parameter);
-			}
-
-			public override Type[] GetRequiredCustomModifiers()
+			public override CustomModifiers __GetCustomModifiers()
 			{
-				return property.PropertySignature.GetRequiredCustomModifiers(parameter);
+				return property.PropertySignature.GetParameterCustomModifiers(parameter);
 			}
 
 			public override MemberInfo Member
@@ -120,14 +120,19 @@ namespace IKVM.Reflection
 			get { return this.PropertySignature.PropertyType; }
 		}
 
+		public CustomModifiers __GetCustomModifiers()
+		{
+			return this.PropertySignature.GetCustomModifiers();
+		}
+
 		public Type[] GetRequiredCustomModifiers()
 		{
-			return this.PropertySignature.GetRequiredCustomModifiers();
+			return __GetCustomModifiers().GetRequired();
 		}
 
 		public Type[] GetOptionalCustomModifiers()
 		{
-			return this.PropertySignature.GetOptionalCustomModifiers();
+			return __GetCustomModifiers().GetOptional();
 		}
 
 		public bool IsSpecialName
@@ -150,9 +155,19 @@ namespace IKVM.Reflection
 			return GetAccessors(false);
 		}
 
+		public CallingConventions __CallingConvention
+		{
+			get { return this.PropertySignature.CallingConvention; }
+		}
+
 		internal virtual PropertyInfo BindTypeParameters(Type type)
 		{
 			return new GenericPropertyInfo(this.DeclaringType.BindTypeParameters(type), this);
 		}
+
+		public override string ToString()
+		{
+			return this.DeclaringType.ToString() + " " + Name;
+		}
 	}
 }
diff --git a/mcs/class/IKVM.Reflection/PropertySignature.cs b/mcs/class/IKVM.Reflection/PropertySignature.cs
index 4e19dca..e962856 100644
--- a/mcs/class/IKVM.Reflection/PropertySignature.cs
+++ b/mcs/class/IKVM.Reflection/PropertySignature.cs
@@ -1,5 +1,5 @@
 /*
-  Copyright (C) 2009 Jeroen Frijters
+  Copyright (C) 2009-2011 Jeroen Frijters
 
   This software is provided 'as-is', without any express or implied
   warranty.  In no event will the authors be held liable for any damages
@@ -35,26 +35,20 @@ namespace IKVM.Reflection
 	{
 		private CallingConventions callingConvention;
 		private readonly Type propertyType;
-		private readonly Type[] optionalCustomModifiers;
-		private readonly Type[] requiredCustomModifiers;
 		private readonly Type[] parameterTypes;
-		private readonly Type[][] parameterOptionalCustomModifiers;
-		private readonly Type[][] parameterRequiredCustomModifiers;
+		private readonly PackedCustomModifiers customModifiers;
 
-		internal static PropertySignature Create(CallingConventions callingConvention, Type propertyType, Type[] optionalCustomModifiers, Type[] requiredCustomModifiers, Type[] parameterTypes, Type[][] parameterTypeOptionalCustomModifiers, Type[][] parameterTypeRequiredCustomModifiers)
+		internal static PropertySignature Create(CallingConventions callingConvention, Type propertyType, Type[] parameterTypes, PackedCustomModifiers customModifiers)
 		{
-			return new PropertySignature(callingConvention, propertyType, Util.Copy(optionalCustomModifiers), Util.Copy(requiredCustomModifiers), Util.Copy(parameterTypes), Util.Copy(parameterTypeOptionalCustomModifiers), Util.Copy(parameterTypeRequiredCustomModifiers));
+			return new PropertySignature(callingConvention, propertyType, Util.Copy(parameterTypes), customModifiers);
 		}
 
-		private PropertySignature(CallingConventions callingConvention, Type propertyType, Type[] optionalCustomModifiers, Type[] requiredCustomModifiers, Type[] parameterTypes, Type[][] parameterTypeOptionalCustomModifiers, Type[][] parameterTypeRequiredCustomModifiers)
+		private PropertySignature(CallingConventions callingConvention, Type propertyType, Type[] parameterTypes, PackedCustomModifiers customModifiers)
 		{
 			this.callingConvention = callingConvention;
 			this.propertyType = propertyType;
-			this.optionalCustomModifiers = optionalCustomModifiers;
-			this.requiredCustomModifiers = requiredCustomModifiers;
 			this.parameterTypes = parameterTypes;
-			this.parameterOptionalCustomModifiers = parameterTypeOptionalCustomModifiers;
-			this.parameterRequiredCustomModifiers = parameterTypeRequiredCustomModifiers;
+			this.customModifiers = customModifiers;
 		}
 
 		public override bool Equals(object obj)
@@ -62,13 +56,12 @@ namespace IKVM.Reflection
 			PropertySignature other = obj as PropertySignature;
 			return other != null
 				&& other.propertyType.Equals(propertyType)
-				&& Util.ArrayEquals(other.optionalCustomModifiers, optionalCustomModifiers)
-				&& Util.ArrayEquals(other.requiredCustomModifiers, requiredCustomModifiers);
+				&& other.customModifiers.Equals(customModifiers);
 		}
 
 		public override int GetHashCode()
 		{
-			return propertyType.GetHashCode() ^ Util.GetHashCode(optionalCustomModifiers) ^ Util.GetHashCode(requiredCustomModifiers);
+			return propertyType.GetHashCode() ^ customModifiers.GetHashCode();
 		}
 
 		internal int ParameterCount
@@ -96,14 +89,9 @@ namespace IKVM.Reflection
 			get { return propertyType; }
 		}
 
-		internal Type[] GetOptionalCustomModifiers()
+		internal CustomModifiers GetCustomModifiers()
 		{
-			return Util.Copy(optionalCustomModifiers);
-		}
-
-		internal Type[] GetRequiredCustomModifiers()
-		{
-			return Util.Copy(requiredCustomModifiers);
+			return customModifiers.GetReturnTypeCustomModifiers();
 		}
 
 		internal PropertySignature ExpandTypeParameters(Type declaringType)
@@ -111,11 +99,8 @@ namespace IKVM.Reflection
 			return new PropertySignature(
 				callingConvention,
 				propertyType.BindTypeParameters(declaringType),
-				BindTypeParameters(declaringType, optionalCustomModifiers),
-				BindTypeParameters(declaringType, requiredCustomModifiers),
 				BindTypeParameters(declaringType, parameterTypes),
-				BindTypeParameters(declaringType, parameterOptionalCustomModifiers),
-				BindTypeParameters(declaringType, parameterRequiredCustomModifiers));
+				customModifiers.Bind(declaringType));
 		}
 
 		internal override void WriteSig(ModuleBuilder module, ByteBuffer bb)
@@ -135,21 +120,13 @@ namespace IKVM.Reflection
 			}
 			bb.Write(flags);
 			bb.WriteCompressedInt(parameterTypes == null ? 0 : parameterTypes.Length);
-			WriteCustomModifiers(module, bb, ELEMENT_TYPE_CMOD_REQD, requiredCustomModifiers);
-			WriteCustomModifiers(module, bb, ELEMENT_TYPE_CMOD_OPT, optionalCustomModifiers);
+			WriteCustomModifiers(module, bb, customModifiers.GetReturnTypeCustomModifiers());
 			WriteType(module, bb, propertyType);
 			if (parameterTypes != null)
 			{
 				for (int i = 0; i < parameterTypes.Length; i++)
 				{
-					if (parameterRequiredCustomModifiers != null)
-					{
-						WriteCustomModifiers(module, bb, ELEMENT_TYPE_CMOD_REQD, parameterRequiredCustomModifiers[i]);
-					}
-					if (parameterOptionalCustomModifiers != null)
-					{
-						WriteCustomModifiers(module, bb, ELEMENT_TYPE_CMOD_OPT, parameterOptionalCustomModifiers[i]);
-					}
+					WriteCustomModifiers(module, bb, customModifiers.GetParameterCustomModifiers(i));
 					WriteType(module, bb, parameterTypes[i]);
 				}
 			}
@@ -160,14 +137,14 @@ namespace IKVM.Reflection
 			return parameterTypes[parameter];
 		}
 
-		internal Type[] GetOptionalCustomModifiers(int parameter)
+		internal CustomModifiers GetParameterCustomModifiers(int parameter)
 		{
-			return parameterOptionalCustomModifiers == null ? Type.EmptyTypes : parameterOptionalCustomModifiers[parameter];
+			return customModifiers.GetParameterCustomModifiers(parameter);
 		}
 
-		internal Type[] GetRequiredCustomModifiers(int parameter)
+		internal CallingConventions CallingConvention
 		{
-			return parameterRequiredCustomModifiers == null ? Type.EmptyTypes : parameterRequiredCustomModifiers[parameter];
+			get { return callingConvention; }
 		}
 
 		internal static PropertySignature ReadSig(ModuleReader module, ByteReader br, IGenericContext context)
@@ -187,32 +164,18 @@ namespace IKVM.Reflection
 				callingConvention |= CallingConventions.ExplicitThis;
 			}
 			Type returnType;
-			Type[] returnTypeRequiredCustomModifiers;
-			Type[] returnTypeOptionalCustomModifiers;
 			Type[] parameterTypes;
-			Type[][] parameterRequiredCustomModifiers;
-			Type[][] parameterOptionalCustomModifiers;
 			int paramCount = br.ReadCompressedInt();
-			ReadCustomModifiers(module, br, context, out returnTypeRequiredCustomModifiers, out returnTypeOptionalCustomModifiers);
+			CustomModifiers[] mods = null;
+			PackedCustomModifiers.Pack(ref mods, 0, CustomModifiers.Read(module, br, context), paramCount + 1);
 			returnType = ReadRetType(module, br, context);
 			parameterTypes = new Type[paramCount];
-			parameterRequiredCustomModifiers = null;
-			parameterOptionalCustomModifiers = null;
 			for (int i = 0; i < parameterTypes.Length; i++)
 			{
-				if (IsCustomModifier(br.PeekByte()))
-				{
-					if (parameterOptionalCustomModifiers == null)
-					{
-						parameterOptionalCustomModifiers = new Type[parameterTypes.Length][];
-						parameterRequiredCustomModifiers = new Type[parameterTypes.Length][];
-					}
-					ReadCustomModifiers(module, br, context, out parameterRequiredCustomModifiers[i], out parameterOptionalCustomModifiers[i]);
-				}
+				PackedCustomModifiers.Pack(ref mods, i + 1, CustomModifiers.Read(module, br, context), paramCount + 1);
 				parameterTypes[i] = ReadParam(module, br, context);
 			}
-			return new PropertySignature(callingConvention, returnType, returnTypeOptionalCustomModifiers, returnTypeRequiredCustomModifiers,
-				parameterTypes, parameterOptionalCustomModifiers, parameterRequiredCustomModifiers);
+			return new PropertySignature(callingConvention, returnType, parameterTypes, PackedCustomModifiers.Wrap(mods));
 		}
 	}
 }
diff --git a/mcs/class/IKVM.Reflection/Reader/AssemblyReader.cs b/mcs/class/IKVM.Reflection/Reader/AssemblyReader.cs
index 08d66dd..2764e2d 100644
--- a/mcs/class/IKVM.Reflection/Reader/AssemblyReader.cs
+++ b/mcs/class/IKVM.Reflection/Reader/AssemblyReader.cs
@@ -49,11 +49,6 @@ namespace IKVM.Reflection.Reader
 			get { return location; }
 		}
 
-		public override string FullName
-		{
-			get { return GetName().FullName; }
-		}
-
 		public override AssemblyName GetName()
 		{
 			return GetNameImpl(ref manifestModule.AssemblyTable.records[0]);
@@ -74,15 +69,15 @@ namespace IKVM.Reflection.Reader
 			}
 			if (rec.Culture != 0)
 			{
-				name.CultureInfo = new System.Globalization.CultureInfo(manifestModule.GetString(rec.Culture));
+				name.Culture = manifestModule.GetString(rec.Culture);
 			}
 			else
 			{
-				name.CultureInfo = System.Globalization.CultureInfo.InvariantCulture;
+				name.Culture = "";
 			}
 			name.HashAlgorithm = (AssemblyHashAlgorithm)rec.HashAlgId;
 			name.CodeBase = this.CodeBase;
-			name.Flags = (AssemblyNameFlags)rec.Flags;
+			name.RawFlags = (AssemblyNameFlags)rec.Flags;
 			return name;
 		}
 
@@ -101,14 +96,14 @@ namespace IKVM.Reflection.Reader
 			return list.ToArray();
 		}
 
-		internal override Type GetTypeImpl(string typeName)
+		internal override Type FindType(TypeName typeName)
 		{
-			Type type = manifestModule.GetType(typeName);
+			Type type = manifestModule.FindType(typeName);
 			for (int i = 0; type == null && i < externalModules.Length; i++)
 			{
 				if ((manifestModule.File.records[i].Flags & ContainsNoMetaData) == 0)
 				{
-					type = GetModule(i).GetType(typeName);
+					type = GetModule(i).FindType(typeName);
 				}
 			}
 			return type;
@@ -116,7 +111,7 @@ namespace IKVM.Reflection.Reader
 
 		public override string ImageRuntimeVersion
 		{
-			get { return manifestModule.ImageRuntimeVersion; }
+			get { return manifestModule.__ImageRuntimeVersion; }
 		}
 
 		public override Module ManifestModule
@@ -193,17 +188,21 @@ namespace IKVM.Reflection.Reader
 			}
 			// TODO add ModuleResolve event
 			string location = Path.Combine(Path.GetDirectoryName(this.location), manifestModule.GetString(manifestModule.File.records[index].Name));
-			return LoadModule(index, File.ReadAllBytes(location), location);
+			return LoadModule(index, null, location);
 		}
 
 		private Module LoadModule(int index, byte[] rawModule, string location)
 		{
 			if ((manifestModule.File.records[index].Flags & ContainsNoMetaData) != 0)
 			{
-				return externalModules[index] = new ResourceModule(this, manifestModule.GetString(manifestModule.File.records[index].Name), location);
+				return externalModules[index] = new ResourceModule(manifestModule, index, location);
 			}
 			else
 			{
+				if (rawModule == null)
+				{
+					rawModule = File.ReadAllBytes(location);
+				}
 				return externalModules[index] = new ModuleReader(this, manifestModule.universe, new MemoryStream(rawModule), location);
 			}
 		}
@@ -247,6 +246,16 @@ namespace IKVM.Reflection.Reader
 			return manifestModule.__GetReferencedAssemblies();
 		}
 
+		public override AssemblyNameFlags __AssemblyFlags
+		{
+			get { return (AssemblyNameFlags)manifestModule.AssemblyTable.records[0].Flags; }
+		}
+
+		internal string Name
+		{
+			get { return manifestModule.GetString(manifestModule.AssemblyTable.records[0].Name); }
+		}
+
 		internal override IList<CustomAttributeData> GetCustomAttributesData(Type attributeType)
 		{
 			return manifestModule.GetCustomAttributes(0x20000001, attributeType);
diff --git a/mcs/class/IKVM.Reflection/Reader/EventInfoImpl.cs b/mcs/class/IKVM.Reflection/Reader/EventInfoImpl.cs
index 82591b0..a40baf5 100644
--- a/mcs/class/IKVM.Reflection/Reader/EventInfoImpl.cs
+++ b/mcs/class/IKVM.Reflection/Reader/EventInfoImpl.cs
@@ -80,6 +80,11 @@ namespace IKVM.Reflection.Reader
 			return module.MethodSemantics.GetMethods(module, this.MetadataToken, nonPublic, MethodSemanticsTable.Other);
 		}
 
+		public override MethodInfo[] __GetMethods()
+		{
+			return module.MethodSemantics.GetMethods(module, this.MetadataToken, true, -1);
+		}
+
 		public override Type EventHandlerType
 		{
 			get { return module.ResolveType(module.Event.records[index].EventType, declaringType); }
diff --git a/mcs/class/IKVM.Reflection/Reader/Field.cs b/mcs/class/IKVM.Reflection/Reader/Field.cs
index f9bcca6..0f449a1 100644
--- a/mcs/class/IKVM.Reflection/Reader/Field.cs
+++ b/mcs/class/IKVM.Reflection/Reader/Field.cs
@@ -80,35 +80,26 @@ namespace IKVM.Reflection.Reader
 
 		public override void __GetDataFromRVA(byte[] data, int offset, int length)
 		{
-			int rid = index + 1;
-			// TODO binary search?
-			for (int i = 0; i < module.FieldRVA.records.Length; i++)
+			int rva = this.__FieldRVA;
+			if (rva == 0)
 			{
-				if (module.FieldRVA.records[i].Field == rid)
+				// C++ assemblies can have fields that have an RVA that is zero
+				Array.Clear(data, offset, length);
+				return;
+			}
+			module.__ReadDataFromRVA(rva, data, offset, length);
+		}
+
+		public override int __FieldRVA
+		{
+			get
+			{
+				foreach (int i in module.FieldRVA.Filter(index + 1))
 				{
-					int rva = module.FieldRVA.records[i].RVA;
-					if (rva == 0)
-					{
-						// C++ assemblies can have fields that have an RVA that is zero
-						Array.Clear(data, offset, length);
-						return;
-					}
-					module.SeekRVA(rva);
-					while (length > 0)
-					{
-						int read = module.stream.Read(data, offset, length);
-						if (read == 0)
-						{
-							// C++ assemblies can have fields that have an RVA that lies outside of the file
-							break;
-						}
-						offset += read;
-						length -= read;
-					}
-					return;
+					return module.FieldRVA.records[i].RVA;
 				}
+				throw new InvalidOperationException();
 			}
-			throw new InvalidOperationException();
 		}
 
 		internal override IList<CustomAttributeData> GetCustomAttributesData(Type attributeType)
@@ -122,18 +113,13 @@ namespace IKVM.Reflection.Reader
 			if (declaringType.IsExplicitLayout
 				&& (attributeType == null || attributeType.IsAssignableFrom(module.universe.System_Runtime_InteropServices_FieldOffsetAttribute)))
 			{
-				int rid = index + 1;
-				// TODO use binary search?
-				for (int i = 0; i < module.FieldLayout.records.Length; i++)
+				foreach (int i in module.FieldLayout.Filter(index + 1))
 				{
-					if (module.FieldLayout.records[i].Field == rid)
-					{
-						ConstructorInfo constructor = module.universe.System_Runtime_InteropServices_FieldOffsetAttribute.GetConstructor(new Type[] { module.universe.System_Int32 });
-						list.Add(new CustomAttributeData(constructor,
-							new object[] { module.FieldLayout.records[i].Offset },
-							null));
-						break;
-					}
+					ConstructorInfo constructor = module.universe.System_Runtime_InteropServices_FieldOffsetAttribute.GetPseudoCustomAttributeConstructor(module.universe.System_Int32);
+					list.Add(new CustomAttributeData(module, constructor,
+						new object[] { module.FieldLayout.records[i].Offset },
+						null));
+					break;
 				}
 			}
 			return list;
diff --git a/mcs/class/IKVM.Reflection/Reader/GenericTypeParameter.cs b/mcs/class/IKVM.Reflection/Reader/GenericTypeParameter.cs
index 2f961f9..4c1ea24 100644
--- a/mcs/class/IKVM.Reflection/Reader/GenericTypeParameter.cs
+++ b/mcs/class/IKVM.Reflection/Reader/GenericTypeParameter.cs
@@ -73,11 +73,6 @@ namespace IKVM.Reflection.Reader
 			get { return TypeAttributes.Public; }
 		}
 
-		public sealed override Type UnderlyingSystemType
-		{
-			get { return this; }
-		}
-
 		public sealed override string FullName
 		{
 			get { return null; }
@@ -99,13 +94,23 @@ namespace IKVM.Reflection.Reader
 		private static readonly DummyModule module = new DummyModule();
 		private readonly int position;
 
-		private sealed class DummyModule : Module
+		private sealed class DummyModule : NonPEModule
 		{
 			internal DummyModule()
 				: base(new Universe())
 			{
 			}
 
+			protected override Exception NotSupportedException()
+			{
+				return new InvalidOperationException();
+			}
+
+			protected override Exception ArgumentOutOfRangeException()
+			{
+				return new InvalidOperationException();
+			}
+
 			public override bool Equals(object obj)
 			{
 				throw new InvalidOperationException();
@@ -131,7 +136,7 @@ namespace IKVM.Reflection.Reader
 				get { throw new InvalidOperationException(); }
 			}
 
-			internal override Type GetTypeImpl(string typeName)
+			internal override Type FindType(TypeName typeName)
 			{
 				throw new InvalidOperationException();
 			}
@@ -156,60 +161,15 @@ namespace IKVM.Reflection.Reader
 				get { throw new InvalidOperationException(); }
 			}
 
-			public override Type ResolveType(int metadataToken, Type[] genericTypeArguments, Type[] genericMethodArguments)
-			{
-				throw new InvalidOperationException();
-			}
-
-			public override MethodBase ResolveMethod(int metadataToken, Type[] genericTypeArguments, Type[] genericMethodArguments)
-			{
-				throw new InvalidOperationException();
-			}
-
-			public override FieldInfo ResolveField(int metadataToken, Type[] genericTypeArguments, Type[] genericMethodArguments)
-			{
-				throw new InvalidOperationException();
-			}
-
-			public override MemberInfo ResolveMember(int metadataToken, Type[] genericTypeArguments, Type[] genericMethodArguments)
-			{
-				throw new InvalidOperationException();
-			}
-
-			public override string ResolveString(int metadataToken)
-			{
-				throw new InvalidOperationException();
-			}
-
-			public override Type[] __ResolveOptionalParameterTypes(int metadataToken)
-			{
-				throw new InvalidOperationException();
-			}
-
 			public override string ScopeName
 			{
 				get { throw new InvalidOperationException(); }
 			}
-
-			public override AssemblyName[] __GetReferencedAssemblies()
-			{
-				throw new InvalidOperationException();
-			}
-
-			internal override Type GetModuleType()
-			{
-				throw new InvalidOperationException();
-			}
-
-			internal override ByteReader GetBlob(int blobIndex)
-			{
-				throw new InvalidOperationException();
-			}
 		}
 
 		internal static Type Make(int position)
 		{
-			return module.CanonicalizeType(new UnboundGenericMethodParameter(position));
+			return module.universe.CanonicalizeType(new UnboundGenericMethodParameter(position));
 		}
 
 		private UnboundGenericMethodParameter(int position)
@@ -347,14 +307,9 @@ namespace IKVM.Reflection.Reader
 		{
 			IGenericContext context = (this.DeclaringMethod as IGenericContext) ?? this.DeclaringType;
 			List<Type> list = new List<Type>();
-			int token = this.MetadataToken;
-			// TODO use binary search
-			for (int i = 0; i < module.GenericParamConstraint.records.Length; i++)
+			foreach (int i in module.GenericParamConstraint.Filter(this.MetadataToken))
 			{
-				if (module.GenericParamConstraint.records[i].Owner == token)
-				{
-					list.Add(module.ResolveType(module.GenericParamConstraint.records[i].Constraint, context));
-				}
+				list.Add(module.ResolveType(module.GenericParamConstraint.records[i].Constraint, context));
 			}
 			return list.ToArray();
 		}
diff --git a/mcs/class/IKVM.Reflection/Reader/MetadataReader.cs b/mcs/class/IKVM.Reflection/Reader/MetadataReader.cs
index 0bbe475..28a4720 100644
--- a/mcs/class/IKVM.Reflection/Reader/MetadataReader.cs
+++ b/mcs/class/IKVM.Reflection/Reader/MetadataReader.cs
@@ -1,5 +1,5 @@
 /*
-  Copyright (C) 2009 Jeroen Frijters
+  Copyright (C) 2009-2011 Jeroen Frijters
 
   This software is provided 'as-is', without any express or implied
   warranty.  In no event will the authors be held liable for any damages
@@ -31,76 +31,105 @@ namespace IKVM.Reflection.Reader
 {
 	sealed class MetadataReader : MetadataRW
 	{
-		private readonly BinaryReader br;
+		private readonly Stream stream;
+		private const int bufferLength = 2048;
+		private readonly byte[] buffer = new byte[bufferLength];
+		private int pos = bufferLength;
 
-		internal MetadataReader(ModuleReader module, BinaryReader br, byte heapSizes)
+		internal MetadataReader(ModuleReader module, Stream stream, byte heapSizes)
 			: base(module, (heapSizes & 0x01) != 0, (heapSizes & 0x02) != 0, (heapSizes & 0x04) != 0)
 		{
-			this.br = br;
+			this.stream = stream;
 		}
 
-		internal short ReadInt16()
+		private void FillBuffer(int needed)
 		{
-			return br.ReadInt16();
+			int count = bufferLength - pos;
+			if (count != 0)
+			{
+				// move remaining bytes to the front of the buffer
+				Buffer.BlockCopy(buffer, pos, buffer, 0, count);
+			}
+			pos = 0;
+
+			while (count < needed)
+			{
+				int len = stream.Read(buffer, count, bufferLength - count);
+				if (len == 0)
+				{
+					throw new BadImageFormatException();
+				}
+				count += len;
+			}
+
+			if (count != bufferLength)
+			{
+				// we didn't fill the buffer completely, so have to restore the invariant
+				// that all data from pos up until the end of the buffer is valid
+				Buffer.BlockCopy(buffer, 0, buffer, bufferLength - count, count);
+				pos = bufferLength - count;
+			}
 		}
 
 		internal ushort ReadUInt16()
 		{
-			return br.ReadUInt16();
+			return (ushort)ReadInt16();
 		}
 
-		internal int ReadInt32()
+		internal short ReadInt16()
 		{
-			return br.ReadInt32();
+			if (pos > bufferLength - 2)
+			{
+				FillBuffer(2);
+			}
+			byte b1 = buffer[pos++];
+			byte b2 = buffer[pos++];
+			return (short)(b1 | (b2 << 8));
 		}
 
-		internal int ReadStringIndex()
+		internal int ReadInt32()
 		{
-			if (bigStrings)
-			{
-				return br.ReadInt32();
-			}
-			else
+			if (pos > bufferLength - 4)
 			{
-				return br.ReadUInt16();
+				FillBuffer(4);
 			}
+			byte b1 = buffer[pos++];
+			byte b2 = buffer[pos++];
+			byte b3 = buffer[pos++];
+			byte b4 = buffer[pos++];
+			return b1 | (b2 << 8) | (b3 << 16) | (b4 << 24);
 		}
 
-		internal int ReadGuidIndex()
+		private int ReadIndex(bool big)
 		{
-			if (bigGuids)
+			if (big)
 			{
-				return br.ReadInt32();
+				return ReadInt32();
 			}
 			else
 			{
-				return br.ReadUInt16();
+				return ReadUInt16();
 			}
 		}
 
+		internal int ReadStringIndex()
+		{
+			return ReadIndex(bigStrings);
+		}
+
+		internal int ReadGuidIndex()
+		{
+			return ReadIndex(bigGuids);
+		}
+
 		internal int ReadBlobIndex()
 		{
-			if (bigBlobs)
-			{
-				return br.ReadInt32();
-			}
-			else
-			{
-				return br.ReadUInt16();
-			}
+			return ReadIndex(bigBlobs);
 		}
 
 		internal int ReadResolutionScope()
 		{
-			int codedIndex;
-			if (bigResolutionScope)
-			{
-				codedIndex = br.ReadInt32();
-			}
-			else
-			{
-				codedIndex = br.ReadUInt16();
-			}
+			int codedIndex = ReadIndex(bigResolutionScope);
 			switch (codedIndex & 3)
 			{
 				case 0:
@@ -118,15 +147,7 @@ namespace IKVM.Reflection.Reader
 
 		internal int ReadTypeDefOrRef()
 		{
-			int codedIndex;
-			if (bigTypeDefOrRef)
-			{
-				codedIndex = br.ReadInt32();
-			}
-			else
-			{
-				codedIndex = br.ReadUInt16();
-			}
+			int codedIndex = ReadIndex(bigTypeDefOrRef);
 			switch (codedIndex & 3)
 			{
 				case 0:
@@ -142,15 +163,7 @@ namespace IKVM.Reflection.Reader
 
 		internal int ReadMemberRefParent()
 		{
-			int codedIndex;
-			if (bigMemberRefParent)
-			{
-				codedIndex = br.ReadInt32();
-			}
-			else
-			{
-				codedIndex = br.ReadUInt16();
-			}
+			int codedIndex = ReadIndex(bigMemberRefParent);
 			switch (codedIndex & 7)
 			{
 				case 0:
@@ -170,15 +183,7 @@ namespace IKVM.Reflection.Reader
 
 		internal int ReadHasCustomAttribute()
 		{
-			int codedIndex;
-			if (bigHasCustomAttribute)
-			{
-				codedIndex = br.ReadInt32();
-			}
-			else
-			{
-				codedIndex = br.ReadUInt16();
-			}
+			int codedIndex = ReadIndex(bigHasCustomAttribute);
 			switch (codedIndex & 31)
 			{
 				case 0:
@@ -228,15 +233,7 @@ namespace IKVM.Reflection.Reader
 
 		internal int ReadCustomAttributeType()
 		{
-			int codedIndex;
-			if (bigCustomAttributeType)
-			{
-				codedIndex = br.ReadInt32();
-			}
-			else
-			{
-				codedIndex = br.ReadUInt16();
-			}
+			int codedIndex = ReadIndex(bigCustomAttributeType);
 			switch (codedIndex & 7)
 			{
 				case 2:
@@ -250,15 +247,7 @@ namespace IKVM.Reflection.Reader
 
 		internal int ReadMethodDefOrRef()
 		{
-			int codedIndex;
-			if (bigMethodDefOrRef)
-			{
-				codedIndex = br.ReadInt32();
-			}
-			else
-			{
-				codedIndex = br.ReadUInt16();
-			}
+			int codedIndex = ReadIndex(bigMethodDefOrRef);
 			switch (codedIndex & 1)
 			{
 				case 0:
@@ -272,15 +261,7 @@ namespace IKVM.Reflection.Reader
 
 		internal int ReadHasConstant()
 		{
-			int codedIndex;
-			if (bigHasConstant)
-			{
-				codedIndex = br.ReadInt32();
-			}
-			else
-			{
-				codedIndex = br.ReadUInt16();
-			}
+			int codedIndex = ReadIndex(bigHasConstant);
 			switch (codedIndex & 3)
 			{
 				case 0:
@@ -296,15 +277,7 @@ namespace IKVM.Reflection.Reader
 
 		internal int ReadHasSemantics()
 		{
-			int codedIndex;
-			if (bigHasSemantics)
-			{
-				codedIndex = br.ReadInt32();
-			}
-			else
-			{
-				codedIndex = br.ReadUInt16();
-			}
+			int codedIndex = ReadIndex(bigHasSemantics);
 			switch (codedIndex & 1)
 			{
 				case 0:
@@ -318,15 +291,7 @@ namespace IKVM.Reflection.Reader
 
 		internal int ReadHasFieldMarshal()
 		{
-			int codedIndex;
-			if (bigHasFieldMarshal)
-			{
-				codedIndex = br.ReadInt32();
-			}
-			else
-			{
-				codedIndex = br.ReadUInt16();
-			}
+			int codedIndex = ReadIndex(bigHasFieldMarshal);
 			switch (codedIndex & 1)
 			{
 				case 0:
@@ -340,15 +305,7 @@ namespace IKVM.Reflection.Reader
 
 		internal int ReadHasDeclSecurity()
 		{
-			int codedIndex;
-			if (bigHasDeclSecurity)
-			{
-				codedIndex = br.ReadInt32();
-			}
-			else
-			{
-				codedIndex = br.ReadUInt16();
-			}
+			int codedIndex = ReadIndex(bigHasDeclSecurity);
 			switch (codedIndex & 3)
 			{
 				case 0:
@@ -364,15 +321,7 @@ namespace IKVM.Reflection.Reader
 
 		internal int ReadTypeOrMethodDef()
 		{
-			int codedIndex;
-			if (bigTypeOrMethodDef)
-			{
-				codedIndex = br.ReadInt32();
-			}
-			else
-			{
-				codedIndex = br.ReadUInt16();
-			}
+			int codedIndex = ReadIndex(bigTypeOrMethodDef);
 			switch (codedIndex & 1)
 			{
 				case 0:
@@ -386,15 +335,7 @@ namespace IKVM.Reflection.Reader
 
 		internal int ReadMemberForwarded()
 		{
-			int codedIndex;
-			if (bigMemberForwarded)
-			{
-				codedIndex = br.ReadInt32();
-			}
-			else
-			{
-				codedIndex = br.ReadUInt16();
-			}
+			int codedIndex = ReadIndex(bigMemberForwarded);
 			switch (codedIndex & 1)
 			{
 				case 0:
@@ -408,15 +349,7 @@ namespace IKVM.Reflection.Reader
 
 		internal int ReadImplementation()
 		{
-			int codedIndex;
-			if (bigImplementation)
-			{
-				codedIndex = br.ReadInt32();
-			}
-			else
-			{
-				codedIndex = br.ReadUInt16();
-			}
+			int codedIndex = ReadIndex(bigImplementation);
 			switch (codedIndex & 3)
 			{
 				case 0:
@@ -430,93 +363,44 @@ namespace IKVM.Reflection.Reader
 			}
 		}
 
-		private int ReadToken(int table, bool big)
-		{
-			int rid;
-			if (big)
-			{
-				rid = br.ReadInt32();
-			}
-			else
-			{
-				rid = br.ReadUInt16();
-			}
-			return rid | (table << 24);
-		}
-
 		internal int ReadField()
 		{
-			if (bigField)
-			{
-				return br.ReadInt32();
-			}
-			else
-			{
-				return br.ReadUInt16();
-			}
+			return ReadIndex(bigField);
 		}
 
 		internal int ReadMethodDef()
 		{
-			if (bigMethodDef)
-			{
-				return br.ReadInt32();
-			}
-			else
-			{
-				return br.ReadUInt16();
-			}
+			return ReadIndex(bigMethodDef);
 		}
 
 		internal int ReadParam()
 		{
-			if (bigParam)
-			{
-				return br.ReadInt32();
-			}
-			else
-			{
-				return br.ReadUInt16();
-			}
+			return ReadIndex(bigParam);
 		}
 
 		internal int ReadProperty()
 		{
-			if (bigProperty)
-			{
-				return br.ReadInt32();
-			}
-			else
-			{
-				return br.ReadUInt16();
-			}
+			return ReadIndex(bigProperty);
 		}
 
 		internal int ReadEvent()
 		{
-			if (bigEvent)
-			{
-				return br.ReadInt32();
-			}
-			else
-			{
-				return br.ReadUInt16();
-			}
+			return ReadIndex(bigEvent);
 		}
 
 		internal int ReadTypeDef()
 		{
-			return ReadToken(TypeDefTable.Index, bigTypeDef);
+			return ReadIndex(bigTypeDef) | (TypeDefTable.Index << 24);
 		}
 
 		internal int ReadGenericParam()
 		{
-			return ReadToken(GenericParamTable.Index, bigGenericParam);
+			return ReadIndex(bigGenericParam) | (GenericParamTable.Index << 24);
 		}
 
 		internal int ReadModuleRef()
 		{
-			return ReadToken(ModuleRefTable.Index, bigModuleRef);
+			return ReadIndex(bigModuleRef) | (ModuleRefTable.Index << 24);
 		}
 	}
 }
diff --git a/mcs/class/IKVM.Reflection/Reader/Method.cs b/mcs/class/IKVM.Reflection/Reader/Method.cs
index c3d77f5..66c8d12 100644
--- a/mcs/class/IKVM.Reflection/Reader/Method.cs
+++ b/mcs/class/IKVM.Reflection/Reader/Method.cs
@@ -1,5 +1,5 @@
 /*
-  Copyright (C) 2009 Jeroen Frijters
+  Copyright (C) 2009-2012 Jeroen Frijters
 
   This software is provided 'as-is', without any express or implied
   warranty.  In no event will the authors be held liable for any damages
@@ -61,6 +61,11 @@ namespace IKVM.Reflection.Reader
 			return rva == 0 ? null : new MethodBody(module, rva, context);
 		}
 
+		public override int __MethodRVA
+		{
+			get { return module.MethodDef.records[index].RVA; }
+		}
+
 		public override CallingConventions CallingConvention
 		{
 			get { return this.MethodSignature.CallingConvention; }
@@ -240,110 +245,112 @@ namespace IKVM.Reflection.Reader
 
 		private void CreateDllImportPseudoCustomAttribute(List<CustomAttributeData> attribs)
 		{
-			int token = this.MetadataToken;
-			// TODO use binary search?
-			for (int i = 0; i < module.ImplMap.records.Length; i++)
+			foreach (int i in module.ImplMap.Filter(this.MetadataToken))
 			{
-				if (module.ImplMap.records[i].MemberForwarded == token)
+				const short NoMangle = 0x0001;
+				const short CharSetMask = 0x0006;
+				const short CharSetNotSpec = 0x0000;
+				const short CharSetAnsi = 0x0002;
+				const short CharSetUnicode = 0x0004;
+				const short CharSetAuto = 0x0006;
+				const short SupportsLastError = 0x0040;
+				const short CallConvMask = 0x0700;
+				const short CallConvWinapi = 0x0100;
+				const short CallConvCdecl = 0x0200;
+				const short CallConvStdcall = 0x0300;
+				const short CallConvThiscall = 0x0400;
+				const short CallConvFastcall = 0x0500;
+				// non-standard flags
+				const short BestFitOn = 0x0010;
+				const short BestFitOff = 0x0020;
+				const short CharMapErrorOn = 0x1000;
+				const short CharMapErrorOff = 0x2000;
+
+				Type type = module.universe.System_Runtime_InteropServices_DllImportAttribute;
+				ConstructorInfo constructor = type.GetPseudoCustomAttributeConstructor(module.universe.System_String);
+				List<CustomAttributeNamedArgument> list = new List<CustomAttributeNamedArgument>();
+				int flags = module.ImplMap.records[i].MappingFlags;
+				string entryPoint = module.GetString(module.ImplMap.records[i].ImportName);
+				string dllName = module.GetString(module.ModuleRef.records[(module.ImplMap.records[i].ImportScope & 0xFFFFFF) - 1]);
+				System.Runtime.InteropServices.CharSet? charSet;
+				switch (flags & CharSetMask)
 				{
-					const short NoMangle = 0x0001;
-					const short CharSetMask = 0x0006;
-					const short CharSetNotSpec = 0x0000;
-					const short CharSetAnsi = 0x0002;
-					const short CharSetUnicode = 0x0004;
-					const short CharSetAuto = 0x0006;
-					const short SupportsLastError = 0x0040;
-					const short CallConvMask = 0x0700;
-					const short CallConvWinapi = 0x0100;
-					const short CallConvCdecl = 0x0200;
-					const short CallConvStdcall = 0x0300;
-					const short CallConvThiscall = 0x0400;
-					const short CallConvFastcall = 0x0500;
-					// non-standard flags
-					const short BestFitOn = 0x0010;
-					const short BestFitOff = 0x0020;
-					const short CharMapErrorOn = 0x1000;
-					const short CharMapErrorOff = 0x2000;
-
-					Type type = module.universe.System_Runtime_InteropServices_DllImportAttribute;
-					ConstructorInfo constructor = type.GetConstructor(new Type[] { module.universe.System_String });
-					List<CustomAttributeNamedArgument> list = new List<CustomAttributeNamedArgument>();
-					int flags = module.ImplMap.records[i].MappingFlags;
-					string entryPoint = module.GetString(module.ImplMap.records[i].ImportName);
-					string dllName = module.GetString(module.ModuleRef.records[(module.ImplMap.records[i].ImportScope & 0xFFFFFF) - 1]);
-					System.Runtime.InteropServices.CharSet? charSet;
-					switch (flags & CharSetMask)
-					{
-						case CharSetAnsi:
-							charSet = System.Runtime.InteropServices.CharSet.Ansi;
-							break;
-						case CharSetUnicode:
-							charSet = System.Runtime.InteropServices.CharSet.Unicode;
-							break;
-						case CharSetAuto:
-							charSet = System.Runtime.InteropServices.CharSet.Auto;
-							break;
-						case CharSetNotSpec:
-						default:
-							charSet = null;
-							break;
-					}
-					System.Runtime.InteropServices.CallingConvention callingConvention;
-					switch (flags & CallConvMask)
-					{
-						case CallConvCdecl:
-							callingConvention = System.Runtime.InteropServices.CallingConvention.Cdecl;
-							break;
-						case CallConvFastcall:
-							callingConvention = System.Runtime.InteropServices.CallingConvention.FastCall;
-							break;
-						case CallConvStdcall:
-							callingConvention = System.Runtime.InteropServices.CallingConvention.StdCall;
-							break;
-						case CallConvThiscall:
-							callingConvention = System.Runtime.InteropServices.CallingConvention.ThisCall;
-							break;
-						case CallConvWinapi:
-						default:
-							callingConvention = System.Runtime.InteropServices.CallingConvention.Winapi;
-							break;
-					}
-					list.Add(MakeNamedArgument(type, "EntryPoint", entryPoint));
-					list.Add(MakeNamedArgument(type, "ExactSpelling", flags, NoMangle));
-					list.Add(MakeNamedArgument(type, "SetLastError", flags, SupportsLastError));
-					list.Add(MakeNamedArgument(type, "PreserveSig", (int)GetMethodImplementationFlags(), (int)MethodImplAttributes.PreserveSig));
-					list.Add(MakeNamedArgument(type, "CallingConvention", (int)callingConvention));
-					if (charSet.HasValue)
-					{
-						list.Add(MakeNamedArgument(type, "CharSet", (int)charSet.Value));
-					}
-					if ((flags & (BestFitOn | BestFitOff)) != 0)
-					{
-						list.Add(MakeNamedArgument(type, "BestFitMapping", flags, BestFitOn));
-					}
-					if ((flags & (CharMapErrorOn | CharMapErrorOff)) != 0)
-					{
-						list.Add(MakeNamedArgument(type, "ThrowOnUnmappableChar", flags, CharMapErrorOn));
-					}
-					attribs.Add(new CustomAttributeData(constructor, new object[] { dllName }, list));
-					return;
+					case CharSetAnsi:
+						charSet = System.Runtime.InteropServices.CharSet.Ansi;
+						break;
+					case CharSetUnicode:
+						charSet = System.Runtime.InteropServices.CharSet.Unicode;
+						break;
+					case CharSetAuto:
+						charSet = System.Runtime.InteropServices.CharSet.Auto;
+						break;
+					case CharSetNotSpec:
+					default:
+						charSet = null;
+						break;
+				}
+				System.Runtime.InteropServices.CallingConvention callingConvention;
+				switch (flags & CallConvMask)
+				{
+					case CallConvCdecl:
+						callingConvention = System.Runtime.InteropServices.CallingConvention.Cdecl;
+						break;
+					case CallConvFastcall:
+						callingConvention = System.Runtime.InteropServices.CallingConvention.FastCall;
+						break;
+					case CallConvStdcall:
+						callingConvention = System.Runtime.InteropServices.CallingConvention.StdCall;
+						break;
+					case CallConvThiscall:
+						callingConvention = System.Runtime.InteropServices.CallingConvention.ThisCall;
+						break;
+					case CallConvWinapi:
+						callingConvention = System.Runtime.InteropServices.CallingConvention.Winapi;
+						break;
+					default:
+						callingConvention = 0;
+						break;
+				}
+				AddNamedArgument(list, type, "EntryPoint", entryPoint);
+				AddNamedArgument(list, type, "ExactSpelling", flags, NoMangle);
+				AddNamedArgument(list, type, "SetLastError", flags, SupportsLastError);
+				AddNamedArgument(list, type, "PreserveSig", (int)GetMethodImplementationFlags(), (int)MethodImplAttributes.PreserveSig);
+				AddNamedArgument(list, type, "CallingConvention", module.universe.System_Runtime_InteropServices_CallingConvention, (int)callingConvention);
+				if (charSet.HasValue)
+				{
+					AddNamedArgument(list, type, "CharSet", module.universe.System_Runtime_InteropServices_CharSet, (int)charSet.Value);
+				}
+				if ((flags & (BestFitOn | BestFitOff)) != 0)
+				{
+					AddNamedArgument(list, type, "BestFitMapping", flags, BestFitOn);
 				}
+				if ((flags & (CharMapErrorOn | CharMapErrorOff)) != 0)
+				{
+					AddNamedArgument(list, type, "ThrowOnUnmappableChar", flags, CharMapErrorOn);
+				}
+				attribs.Add(new CustomAttributeData(module, constructor, new object[] { dllName }, list));
+				return;
 			}
 		}
 
-		private static CustomAttributeNamedArgument MakeNamedArgument(Type type, string field, string value)
+		private static void AddNamedArgument(List<CustomAttributeNamedArgument> list, Type type, string fieldName, string value)
 		{
-			return new CustomAttributeNamedArgument(type.GetField(field), new CustomAttributeTypedArgument(type.Module.universe.System_String, value));
+			AddNamedArgument(list, type, fieldName, type.Module.universe.System_String, value);
 		}
 
-		private static CustomAttributeNamedArgument MakeNamedArgument(Type type, string field, int value)
+		private static void AddNamedArgument(List<CustomAttributeNamedArgument> list, Type type, string fieldName, int flags, int flagMask)
 		{
-			return new CustomAttributeNamedArgument(type.GetField(field), new CustomAttributeTypedArgument(type.Module.universe.System_Int32, value));
+			AddNamedArgument(list, type, fieldName, type.Module.universe.System_Boolean, (flags & flagMask) != 0);
 		}
 
-		private static CustomAttributeNamedArgument MakeNamedArgument(Type type, string field, int flags, int flagMask)
+		private static void AddNamedArgument(List<CustomAttributeNamedArgument> list, Type attributeType, string fieldName, Type valueType, object value)
 		{
-			return new CustomAttributeNamedArgument(type.GetField(field), new CustomAttributeTypedArgument(type.Module.universe.System_Boolean, (flags & flagMask) != 0));
+			// some fields are not available on the .NET Compact Framework version of DllImportAttribute
+			FieldInfo field = attributeType.FindField(fieldName, FieldSignature.Create(valueType, new CustomModifiers()));
+			if (field != null)
+			{
+				list.Add(new CustomAttributeNamedArgument(field, new CustomAttributeTypedArgument(valueType, value)));
+			}
 		}
 
 		internal override MethodSignature MethodSignature
@@ -355,6 +362,28 @@ namespace IKVM.Reflection.Reader
 		{
 			return module.ImportMethodOrField(declaringType, this.Name, this.MethodSignature);
 		}
+
+		public override MethodInfo[] __GetMethodImpls()
+		{
+			Type[] typeArgs = null;
+			List<MethodInfo> list = null;
+			foreach (int i in module.MethodImpl.Filter(declaringType.MetadataToken))
+			{
+				if (module.MethodImpl.records[i].MethodBody == this.MetadataToken)
+				{
+					if (typeArgs == null)
+					{
+						typeArgs = declaringType.GetGenericArguments();
+					}
+					if (list == null)
+					{
+						list = new List<MethodInfo>();
+					}
+					list.Add((MethodInfo)module.ResolveMethod(module.MethodImpl.records[i].MethodDeclaration, typeArgs, null));
+				}
+			}
+			return Util.ToArray(list, Empty<MethodInfo>.Array);
+		}
 	}
 
 	sealed class ParameterInfoImpl : ParameterInfo
@@ -437,14 +466,11 @@ namespace IKVM.Reflection.Reader
 			}
 		}
 
-		public override Type[] GetRequiredCustomModifiers()
-		{
-			return Util.Copy(position == -1 ? method.MethodSignature.GetReturnTypeRequiredCustomModifiers(method) : method.MethodSignature.GetParameterRequiredCustomModifiers(method, position));
-		}
-
-		public override Type[] GetOptionalCustomModifiers()
+		public override CustomModifiers __GetCustomModifiers()
 		{
-			return Util.Copy(position == -1 ? method.MethodSignature.GetReturnTypeOptionalCustomModifiers(method) : method.MethodSignature.GetParameterOptionalCustomModifiers(method, position));
+			return position == -1
+				? method.MethodSignature.GetReturnTypeCustomModifiers(method)
+				: method.MethodSignature.GetParameterCustomModifiers(method, position);
 		}
 
 		public override MemberInfo Member
diff --git a/mcs/class/IKVM.Reflection/Reader/ModuleReader.cs b/mcs/class/IKVM.Reflection/Reader/ModuleReader.cs
index 3f04d71..249f39e 100644
--- a/mcs/class/IKVM.Reflection/Reader/ModuleReader.cs
+++ b/mcs/class/IKVM.Reflection/Reader/ModuleReader.cs
@@ -1,5 +1,5 @@
 /*
-  Copyright (C) 2009-2010 Jeroen Frijters
+  Copyright (C) 2009-2012 Jeroen Frijters
 
   This software is provided 'as-is', without any express or implied
   warranty.  In no event will the authors be held liable for any damages
@@ -74,8 +74,8 @@ namespace IKVM.Reflection.Reader
 		private MethodBase[] methods;
 		private MemberInfo[] memberRefs;
 		private Dictionary<int, string> strings = new Dictionary<int, string>();
-		private Dictionary<string, Type> types = new Dictionary<string, Type>();
-		private Dictionary<string, LazyForwardedType> forwardedTypes = new Dictionary<string, LazyForwardedType>();
+		private Dictionary<TypeName, Type> types = new Dictionary<TypeName, Type>();
+		private Dictionary<TypeName, LazyForwardedType> forwardedTypes = new Dictionary<TypeName, LazyForwardedType>();
 
 		private sealed class LazyForwardedType
 		{
@@ -87,12 +87,16 @@ namespace IKVM.Reflection.Reader
 				this.assemblyRef = assemblyRef;
 			}
 
-			internal Type GetType(ModuleReader module, string typeName)
+			internal Type GetType(ModuleReader module, TypeName typeName)
 			{
 				if (type == null)
 				{
 					Assembly asm = module.ResolveAssemblyRef(assemblyRef);
-					type = asm.GetType(typeName, true);
+					type = asm.ResolveType(typeName);
+					if (type == null)
+					{
+						throw new TypeLoadException(typeName.ToString());
+					}
 				}
 				return type;
 			}
@@ -117,7 +121,7 @@ namespace IKVM.Reflection.Reader
 			peFile.Read(br);
 			stream.Seek(peFile.RvaToFileOffset(peFile.GetComDescriptorVirtualAddress()), SeekOrigin.Begin);
 			cliHeader.Read(br);
-			stream.Seek(peFile.RvaToFileOffset(cliHeader.MetaDataRVA), SeekOrigin.Begin);
+			stream.Seek(peFile.RvaToFileOffset(cliHeader.MetaData.VirtualAddress), SeekOrigin.Begin);
 			foreach (StreamHeader sh in ReadStreamHeaders(br, out imageRuntimeVersion))
 			{
 				switch (sh.Name)
@@ -135,7 +139,8 @@ namespace IKVM.Reflection.Reader
 						guidHeap = ReadHeap(stream, sh);
 						break;
 					case "#~":
-						stream.Seek(peFile.RvaToFileOffset(cliHeader.MetaDataRVA + sh.Offset), SeekOrigin.Begin);
+					case "#-":
+						stream.Seek(peFile.RvaToFileOffset(cliHeader.MetaData.VirtualAddress + sh.Offset), SeekOrigin.Begin);
 						ReadTables(br);
 						break;
 					default:
@@ -156,13 +161,13 @@ namespace IKVM.Reflection.Reader
 			{
 				throw new BadImageFormatException("Invalid metadata signature");
 			}
-			ushort MajorVersion = br.ReadUInt16();
-			ushort MinorVersion = br.ReadUInt16();
-			uint Reserved = br.ReadUInt32();
+			/*ushort MajorVersion =*/ br.ReadUInt16();
+			/*ushort MinorVersion =*/ br.ReadUInt16();
+			/*uint Reserved =*/ br.ReadUInt32();
 			uint Length = br.ReadUInt32();
 			byte[] buf = br.ReadBytes((int)Length);
 			Version = Encoding.UTF8.GetString(buf).TrimEnd('\u0000');
-			ushort Flags = br.ReadUInt16();
+			/*ushort Flags =*/ br.ReadUInt16();
 			ushort Streams = br.ReadUInt16();
 			StreamHeader[] streamHeaders = new StreamHeader[Streams];
 			for (int i = 0; i < streamHeaders.Length; i++)
@@ -176,18 +181,19 @@ namespace IKVM.Reflection.Reader
 		private void ReadTables(BinaryReader br)
 		{
 			Table[] tables = GetTables();
-			uint Reserved0 = br.ReadUInt32();
+			/*uint Reserved0 =*/ br.ReadUInt32();
 			byte MajorVersion = br.ReadByte();
 			byte MinorVersion = br.ReadByte();
 			metadataStreamVersion = MajorVersion << 16 | MinorVersion;
 			byte HeapSizes = br.ReadByte();
-			byte Reserved7 = br.ReadByte();
+			/*byte Reserved7 =*/ br.ReadByte();
 			ulong Valid = br.ReadUInt64();
 			ulong Sorted = br.ReadUInt64();
 			for (int i = 0; i < 64; i++)
 			{
 				if ((Valid & (1UL << i)) != 0)
 				{
+					tables[i].Sorted = (Sorted & (1UL << i)) != 0;
 					tables[i].RowCount = br.ReadInt32();
 				}
 				else if (tables[i] != null)
@@ -195,7 +201,7 @@ namespace IKVM.Reflection.Reader
 					tables[i].RowCount = 0;
 				}
 			}
-			MetadataReader mr = new MetadataReader(this, br, HeapSizes);
+			MetadataReader mr = new MetadataReader(this, br.BaseStream, HeapSizes);
 			for (int i = 0; i < 64; i++)
 			{
 				if ((Valid & (1UL << i)) != 0)
@@ -203,12 +209,16 @@ namespace IKVM.Reflection.Reader
 					tables[i].Read(mr);
 				}
 			}
+			if (ParamPtr.RowCount != 0)
+			{
+				throw new NotImplementedException("ParamPtr table support has not yet been implemented.");
+			}
 		}
 
 		private byte[] ReadHeap(Stream stream, StreamHeader sh)
 		{
 			byte[] buf = new byte[sh.Size];
-			stream.Seek(peFile.RvaToFileOffset(cliHeader.MetaDataRVA + sh.Offset), SeekOrigin.Begin);
+			stream.Seek(peFile.RvaToFileOffset(cliHeader.MetaData.VirtualAddress + sh.Offset), SeekOrigin.Begin);
 			for (int pos = 0; pos < buf.Length; )
 			{
 				int read = stream.Read(buf, pos, buf.Length - pos);
@@ -251,9 +261,9 @@ namespace IKVM.Reflection.Reader
 					{
 						moduleType = type;
 					}
-					else
+					else if (!type.IsNestedByFlags)
 					{
-						types.Add(type.FullName, type);
+						types.Add(new TypeName(type.__Namespace, type.__Name), type);
 					}
 				}
 				// add forwarded types to forwardedTypes dictionary (because Module.GetType(string) should return them)
@@ -262,7 +272,7 @@ namespace IKVM.Reflection.Reader
 					int implementation = ExportedType.records[i].Implementation;
 					if (implementation >> 24 == AssemblyRefTable.Index)
 					{
-						string typeName = GetTypeName(ExportedType.records[i].TypeNamespace, ExportedType.records[i].TypeName);
+						TypeName typeName = GetTypeName(ExportedType.records[i].TypeNamespace, ExportedType.records[i].TypeName);
 						forwardedTypes.Add(typeName, new LazyForwardedType((implementation & 0xFFFFFF) - 1));
 					}
 				}
@@ -330,11 +340,17 @@ namespace IKVM.Reflection.Reader
 			{
 				if ((metadataToken >> 24) != 0x70)
 				{
-					throw new ArgumentOutOfRangeException();
+					throw TokenOutOfRangeException(metadataToken);
 				}
 				int index = metadataToken & 0xFFFFFF;
 				int len = ReadCompressedInt(userStringHeap, ref index) & ~1;
-				str = Encoding.Unicode.GetString(userStringHeap, index, len);
+				StringBuilder sb = new StringBuilder(len / 2);
+				for (int i = 0; i < len; i += 2)
+				{
+					char ch = (char)(userStringHeap[index + i] | userStringHeap[index + i + 1] << 8);
+					sb.Append(ch);
+				}
+				str = sb.ToString();
 				strings.Add(metadataToken, str);
 			}
 			return str;
@@ -342,87 +358,91 @@ namespace IKVM.Reflection.Reader
 
 		internal Type ResolveType(int metadataToken, IGenericContext context)
 		{
-			switch (metadataToken >> 24)
+			int index = (metadataToken & 0xFFFFFF) - 1;
+			if (index < 0)
 			{
-				case TypeDefTable.Index:
-					PopulateTypeDef();
-					return typeDefs[(metadataToken & 0xFFFFFF) - 1];
-				case TypeRefTable.Index:
+				throw TokenOutOfRangeException(metadataToken);
+			}
+			else if ((metadataToken >> 24) == TypeDefTable.Index && index < TypeDef.RowCount)
+			{
+				PopulateTypeDef();
+				return typeDefs[index];
+			}
+			else if ((metadataToken >> 24) == TypeRefTable.Index && index < TypeRef.RowCount)
+			{
+				if (typeRefs == null)
+				{
+					typeRefs = new Type[TypeRef.records.Length];
+				}
+				if (typeRefs[index] == null)
+				{
+					int scope = TypeRef.records[index].ResolutionScope;
+					switch (scope >> 24)
 					{
-						if (typeRefs == null)
-						{
-							typeRefs = new Type[TypeRef.records.Length];
-						}
-						int index = (metadataToken & 0xFFFFFF) - 1;
-						if (typeRefs[index] == null)
-						{
-							int scope = TypeRef.records[index].ResolutionScope;
-							switch (scope >> 24)
+						case AssemblyRefTable.Index:
 							{
-								case AssemblyRefTable.Index:
-									{
-										Assembly assembly = ResolveAssemblyRef((scope & 0xFFFFFF) - 1);
-										string typeName = GetTypeName(TypeRef.records[index].TypeNameSpace, TypeRef.records[index].TypeName);
-										Type type = assembly.GetType(typeName);
-										if (type == null)
-										{
-											throw new TypeLoadException(String.Format("Type '{0}' not found in assembly '{1}'", typeName, assembly.FullName));
-										}
-										typeRefs[index] = type;
-										break;
-									}
-								case TypeRefTable.Index:
+								Assembly assembly = ResolveAssemblyRef((scope & 0xFFFFFF) - 1);
+								TypeName typeName = GetTypeName(TypeRef.records[index].TypeNameSpace, TypeRef.records[index].TypeName);
+								typeRefs[index] = assembly.ResolveType(typeName);
+								break;
+							}
+						case TypeRefTable.Index:
+							{
+								Type outer = ResolveType(scope, null);
+								TypeName typeName = GetTypeName(TypeRef.records[index].TypeNameSpace, TypeRef.records[index].TypeName);
+								typeRefs[index] = outer.ResolveNestedType(typeName);
+								break;
+							}
+						case ModuleTable.Index:
+						case ModuleRefTable.Index:
+							{
+								Module module;
+								if (scope >> 24 == ModuleTable.Index)
+								{
+									if (scope == 0 || scope == 1)
 									{
-										Type outer = ResolveType(scope, null);
-										typeRefs[index] = outer.GetNestedType(GetString(TypeRef.records[index].TypeName), BindingFlags.Public | BindingFlags.NonPublic);
-										break;
+										module = this;
 									}
-								case ModuleTable.Index:
-									if (scope != 0 && scope != 1)
+									else
 									{
 										throw new NotImplementedException("self reference scope?");
 									}
-									typeRefs[index] = GetType(GetTypeName(TypeRef.records[index].TypeNameSpace, TypeRef.records[index].TypeName));
-									break;
-								case ModuleRefTable.Index:
-									{
-										Module module = ResolveModuleRef(ModuleRef.records[(scope & 0xFFFFFF) - 1]);
-										string typeName = GetTypeName(TypeRef.records[index].TypeNameSpace, TypeRef.records[index].TypeName);
-										Type type = assembly.GetType(typeName);
-										if (type == null)
-										{
-											throw new TypeLoadException(String.Format("Type '{0}' not found in module '{1}'", typeName, module.Name));
-										}
-										typeRefs[index] = type;
-										break;
-									}
-								default:
-									throw new NotImplementedException("ResolutionScope = " + scope.ToString("X"));
+								}
+								else
+								{
+									module = ResolveModuleRef(ModuleRef.records[(scope & 0xFFFFFF) - 1]);
+								}
+								TypeName typeName = GetTypeName(TypeRef.records[index].TypeNameSpace, TypeRef.records[index].TypeName);
+								typeRefs[index] = module.FindType(typeName) ?? module.universe.GetMissingTypeOrThrow(module, null, typeName);
+								break;
 							}
-						}
-						return typeRefs[index];
+						default:
+							throw new NotImplementedException("ResolutionScope = " + scope.ToString("X"));
 					}
-				case TypeSpecTable.Index:
+				}
+				return typeRefs[index];
+			}
+			else if ((metadataToken >> 24) == TypeSpecTable.Index && index < TypeSpec.RowCount)
+			{
+				if (typeSpecs == null)
+				{
+					typeSpecs = new Type[TypeSpec.records.Length];
+				}
+				Type type = typeSpecs[index];
+				if (type == null)
+				{
+					TrackingGenericContext tc = context == null ? null : new TrackingGenericContext(context);
+					type = Signature.ReadTypeSpec(this, ByteReader.FromBlob(blobHeap, TypeSpec.records[index]), tc);
+					if (tc == null || !tc.IsUsed)
 					{
-						if (typeSpecs == null)
-						{
-							typeSpecs = new Type[TypeSpec.records.Length];
-						}
-						int index = (metadataToken & 0xFFFFFF) - 1;
-						Type type = typeSpecs[index];
-						if (type == null)
-						{
-							TrackingGenericContext tc = context == null ? null : new TrackingGenericContext(context);
-							type = Signature.ReadTypeSpec(this, ByteReader.FromBlob(blobHeap, TypeSpec.records[index]), tc);
-							if (tc == null || !tc.IsUsed)
-							{
-								typeSpecs[index] = type;
-							}
-						}
-						return type;
+						typeSpecs[index] = type;
 					}
-				default:
-					throw new NotImplementedException(String.Format("0x{0:X}", metadataToken));
+				}
+				return type;
+			}
+			else
+			{
+				throw TokenOutOfRangeException(metadataToken);
 			}
 		}
 
@@ -477,16 +497,9 @@ namespace IKVM.Reflection.Reader
 			}
 		}
 
-		private string GetTypeName(int typeNamespace, int typeName)
+		private TypeName GetTypeName(int typeNamespace, int typeName)
 		{
-			if (typeNamespace == 0)
-			{
-				return GetString(typeName);
-			}
-			else
-			{
-				return GetString(typeNamespace) + "." + GetString(typeName);
-			}
+			return new TypeName(GetString(typeNamespace), GetString(typeName));
 		}
 
 		private Assembly ResolveAssemblyRef(int index)
@@ -561,7 +574,7 @@ namespace IKVM.Reflection.Reader
 			get { return assembly; }
 		}
 
-		internal override Type GetTypeImpl(string typeName)
+		internal override Type FindType(TypeName typeName)
 		{
 			PopulateTypeDef();
 			Type type;
@@ -576,6 +589,11 @@ namespace IKVM.Reflection.Reader
 			return type;
 		}
 
+		private Exception TokenOutOfRangeException(int metadataToken)
+		{
+			return new ArgumentOutOfRangeException("metadataToken", String.Format("Token 0x{0:x8} is not valid in the scope of module {1}.", metadataToken, this.Name));
+		}
+
 		public override MemberInfo ResolveMember(int metadataToken, Type[] genericTypeArguments, Type[] genericMethodArguments)
 		{
 			switch (metadataToken >> 24)
@@ -583,12 +601,18 @@ namespace IKVM.Reflection.Reader
 				case FieldTable.Index:
 					return ResolveField(metadataToken, genericTypeArguments, genericMethodArguments);
 				case MemberRefTable.Index:
-					return GetMemberRef((metadataToken & 0xFFFFFF) - 1, genericTypeArguments, genericMethodArguments);
+					int index = (metadataToken & 0xFFFFFF) - 1;
+					if (index < 0 || index >= MemberRef.RowCount)
+					{
+						goto default;
+					}
+					return GetMemberRef(index, genericTypeArguments, genericMethodArguments);
 				case MethodDefTable.Index:
 				case MethodSpecTable.Index:
 					return ResolveMethod(metadataToken, genericTypeArguments, genericMethodArguments);
+				default:
+					throw TokenOutOfRangeException(metadataToken);
 			}
-			throw new ArgumentOutOfRangeException();
 		}
 
 		internal FieldInfo GetFieldAt(TypeDefImpl owner, int index)
@@ -606,20 +630,28 @@ namespace IKVM.Reflection.Reader
 
 		public override FieldInfo ResolveField(int metadataToken, Type[] genericTypeArguments, Type[] genericMethodArguments)
 		{
-			if ((metadataToken >> 24) == FieldTable.Index)
+			int index = (metadataToken & 0xFFFFFF) - 1;
+			if (index < 0)
+			{
+				throw TokenOutOfRangeException(metadataToken);
+			}
+			else if ((metadataToken >> 24) == FieldTable.Index && index < Field.RowCount)
 			{
-				int index = (metadataToken & 0xFFFFFF) - 1;
 				return GetFieldAt(null, index);
 			}
-			else if ((metadataToken >> 24) == MemberRefTable.Index)
+			else if ((metadataToken >> 24) == MemberRefTable.Index && index < MemberRef.RowCount)
 			{
-				FieldInfo field = GetMemberRef((metadataToken & 0xFFFFFF) - 1, genericTypeArguments, genericMethodArguments) as FieldInfo;
+				FieldInfo field = GetMemberRef(index, genericTypeArguments, genericMethodArguments) as FieldInfo;
 				if (field != null)
 				{
 					return field;
 				}
+				throw new ArgumentException(String.Format("Token 0x{0:x8} is not a valid FieldInfo token in the scope of module {1}.", metadataToken, this.Name), "metadataToken");
+			}
+			else
+			{
+				throw TokenOutOfRangeException(metadataToken);
 			}
-			throw new ArgumentOutOfRangeException();
 		}
 
 		private TypeDefImpl FindFieldOwner(int fieldIndex)
@@ -676,46 +708,60 @@ namespace IKVM.Reflection.Reader
 
 		public override MethodBase ResolveMethod(int metadataToken, Type[] genericTypeArguments, Type[] genericMethodArguments)
 		{
-			if ((metadataToken >> 24) == MethodDefTable.Index)
+			int index = (metadataToken & 0xFFFFFF) - 1;
+			if (index < 0)
+			{
+				throw TokenOutOfRangeException(metadataToken);
+			}
+			else if ((metadataToken >> 24) == MethodDefTable.Index && index < MethodDef.RowCount)
 			{
-				int index = (metadataToken & 0xFFFFFF) - 1;
 				return GetMethodAt(null, index);
 			}
-			else if ((metadataToken >> 24) == MemberRefTable.Index)
+			else if ((metadataToken >> 24) == MemberRefTable.Index && index < MemberRef.RowCount)
 			{
-				int index = (metadataToken & 0xFFFFFF) - 1;
 				MethodBase method = GetMemberRef(index, genericTypeArguments, genericMethodArguments) as MethodBase;
 				if (method != null)
 				{
 					return method;
 				}
+				throw new ArgumentException(String.Format("Token 0x{0:x8} is not a valid MethodBase token in the scope of module {1}.", metadataToken, this.Name), "metadataToken");
 			}
-			else if ((metadataToken >> 24) == MethodSpecTable.Index)
+			else if ((metadataToken >> 24) == MethodSpecTable.Index && index < MethodSpec.RowCount)
 			{
-				int index = (metadataToken & 0xFFFFFF) - 1;
 				MethodInfo method = (MethodInfo)ResolveMethod(MethodSpec.records[index].Method, genericTypeArguments, genericMethodArguments);
 				ByteReader instantiation = ByteReader.FromBlob(blobHeap, MethodSpec.records[index].Instantiation);
 				return method.MakeGenericMethod(Signature.ReadMethodSpec(this, instantiation, new GenericContext(genericTypeArguments, genericMethodArguments)));
 			}
-			throw new ArgumentOutOfRangeException();
+			else
+			{
+				throw TokenOutOfRangeException(metadataToken);
+			}
 		}
 
-		public override Type[] __ResolveOptionalParameterTypes(int metadataToken)
+		public override Type[] __ResolveOptionalParameterTypes(int metadataToken, Type[] genericTypeArguments, Type[] genericMethodArguments, out CustomModifiers[] customModifiers)
 		{
-			if ((metadataToken >> 24) == MemberRefTable.Index)
+			int index = (metadataToken & 0xFFFFFF) - 1;
+			if (index < 0)
+			{
+				throw TokenOutOfRangeException(metadataToken);
+			}
+			else if ((metadataToken >> 24) == MemberRefTable.Index && index < MemberRef.RowCount)
 			{
-				int index = (metadataToken & 0xFFFFFF) - 1;
 				int sig = MemberRef.records[index].Signature;
-				return Signature.ReadOptionalParameterTypes(this, GetBlob(sig));
+				return Signature.ReadOptionalParameterTypes(this, GetBlob(sig), new GenericContext(genericTypeArguments, genericMethodArguments), out customModifiers);
 			}
-			else if ((metadataToken >> 24) == MethodDefTable.Index)
+			else if ((metadataToken >> 24) == MethodDefTable.Index && index < MethodDef.RowCount)
 			{
 				// for convenience, we support passing a MethodDef token as well, because in some places
 				// it makes sense to have a vararg method that is referred to by its methoddef (e.g. ldftn).
 				// Note that MethodSpec doesn't make sense, because generic methods cannot be vararg.
+				customModifiers = Empty<CustomModifiers>.Array;
 				return Type.EmptyTypes;
 			}
-			throw new ArgumentOutOfRangeException();
+			else
+			{
+				throw TokenOutOfRangeException(metadataToken);
+			}
 		}
 
 		public override string ScopeName
@@ -755,14 +801,41 @@ namespace IKVM.Reflection.Reader
 					case MethodDefTable.Index:
 						return GetMethodAt(null, (owner & 0xFFFFFF) - 1);
 					case ModuleRefTable.Index:
-						memberRefs[index] = ResolveTypeMemberRef(ResolveModuleType(owner), name, ByteReader.FromBlob(blobHeap, sig), genericTypeArguments, genericMethodArguments);
+						memberRefs[index] = ResolveTypeMemberRef(ResolveModuleType(owner), name, ByteReader.FromBlob(blobHeap, sig));
 						break;
 					case TypeDefTable.Index:
 					case TypeRefTable.Index:
-						memberRefs[index] = ResolveTypeMemberRef(ResolveType(owner), name, ByteReader.FromBlob(blobHeap, sig), genericTypeArguments, genericMethodArguments);
+						memberRefs[index] = ResolveTypeMemberRef(ResolveType(owner), name, ByteReader.FromBlob(blobHeap, sig));
 						break;
 					case TypeSpecTable.Index:
-						return ResolveTypeMemberRef(ResolveType(owner, genericTypeArguments, genericMethodArguments), name, ByteReader.FromBlob(blobHeap, sig), genericTypeArguments, genericMethodArguments);
+					{
+						Type type = ResolveType(owner, genericTypeArguments, genericMethodArguments);
+						if (type.IsArray)
+						{
+							MethodSignature methodSig = MethodSignature.ReadSig(this, ByteReader.FromBlob(blobHeap, sig), new GenericContext(genericTypeArguments, genericMethodArguments));
+							return type.FindMethod(name, methodSig)
+								?? universe.GetMissingMethodOrThrow(type, name, methodSig);
+						}
+						else if (type.IsGenericTypeInstance)
+						{
+							MemberInfo member = ResolveTypeMemberRef(type.GetGenericTypeDefinition(), name, ByteReader.FromBlob(blobHeap, sig));
+							MethodBase mb = member as MethodBase;
+							if (mb != null)
+							{
+								member = mb.BindTypeParameters(type);
+							}
+							FieldInfo fi = member as FieldInfo;
+							if (fi != null)
+							{
+								member = fi.BindTypeParameters(type);
+							}
+							return member;
+						}
+						else
+						{
+							return ResolveTypeMemberRef(type, name, ByteReader.FromBlob(blobHeap, sig));
+						}
+					}
 					default:
 						throw new BadImageFormatException();
 				}
@@ -782,62 +855,78 @@ namespace IKVM.Reflection.Reader
 			return module.GetModuleType();
 		}
 
-		private MemberInfo ResolveTypeMemberRef(Type type, string name, ByteReader sig, Type[] genericTypeArguments, Type[] genericMethodArguments)
+		private MemberInfo ResolveTypeMemberRef(Type type, string name, ByteReader sig)
 		{
-			IGenericContext context;
-			if ((genericTypeArguments == null && genericMethodArguments == null) || type.IsGenericType)
-			{
-				context = type;
-			}
-			else
-			{
-				context = new GenericContext(genericTypeArguments, genericMethodArguments);
-			}
 			if (sig.PeekByte() == Signature.FIELD)
 			{
 				Type org = type;
-				FieldSignature fieldSig = FieldSignature.ReadSig(this, sig, context);
-				do
+				FieldSignature fieldSig = FieldSignature.ReadSig(this, sig, type);
+				FieldInfo field = type.FindField(name, fieldSig);
+				if (field == null && universe.MissingMemberResolution)
 				{
-					FieldInfo field = type.FindField(name, fieldSig);
-					if (field != null)
-					{
-						return field;
-					}
-					type = type.BaseType;
-				} while (type != null);
+					return universe.GetMissingFieldOrThrow(type, name, fieldSig);
+				}
+				while (field == null && (type = type.BaseType) != null)
+				{
+					field = type.FindField(name, fieldSig);
+				}
+				if (field != null)
+				{
+					return field;
+				}
 				throw new MissingFieldException(org.ToString(), name);
 			}
 			else
 			{
 				Type org = type;
-				MethodSignature methodSig = MethodSignature.ReadSig(this, sig, context);
-				do
+				MethodSignature methodSig = MethodSignature.ReadSig(this, sig, type);
+				MethodBase method = type.FindMethod(name, methodSig);
+				if (method == null && universe.MissingMemberResolution)
 				{
-					MethodBase method = type.FindMethod(name, methodSig);
-					if (method != null)
-					{
-						return method;
-					}
-					type = type.BaseType;
-				} while (type != null);
+					return universe.GetMissingMethodOrThrow(type, name, methodSig);
+				}
+				while (method == null && (type = type.BaseType) != null)
+				{
+					method = type.FindMethod(name, methodSig);
+				}
+				if (method != null)
+				{
+					return method;
+				}
 				throw new MissingMethodException(org.ToString(), name);
 			}
 		}
 
-		internal new ByteReader ResolveSignature(int metadataToken)
+		internal ByteReader GetStandAloneSig(int index)
+		{
+			return ByteReader.FromBlob(blobHeap, StandAloneSig.records[index]);
+		}
+
+		public override byte[] ResolveSignature(int metadataToken)
 		{
-			if ((metadataToken >> 24) == StandAloneSigTable.Index)
+			int index = (metadataToken & 0xFFFFFF) - 1;
+			if ((metadataToken >> 24) == StandAloneSigTable.Index && index >= 0 && index < StandAloneSig.RowCount)
 			{
-				int index = (metadataToken & 0xFFFFFF) - 1;
-				return ByteReader.FromBlob(blobHeap, StandAloneSig.records[index]);
+				ByteReader br = GetStandAloneSig(index);
+				return br.ReadBytes(br.Length);
+			}
+			else
+			{
+				throw TokenOutOfRangeException(metadataToken);
 			}
-			throw new ArgumentOutOfRangeException();
 		}
 
 		public override __StandAloneMethodSig __ResolveStandAloneMethodSig(int metadataToken, Type[] genericTypeArguments, Type[] genericMethodArguments)
 		{
-			return MethodSignature.ReadStandAloneMethodSig(this, ResolveSignature(metadataToken), new GenericContext(genericTypeArguments, genericMethodArguments));
+			int index = (metadataToken & 0xFFFFFF) - 1;
+			if ((metadataToken >> 24) == StandAloneSigTable.Index && index >= 0 && index < StandAloneSig.RowCount)
+			{
+				return MethodSignature.ReadStandAloneMethodSig(this, GetStandAloneSig(index), new GenericContext(genericTypeArguments, genericMethodArguments));
+			}
+			else
+			{
+				throw TokenOutOfRangeException(metadataToken);
+			}
 		}
 
 		internal MethodInfo GetEntryPoint()
@@ -881,7 +970,7 @@ namespace IKVM.Reflection.Reader
 					{
 						throw new NotImplementedException();
 					}
-					SeekRVA((int)cliHeader.ResourcesRVA + ManifestResource.records[i].Offset);
+					SeekRVA((int)cliHeader.Resources.VirtualAddress + ManifestResource.records[i].Offset);
 					BinaryReader br = new BinaryReader(stream);
 					int length = br.ReadInt32();
 					return new MemoryStream(br.ReadBytes(length));
@@ -915,13 +1004,21 @@ namespace IKVM.Reflection.Reader
 						name.SetPublicKeyToken(keyOrToken);
 					}
 				}
+				else
+				{
+					name.SetPublicKeyToken(Empty<byte>.Array);
+				}
 				if (AssemblyRef.records[i].Culture != 0)
 				{
-					name.CultureInfo = new System.Globalization.CultureInfo(GetString(AssemblyRef.records[i].Culture));
+					name.Culture = GetString(AssemblyRef.records[i].Culture);
 				}
 				else
 				{
-					name.CultureInfo = System.Globalization.CultureInfo.InvariantCulture;
+					name.Culture = "";
+				}
+				if (AssemblyRef.records[i].HashValue != 0)
+				{
+					name.hash = GetBlobCopy(AssemblyRef.records[i].HashValue);
 				}
 				name.Flags = (AssemblyNameFlags)AssemblyRef.records[i].Flags;
 				list.Add(name);
@@ -929,13 +1026,74 @@ namespace IKVM.Reflection.Reader
 			return list.ToArray();
 		}
 
+		public override void __ResolveReferencedAssemblies(Assembly[] assemblies)
+		{
+			if (assemblyRefs == null)
+			{
+				assemblyRefs = new Assembly[AssemblyRef.RowCount];
+			}
+			for (int i = 0; i < assemblies.Length; i++)
+			{
+				if (assemblyRefs[i] == null)
+				{
+					assemblyRefs[i] = assemblies[i];
+				}
+			}
+		}
+
+		public override string[] __GetReferencedModules()
+		{
+			string[] arr = new string[this.ModuleRef.RowCount];
+			for (int i = 0; i < arr.Length; i++)
+			{
+				arr[i] = GetString(this.ModuleRef.records[i]);
+			}
+			return arr;
+		}
+
+		public override Type[] __GetReferencedTypes()
+		{
+			Type[] arr = new Type[this.TypeRef.RowCount];
+			for (int i = 0; i < arr.Length; i++)
+			{
+				arr[i] = ResolveType((TypeRefTable.Index << 24) + i + 1);
+			}
+			return arr;
+		}
+
+		public override Type[] __GetExportedTypes()
+		{
+			Type[] arr = new Type[this.ExportedType.RowCount];
+			for (int i = 0; i < arr.Length; i++)
+			{
+				arr[i] = ResolveExportedType(i);
+			}
+			return arr;
+		}
+
+		private Type ResolveExportedType(int index)
+		{
+			TypeName typeName = GetTypeName(ExportedType.records[index].TypeNamespace, ExportedType.records[index].TypeName);
+			int implementation = ExportedType.records[index].Implementation;
+			int token = ExportedType.records[index].TypeDefId;
+			switch (implementation >> 24)
+			{
+				case AssemblyRefTable.Index:
+					return ResolveAssemblyRef((implementation & 0xFFFFFF) - 1).ResolveType(typeName).SetMetadataTokenForMissing(token);
+				case ExportedTypeTable.Index:
+					return ResolveExportedType((implementation & 0xFFFFFF) - 1).ResolveNestedType(typeName).SetMetadataTokenForMissing(token);
+				default:
+					throw new NotImplementedException();
+			}
+		}
+
 		internal override Type GetModuleType()
 		{
 			PopulateTypeDef();
 			return moduleType;
 		}
 
-		internal string ImageRuntimeVersion
+		public override string __ImageRuntimeVersion
 		{
 			get { return imageRuntimeVersion; }
 		}
@@ -955,6 +1113,30 @@ namespace IKVM.Reflection.Reader
 			return peFile.RvaToFileOffset((uint)rva);
 		}
 
+		public override bool __GetSectionInfo(int rva, out string name, out int characteristics)
+		{
+			return peFile.GetSectionInfo(rva, out name, out characteristics);
+		}
+
+		public override int __ReadDataFromRVA(int rva, byte[] data, int offset, int length)
+		{
+			SeekRVA(rva);
+			int totalBytesRead = 0;
+			while (length > 0)
+			{
+				int read = stream.Read(data, offset, length);
+				if (read == 0)
+				{
+					// C++ assemblies can have fields that have an RVA that lies outside of the file
+					break;
+				}
+				offset += read;
+				length -= read;
+				totalBytesRead += read;
+			}
+			return totalBytesRead;
+		}
+
 		public override void GetPEKind(out PortableExecutableKinds peKind, out ImageFileMachine machine)
 		{
 			peKind = 0;
@@ -962,9 +1144,18 @@ namespace IKVM.Reflection.Reader
 			{
 				peKind |= PortableExecutableKinds.ILOnly;
 			}
-			if ((cliHeader.Flags & CliHeader.COMIMAGE_FLAGS_32BITREQUIRED) != 0)
+			switch (cliHeader.Flags & (CliHeader.COMIMAGE_FLAGS_32BITREQUIRED | CliHeader.COMIMAGE_FLAGS_32BITPREFERRED))
 			{
-				peKind |= PortableExecutableKinds.Required32Bit;
+				case CliHeader.COMIMAGE_FLAGS_32BITREQUIRED:
+					peKind |= PortableExecutableKinds.Required32Bit;
+					break;
+				case CliHeader.COMIMAGE_FLAGS_32BITREQUIRED | CliHeader.COMIMAGE_FLAGS_32BITPREFERRED:
+					peKind |= PortableExecutableKinds.Preferred32Bit;
+					break;
+				default:
+					// COMIMAGE_FLAGS_32BITPREFERRED by itself is illegal, so we ignore it
+					// (not setting any flag is ok)
+					break;
 			}
 			if (peFile.OptionalHeader.Magic == IMAGE_OPTIONAL_HEADER.IMAGE_NT_OPTIONAL_HDR64_MAGIC)
 			{
@@ -981,21 +1172,21 @@ namespace IKVM.Reflection.Reader
 
 		public override IList<CustomAttributeData> __GetPlaceholderAssemblyCustomAttributes(bool multiple, bool security)
 		{
-			string typeName;
+			TypeName typeName;
 			switch ((multiple ? 1 : 0) + (security ? 2 : 0))
 			{
 				case 0:
-					typeName = "System.Runtime.CompilerServices.AssemblyAttributesGoHere";
+					typeName = new TypeName("System.Runtime.CompilerServices", "AssemblyAttributesGoHere");
 					break;
 				case 1:
-					typeName = "System.Runtime.CompilerServices.AssemblyAttributesGoHereM";
+					typeName = new TypeName("System.Runtime.CompilerServices", "AssemblyAttributesGoHereM");
 					break;
 				case 2:
-					typeName = "System.Runtime.CompilerServices.AssemblyAttributesGoHereS";
+					typeName = new TypeName("System.Runtime.CompilerServices", "AssemblyAttributesGoHereS");
 					break;
 				case 3:
 				default:
-					typeName = "System.Runtime.CompilerServices.AssemblyAttributesGoHereSM";
+					typeName = new TypeName("System.Runtime.CompilerServices", "AssemblyAttributesGoHereSM");
 					break;
 			}
 			List<CustomAttributeData> list = new List<CustomAttributeData>();
@@ -1006,8 +1197,7 @@ namespace IKVM.Reflection.Reader
 					int index = (CustomAttribute.records[i].Parent & 0xFFFFFF) - 1;
 					if (typeName == GetTypeName(TypeRef.records[index].TypeNameSpace, TypeRef.records[index].TypeName))
 					{
-						ConstructorInfo constructor = (ConstructorInfo)ResolveMethod(CustomAttribute.records[i].Type);
-						list.Add(new CustomAttributeData(this.Assembly, constructor, GetBlob(CustomAttribute.records[i].Value)));
+						list.Add(new CustomAttributeData(this, i));
 					}
 				}
 			}
@@ -1024,5 +1214,30 @@ namespace IKVM.Reflection.Reader
 			PopulateTypeDef();
 			manifestModule.ExportTypes(typeDefs, fileToken);
 		}
+
+		protected override long GetImageBaseImpl()
+		{
+			return (long)peFile.OptionalHeader.ImageBase;
+		}
+
+		public override long __StackReserve
+		{
+			get { return (long)peFile.OptionalHeader.SizeOfStackReserve; }
+		}
+
+		public override int __FileAlignment
+		{
+			get { return (int)peFile.OptionalHeader.FileAlignment; }
+		}
+
+		public override int __EntryPointRVA
+		{
+			get { return (cliHeader.Flags & CliHeader.COMIMAGE_FLAGS_NATIVE_ENTRYPOINT) != 0 ? (int)cliHeader.EntryPointToken : 0; }
+		}
+
+		public override int __EntryPointToken
+		{
+			get { return (cliHeader.Flags & CliHeader.COMIMAGE_FLAGS_NATIVE_ENTRYPOINT) == 0 ? (int)cliHeader.EntryPointToken : 0; }
+		}
 	}
 }
diff --git a/mcs/class/IKVM.Reflection/Reader/PEReader.cs b/mcs/class/IKVM.Reflection/Reader/PEReader.cs
index dcafcf0..cd1fb20 100644
--- a/mcs/class/IKVM.Reflection/Reader/PEReader.cs
+++ b/mcs/class/IKVM.Reflection/Reader/PEReader.cs
@@ -207,6 +207,12 @@ namespace IKVM.Reflection.Reader
 			VirtualAddress = br.ReadUInt32();
 			Size = br.ReadUInt32();
 		}
+
+		internal void Write(IKVM.Reflection.Writer.MetadataWriter mw)
+		{
+			mw.Write(VirtualAddress);
+			mw.Write(Size);
+		}
 	}
 
 	class SectionHeader
@@ -314,5 +320,21 @@ namespace IKVM.Reflection.Reader
 			}
 			throw new BadImageFormatException();
 		}
+
+		internal bool GetSectionInfo(int rva, out string name, out int characteristics)
+		{
+			for (int i = 0; i < sections.Length; i++)
+			{
+				if (rva >= sections[i].VirtualAddress && rva < sections[i].VirtualAddress + sections[i].VirtualSize)
+				{
+					name = sections[i].Name;
+					characteristics = (int)sections[i].Characteristics;
+					return true;
+				}
+			}
+			name = null;
+			characteristics = 0;
+			return false;
+		}
 	}
 }
diff --git a/mcs/class/IKVM.Reflection/Reader/ResourceModule.cs b/mcs/class/IKVM.Reflection/Reader/ResourceModule.cs
index e80170d..6e3e392 100644
--- a/mcs/class/IKVM.Reflection/Reader/ResourceModule.cs
+++ b/mcs/class/IKVM.Reflection/Reader/ResourceModule.cs
@@ -1,5 +1,5 @@
 /*
-  Copyright (C) 2009 Jeroen Frijters
+  Copyright (C) 2009-2011 Jeroen Frijters
 
   This software is provided 'as-is', without any express or implied
   warranty.  In no event will the authors be held liable for any damages
@@ -23,20 +23,21 @@
 */
 using System;
 using System.Collections.Generic;
+using IKVM.Reflection.Metadata;
 
 namespace IKVM.Reflection.Reader
 {
-	sealed class ResourceModule : Module
+	sealed class ResourceModule : NonPEModule
 	{
-		private readonly Assembly assembly;
-		private readonly string scopeName;
+		private readonly ModuleReader manifest;
+		private readonly int index;
 		private readonly string location;
 
-		internal ResourceModule(Assembly assembly, string scopeName, string location)
-			: base(assembly.universe)
+		internal ResourceModule(ModuleReader manifest, int index, string location)
+			: base(manifest.universe)
 		{
-			this.assembly = assembly;
-			this.scopeName = scopeName;
+			this.manifest = manifest;
+			this.index = index;
 			this.location = location;
 		}
 
@@ -52,7 +53,7 @@ namespace IKVM.Reflection.Reader
 
 		public override Assembly Assembly
 		{
-			get { return assembly; }
+			get { return manifest.Assembly; }
 		}
 
 		public override string FullyQualifiedName
@@ -67,7 +68,7 @@ namespace IKVM.Reflection.Reader
 
 		public override string ScopeName
 		{
-			get { return scopeName; }
+			get { return manifest.GetString(manifest.File.records[index].Name); }
 		}
 
 		public override Guid ModuleVersionId
@@ -75,42 +76,16 @@ namespace IKVM.Reflection.Reader
 			get { throw new NotSupportedException(); }
 		}
 
-		public override Type ResolveType(int metadataToken, Type[] genericTypeArguments, Type[] genericMethodArguments)
+		public override byte[] __ModuleHash
 		{
-			throw new NotSupportedException();
+			get
+			{
+				int blob = manifest.File.records[index].HashValue;
+				return blob == 0 ? Empty<byte>.Array : manifest.GetBlobCopy(blob);
+			}
 		}
 
-		public override MethodBase ResolveMethod(int metadataToken, Type[] genericTypeArguments, Type[] genericMethodArguments)
-		{
-			throw new NotSupportedException();
-		}
-
-		public override FieldInfo ResolveField(int metadataToken, Type[] genericTypeArguments, Type[] genericMethodArguments)
-		{
-			throw new NotSupportedException();
-		}
-
-		public override MemberInfo ResolveMember(int metadataToken, Type[] genericTypeArguments, Type[] genericMethodArguments)
-		{
-			throw new NotSupportedException();
-		}
-
-		public override string ResolveString(int metadataToken)
-		{
-			throw new NotSupportedException();
-		}
-
-		public override Type[] __ResolveOptionalParameterTypes(int metadataToken)
-		{
-			throw new NotSupportedException();
-		}
-
-		public override AssemblyName[] __GetReferencedAssemblies()
-		{
-			throw new NotSupportedException();
-		}
-
-		internal override Type GetTypeImpl(string typeName)
+		internal override Type FindType(TypeName typeName)
 		{
 			return null;
 		}
@@ -119,14 +94,9 @@ namespace IKVM.Reflection.Reader
 		{
 		}
 
-		internal override Type GetModuleType()
-		{
-			throw new InvalidOperationException();
-		}
-
-		internal override ByteReader GetBlob(int blobIndex)
+		protected override Exception ArgumentOutOfRangeException()
 		{
-			throw new InvalidOperationException();
+			return new NotSupportedException();
 		}
 	}
 }
diff --git a/mcs/class/IKVM.Reflection/Reader/TypeDefImpl.cs b/mcs/class/IKVM.Reflection/Reader/TypeDefImpl.cs
index ec6aba1..b04ecbc 100644
--- a/mcs/class/IKVM.Reflection/Reader/TypeDefImpl.cs
+++ b/mcs/class/IKVM.Reflection/Reader/TypeDefImpl.cs
@@ -1,5 +1,5 @@
 /*
-  Copyright (C) 2009 Jeroen Frijters
+  Copyright (C) 2009-2011 Jeroen Frijters
 
   This software is provided 'as-is', without any express or implied
   warranty.  In no event will the authors be held liable for any damages
@@ -41,8 +41,9 @@ namespace IKVM.Reflection.Reader
 		{
 			this.module = module;
 			this.index = index;
-			this.typeName = TypeNameParser.Escape(module.GetString(module.TypeDef.records[index].TypeName));
-			this.typeNamespace = TypeNameParser.Escape(module.GetString(module.TypeDef.records[index].TypeNamespace));
+			this.typeName = module.GetString(module.TypeDef.records[index].TypeName);
+			this.typeNamespace = module.GetString(module.TypeDef.records[index].TypeNamespace);
+			MarkEnumOrValueType(typeNamespace, typeName);
 		}
 
 		public override Type BaseType
@@ -65,21 +66,26 @@ namespace IKVM.Reflection.Reader
 
 		public override EventInfo[] __GetDeclaredEvents()
 		{
-			int token = this.MetadataToken;
-			// TODO use binary search?
-			for (int i = 0; i < module.EventMap.records.Length; i++)
+			foreach (int i in module.EventMap.Filter(this.MetadataToken))
 			{
-				if (module.EventMap.records[i].Parent == token)
+				int evt = module.EventMap.records[i].EventList - 1;
+				int end = module.EventMap.records.Length > i + 1 ? module.EventMap.records[i + 1].EventList - 1 : module.Event.records.Length;
+				EventInfo[] events = new EventInfo[end - evt];
+				if (module.EventPtr.RowCount == 0)
 				{
-					int evt = module.EventMap.records[i].EventList - 1;
-					int end = module.EventMap.records.Length > i + 1 ? module.EventMap.records[i + 1].EventList - 1 : module.Event.records.Length;
-					EventInfo[] events = new EventInfo[end - evt];
 					for (int j = 0; evt < end; evt++, j++)
 					{
 						events[j] = new EventInfoImpl(module, this, evt);
 					}
-					return events;
 				}
+				else
+				{
+					for (int j = 0; evt < end; evt++, j++)
+					{
+						events[j] = new EventInfoImpl(module, this, module.EventPtr.records[evt] - 1);
+					}
+				}
+				return events;
 			}
 			return Empty<EventInfo>.Array;
 		}
@@ -89,26 +95,35 @@ namespace IKVM.Reflection.Reader
 			int field = module.TypeDef.records[index].FieldList - 1;
 			int end = module.TypeDef.records.Length > index + 1 ? module.TypeDef.records[index + 1].FieldList - 1 : module.Field.records.Length;
 			FieldInfo[] fields = new FieldInfo[end - field];
-			for (int i = 0; field < end; i++, field++)
+			if (module.FieldPtr.RowCount == 0)
+			{
+				for (int i = 0; field < end; i++, field++)
+				{
+					fields[i] = module.GetFieldAt(this, field);
+				}
+			}
+			else
 			{
-				fields[i] = module.GetFieldAt(this, field);
+				for (int i = 0; field < end; i++, field++)
+				{
+					fields[i] = module.GetFieldAt(this, module.FieldPtr.records[field] - 1);
+				}
 			}
 			return fields;
 		}
 
 		public override Type[] __GetDeclaredInterfaces()
 		{
-			int token = this.MetadataToken;
-			List<Type> list = new List<Type>();
-			// TODO use binary search?
-			for (int i = 0; i < module.InterfaceImpl.records.Length; i++)
+			List<Type> list = null;
+			foreach (int i in module.InterfaceImpl.Filter(this.MetadataToken))
 			{
-				if (module.InterfaceImpl.records[i].Class == token)
+				if (list == null)
 				{
-					list.Add(module.ResolveType(module.InterfaceImpl.records[i].Interface, this));
+					list = new List<Type>();
 				}
+				list.Add(module.ResolveType(module.InterfaceImpl.records[i].Interface, this));
 			}
-			return list.ToArray();
+			return Util.ToArray(list, Type.EmptyTypes);
 		}
 
 		public override MethodBase[] __GetDeclaredMethods()
@@ -116,34 +131,40 @@ namespace IKVM.Reflection.Reader
 			int method = module.TypeDef.records[index].MethodList - 1;
 			int end = module.TypeDef.records.Length > index + 1 ? module.TypeDef.records[index + 1].MethodList - 1 : module.MethodDef.records.Length;
 			MethodBase[] methods = new MethodBase[end - method];
-			for (int i = 0; method < end; method++, i++)
+			if (module.MethodPtr.RowCount == 0)
+			{
+				for (int i = 0; method < end; method++, i++)
+				{
+					methods[i] = module.GetMethodAt(this, method);
+				}
+			}
+			else
 			{
-				methods[i] = module.GetMethodAt(this, method);
+				for (int i = 0; method < end; method++, i++)
+				{
+					methods[i] = module.GetMethodAt(this, module.MethodPtr.records[method] - 1);
+				}
 			}
 			return methods;
 		}
 
 		public override __MethodImplMap __GetMethodImplMap()
 		{
+			PopulateGenericArguments();
 			List<MethodInfo> bodies = new List<MethodInfo>();
 			List<List<MethodInfo>> declarations = new List<List<MethodInfo>>();
-			int token = this.MetadataToken;
-			// TODO use binary search?
-			for (int i = 0; i < module.MethodImpl.records.Length; i++)
+			foreach (int i in module.MethodImpl.Filter(this.MetadataToken))
 			{
-				if (module.MethodImpl.records[i].Class == token)
+				MethodInfo body = (MethodInfo)module.ResolveMethod(module.MethodImpl.records[i].MethodBody, typeArgs, null);
+				int index = bodies.IndexOf(body);
+				if (index == -1)
 				{
-					MethodInfo body = (MethodInfo)module.ResolveMethod(module.MethodImpl.records[i].MethodBody, typeArgs, null);
-					int index = bodies.IndexOf(body);
-					if (index == -1)
-					{
-						index = bodies.Count;
-						bodies.Add(body);
-						declarations.Add(new List<MethodInfo>());
-					}
-					MethodInfo declaration = (MethodInfo)module.ResolveMethod(module.MethodImpl.records[i].MethodDeclaration, typeArgs, null);
-					declarations[index].Add(declaration);
+					index = bodies.Count;
+					bodies.Add(body);
+					declarations.Add(new List<MethodInfo>());
 				}
+				MethodInfo declaration = (MethodInfo)module.ResolveMethod(module.MethodImpl.records[i].MethodDeclaration, typeArgs, null);
+				declarations[index].Add(declaration);
 			}
 			__MethodImplMap map = new __MethodImplMap();
 			map.TargetType = this;
@@ -160,7 +181,7 @@ namespace IKVM.Reflection.Reader
 		{
 			int token = this.MetadataToken;
 			List<Type> list = new List<Type>();
-			// TODO use binary search?
+			// note that the NestedClass table is sorted on NestedClass, so we can't use binary search
 			for (int i = 0; i < module.NestedClass.records.Length; i++)
 			{
 				if (module.NestedClass.records[i].EnclosingClass == token)
@@ -173,38 +194,48 @@ namespace IKVM.Reflection.Reader
 
 		public override PropertyInfo[] __GetDeclaredProperties()
 		{
-			int token = this.MetadataToken;
-			// TODO use binary search?
-			for (int i = 0; i < module.PropertyMap.records.Length; i++)
+			foreach (int i in module.PropertyMap.Filter(this.MetadataToken))
 			{
-				if (module.PropertyMap.records[i].Parent == token)
+				int property = module.PropertyMap.records[i].PropertyList - 1;
+				int end = module.PropertyMap.records.Length > i + 1 ? module.PropertyMap.records[i + 1].PropertyList - 1 : module.Property.records.Length;
+				PropertyInfo[] properties = new PropertyInfo[end - property];
+				if (module.PropertyPtr.RowCount == 0)
 				{
-					int property = module.PropertyMap.records[i].PropertyList - 1;
-					int end = module.PropertyMap.records.Length > i + 1 ? module.PropertyMap.records[i + 1].PropertyList - 1 : module.Property.records.Length;
-					PropertyInfo[] properties = new PropertyInfo[end - property];
 					for (int j = 0; property < end; property++, j++)
 					{
 						properties[j] = new PropertyInfoImpl(module, this, property);
 					}
-					return properties;
 				}
+				else
+				{
+					for (int j = 0; property < end; property++, j++)
+					{
+						properties[j] = new PropertyInfoImpl(module, this, module.PropertyPtr.records[property] - 1);
+					}
+				}
+				return properties;
 			}
 			return Empty<PropertyInfo>.Array;
 		}
 
-		public override string Name
+		public override string __Name
 		{
 			get { return typeName; }
 		}
 
-		public override string Namespace
+		public override string __Namespace
 		{
 			get { return typeNamespace; }
 		}
 
-		public override Type UnderlyingSystemType
+		public override string Name
 		{
-			get { return this; }
+			get { return TypeNameParser.Escape(typeName); }
+		}
+
+		public override string FullName
+		{
+			get { return GetFullName(); }
 		}
 
 		public override int MetadataToken
@@ -247,16 +278,10 @@ namespace IKVM.Reflection.Reader
 			return typeArgs[index];
 		}
 
-		public override Type[][] __GetGenericArgumentsOptionalCustomModifiers()
+		public override CustomModifiers[] __GetGenericArgumentsCustomModifiers()
 		{
 			PopulateGenericArguments();
-			return Util.Copy(new Type[typeArgs.Length][]);
-		}
-
-		public override Type[][] __GetGenericArgumentsRequiredCustomModifiers()
-		{
-			PopulateGenericArguments();
-			return Util.Copy(new Type[typeArgs.Length][]);
+			return new CustomModifiers[typeArgs.Length];
 		}
 
 		public override bool IsGenericType
@@ -295,23 +320,23 @@ namespace IKVM.Reflection.Reader
 			return sb.ToString();
 		}
 
+		internal bool IsNestedByFlags
+		{
+			get { return (this.Attributes & TypeAttributes.VisibilityMask & ~TypeAttributes.Public) != 0; }
+		}
+
 		public override Type DeclaringType
 		{
 			get
 			{
 				// note that we cannot use Type.IsNested for this, because that calls DeclaringType
-				if ((this.Attributes & TypeAttributes.VisibilityMask & ~TypeAttributes.Public) == 0)
+				if (!IsNestedByFlags)
 				{
 					return null;
 				}
-				// TODO use binary search (if sorted)
-				int token = this.MetadataToken;
-				for (int i = 0; i < module.NestedClass.records.Length; i++)
+				foreach (int i in module.NestedClass.Filter(this.MetadataToken))
 				{
-					if (module.NestedClass.records[i].NestedClass == token)
-					{
-						return module.ResolveType(module.NestedClass.records[i].EnclosingClass, null, null);
-					}
+					return module.ResolveType(module.NestedClass.records[i].EnclosingClass, null, null);
 				}
 				throw new InvalidOperationException();
 			}
@@ -325,7 +350,8 @@ namespace IKVM.Reflection.Reader
 				switch (this.Attributes & TypeAttributes.LayoutMask)
 				{
 					case TypeAttributes.AutoLayout:
-						return null;
+						layout = new StructLayoutAttribute(LayoutKind.Auto);
+						break;
 					case TypeAttributes.SequentialLayout:
 						layout = new StructLayoutAttribute(LayoutKind.Sequential);
 						break;
@@ -335,36 +361,43 @@ namespace IKVM.Reflection.Reader
 					default:
 						throw new BadImageFormatException();
 				}
-				int token = this.MetadataToken;
-				// TODO use binary search?
-				for (int i = 0; i < module.ClassLayout.records.Length; i++)
+				switch (this.Attributes & TypeAttributes.StringFormatMask)
 				{
-					if (module.ClassLayout.records[i].Parent == token)
-					{
-						layout.Pack = module.ClassLayout.records[i].PackingSize;
-						layout.Size = module.ClassLayout.records[i].ClassSize;
-						switch (this.Attributes & TypeAttributes.StringFormatMask)
-						{
-							case TypeAttributes.AnsiClass:
-								layout.CharSet = CharSet.Ansi;
-								break;
-							case TypeAttributes.UnicodeClass:
-								layout.CharSet = CharSet.Unicode;
-								break;
-							case TypeAttributes.AutoClass:
-								layout.CharSet = CharSet.Auto;
-								break;
-							default:
-								layout.CharSet = CharSet.None;
-								break;
-						}
-						return layout;
-					}
+					case TypeAttributes.AnsiClass:
+						layout.CharSet = CharSet.Ansi;
+						break;
+					case TypeAttributes.UnicodeClass:
+						layout.CharSet = CharSet.Unicode;
+						break;
+					case TypeAttributes.AutoClass:
+						layout.CharSet = CharSet.Auto;
+						break;
+					default:
+						layout.CharSet = CharSet.None;
+						break;
+				}
+				if (!__GetLayout(out layout.Pack, out layout.Size))
+				{
+					// compatibility with System.Reflection
+					layout.Pack = 8;
 				}
-				return null;
+				return layout;
 			}
 		}
 
+		public override bool __GetLayout(out int packingSize, out int typeSize)
+		{
+			foreach (int i in module.ClassLayout.Filter(this.MetadataToken))
+			{
+				packingSize = module.ClassLayout.records[i].PackingSize;
+				typeSize = module.ClassLayout.records[i].ClassSize;
+				return true;
+			}
+			packingSize = 0;
+			typeSize = 0;
+			return false;
+		}
+
 		public override Module Module
 		{
 			get { return module; }
@@ -374,5 +407,17 @@ namespace IKVM.Reflection.Reader
 		{
 			get { return index == 0; }
 		}
+
+		internal override IList<CustomAttributeData> GetInterfaceImplCustomAttributes(Type interfaceType, Type attributeType)
+		{
+			foreach (int i in module.InterfaceImpl.Filter(this.MetadataToken))
+			{
+				if (module.ResolveType(module.InterfaceImpl.records[i].Interface, this) == interfaceType)
+				{
+					return module.GetCustomAttributes((InterfaceImplTable.Index << 24) | (i + 1), attributeType);
+				}
+			}
+			return Empty<CustomAttributeData>.Array;
+		}
 	}
 }
diff --git a/mcs/class/IKVM.Reflection/Signature.cs b/mcs/class/IKVM.Reflection/Signature.cs
index 7924c4f..55b0203 100644
--- a/mcs/class/IKVM.Reflection/Signature.cs
+++ b/mcs/class/IKVM.Reflection/Signature.cs
@@ -1,5 +1,5 @@
 /*
-  Copyright (C) 2009-2010 Jeroen Frijters
+  Copyright (C) 2009-2011 Jeroen Frijters
 
   This software is provided 'as-is', without any express or implied
   warranty.  In no event will the authors be held liable for any damages
@@ -82,46 +82,46 @@ namespace IKVM.Reflection
 
 		private static Type ReadGenericInst(ModuleReader module, ByteReader br, IGenericContext context)
 		{
+			Type type;
 			switch (br.ReadByte())
 			{
 				case ELEMENT_TYPE_CLASS:
+					type = ReadTypeDefOrRefEncoded(module, br, context).MarkNotValueType();
+					break;
 				case ELEMENT_TYPE_VALUETYPE:
+					type = ReadTypeDefOrRefEncoded(module, br, context).MarkValueType();
 					break;
 				default:
 					throw new BadImageFormatException();
 			}
-			Type type = ReadTypeDefOrRefEncoded(module, br, context);
-			if (!type.IsGenericTypeDefinition)
+			if (!type.__IsMissing && !type.IsGenericTypeDefinition)
 			{
 				throw new BadImageFormatException();
 			}
 			int genArgCount = br.ReadCompressedInt();
 			Type[] args = new Type[genArgCount];
-			Type[][] reqmod = null;
-			Type[][] optmod = null;
+			CustomModifiers[] mods = null;
 			for (int i = 0; i < genArgCount; i++)
 			{
 				// LAMESPEC the Type production (23.2.12) doesn't include CustomMod* for genericinst, but C++ uses it, the verifier allows it and ildasm also supports it
-				CustomModifiers mods = ReadCustomModifiers(module, br, context);
-				if (mods.required != null || mods.optional != null)
+				CustomModifiers cm = CustomModifiers.Read(module, br, context);
+				if (!cm.IsEmpty)
 				{
-					if (reqmod == null)
+					if (mods == null)
 					{
-						reqmod = new Type[genArgCount][];
-						optmod = new Type[genArgCount][];
+						mods = new CustomModifiers[genArgCount];
 					}
-					reqmod[i] = mods.required;
-					optmod[i] = mods.optional;
+					mods[i] = cm;
 				}
 				args[i] = ReadType(module, br, context);
 			}
-			return GenericTypeInstance.Make(type, args, reqmod, optmod);
+			return GenericTypeInstance.Make(type, args, mods);
 		}
 
 		internal static Type ReadTypeSpec(ModuleReader module, ByteReader br, IGenericContext context)
 		{
 			// LAMESPEC a TypeSpec can contain custom modifiers (C++/CLI generates "newarr (TypeSpec with custom modifiers)")
-			SkipCustomModifiers(br);
+			CustomModifiers.Skip(br);
 			// LAMESPEC anything can be adorned by (useless) custom modifiers
 			// also, VAR and MVAR are also used in TypeSpec (contrary to what the spec says)
 			return ReadType(module, br, context);
@@ -129,10 +129,16 @@ namespace IKVM.Reflection
 
 		private static Type ReadFunctionPointer(ModuleReader module, ByteReader br, IGenericContext context)
 		{
-			// TODO like .NET we return System.IntPtr here, but ideally we should fire an event in Universe that
-			// the user can hook to provide a custom type (or we simply should build in full support for function pointer types)
-			MethodSignature.ReadStandAloneMethodSig(module, br, context);
-			return module.universe.System_IntPtr;
+			__StandAloneMethodSig sig = MethodSignature.ReadStandAloneMethodSig(module, br, context);
+			if (module.universe.EnableFunctionPointers)
+			{
+				return FunctionPointerType.Make(module.universe, sig);
+			}
+			else
+			{
+				// by default, like .NET we return System.IntPtr here
+				return module.universe.System_IntPtr;
+			}
 		}
 
 		internal static Type[] ReadMethodSpec(ModuleReader module, ByteReader br, IGenericContext context)
@@ -149,20 +155,19 @@ namespace IKVM.Reflection
 			return args;
 		}
 
-		private static int ReadArrayShape(ByteReader br)
+		private static int[] ReadArrayBounds(ByteReader br)
 		{
-			int rank = br.ReadCompressedInt();
-			int numSizes = br.ReadCompressedInt();
-			for (int i = 0; i < numSizes; i++)
+			int num = br.ReadCompressedInt();
+			if (num == 0)
 			{
-				br.ReadCompressedInt();
+				return null;
 			}
-			int numLoBounds = br.ReadCompressedInt();
-			for (int i = 0; i < numLoBounds; i++)
+			int[] arr = new int[num];
+			for (int i = 0; i < num; i++)
 			{
-				br.ReadCompressedInt();
+				arr[i] = br.ReadCompressedInt();
 			}
-			return rank;
+			return arr;
 		}
 
 		private static Type ReadTypeOrVoid(ModuleReader module, ByteReader br, IGenericContext context)
@@ -185,8 +190,9 @@ namespace IKVM.Reflection
 			switch (br.ReadByte())
 			{
 				case ELEMENT_TYPE_CLASS:
+					return ReadTypeDefOrRefEncoded(module, br, context).MarkNotValueType();
 				case ELEMENT_TYPE_VALUETYPE:
-					return ReadTypeDefOrRefEncoded(module, br, context);
+					return ReadTypeDefOrRefEncoded(module, br, context).MarkValueType();
 				case ELEMENT_TYPE_BOOLEAN:
 					return module.universe.System_Boolean;
 				case ELEMENT_TYPE_CHAR:
@@ -226,14 +232,14 @@ namespace IKVM.Reflection
 				case ELEMENT_TYPE_GENERICINST:
 					return ReadGenericInst(module, br, context);
 				case ELEMENT_TYPE_SZARRAY:
-					mods = ReadCustomModifiers(module, br, context);
-					return ReadType(module, br, context).__MakeArrayType(mods.required, mods.optional);
+					mods = CustomModifiers.Read(module, br, context);
+					return ReadType(module, br, context).__MakeArrayType(mods);
 				case ELEMENT_TYPE_ARRAY:
-					mods = ReadCustomModifiers(module, br, context);
-					return ReadType(module, br, context).__MakeArrayType(ReadArrayShape(br), mods.required, mods.optional);
+					mods = CustomModifiers.Read(module, br, context);
+					return ReadType(module, br, context).__MakeArrayType(br.ReadCompressedInt(), ReadArrayBounds(br), ReadArrayBounds(br), mods);
 				case ELEMENT_TYPE_PTR:
-					mods = ReadCustomModifiers(module, br, context);
-					return ReadTypeOrVoid(module, br, context).__MakePointerType(mods.required, mods.optional);
+					mods = CustomModifiers.Read(module, br, context);
+					return ReadTypeOrVoid(module, br, context).__MakePointerType(mods);
 				case ELEMENT_TYPE_FNPTR:
 					return ReadFunctionPointer(module, br, context);
 				default:
@@ -253,20 +259,20 @@ namespace IKVM.Reflection
 				if (br.PeekByte() == ELEMENT_TYPE_TYPEDBYREF)
 				{
 					br.ReadByte();
-					list.Add(new LocalVariableInfo(i, module.universe.System_TypedReference, false));
+					list.Add(new LocalVariableInfo(i, module.universe.System_TypedReference, false, new CustomModifiers()));
 				}
 				else
 				{
-					SkipCustomModifiers(br);
+					CustomModifiers mods1 = CustomModifiers.Read(module, br, context);
 					bool pinned = false;
 					if (br.PeekByte() == ELEMENT_TYPE_PINNED)
 					{
 						br.ReadByte();
 						pinned = true;
 					}
-					SkipCustomModifiers(br);
+					CustomModifiers mods2 = CustomModifiers.Read(module, br, context);
 					Type type = ReadTypeOrByRef(module, br, context);
-					list.Add(new LocalVariableInfo(i, type, pinned));
+					list.Add(new LocalVariableInfo(i, type, pinned, CustomModifiers.Combine(mods1, mods2)));
 				}
 			}
 		}
@@ -278,9 +284,9 @@ namespace IKVM.Reflection
 				br.ReadByte();
 				// LAMESPEC it is allowed (by C++/CLI, ilasm and peverify) to have custom modifiers after the BYREF
 				// (which makes sense, as it is analogous to pointers)
-				CustomModifiers mods = ReadCustomModifiers(module, br, context);
+				CustomModifiers mods = CustomModifiers.Read(module, br, context);
 				// C++/CLI generates void& local variables, so we need to use ReadTypeOrVoid here
-				return ReadTypeOrVoid(module, br, context).__MakeByRefType(mods.required, mods.optional);
+				return ReadTypeOrVoid(module, br, context).__MakeByRefType(mods);
 			}
 			else
 			{
@@ -328,18 +334,20 @@ namespace IKVM.Reflection
 					int rank = type.GetArrayRank();
 					bb.Write(ELEMENT_TYPE_ARRAY);
 					// LAMESPEC the Type production (23.2.12) doesn't include CustomMod* for arrays, but the verifier allows it and ildasm also supports it
-					WriteCustomModifiers(module, bb, ELEMENT_TYPE_CMOD_REQD, type.__GetRequiredCustomModifiers());
-					WriteCustomModifiers(module, bb, ELEMENT_TYPE_CMOD_OPT, type.__GetOptionalCustomModifiers());
+					WriteCustomModifiers(module, bb, type.__GetCustomModifiers());
 					WriteType(module, bb, type.GetElementType());
 					bb.WriteCompressedInt(rank);
-					// since a Type doesn't contain the lower/upper bounds
-					// (they act like a custom modifier, so they are part of the signature, but not of the Type),
-					// we set them to the C# compatible values and hope for the best
-					bb.WriteCompressedInt(0);	// boundsCount
-					bb.WriteCompressedInt(rank);	// loCount
-					for (int i = 0; i < rank; i++)
+					int[] sizes = type.__GetArraySizes();
+					bb.WriteCompressedInt(sizes.Length);
+					for (int i = 0; i < sizes.Length; i++)
 					{
-						bb.WriteCompressedInt(0);
+						bb.WriteCompressedInt(sizes[i]);
+					}
+					int[] lobounds = type.__GetArrayLowerBounds();
+					bb.WriteCompressedInt(lobounds.Length);
+					for (int i = 0; i < lobounds.Length; i++)
+					{
+						bb.WriteCompressedInt(lobounds[i]);
 					}
 					return;
 				}
@@ -351,8 +359,7 @@ namespace IKVM.Reflection
 				{
 					bb.Write(ELEMENT_TYPE_PTR);
 				}
-				WriteCustomModifiers(module, bb, ELEMENT_TYPE_CMOD_REQD, type.__GetRequiredCustomModifiers());
-				WriteCustomModifiers(module, bb, ELEMENT_TYPE_CMOD_OPT, type.__GetOptionalCustomModifiers());
+				WriteCustomModifiers(module, bb, type.__GetCustomModifiers());
 				type = type.GetElementType();
 			}
 			Universe u = module.universe;
@@ -360,10 +367,18 @@ namespace IKVM.Reflection
 			{
 				bb.Write(ELEMENT_TYPE_VOID);
 			}
+			else if (type == u.System_Int32)
+			{
+				bb.Write(ELEMENT_TYPE_I4);
+			}
 			else if (type == u.System_Boolean)
 			{
 				bb.Write(ELEMENT_TYPE_BOOLEAN);
 			}
+			else if (type == u.System_String)
+			{
+				bb.Write(ELEMENT_TYPE_STRING);
+			}
 			else if (type == u.System_Char)
 			{
 				bb.Write(ELEMENT_TYPE_CHAR);
@@ -384,10 +399,6 @@ namespace IKVM.Reflection
 			{
 				bb.Write(ELEMENT_TYPE_U2);
 			}
-			else if (type == u.System_Int32)
-			{
-				bb.Write(ELEMENT_TYPE_I4);
-			}
 			else if (type == u.System_UInt32)
 			{
 				bb.Write(ELEMENT_TYPE_U4);
@@ -408,10 +419,6 @@ namespace IKVM.Reflection
 			{
 				bb.Write(ELEMENT_TYPE_R8);
 			}
-			else if (type == u.System_String)
-			{
-				bb.Write(ELEMENT_TYPE_STRING);
-			}
 			else if (type == u.System_IntPtr)
 			{
 				bb.Write(ELEMENT_TYPE_I);
@@ -440,10 +447,15 @@ namespace IKVM.Reflection
 				}
 				bb.WriteCompressedInt(type.GenericParameterPosition);
 			}
-			else if (type.IsGenericType)
+			else if (!type.__IsMissing && type.IsGenericType)
 			{
 				WriteGenericSignature(module, bb, type);
 			}
+			else if (type.__IsFunctionPointer)
+			{
+				bb.Write(ELEMENT_TYPE_FNPTR);
+				WriteStandAloneMethodSig(module, bb, type.__MethodSignature);
+			}
 			else
 			{
 				if (type.IsValueType)
@@ -461,8 +473,7 @@ namespace IKVM.Reflection
 		private static void WriteGenericSignature(ModuleBuilder module, ByteBuffer bb, Type type)
 		{
 			Type[] typeArguments = type.GetGenericArguments();
-			Type[][] requiredCustomModifiers = type.__GetGenericArgumentsRequiredCustomModifiers();
-			Type[][] optionalCustomModifiers = type.__GetGenericArgumentsOptionalCustomModifiers();
+			CustomModifiers[] customModifiers = type.__GetGenericArgumentsCustomModifiers();
 			if (!type.IsGenericTypeDefinition)
 			{
 				type = type.GetGenericTypeDefinition();
@@ -480,68 +491,21 @@ namespace IKVM.Reflection
 			bb.WriteCompressedInt(typeArguments.Length);
 			for (int i = 0; i < typeArguments.Length; i++)
 			{
-				WriteCustomModifiers(module, bb, ELEMENT_TYPE_CMOD_REQD, requiredCustomModifiers[i]);
-				WriteCustomModifiers(module, bb, ELEMENT_TYPE_CMOD_OPT, optionalCustomModifiers[i]);
+				WriteCustomModifiers(module, bb, customModifiers[i]);
 				WriteType(module, bb, typeArguments[i]);
 			}
 		}
 
-		protected static void WriteCustomModifiers(ModuleBuilder module, ByteBuffer bb, byte mod, Type[] modifiers)
+		protected static void WriteCustomModifiers(ModuleBuilder module, ByteBuffer bb, CustomModifiers modifiers)
 		{
-			if (modifiers != null)
+			foreach (CustomModifiers.Entry entry in modifiers)
 			{
-				foreach (Type type in modifiers)
-				{
-					bb.Write(mod);
-					bb.WriteTypeDefOrRefEncoded(module.GetTypeTokenForMemberRef(type));
-				}
+				bb.Write(entry.IsRequired ? ELEMENT_TYPE_CMOD_REQD : ELEMENT_TYPE_CMOD_OPT);
+				bb.WriteTypeDefOrRefEncoded(module.GetTypeTokenForMemberRef(entry.Type));
 			}
 		}
 
-		protected static bool IsCustomModifier(byte b)
-		{
-			return b == ELEMENT_TYPE_CMOD_OPT || b == ELEMENT_TYPE_CMOD_REQD;
-		}
-
-		struct CustomModifiers
-		{
-			internal Type[] required;
-			internal Type[] optional;
-		}
-
-		private static CustomModifiers ReadCustomModifiers(ModuleReader module, ByteReader br, IGenericContext context)
-		{
-			CustomModifiers mods = new CustomModifiers();
-			byte b = br.PeekByte();
-			if (IsCustomModifier(b))
-			{
-				List<Type> required = new List<Type>();
-				List<Type> optional = new List<Type>();
-				while (IsCustomModifier(b))
-				{
-					bool req = br.ReadByte() == ELEMENT_TYPE_CMOD_REQD;
-					Type type = ReadTypeDefOrRefEncoded(module, br, context);
-					(req ? required : optional).Add(type);
-					b = br.PeekByte();
-				}
-				mods.required = required.ToArray();
-				mods.optional = optional.ToArray();
-			}
-			return mods;
-		}
-
-		protected static void SkipCustomModifiers(ByteReader br)
-		{
-			byte b = br.PeekByte();
-			while (IsCustomModifier(b))
-			{
-				br.ReadByte();
-				br.ReadCompressedInt();
-				b = br.PeekByte();
-			}
-		}
-
-		private static Type ReadTypeDefOrRefEncoded(ModuleReader module, ByteReader br, IGenericContext context)
+		internal static Type ReadTypeDefOrRefEncoded(ModuleReader module, ByteReader br, IGenericContext context)
 		{
 			int encoded = br.ReadCompressedInt();
 			switch (encoded & 3)
@@ -557,116 +521,91 @@ namespace IKVM.Reflection
 			}
 		}
 
-		protected static void ReadCustomModifiers(ModuleReader module, ByteReader br, IGenericContext context, out Type[] requiredCustomModifiers, out Type[] optionalCustomModifiers)
+		internal static void WriteStandAloneMethodSig(ModuleBuilder module, ByteBuffer bb, __StandAloneMethodSig sig)
 		{
-			byte b = br.PeekByte();
-			if (IsCustomModifier(b))
+			if (sig.IsUnmanaged)
 			{
-				List<Type> required = new List<Type>();
-				List<Type> optional = new List<Type>();
-				while (IsCustomModifier(b))
+				switch (sig.UnmanagedCallingConvention)
 				{
-					br.ReadByte();
-					Type type = ReadTypeDefOrRefEncoded(module, br, context);
-					if (b == ELEMENT_TYPE_CMOD_REQD)
-					{
-						required.Add(type);
-					}
-					else
-					{
-						optional.Add(type);
-					}
-					b = br.PeekByte();
+					case CallingConvention.Cdecl:
+						bb.Write((byte)0x01);	// C
+						break;
+					case CallingConvention.StdCall:
+					case CallingConvention.Winapi:
+						bb.Write((byte)0x02);	// STDCALL
+						break;
+					case CallingConvention.ThisCall:
+						bb.Write((byte)0x03);	// THISCALL
+						break;
+					case CallingConvention.FastCall:
+						bb.Write((byte)0x04);	// FASTCALL
+						break;
+					default:
+						throw new ArgumentOutOfRangeException("callingConvention");
 				}
-				requiredCustomModifiers = required.ToArray();
-				optionalCustomModifiers = optional.ToArray();
 			}
 			else
 			{
-				requiredCustomModifiers = null;
-				optionalCustomModifiers = null;
-			}
-		}
-
-		// unmanaged calling convention
-		internal static void WriteStandAloneMethodSig(ModuleBuilder module, ByteBuffer bb, CallingConvention callingConvention, Type returnType, Type[] parameterTypes)
-		{
-			switch (callingConvention)
-			{
-				case CallingConvention.Cdecl:
-					bb.Write((byte)0x01);	// C
-					break;
-				case CallingConvention.StdCall:
-				case CallingConvention.Winapi:
-					bb.Write((byte)0x02);	// STDCALL
-					break;
-				case CallingConvention.ThisCall:
-					bb.Write((byte)0x03);	// THISCALL
-					break;
-				case CallingConvention.FastCall:
-					bb.Write((byte)0x04);	// FASTCALL
-					break;
-				default:
-					throw new ArgumentOutOfRangeException("callingConvention");
-			}
-			bb.WriteCompressedInt(parameterTypes.Length);
-			WriteType(module, bb, returnType);
-			foreach (Type t in parameterTypes)
-			{
-				WriteType(module, bb, t);
-			}
-		}
-
-		// managed calling convention
-		internal static void WriteStandAloneMethodSig(ModuleBuilder module, ByteBuffer bb, CallingConventions callingConvention, Type returnType, Type[] parameterTypes, Type[] optionalParameterTypes)
-		{
-			byte flags = 0;
-			if ((callingConvention & CallingConventions.HasThis) != 0)
-			{
-				flags |= HASTHIS;
-			}
-			if ((callingConvention & CallingConventions.ExplicitThis) != 0)
-			{
-				flags |= EXPLICITTHIS;
-			}
-			if ((callingConvention & CallingConventions.VarArgs) != 0)
-			{
-				flags |= VARARG;
+				CallingConventions callingConvention = sig.CallingConvention;
+				byte flags = 0;
+				if ((callingConvention & CallingConventions.HasThis) != 0)
+				{
+					flags |= HASTHIS;
+				}
+				if ((callingConvention & CallingConventions.ExplicitThis) != 0)
+				{
+					flags |= EXPLICITTHIS;
+				}
+				if ((callingConvention & CallingConventions.VarArgs) != 0)
+				{
+					flags |= VARARG;
+				}
+				bb.Write(flags);
 			}
-			bb.Write(flags);
+			Type[] parameterTypes = sig.ParameterTypes;
+			Type[] optionalParameterTypes = sig.OptionalParameterTypes;
 			bb.WriteCompressedInt(parameterTypes.Length + optionalParameterTypes.Length);
-			WriteType(module, bb, returnType);
+			WriteCustomModifiers(module, bb, sig.GetReturnTypeCustomModifiers());
+			WriteType(module, bb, sig.ReturnType);
+			int index = 0;
 			foreach (Type t in parameterTypes)
 			{
+				WriteCustomModifiers(module, bb, sig.GetParameterCustomModifiers(index++));
 				WriteType(module, bb, t);
 			}
+			// note that optional parameters are only allowed for managed signatures (but we don't enforce that)
 			if (optionalParameterTypes.Length > 0)
 			{
 				bb.Write(SENTINEL);
 				foreach (Type t in optionalParameterTypes)
 				{
+					WriteCustomModifiers(module, bb, sig.GetParameterCustomModifiers(index++));
 					WriteType(module, bb, t);
 				}
 			}
 		}
 
-		internal static void WriteLocalVarSig(ModuleBuilder module, ByteBuffer bb, IList<LocalBuilder> locals)
+		internal static void WriteLocalVarSig(ModuleBuilder module, ByteBuffer bb, IList<LocalBuilder> locals, IList<CustomModifiers> customModifiers)
 		{
 			bb.Write(LOCAL_SIG);
 			bb.WriteCompressedInt(locals.Count);
-			foreach (LocalBuilder local in locals)
+			for (int i = 0; i < locals.Count; i++)
 			{
-				if (local.IsPinned)
+				if (locals[i].IsPinned)
 				{
 					bb.Write(ELEMENT_TYPE_PINNED);
 				}
-				WriteType(module, bb, local.LocalType);
+				if (customModifiers != null && i < customModifiers.Count)
+				{
+					WriteCustomModifiers(module, bb, customModifiers[i]);
+				}
+				WriteType(module, bb, locals[i].LocalType);
 			}
 		}
 
 		internal static void WritePropertySig(ModuleBuilder module, ByteBuffer bb, CallingConventions callingConvention,
-			Type returnType, Type[] returnTypeRequiredCustomModifiers, Type[] returnTypeOptionalCustomModifiers,
-			Type[] parameterTypes, Type[][] parameterTypeRequiredCustomModifiers, Type[][] parameterTypeOptionalCustomModifiers)
+			Type returnType, CustomModifiers returnTypeCustomModifiers,
+			Type[] parameterTypes, CustomModifiers[] parameterTypeCustomModifiers)
 		{
 			byte flags = PROPERTY;
 			if ((callingConvention & CallingConventions.HasThis) != 0)
@@ -683,20 +622,15 @@ namespace IKVM.Reflection
 			}
 			bb.Write(flags);
 			bb.WriteCompressedInt(parameterTypes == null ? 0 : parameterTypes.Length);
-			WriteCustomModifiers(module, bb, ELEMENT_TYPE_CMOD_REQD, returnTypeRequiredCustomModifiers);
-			WriteCustomModifiers(module, bb, ELEMENT_TYPE_CMOD_OPT, returnTypeOptionalCustomModifiers);
+			WriteCustomModifiers(module, bb, returnTypeCustomModifiers);
 			WriteType(module, bb, returnType);
 			if (parameterTypes != null)
 			{
 				for (int i = 0; i < parameterTypes.Length; i++)
 				{
-					if (parameterTypeRequiredCustomModifiers != null)
-					{
-						WriteCustomModifiers(module, bb, ELEMENT_TYPE_CMOD_REQD, parameterTypeRequiredCustomModifiers[i]);
-					}
-					if (parameterTypeOptionalCustomModifiers != null)
+					if (parameterTypeCustomModifiers != null)
 					{
-						WriteCustomModifiers(module, bb, ELEMENT_TYPE_CMOD_OPT, parameterTypeOptionalCustomModifiers[i]);
+						WriteCustomModifiers(module, bb, parameterTypeCustomModifiers[i]);
 					}
 					WriteType(module, bb, parameterTypes[i]);
 				}
@@ -719,28 +653,30 @@ namespace IKVM.Reflection
 		}
 
 		// this reads just the optional parameter types, from a MethodRefSig
-		internal static Type[] ReadOptionalParameterTypes(ModuleReader module, ByteReader br)
+		internal static Type[] ReadOptionalParameterTypes(ModuleReader module, ByteReader br, IGenericContext context, out CustomModifiers[] customModifiers)
 		{
 			br.ReadByte();
 			int paramCount = br.ReadCompressedInt();
-			SkipCustomModifiers(br);
-			ReadRetType(module, br, null);
+			CustomModifiers.Skip(br);
+			ReadRetType(module, br, context);
 			for (int i = 0; i < paramCount; i++)
 			{
 				if (br.PeekByte() == SENTINEL)
 				{
 					br.ReadByte();
 					Type[] types = new Type[paramCount - i];
+					customModifiers = new CustomModifiers[types.Length];
 					for (int j = 0; j < types.Length; j++)
 					{
-						SkipCustomModifiers(br);
-						types[j] = ReadType(module, br, null);
+						customModifiers[j] = CustomModifiers.Read(module, br, context);
+						types[j] = ReadType(module, br, context);
 					}
 					return types;
 				}
-				SkipCustomModifiers(br);
-				ReadType(module, br, null);
+				CustomModifiers.Skip(br);
+				ReadType(module, br, context);
 			}
+			customModifiers = Empty<CustomModifiers>.Array;
 			return Type.EmptyTypes;
 		}
 
@@ -757,42 +693,5 @@ namespace IKVM.Reflection
 			}
 			return expanded;
 		}
-
-		protected static Type[][] BindTypeParameters(IGenericBinder binder, Type[][] types)
-		{
-			if (types == null)
-			{
-				return null;
-			}
-			Type[][] expanded = new Type[types.Length][];
-			for (int i = 0; i < types.Length; i++)
-			{
-				expanded[i] = BindTypeParameters(binder, types[i]);
-			}
-			return expanded;
-		}
-
-		protected static Type[][][] BindTypeParameters(IGenericBinder binder, Type[][][] types)
-		{
-			if (types == null)
-			{
-				return null;
-			}
-			Type[][][] expanded = new Type[types.Length][][];
-			for (int i = 0; i < types.Length; i++)
-			{
-				expanded[i] = BindTypeParameters(binder, types[i]);
-			}
-			return expanded;
-		}
-
-		protected static Type[] BindTypeParameters(IGenericBinder binder, Type[][][] types, int index, int optOrReq)
-		{
-			if (types == null || types[index] == null)
-			{
-				return null;
-			}
-			return BindTypeParameters(binder, types[index][optOrReq]);
-		}
 	}
 }
diff --git a/mcs/class/IKVM.Reflection/StandAloneMethodSig.cs b/mcs/class/IKVM.Reflection/StandAloneMethodSig.cs
index 007e575..1d9425d 100644
--- a/mcs/class/IKVM.Reflection/StandAloneMethodSig.cs
+++ b/mcs/class/IKVM.Reflection/StandAloneMethodSig.cs
@@ -35,8 +35,9 @@ namespace IKVM.Reflection
 		private readonly Type returnType;
 		private readonly Type[] parameterTypes;
 		private readonly Type[] optionalParameterTypes;
+		private readonly PackedCustomModifiers customModifiers;
 
-		internal __StandAloneMethodSig(bool unmanaged, CallingConvention unmanagedCallingConvention, CallingConventions callingConvention, Type returnType, Type[] parameterTypes, Type[] optionalParameterTypes)
+		internal __StandAloneMethodSig(bool unmanaged, CallingConvention unmanagedCallingConvention, CallingConventions callingConvention, Type returnType, Type[] parameterTypes, Type[] optionalParameterTypes, PackedCustomModifiers customModifiers)
 		{
 			this.unmanaged = unmanaged;
 			this.unmanagedCallingConvention = unmanagedCallingConvention;
@@ -44,6 +45,30 @@ namespace IKVM.Reflection
 			this.returnType = returnType;
 			this.parameterTypes = parameterTypes;
 			this.optionalParameterTypes = optionalParameterTypes;
+			this.customModifiers = customModifiers;
+		}
+
+		public bool Equals(__StandAloneMethodSig other)
+		{
+			return other != null
+				&& other.unmanaged == unmanaged
+				&& other.unmanagedCallingConvention == unmanagedCallingConvention
+				&& other.callingConvention == callingConvention
+				&& other.returnType == returnType
+				&& Util.ArrayEquals(other.parameterTypes, parameterTypes)
+				&& Util.ArrayEquals(other.optionalParameterTypes, optionalParameterTypes)
+				&& other.customModifiers.Equals(customModifiers);
+		}
+
+		public override bool Equals(object obj)
+		{
+			return Equals(obj as __StandAloneMethodSig);
+		}
+
+		public override int GetHashCode()
+		{
+			return returnType.GetHashCode()
+				^ Util.GetHashCode(parameterTypes);
 		}
 
 		public bool IsUnmanaged
@@ -66,6 +91,11 @@ namespace IKVM.Reflection
 			get { return returnType; }
 		}
 
+		public CustomModifiers GetReturnTypeCustomModifiers()
+		{
+			return customModifiers.GetReturnTypeCustomModifiers();
+		}
+
 		public Type[] ParameterTypes
 		{
 			get { return Util.Copy(parameterTypes); }
@@ -75,5 +105,15 @@ namespace IKVM.Reflection
 		{
 			get { return Util.Copy(optionalParameterTypes); }
 		}
+
+		public CustomModifiers GetParameterCustomModifiers(int index)
+		{
+			return customModifiers.GetParameterCustomModifiers(index);
+		}
+
+		internal int ParameterCount
+		{
+			get { return parameterTypes.Length + optionalParameterTypes.Length; }
+		}
 	}
 }
diff --git a/mcs/class/IKVM.Reflection/StrongNameKeyPair.cs b/mcs/class/IKVM.Reflection/StrongNameKeyPair.cs
index 6ea6f7e..9fac541 100644
--- a/mcs/class/IKVM.Reflection/StrongNameKeyPair.cs
+++ b/mcs/class/IKVM.Reflection/StrongNameKeyPair.cs
@@ -27,7 +27,7 @@ using System.Text;
 
 namespace IKVM.Reflection
 {
-	public class StrongNameKeyPair
+	public sealed class StrongNameKeyPair
 	{
 		internal readonly System.Reflection.StrongNameKeyPair keyPair;
 
diff --git a/mcs/class/IKVM.Reflection/Type.cs b/mcs/class/IKVM.Reflection/Type.cs
index 3067943..64ef33a 100644
--- a/mcs/class/IKVM.Reflection/Type.cs
+++ b/mcs/class/IKVM.Reflection/Type.cs
@@ -1,5 +1,5 @@
 /*
-  Copyright (C) 2009-2010 Jeroen Frijters
+  Copyright (C) 2009-2012 Jeroen Frijters
 
   This software is provided 'as-is', without any express or implied
   warranty.  In no event will the authors be held liable for any damages
@@ -44,6 +44,38 @@ namespace IKVM.Reflection
 	public abstract class Type : MemberInfo, IGenericContext, IGenericBinder
 	{
 		public static readonly Type[] EmptyTypes = Empty<Type>.Array;
+		protected readonly Type underlyingType;
+		protected TypeFlags typeFlags;
+
+		[Flags]
+		protected enum TypeFlags
+		{
+			// for use by TypeBuilder
+			IsGenericTypeDefinition = 1,
+			HasNestedTypes = 2,
+			Baked = 4,
+
+			// for use by MissingType
+			ValueType = 8,
+			NotValueType = 16,
+
+			// for use by TypeDef, TypeBuilder or MissingType
+			PotentialEnumOrValueType = 32,
+			EnumOrValueType = 64,
+		}
+
+		// prevent subclassing by outsiders
+		internal Type()
+		{
+			this.underlyingType = this;
+		}
+
+		internal Type(Type underlyingType)
+		{
+			System.Diagnostics.Debug.Assert(underlyingType.underlyingType == underlyingType);
+			this.underlyingType = underlyingType;
+			this.typeFlags = underlyingType.typeFlags;
+		}
 
 		public static Binder DefaultBinder
 		{
@@ -115,14 +147,26 @@ namespace IKVM.Reflection
 			return Empty<PropertyInfo>.Array;
 		}
 
-		public virtual Type[] __GetRequiredCustomModifiers()
+		public virtual CustomModifiers __GetCustomModifiers()
 		{
-			return Type.EmptyTypes;
+			return new CustomModifiers();
 		}
 
-		public virtual Type[] __GetOptionalCustomModifiers()
+		[Obsolete("Please use __GetCustomModifiers() instead.")]
+		public Type[] __GetRequiredCustomModifiers()
 		{
-			return Type.EmptyTypes;
+			return __GetCustomModifiers().GetRequired();
+		}
+
+		[Obsolete("Please use __GetCustomModifiers() instead.")]
+		public Type[] __GetOptionalCustomModifiers()
+		{
+			return __GetCustomModifiers().GetOptional();
+		}
+
+		public virtual __StandAloneMethodSig __MethodSignature
+		{
+			get { throw new InvalidOperationException(); }
 		}
 
 		public virtual bool HasElementType
@@ -150,13 +194,19 @@ namespace IKVM.Reflection
 			get { return false; }
 		}
 
+		public virtual bool __IsFunctionPointer
+		{
+			get { return false; }
+		}
+
 		public virtual bool IsValueType
 		{
 			get
 			{
 				Type baseType = this.BaseType;
-				return baseType == this.Module.universe.System_Enum
-					|| (baseType == this.Module.universe.System_ValueType && this != this.Module.universe.System_Enum);
+				return baseType != null
+					&& baseType.IsEnumOrValueType
+					&& !this.IsEnumOrValueType;
 			}
 		}
 
@@ -175,9 +225,9 @@ namespace IKVM.Reflection
 			get { return null; }
 		}
 
-		public virtual Type UnderlyingSystemType
+		public Type UnderlyingSystemType
 		{
-			get { return this; }
+			get { return underlyingType; }
 		}
 
 		public override Type DeclaringType
@@ -185,13 +235,19 @@ namespace IKVM.Reflection
 			get { return null; }
 		}
 
-		public override string Name
+		public virtual string __Name
 		{
-			get
-			{
-				string fullname = FullName;
-				return fullname.Substring(fullname.LastIndexOf('.') + 1);
-			}
+			get { throw new InvalidOperationException(); }
+		}
+
+		public virtual string __Namespace
+		{
+			get { throw new InvalidOperationException(); }
+		}
+
+		public abstract override string Name
+		{
+			get;
 		}
 
 		public virtual string Namespace
@@ -200,11 +256,9 @@ namespace IKVM.Reflection
 			{
 				if (IsNested)
 				{
-					return null;
+					return DeclaringType.Namespace;
 				}
-				string fullname = FullName;
-				int index = fullname.LastIndexOf('.');
-				return index < 0 ? null : fullname.Substring(0, index);
+				return __Namespace;
 			}
 		}
 
@@ -213,9 +267,23 @@ namespace IKVM.Reflection
 			throw new InvalidOperationException();
 		}
 
+		public static bool operator ==(Type t1, Type t2)
+		{
+			// Casting to object results in smaller code than calling ReferenceEquals and makes
+			// this method more likely to be inlined.
+			// On CLR v2 x86, microbenchmarks show this to be faster than calling ReferenceEquals.
+			return (object)t1 == (object)t2
+				|| ((object)t1 != null && (object)t2 != null && (object)t1.underlyingType == (object)t2.underlyingType);
+		}
+
+		public static bool operator !=(Type t1, Type t2)
+		{
+			return !(t1 == t2);
+		}
+
 		public bool Equals(Type type)
 		{
-			return !ReferenceEquals(type, null) && ReferenceEquals(type.UnderlyingSystemType, this.UnderlyingSystemType);
+			return this == type;
 		}
 
 		public override bool Equals(object obj)
@@ -234,14 +302,33 @@ namespace IKVM.Reflection
 			return Type.EmptyTypes;
 		}
 
-		public virtual Type[][] __GetGenericArgumentsRequiredCustomModifiers()
+		public virtual CustomModifiers[] __GetGenericArgumentsCustomModifiers()
 		{
-			return Empty<Type[]>.Array;
+			return Empty<CustomModifiers>.Array;
 		}
 
-		public virtual Type[][] __GetGenericArgumentsOptionalCustomModifiers()
+		[Obsolete("Please use __GetGenericArgumentsCustomModifiers() instead")]
+		public Type[][] __GetGenericArgumentsRequiredCustomModifiers()
 		{
-			return Empty<Type[]>.Array;
+			CustomModifiers[] customModifiers = __GetGenericArgumentsCustomModifiers();
+			Type[][] array = new Type[customModifiers.Length][];
+			for (int i = 0; i < array.Length; i++)
+			{
+				array[i] = customModifiers[i].GetRequired();
+			}
+			return array;
+		}
+
+		[Obsolete("Please use __GetGenericArgumentsCustomModifiers() instead")]
+		public Type[][] __GetGenericArgumentsOptionalCustomModifiers()
+		{
+			CustomModifiers[] customModifiers = __GetGenericArgumentsCustomModifiers();
+			Type[][] array = new Type[customModifiers.Length][];
+			for (int i = 0; i < array.Length; i++)
+			{
+				array[i] = customModifiers[i].GetOptional();
+			}
+			return array;
 		}
 
 		public virtual Type GetGenericTypeDefinition()
@@ -254,6 +341,13 @@ namespace IKVM.Reflection
 			get { return null; }
 		}
 
+		public virtual bool __GetLayout(out int packingSize, out int typeSize)
+		{
+			packingSize = 0;
+			typeSize = 0;
+			return false;
+		}
+
 		public virtual bool IsGenericType
 		{
 			get { return false; }
@@ -264,6 +358,11 @@ namespace IKVM.Reflection
 			get { return false; }
 		}
 
+		internal virtual bool IsGenericTypeInstance
+		{
+			get { return false; }
+		}
+
 		public virtual bool ContainsGenericParameters
 		{
 			get
@@ -298,6 +397,16 @@ namespace IKVM.Reflection
 			throw new NotSupportedException();
 		}
 
+		public virtual int[] __GetArraySizes()
+		{
+			throw new NotSupportedException();
+		}
+
+		public virtual int[] __GetArrayLowerBounds()
+		{
+			throw new NotSupportedException();
+		}
+
 		// .NET 4.0 API
 		public virtual Type GetEnumUnderlyingType()
 		{
@@ -327,33 +436,35 @@ namespace IKVM.Reflection
 			return FullName;
 		}
 
-		public virtual string FullName
+		public abstract string FullName
 		{
-			get
+			get;
+		}
+
+		protected string GetFullName()
+		{
+			string ns = TypeNameParser.Escape(this.__Namespace);
+			Type decl = this.DeclaringType;
+			if (decl == null)
 			{
-				Type decl = this.DeclaringType;
-				string ns = this.Namespace;
 				if (ns == null)
 				{
-					if (decl == null)
-					{
-						return this.Name;
-					}
-					else
-					{
-						return decl.FullName + "+" + this.Name;
-					}
+					return this.Name;
 				}
 				else
 				{
-					if (decl == null)
-					{
-						return ns + "." + this.Name;
-					}
-					else
-					{
-						return decl.FullName + "+" + ns + "." + this.Name;
-					}
+					return ns + "." + this.Name;
+				}
+			}
+			else
+			{
+				if (ns == null)
+				{
+					return decl.FullName + "+" + this.Name;
+				}
+				else
+				{
+					return decl.FullName + "+" + ns + "." + this.Name;
 				}
 			}
 		}
@@ -736,16 +847,35 @@ namespace IKVM.Reflection
 			return GetConstructor(bindingAttr, binder, types, modifiers);
 		}
 
+		internal Type ResolveNestedType(TypeName typeName)
+		{
+			return FindNestedType(typeName) ?? Module.universe.GetMissingTypeOrThrow(Module, this, typeName);
+		}
+
+		// unlike the public API, this takes the namespace and name into account
+		internal virtual Type FindNestedType(TypeName name)
+		{
+			foreach (Type type in __GetDeclaredTypes())
+			{
+				if (type.__Namespace == name.Namespace && type.__Name == name.Name)
+				{
+					return type;
+				}
+			}
+			return null;
+		}
+
 		public Type GetNestedType(string name)
 		{
 			return GetNestedType(name, BindingFlags.Public);
 		}
 
-		public virtual Type GetNestedType(string name, BindingFlags bindingAttr)
+		public Type GetNestedType(string name, BindingFlags bindingAttr)
 		{
 			foreach (Type type in GetNestedTypes(bindingAttr))
 			{
-				if (type.Name == name)
+				// FXBUG the namespace is ignored
+				if (type.__Name == name)
 				{
 					return type;
 				}
@@ -945,7 +1075,7 @@ namespace IKVM.Reflection
 		{
 			get
 			{
-				Universe u = this.Module.universe;
+				Universe u = this.Universe;
 				return this == u.System_Boolean
 					|| this == u.System_Byte
 					|| this == u.System_SByte
@@ -966,7 +1096,13 @@ namespace IKVM.Reflection
 
 		public bool IsEnum
 		{
-			get { return this.BaseType == this.Module.universe.System_Enum; }
+			get
+			{
+				Type baseType = this.BaseType;
+				return baseType != null
+					&& baseType.IsEnumOrValueType
+					&& baseType.__Name[0] == 'E';
+			}
 		}
 
 		public bool IsSealed
@@ -1106,58 +1242,131 @@ namespace IKVM.Reflection
 			get { return this.DeclaringType != null; }
 		}
 
+		public virtual bool __ContainsMissingType
+		{
+			get
+			{
+				if (this.__IsMissing)
+				{
+					return true;
+				}
+				foreach (Type arg in this.GetGenericArguments())
+				{
+					if (arg.__ContainsMissingType)
+					{
+						return true;
+					}
+				}
+				return false;
+			}
+		}
+
 		public Type MakeArrayType()
 		{
-			return ArrayType.Make(this, null, null);
+			return ArrayType.Make(this, new CustomModifiers());
+		}
+
+		public Type __MakeArrayType(CustomModifiers customModifiers)
+		{
+			return ArrayType.Make(this, customModifiers);
 		}
 
+		[Obsolete("Please use __MakeArrayType(CustomModifiers) instead.")]
 		public Type __MakeArrayType(Type[] requiredCustomModifiers, Type[] optionalCustomModifiers)
 		{
-			return ArrayType.Make(this, Util.Copy(requiredCustomModifiers), Util.Copy(optionalCustomModifiers));
+			return __MakeArrayType(CustomModifiers.FromReqOpt(requiredCustomModifiers, optionalCustomModifiers));
 		}
 
 		public Type MakeArrayType(int rank)
 		{
-			return MultiArrayType.Make(this, rank, null, null);
+			return __MakeArrayType(rank, new CustomModifiers());
 		}
 
+		public Type __MakeArrayType(int rank, CustomModifiers customModifiers)
+		{
+			return MultiArrayType.Make(this, rank, Empty<int>.Array, new int[rank], customModifiers);
+		}
+
+		[Obsolete("Please use __MakeArrayType(int, CustomModifiers) instead.")]
 		public Type __MakeArrayType(int rank, Type[] requiredCustomModifiers, Type[] optionalCustomModifiers)
 		{
-			return MultiArrayType.Make(this, rank, Util.Copy(requiredCustomModifiers), Util.Copy(optionalCustomModifiers));
+			return __MakeArrayType(rank, CustomModifiers.FromReqOpt(requiredCustomModifiers, optionalCustomModifiers));
+		}
+
+		public Type __MakeArrayType(int rank, int[] sizes, int[] lobounds, CustomModifiers customModifiers)
+		{
+			return MultiArrayType.Make(this, rank, sizes ?? Empty<int>.Array, lobounds ?? Empty<int>.Array, customModifiers);
+		}
+
+		[Obsolete("Please use __MakeArrayType(int, int[], int[], CustomModifiers) instead.")]
+		public Type __MakeArrayType(int rank, int[] sizes, int[] lobounds, Type[] requiredCustomModifiers, Type[] optionalCustomModifiers)
+		{
+			return __MakeArrayType(rank, sizes, lobounds, CustomModifiers.FromReqOpt(requiredCustomModifiers, optionalCustomModifiers));
 		}
 
 		public Type MakeByRefType()
 		{
-			return ByRefType.Make(this, null, null);
+			return ByRefType.Make(this, new CustomModifiers());
+		}
+
+		public Type __MakeByRefType(CustomModifiers customModifiers)
+		{
+			return ByRefType.Make(this, customModifiers);
 		}
 
+		[Obsolete("Please use __MakeByRefType(CustomModifiers) instead.")]
 		public Type __MakeByRefType(Type[] requiredCustomModifiers, Type[] optionalCustomModifiers)
 		{
-			return ByRefType.Make(this, Util.Copy(requiredCustomModifiers), Util.Copy(optionalCustomModifiers));
+			return __MakeByRefType(CustomModifiers.FromReqOpt(requiredCustomModifiers, optionalCustomModifiers));
 		}
 
 		public Type MakePointerType()
 		{
-			return PointerType.Make(this, null, null);
+			return PointerType.Make(this, new CustomModifiers());
+		}
+
+		public Type __MakePointerType(CustomModifiers customModifiers)
+		{
+			return PointerType.Make(this, customModifiers);
 		}
 
+		[Obsolete("Please use __MakeByRefType(CustomModifiers) instead.")]
 		public Type __MakePointerType(Type[] requiredCustomModifiers, Type[] optionalCustomModifiers)
 		{
-			return PointerType.Make(this, Util.Copy(requiredCustomModifiers), Util.Copy(optionalCustomModifiers));
+			return __MakePointerType(CustomModifiers.FromReqOpt(requiredCustomModifiers, optionalCustomModifiers));
 		}
 
 		public Type MakeGenericType(params Type[] typeArguments)
 		{
-			return __MakeGenericType(typeArguments, null, null);
+			return __MakeGenericType(typeArguments, null);
 		}
 
+		public Type __MakeGenericType(Type[] typeArguments, CustomModifiers[] customModifiers)
+		{
+			if (!this.__IsMissing && !this.IsGenericTypeDefinition)
+			{
+				throw new InvalidOperationException();
+			}
+			return GenericTypeInstance.Make(this, Util.Copy(typeArguments), customModifiers == null ? null : (CustomModifiers[])customModifiers.Clone());
+		}
+
+		[Obsolete("Please use __MakeGenericType(Type[], CustomModifiers[]) instead.")]
 		public Type __MakeGenericType(Type[] typeArguments, Type[][] requiredCustomModifiers, Type[][] optionalCustomModifiers)
 		{
-			if (!this.IsGenericTypeDefinition)
+			if (!this.__IsMissing && !this.IsGenericTypeDefinition)
 			{
 				throw new InvalidOperationException();
 			}
-			return GenericTypeInstance.Make(this, Util.Copy(typeArguments), Util.Copy(requiredCustomModifiers), Util.Copy(optionalCustomModifiers));
+			CustomModifiers[] mods = null;
+			if (requiredCustomModifiers != null || optionalCustomModifiers != null)
+			{
+				mods = new CustomModifiers[typeArguments.Length];
+				for (int i = 0; i < mods.Length; i++)
+				{
+					mods[i] = CustomModifiers.FromReqOpt(Util.NullSafeElementAt(requiredCustomModifiers, i), Util.NullSafeElementAt(optionalCustomModifiers, i));
+				}
+			}
+			return GenericTypeInstance.Make(this, Util.Copy(typeArguments), mods);
 		}
 
 		public static System.Type __GetSystemType(TypeCode typeCode)
@@ -1211,7 +1420,7 @@ namespace IKVM.Reflection
 			{
 				return TypeCode.Empty;
 			}
-			if (type.IsEnum)
+			if (!type.__IsMissing && type.IsEnum)
 			{
 				type = type.GetEnumUnderlyingType();
 			}
@@ -1280,6 +1489,10 @@ namespace IKVM.Reflection
 			{
 				return TypeCode.String;
 			}
+			else if (type.__IsMissing)
+			{
+				throw new MissingMemberException(type);
+			}
 			else
 			{
 				return TypeCode.Object;
@@ -1455,7 +1668,7 @@ namespace IKVM.Reflection
 			{
 				Type[] args = GetGenericArguments();
 				Type.InplaceBindTypeParameters(binder, args);
-				return GenericTypeInstance.Make(this, args, null, null);
+				return GenericTypeInstance.Make(this, args, null);
 			}
 			else
 			{
@@ -1463,7 +1676,7 @@ namespace IKVM.Reflection
 			}
 		}
 
-		internal static void InplaceBindTypeParameters(IGenericBinder binder, Type[] types)
+		private static void InplaceBindTypeParameters(IGenericBinder binder, Type[] types)
 		{
 			for (int i = 0; i < types.Length; i++)
 			{
@@ -1471,7 +1684,7 @@ namespace IKVM.Reflection
 			}
 		}
 
-		internal MethodBase FindMethod(string name, MethodSignature signature)
+		internal virtual MethodBase FindMethod(string name, MethodSignature signature)
 		{
 			foreach (MethodBase method in __GetDeclaredMethods())
 			{
@@ -1483,7 +1696,7 @@ namespace IKVM.Reflection
 			return null;
 		}
 
-		internal FieldInfo FindField(string name, FieldSignature signature)
+		internal virtual FieldInfo FindField(string name, FieldSignature signature)
 		{
 			foreach (FieldInfo field in __GetDeclaredFields())
 			{
@@ -1535,43 +1748,149 @@ namespace IKVM.Reflection
 					;
 			}
 		}
+
+		internal Type MarkNotValueType()
+		{
+			typeFlags |= TypeFlags.NotValueType;
+			return this;
+		}
+
+		internal Type MarkValueType()
+		{
+			typeFlags |= TypeFlags.ValueType;
+			return this;
+		}
+
+		internal ConstructorInfo GetPseudoCustomAttributeConstructor(params Type[] parameterTypes)
+		{
+			Universe u = this.Module.universe;
+			MethodSignature methodSig = MethodSignature.MakeFromBuilder(u.System_Void, parameterTypes, new PackedCustomModifiers(), CallingConventions.Standard | CallingConventions.HasThis, 0);
+			MethodBase mb =
+				FindMethod(".ctor", methodSig) ??
+				u.GetMissingMethodOrThrow(this, ".ctor", methodSig);
+			return (ConstructorInfo)mb;
+		}
+
+		public MethodBase __CreateMissingMethod(string name, CallingConventions callingConvention, Type returnType, CustomModifiers returnTypeCustomModifiers, Type[] parameterTypes, CustomModifiers[] parameterTypeCustomModifiers)
+		{
+			return CreateMissingMethod(name, callingConvention, returnType, parameterTypes, PackedCustomModifiers.CreateFromExternal(returnTypeCustomModifiers, parameterTypeCustomModifiers, parameterTypes.Length));
+		}
+
+		private MethodBase CreateMissingMethod(string name, CallingConventions callingConvention, Type returnType, Type[] parameterTypes, PackedCustomModifiers customModifiers)
+		{
+			MethodSignature sig = new MethodSignature(
+				returnType ?? this.Module.universe.System_Void,
+				Util.Copy(parameterTypes),
+				customModifiers,
+				callingConvention,
+				0);
+			MethodInfo method = new MissingMethod(this, name, sig);
+			if (name == ".ctor" || name == ".cctor")
+			{
+				return new ConstructorInfoImpl(method);
+			}
+			return method;
+		}
+
+		[Obsolete("Please use __CreateMissingMethod(string, CallingConventions, Type, CustomModifiers, Type[], CustomModifiers[]) instead")]
+		public MethodBase __CreateMissingMethod(string name, CallingConventions callingConvention, Type returnType, Type[] returnTypeRequiredCustomModifiers, Type[] returnTypeOptionalCustomModifiers, Type[] parameterTypes, Type[][] parameterTypeRequiredCustomModifiers, Type[][] parameterTypeOptionalCustomModifiers)
+		{
+			return CreateMissingMethod(name, callingConvention, returnType, parameterTypes, PackedCustomModifiers.CreateFromExternal(returnTypeOptionalCustomModifiers, returnTypeRequiredCustomModifiers, parameterTypeOptionalCustomModifiers, parameterTypeRequiredCustomModifiers, parameterTypes.Length));
+		}
+
+		public FieldInfo __CreateMissingField(string name, Type fieldType, CustomModifiers customModifiers)
+		{
+			return new MissingField(this, name, FieldSignature.Create(fieldType, customModifiers));
+		}
+
+		[Obsolete("Please use __CreateMissingField(string, Type, CustomModifiers) instead")]
+		public FieldInfo __CreateMissingField(string name, Type fieldType, Type[] requiredCustomModifiers, Type[] optionalCustomModifiers)
+		{
+			return __CreateMissingField(name, fieldType, CustomModifiers.FromReqOpt(requiredCustomModifiers, optionalCustomModifiers));
+		}
+
+		internal virtual Type SetMetadataTokenForMissing(int token)
+		{
+			return this;
+		}
+
+		protected void MarkEnumOrValueType(string typeNamespace, string typeName)
+		{
+			// we assume that mscorlib won't have nested types with these names,
+			// so we don't check that we're not a nested type
+			if (typeNamespace == "System"
+				&& (typeName == "Enum" || typeName == "ValueType"))
+			{
+				typeFlags |= TypeFlags.PotentialEnumOrValueType;
+			}
+		}
+
+		private bool ResolvePotentialEnumOrValueType()
+		{
+			if (this.Assembly == this.Universe.Mscorlib || this.Assembly.GetName().Name.Equals("mscorlib", StringComparison.OrdinalIgnoreCase))
+			{
+				typeFlags = (typeFlags & ~TypeFlags.PotentialEnumOrValueType) | TypeFlags.EnumOrValueType;
+				return true;
+			}
+			else
+			{
+				typeFlags &= ~TypeFlags.PotentialEnumOrValueType;
+				return false;
+			}
+		}
+
+		private bool IsEnumOrValueType
+		{
+			get
+			{
+				return (typeFlags & (TypeFlags.EnumOrValueType | TypeFlags.PotentialEnumOrValueType)) != 0
+					&& ((typeFlags & TypeFlags.EnumOrValueType) != 0 || ResolvePotentialEnumOrValueType());
+			}
+		}
+
+		internal virtual IList<CustomAttributeData> GetInterfaceImplCustomAttributes(Type interfaceType, Type attributeType)
+		{
+			throw new NotSupportedException();
+		}
+
+		internal virtual Universe Universe
+		{
+			get { return Module.universe; }
+		}
 	}
 
 	abstract class ElementHolderType : Type
 	{
 		protected readonly Type elementType;
 		private int token;
-		private readonly Type[] requiredCustomModifiers;
-		private readonly Type[] optionalCustomModifiers;
+		private readonly CustomModifiers mods;
 
-		protected ElementHolderType(Type elementType, Type[] requiredCustomModifiers, Type[] optionalCustomModifiers)
+		protected ElementHolderType(Type elementType, CustomModifiers mods)
 		{
 			this.elementType = elementType;
-			this.requiredCustomModifiers = requiredCustomModifiers;
-			this.optionalCustomModifiers = optionalCustomModifiers;
+			this.mods = mods;
 		}
 
 		protected bool EqualsHelper(ElementHolderType other)
 		{
 			return other != null
 				&& other.elementType.Equals(elementType)
-				&& Util.ArrayEquals(other.requiredCustomModifiers, requiredCustomModifiers)
-				&& Util.ArrayEquals(other.optionalCustomModifiers, optionalCustomModifiers);
+				&& other.mods.Equals(mods);
 		}
 
-		public override Type[] __GetRequiredCustomModifiers()
+		public override CustomModifiers __GetCustomModifiers()
 		{
-			return Util.Copy(requiredCustomModifiers);
+			return mods;
 		}
 
-		public override Type[] __GetOptionalCustomModifiers()
+		public sealed override string Name
 		{
-			return Util.Copy(optionalCustomModifiers);
+			get { return elementType.Name + GetSuffix(); }
 		}
 
-		public sealed override string Name
+		public sealed override string Namespace
 		{
-			get { return elementType.Name + GetSuffix(); }
+			get { return elementType.Namespace; }
 		}
 
 		public sealed override string FullName
@@ -1621,18 +1940,29 @@ namespace IKVM.Reflection
 			}
 		}
 
+		public sealed override bool __ContainsMissingType
+		{
+			get
+			{
+				Type type = elementType;
+				while (type.HasElementType)
+				{
+					type = type.GetElementType();
+				}
+				return type.__ContainsMissingType;
+			}
+		}
+
 		internal sealed override Type BindTypeParameters(IGenericBinder binder)
 		{
 			Type type = elementType.BindTypeParameters(binder);
-			Type[] req = BindArray(requiredCustomModifiers, binder);
-			Type[] opt = BindArray(optionalCustomModifiers, binder);
+			CustomModifiers mods = this.mods.Bind(binder);
 			if (ReferenceEquals(type, elementType)
-				&& ReferenceEquals(req, requiredCustomModifiers)
-				&& ReferenceEquals(opt, optionalCustomModifiers))
+				&& mods.Equals(this.mods))
 			{
 				return this;
 			}
-			return Wrap(type, req, opt);
+			return Wrap(type, mods);
 		}
 
 		internal override void CheckBaked()
@@ -1640,47 +1970,30 @@ namespace IKVM.Reflection
 			elementType.CheckBaked();
 		}
 
-		private static Type[] BindArray(Type[] array, IGenericBinder binder)
+		internal sealed override IList<CustomAttributeData> GetCustomAttributesData(Type attributeType)
 		{
-			if (array ==null || array.Length == 0)
-			{
-				return array;
-			}
-			Type[] result = array;
-			for (int i = 0; i < array.Length; i++)
-			{
-				Type type = array[i].BindTypeParameters(binder);
-				if (!ReferenceEquals(type, array[i]))
-				{
-					if (result == array)
-					{
-						result = (Type[])array.Clone();
-					}
-					result[i] = type;
-				}
-			}
-			return result;
+			return CustomAttributeData.EmptyList;
 		}
 
-		internal sealed override IList<CustomAttributeData> GetCustomAttributesData(Type attributeType)
+		internal sealed override Universe Universe
 		{
-			return CustomAttributeData.EmptyList;
+			get { return elementType.Universe; }
 		}
 
-		protected abstract string GetSuffix();
+		internal abstract string GetSuffix();
 
-		protected abstract Type Wrap(Type type, Type[] requiredCustomModifiers, Type[] optionalCustomModifiers);
+		protected abstract Type Wrap(Type type, CustomModifiers mods);
 	}
 
 	sealed class ArrayType : ElementHolderType
 	{
-		internal static Type Make(Type type, Type[] requiredCustomModifiers, Type[] optionalCustomModifiers)
+		internal static Type Make(Type type, CustomModifiers mods)
 		{
-			return type.Module.CanonicalizeType(new ArrayType(type, requiredCustomModifiers, optionalCustomModifiers));
+			return type.Universe.CanonicalizeType(new ArrayType(type, mods));
 		}
 
-		private ArrayType(Type type, Type[] requiredCustomModifiers, Type[] optionalCustomModifiers)
-			: base(type, requiredCustomModifiers, optionalCustomModifiers)
+		private ArrayType(Type type, CustomModifiers mods)
+			: base(type, mods)
 		{
 		}
 
@@ -1745,30 +2058,34 @@ namespace IKVM.Reflection
 			return elementType.GetHashCode() * 5;
 		}
 
-		protected override string GetSuffix()
+		internal override string GetSuffix()
 		{
 			return "[]";
 		}
 
-		protected override Type Wrap(Type type, Type[] requiredCustomModifiers, Type[] optionalCustomModifiers)
+		protected override Type Wrap(Type type, CustomModifiers mods)
 		{
-			return Make(type, requiredCustomModifiers, optionalCustomModifiers);
+			return Make(type, mods);
 		}
 	}
 
 	sealed class MultiArrayType : ElementHolderType
 	{
 		private readonly int rank;
+		private readonly int[] sizes;
+		private readonly int[] lobounds;
 
-		internal static Type Make(Type type, int rank, Type[] requiredCustomModifiers, Type[] optionalCustomModifiers)
+		internal static Type Make(Type type, int rank, int[] sizes, int[] lobounds, CustomModifiers mods)
 		{
-			return type.Module.CanonicalizeType(new MultiArrayType(type, rank, requiredCustomModifiers, optionalCustomModifiers));
+			return type.Universe.CanonicalizeType(new MultiArrayType(type, rank, sizes, lobounds, mods));
 		}
 
-		private MultiArrayType(Type type, int rank, Type[] requiredCustomModifiers, Type[] optionalCustomModifiers)
-			: base(type, requiredCustomModifiers, optionalCustomModifiers)
+		private MultiArrayType(Type type, int rank, int[] sizes, int[] lobounds, CustomModifiers mods)
+			: base(type, mods)
 		{
 			this.rank = rank;
+			this.sizes = sizes;
+			this.lobounds = lobounds;
 		}
 
 		public override Type BaseType
@@ -1814,10 +2131,39 @@ namespace IKVM.Reflection
 			return rank;
 		}
 
+		public override int[] __GetArraySizes()
+		{
+			return Util.Copy(sizes);
+		}
+
+		public override int[] __GetArrayLowerBounds()
+		{
+			return Util.Copy(lobounds);
+		}
+
 		public override bool Equals(object o)
 		{
 			MultiArrayType at = o as MultiArrayType;
-			return EqualsHelper(at) && at.rank == rank;
+			return EqualsHelper(at)
+				&& at.rank == rank
+				&& ArrayEquals(at.sizes, sizes)
+				&& ArrayEquals(at.lobounds, lobounds);
+		}
+
+		private static bool ArrayEquals(int[] i1, int[] i2)
+		{
+			if (i1.Length == i2.Length)
+			{
+				for (int i = 0; i < i1.Length; i++)
+				{
+					if (i1[i] != i2[i])
+					{
+						return false;
+					}
+				}
+				return true;
+			}
+			return false;
 		}
 
 		public override int GetHashCode()
@@ -1825,7 +2171,7 @@ namespace IKVM.Reflection
 			return elementType.GetHashCode() * 9 + rank;
 		}
 
-		protected override string GetSuffix()
+		internal override string GetSuffix()
 		{
 			if (rank == 1)
 			{
@@ -1837,9 +2183,9 @@ namespace IKVM.Reflection
 			}
 		}
 
-		protected override Type Wrap(Type type, Type[] requiredCustomModifiers, Type[] optionalCustomModifiers)
+		protected override Type Wrap(Type type, CustomModifiers mods)
 		{
-			return Make(type, rank, requiredCustomModifiers, optionalCustomModifiers);
+			return Make(type, rank, sizes, lobounds, mods);
 		}
 	}
 
@@ -1923,14 +2269,9 @@ namespace IKVM.Reflection
 				get { return null; }
 			}
 
-			public override Type[] GetOptionalCustomModifiers()
+			public override CustomModifiers __GetCustomModifiers()
 			{
-				return Empty<Type>.Array;
-			}
-
-			public override Type[] GetRequiredCustomModifiers()
-			{
-				return Empty<Type>.Array;
+				return new CustomModifiers();
 			}
 
 			public override MemberInfo Member
@@ -1952,13 +2293,13 @@ namespace IKVM.Reflection
 
 	sealed class ByRefType : ElementHolderType
 	{
-		internal static Type Make(Type type, Type[] requiredCustomModifiers, Type[] optionalCustomModifiers)
+		internal static Type Make(Type type, CustomModifiers mods)
 		{
-			return type.Module.CanonicalizeType(new ByRefType(type, requiredCustomModifiers, optionalCustomModifiers));
+			return type.Universe.CanonicalizeType(new ByRefType(type, mods));
 		}
 
-		private ByRefType(Type type, Type[] requiredCustomModifiers, Type[] optionalCustomModifiers)
-			: base(type, requiredCustomModifiers, optionalCustomModifiers)
+		private ByRefType(Type type, CustomModifiers mods)
+			: base(type, mods)
 		{
 		}
 
@@ -1987,26 +2328,26 @@ namespace IKVM.Reflection
 			get { return true; }
 		}
 
-		protected override string GetSuffix()
+		internal override string GetSuffix()
 		{
 			return "&";
 		}
 
-		protected override Type Wrap(Type type, Type[] requiredCustomModifiers, Type[] optionalCustomModifiers)
+		protected override Type Wrap(Type type, CustomModifiers mods)
 		{
-			return Make(type, requiredCustomModifiers, optionalCustomModifiers);
+			return Make(type, mods);
 		}
 	}
 
 	sealed class PointerType : ElementHolderType
 	{
-		internal static Type Make(Type type, Type[] requiredCustomModifiers, Type[] optionalCustomModifiers)
+		internal static Type Make(Type type, CustomModifiers mods)
 		{
-			return type.Module.CanonicalizeType(new PointerType(type, requiredCustomModifiers, optionalCustomModifiers));
+			return type.Universe.CanonicalizeType(new PointerType(type, mods));
 		}
 
-		private PointerType(Type type, Type[] requiredCustomModifiers, Type[] optionalCustomModifiers)
-			: base(type, requiredCustomModifiers, optionalCustomModifiers)
+		private PointerType(Type type, CustomModifiers mods)
+			: base(type, mods)
 		{
 		}
 
@@ -2035,14 +2376,14 @@ namespace IKVM.Reflection
 			get { return true; }
 		}
 
-		protected override string GetSuffix()
+		internal override string GetSuffix()
 		{
 			return "*";
 		}
 
-		protected override Type Wrap(Type type, Type[] requiredCustomModifiers, Type[] optionalCustomModifiers)
+		protected override Type Wrap(Type type, CustomModifiers mods)
 		{
-			return Make(type, requiredCustomModifiers, optionalCustomModifiers);
+			return Make(type, mods);
 		}
 	}
 
@@ -2050,15 +2391,14 @@ namespace IKVM.Reflection
 	{
 		private readonly Type type;
 		private readonly Type[] args;
-		private readonly Type[][] requiredCustomModifiers;
-		private readonly Type[][] optionalCustomModifiers;
+		private readonly CustomModifiers[] mods;
 		private Type baseType;
 		private int token;
 
-		internal static Type Make(Type type, Type[] typeArguments, Type[][] requiredCustomModifiers, Type[][] optionalCustomModifiers)
+		internal static Type Make(Type type, Type[] typeArguments, CustomModifiers[] mods)
 		{
 			bool identity = true;
-			if (type is TypeBuilder || type is BakedType)
+			if (type is TypeBuilder || type is BakedType || type.__IsMissing)
 			{
 				// a TypeBuiler identity must be instantiated
 				identity = false;
@@ -2069,8 +2409,7 @@ namespace IKVM.Reflection
 				for (int i = 0; i < typeArguments.Length; i++)
 				{
 					if (typeArguments[i] != type.GetGenericTypeArgument(i)
-						|| !IsEmpty(requiredCustomModifiers, i)
-						|| !IsEmpty(optionalCustomModifiers, i))
+						|| !IsEmpty(mods, i))
 					{
 						identity = false;
 						break;
@@ -2083,31 +2422,29 @@ namespace IKVM.Reflection
 			}
 			else
 			{
-				return type.Module.CanonicalizeType(new GenericTypeInstance(type, typeArguments, requiredCustomModifiers, optionalCustomModifiers));
+				return type.Universe.CanonicalizeType(new GenericTypeInstance(type, typeArguments, mods));
 			}
 		}
 
-		private static bool IsEmpty(Type[][] mods, int i)
+		private static bool IsEmpty(CustomModifiers[] mods, int i)
 		{
 			// we need to be extra careful, because mods doesn't not need to be in canonical format
 			// (Signature.ReadGenericInst() calls Make() directly, without copying the modifier arrays)
-			return mods == null || mods[i] == null || mods[i].Length == 0;
+			return mods == null || mods[i].IsEmpty;
 		}
 
-		private GenericTypeInstance(Type type, Type[] args, Type[][] requiredCustomModifiers, Type[][] optionalCustomModifiers)
+		private GenericTypeInstance(Type type, Type[] args, CustomModifiers[] mods)
 		{
 			this.type = type;
 			this.args = args;
-			this.requiredCustomModifiers = requiredCustomModifiers;
-			this.optionalCustomModifiers = optionalCustomModifiers;
+			this.mods = mods;
 		}
 
 		public override bool Equals(object o)
 		{
 			GenericTypeInstance gt = o as GenericTypeInstance;
 			return gt != null && gt.type.Equals(type) && Util.ArrayEquals(gt.args, args)
-				&& Util.ArrayEquals(gt.requiredCustomModifiers, requiredCustomModifiers)
-				&& Util.ArrayEquals(gt.optionalCustomModifiers, optionalCustomModifiers);
+				&& Util.ArrayEquals(gt.mods, mods);
 		}
 
 		public override int GetHashCode()
@@ -2262,11 +2599,6 @@ namespace IKVM.Reflection
 			get { return type.Namespace; }
 		}
 
-		public override Type UnderlyingSystemType
-		{
-			get { return this; }
-		}
-
 		public override string Name
 		{
 			get { return type.Name; }
@@ -2276,15 +2608,17 @@ namespace IKVM.Reflection
 		{
 			get
 			{
-				if (this.ContainsGenericParameters)
+				if (!this.__ContainsMissingType && this.ContainsGenericParameters)
 				{
 					return null;
 				}
-				StringBuilder sb = new StringBuilder(base.FullName);
+				StringBuilder sb = new StringBuilder(this.type.FullName);
 				sb.Append('[');
+				string sep = "";
 				foreach (Type type in args)
 				{
-					sb.Append('[').Append(type.AssemblyQualifiedName.Replace("]", "\\]")).Append(']');
+					sb.Append(sep).Append('[').Append(type.FullName).Append(", ").Append(type.Assembly.FullName.Replace("]", "\\]")).Append(']');
+					sep = ",";
 				}
 				sb.Append(']');
 				return sb.ToString();
@@ -2316,6 +2650,11 @@ namespace IKVM.Reflection
 			get { return true; }
 		}
 
+		internal override bool IsGenericTypeInstance
+		{
+			get { return true; }
+		}
+
 		public override Type GetGenericTypeDefinition()
 		{
 			return type;
@@ -2326,14 +2665,9 @@ namespace IKVM.Reflection
 			return Util.Copy(args);
 		}
 
-		public override Type[][] __GetGenericArgumentsRequiredCustomModifiers()
-		{
-			return Util.Copy(requiredCustomModifiers ?? new Type[args.Length][]);
-		}
-
-		public override Type[][] __GetGenericArgumentsOptionalCustomModifiers()
+		public override CustomModifiers[] __GetGenericArgumentsCustomModifiers()
 		{
-			return Util.Copy(optionalCustomModifiers ?? new Type[args.Length][]);
+			return mods != null ? (CustomModifiers[])mods.Clone() : new CustomModifiers[args.Length];
 		}
 
 		internal override Type GetGenericTypeArgument(int index)
@@ -2356,6 +2690,21 @@ namespace IKVM.Reflection
 			}
 		}
 
+		public override bool __ContainsMissingType
+		{
+			get
+			{
+				foreach (Type type in args)
+				{
+					if (type.__ContainsMissingType)
+					{
+						return true;
+					}
+				}
+				return this.type.__IsMissing;
+			}
+		}
+
 		public override StructLayoutAttribute StructLayoutAttribute
 		{
 			get { return type.StructLayoutAttribute; }
@@ -2384,7 +2733,7 @@ namespace IKVM.Reflection
 					{
 						xargs[i] = args[i].BindTypeParameters(binder);
 					}
-					return Make(type, xargs, null, null);
+					return Make(type, xargs, null);
 				}
 			}
 			return this;
@@ -2395,4 +2744,79 @@ namespace IKVM.Reflection
 			return type.GetCustomAttributesData(attributeType);
 		}
 	}
+
+	sealed class FunctionPointerType : Type
+	{
+		private readonly Universe universe;
+		private readonly __StandAloneMethodSig sig;
+
+		internal static Type Make(Universe universe, __StandAloneMethodSig sig)
+		{
+			return universe.CanonicalizeType(new FunctionPointerType(universe, sig));
+		}
+
+		private FunctionPointerType(Universe universe, __StandAloneMethodSig sig)
+		{
+			this.universe = universe;
+			this.sig = sig;
+		}
+
+		public override bool Equals(object obj)
+		{
+			FunctionPointerType other = obj as FunctionPointerType;
+			return other != null
+				&& other.universe == universe
+				&& other.sig.Equals(sig);
+		}
+
+		public override int GetHashCode()
+		{
+			return sig.GetHashCode();
+		}
+
+		public override bool __IsFunctionPointer
+		{
+			get { return true; }
+		}
+
+		public override __StandAloneMethodSig __MethodSignature
+		{
+			get { return sig; }
+		}
+
+		public override Type BaseType
+		{
+			get { return null; }
+		}
+
+		public override TypeAttributes Attributes
+		{
+			get { return 0; }
+		}
+
+		public override string Name
+		{
+			get { throw new InvalidOperationException(); }
+		}
+
+		public override string FullName
+		{
+			get { throw new InvalidOperationException(); }
+		}
+
+		public override Module Module
+		{
+			get { throw new InvalidOperationException(); }
+		}
+
+		internal override Universe Universe
+		{
+			get { return universe; }
+		}
+
+		public override string ToString()
+		{
+			return "<FunctionPtr>";
+		}
+	}
 }
diff --git a/mcs/class/IKVM.Reflection/TypeNameParser.cs b/mcs/class/IKVM.Reflection/TypeNameParser.cs
index d6c18ee..22ff76c 100644
--- a/mcs/class/IKVM.Reflection/TypeNameParser.cs
+++ b/mcs/class/IKVM.Reflection/TypeNameParser.cs
@@ -1,5 +1,5 @@
 /*
-  Copyright (C) 2009 Jeroen Frijters
+  Copyright (C) 2009-2011 Jeroen Frijters
 
   This software is provided 'as-is', without any express or implied
   warranty.  In no event will the authors be held liable for any damages
@@ -27,6 +27,79 @@ using System.Text;
 
 namespace IKVM.Reflection
 {
+	// this respresents a type name as in metadata:
+	// - ns will be null for empty the namespace (never the empty string)
+	// - the strings are not escaped
+	struct TypeName : IEquatable<TypeName>
+	{
+		private readonly string ns;
+		private readonly string name;
+
+		internal TypeName(string ns, string name)
+		{
+			if (name == null)
+			{
+				throw new ArgumentNullException("name");
+			}
+			this.ns = ns;
+			this.name = name;
+		}
+
+		internal string Name
+		{
+			get { return name; }
+		}
+
+		internal string Namespace
+		{
+			get { return ns; }
+		}
+
+		public static bool operator ==(TypeName o1, TypeName o2)
+		{
+			return o1.ns == o2.ns && o1.name == o2.name;
+		}
+
+		public static bool operator !=(TypeName o1, TypeName o2)
+		{
+			return o1.ns != o2.ns || o1.name != o2.name;
+		}
+
+		public override int GetHashCode()
+		{
+			return ns == null ? name.GetHashCode() : ns.GetHashCode() * 37 + name.GetHashCode();
+		}
+
+		public override bool Equals(object obj)
+		{
+			TypeName? other = obj as TypeName?;
+			return other != null && other.Value == this;
+		}
+
+		public override string ToString()
+		{
+			return ns == null ? name : ns + "." + name;
+		}
+
+		bool IEquatable<TypeName>.Equals(TypeName other)
+		{
+			return this == other;
+		}
+
+		internal static TypeName Split(string name)
+		{
+			int dot = name.LastIndexOf('.');
+			if (dot == -1)
+			{
+				return new TypeName(null, name);
+			}
+			else
+			{
+				return new TypeName(name.Substring(0, dot), name.Substring(dot + 1));
+			}
+		}
+	}
+
 	struct TypeNameParser
 	{
 		private const string SpecialChars = "\\+,[]*&";
@@ -49,17 +122,27 @@ namespace IKVM.Reflection
 			for (int pos = 0; pos < name.Length; pos++)
 			{
 				char c = name[pos];
-				if (SpecialChars.IndexOf(c) != -1)
+				switch (c)
 				{
-					if (sb == null)
-					{
-						sb = new StringBuilder(name, 0, pos, name.Length + 3);
-					}
-					sb.Append('\\').Append(c);
-				}
-				else if (sb != null)
-				{
-					sb.Append(c);
+					case '\\':
+					case '+':
+					case ',':
+					case '[':
+					case ']':
+					case '*':
+					case '&':
+						if (sb == null)
+						{
+							sb = new StringBuilder(name, 0, pos, name.Length + 3);
+						}
+						sb.Append("\\").Append(c);
+						break;
+					default:
+						if (sb != null)
+						{
+							sb.Append(c);
+						}
+						break;
 				}
 			}
 			return sb != null ? sb.ToString() : name;
@@ -366,8 +449,9 @@ namespace IKVM.Reflection
 			}
 		}
 
-		internal Type GetType(Universe universe, Assembly context, bool throwOnError, string originalName)
+		internal Type GetType(Universe universe, Assembly context, bool throwOnError, string originalName, bool resolve)
 		{
+			TypeName name = TypeName.Split(this.name);
 			Type type;
 			if (assemblyName != null)
 			{
@@ -376,24 +460,49 @@ namespace IKVM.Reflection
 				{
 					return null;
 				}
-				type = asm.GetTypeImpl(name);
+				if (resolve)
+				{
+					type = asm.ResolveType(name);
+				}
+				else
+				{
+					type = asm.FindType(name);
+				}
 			}
 			else if (context == null)
 			{
-				type = universe.Mscorlib.GetTypeImpl(name);
+				if (resolve)
+				{
+					type = universe.Mscorlib.ResolveType(name);
+				}
+				else
+				{
+					type = universe.Mscorlib.FindType(name);
+				}
 			}
 			else
 			{
-				type = context.GetTypeImpl(name);
+				type = context.FindType(name);
 				if (type == null && context != universe.Mscorlib)
 				{
-					type = universe.Mscorlib.GetTypeImpl(name);
+					type = universe.Mscorlib.FindType(name);
+				}
+				if (type == null && resolve)
+				{
+					if (universe.Mscorlib.__IsMissing && !context.__IsMissing)
+					{
+						type = universe.Mscorlib.ResolveType(name);
+					}
+					else
+					{
+						type = context.ResolveType(name);
+					}
 				}
 			}
-			return Expand(type, context, throwOnError, originalName);
+			return Expand(type, context, throwOnError, originalName, resolve);
 		}
 
-		internal Type Expand(Type type, Assembly context, bool throwOnError, string originalName)
+		internal Type Expand(Type type, Assembly context, bool throwOnError, string originalName, bool resolve)
 		{
 			if (type == null)
 			{
@@ -405,16 +514,26 @@ namespace IKVM.Reflection
 			}
 			if (nested != null)
 			{
+				Type outer;
 				foreach (string nest in nested)
 				{
-					type = type.GetNestedType(nest, BindingFlags.Public | BindingFlags.NonPublic);
+					outer = type;
+					TypeName name = TypeName.Split(TypeNameParser.Unescape(nest));
+					type = outer.FindNestedType(name);
 					if (type == null)
 					{
-						if (throwOnError)
+						if (resolve)
+						{
+							type = outer.Module.universe.GetMissingTypeOrThrow(outer.Module, outer, name);
+						}
+						else if (throwOnError)
 						{
 							throw new TypeLoadException(originalName);
 						}
-						return null;
+						else
+						{
+							return null;
+						}
 					}
 				}
 			}
@@ -423,7 +542,7 @@ namespace IKVM.Reflection
 				Type[] typeArgs = new Type[genericParameters.Length];
 				for (int i = 0; i < typeArgs.Length; i++)
 				{
-					typeArgs[i] = genericParameters[i].GetType(type.Assembly.universe, context, throwOnError, originalName);
+					typeArgs[i] = genericParameters[i].GetType(type.Assembly.universe, context, throwOnError, originalName, resolve);
 					if (typeArgs[i] == null)
 					{
 						return null;
diff --git a/mcs/class/IKVM.Reflection/Universe.cs b/mcs/class/IKVM.Reflection/Universe.cs
index ab63183..a59da44 100644
--- a/mcs/class/IKVM.Reflection/Universe.cs
+++ b/mcs/class/IKVM.Reflection/Universe.cs
@@ -1,5 +1,5 @@
 /*
-  Copyright (C) 2009-2010 Jeroen Frijters
+  Copyright (C) 2009-2012 Jeroen Frijters
 
   This software is provided 'as-is', without any express or implied
   warranty.  In no event will the authors be held liable for any damages
@@ -32,7 +32,7 @@ using IKVM.Reflection.Emit;
 
 namespace IKVM.Reflection
 {
-	public class ResolveEventArgs : EventArgs
+	public sealed class ResolveEventArgs : EventArgs
 	{
 		private readonly string name;
 		private readonly Assembly requestingAssembly;
@@ -77,13 +77,25 @@ namespace IKVM.Reflection
 
 	public delegate Assembly ResolveEventHandler(object sender, ResolveEventArgs args);
 
+	[Flags]
+	public enum UniverseOptions
+	{
+		None = 0,
+		EnableFunctionPointers = 1,
+		DisableFusion = 2,
+	}
+
 	public sealed class Universe : IDisposable
 	{
-		internal readonly Dictionary<Type, Type> canonicalizedTypes = new Dictionary<Type, Type>();
-		private readonly List<Assembly> assemblies = new List<Assembly>();
+		private readonly Dictionary<Type, Type> canonicalizedTypes = new Dictionary<Type, Type>();
+		private readonly List<AssemblyReader> assemblies = new List<AssemblyReader>();
 		private readonly List<AssemblyBuilder> dynamicAssemblies = new List<AssemblyBuilder>();
 		private readonly Dictionary<string, Assembly> assembliesByName = new Dictionary<string, Assembly>();
 		private readonly Dictionary<System.Type, Type> importedTypes = new Dictionary<System.Type, Type>();
+		private Dictionary<ScopedTypeName, Type> missingTypes;
+		private bool resolveMissingMembers;
+		private readonly bool enableFunctionPointers;
+		private readonly bool useNativeFusion;
 		private Type typeof_System_Object;
 		private Type typeof_System_ValueType;
 		private Type typeof_System_Enum;
@@ -112,7 +124,6 @@ namespace IKVM.Reflection
 		private Type typeof_System_NonSerializedAttribute;
 		private Type typeof_System_SerializableAttribute;
 		private Type typeof_System_AttributeUsageAttribute;
-		private Type typeof_System_Reflection_AssemblyCultureAttribute;
 		private Type typeof_System_Runtime_InteropServices_DllImportAttribute;
 		private Type typeof_System_Runtime_InteropServices_FieldOffsetAttribute;
 		private Type typeof_System_Runtime_InteropServices_InAttribute;
@@ -123,6 +134,8 @@ namespace IKVM.Reflection
 		private Type typeof_System_Runtime_InteropServices_StructLayoutAttribute;
 		private Type typeof_System_Runtime_InteropServices_OptionalAttribute;
 		private Type typeof_System_Runtime_InteropServices_PreserveSigAttribute;
+		private Type typeof_System_Runtime_InteropServices_CallingConvention;
+		private Type typeof_System_Runtime_InteropServices_CharSet;
 		private Type typeof_System_Runtime_InteropServices_ComImportAttribute;
 		private Type typeof_System_Runtime_CompilerServices_DecimalConstantAttribute;
 		private Type typeof_System_Runtime_CompilerServices_SpecialNameAttribute;
@@ -137,11 +150,35 @@ namespace IKVM.Reflection
 		private Type typeof_System_Reflection_AssemblyInformationalVersionAttribute;
 		private Type typeof_System_Reflection_AssemblyFileVersionAttribute;
 		private Type typeof_System_Security_Permissions_CodeAccessSecurityAttribute;
-		private Type typeof_System_Security_Permissions_HostProtectionAttribute;
 		private Type typeof_System_Security_Permissions_PermissionSetAttribute;
 		private Type typeof_System_Security_Permissions_SecurityAction;
 		private List<ResolveEventHandler> resolvers = new List<ResolveEventHandler>();
 
+		public Universe()
+			: this(UniverseOptions.None)
+		{
+		}
+
+		public Universe(UniverseOptions options)
+		{
+			enableFunctionPointers = (options & UniverseOptions.EnableFunctionPointers) != 0;
+			useNativeFusion = (options & UniverseOptions.DisableFusion) == 0 && GetUseNativeFusion();
+		}
+
+		private static bool GetUseNativeFusion()
+		{
+			try
+			{
+				return Environment.OSVersion.Platform == PlatformID.Win32NT
+					&& System.Type.GetType("Mono.Runtime") == null
+					&& Environment.GetEnvironmentVariable("IKVM_DISABLE_FUSION") == null;
+			}
+			catch (System.Security.SecurityException)
+			{
+				return false;
+			}
+		}
+
 		internal Assembly Mscorlib
 		{
 			get { return Load("mscorlib"); }
@@ -149,117 +186,139 @@ namespace IKVM.Reflection
 
 		private Type ImportMscorlibType(System.Type type)
 		{
-			return Mscorlib.GetTypeImpl(type.FullName);
+			if (Mscorlib.__IsMissing)
+			{
+				return Mscorlib.ResolveType(new TypeName(type.Namespace, type.Name));
+			}
+			// We use FindType instead of ResolveType here, because on some versions of mscorlib some of
+			// the special types we use/support are missing and the type properties are defined to
+			// return null in that case.
+			// Note that we don't have to unescape type.Name here, because none of the names contain special characters.
+			return Mscorlib.FindType(new TypeName(type.Namespace, type.Name));
+		}
+
+		private Type ResolvePrimitive(string name)
+		{
+			// Primitive here means that these types have a special metadata encoding, which means that
+			// there can be references to them without referring to them by name explicitly.
+			// When 'resolve missing type' mode is enabled, we want these types to be usable even when
+			// they don't exist in mscorlib or there is no mscorlib loaded.
+			return Mscorlib.ResolveType(new TypeName("System", name));
 		}
 
 		internal Type System_Object
 		{
-			get { return typeof_System_Object ?? (typeof_System_Object = ImportMscorlibType(typeof(System.Object))); }
+			get { return typeof_System_Object ?? (typeof_System_Object = ResolvePrimitive("Object")); }
 		}
 
 		internal Type System_ValueType
 		{
-			get { return typeof_System_ValueType ?? (typeof_System_ValueType = ImportMscorlibType(typeof(System.ValueType))); }
+			// System.ValueType is not a primitive, but generic type parameters can have a ValueType constraint
+			// (we also don't want to return null here)
+			get { return typeof_System_ValueType ?? (typeof_System_ValueType = ResolvePrimitive("ValueType")); }
 		}
 
 		internal Type System_Enum
 		{
-			get { return typeof_System_Enum ?? (typeof_System_Enum = ImportMscorlibType(typeof(System.Enum))); }
+			// System.Enum is not a primitive, but we don't want to return null
+			get { return typeof_System_Enum ?? (typeof_System_Enum = ResolvePrimitive("Enum")); }
 		}
 
 		internal Type System_Void
 		{
-			get { return typeof_System_Void ?? (typeof_System_Void = ImportMscorlibType(typeof(void))); }
+			get { return typeof_System_Void ?? (typeof_System_Void = ResolvePrimitive("Void")); }
 		}
 
 		internal Type System_Boolean
 		{
-			get { return typeof_System_Boolean ?? (typeof_System_Boolean = ImportMscorlibType(typeof(System.Boolean))); }
+			get { return typeof_System_Boolean ?? (typeof_System_Boolean = ResolvePrimitive("Boolean")); }
 		}
 
 		internal Type System_Char
 		{
-			get { return typeof_System_Char ?? (typeof_System_Char = ImportMscorlibType(typeof(System.Char))); }
+			get { return typeof_System_Char ?? (typeof_System_Char = ResolvePrimitive("Char")); }
 		}
 
 		internal Type System_SByte
 		{
-			get { return typeof_System_SByte ?? (typeof_System_SByte = ImportMscorlibType(typeof(System.SByte))); }
+			get { return typeof_System_SByte ?? (typeof_System_SByte = ResolvePrimitive("SByte")); }
 		}
 
 		internal Type System_Byte
 		{
-			get { return typeof_System_Byte ?? (typeof_System_Byte = ImportMscorlibType(typeof(System.Byte))); }
+			get { return typeof_System_Byte ?? (typeof_System_Byte = ResolvePrimitive("Byte")); }
 		}
 
 		internal Type System_Int16
 		{
-			get { return typeof_System_Int16 ?? (typeof_System_Int16 = ImportMscorlibType(typeof(System.Int16))); }
+			get { return typeof_System_Int16 ?? (typeof_System_Int16 = ResolvePrimitive("Int16")); }
 		}
 
 		internal Type System_UInt16
 		{
-			get { return typeof_System_UInt16 ?? (typeof_System_UInt16 = ImportMscorlibType(typeof(System.UInt16))); }
+			get { return typeof_System_UInt16 ?? (typeof_System_UInt16 = ResolvePrimitive("UInt16")); }
 		}
 
 		internal Type System_Int32
 		{
-			get { return typeof_System_Int32 ?? (typeof_System_Int32 = ImportMscorlibType(typeof(System.Int32))); }
+			get { return typeof_System_Int32 ?? (typeof_System_Int32 = ResolvePrimitive("Int32")); }
 		}
 
 		internal Type System_UInt32
 		{
-			get { return typeof_System_UInt32 ?? (typeof_System_UInt32 = ImportMscorlibType(typeof(System.UInt32))); }
+			get { return typeof_System_UInt32 ?? (typeof_System_UInt32 = ResolvePrimitive("UInt32")); }
 		}
 
 		internal Type System_Int64
 		{
-			get { return typeof_System_Int64 ?? (typeof_System_Int64 = ImportMscorlibType(typeof(System.Int64))); }
+			get { return typeof_System_Int64 ?? (typeof_System_Int64 = ResolvePrimitive("Int64")); }
 		}
 
 		internal Type System_UInt64
 		{
-			get { return typeof_System_UInt64 ?? (typeof_System_UInt64 = ImportMscorlibType(typeof(System.UInt64))); }
+			get { return typeof_System_UInt64 ?? (typeof_System_UInt64 = ResolvePrimitive("UInt64")); }
 		}
 
 		internal Type System_Single
 		{
-			get { return typeof_System_Single ?? (typeof_System_Single = ImportMscorlibType(typeof(System.Single))); }
+			get { return typeof_System_Single ?? (typeof_System_Single = ResolvePrimitive("Single")); }
 		}
 
 		internal Type System_Double
 		{
-			get { return typeof_System_Double ?? (typeof_System_Double = ImportMscorlibType(typeof(System.Double))); }
+			get { return typeof_System_Double ?? (typeof_System_Double = ResolvePrimitive("Double")); }
 		}
 
 		internal Type System_String
 		{
-			get { return typeof_System_String ?? (typeof_System_String = ImportMscorlibType(typeof(System.String))); }
+			get { return typeof_System_String ?? (typeof_System_String = ResolvePrimitive("String")); }
 		}
 
 		internal Type System_IntPtr
 		{
-			get { return typeof_System_IntPtr ?? (typeof_System_IntPtr = ImportMscorlibType(typeof(System.IntPtr))); }
+			get { return typeof_System_IntPtr ?? (typeof_System_IntPtr = ResolvePrimitive("IntPtr")); }
 		}
 
 		internal Type System_UIntPtr
 		{
-			get { return typeof_System_UIntPtr ?? (typeof_System_UIntPtr = ImportMscorlibType(typeof(System.UIntPtr))); }
+			get { return typeof_System_UIntPtr ?? (typeof_System_UIntPtr = ResolvePrimitive("UIntPtr")); }
 		}
 
 		internal Type System_TypedReference
 		{
-			get { return typeof_System_TypedReference ?? (typeof_System_TypedReference = ImportMscorlibType(typeof(System.TypedReference))); }
+			get { return typeof_System_TypedReference ?? (typeof_System_TypedReference = ResolvePrimitive("TypedReference")); }
 		}
 
 		internal Type System_Type
 		{
-			get { return typeof_System_Type ?? (typeof_System_Type = ImportMscorlibType(typeof(System.Type))); }
+			// System.Type is not a primitive, but it does have a special encoding in custom attributes
+			get { return typeof_System_Type ?? (typeof_System_Type = ResolvePrimitive("Type")); }
 		}
 
 		internal Type System_Array
 		{
-			get { return typeof_System_Array ?? (typeof_System_Array = ImportMscorlibType(typeof(System.Array))); }
+			// System.Array is not a primitive, but it used as a base type for array types (that are primitives)
+			get { return typeof_System_Array ?? (typeof_System_Array = ResolvePrimitive("Array")); }
 		}
 
 		internal Type System_DateTime
@@ -292,11 +351,6 @@ namespace IKVM.Reflection
 			get { return typeof_System_AttributeUsageAttribute ?? (typeof_System_AttributeUsageAttribute = ImportMscorlibType(typeof(System.AttributeUsageAttribute))); }
 		}
 
-		internal Type System_Reflection_AssemblyCultureAttribute
-		{
-			get { return typeof_System_Reflection_AssemblyCultureAttribute ?? (typeof_System_Reflection_AssemblyCultureAttribute = ImportMscorlibType(typeof(System.Reflection.AssemblyCultureAttribute))); }
-		}
-
 		internal Type System_Runtime_InteropServices_DllImportAttribute
 		{
 			get { return typeof_System_Runtime_InteropServices_DllImportAttribute ?? (typeof_System_Runtime_InteropServices_DllImportAttribute = ImportMscorlibType(typeof(System.Runtime.InteropServices.DllImportAttribute))); }
@@ -347,6 +401,16 @@ namespace IKVM.Reflection
 			get { return typeof_System_Runtime_InteropServices_PreserveSigAttribute ?? (typeof_System_Runtime_InteropServices_PreserveSigAttribute = ImportMscorlibType(typeof(System.Runtime.InteropServices.PreserveSigAttribute))); }
 		}
 
+		internal Type System_Runtime_InteropServices_CallingConvention
+		{
+			get { return typeof_System_Runtime_InteropServices_CallingConvention ?? (typeof_System_Runtime_InteropServices_CallingConvention = ImportMscorlibType(typeof(System.Runtime.InteropServices.CallingConvention))); }
+		}
+
+		internal Type System_Runtime_InteropServices_CharSet
+		{
+			get { return typeof_System_Runtime_InteropServices_CharSet ?? (typeof_System_Runtime_InteropServices_CharSet = ImportMscorlibType(typeof(System.Runtime.InteropServices.CharSet))); }
+		}
+
 		internal Type System_Runtime_InteropServices_ComImportAttribute
 		{
 			get { return typeof_System_Runtime_InteropServices_ComImportAttribute ?? (typeof_System_Runtime_InteropServices_ComImportAttribute = ImportMscorlibType(typeof(System.Runtime.InteropServices.ComImportAttribute))); }
@@ -417,11 +481,6 @@ namespace IKVM.Reflection
 			get { return typeof_System_Security_Permissions_CodeAccessSecurityAttribute ?? (typeof_System_Security_Permissions_CodeAccessSecurityAttribute = ImportMscorlibType(typeof(System.Security.Permissions.CodeAccessSecurityAttribute))); }
 		}
 
-		internal Type System_Security_Permissions_HostProtectionAttribute
-		{
-			get { return typeof_System_Security_Permissions_HostProtectionAttribute ?? (typeof_System_Security_Permissions_HostProtectionAttribute = ImportMscorlibType(typeof(System.Security.Permissions.HostProtectionAttribute))); }
-		}
-
 		internal Type System_Security_Permissions_PermissionSetAttribute
 		{
 			get { return typeof_System_Security_Permissions_PermissionSetAttribute ?? (typeof_System_Security_Permissions_PermissionSetAttribute = ImportMscorlibType(typeof(System.Security.Permissions.PermissionSetAttribute))); }
@@ -510,9 +569,20 @@ namespace IKVM.Reflection
 				}
 				return Import(type.GetGenericTypeDefinition()).MakeGenericType(importedArgs);
 			}
+			else if (type.IsNested)
+			{
+				// note that we can't pass in the namespace here, because .NET's Type.Namespace implementation is broken for nested types
+				// (it returns the namespace of the declaring type)
+				return Import(type.DeclaringType).ResolveNestedType(new TypeName(null, type.Name));
+			}
+			else if (type.Assembly == typeof(object).Assembly)
+			{
+				// make sure mscorlib types always end up in our mscorlib
+				return Mscorlib.ResolveType(new TypeName(type.Namespace, type.Name));
+			}
 			else
 			{
-				return Import(type.Assembly).GetType(type.FullName);
+				return Import(type.Assembly).ResolveType(new TypeName(type.Namespace, type.Name));
 			}
 		}
 
@@ -529,9 +599,9 @@ namespace IKVM.Reflection
 
 		public RawModule OpenRawModule(Stream stream, string location)
 		{
-			if (!stream.CanRead || !stream.CanSeek)
+			if (!stream.CanRead || !stream.CanSeek || stream.Position != 0)
 			{
-				throw new NotSupportedException();
+				throw new ArgumentException("Stream must support read/seek and current position must be zero.", "stream");
 			}
 			return new RawModule(new ModuleReader(null, this, stream, location));
 		}
@@ -542,8 +612,9 @@ namespace IKVM.Reflection
 			Assembly asm = GetLoadedAssembly(refname);
 			if (asm == null)
 			{
-				asm = module.ToAssembly();
-				assemblies.Add(asm);
+				AssemblyReader asm1 = module.ToAssembly();
+				assemblies.Add(asm1);
+				asm = asm1;
 			}
 			return asm;
 		}
@@ -567,17 +638,28 @@ namespace IKVM.Reflection
 			}
 		}
 
+		private static string GetSimpleAssemblyName(string refname)
+		{
+			int pos;
+			string name;
+			if (Fusion.ParseAssemblySimpleName(refname, out pos, out name) != ParseAssemblyResult.OK)
+			{
+				throw new ArgumentException();
+			}
+			return name;
+		}
+
 		private Assembly GetLoadedAssembly(string refname)
 		{
 			Assembly asm;
 			if (!assembliesByName.TryGetValue(refname, out asm))
 			{
+				string simpleName = GetSimpleAssemblyName(refname);
 				for (int i = 0; i < assemblies.Count; i++)
 				{
 					AssemblyComparisonResult result;
-					// We won't allow FX unification here, because our own (non-Fusion) implementation of CompareAssemblyIdentity doesn't support it and
-					// we don't want to create a fundamental functional difference based on that.
-					if (CompareAssemblyIdentity(refname, false, assemblies[i].FullName, false, out result) && result != AssemblyComparisonResult.EquivalentFXUnified)
+					if (simpleName.Equals(assemblies[i].Name, StringComparison.InvariantCultureIgnoreCase)
+						&& CompareAssemblyIdentity(refname, false, assemblies[i].FullName, false, out result))
 					{
 						asm = assemblies[i];
 						assembliesByName.Add(refname, asm);
@@ -590,12 +672,12 @@ namespace IKVM.Reflection
 
 		private Assembly GetDynamicAssembly(string refname)
 		{
+			string simpleName = GetSimpleAssemblyName(refname);
 			foreach (AssemblyBuilder asm in dynamicAssemblies)
 			{
 				AssemblyComparisonResult result;
-				// We won't allow FX unification here, because our own (non-Fusion) implementation of CompareAssemblyIdentity doesn't support it and
-				// we don't want to create a fundamental functional difference based on that.
-				if (CompareAssemblyIdentity(refname, false, asm.FullName, false, out result) && result != AssemblyComparisonResult.EquivalentFXUnified)
+				if (simpleName.Equals(asm.Name, StringComparison.InvariantCultureIgnoreCase)
+					&& CompareAssemblyIdentity(refname, false, asm.FullName, false, out result))
 				{
 					return asm;
 				}
@@ -713,13 +795,29 @@ namespace IKVM.Reflection
 			{
 				return null;
 			}
-			return parser.GetType(this, context, throwOnError, assemblyQualifiedTypeName);
+			return parser.GetType(this, context, throwOnError, assemblyQualifiedTypeName, false);
+		}
+
+		// this is similar to GetType(Assembly context, string assemblyQualifiedTypeName, bool throwOnError),
+		// but instead it assumes that the type must exist (i.e. if EnableMissingMemberResolution is enabled
+		// it will create a missing type)
+		public Type ResolveType(Assembly context, string assemblyQualifiedTypeName)
+		{
+			TypeNameParser parser = TypeNameParser.Parse(assemblyQualifiedTypeName, false);
+			if (parser.Error)
+			{
+				return null;
+			}
+			return parser.GetType(this, context, false, assemblyQualifiedTypeName, true);
 		}
 
 		public Assembly[] GetAssemblies()
 		{
 			Assembly[] array = new Assembly[assemblies.Count + dynamicAssemblies.Count];
-			assemblies.CopyTo(array);
+			for (int i = 0; i < assemblies.Count; i++)
+			{
+				array[i] = assemblies[i];
+			}
 			for (int i = 0, j = assemblies.Count; j < array.Length; i++, j++)
 			{
 				array[j] = dynamicAssemblies[i];
@@ -730,7 +828,9 @@ namespace IKVM.Reflection
 		// this is equivalent to the Fusion CompareAssemblyIdentity API
 		public bool CompareAssemblyIdentity(string assemblyIdentity1, bool unified1, string assemblyIdentity2, bool unified2, out AssemblyComparisonResult result)
 		{
-			return Fusion.CompareAssemblyIdentity(assemblyIdentity1, unified1, assemblyIdentity2, unified2, out result);
+			return useNativeFusion
+				? Fusion.CompareAssemblyIdentityNative(assemblyIdentity1, unified1, assemblyIdentity2, unified2, out result)
+				: Fusion.CompareAssemblyIdentityPure(assemblyIdentity1, unified1, assemblyIdentity2, unified2, out result);
 		}
 
 		public AssemblyBuilder DefineDynamicAssembly(AssemblyName name, AssemblyBuilderAccess access)
@@ -791,5 +891,146 @@ namespace IKVM.Reflection
 				}
 			}
 		}
+
+		public Assembly CreateMissingAssembly(string assemblyName)
+		{
+			Assembly asm = new MissingAssembly(this, assemblyName);
+			string name = asm.FullName;
+			if (!assembliesByName.ContainsKey(name))
+			{
+				assembliesByName.Add(name, asm);
+			}
+			return asm;
+		}
+
+		public void EnableMissingMemberResolution()
+		{
+			resolveMissingMembers = true;
+		}
+
+		internal bool MissingMemberResolution
+		{
+			get { return resolveMissingMembers; }
+		}
+
+		internal bool EnableFunctionPointers
+		{
+			get { return enableFunctionPointers; }
+		}
+
+		private struct ScopedTypeName : IEquatable<ScopedTypeName>
+		{
+			private readonly object scope;
+			private readonly TypeName name;
+
+			internal ScopedTypeName(object scope, TypeName name)
+			{
+				this.scope = scope;
+				this.name = name;
+			}
+
+			public override bool Equals(object obj)
+			{
+				ScopedTypeName? other = obj as ScopedTypeName?;
+				return other != null && ((IEquatable<ScopedTypeName>)other.Value).Equals(this);
+			}
+
+			public override int GetHashCode()
+			{
+				return scope.GetHashCode() * 7 + name.GetHashCode();
+			}
+
+			bool IEquatable<ScopedTypeName>.Equals(ScopedTypeName other)
+			{
+				return other.scope == scope && other.name == name;
+			}
+		}
+
+		internal Type GetMissingTypeOrThrow(Module module, Type declaringType, TypeName typeName)
+		{
+			if (resolveMissingMembers || module.Assembly.__IsMissing)
+			{
+				if (missingTypes == null)
+				{
+					missingTypes = new Dictionary<ScopedTypeName, Type>();
+				}
+				ScopedTypeName stn = new ScopedTypeName(declaringType ?? (object)module, typeName);
+				Type type;
+				if (!missingTypes.TryGetValue(stn, out type))
+				{
+					type = new MissingType(module, declaringType, typeName.Namespace, typeName.Name);
+					missingTypes.Add(stn, type);
+				}
+				return type;
+			}
+			string fullName = TypeNameParser.Escape(typeName.ToString());
+			if (declaringType != null)
+			{
+				fullName = declaringType.FullName + "+" + fullName;
+			}
+			throw new TypeLoadException(String.Format("Type '{0}' not found in assembly '{1}'", fullName, module.Assembly.FullName));
+		}
+
+		internal MethodBase GetMissingMethodOrThrow(Type declaringType, string name, MethodSignature signature)
+		{
+			if (resolveMissingMembers)
+			{
+				MethodInfo method = new MissingMethod(declaringType, name, signature);
+				if (name == ".ctor")
+				{
+					return new ConstructorInfoImpl(method);
+				}
+				return method;
+			}
+			throw new MissingMethodException(declaringType.ToString(), name);
+		}
+
+		internal FieldInfo GetMissingFieldOrThrow(Type declaringType, string name, FieldSignature signature)
+		{
+			if (resolveMissingMembers)
+			{
+				return new MissingField(declaringType, name, signature);
+			}
+			throw new MissingFieldException(declaringType.ToString(), name);
+		}
+
+		internal PropertyInfo GetMissingPropertyOrThrow(Type declaringType, string name, PropertySignature propertySignature)
+		{
+			// HACK we need to check __IsMissing here, because Type doesn't have a FindProperty API
+			// since properties are never resolved, except by custom attributes
+			if (resolveMissingMembers || declaringType.__IsMissing)
+			{
+				return new MissingProperty(declaringType, name, propertySignature);
+			}
+			throw new System.MissingMemberException(declaringType.ToString(), name);
+		}
+
+		internal Type CanonicalizeType(Type type)
+		{
+			Type canon;
+			if (!canonicalizedTypes.TryGetValue(type, out canon))
+			{
+				canon = type;
+				canonicalizedTypes.Add(canon, canon);
+			}
+			return canon;
+		}
+
+		public Type MakeFunctionPointer(__StandAloneMethodSig sig)
+		{
+			return FunctionPointerType.Make(this, sig);
+		}
+
+		public __StandAloneMethodSig MakeStandAloneMethodSig(System.Runtime.InteropServices.CallingConvention callingConvention, Type returnType, CustomModifiers returnTypeCustomModifiers, Type[] parameterTypes, CustomModifiers[] parameterTypeCustomModifiers)
+		{
+			return new __StandAloneMethodSig(true, callingConvention, 0, returnType ?? this.System_Void, Util.Copy(parameterTypes), Type.EmptyTypes,
+				PackedCustomModifiers.CreateFromExternal(returnTypeCustomModifiers, parameterTypeCustomModifiers, Util.NullSafeLength(parameterTypes)));
+		}
+
+		public __StandAloneMethodSig MakeStandAloneMethodSig(CallingConventions callingConvention, Type returnType, CustomModifiers returnTypeCustomModifiers, Type[] parameterTypes, Type[] optionalParameterTypes, CustomModifiers[] parameterTypeCustomModifiers)
+		{
+			return new __StandAloneMethodSig(false, 0, callingConvention, returnType ?? this.System_Void, Util.Copy(parameterTypes), Util.Copy(optionalParameterTypes),
+				PackedCustomModifiers.CreateFromExternal(returnTypeCustomModifiers, parameterTypeCustomModifiers, Util.NullSafeLength(parameterTypes) + Util.NullSafeLength(optionalParameterTypes)));
+		}
 	}
 }
diff --git a/mcs/class/IKVM.Reflection/Util.cs b/mcs/class/IKVM.Reflection/Util.cs
index ca457d3..2c1e6bb 100644
--- a/mcs/class/IKVM.Reflection/Util.cs
+++ b/mcs/class/IKVM.Reflection/Util.cs
@@ -84,29 +84,26 @@ namespace IKVM.Reflection
 
 	static class Util
 	{
-		internal static Type[] Copy(Type[] array)
+		internal static int[] Copy(int[] array)
 		{
 			if (array == null || array.Length == 0)
 			{
-				return Type.EmptyTypes;
+				return Empty<int>.Array;
 			}
-			Type[] copy = new Type[array.Length];
+			int[] copy = new int[array.Length];
 			Array.Copy(array, copy, array.Length);
 			return copy;
 		}
 
-		internal static Type[][] Copy(Type[][] types)
+		internal static Type[] Copy(Type[] array)
 		{
-			if (types == null || types.Length == 0)
-			{
-				return types;
-			}
-			Type[][] newArray = new Type[types.Length][];
-			for (int i = 0; i < newArray.Length; i++)
+			if (array == null || array.Length == 0)
 			{
-				newArray[i] = Copy(types[i]);
+				return Type.EmptyTypes;
 			}
-			return newArray;
+			Type[] copy = new Type[array.Length];
+			Array.Copy(array, copy, array.Length);
+			return copy;
 		}
 
 		internal static T[] ToArray<T, V>(List<V> list, T[] empty) where V : T
@@ -152,62 +149,6 @@ namespace IKVM.Reflection
 			return false;
 		}
 
-		internal static bool ArrayEquals(Type[][] t1, Type[][] t2)
-		{
-			if (t1 == t2)
-			{
-				return true;
-			}
-			if (t1 == null)
-			{
-				return t2.Length == 0;
-			}
-			else if (t2 == null)
-			{
-				return t1.Length == 0;
-			}
-			if (t1.Length == t2.Length)
-			{
-				for (int i = 0; i < t1.Length; i++)
-				{
-					if (!ArrayEquals(t1[i], t2[i]))
-					{
-						return false;
-					}
-				}
-				return true;
-			}
-			return false;
-		}
-
-		internal static bool ArrayEquals(Type[][][] t1, Type[][][] t2)
-		{
-			if (t1 == t2)
-			{
-				return true;
-			}
-			if (t1 == null)
-			{
-				return t2.Length == 0;
-			}
-			else if (t2 == null)
-			{
-				return t1.Length == 0;
-			}
-			if (t1.Length == t2.Length)
-			{
-				for (int i = 0; i < t1.Length; i++)
-				{
-					if (!ArrayEquals(t1[i], t2[i]))
-					{
-						return false;
-					}
-				}
-				return true;
-			}
-			return false;
-		}
-
 		internal static bool TypeEquals(Type t1, Type t2)
 		{
 			if (t1 == t2)
@@ -239,31 +180,48 @@ namespace IKVM.Reflection
 			return h;
 		}
 
-		internal static int GetHashCode(Type[][] types)
+		internal static bool ArrayEquals(CustomModifiers[] m1, CustomModifiers[] m2)
 		{
-			int h = 0;
-			if (types != null)
+			if (m1 == null || m2 == null)
 			{
-				foreach (Type[] array in types)
+				return m1 == m2;
+			}
+			if (m1.Length != m2.Length)
+			{
+				return false;
+			}
+			for (int i = 0; i < m1.Length; i++)
+			{
+				if (!m1[i].Equals(m2[i]))
 				{
-					h ^= GetHashCode(array);
+					return false;
 				}
 			}
-			return h;
+			return true;
 		}
 
-		internal static int GetHashCode(Type[][][] types)
+		internal static int GetHashCode(CustomModifiers[] mods)
 		{
 			int h = 0;
-			if (types != null)
+			if (mods != null)
 			{
-				foreach (Type[][] array in types)
+				foreach (CustomModifiers mod in mods)
 				{
-					h ^= GetHashCode(array);
+					h ^= mod.GetHashCode();
 				}
 			}
 			return h;
 		}
+
+		internal static T NullSafeElementAt<T>(T[] array, int index)
+		{
+			return array == null ? default(T) : array[index];
+		}
+
+		internal static int NullSafeLength<T>(T[] array)
+		{
+			return array == null ? 0 : array.Length;
+		}
 	}
 
 	[System.Runtime.InteropServices.StructLayout(System.Runtime.InteropServices.LayoutKind.Explicit)]
diff --git a/mcs/class/IKVM.Reflection/Writer/ByteBuffer.cs b/mcs/class/IKVM.Reflection/Writer/ByteBuffer.cs
index b7e103f..f8e15f8 100644
--- a/mcs/class/IKVM.Reflection/Writer/ByteBuffer.cs
+++ b/mcs/class/IKVM.Reflection/Writer/ByteBuffer.cs
@@ -302,10 +302,5 @@ namespace IKVM.Reflection.Writer
 		{
 			return IKVM.Reflection.Reader.ByteReader.FromBlob(buffer, offset);
 		}
-
-		internal void Patch(int offset, byte b)
-		{
-			buffer[offset] = b;
-		}
 	}
 }
diff --git a/mcs/class/IKVM.Reflection/Writer/Heaps.cs b/mcs/class/IKVM.Reflection/Writer/Heaps.cs
index b8764d2..78a5d60 100644
--- a/mcs/class/IKVM.Reflection/Writer/Heaps.cs
+++ b/mcs/class/IKVM.Reflection/Writer/Heaps.cs
@@ -145,7 +145,7 @@ namespace IKVM.Reflection.Writer
 			mw.Write((byte)0);
 		}
 
-		private int GetLength(MetadataWriter mw)
+		private static int GetLength(MetadataWriter mw)
 		{
 			int len = 4 + 4 + 8 + 8;
 			foreach (Table table in mw.ModuleBuilder.GetTables())
@@ -186,6 +186,18 @@ namespace IKVM.Reflection.Writer
 			return offset;
 		}
 
+		internal string Find(int index)
+		{
+			foreach (KeyValuePair<string, int> kv in strings)
+			{
+				if (kv.Value == index)
+				{
+					return kv.Key;
+				}
+			}
+			return null;
+		}
+
 		protected override int GetLength()
 		{
 			return nextOffset;
@@ -318,11 +330,12 @@ namespace IKVM.Reflection.Writer
 		internal int Add(ByteBuffer bb)
 		{
 			Debug.Assert(!frozen);
-			if (bb.Length == 0)
+			int bblen = bb.Length;
+			if (bblen == 0)
 			{
 				return 0;
 			}
-			int lenlen = MetadataWriter.GetCompressedIntLength(bb.Length);
+			int lenlen = MetadataWriter.GetCompressedIntLength(bblen);
 			int hash = bb.Hash();
 			int index = (hash & 0x7FFFFFFF) % map.Length;
 			Key[] keys = map;
@@ -330,8 +343,8 @@ namespace IKVM.Reflection.Writer
 			while (keys[index].offset != 0)
 			{
 				if (keys[index].hash == hash
-					&& keys[index].len == bb.Length
-					&& buf.Match(keys[index].offset + lenlen, bb, 0, bb.Length))
+					&& keys[index].len == bblen
+					&& buf.Match(keys[index].offset + lenlen, bb, 0, bblen))
 				{
 					return keys[index].offset;
 				}
@@ -351,9 +364,9 @@ namespace IKVM.Reflection.Writer
 				index++;
 			}
 			int offset = buf.Position;
-			buf.WriteCompressedInt(bb.Length);
+			buf.WriteCompressedInt(bblen);
 			buf.Write(bb);
-			keys[index].len = bb.Length;
+			keys[index].len = bblen;
 			keys[index].hash = hash;
 			keys[index].offset = offset;
 			return offset;
diff --git a/mcs/class/IKVM.Reflection/Writer/MetadataWriter.cs b/mcs/class/IKVM.Reflection/Writer/MetadataWriter.cs
index 1f17b38..edb0dda 100644
--- a/mcs/class/IKVM.Reflection/Writer/MetadataWriter.cs
+++ b/mcs/class/IKVM.Reflection/Writer/MetadataWriter.cs
@@ -75,9 +75,8 @@ namespace IKVM.Reflection.Writer
 
 		internal void Write(short value)
 		{
-			buffer[0] = (byte)value;
-			buffer[1] = (byte)(value >> 8);
-			stream.Write(buffer, 0, 2);
+			stream.WriteByte((byte)value);
+			stream.WriteByte((byte)(value >> 8));
 		}
 
 		internal void Write(uint value)
diff --git a/mcs/class/IKVM.Reflection/Writer/ModuleWriter.cs b/mcs/class/IKVM.Reflection/Writer/ModuleWriter.cs
index c4208f8..ff82c9d 100644
--- a/mcs/class/IKVM.Reflection/Writer/ModuleWriter.cs
+++ b/mcs/class/IKVM.Reflection/Writer/ModuleWriter.cs
@@ -1,5 +1,5 @@
 /*
-  Copyright (C) 2008 Jeroen Frijters
+  Copyright (C) 2008-2011 Jeroen Frijters
 
   This software is provided 'as-is', without any express or implied
   warranty.  In no event will the authors be held liable for any damages
@@ -38,6 +38,47 @@ namespace IKVM.Reflection.Writer
 			PEFileKinds fileKind, PortableExecutableKinds portableExecutableKind, ImageFileMachine imageFileMachine,
 			ResourceSection resources, int entryPointToken)
 		{
+			WriteModule(keyPair, publicKey, moduleBuilder, fileKind, portableExecutableKind, imageFileMachine, resources, entryPointToken, null);
+		}
+
+		internal static void WriteModule(StrongNameKeyPair keyPair, byte[] publicKey, ModuleBuilder moduleBuilder,
+			PEFileKinds fileKind, PortableExecutableKinds portableExecutableKind, ImageFileMachine imageFileMachine,
+			ResourceSection resources, int entryPointToken, Stream stream)
+		{
+			if (stream == null)
+			{
+				string fileName = moduleBuilder.FullyQualifiedName;
+				bool mono = System.Type.GetType("Mono.Runtime") != null;
+				if (mono)
+				{
+					try
+					{
+						// Mono mmaps the file, so unlink the previous version since it may be in use
+						File.Delete(fileName);
+					}
+					catch { }
+				}
+				using (FileStream fs = new FileStream(fileName, FileMode.Create))
+				{
+					WriteModuleImpl(keyPair, publicKey, moduleBuilder, fileKind, portableExecutableKind, imageFileMachine, resources, entryPointToken, fs);
+				}
+				// if we're running on Mono, mark the module as executable by using a Mono private API extension
+				if (mono)
+				{
+					File.SetAttributes(fileName, (FileAttributes)(unchecked((int)0x80000000)));
+				}
+			}
+			else
+			{
+				WriteModuleImpl(keyPair, publicKey, moduleBuilder, fileKind, portableExecutableKind, imageFileMachine, resources, entryPointToken, stream);
+			}
+		}
+
+		private static void WriteModuleImpl(StrongNameKeyPair keyPair, byte[] publicKey, ModuleBuilder moduleBuilder,
+			PEFileKinds fileKind, PortableExecutableKinds portableExecutableKind, ImageFileMachine imageFileMachine,
+			ResourceSection resources, int entryPointToken, Stream stream)
+		{
+			moduleBuilder.ApplyUnmanagedExports(imageFileMachine);
 			moduleBuilder.FixupMethodBodyTokens();
 
 			moduleBuilder.ModuleTable.Add(0, moduleBuilder.Strings.Add(moduleBuilder.moduleName), moduleBuilder.Guids.Add(moduleBuilder.ModuleVersionId), 0, 0);
@@ -53,243 +94,259 @@ namespace IKVM.Reflection.Writer
 				resources.Finish();
 			}
 
-			using (FileStream fs = new FileStream(moduleBuilder.FullyQualifiedName, FileMode.Create))
+			PEWriter writer = new PEWriter(stream);
+			switch (imageFileMachine)
 			{
-				PEWriter writer = new PEWriter(fs);
-				switch (imageFileMachine)
-				{
-					case ImageFileMachine.I386:
-						writer.Headers.FileHeader.Machine = IMAGE_FILE_HEADER.IMAGE_FILE_MACHINE_I386;
-						writer.Headers.FileHeader.Characteristics |= IMAGE_FILE_HEADER.IMAGE_FILE_32BIT_MACHINE;
-						break;
-					case ImageFileMachine.AMD64:
-						writer.Headers.FileHeader.Machine = IMAGE_FILE_HEADER.IMAGE_FILE_MACHINE_AMD64;
-						writer.Headers.FileHeader.Characteristics |= IMAGE_FILE_HEADER.IMAGE_FILE_LARGE_ADDRESS_AWARE;
-						writer.Headers.FileHeader.SizeOfOptionalHeader = 0xF0;
-						writer.Headers.OptionalHeader.Magic = IMAGE_OPTIONAL_HEADER.IMAGE_NT_OPTIONAL_HDR64_MAGIC;
-						writer.Headers.OptionalHeader.SizeOfStackReserve = 0x400000;
-						writer.Headers.OptionalHeader.SizeOfStackCommit = 0x4000;
-						writer.Headers.OptionalHeader.SizeOfHeapCommit = 0x2000;
-						break;
-					case ImageFileMachine.IA64:
-						writer.Headers.FileHeader.Machine = IMAGE_FILE_HEADER.IMAGE_FILE_MACHINE_IA64;
-						writer.Headers.FileHeader.Characteristics |= IMAGE_FILE_HEADER.IMAGE_FILE_LARGE_ADDRESS_AWARE;
-						writer.Headers.FileHeader.SizeOfOptionalHeader = 0xF0;
-						writer.Headers.OptionalHeader.Magic = IMAGE_OPTIONAL_HEADER.IMAGE_NT_OPTIONAL_HDR64_MAGIC;
-						writer.Headers.OptionalHeader.SizeOfStackReserve = 0x400000;
-						writer.Headers.OptionalHeader.SizeOfStackCommit = 0x4000;
-						writer.Headers.OptionalHeader.SizeOfHeapCommit = 0x2000;
-						break;
-					default:
-						throw new ArgumentOutOfRangeException("imageFileMachine");
-				}
-				if (fileKind == PEFileKinds.Dll)
-				{
-					writer.Headers.FileHeader.Characteristics |= IMAGE_FILE_HEADER.IMAGE_FILE_DLL;
-				}
-
-				switch (fileKind)
-				{
-					case PEFileKinds.WindowApplication:
-						writer.Headers.OptionalHeader.Subsystem = IMAGE_OPTIONAL_HEADER.IMAGE_SUBSYSTEM_WINDOWS_GUI;
-						break;
-					default:
-						writer.Headers.OptionalHeader.Subsystem = IMAGE_OPTIONAL_HEADER.IMAGE_SUBSYSTEM_WINDOWS_CUI;
-						break;
-				}
-				writer.Headers.OptionalHeader.DllCharacteristics =
-					IMAGE_OPTIONAL_HEADER.IMAGE_DLLCHARACTERISTICS_DYNAMIC_BASE |
-					IMAGE_OPTIONAL_HEADER.IMAGE_DLLCHARACTERISTICS_NO_SEH |
-					IMAGE_OPTIONAL_HEADER.IMAGE_DLLCHARACTERISTICS_NX_COMPAT |
-					IMAGE_OPTIONAL_HEADER.IMAGE_DLLCHARACTERISTICS_TERMINAL_SERVER_AWARE;
-
-				CliHeader cliHeader = new CliHeader();
-				cliHeader.Cb = 0x48;
-				cliHeader.MajorRuntimeVersion = 2;
-				cliHeader.MinorRuntimeVersion = moduleBuilder.MDStreamVersion < 0x20000 ? (ushort)0 : (ushort)5;
-				if ((portableExecutableKind & PortableExecutableKinds.ILOnly) != 0)
-				{
-					cliHeader.Flags |= CliHeader.COMIMAGE_FLAGS_ILONLY;
-				}
-				if ((portableExecutableKind & PortableExecutableKinds.Required32Bit) != 0)
-				{
-					cliHeader.Flags |= CliHeader.COMIMAGE_FLAGS_32BITREQUIRED;
-				}
-				if (keyPair != null)
-				{
-					cliHeader.Flags |= CliHeader.COMIMAGE_FLAGS_STRONGNAMESIGNED;
-				}
-				if (moduleBuilder.IsPseudoToken(entryPointToken))
-				{
-					entryPointToken = moduleBuilder.ResolvePseudoToken(entryPointToken);
-				}
-				cliHeader.EntryPointToken = (uint)entryPointToken;
+				case ImageFileMachine.I386:
+					writer.Headers.FileHeader.Machine = IMAGE_FILE_HEADER.IMAGE_FILE_MACHINE_I386;
+					writer.Headers.FileHeader.Characteristics |= IMAGE_FILE_HEADER.IMAGE_FILE_32BIT_MACHINE;
+					writer.Headers.OptionalHeader.SizeOfStackReserve = moduleBuilder.GetStackReserve(0x100000);
+					break;
+				case ImageFileMachine.ARM:
+					writer.Headers.FileHeader.Machine = IMAGE_FILE_HEADER.IMAGE_FILE_MACHINE_ARM;
+					writer.Headers.FileHeader.Characteristics |= IMAGE_FILE_HEADER.IMAGE_FILE_32BIT_MACHINE;
+					writer.Headers.OptionalHeader.SizeOfStackReserve = moduleBuilder.GetStackReserve(0x100000);
+					break;
+				case ImageFileMachine.AMD64:
+					writer.Headers.FileHeader.Machine = IMAGE_FILE_HEADER.IMAGE_FILE_MACHINE_AMD64;
+					writer.Headers.FileHeader.Characteristics |= IMAGE_FILE_HEADER.IMAGE_FILE_LARGE_ADDRESS_AWARE;
+					writer.Headers.FileHeader.SizeOfOptionalHeader = 0xF0;
+					writer.Headers.OptionalHeader.Magic = IMAGE_OPTIONAL_HEADER.IMAGE_NT_OPTIONAL_HDR64_MAGIC;
+					writer.Headers.OptionalHeader.SizeOfStackReserve = moduleBuilder.GetStackReserve(0x400000);
+					writer.Headers.OptionalHeader.SizeOfStackCommit = 0x4000;
+					writer.Headers.OptionalHeader.SizeOfHeapCommit = 0x2000;
+					break;
+				case ImageFileMachine.IA64:
+					writer.Headers.FileHeader.Machine = IMAGE_FILE_HEADER.IMAGE_FILE_MACHINE_IA64;
+					writer.Headers.FileHeader.Characteristics |= IMAGE_FILE_HEADER.IMAGE_FILE_LARGE_ADDRESS_AWARE;
+					writer.Headers.FileHeader.SizeOfOptionalHeader = 0xF0;
+					writer.Headers.OptionalHeader.Magic = IMAGE_OPTIONAL_HEADER.IMAGE_NT_OPTIONAL_HDR64_MAGIC;
+					writer.Headers.OptionalHeader.SizeOfStackReserve = moduleBuilder.GetStackReserve(0x400000);
+					writer.Headers.OptionalHeader.SizeOfStackCommit = 0x4000;
+					writer.Headers.OptionalHeader.SizeOfHeapCommit = 0x2000;
+					break;
+				default:
+					throw new ArgumentOutOfRangeException("imageFileMachine");
+			}
+			if (fileKind == PEFileKinds.Dll)
+			{
+				writer.Headers.FileHeader.Characteristics |= IMAGE_FILE_HEADER.IMAGE_FILE_DLL;
+			}
 
-				moduleBuilder.Strings.Freeze();
-				moduleBuilder.UserStrings.Freeze();
-				moduleBuilder.Guids.Freeze();
-				moduleBuilder.Blobs.Freeze();
-				MetadataWriter mw = new MetadataWriter(moduleBuilder, fs);
-				moduleBuilder.Tables.Freeze(mw);
-				TextSection code = new TextSection(writer, cliHeader, moduleBuilder, ComputeStrongNameSignatureLength(publicKey));
+			switch (fileKind)
+			{
+				case PEFileKinds.WindowApplication:
+					writer.Headers.OptionalHeader.Subsystem = IMAGE_OPTIONAL_HEADER.IMAGE_SUBSYSTEM_WINDOWS_GUI;
+					break;
+				default:
+					writer.Headers.OptionalHeader.Subsystem = IMAGE_OPTIONAL_HEADER.IMAGE_SUBSYSTEM_WINDOWS_CUI;
+					break;
+			}
+			writer.Headers.OptionalHeader.DllCharacteristics =
+				IMAGE_OPTIONAL_HEADER.IMAGE_DLLCHARACTERISTICS_DYNAMIC_BASE |
+				IMAGE_OPTIONAL_HEADER.IMAGE_DLLCHARACTERISTICS_NO_SEH |
+				IMAGE_OPTIONAL_HEADER.IMAGE_DLLCHARACTERISTICS_NX_COMPAT |
+				IMAGE_OPTIONAL_HEADER.IMAGE_DLLCHARACTERISTICS_TERMINAL_SERVER_AWARE;
+
+			CliHeader cliHeader = new CliHeader();
+			cliHeader.Cb = 0x48;
+			cliHeader.MajorRuntimeVersion = 2;
+			cliHeader.MinorRuntimeVersion = moduleBuilder.MDStreamVersion < 0x20000 ? (ushort)0 : (ushort)5;
+			if ((portableExecutableKind & PortableExecutableKinds.ILOnly) != 0)
+			{
+				cliHeader.Flags |= CliHeader.COMIMAGE_FLAGS_ILONLY;
+			}
+			if ((portableExecutableKind & PortableExecutableKinds.Required32Bit) != 0)
+			{
+				cliHeader.Flags |= CliHeader.COMIMAGE_FLAGS_32BITREQUIRED;
+			}
+			if ((portableExecutableKind & PortableExecutableKinds.Preferred32Bit) != 0)
+			{
+				cliHeader.Flags |= CliHeader.COMIMAGE_FLAGS_32BITREQUIRED | CliHeader.COMIMAGE_FLAGS_32BITPREFERRED;
+			}
+			if (keyPair != null)
+			{
+				cliHeader.Flags |= CliHeader.COMIMAGE_FLAGS_STRONGNAMESIGNED;
+			}
+			if (moduleBuilder.IsPseudoToken(entryPointToken))
+			{
+				entryPointToken = moduleBuilder.ResolvePseudoToken(entryPointToken);
+			}
+			cliHeader.EntryPointToken = (uint)entryPointToken;
+
+			moduleBuilder.Strings.Freeze();
+			moduleBuilder.UserStrings.Freeze();
+			moduleBuilder.Guids.Freeze();
+			moduleBuilder.Blobs.Freeze();
+			MetadataWriter mw = new MetadataWriter(moduleBuilder, stream);
+			moduleBuilder.Tables.Freeze(mw);
+			TextSection code = new TextSection(writer, cliHeader, moduleBuilder, ComputeStrongNameSignatureLength(publicKey));
+
+			// Export Directory
+			if (code.ExportDirectoryLength != 0)
+			{
+				writer.Headers.OptionalHeader.DataDirectory[0].VirtualAddress = code.ExportDirectoryRVA;
+				writer.Headers.OptionalHeader.DataDirectory[0].Size = code.ExportDirectoryLength;
+			}
 
-				// Import Directory
+			// Import Directory
+			if (code.ImportDirectoryLength != 0)
+			{
 				writer.Headers.OptionalHeader.DataDirectory[1].VirtualAddress = code.ImportDirectoryRVA;
 				writer.Headers.OptionalHeader.DataDirectory[1].Size = code.ImportDirectoryLength;
+			}
 
-				// Import Address Table Directory
+			// Import Address Table Directory
+			if (code.ImportAddressTableLength != 0)
+			{
 				writer.Headers.OptionalHeader.DataDirectory[12].VirtualAddress = code.ImportAddressTableRVA;
 				writer.Headers.OptionalHeader.DataDirectory[12].Size = code.ImportAddressTableLength;
+			}
 
-				// COM Descriptor Directory
-				writer.Headers.OptionalHeader.DataDirectory[14].VirtualAddress = code.ComDescriptorRVA;
-				writer.Headers.OptionalHeader.DataDirectory[14].Size = code.ComDescriptorLength;
+			// COM Descriptor Directory
+			writer.Headers.OptionalHeader.DataDirectory[14].VirtualAddress = code.ComDescriptorRVA;
+			writer.Headers.OptionalHeader.DataDirectory[14].Size = code.ComDescriptorLength;
 
-				// Debug Directory
-				if (code.DebugDirectoryLength != 0)
-				{
-					writer.Headers.OptionalHeader.DataDirectory[6].VirtualAddress = code.DebugDirectoryRVA;
-					writer.Headers.OptionalHeader.DataDirectory[6].Size = code.DebugDirectoryLength;
-				}
+			// Debug Directory
+			if (code.DebugDirectoryLength != 0)
+			{
+				writer.Headers.OptionalHeader.DataDirectory[6].VirtualAddress = code.DebugDirectoryRVA;
+				writer.Headers.OptionalHeader.DataDirectory[6].Size = code.DebugDirectoryLength;
+			}
 
-				writer.Headers.FileHeader.NumberOfSections = 2;
+			// we need to start by computing the number of sections, because code.PointerToRawData depends on that
+			writer.Headers.FileHeader.NumberOfSections = 1;
 
-				if (moduleBuilder.initializedData.Length != 0)
-				{
-					writer.Headers.FileHeader.NumberOfSections++;
-				}
+			if (moduleBuilder.initializedData.Length != 0)
+			{
+				// .sdata
+				writer.Headers.FileHeader.NumberOfSections++;
+			}
 
-				if (resources != null && resources.Length != 0)
-				{
-					writer.Headers.FileHeader.NumberOfSections++;
-				}
+			if (resources != null)
+			{
+				// .rsrc
+				writer.Headers.FileHeader.NumberOfSections++;
+			}
 
-				SectionHeader text = new SectionHeader();
-				text.Name = ".text";
-				text.VirtualAddress = code.BaseRVA;
-				text.VirtualSize = (uint)code.Length;
-				text.PointerToRawData = code.PointerToRawData;
-				text.SizeOfRawData = writer.ToFileAlignment((uint)code.Length);
-				text.Characteristics = SectionHeader.IMAGE_SCN_CNT_CODE | SectionHeader.IMAGE_SCN_MEM_EXECUTE | SectionHeader.IMAGE_SCN_MEM_READ;
-
-				SectionHeader sdata = new SectionHeader();
-				sdata.Name = ".sdata";
-				sdata.VirtualAddress = text.VirtualAddress + writer.ToSectionAlignment(text.VirtualSize);
-				sdata.VirtualSize = (uint)moduleBuilder.initializedData.Length;
-				sdata.PointerToRawData = text.PointerToRawData + text.SizeOfRawData;
-				sdata.SizeOfRawData = writer.ToFileAlignment((uint)moduleBuilder.initializedData.Length);
-				sdata.Characteristics = SectionHeader.IMAGE_SCN_CNT_INITIALIZED_DATA | SectionHeader.IMAGE_SCN_MEM_READ | SectionHeader.IMAGE_SCN_MEM_WRITE;
-
-				SectionHeader rsrc = new SectionHeader();
-				rsrc.Name = ".rsrc";
-				rsrc.VirtualAddress = sdata.VirtualAddress + writer.ToSectionAlignment(sdata.VirtualSize);
-				rsrc.PointerToRawData = sdata.PointerToRawData + sdata.SizeOfRawData;
-				rsrc.VirtualSize = resources == null ? 0 : (uint)resources.Length;
-				rsrc.SizeOfRawData = writer.ToFileAlignment(rsrc.VirtualSize);
-				rsrc.Characteristics = SectionHeader.IMAGE_SCN_MEM_READ | SectionHeader.IMAGE_SCN_CNT_INITIALIZED_DATA;
-
-				if (rsrc.SizeOfRawData != 0)
-				{
-					// Resource Directory
-					writer.Headers.OptionalHeader.DataDirectory[2].VirtualAddress = rsrc.VirtualAddress;
-					writer.Headers.OptionalHeader.DataDirectory[2].Size = rsrc.VirtualSize;
-				}
+			if (imageFileMachine != ImageFileMachine.ARM)
+			{
+				// .reloc
+				writer.Headers.FileHeader.NumberOfSections++;
+			}
 
-				SectionHeader reloc = new SectionHeader();
-				reloc.Name = ".reloc";
-				reloc.VirtualAddress = rsrc.VirtualAddress + writer.ToSectionAlignment(rsrc.VirtualSize);
-				reloc.VirtualSize = 12;
-				reloc.PointerToRawData = rsrc.PointerToRawData + rsrc.SizeOfRawData;
-				reloc.SizeOfRawData = writer.ToFileAlignment(reloc.VirtualSize);
-				reloc.Characteristics = SectionHeader.IMAGE_SCN_MEM_READ | SectionHeader.IMAGE_SCN_CNT_INITIALIZED_DATA | SectionHeader.IMAGE_SCN_MEM_DISCARDABLE;
+			SectionHeader text = new SectionHeader();
+			text.Name = ".text";
+			text.VirtualAddress = code.BaseRVA;
+			text.VirtualSize = (uint)code.Length;
+			text.PointerToRawData = code.PointerToRawData;
+			text.SizeOfRawData = writer.ToFileAlignment((uint)code.Length);
+			text.Characteristics = SectionHeader.IMAGE_SCN_CNT_CODE | SectionHeader.IMAGE_SCN_MEM_EXECUTE | SectionHeader.IMAGE_SCN_MEM_READ;
+
+			SectionHeader sdata = new SectionHeader();
+			sdata.Name = ".sdata";
+			sdata.VirtualAddress = text.VirtualAddress + writer.ToSectionAlignment(text.VirtualSize);
+			sdata.VirtualSize = (uint)moduleBuilder.initializedData.Length;
+			sdata.PointerToRawData = text.PointerToRawData + text.SizeOfRawData;
+			sdata.SizeOfRawData = writer.ToFileAlignment((uint)moduleBuilder.initializedData.Length);
+			sdata.Characteristics = SectionHeader.IMAGE_SCN_CNT_INITIALIZED_DATA | SectionHeader.IMAGE_SCN_MEM_READ | SectionHeader.IMAGE_SCN_MEM_WRITE;
+
+			SectionHeader rsrc = new SectionHeader();
+			rsrc.Name = ".rsrc";
+			rsrc.VirtualAddress = sdata.VirtualAddress + writer.ToSectionAlignment(sdata.VirtualSize);
+			rsrc.PointerToRawData = sdata.PointerToRawData + sdata.SizeOfRawData;
+			rsrc.VirtualSize = resources == null ? 0 : (uint)resources.Length;
+			rsrc.SizeOfRawData = writer.ToFileAlignment(rsrc.VirtualSize);
+			rsrc.Characteristics = SectionHeader.IMAGE_SCN_MEM_READ | SectionHeader.IMAGE_SCN_CNT_INITIALIZED_DATA;
+
+			if (rsrc.SizeOfRawData != 0)
+			{
+				// Resource Directory
+				writer.Headers.OptionalHeader.DataDirectory[2].VirtualAddress = rsrc.VirtualAddress;
+				writer.Headers.OptionalHeader.DataDirectory[2].Size = rsrc.VirtualSize;
+			}
+
+			SectionHeader reloc = new SectionHeader();
+			reloc.Name = ".reloc";
+			reloc.VirtualAddress = rsrc.VirtualAddress + writer.ToSectionAlignment(rsrc.VirtualSize);
+			if (imageFileMachine != ImageFileMachine.ARM)
+			{
+				reloc.VirtualSize = ((uint)moduleBuilder.unmanagedExports.Count + 1) * 12;
+			}
+			reloc.PointerToRawData = rsrc.PointerToRawData + rsrc.SizeOfRawData;
+			reloc.SizeOfRawData = writer.ToFileAlignment(reloc.VirtualSize);
+			reloc.Characteristics = SectionHeader.IMAGE_SCN_MEM_READ | SectionHeader.IMAGE_SCN_CNT_INITIALIZED_DATA | SectionHeader.IMAGE_SCN_MEM_DISCARDABLE;
 
+			if (reloc.SizeOfRawData != 0)
+			{
 				// Base Relocation Directory
 				writer.Headers.OptionalHeader.DataDirectory[5].VirtualAddress = reloc.VirtualAddress;
 				writer.Headers.OptionalHeader.DataDirectory[5].Size = reloc.VirtualSize;
+			}
 
-				writer.Headers.OptionalHeader.SizeOfCode = text.SizeOfRawData;
-				writer.Headers.OptionalHeader.SizeOfInitializedData = sdata.SizeOfRawData + rsrc.SizeOfRawData + reloc.SizeOfRawData;
-				writer.Headers.OptionalHeader.SizeOfUninitializedData = 0;
-				writer.Headers.OptionalHeader.SizeOfImage = reloc.VirtualAddress + writer.ToSectionAlignment(reloc.VirtualSize);
-				writer.Headers.OptionalHeader.SizeOfHeaders = text.PointerToRawData;
-				writer.Headers.OptionalHeader.BaseOfCode = code.BaseRVA;
-				writer.Headers.OptionalHeader.BaseOfData = sdata.VirtualAddress;
-				writer.Headers.OptionalHeader.ImageBase = (ulong)moduleBuilder.__ImageBase;
+			writer.Headers.OptionalHeader.SizeOfCode = text.SizeOfRawData;
+			writer.Headers.OptionalHeader.SizeOfInitializedData = sdata.SizeOfRawData + rsrc.SizeOfRawData + reloc.SizeOfRawData;
+			writer.Headers.OptionalHeader.SizeOfUninitializedData = 0;
+			writer.Headers.OptionalHeader.SizeOfImage = reloc.VirtualAddress + writer.ToSectionAlignment(reloc.VirtualSize);
+			writer.Headers.OptionalHeader.SizeOfHeaders = text.PointerToRawData;
+			writer.Headers.OptionalHeader.BaseOfCode = code.BaseRVA;
+			writer.Headers.OptionalHeader.BaseOfData = sdata.VirtualAddress;
+			writer.Headers.OptionalHeader.ImageBase = (ulong)moduleBuilder.__ImageBase;
 
-				if (imageFileMachine == ImageFileMachine.IA64)
-				{
-					// apparently for IA64 AddressOfEntryPoint points to the address of the entry point
-					// (i.e. there is an additional layer of indirection), so we add the offset to the pointer
-					writer.Headers.OptionalHeader.AddressOfEntryPoint = code.StartupStubRVA + 0x20;
-				}
-				else
-				{
-					writer.Headers.OptionalHeader.AddressOfEntryPoint = code.StartupStubRVA;
-				}
+			if (imageFileMachine == ImageFileMachine.IA64)
+			{
+				// apparently for IA64 AddressOfEntryPoint points to the address of the entry point
+				// (i.e. there is an additional layer of indirection), so we add the offset to the pointer
+				writer.Headers.OptionalHeader.AddressOfEntryPoint = code.StartupStubRVA + 0x20;
+			}
+			else if (imageFileMachine != ImageFileMachine.ARM)
+			{
+				writer.Headers.OptionalHeader.AddressOfEntryPoint = code.StartupStubRVA;
+			}
 
-				writer.WritePEHeaders();
-				writer.WriteSectionHeader(text);
-				if (sdata.SizeOfRawData != 0)
-				{
-					writer.WriteSectionHeader(sdata);
-				}
-				if (rsrc.SizeOfRawData != 0)
-				{
-					writer.WriteSectionHeader(rsrc);
-				}
+			writer.WritePEHeaders();
+			writer.WriteSectionHeader(text);
+			if (sdata.SizeOfRawData != 0)
+			{
+				writer.WriteSectionHeader(sdata);
+			}
+			if (rsrc.SizeOfRawData != 0)
+			{
+				writer.WriteSectionHeader(rsrc);
+			}
+			if (reloc.SizeOfRawData != 0)
+			{
 				writer.WriteSectionHeader(reloc);
+			}
 
-				fs.Seek(text.PointerToRawData, SeekOrigin.Begin);
-				code.Write(mw, (int)sdata.VirtualAddress);
+			stream.Seek(text.PointerToRawData, SeekOrigin.Begin);
+			code.Write(mw, sdata.VirtualAddress);
 
-				fs.Seek(sdata.PointerToRawData, SeekOrigin.Begin);
+			if (sdata.SizeOfRawData != 0)
+			{
+				stream.Seek(sdata.PointerToRawData, SeekOrigin.Begin);
 				mw.Write(moduleBuilder.initializedData);
+			}
 
-				if (rsrc.SizeOfRawData != 0)
-				{
-					fs.Seek(rsrc.PointerToRawData, SeekOrigin.Begin);
-					resources.Write(mw, rsrc.VirtualAddress);
-				}
+			if (rsrc.SizeOfRawData != 0)
+			{
+				stream.Seek(rsrc.PointerToRawData, SeekOrigin.Begin);
+				resources.Write(mw, rsrc.VirtualAddress);
+			}
 
-				fs.Seek(reloc.PointerToRawData, SeekOrigin.Begin);
-				// .reloc section
-				uint relocAddress = code.StartupStubRVA;
-				switch (imageFileMachine)
-				{
-					case ImageFileMachine.I386:
-					case ImageFileMachine.AMD64:
-						relocAddress += 2;
-						break;
-					case ImageFileMachine.IA64:
-						relocAddress += 0x20;
-						break;
-				}
-				uint pageRVA = relocAddress & ~0xFFFU;
-				mw.Write(pageRVA);	// PageRVA
-				mw.Write(0x000C);	// Block Size
-				if (imageFileMachine == ImageFileMachine.I386)
-				{
-					mw.Write(0x3000 + relocAddress - pageRVA);				// Type / Offset
-				}
-				else if (imageFileMachine == ImageFileMachine.AMD64)
-				{
-					mw.Write(0xA000 + relocAddress - pageRVA);				// Type / Offset
-				}
-				else if (imageFileMachine == ImageFileMachine.IA64)
-				{
-					// on IA64 the StartupStubRVA is 16 byte aligned, so these two addresses won't cross a page boundary
-					mw.Write((short)(0xA000 + relocAddress - pageRVA));		// Type / Offset
-					mw.Write((short)(0xA000 + relocAddress - pageRVA + 8));	// Type / Offset
-				}
+			if (reloc.SizeOfRawData != 0)
+			{
+				stream.Seek(reloc.PointerToRawData, SeekOrigin.Begin);
+				code.WriteRelocations(mw);
+			}
 
-				// file alignment
-				mw.Write(new byte[writer.Headers.OptionalHeader.FileAlignment - reloc.VirtualSize]);
+			// file alignment
+			stream.SetLength(reloc.PointerToRawData + reloc.SizeOfRawData);
 
-				// do the strong naming
-				if (keyPair != null)
-				{
-					StrongName(fs, keyPair, writer.HeaderSize, text.PointerToRawData, code.StrongNameSignatureRVA - text.VirtualAddress + text.PointerToRawData, code.StrongNameSignatureLength);
-				}
+			// do the strong naming
+			if (keyPair != null)
+			{
+				StrongName(stream, keyPair, writer.HeaderSize, text.PointerToRawData, code.StrongNameSignatureRVA - text.VirtualAddress + text.PointerToRawData, code.StrongNameSignatureLength);
 			}
 
 			if (moduleBuilder.symbolWriter != null)
@@ -318,18 +375,18 @@ namespace IKVM.Reflection.Writer
 			}
 		}
 
-		private static void StrongName(FileStream fs, StrongNameKeyPair keyPair, uint headerLength, uint textSectionFileOffset, uint strongNameSignatureFileOffset, uint strongNameSignatureLength)
+		private static void StrongName(Stream stream, StrongNameKeyPair keyPair, uint headerLength, uint textSectionFileOffset, uint strongNameSignatureFileOffset, uint strongNameSignatureLength)
 		{
 			SHA1Managed hash = new SHA1Managed();
 			using (CryptoStream cs = new CryptoStream(Stream.Null, hash, CryptoStreamMode.Write))
 			{
-				fs.Seek(0, SeekOrigin.Begin);
+				stream.Seek(0, SeekOrigin.Begin);
 				byte[] buf = new byte[8192];
-				HashChunk(fs, cs, buf, (int)headerLength);
-				fs.Seek(textSectionFileOffset, SeekOrigin.Begin);
-				HashChunk(fs, cs, buf, (int)(strongNameSignatureFileOffset - textSectionFileOffset));
-				fs.Seek(strongNameSignatureLength, SeekOrigin.Current);
-				HashChunk(fs, cs, buf, (int)(fs.Length - (strongNameSignatureFileOffset + strongNameSignatureLength)));
+				HashChunk(stream, cs, buf, (int)headerLength);
+				stream.Seek(textSectionFileOffset, SeekOrigin.Begin);
+				HashChunk(stream, cs, buf, (int)(strongNameSignatureFileOffset - textSectionFileOffset));
+				stream.Seek(strongNameSignatureLength, SeekOrigin.Current);
+				HashChunk(stream, cs, buf, (int)(stream.Length - (strongNameSignatureFileOffset + strongNameSignatureLength)));
 			}
 			using (RSA rsa = CryptoHack.CreateRSA(keyPair))
 			{
@@ -340,14 +397,14 @@ namespace IKVM.Reflection.Writer
 				{
 					throw new InvalidOperationException("Signature length mismatch");
 				}
-				fs.Seek(strongNameSignatureFileOffset, SeekOrigin.Begin);
-				fs.Write(signature, 0, signature.Length);
+				stream.Seek(strongNameSignatureFileOffset, SeekOrigin.Begin);
+				stream.Write(signature, 0, signature.Length);
 			}
 
 			// compute the PE checksum
-			fs.Seek(0, SeekOrigin.Begin);
-			int count = (int)fs.Length / 4;
-			BinaryReader br = new BinaryReader(fs);
+			stream.Seek(0, SeekOrigin.Begin);
+			int count = (int)stream.Length / 4;
+			BinaryReader br = new BinaryReader(stream);
 			long sum = 0;
 			for (int i = 0; i < count; i++)
 			{
@@ -360,20 +417,20 @@ namespace IKVM.Reflection.Writer
 			{
 				sum = (sum & 0xFFFF) + (sum >> 16);
 			}
-			sum += fs.Length;
+			sum += stream.Length;
 
 			// write the PE checksum, note that it is always at offset 0xD8 in the file
 			ByteBuffer bb = new ByteBuffer(4);
 			bb.Write((int)sum);
-			fs.Seek(0xD8, SeekOrigin.Begin);
-			bb.WriteTo(fs);
+			stream.Seek(0xD8, SeekOrigin.Begin);
+			bb.WriteTo(stream);
 		}
 
-		internal static void HashChunk(FileStream fs, CryptoStream cs, byte[] buf, int length)
+		internal static void HashChunk(Stream stream, CryptoStream cs, byte[] buf, int length)
 		{
 			while (length > 0)
 			{
-				int read = fs.Read(buf, 0, Math.Min(buf.Length, length));
+				int read = stream.Read(buf, 0, Math.Min(buf.Length, length));
 				cs.Write(buf, 0, read);
 				length -= read;
 			}
diff --git a/mcs/class/IKVM.Reflection/Writer/PEWriter.cs b/mcs/class/IKVM.Reflection/Writer/PEWriter.cs
index 3ddd20b..66b7f7c 100644
--- a/mcs/class/IKVM.Reflection/Writer/PEWriter.cs
+++ b/mcs/class/IKVM.Reflection/Writer/PEWriter.cs
@@ -27,6 +27,7 @@ using BYTE = System.Byte;
 using WORD = System.UInt16;
 using DWORD = System.UInt32;
 using ULONGLONG = System.UInt64;
+using IMAGE_DATA_DIRECTORY = IKVM.Reflection.Reader.IMAGE_DATA_DIRECTORY;
 
 namespace IKVM.Reflection.Writer
 {
@@ -135,6 +136,7 @@ namespace IKVM.Reflection.Writer
 	sealed class IMAGE_FILE_HEADER
 	{
 		public const WORD IMAGE_FILE_MACHINE_I386 = 0x014c;
+		public const WORD IMAGE_FILE_MACHINE_ARM = 0x01c4;
 		public const WORD IMAGE_FILE_MACHINE_IA64 = 0x0200;
 		public const WORD IMAGE_FILE_MACHINE_AMD64 = 0x8664;
 
@@ -160,9 +162,11 @@ namespace IKVM.Reflection.Writer
 		public const WORD IMAGE_SUBSYSTEM_WINDOWS_GUI = 2;
 		public const WORD IMAGE_SUBSYSTEM_WINDOWS_CUI = 3;
 
+		public const WORD IMAGE_DLLCHARACTERISTICS_HIGH_ENTROPY_VA = 0x0020;
 		public const WORD IMAGE_DLLCHARACTERISTICS_DYNAMIC_BASE = 0x0040;
 		public const WORD IMAGE_DLLCHARACTERISTICS_NX_COMPAT = 0x0100;
 		public const WORD IMAGE_DLLCHARACTERISTICS_NO_SEH = 0x0400;
+		public const WORD IMAGE_DLLCHARACTERISTICS_APPCONTAINER = 0x1000;
 		public const WORD IMAGE_DLLCHARACTERISTICS_TERMINAL_SERVER_AWARE = 0x8000;
 
 		public WORD Magic = IMAGE_NT_OPTIONAL_HDR32_MAGIC;
@@ -189,7 +193,7 @@ namespace IKVM.Reflection.Writer
 		public DWORD CheckSum = 0;
 		public WORD Subsystem;
 		public WORD DllCharacteristics;
-		public ULONGLONG SizeOfStackReserve = 0x100000;
+		public ULONGLONG SizeOfStackReserve;
 		public ULONGLONG SizeOfStackCommit = 0x1000;
 		public ULONGLONG SizeOfHeapReserve = 0x100000;
 		public ULONGLONG SizeOfHeapCommit = 0x1000;
@@ -272,12 +276,6 @@ namespace IKVM.Reflection.Writer
 		}
 	}
 
-	struct IMAGE_DATA_DIRECTORY
-	{
-		public DWORD VirtualAddress;
-		public DWORD Size;
-	}
-
 	class SectionHeader
 	{
 		public const DWORD IMAGE_SCN_CNT_CODE = 0x00000020;
diff --git a/mcs/class/IKVM.Reflection/Writer/TextSection.cs b/mcs/class/IKVM.Reflection/Writer/TextSection.cs
index 9b4a7ee..2cb91ef 100644
--- a/mcs/class/IKVM.Reflection/Writer/TextSection.cs
+++ b/mcs/class/IKVM.Reflection/Writer/TextSection.cs
@@ -1,5 +1,5 @@
 /*
-  Copyright (C) 2008 Jeroen Frijters
+  Copyright (C) 2008-2011 Jeroen Frijters
 
   This software is provided 'as-is', without any express or implied
   warranty.  In no event will the authors be held liable for any damages
@@ -38,6 +38,7 @@ namespace IKVM.Reflection.Writer
 		private readonly CliHeader cliHeader;
 		private readonly ModuleBuilder moduleBuilder;
 		private readonly uint strongNameSignatureLength;
+		private readonly ExportTables exportTables;
 
 		internal TextSection(PEWriter peWriter, CliHeader cliHeader, ModuleBuilder moduleBuilder, int strongNameSignatureLength)
 		{
@@ -45,6 +46,10 @@ namespace IKVM.Reflection.Writer
 			this.cliHeader = cliHeader;
 			this.moduleBuilder = moduleBuilder;
 			this.strongNameSignatureLength = (uint)strongNameSignatureLength;
+			if (moduleBuilder.unmanagedExports.Count != 0)
+			{
+				this.exportTables = new ExportTables(this);
+			}
 		}
 
 		internal uint PointerToRawData
@@ -66,13 +71,14 @@ namespace IKVM.Reflection.Writer
 		{
 			get
 			{
-				if (peWriter.Headers.FileHeader.Machine == IMAGE_FILE_HEADER.IMAGE_FILE_MACHINE_I386)
-				{
-					return 8;
-				}
-				else
+				switch (peWriter.Headers.FileHeader.Machine)
 				{
-					return 16;
+					case IMAGE_FILE_HEADER.IMAGE_FILE_MACHINE_I386:
+						return 8;
+					case IMAGE_FILE_HEADER.IMAGE_FILE_MACHINE_ARM:
+						return 0;
+					default:
+						return 16;
 				}
 			}
 		}
@@ -101,13 +107,13 @@ namespace IKVM.Reflection.Writer
 		{
 			get
 			{
-				if (peWriter.Headers.FileHeader.Machine == IMAGE_FILE_HEADER.IMAGE_FILE_MACHINE_I386)
+				switch (peWriter.Headers.FileHeader.Machine)
 				{
-					return (MethodBodiesRVA + MethodBodiesLength + 3) & ~3U;
-				}
-				else
-				{
-					return (MethodBodiesRVA + MethodBodiesLength + 15) & ~15U;
+					case IMAGE_FILE_HEADER.IMAGE_FILE_MACHINE_I386:
+					case IMAGE_FILE_HEADER.IMAGE_FILE_MACHINE_ARM:
+						return (MethodBodiesRVA + MethodBodiesLength + 3) & ~3U;
+					default:
+						return (MethodBodiesRVA + MethodBodiesLength + 15) & ~15U;
 				}
 			}
 		}
@@ -146,9 +152,19 @@ namespace IKVM.Reflection.Writer
 			get { return (uint)moduleBuilder.MetadataLength; }
 		}
 
+		private uint VTableFixupsRVA
+		{
+			get { return (MetadataRVA + MetadataLength + 7) & ~7U; }
+		}
+
+		private uint VTableFixupsLength
+		{
+			get { return (uint)moduleBuilder.vtablefixups.Count * 8; }
+		}
+
 		internal uint DebugDirectoryRVA
 		{
-			get { return MetadataRVA + MetadataLength; }
+			get { return VTableFixupsRVA + VTableFixupsLength; }
 		}
 
 		internal uint DebugDirectoryLength
@@ -176,15 +192,44 @@ namespace IKVM.Reflection.Writer
 			}
 		}
 
+		internal uint ExportDirectoryRVA
+		{
+			get { return (DebugDirectoryRVA + DebugDirectoryLength + DebugDirectoryContentsLength + 15) & ~15U; }
+		}
+
+		internal uint ExportDirectoryLength
+		{
+			get { return moduleBuilder.unmanagedExports.Count == 0 ? 0U : 40U; }
+		}
+
+		private uint ExportTablesRVA
+		{
+			get { return ExportDirectoryRVA + ExportDirectoryLength; }
+		}
+
+		private uint ExportTablesLength
+		{
+			get { return exportTables == null ? 0U : exportTables.Length; }
+		}
+
 		internal uint ImportDirectoryRVA
 		{
 			// on AMD64 (and probably IA64) the import directory needs to be 16 byte aligned (on I386 4 byte alignment is sufficient)
-			get { return (DebugDirectoryRVA + DebugDirectoryLength + DebugDirectoryContentsLength + 15) & ~15U; }
+			get { return (ExportTablesRVA + ExportTablesLength + 15) & ~15U; }
 		}
 
 		internal uint ImportDirectoryLength
 		{
-			get { return (ImportHintNameTableRVA - ImportDirectoryRVA) + 27; }
+			get
+			{
+				switch (peWriter.Headers.FileHeader.Machine)
+				{
+					case IMAGE_FILE_HEADER.IMAGE_FILE_MACHINE_ARM:
+						return 0;
+					default:
+						return (ImportHintNameTableRVA - ImportDirectoryRVA) + 27;
+				}
+			}
 		}
 
 		private uint ImportHintNameTableRVA
@@ -223,40 +268,42 @@ namespace IKVM.Reflection.Writer
 		{
 			get
 			{
-				if (peWriter.Headers.FileHeader.Machine == IMAGE_FILE_HEADER.IMAGE_FILE_MACHINE_AMD64)
-				{
-					return 12;
-				}
-				else if (peWriter.Headers.FileHeader.Machine == IMAGE_FILE_HEADER.IMAGE_FILE_MACHINE_IA64)
+				switch (peWriter.Headers.FileHeader.Machine)
 				{
-					return 48;
-				}
-				else
-				{
-					return 6;
+					case IMAGE_FILE_HEADER.IMAGE_FILE_MACHINE_I386:
+						return 6;
+					case IMAGE_FILE_HEADER.IMAGE_FILE_MACHINE_AMD64:
+						return 12;
+					case IMAGE_FILE_HEADER.IMAGE_FILE_MACHINE_IA64:
+						return 48;
+					default:
+						return 0;
 				}
 			}
 		}
 
 		private void WriteRVA(MetadataWriter mw, uint rva)
 		{
-			if (peWriter.Headers.FileHeader.Machine == IMAGE_FILE_HEADER.IMAGE_FILE_MACHINE_I386)
+			switch (peWriter.Headers.FileHeader.Machine)
 			{
-				mw.Write(rva);
-			}
-			else
-			{
-				mw.Write((ulong)rva);
+				case IMAGE_FILE_HEADER.IMAGE_FILE_MACHINE_I386:
+				case IMAGE_FILE_HEADER.IMAGE_FILE_MACHINE_ARM:
+					mw.Write(rva);
+					break;
+				default:
+					mw.Write((ulong)rva);
+					break;
 			}
 		}
 
-		internal void Write(MetadataWriter mw, int sdataRVA)
+		internal void Write(MetadataWriter mw, uint sdataRVA)
 		{
 			// Now that we're ready to start writing, we need to do some fix ups
 			moduleBuilder.MethodDef.Fixup(this);
 			moduleBuilder.MethodImpl.Fixup(moduleBuilder);
 			moduleBuilder.MethodSemantics.Fixup(moduleBuilder);
 			moduleBuilder.InterfaceImpl.Fixup();
+			moduleBuilder.ResolveInterfaceImplPseudoTokens();
 			moduleBuilder.MemberRef.Fixup(moduleBuilder);
 			moduleBuilder.Constant.Fixup(moduleBuilder);
 			moduleBuilder.FieldMarshal.Fixup(moduleBuilder);
@@ -264,29 +311,37 @@ namespace IKVM.Reflection.Writer
 			moduleBuilder.GenericParam.Fixup(moduleBuilder);
 			moduleBuilder.CustomAttribute.Fixup(moduleBuilder);
 			moduleBuilder.FieldLayout.Fixup(moduleBuilder);
-			moduleBuilder.FieldRVA.Fixup(moduleBuilder, sdataRVA);
+			moduleBuilder.FieldRVA.Fixup(moduleBuilder, (int)sdataRVA, (int)this.MethodBodiesRVA);
 			moduleBuilder.ImplMap.Fixup(moduleBuilder);
 			moduleBuilder.MethodSpec.Fixup(moduleBuilder);
 			moduleBuilder.GenericParamConstraint.Fixup(moduleBuilder);
 
 			// Import Address Table
 			AssertRVA(mw, ImportAddressTableRVA);
-			WriteRVA(mw, ImportHintNameTableRVA);
-			WriteRVA(mw, 0);
+			if (ImportAddressTableLength != 0)
+			{
+				WriteRVA(mw, ImportHintNameTableRVA);
+				WriteRVA(mw, 0);
+			}
 
 			// CLI Header
 			AssertRVA(mw, ComDescriptorRVA);
-			cliHeader.MetaDataRVA = MetadataRVA;
-			cliHeader.MetaDataSize = MetadataLength;
+			cliHeader.MetaData.VirtualAddress = MetadataRVA;
+			cliHeader.MetaData.Size = MetadataLength;
 			if (ResourcesLength != 0)
 			{
-				cliHeader.ResourcesRVA = ResourcesRVA;
-				cliHeader.ResourcesSize = ResourcesLength;
+				cliHeader.Resources.VirtualAddress = ResourcesRVA;
+				cliHeader.Resources.Size = ResourcesLength;
 			}
 			if (StrongNameSignatureLength != 0)
 			{
-				cliHeader.StrongNameSignatureRVA = StrongNameSignatureRVA;
-				cliHeader.StrongNameSignatureSize = StrongNameSignatureLength;
+				cliHeader.StrongNameSignature.VirtualAddress = StrongNameSignatureRVA;
+				cliHeader.StrongNameSignature.Size = StrongNameSignatureLength;
+			}
+			if (VTableFixupsLength != 0)
+			{
+				cliHeader.VTableFixups.VirtualAddress = VTableFixupsRVA;
+				cliHeader.VTableFixups.Size = VTableFixupsLength;
 			}
 			cliHeader.Write(mw);
 
@@ -321,19 +376,46 @@ namespace IKVM.Reflection.Writer
 			AssertRVA(mw, MetadataRVA);
 			moduleBuilder.WriteMetadata(mw);
 
+			// alignment padding
+			for (int i = (int)(VTableFixupsRVA - (MetadataRVA + MetadataLength)); i > 0; i--)
+			{
+				mw.Write((byte)0);
+			}
+
+			// VTableFixups
+			AssertRVA(mw, VTableFixupsRVA);
+			WriteVTableFixups(mw, sdataRVA);
+
 			// Debug Directory
 			AssertRVA(mw, DebugDirectoryRVA);
 			WriteDebugDirectory(mw);
 
 			// alignment padding
-			for (int i = (int)(ImportDirectoryRVA - (DebugDirectoryRVA + DebugDirectoryLength + DebugDirectoryContentsLength)); i > 0; i--)
+			for (int i = (int)(ExportDirectoryRVA - (DebugDirectoryRVA + DebugDirectoryLength + DebugDirectoryContentsLength)); i > 0; i--)
+			{
+				mw.Write((byte)0);
+			}
+
+			// Export Directory
+			AssertRVA(mw, ExportDirectoryRVA);
+			WriteExportDirectory(mw);
+
+			// Export Tables
+			AssertRVA(mw, ExportTablesRVA);
+			WriteExportTables(mw, sdataRVA);
+	
+			// alignment padding
+			for (int i = (int)(ImportDirectoryRVA - (ExportTablesRVA + ExportTablesLength)); i > 0; i--)
 			{
 				mw.Write((byte)0);
 			}
 
 			// Import Directory
 			AssertRVA(mw, ImportDirectoryRVA);
-			WriteImportDirectory(mw);
+			if (ImportDirectoryLength != 0)
+			{
+				WriteImportDirectory(mw);
+			}
 
 			// alignment padding
 			for (int i = (int)(StartupStubRVA - (ImportDirectoryRVA + ImportDirectoryLength)); i > 0; i--)
@@ -362,7 +444,7 @@ namespace IKVM.Reflection.Writer
 				mw.Write(peWriter.Headers.OptionalHeader.ImageBase + StartupStubRVA);
 				mw.Write(peWriter.Headers.OptionalHeader.ImageBase + BaseRVA);
 			}
-			else
+			else if (peWriter.Headers.FileHeader.Machine == IMAGE_FILE_HEADER.IMAGE_FILE_MACHINE_I386)
 			{
 				mw.Write((ushort)0x25FF);
 				mw.Write((uint)peWriter.Headers.OptionalHeader.ImageBase + ImportAddressTableRVA);
@@ -375,6 +457,16 @@ namespace IKVM.Reflection.Writer
 			Debug.Assert(mw.Position - PointerToRawData + BaseRVA == rva);
 		}
 
+		private void WriteVTableFixups(MetadataWriter mw, uint sdataRVA)
+		{
+			foreach (ModuleBuilder.VTableFixups fixups in moduleBuilder.vtablefixups)
+			{
+				mw.Write(fixups.initializedDataOffset + sdataRVA);
+				mw.Write(fixups.count);
+				mw.Write(fixups.type);
+			}
+		}
+
 		private void WriteDebugDirectory(MetadataWriter mw)
 		{
 			if (DebugDirectoryLength != 0)
@@ -396,6 +488,277 @@ namespace IKVM.Reflection.Writer
 			}
 		}
 
+		private sealed class ExportTables
+		{
+			private readonly TextSection text;
+			internal readonly uint entries;
+			internal readonly uint ordinalBase;
+			internal readonly uint nameCount;
+			internal readonly uint namesLength;
+			internal readonly uint exportAddressTableRVA;
+			internal readonly uint exportNamePointerTableRVA;
+			internal readonly uint exportOrdinalTableRVA;
+			internal readonly uint namesRVA;
+			internal readonly uint stubsRVA;
+			private readonly uint stubLength;
+
+			internal ExportTables(TextSection text)
+			{
+				this.text = text;
+				ordinalBase = GetOrdinalBase(out entries);
+				namesLength = GetExportNamesLength(out nameCount);
+				exportAddressTableRVA = text.ExportTablesRVA;
+				exportNamePointerTableRVA = exportAddressTableRVA + 4 * entries;
+				exportOrdinalTableRVA = exportNamePointerTableRVA + 4 * nameCount;
+				namesRVA = exportOrdinalTableRVA + 2 * nameCount;
+				stubsRVA = (namesRVA + namesLength + 15) & ~15U;
+				// note that we align the stubs to avoid having to deal with the relocation crossing a page boundary
+				switch (text.peWriter.Headers.FileHeader.Machine)
+				{
+					case IMAGE_FILE_HEADER.IMAGE_FILE_MACHINE_I386:
+						stubLength = 8;
+						break;
+					case IMAGE_FILE_HEADER.IMAGE_FILE_MACHINE_AMD64:
+						stubLength = 16;
+						break;
+					default:
+						throw new NotImplementedException();
+				}
+			}
+
+			internal uint Length
+			{
+				get { return (stubsRVA + stubLength * (uint)text.moduleBuilder.unmanagedExports.Count) - text.ExportTablesRVA; }
+			}
+
+			private uint GetOrdinalBase(out uint entries)
+			{
+				uint min = uint.MaxValue;
+				uint max = uint.MinValue;
+				foreach (UnmanagedExport exp in text.moduleBuilder.unmanagedExports)
+				{
+					uint ordinal = (uint)exp.ordinal;
+					min = Math.Min(min, ordinal);
+					max = Math.Max(max, ordinal);
+				}
+				entries = 1 + (max - min);
+				return min;
+			}
+
+			private uint GetExportNamesLength(out uint nameCount)
+			{
+				nameCount = 0;
+				// the first name in the names list is the module name (the Export Directory contains a name of the current module)
+				uint length = (uint)text.moduleBuilder.fileName.Length + 1;
+				foreach (UnmanagedExport exp in text.moduleBuilder.unmanagedExports)
+				{
+					if (exp.name != null)
+					{
+						nameCount++;
+						length += (uint)exp.name.Length + 1;
+					}
+				}
+				return length;
+			}
+
+			internal void Write(MetadataWriter mw, uint sdataRVA)
+			{
+				// sort the exports by ordinal
+				text.moduleBuilder.unmanagedExports.Sort(CompareUnmanagedExportOrdinals);
+
+				// Now write the Export Address Table
+				text.AssertRVA(mw, exportAddressTableRVA);
+				for (int i = 0, pos = 0; i < entries; i++)
+				{
+					if (text.moduleBuilder.unmanagedExports[pos].ordinal == i + ordinalBase)
+					{
+						mw.Write(stubsRVA + (uint)pos * stubLength);
+						pos++;
+					}
+					else
+					{
+						mw.Write(0);
+					}
+				}
+
+				// sort the exports by name
+				text.moduleBuilder.unmanagedExports.Sort(CompareUnmanagedExportNames);
+
+				// Now write the Export Name Pointer Table
+				text.AssertRVA(mw, exportNamePointerTableRVA);
+				uint nameOffset = (uint)text.moduleBuilder.fileName.Length + 1;
+				foreach (UnmanagedExport exp in text.moduleBuilder.unmanagedExports)
+				{
+					if (exp.name != null)
+					{
+						mw.Write(namesRVA + nameOffset);
+						nameOffset += (uint)exp.name.Length + 1;
+					}
+				}
+
+				// Now write the Export Ordinal Table
+				text.AssertRVA(mw, exportOrdinalTableRVA);
+				foreach (UnmanagedExport exp in text.moduleBuilder.unmanagedExports)
+				{
+					if (exp.name != null)
+					{
+						mw.Write((ushort)(exp.ordinal - ordinalBase));
+					}
+				}
+
+				// Now write the actual names
+				text.AssertRVA(mw, namesRVA);
+				mw.Write(Encoding.ASCII.GetBytes(text.moduleBuilder.fileName));
+				mw.Write((byte)0);
+				foreach (UnmanagedExport exp in text.moduleBuilder.unmanagedExports)
+				{
+					if (exp.name != null)
+					{
+						mw.Write(Encoding.ASCII.GetBytes(exp.name));
+						mw.Write((byte)0);
+					}
+				}
+				text.AssertRVA(mw, namesRVA + namesLength);
+
+				// alignment padding
+				for (int i = (int)(stubsRVA - (namesRVA + namesLength)); i > 0; i--)
+				{
+					mw.Write((byte)0);
+				}
+
+				// sort the exports by ordinal
+				text.moduleBuilder.unmanagedExports.Sort(CompareUnmanagedExportOrdinals);
+
+				// Now write the stubs
+				text.AssertRVA(mw, stubsRVA);
+
+				for (int i = 0, pos = 0; i < entries; i++)
+				{
+					if (text.moduleBuilder.unmanagedExports[pos].ordinal == i + ordinalBase)
+					{
+						switch (text.peWriter.Headers.FileHeader.Machine)
+						{
+							case IMAGE_FILE_HEADER.IMAGE_FILE_MACHINE_I386:
+								mw.Write((byte)0xFF);
+								mw.Write((byte)0x25);
+								mw.Write((uint)text.peWriter.Headers.OptionalHeader.ImageBase + text.moduleBuilder.unmanagedExports[pos].rva.initializedDataOffset + sdataRVA);
+								mw.Write((short)0);	// alignment
+								break;
+							case IMAGE_FILE_HEADER.IMAGE_FILE_MACHINE_AMD64:
+								mw.Write((byte)0x48);
+								mw.Write((byte)0xA1);
+								mw.Write(text.peWriter.Headers.OptionalHeader.ImageBase + text.moduleBuilder.unmanagedExports[pos].rva.initializedDataOffset + sdataRVA);
+								mw.Write((byte)0xFF);
+								mw.Write((byte)0xE0);
+								mw.Write(0); // alignment
+								break;
+							default:
+								throw new NotImplementedException();
+						}
+						pos++;
+					}
+				}
+			}
+
+			private static int CompareUnmanagedExportNames(UnmanagedExport x, UnmanagedExport y)
+			{
+				if (x.name == null)
+				{
+					return y.name == null ? 0 : 1;
+				}
+				if (y.name == null)
+				{
+					return -1;
+				}
+				return x.name.CompareTo(y.name);
+			}
+
+			private static int CompareUnmanagedExportOrdinals(UnmanagedExport x, UnmanagedExport y)
+			{
+				return x.ordinal.CompareTo(y.ordinal);
+			}
+
+			internal void WriteRelocations(MetadataWriter mw)
+			{
+				// we assume that unmanagedExports is still sorted by ordinal
+				for (int i = 0, pos = 0; i < entries; i++)
+				{
+					if (text.moduleBuilder.unmanagedExports[pos].ordinal == i + ordinalBase)
+					{
+						// both I386 and AMD64 have the address at offset 2
+						text.WriteRelocationBlock(mw, stubsRVA + 2 + (uint)pos * stubLength);
+						pos++;
+					}
+				}
+			}
+		}
+
+		private uint GetOrdinalBase(out uint entries)
+		{
+			uint min = uint.MaxValue;
+			uint max = uint.MinValue;
+			foreach (UnmanagedExport exp in moduleBuilder.unmanagedExports)
+			{
+				uint ordinal = (uint)exp.ordinal;
+				min = Math.Min(min, ordinal);
+				max = Math.Max(max, ordinal);
+			}
+			entries = 1 + (max - min);
+			return min;
+		}
+
+		private uint GetExportNamesLength(out uint nameCount)
+		{
+			nameCount = 0;
+			uint length = 0;
+			foreach (UnmanagedExport exp in moduleBuilder.unmanagedExports)
+			{
+				if (exp.name != null)
+				{
+					nameCount++;
+					length += (uint)exp.name.Length + 1;
+				}
+			}
+			return length;
+		}
+
+		private void WriteExportDirectory(MetadataWriter mw)
+		{
+			if (ExportDirectoryLength != 0)
+			{
+				// Flags
+				mw.Write(0);
+				// Date/Time Stamp
+				mw.Write(peWriter.Headers.FileHeader.TimeDateStamp);
+				// Major Version
+				mw.Write((short)0);
+				// Minor Version
+				mw.Write((short)0);
+				// Name RVA
+				mw.Write(exportTables.namesRVA);
+				// Ordinal Base
+				mw.Write(exportTables.ordinalBase);
+				// Address Table Entries
+				mw.Write(exportTables.entries);
+				// Number of Name Pointers
+				mw.Write(exportTables.nameCount);
+				// Export Address Table RVA
+				mw.Write(exportTables.exportAddressTableRVA);
+				// Name Pointer RVA
+				mw.Write(exportTables.exportNamePointerTableRVA);
+				// Ordinal Table RVA
+				mw.Write(exportTables.exportOrdinalTableRVA);
+			}
+		}
+
+		private void WriteExportTables(MetadataWriter mw, uint sdataRVA)
+		{
+			if (exportTables != null)
+			{
+				exportTables.Write(mw, sdataRVA);
+			}
+		}
+
 		private void WriteImportDirectory(MetadataWriter mw)
 		{
 			mw.Write(ImportDirectoryRVA + 40);		// ImportLookupTable
@@ -441,5 +804,48 @@ namespace IKVM.Reflection.Writer
 		{
 			get { return (int)(StartupStubRVA - BaseRVA + StartupStubLength); }
 		}
+
+		internal void WriteRelocations(MetadataWriter mw)
+		{
+			uint relocAddress = this.StartupStubRVA;
+			switch (peWriter.Headers.FileHeader.Machine)
+			{
+				case IMAGE_FILE_HEADER.IMAGE_FILE_MACHINE_I386:
+				case IMAGE_FILE_HEADER.IMAGE_FILE_MACHINE_AMD64:
+					relocAddress += 2;
+					break;
+				case IMAGE_FILE_HEADER.IMAGE_FILE_MACHINE_IA64:
+					relocAddress += 0x20;
+					break;
+			}
+			WriteRelocationBlock(mw, relocAddress);
+			if (exportTables != null)
+			{
+				exportTables.WriteRelocations(mw);
+			}
+		}
+
+		// note that we're lazy and write a new relocation block for every relocation
+		// even if they are in the same page (since there is typically only one anyway)
+		private void WriteRelocationBlock(MetadataWriter mw, uint relocAddress)
+		{
+			uint pageRVA = relocAddress & ~0xFFFU;
+			mw.Write(pageRVA);	// PageRVA
+			mw.Write(0x000C);	// Block Size
+			switch (peWriter.Headers.FileHeader.Machine)
+			{
+				case IMAGE_FILE_HEADER.IMAGE_FILE_MACHINE_I386:
+					mw.Write(0x3000 + relocAddress - pageRVA);				// Type / Offset
+					break;
+				case IMAGE_FILE_HEADER.IMAGE_FILE_MACHINE_AMD64:
+					mw.Write(0xA000 + relocAddress - pageRVA);				// Type / Offset
+					break;
+				case IMAGE_FILE_HEADER.IMAGE_FILE_MACHINE_IA64:
+					// on IA64 the StartupStubRVA is 16 byte aligned, so these two addresses won't cross a page boundary
+					mw.Write((short)(0xA000 + relocAddress - pageRVA));		// Type / Offset
+					mw.Write((short)(0xA000 + relocAddress - pageRVA + 8));	// Type / Offset
+					break;
+			}
+		}
 	}
 }
diff --git a/mcs/class/IKVM.Reflection/Writer/VersionInfo.cs b/mcs/class/IKVM.Reflection/Writer/VersionInfo.cs
index bfcc00b..4c76b49 100644
--- a/mcs/class/IKVM.Reflection/Writer/VersionInfo.cs
+++ b/mcs/class/IKVM.Reflection/Writer/VersionInfo.cs
@@ -38,7 +38,6 @@ namespace IKVM.Reflection.Writer
 		private string description;
 		private string title;
 		internal string informationalVersion;
-		private string culture;
 		private string fileVersion;
 
 		internal void SetName(AssemblyName name)
@@ -83,10 +82,6 @@ namespace IKVM.Reflection.Writer
 			{
 				informationalVersion = (string)cab.GetConstructorArgument(0);
 			}
-			else if (culture == null && type == u.System_Reflection_AssemblyCultureAttribute)
-			{
-				culture  = (string)cab.GetConstructorArgument(0);
-			}
 			else if (fileVersion == null && type == u.System_Reflection_AssemblyFileVersionAttribute)
 			{
 				fileVersion = (string)cab.GetConstructorArgument(0);
@@ -109,13 +104,16 @@ namespace IKVM.Reflection.Writer
 
 			int codepage = 1200;	// Unicode codepage
 			int lcid = 0x7f;
-			if (name.CultureInfo != null)
+			try
 			{
-				lcid = name.CultureInfo.LCID;
+				if (name.CultureInfo != null)
+				{
+					lcid = name.CultureInfo.LCID;
+				}
 			}
-			if (culture != null)
+			catch (ArgumentException)
 			{
-				lcid = new CultureInfo(culture).LCID;
+				// AssemblyName.CultureInfo throws an ArgumentException if AssemblyBuilder.__SetAssemblyCulture() was used to specify a non-existing culture
 			}
 
 			Version filever = ParseVersionRobust(fileVersion);
diff --git a/mcs/class/Makefile b/mcs/class/Makefile
index 436668b..0f2b9f9 100644
--- a/mcs/class/Makefile
+++ b/mcs/class/Makefile
@@ -2,7 +2,19 @@ thisdir = class
 
 # Note that Mono.Security and System.Security aren't listed.
 # We may have to add those if 'mcs' starts using them.
-basic_SUBDIRS := corlib System System.XML System Mono.Security Mono.CompilerServices.SymbolWriter System.Core aot-compiler
+basic_SUBDIRS := corlib System System.XML System Mono.Security System.Core 
+
+# resgen is corlib specific so we need to wait until corlib is build
+# and build it just a step before first dll needs it
+resgen_dir = ../tools/resgen
+
+build_SUBDIRS :=  \
+	corlib \
+	System \
+	System.XML \
+	System Mono.Security \
+	Mono.Posix \
+	System.Core
 
 net_1_1_java_SUBDIRS = \
 	System.Xml					\
@@ -27,6 +39,7 @@ common_dirs := \
 	System				\
 	System.XML			\
 	I18N				\
+	$(resgen_dir)			\
 	System.Drawing			\
 	System.Transactions		\
 	System.EnterpriseServices	\
@@ -93,16 +106,15 @@ net_2_0_dirs := \
 	System.ComponentModel.DataAnnotations	\
 	System.Web.DynamicData		\
 	System.ServiceModel.Web		\
-	System.Web.Mvc			\
 	System.Web.Mvc2			\
 	Mono.C5				\
 	Mono.Management			\
 	Mono.Options 			\
 	Mono.Simd			\
 	Mono.Tasklets       		\
+	System.Dynamic			\
 	Mono.CSharp			\
 	Moonlight.Build.Tasks		\
-	System.Data.Services		\
 	System.Net
 
 net_2_0_only_dirs := \
@@ -110,9 +122,11 @@ net_2_0_only_dirs := \
 	System.Web.Extensions.Design_1.0	\
 	Compat.ICSharpCode.SharpZipLib	\
 	WindowsBase			\
-	System.Data.Services.Client
+	System.Data.Services.Client	\
+	System.Data.Services		\
+	System.Web.Mvc			
 
-moonlight_dirs := \
+moonlight_raw_dirs := \
 	corlib			\
 	System			\
 	Mono.CompilerServices.SymbolWriter \
@@ -144,8 +158,9 @@ mobile_dirs := \
 	System.Transactions	\
 	System.Data	\
 	Mono.Cairo	\
+	Mono.Data.Sqlite	\
 	System.Numerics	\
-	Mono.Data.Sqlite
+	System.Data.Services.Client
 
 net_3_5_only_dirs := \
 	Microsoft.Build.Framework	\
@@ -154,33 +169,44 @@ net_3_5_only_dirs := \
 	Microsoft.Build.Tasks
 
 net_4_0_dirs := \
-	System.Dynamic		\
 	System.Numerics		\
 	Microsoft.CSharp	\
 	Microsoft.Build		\
 	System.Windows.Forms.DataVisualization	\
-	System.ComponentModel.Composition \
 	System.Xaml \
 	WindowsBase \
-	System.Data.Services.Client \
 	System.ServiceModel.Routing \
 	System.ServiceModel.Discovery \
 	System.Runtime.Caching \
 	System.Runtime.DurableInstancing \
 	Mono.CodeContracts \
+	Mono.Parallel \
 	Microsoft.Web.Infrastructure \
-	WebMatrix.Data
-
-net_2_0_SUBDIRS := $(common_dirs) $(net_2_0_dirs) $(net_2_0_only_dirs)
-moonlight_raw_SUBDIRS := $(moonlight_dirs)
-monodroid_SUBDIRS := $(mobile_dirs)
+	WebMatrix.Data \
+	System.Data.Services.Client	\
+	System.Data.Services	\
+	System.Json
+	
+net_4_0_only_dirs := \
+	System.ComponentModel.Composition
+
+net_4_5_dirs := \
+	System.Threading.Tasks.Dataflow \
+	System.ComponentModel.Composition.4.5 \
+	System.Net.Http
+
+net_2_0_SUBDIRS := $(common_dirs) $(net_2_0_dirs) $(net_2_0_only_dirs) aot-compiler
+moonlight_raw_SUBDIRS := $(moonlight_raw_dirs)
+monodroid_SUBDIRS := $(mobile_dirs) Mono.CSharp Microsoft.CSharp
 monotouch_SUBDIRS := $(mobile_dirs)
+mobile_SUBDIRS := $(mobile_dirs)
 net_3_5_SUBDIRS := $(net_3_5_only_dirs)
-net_4_0_SUBDIRS := $(common_dirs) $(net_2_0_dirs) $(net_4_0_dirs)
+net_4_0_SUBDIRS := $(common_dirs) $(net_2_0_dirs) $(net_4_0_dirs) $(net_4_0_only_dirs)
+net_4_5_SUBDIRS := $(common_dirs) $(net_2_0_dirs) $(net_4_0_dirs) $(net_4_5_dirs) aot-compiler
 
 include ../build/rules.make
 
-SUBDIRS = $(common_dirs) $(net_2_0_dirs) $(net_2_0_only_dirs) $(moonlight_dirs) $(mobile_dirs) $(net_4_0_dirs)
+SUBDIRS = $(common_dirs) $(net_2_0_dirs) $(net_2_0_only_dirs) $(net_3_5_only_dirs) $(moonlight_raw_dirs) $(mobile_dirs) $(net_4_0_dirs) $(net_4_0_only_dirs) $(net_4_5_dirs)
 
 DIST_ONLY_SUBDIRS = dlr IKVM.Reflection aot-compiler
 
@@ -209,7 +235,7 @@ all-local $(STD_TARGETS:=-local):
 	@:
 
 # Files needed to bootstrap C# compiler
-basic_files = mcs.exe mscorlib.dll System.dll System.Xml.dll Mono.Security.dll System.Core.dll
+basic_files = basic.exe mscorlib.dll System.dll System.Xml.dll Mono.Security.dll System.Core.dll
 monolite_files = $(basic_files:%=lib/monolite/%)
 
 lib/monolite:
@@ -220,7 +246,7 @@ $(monolite_files): lib/monolite/%: lib/basic/%
 	cp -p $< $@
 
 $(basic_files:%=lib/basic/%):
-	cd $(topdir) && $(MAKE) profile-do--basic--all SKIP_AOT=1
+	cd $(topdir) && $(MAKE) profile-do--basic--all NO_DIR_CHECK=1 SKIP_AOT=1
 
 dist-default: $(monolite_files)
 dist-local: dist-default
diff --git a/mcs/class/Managed.Windows.Forms/Assembly/ChangeLog b/mcs/class/Managed.Windows.Forms/Assembly/ChangeLog
index 47538a2..979a5c4 100644
--- a/mcs/class/Managed.Windows.Forms/Assembly/ChangeLog
+++ b/mcs/class/Managed.Windows.Forms/Assembly/ChangeLog
@@ -1,7 +1,3 @@
-2010-10-31  Miguel de Icaza  <miguel at gnome.org>
-
-	Expose some of our internals to the Mono.Winforms assembly
-
 2008-09-03  Mario Carrion  <mcarrion at novell.com>
 
 	* AssemblyInfo.cs: Added InternalsVisibleTo attribute to support 
diff --git a/mcs/class/Managed.Windows.Forms/Assembly/ChangeLog.old b/mcs/class/Managed.Windows.Forms/Assembly/ChangeLog.old
deleted file mode 100644
index 979a5c4..0000000
--- a/mcs/class/Managed.Windows.Forms/Assembly/ChangeLog.old
+++ /dev/null
@@ -1,40 +0,0 @@
-2008-09-03  Mario Carrion  <mcarrion at novell.com>
-
-	* AssemblyInfo.cs: Added InternalsVisibleTo attribute to support 
-	  UIAutomationWinforms assembly.
-
-2008-05-09  Jonathan Pobst  <monkey at jpobst.com>
-
-	* Locale.cs: Comment out everything but GetText, modify GetText
-	to just return the parameter.
-
-2008-04-15  Andreas Nahr <ClassDevelopment at A-SoftTech.com>
-
-	* AssemblyInfo.cs: Use existing consts where possible
-
-2007-05-31  Rolf Bjarne Kvinge <RKvinge at novell.com> 
-
-	* AssemblyInfo.cs: Update assembly attributes.
-
-2006-12-21  Daniel Nauck  <dna at mono-project.de>
-
-	* Locale.cs: Added Locale.GetText (string msg, params object [] args).
-
-2005-02-13  Peter Bartok  <pbartok at novell.com>
-
-	* Locale.cs: Implemented support for reading resources from
-	  the assembly
-
-2004-04-13  Andreas Nahr <ClassDevelopment at A-SoftTech.com>
-
-	* Consts.cs: Added
-
-2004-04-08  Gonzalo Paniagua Javier <gonzalo at ximian.com>
-
-	* AssemblyInfo.cs: patch by Gert Driesen that makes SWF CLS compliant.
-
-2004-03-15  Andreas Nahr <ClassDevelopment at A-SoftTech.com>
-
-	* AssemblyInfo.cs: Added
-	* Locale.cs: Added
-	* ChangeLog: Added
diff --git a/mcs/class/Managed.Windows.Forms/ChangeLog b/mcs/class/Managed.Windows.Forms/ChangeLog
index 0d851d3..dcab574 100644
--- a/mcs/class/Managed.Windows.Forms/ChangeLog
+++ b/mcs/class/Managed.Windows.Forms/ChangeLog
@@ -1,12 +1,3 @@
-2011-01-05  Marek Safar  <marek.safar at gmail.com>
-
-	Add missing Accessibility reference
-
-2010-12-10  Miguel de Icaza  <miguel at gnome.org>
-
-	[winforms] Use conditional attributes, not ifdefs to insert
-	conditional code
-
 2009-08-19  Carlos Alberto Cortez <calberto.cortez at gmail.com>
 
 	* System.Windows.Forms_test.dll.sources: Add a new test file.
diff --git a/mcs/class/Managed.Windows.Forms/ChangeLog.old b/mcs/class/Managed.Windows.Forms/ChangeLog.old
deleted file mode 100644
index dcab574..0000000
--- a/mcs/class/Managed.Windows.Forms/ChangeLog.old
+++ /dev/null
@@ -1,1814 +0,0 @@
-2009-08-19  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* System.Windows.Forms_test.dll.sources: Add a new test file.
-
-2009-03-30  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* System.Windows.Forms.dll.sources: Add X11Clipboard.cs to the build.
-
-2009-01-16  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* System.Windows.Forms_test.dll.sources: Add ClipboardTest.cs.
-
-2008-11-27  Atsushi Enomoto  <atsushi at ximian.com>
-
-	* Makefile: here is another nunit24 option breakage.
-
-2008-11-08  Andreia Gaita <shana at jitted.com> 
-
-	* SWF2k5-tests.csproj: Fix the previous ChangeLog entry (bad merge). Update
-	  regenerated test project.
-
-2008-11-08  Andreia Gaita <shana at jitted.com> 
-
-	* build-csproj2k5-tests: Added net_2_0 configuration to go along with the
-	  profile targets (so MD doesn't complain at me)
-
-2008-10-31  Andreia Gaita  <shana at jitted.com>
-
-	* System.Windows.Forms.dll.sources, SWF.csproj,
-	  SWF2k5.csproj:
-	  Added internal classes for debugging purposes
-
-2008-10-23  Andreia Gaita  <shana at jitted.com>
-
-	* SWF.csproj, SWF2k5.csproj: Update project files
-
-2008-09-29  Jonathan Pobst  <monkey at jpobst.com>
-
-	* System.Windows.Forms.dll.resources: Removed unused dialog-*.png images.
-
-2008-09-18  Mike Gorse <<mgorse at novell.com>
-
-	* System.Windows.Forms.dll.sources: Added IKeyFilter.cs.
-
-2008-08-02  Gert Driesen  <drieseng at users.sourceforge.net>
-
-	* System.Windows.Forms_test.dll.sources: Added FormEventTest.cs.
-
-2008-07-11  Jonathan Pobst  <monkey at jpobst.com>
-
-	* System.Windows.Forms.dll.sources: Remove the clearlooks, nice,
-	and old gtk themes.  They are bit-rotted and have always been listed
-	as "unsupported".  
-
-2008-07-05  Andreia Gaita <avidigal at novell.com> 
-
-	* SWF2k5.csproj, build-csproj2k5: Fix namespaces on embedded resources
-	  [Fixes #384180]
-
-2008-06-30  Jonathan Pobst  <monkey at jpobst.com>
-
-	* System.Windows.Forms.dll.sources: Remove the "new" X11 backend.  It
-	was never finished, is bit-rotted, and will likely never be finished.	
-
-2008-06-10  George Giolfan  <georgegiolfan at yahoo.com>
-
-	* SWF.csproj, SWF2k5.csproj: Updated.
-
-2008-06-10  George Giolfan  <georgegiolfan at yahoo.com>
-
-	* System.Windows.Forms.dll.sources: Added GtkPlus.cs, IVisualStyles.cs,
-	VisualStylesEngine.cs, VisualStylesGtkPlus.cs, VisualStylesNative.cs.
-
-2008-06-03  George Giolfan  <georgegiolfan at yahoo.com>
-
-	* SWF2k5-tests.csproj: Updated.
-
-2008-06-02  Andreia Gaita <avidigal at novell.com> 
-
-	* build-csproj2k5, SWF2k5.csproj: Add missing preprocessor symbol. 
-	* SWF2k5.sln: Make 2.0 the default profile for the solution.
-
-2008-05-24  George Giolfan  <georgegiolfan at yahoo.com>
-
-	* SWF.csproj, SWF2k5.csproj: Updated.
-
-2008-05-22  Andreia Gaita <avidigal at novell.com> 
-
-	* SWF2k5.csproj, Makefile, build-csproj2k5, SWF2k5.sln: Long overdue
-	  rename of Mono.Mozilla to Mono.WebBrowser. step 2 - update
-	  references
-
-2008-05-20  Jonathan Pobst  <monkey at jpobst.com>
-
-	* System.Windows.Forms_test.dll.sources: Add DataGridViewDataBindingTest.cs.
-
-2008-05-09  Jonathan Pobst  <monkey at jpobst.com>
-
-	* Makefile: Add .ico's to IMAGE_RESOURCES.  Remove old .resources
-	files from RESX_RESOURCES.
-	* System.Windows.Forms.dll.resources: Remove old .resources files,
-	add .ico's.	
-
-2008-05-07  George Giolfan  <georgegiolfan at yahoo.com>
-
-	* System.Windows.Forms.dll.sources: Added VisualStyles/ToolStripPainter.cs.
-	* SWF.csproj, SWF2k5.csproj: Updated.
-
-2008-04-28  George Giolfan  <georgegiolfan at yahoo.com>
-
-	* System.Windows.Forms.dll.sources: Added VisualStyles/TabControlPainter.cs.
-	* SWF.csproj, SWF2k5.csproj: Updated.
-
-2008-04-26  George Giolfan  <georgegiolfan at yahoo.com>
-
-	* SWF.csproj, SWF2k5.csproj: Updated.
-
-2008-04-25  George Giolfan  <georgegiolfan at yahoo.com>
-
-	* System.Windows.Forms.dll.sources: Added ThemeVisualStyles.cs,
-	ThemeElementsVisualStyles.cs, VisualStyles/CheckBoxPainter.cs,
-	VisualStyles/RadioButtonPainter.cs.
-
-2008-04-25  George Giolfan  <georgegiolfan at yahoo.com>
-
-	* System.Windows.Forms.dll.sources: Added IDeviceContext.cs.
-
-2008-04-24  Jonathan Pobst  <monkey at jpobst.com>
-
-	* System.Windows.Forms_test.dll.sources: Add InputLanguageTest.cs.
-
-2008-04-23  Andreas Nahr <ClassDevelopment at A-SoftTech.com>
-
-	* SWF2k5.sln: Fixed file to be in line with current build
-
-2008-04-23  George Giolfan  <georgegiolfan at yahoo.com>
-
-	* SWF2k5.sln: Fixed configuration to support the 1.1 profile.
-
-2008-04-23  George Giolfan  <georgegiolfan at yahoo.com>
-
-	* SWF2k5.csproj: Updated.
-
-2008-04-22  Jonathan Pobst  <monkey at jpobst.com>
-
-	* Makefile: Remove /labels option.
-
-2008-04-09  Jonathan Pobst  <monkey at jpobst.com>
-
-	* System.Windows.Forms_test.dll.sources: Add DataGridViewImageCellTest.cs.
-
-2008-04-08  Everaldo Canuto  <ecanuto at novell.com>
-
-	* Makefile: GENERATE_RESOURCES var added to help on resources generation. 
-
-2008-04-08  Jonathan Pobst  <monkey at jpobst.com>
-
-	* System.Windows.Forms_test.dll.sources: Add DataGridViewCheckBoxCellTest.cs.
-
-2008-04-03  Jonathan Pobst  <monkey at jpobst.com>
-
-	* System.Windows.Forms_test.dll.sources: Add DataGridViewLinkCellTest.cs.
-
-2008-04-02  Jonathan Pobst  <monkey at jpobst.com>
-
-	* System.Windows.Forms_test.dll.sources: Add DataGridViewButtonCellTest.cs.
-
-2008-03-19  Ivan N. Zlatev  <contact at i-nz.net>
-
-	* Makefile, System.Windows.Forms.dll.resources: Updated to reflect 
-	the resource changes for PropertyGrid.
-
-2008-03-13  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* System.Windows.Forms_test.dll.sources: Added
-	ListBindingHelperTest.cs.
-
-2008-03-06  Jonathan Pobst  <monkey at jpobst.com>
-
-	* System.Windows.Forms.dll.sources: Added IToolStripData.cs.
-
-2008-03-06  Jonathan Pobst  <monkey at jpobst.com>
-
-	* System.Windows.Forms.dll.sources: Added IBounds.cs.
-
-2008-02-19  Jonathan Pobst  <monkey at jpobst.com>
-
-	* System.Windows.Forms_test.dll.sources: Added SelectionRangeTest.cs.
-
-2008-02-06  Andreia Gaita <avidigal at novell.com>
-
-	* build-csproj2k5: fixed mono.mozilla project guid
-	* SWF2K5.csproj: synched to sources
-	* SWF2k5.sln: updated with proper mono.mozilla guid	
-
-2008-02-04  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* System.Windows.Forms_test.dll.sources: Added
-	BindingsCollectionTest.cs.
-
-2008-01-26  Gert Driesen  <drieseng at users.sourceforge.net>
-
-	* System.Windows.Forms.dll.sources: Moved PropertiesTab.cs from
-	System.Windows.Forms to System.Windows.Forms.PropertyGridInternal.
-
-2008-01-26  Gert Driesen  <drieseng at users.sourceforge.net>
-
-	* System.Windows.Forms_test.dll.sources: Added ImageListStreamerTest.cs.
-
-2008-01-24  Andreia Gaita <avidigal at novell.com>
-
-	SWF2K5.csproj, SWF.csproj: synched
-
-2008-01-23  Geoff Norton  <gnorton at novell.com>
-
-	* System.Windows.Forms.dll.sources:  Add the Carbon Cursor.cs to the build.
-
-2007-12-30  Andreia Gaita <avidigal at novell.com>
-
-	* build-csproj2k5: added output types
-	* SWF2K5.csproj: Updated project
-
-2007-12-21  Geoff Norton  <gnorton at novell.com>
-
-	* System.Windows.Forms.dll.sources: Add Dnd.cs, Pasteboard.cs and HIObjectHandler.cs
-	to the build
-
-2007-11-15  Geoff Norton  <gnorton at novell.com>
-
-	* System.Windows.Forms.dll.sources: Reflect the changes for the new OSX->Carbon
-	refactoring.
-
-2007-10-23  Geoff Norton  <gnorton at novell.com>
-
-	* System.Windows.Forms.dll.sources: Added OSXKeyboard.cs
-
-2007-10-22  Andreia Gaita <avidigal at novell.com>
-
-	* build-csproj2k5, SWF2k5.csproj: add System.configuration reference
-
-2007-10-22  Geoff Norton  <gnorton at novell.com>
-
-	* Makefile: Add a reference to System.Configuration.dll in NET 2.0
-
-2007-10-11  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* System.Windows.Forms_test.dll.sources: Added DragEventArgsTest.cs.
-
-2007-10-08  Andreia Gaita <avidigal at novell.com>
-
-	* SWF.csproj, build-csproj: Add missing ONLY_1_1 flag, update project.
-
-2007-10-08  Jonathan Pobst  <monkey at jpobst.com>
-
-	* System.Windows.Forms.dll.sources: Added TextBoxTextRenderer.cs.
-
-2007-10-07  Andreia Gaita <avidigal at novell.com>
-
-	* System.Windows.Forms.dll.sources: Added WebBrowserDialogs
-	* build-csproj2k5: added reference to mono.mozilla
-	* SWF2K5.csproj: Updated project files
-
-2007-10-04  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* System.Windows.Forms_test.dll.sources: Added TreeViewEventsTest.cs.
-
-2007-10-04  Jonathan Pobst  <monkey at jpobst.com>
-
-	* System.Windows.Forms.dll.sources: Added Line.cs and LineTag.cs.
-
-2007-09-23  Gert Driesen  <drieseng at users.sourceforge.net>
-
-	* System.Windows.Forms_test.dll.sources: Added
-	DataGridViewCellCollectionTest.cs.
-
-2007-09-21  Justin Cherniak <justin.cherniak at gmail.com>
-
-	* SWF2k5.csproj: Fixed missing file.
-
-2007-09-06  Zoltan Varga  <vargaz at gmail.com>
-
-	* System.Windows.Forms.dll.sources: Add HtmlHistory.cs HtmlWindow.cs 
-	HtmlWindowCollection.cs ListBindingHelper.cs WindowsFormsSection.cs 
-	WindowsFormsSynchronizationContext.cs.
-
-2007-09-01  Zoltan Varga  <vargaz at gmail.com>
-
-	* System.Windows.Forms.dll.sources: Add FileDialogCustomPlace.cs and
-	FileDialogCustomPlacesCollection.cs.
-
-2007-08-29  Jonathan Pobst  <monkey at jpobst.com>
-
-	* System.Windows.Forms.dll.sources: Add HtmlElementErrorEventArgs.cs,
-	HtmlElementErrorEventHandler.cs.
-
-2007-08-28  Jonathan Pobst  <monkey at jpobst.com>
-
-	* System.Windows.Forms.dll.sources: Add RadioButtonPainter.cs.
-
-2007-08-28  Rolf Bjarne Kvinge <RKvinge at novell.com> 
-
-	* build-csproj2k5: Add Mono.Mozilla as a reference.
-	* SWF2k5.csproj: Updated.
-
-2007-08-26  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* System.Windows.Forms.dll.sources: Add new ListViewInsertionMark.cs
-	file.
-
-2007-08-24  Gert Driesen  <drieseng at users.sourceforge.net>
-
-	* System.Windows.Forms_test.dll.sources: Added
-	FolderBrowserDialogTest.cs.
-
-2007-08-22  Jonathan Pobst  <monkey at jpobst.com>
-
-	* System.Windows.Forms.dll.sources: CheckBoxPainter.cs.
-
-2007-08-21  Rolf Bjarne Kvinge <RKvinge at novell.com> 
-
-	* System.Windows.Forms_test.dll.sources: Added
-	  DataGridViewClipboardHeaderTest.cs, DataGridViewClipboardTest.cs,
-	  DataGridViewColumnHeaderTest.cs, DataGridViewRowHeaderTest.cs.
-
-2007-08-19  Andreia Gaita  <avidigal at novell.com>
-
-	* System.Windows.Forms.dll.sources: Add HtmlElement*
-
-2007-08-11 Andreia Gaita <avidigal at novell.com>
-
-	* Makefile: Add reference to the Mono.Mozilla
-	assembly for webbrowser support.
-
-2007-08-07  Rolf Bjarne Kvinge <RKvinge at novell.com> 
-
-	* SWF.csproj, SWF2k5.csproj, SWF2k5-tests.csproj: Updated.
-
-2007-08-02  Jonathan Pobst  <monkey at jpobst.com>
-
-	* System.Windows.Forms.dll.sources: Add MdiControlStrip.cs.
-
-2007-07-31  Rolf Bjarne Kvinge <RKvinge at novell.com> 
-
-	* build-csproj2k5-tests: Add ONLY_1_1, __MONO_CS__ and DEBUG where
-	  relevant.
-	* SWF2k5-tests.csproj, SWF.csproj: Updated.
-	* System.Windows.Forms_test.dll.sources: Added DataGridViewBandTest.cs,
-	  DataGridViewColumnCollectionTest.cs,
-	  DataGridViewComboBoxCellTest.cs, DataGridViewCommon.cs,
-	  DataGridViewRowColllectionTest.cs, DataGridViewTextBoxColumnTest.cs
-
-2007-07-23  Rolf Bjarne Kvinge <RKvinge at novell.com> 
-
-	* System.Windows.Forms_test.dll.sources: Added
-	  ArrangedElementCollectionTest.cs
-
-2007-07-20  Rolf Bjarne Kvinge <RKvinge at novell.com> 
-
-	* System.Windows.Forms_test.dll.sources: Unified ComboBoxTest.cs and
-	  ComboBoxTests.cs, deleted ComboBoxTests.cs
-	* SWF2k5-tests.csproj: Updated.
-
-2007-07-12  Rolf Bjarne Kvinge <RKvinge at novell.com> 
-
-	* build-csproj2k5-tests: Remove warnings.
-	* SWF2k5.csproj, SWF2k5-tests.csproj: Updated.
-	* build-csproj2k5: Ignore obsolete warnings in VS as well.
-
-2007-07-12  Rolf Bjarne Kvinge <RKvinge at novell.com> 
-
-	* Makefile: Ignore obsolete warnings.
-
-2007-07-09  Jonathan Pobst  <monkey at jpobst.com>
-
-	* System.Windows.Forms.dll.sources: Add PowerStatus.cs.
-
-2007-07-03  Jonathan Pobst  <monkey at jpobst.com>
-
-	* System.Windows.Forms.dll.sources: Add ToolStripSystemRenderer, ToolStripPainter.
-
-2007-06-15  Jonathan Pobst  <monkey at jpobst.com>
-
-	* System.Windows.Forms.dll.sources: Add ToolStripDropDownItemAccessibleObject.cs.
-
-2007-06-08  Jonathan Pobst  <monkey at jpobst.com>
-
-	* Makefile, System.Windows.Forms.dll.resources: Added image-missing.png,
-	image-x-generic.png for PictureBox.
-
-2007-06-08  Jonathan Pobst  <monkey at jpobst.com>
-
-	* System.Windows.Forms_test.dll.sources: Add PanelTest.cs. 
-
-2007-06-06  Jonathan Pobst  <monkey at jpobst.com>
-
-	* System.Windows.Forms_test.dll.sources: Add ButtonBaseTest.cs. 
-
-2007-06-05  Andreia Gaita  <avidigal at novell.com>
-
-	* build-csproj, build-csproj2k5, swf.csproj, SWF2k5.csproj: 
-	Move external Consts.cs and MonoTODOAttribute.cs dependencies 
-	to the mwf tree, change the build scripts accordingly (so a 
-	user can compile and debug with mwf without having all the mono 
-	source tree). 
-	Remove Mono.Posix reference from build-csproj2k5. 
-	Fix conditional compilation symbols (NET_1_1 should also be 
-	defined on 2.0)
-	Synch up the *.csproj files
-
-2007-05-25  Rolf Bjarne Kvinge  <RKvinge at novell.com>
-
-	* System.Windows.Forms_test.dll.sources: Added KeyEventArgsTest.cs
-
-2007-05-21  Andreia Gaita  <avidigal at novell.com>
-
-	* System.Windows.Forms.dll.sources: Add ResXDataNode.cs
-	* System.Windows.Forms_test.dll.sources: Add ResXDataNodeTest.cs
-
-2007-05-19  Andreia Gaita  <avidigal at novell.com>
-
-	* System.Windows.Forms.dll.sources: Add NumericUpDownAcceleration.cs,
-	NumericUpDownAccelerationCollection.cs
-	* System.Windows.Forms_test.dll.sources: Add NumericUpDownTest.cs
-
-2007-05-18  Jonathan Pobst  <monkey at jpobst.com>
-
-	* System.Windows.Forms_test.dll.sources: Add DataObjectTest.cs. 
-
-2007-05-18  Rolf Bjarne Kvinge <RKvinge at novell.com> 
-
-	* System.Windows.Forms.dll.sources: Added DrawToolTipEventArgs.cs and
-	  DrawToolTipEventHandler.cs
-
-2007-05-17  Jonathan Pobst  <monkey at jpobst.com>
-
-	* System.Windows.Forms_test.dll.sources: Add KeysConverterTest, 
-	LinkConverterTest.cs.
-	* System.Windows.Forms.dll.sources: Add LinkConverter.cs.
-
-2007-05-17  Jonathan Pobst  <monkey at jpobst.com>
-
-	* System.Windows.Forms_test.dll.sources: Add TreeViewImageIndexConverterTest.cs.
-
-2007-05-16  Jonathan Pobst  <monkey at jpobst.com>
-
-	* System.Windows.Forms.dll.sources: Add ImageKeyConverter.cs,
-	TreeViewImageKeyConverter.cs.
-	* System.Windows.Forms_test.dll.sources: Add ImageKeyConverterTest.cs,
-	TreeViewImageKeyConverterTest.cs.
-
-2007-05-16  Olivier Dufour  <olivier.duff at free.fr>
-
-	* ColumnHeaderConverter: Added
-	
-2007-05-10  Gert Driesen  <drieseng at users.sourceforge.net>
-
-	* System.Windows.Forms_test.dll.sources: Added
-	ToolStripItemCollectionTest.cs.
-
-2007-05-04  Rolf Bjarne Kvinge  <RKvinge at novell.com>
-
-	* System.Windows.Forms_test.dll.sources: Added MaskedTextBoxTest.cs
-
-2007-04-30  Gert Driesen  <drieseng at users.sourceforge.net>
-
-	* System.Windows.Forms_test.dll.sources: Added
-	DataGridViewTextBoxCellTest.cs
-
-2007-04-29  Duncan Mak  <duncan at a-chinaman.com>
-
-	* SWF.csproj: 
-	* SWF2k5.csproj: Updated.
-
-2007-04-26  Jonathan Pobst  <monkey at jpobst.com>
-
-	* System.Windows.Forms.dll.sources: Add DrawListViewColumnHeaderEventHandler.cs,
-	DrawListViewItemEventHandler.cs, DrawListViewSubItemEventHandler.cs.
-
-2007-04-24  Jonathan Pobst  <monkey at jpobst.com>
-
-	* Makefile: Add new resources for BindingNavigator to build.
-
-2007-04-24  Alan McGovern <alan.mcgovern at gmail.com>
-
-	* System.Windows.Forms.dll.resources - Added files for the BindingNavigator
-
-2007-04-24  Rolf Bjarne Kvinge <RKvinge at novell.com> 
-
-	* SWF.csproj, SWF2k5.csproj, SWF2k5-tests.csproj: Update.
-	* System.Windows.Forms.dll.sources: Add MaskedTextBox.
-
-2007-04-24  Alan McGovern  <alan.mcgovern at gmail.com>
-
-	* System.Windows.Forms.dll.sources: Added
-		BindingNavigator.cs
-		BindingNavigatorTests.cs
-				
-2007-04-23  Jonathan Pobst  <monkey at jpobst.com>
-
-	* System.Windows.Forms_test.dll.sources: Add TableLayoutTest.cs.
-
-2007-04-22  Alan McGovern  <alan.mcgovern at gmail.com>
-
-	* System.Windows.Forms.dll.sources:
-	Stubbed and added:
-		DrawListViewColumnHeaderEventArgs.cs
-		DrawListViewColumnHeaderEventArgs.cs
-		DrawListViewColumnHeaderEventArgs.cs
-
-2007-04-15  Andreia Gaita  <avidigal at novell.com>
-
-	* System.Windows.Forms.dll.sources: Add ThemeElementsClearlooks, 
-	ThemeElementsGtk, ThemeElementsNice, Nice/ButtonPainter, 
-	Default/TabControlPainter and Default/ButtonPainter
-
-2007-04-01  Alp Toker  <alp at atoker.com>
-
-	* build-csproj:
-	* build-csproj2k5:
-	* build-csproj2k5-tests: Use bash, not sh. These scripts do run with
-	POSIX sh but they produce incorrect output containing binary garbage.
-	Output is correct when 'bash' is used instead of 'sh'.
-
-2007-03-30  Jonathan Pobst  <monkey at jpobst.com>
-
-	* System.Windows.Forms.dll.sources: Add ScrollProperties, 
-	HScrollProperties, and VScrollProperties.
-	* System.Windows.Forms_test.dll.sources: Add HScrollPropertiesTest and
-	VScrollPropertiesTest.
-
-2007-03-28  Jonathan Pobst  <monkey at jpobst.com>
-
-	* System.Windows.Forms_test.dll.sources: Add StatusStripTest.cs,
-	ToolStripContainerTest.cs, ToolStripContentPanelTest.cs,
-	ToolStripDropDownTest.cs, ToolStripManagerTest.cs, 
-	ToolStripOverflowButtonTest.cs, ToolStripOverflowTest.cs
-	ToolStripPanelTest.cs, ToolStripStatusLabelTest.cs.
-
-2007-03-13  Gert Driesen  <drieseng at users.sourceforge.net>
-
-	* System.Windows.Forms_test.dll.sources: Added ErrorProviderTest.cs.
-
-2007-03-10  Gert Driesen  <drieseng at users.sourceforge.net>
-
-	* Makefile: Added 32x32 icon.
-
-2007-03-09  Rolf Bjarne Kvinge <RKvinge at novell.com> 
-
-	* System.Windows.Forms_test.dll.sources: Added FormHandleTest and 
-	MdiFormHandleTest.
-
-2007-03-08  Chris Toshok <toshok at ximian.com>
-
-	* System.Windows.Forms/DataGrid.cs: some field renaming to make things consistent.
-
-	* System.Windows.Forms/ThemeWin32Classic.cs: same.
-
-2007-03-02  Rolf Bjarne Kvinge <RKvinge at novell.com> 
-
-	* Makefile: Don't show obsolete warnings when compiling tests.
-
-2007-03-02  Jonathan Pobst  <monkey at jpobst.com>
-
-	* System.Windows.Forms.dll.sources: Add ThemeElements.cs,
-	ThemeElementsDefault.cs.
-
-2007-03-02  Rolf Bjarne Kvinge <RKvinge at novell.com> 
-
-	* System.Windows.Forms.dll.sources: Added FormWindowManager.cs and
-	  ToolWindowManager.cs
-	* Test/System.Windows.Forms/FormTest.cs: Added
-	  MaximizedParentedFormTest.
-
-2007-02-27  Jonathan Pobst  <monkey at jpobst.com>
-
-	* System.Windows.Forms.dll.sources: Add RelatedImageListAttribute.cs.
-
-2007-02-18  Gert Driesen  <drieseng at users.sourceforge.net>
-
-	* System.Windows.Forms_test.dll.sources: add SaveFileDialogTest.cs.
-
-2007-02-14  Rolf Bjarne Kvinge  <RKvinge at novell.com>
-
-	* System.Windows.Forms_test.dll.sources: add EventLogger.cs
-
-2007-02-13  Rolf Bjarne Kvinge  <RKvinge at novell.com>
-
-	* build-csproj2k5-tests: Added to be able to create SWF2k5-tests.csproj.
-	* SWF2k5-tests.csproj: Added.
-
-2007-02-09  Chris Toshok  <toshok at ximian.com>
-
-	* System.Windows.Forms_test.dll.sources: add ControlHandleTest.cs
-
-2007-02-08  Jonathan Pobst  <monkey at jpobst.com>
-
-	* System.Windows.Forms.dll.sources: Add ToolStripOverflow.cs,
-	ToolStripOverflowButton.cs.
-
-2007-02-07  Gert Driesen  <drieseng at users.sourceforge.net>
-
-	* System.Windows.Forms_test.dll.sources: Add DataGridViewColumnTest.cs.
-
-2007-02-06  Rolf Bjarne Kvinge  <RKvinge at novell.com>
-	
-	* System.Windows.Forms_test.dll.sources: Add TimerTest.cs
-
-2007-02-04  Gert Driesen  <drieseng at users.sourceforge.net>
-
-	* System.Windows.Forms_test.dll.sources: ResXResourceReaderTest.cs,
-	ResXFileRefTest.cs and Consts.cs.
-
-2007-02-03  Rolf Bjarne Kvinge  <RKvinge at novell.com>
-
-	* System.Windows.Forms_test.dll.sources: Add ControlLogger.cs and ControlLogger2.cs
-
-2007-01-26  Jonathan Pobst  <monkey at jpobst.com>
-
-	* System.Windows.Forms.dll.sources: Add PaddingConverter.cs.
-	* System.Windows.Forms_test.dll.sources: Add PaddingConverterTest.cs.
-
-2007-01-25  Chris Toshok  <toshok at ximian.com>
-
-	* System.Windows.Forms_test.dll.sources: add SplitterTest.cs
-
-2007-01-18  Jonathan Pobst  <monkey at jpobst.com>
-
-	* System.Windows.Forms_test.dll: Add NotifyIconTest.cs.
-
-2007-01-16  Jonathan Pobst  <monkey at jpobst.com>
-
-	* System.Windows.Forms_test.dll: Add ControlCollectionTest.cs,
-	MenuStripTest.cs, ToolStripMenuItemTest.cs.
-
-2007-01-04  Jonathan Pobst  <monkey at jpobst.com>
-
-	* System.Windows.Forms_test.dll: Add ControlPropertyEventsTest.cs.
-
-2007-01-04  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* System.Windows.Forms_test.dll: Add ColumnHeaderTest.cs
-
-2007-01-04  Jonathan Pobst  <monkey at jpobst.com>
-
-	* System.Windows.Forms_test.dll: Add LinkAreaTest.cs and HelpProviderTest.cs.
-
-2006-12-30  Chris Toshok  <toshok at ximian.com>
-
-	* Makefile (TEST_HARNESS_LOCAL_EXCLUDES): exclude Interactive
-	tests.
-
-2006-12-28  Chris Toshok  <toshok at ximian.com>
-
-	* System.Windows.Forms_test.dll.sources: add DefaultLayoutTest and
-	remove DockingTests.
-
-2006-12-27  Gert Driesen  <drieseng at users.sourceforge.net>
-
-	* System.Windows.Forms_test.dll.sources: Add ScrollableControlTest.cs.
-
-2006-12-23  Chris Toshok  <toshok at ximian.com>
-
-	* System.Windows.Forms_test.dll.sources: add
-	System.Windows.Forms.Layout/TableLayoutSettingsTypeConverterTest.cs.
-
-	* System.Windows.Forms.dll.sources: add
-	System.Windows.Forms.Layout/TableLayoutSettingsTypeConverter.cs.
-
-	* *.csproj: sync with new file.
-	
-2006-12-23  Daniel Nauck  <dna at mono-project.de>
-
-	* System.Windows.Forms_test.dll.sources: Add
-		UserControlTest.cs
-
-2006-12-21  Jonathan Pobst  <monkey at jpobst.com>
-
-	* System.Windows.Forms.dll.sources: Add TableLayoutControlCollection.cs,
-	move TableLayout to /Layout.
-
-2006-12-21  Rolf Bjarne Kvinge  <RKvinge at novell.com>
-
-	* build-csproj2k5: set WarningLevel to 3 and
-	add ChangeLogs
-
-2006-12-20  Chris Toshok  <toshok at ximian.com>
-
-	* SWF.csproj: reflect removal of
-	DataGridViewRowsDeletedEventArgs.cs.
-
-	* SWF2k5.csproj: same.
-
-	* System.Windows.Forms.dll.sources: remove of
-	DataGridViewRowsDeletedEventArgs.cs.
-
-	* System.Windows.Forms_test.dll.sources: remove
-	DataGridViewBandTest.cs.
-
-2006-12-19  Chris Toshok  <toshok at ximian.com>
-
-	* System.Windows.Forms_test.dll.sources: add RowStyleTest and
-	ColumnStyleTest.
-
-2006-12-17  Daniel Nauck  <dna at mono-project.de>
-
-	* System.Windows.Forms.dll.sources: Add
-		ListViewHitTestInfo
-
-2006-12-17  Daniel Nauck  <dna at mono-project.de>
-
-	* System.Windows.Forms.dll.sources: Add
-		DockingAttribute.cs, FlatButtonAppearance.cs
-
-2006-12-17  Chris Toshok  <toshok at ximian.com>
-
-	* build-csproj2k5: a couple of changes.  use "exec >" instead of
-	redirecting the output from every function, use multiple patterns
-	in our sed calls instead of including multiple sed invocations,
-	and use sed instead of tr for converting / to \.
-
-2006-12-16  Daniel Nauck  <dna at mono-project.de>
-
-	* System.Windows.Forms.dll.sources: Add
-		AutoCompleteStringCollection.cs
-	* System.Windows.Forms_test.dll.sources: Add
-		AutoCompleteStringCollectionTest.cs
-
-2006-12-16  Chris Toshok  <toshok at ximian.com>
-
-	* SWF.csproj, SWF2k5.csproj: resync these.
-	
-	* Makefile (EXTRA_DISTFILES): add build-csproj2k5
-	
-	Also, make both SWF.csproj and SWF2k5.csproj depend on the scripts
-	which generate them.  That way if you're hacking on the script you
-	don't have to touch System.Windows.Forms.dll.sources every time
-	you want to update the output.
-
-	* build-csproj2k5: make some changes suggested by Marek:
-
-	- System.XML should be System.Xml.
-	- Change eol-style to native.
-	- remove the SubType's from all the .cs Compile elements.
-	- Add Mono.Posix if the configuration is DebugXBuild (can't test this though..)
-
-2006-12-15  Chris Toshok  <toshok at ximian.com>
-
-	* Makefile: add targets for the 2k5 csproj.
-
-	* build-csproj2k5: new script to build vs2005 specific projects.
-	use SWF2k5.sln instead of SWF.sln and upgrading.  The 2005 project
-	doesn't have the problems with resources that the 2003 project
-	has.  The only remaining stumbling block for use is Consts.cs.
-
-	* SWF2k5.sln, SWF2k5.csproj: visual studio 2005 versions of these
-	files.
-	
-2006-12-16  Daniel Nauck  <dna at mono-project.de>
-
-	* System.Windows.Forms_test.dll.sources: Add
-		PaddingTest.cs
-
-2006-12-15  Daniel Nauck  <dna at mono-project.de>
-
-	* System.Windows.Forms.dll.sources: Add
-		ListViewGroup.cs, ListViewGroupCollection.cs
-	* SWF.csproj: Add
-		ListViewGroup.cs, ListViewGroupCollection.cs
-	* System.Windows.Forms_test.dll.sources: Add
-		ListViewGroupTest.cs, ListViewGroupCollectionTest.cs
-
-2006-12-06  Jonathan Pobst  <monkey at jpobst.com>
-
-	* System.Windows.Forms.dll.sources: Added FormCollection.cs.
-
-2006-12-05  Jonathan Chambers  <joncham at gmail.com>
-
-	* System.Windows.Forms.dll.sources: Added DrawTreeNodeEventArgs.cs.
-	
-2006-12-01  Chris Toshok  <toshok at ximian.com>
-
-	* System.Windows.Forms.dll.sources: add IBindableComponent.cs
-
-2006-11-30  Jonathan Pobst  <monkey at jpobst.com>
-
-	* System.Windows.Forms.dll.sources: Add
-		ContextMenuStrip.cs, ToolStripContainer.cs,
-		ToolStripDropDownButton.cs, ToolStripDropDownMenu.cs,
-		ToolStripManager.cs, ToolStripPanelRow.cs,
-		ToolStripSplitButton.cs.
-	  Remove ToolStripMenuTracker.cs.
-
-2006-11-29  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* System.Windows.Forms.dll.sources: Add NumericTextBox.cs.
-
-2006-11-09  Alexander Olk  <alex.olk at googlemail.com>
-
-	* System.Windows.Forms_test.dll.sources: Added CommonDialogsTest.cs.
-
-2006-11-08  Chris Toshok  <toshok at ximian.com>
-
-	* System.Windows.Forms.dll.sources: add RootGridEntry.cs
-
-2006-11-09  Jonathan Pobst  <monkey at jpobst.com>
-	
-	* System.Windows.Forms.dll.sources: 
-	Add ToolStripItemDesignerAvailability.cs and
-	ToolStripItemDesignerAvailabilityAttribute.cs.
-
-2006-11-07  Jonathan Pobst  <monkey at jpobst.com>
-	
-	* System.Windows.Forms.dll.sources: Add StatusStrip.cs,
-	  ToolStripStatusLabel.cs.
-
-2006-11-04  Gert Driesen  <drieseng at users.sourceforge.net>
-
-	* System.Windows.Forms_test.dll.sources: Added 
-	TreeNodeCollectionTest.cs.
-
-2006-10-30  Jonathan Pobst  <monkey at jpobst.com>
-	* System.Windows.Forms.dll.sources: Add ToolStripDropDown.cs,
-	  ToolStripItemEventType.cs, ToolStripMenuTracker.cs.
-
-2006-10-30  Alexander Olk  <alex.olk at googlemail.com>
-
-	* System.Windows.Forms_test.dll.sources: Added UpDownTest.cs.
-
-2006-10-13  Gert Driesen  <drieseng at users.sourceforge.net>
-
-	* System.Windows.Forms_test.dll.sources: Added PropertyGridTest.cs.
-
-2006-10-05  Jonathan Pobst  <monkey at jpobst.com>
-	* System.Windows.Forms.dll.sources: Add ToolStripComboBox.cs,
-	ToolStripControlHost.cs, ToolStripProgressBar.cs, ToolStripTextBox.cs.
-
-2006-10-03  Sebastien Pouliot  <sebastien at ximian.com> 
-
-	* System.Windows.Forms_test.dll.sources: Add ContainerControlTest.cs
-	to the unit tests build.
-
-2006-10-02  Jonathan Pobst  <monkey at jpobst.com>
-	* System.Windows.Forms.dll.sources: Add ToolStrip* classes.
-
-2006-09-18  Jonathan Pobst <monkey at jpobst.com>
-	* System.Windows.Forms.dll.sources: Add ToolStrip EventArgs/Handlers,
-	  add a few ToolStrip stub classes.
-
-2006-09-15  Jonathan Pobst <monkey at jpobst.com>
-	* System.Windows.Forms.dll.sources: Added DefaultLayout.cs, FlowLayout.cs,
-	  FlowLayoutPanel.cs, FlowLayoutSettings.cs.
-	* System.Windows.Forms_test.dll.sources: Added FlowPanelTests.cs
-
-2006-09-13  Jonathan Pobst  <monkey at jpobst.com>
-
-	* System.Windows.Forms.dll.sources: Added SplitContainer/SplitterPanel.
-	* System.Windows.Forms_test.dll.sources: Added SplitContainerTests.cs
-
-2006-09-07  Alexander Olk  <alex.olk at googlemail.com>
-
-	* resources/, System.Windows.Forms.dll.resources, Makefile:
-	  Add user-home Tango icon in various sizes.
-
-2006-09-05  KornAcl PA!l  <kornelpal at hotmail.com>
-
-	* Makefile: Removed CODEPAGE as now UTF-8 is the default.
-
-2006-08-04  Jonathan Pobst  <monkey at jpobst.com>
-	* System.Windows.Forms.dll.sources: Added 2.0 VisualStyles files.
-
-2006-07-30  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* System.Windows.Forms_test.dll.sources: Added PrintDialogTest.cs
-
-2006-07-18  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* System.Windows.Forms_test.dll.sources: Added ListControlTest.cs
-
-2006-07-14  Peter Dennis Bartok  <pbartok at novell.com> 
-
-	* System.Windows.Forms.dll.sources: Added new 2.0 event handlers
-	* System.Windows.Forms_test.dll.sources: Added EventArgsTest.cs
-	
-2006-07-14  Peter Dennis Bartok  <pbartok at novell.com>
-
-	* System.Windows.Forms.dll.sources: Added new 2.0 Enums
-
-2006-07-11  Wade Berrier <wberrier at novell.com>
-
-	* Makefile: add some files EXTRA_DISTFILES needed by the tests
-
-2006-06-23  Chris Toshok  <toshok at ximian.com>
-
-	* System.Windows.Forms_test.dll.sources: add
-	PropertyManagerTest.cs
-
-2006-06-20  Chris Toshok  <toshok at ximian.com>
-
-	* System.Windows.Forms.dll.sources: add RelatedPropertyManager.cs
-	and RelatedCurrencyManager.cs.
-
-2006-06-12  Wade Berrier <wberrier at novell.com>
-
-	* Makefile: Update for dialog-question3.png -> dialog-question.png rename
-	to fix 'make dist'
-
-2006-05-30  Wade Berrier <wberrier at novell.com>
-
-	* Makefile: oops, add some more missing resources.
-
-2006-05-30  Wade Berrier <wberrier at novell.com>
-
-	* Makefile: fix resource filenames to fix make dist
-
-2006-05-25  Miguel de Icaza  <miguel at novell.com>
-
-	* Add new dialog-*.png Tango icons (dialog-question is from a
-	different theme as Tango is still missing it).
-
-2006-05-24  Miguel de Icaza  <miguel at novell.com>
-
-	* Changes so that we can use the filename as the resource name,
-	should help compiling from within VisualStudio.
-
-2006-05-23  Miguel de Icaza  <miguel at novell.com>
-
-	* resources/: Add Tango icons in various sizes.
-
-2006-05-18  Sebastien Pouliot  <sebastien at ximian.com>
-
-	* System.Windows.Forms_test.dll.sources: Add the unit tests for
-	PaintEventArgs to the build (tested under both 1.1 and 2.0).
-
-2006-05-15  Peter Dennis Bartok  <pbartok at novell.com>
-
-	* Makefile, System.Windows.Forms.dll.resources: Added NWSE and NESW 
-	  cursors
-
-2006-04-28  Atsushi Enomoto  <atsushi at ximian.com>
-
-	* Makefile : added -r:System.Data.dll for "make test".
-
-2006-04-27  Peter Dennis Bartok  <pbartok at novell.com>
-
-	* SWF.csproj: Updated, matching current .sources
-
-2006-04-16  Gert Driesen  <drieseng at users.sourceforge.net>
-
-	* System.Windows.Forms_test.dll.sources: Added TabControlTest.cs.
-
-2006-03-21  Jackson Harper  <jackson at ximian.com>
-
-	* System.Windows.Forms.dll.resources: Add the keyboard resources.
-
-2006-03-13  Peter Dennis Bartok  <pbartok at novell.com>
-
-	* System.Windows.Forms.dll.sources: Added ProgressBarStyle.cs
-
-2006-03-11  Alexander Olk  <alex.olk at googlemail.com>
-
-	* System.Windows.Forms.dll.sources: Removed MimeGenerated.cs
-
-2006-03-09  Jonathan Gilbert  <logic at deltaq.org>
-
-	* System.Windows.Forms/AutoScaleMode.cs: Added new file for
-	  the 2.0 enumeration.
-	* System.Windows.Forms/ContainerControl.cs: Added stub for
-	  AutoScaleMode property; outputs a message to stderr to
-	  encourage people familiar with its behaviour to implement
-	  it. :-)
-	* System.Windows.Forms/Control.cs: Added stub for AutoScale;
-	  outputs a message just like ContainerControl::AutoScaleMode.
-	* System.Windows.Forms.dll.sources: Added AutoScaleMode.cs to
-	  the list of files to build.
-
-2006-02-28  Matt Hargett  <matt at use.net>
-
-	* System.Windows.Forms_test.dll.sources: Added ComboBoxTests.cs
-
-2006-1-12  Jonathan Chambers  <jonathan.chambers at ansys.com>
-
-	* build-csproj: Fixed so the csproj is usable.
-
-2006-1-12  Jonathan Chambers  <jonathan.chambers at ansys.com>
-
-	* System.Windows.Forms.dll.sources: Added PageSetupDialog.cs.
-
-2006-1-12  Jonathan Chambers  <jonathan.chambers at ansys.com>
-
-	* System.Windows.Forms.dll.sources: Added printing items and *committed* file this time.
-
-2006-1-10  Jonathan Chambers  <jonathan.chambers at ansys.com>
-
-	* System.Windows.Forms.dll.sources: Add PrintPreviewDialog and PrintPreviewControl
-
-2006-1-10  Jonathan Chambers  <jonathan.chambers at ansys.com>
-
-	* System.Windows.Forms.dll.sources: Add PrintControllerWithStatusDialog
-
-2005-12-13  Jackson Harper  <jackson at ximian.com>
-
-	* System.Windows.Forms.dll.sources: Add the new internal window
-	managers
-
-2005-12-04  Alexander Olk  <alex.olk at googlemail.com>
-
-	* System.Windows.Forms.dll.sources: Added ThemeClearlooks.cs
-
-2005-12-02  Jackson Harper  <jackson at ximian.com>
-
-	* System.Windows.Forms.dll.sources: New implicit scrollbars.
-
-2005-12-01  Robert Jordan  <robertj at gmx.net>
-
-	* System.Windows.Forms_test.dll.sources: Added
-	System.Resources/CompatTest.cs
-	System.Resources/WriterTest.cs.
-
-2005-12-01  Raja R Harinath  <rharinath at novell.com>
-
-	* Makefile (EXTRA_DISTFILES): Add Test/resources/a.cur.
-
-2005-11-30  Robert Jordan  <robertj at gmx.net>
-
-	* System.Windows.Forms_test.dll.sources: Added System.Resources/CultureTest.cs
-
-2005-11-12  Pedro MartA-nez JuliA!  <pedromj at gmail.com>
-
-	* System.Windows.Forms_test.dll.sources: Added DataGridViewElementTest.cs
-	DataGridViewBandTest.cs DataGridViewCellTest.cs
-	DataGridViewAdvancedBorderStyleTest.cs DataGridViewCellStyleTest.cs
-	DataGridViewRowTest.cs DataGridViewTest.cs
-
-2005-11-09  Peter Dennis Bartok  <pbartok at novell.com>
-
-	* System.Windows.Forms_test.dll.sources: Added RichTextBoxTest.cs
-
-2005-11-01  Peter Dennis Bartok  <pbartok at novell.com>
-
-	* Makefile, System.Windows.Forms.dll.resources, SWF.csproj: Added
-	  DnDLink cursor
-
-2005-10-31  Peter Dennis Bartok  <pbartok at novell.com>
-
-	* Makefile: Added new cursors; added dependency rule on
-	  cursors to force rebuild when cursors are changed or added
-	* System.Windows.Forms.dll.resources: Added new cursors
-
-2005-10-17  Raja R Harinath  <rharinath at novell.com>
-
-	* Makefile (RESOURCES): Distribute newly added cursors.
-
-2005-10-13  Peter Dennis Bartok  <pbartok at novell.com>
-
-	* System.Windows.Forms.dll.resources: Added cursors
-	* build-csproj: Updated to support resources
-	* SWF.csproj: Updated
-	* System.Windows.Forms.dll.sources: Removed blank line to support
-	  build-csproj
-	* System.Windows.Forms_test.dll.sources: Added ControlStyleTest
-
-2005-10-05 Hisham Mardam Bey <hisham.mardambey at gmail.com>
-
-        * Created samples/ directory.	
-
-2005-09-30  Peter Dennis Bartok  <pbartok at novell.com>
-
-	* System.Windows.Forms.dll.sources: Added X11DesktopColors.cs
-	* SWF.csproj: Updated
-
-2005-09-28 Hisham Mardam Bey <hisham.mardambey at gmail.com>
-
-	* System.Windows.Forms_test.dll.sources : Added Common.cs
-
-2005-09-27  KornAcl PA!l  <kornelpal at hotmail.com>
-
-	* Makefile: Replaced /codepage with CODEPAGE.
-
-2005-09-20  Ritvik Mayank  <mritvik at novell.com>
-
-        * System.Windows.Forms_test.dll.sources : Added pictureBoxTest.cs
-
-2005-09-09 Jonathan Chambers  <jonathan.chambers at ansys.com>
-
-	* System.Windows.Forms.dll.sources: Added IRootGridEntry.cs and PropertyGridCommands.cs
-
-2005-09-09  Hisham Mardam Bey  <hisham.mardambey at gmail.com>
-
-        * Test/System.Windows.Forms/LabelTest.cs : More tests.	
-
-2005-09-09  Hisham Mardam Bey  <hisham.mardambey at gmail.com>
-
-        * Test/System.Windows.Forms/LabelTest.cs : new Label tests (incomplete)
-        * System.Windows.Forms_test.dll.sources : add new tests
-        * System.Windows.Forms/Label.cs : give FlatStyle a default value
-	  of FlatStyle.Standard.
-
-2005-09-08  Ritvik Mayank  <mritvik at novell.com>
-	
-	* System.Windows.Forms_test.dll.sources : added MonthCalendarTest.cs
-
-2005-09-08  Peter Dennis Bartok  <pbartok at novell.com>
-
-	* System.Windows.Forms.dll.sources: Added RichTextBox.cs to build
-	* SWF.csproj: Updated
-
-2005-09-06 Jonathan Chambers  <jonathan.chambers at ansys.com>
-
-	* System.Windows.Forms.dll.sources: Added System.Windows.Forms.PropertiesTab.cs
-
-2005-09-04  Peter Dennis Bartok  <pbartok at novell.com>
-
-	* System.Windows.Forms.dll.sources: Added System.Windows.Forms.RTF
-	  subdirectory to build
-	* SWF.csproj: Updated
-
-2005-08-29  Alexander Olk  <xenomorph2 at onlinehome.de>
-
-	* System.Windows.Forms.dll.sources: Added ThemeNice.cs
-
-2005-08-29  Ritvik Mayank  <mritvik at novell.com>
-	
-	* System.Windows.Forms_test.dll.sources : added ProgressBarTest.cs,
-	  ToolBarTest.cs, ToolTipTest.cs
-	
-	  RadioButtonTest.cs, ScrollBarTest.cs and StatusBarTest.cs . 
-2005-08-25  Atsushi Enomoto  <atsushi at ximian.com>
-
-	* Makefile : added /codepage:65001 (otherwise the build gets broken
-	  on KeyboardLayout.cs on some non-iso-8859-1 environment).
-
-2005-08-18  Rafael Teixeira <rafaelteixeirabr at hotmail.com> 
-	* System.Windows.Forms/TreeView.cs: some spaces to tabs
-		FIX: ToString() was generating exception on empty Nodes 
-		(was testing <0 instead of <= 0)
-		
-2005-08-16  Ritvik Mayank  <mritvik at novell.com>
-	
-	* System.Windows.Forms_test.dll.sources : added ImageListTest.cs,
-	  RadioButtonTest.cs, ScrollBarTest.cs and StatusBarTest.cs . 
-	  
-2005-08-06  Ritvik Mayank  <mritvik at novell.com>
-	
-	* System.Windows.Forms_test.dll.sources : sorted and removed test-cases for Form
-	  and TextBox as these are still under development.
-
-2005-08-04  Peter Dennis Bartok  <pbartok at novell.com>
-
-	* SWF.csproj: Updated
-
-2005-08-02  Ritvik Mayank  <mritvik at novell.com>
-	
-	* M.gif : used by some of the test-cases
-	* System.Windows.Forms_test.dll.sources : Added test-case for
-	  ListView, ComboBox, CheckBox, CheckedList, Form, Menu, GroupBox
-	  and ImageList
-
-2005-07-07  Alexander Olk  <xenomorph2 at onlinehome.de>
-
-	* System.Windows.Forms_test.dll.sources : Added MimeIcon.cs
-
-2005-07-06  Jordi Mas i Hernandez <jordi at ximian.com>
-
-	* DataGridTextBoxColumn.cs: default value
-	* GridColumnStylesCollection.cs: fixes event firing, checking MappingName
-	* GridTableStylesCollection.cs: fixes checking MappingName
-	* DataGridDrawingLogic.cs: fixes drawing logic issues
-	* DataSourceHelper.cs: rewritten to make compatible with more data sources
-	* DataGrid.cs: fixes	
-
-
-2005-07-04  Ritvik Mayank  <mritvik at novell.com>
-
-	* System.Windows.Forms_test.dll.sources : Added ListBoxTest.cs and 
-	  ListBoxEventTest.cs for ListBox tests.
-
-2005-06-15  Peter Bartok  <pbartok at novell.com>
-
-	* System.Windows.Forms.dll.sources: Added MWFCategoryAttribute.cs and
-	  MWFDescriptionAttribute.cs
-	* SWF.csproj: Updated
-
-2005-06-15  Alexander Olk  <xenomorph2 at onlinehome.de>
-
-	* System.Windows.Forms.dll.sources: Added Mime.cs and
-	MimeGenerated.cs.
-
-2005-06-13  Jackson Harper  <jackson at ximian.com>
-
-	* SWF.csproj:
-	* System.Windows.Forms.dll.sources: Add MdiClientContext to the
-	build.
-
-2005-06-13  Ritvik Mayank  <mritvik at novell.com>
-
-	* System.Windows.Forms_test.dll.sources : Added TextBoxTest.cs
-	and ButtonTest.cs for TextBox and Button tests respectively.
-
-2005-06-10  Peter Bartok  <pbartok at novell.com>
-
-	* System.Windows.Forms.dll.sources: Add ImageListConverter.cs
-	* SWF.csproj: Updated
-
-2005-06-08  Jackson Harper  <jackson at ximian.com>
-
-	* Guidelines:
-	* Design: Double buffering is handled at a different level now, so
-	I am removing mention of it. Control developers do not need to
-	know how it works.
-
-2005-06-05  Peter Bartok  <pbartok at novell.com>
-
-	* System.Windows.Forms.dll.sources: Add Win32DnD.cs
-	* SWF.csproj: Updated
-
-2005-05-24  Jackson Harper  <jackson at ximian.com>
-
-	* System.Windows.Forms.dll.sources: Add X11Dnd.cs
-
-2005-05-24  Peter Bartok  <pbartok at novell.com>
-
-	* System.Windows.Forms.dll.sources: Added
-	  DataGridPreferredColumnWidthTypeConverter.cs
-	* SWF.csproj: Updated
-
-2005-05-24  Peter Bartok  <pbartok at novell.com>
-
-	* System.Windows.Forms.dll.sources: Added Help.cs
-	* SWF.csproj: Updated
-
-2005-05-18  Peter Bartok  <pbartok at novell.com>
-
-	* System.Windows.Forms.dll.sources: Added Clipboard.cs
-	* SWF.csproj: Update
-
-2005-05-11  Ritvik Mayank  <mritvik at novell.com>
-
-	* System.Windows.Forms_test.dll.sources : Added ControlEventTest.cs
-	for Event Test
-
-2005-05-11  Peter Bartok  <pbartok at novell.com>
-
-	* System.Windows.Forms.dll.sources: Added
-	  IDataGridEditingService.cs, System.Resources/ResXFileRef.cs,
-	  System.Resources/ResXResourceSet.cs
-	* SWF.csproj: Updated
-	
-2005-05-10  Peter Bartok  <pbartok at novell.com>
-
-	* System.Windows.Forms.dll.sources: Added SecurityIDType.cs,
-	  DataObject.cs and DataFormats.cs
-	* SWF.csproj: Update
-
-2005-05-06  Peter Bartok  <pbartok at novell.com>
-
-	* System.Windows.Forms.dll.sources: Added Screen.cs, HelpNavigator.cs
-	  and HelpProvider.cs
-	* SWF.csproj: Updated
-
-2005-05-05  Peter Bartok  <pbartok at novell.com>
-
-	* System.Windows.Forms.dll.sources: Added AxHost.cs,
-	  ErrorProvider.cs, RichTextBoxFinds.cs, RichTextBoxScrollBars.cs,
-	  RichTextBoxSelectionAttribute.cs, RichTextBoxSelectionTypes.cs,
-	  RichTextBoxStreamType.cs, RichTextBoxWordPunctuations.cs
-	* SWF.csproj: Updated
-
-2005-05-02  Ritvik Mayank  <mritvik at novell.com>
-
-	* System.Windows.Forms_test.dll.sources : Added ControlTest.cs for Label Test
-
-2005-04-26  Ritvik Mayank  <mritvik at novell.com>
-
-	* System.Windows.Forms_test.dll.sources : Added LabelPropertyTest.cs for Label Test
-
-2005-04-25  Jackson Harper  <jackson at ximian.com>
-
-	* System.Windows.Forms.dll.sources: Add CursorConvert.cs to the
-	build
-
-2005-04-09  Peter Bartok  <pbartok at novell.com>
-
-	* System.Windows.Forms.dll.sources: Added FolderBrowserDialog.cs
-
-2005-03-11  Peter Bartok  <pbartok at novell.com>
-
-	* System.Windows.Forms.dll.sources: Added MdiClient.cs
-
-2005-03-10  Peter Bartok  <pbartok at novell.com>
-
-	* System.Windows.Forms.dll.sources: Added SaveFileDialog.cs
-
-2005-03-09  Peter Bartok  <pbartok at novell.com>
-
-	* System.Windows.Forms.dll.sources: Added MdiClient.cs
-
-2005-02-24  Peter Bartok  <pbartok at novell.com>
-
-	* System.Windows.Forms.dll.sources: Removed HandleData.cs
-
-2005-02-22  Jackson Harper  <jackson at ximian.com>
-
-	* System.Windows.Forms.dll.sources: Add databinding classes
-
-2005-02-22  Raja R Harinath  <rharinath at novell.com>
-
-	* Makefile (EXTRA_DISTFILES): Add 'build-csproj'.
-	(PREBUILT): New rule to copy *.resources to *.resources.prebuilt.
-	(dist-default): Depend on it.
-
-2005-02-18  Peter Bartok  <pbartok at novell.com>
-
-	* System.Windows.Forms.dll.sources: Added MethodInvoker.cs,
-	  ErrorIconAlignment.cs, MdiLayout.cs, SendKeys.cs
-
-2005-02-18  Raja R Harinath  <rharinath at novell.com>
-
-	* Makefile (EXTRA_DISTFILES): Distribute all *.resx and
-	*.resources.prebuilt.
-
-2005-02-17  Peter Bartok  <pbartok at novell.com>
-
-	* System.Windows.Forms.dll.sources: Added DateBoldEventHandler.cs,
-	  DateBoldEventArgs.cs, UpDownEventHandler.cs, UpDownEventArgs.cs,
-	  ContentsResizedEventHandler.cs, ContentsResizedEventArgs.cs
-
-2005-02-15  Peter Bartok  <pbartok at novell.com>
-
-	* Makefile: Altered, following Harinath's suggestion of trying to
-	  build and handling the failure by copying prebuilt resources in
-	  place
-
-2005-02-15  Peter Bartok  <pbartok at novell.com>
-
-	* Makefile: Removed resources as automatic target; to build
-	  .resource files 'make resources' must be invoked. This removes
-	  the libgdiplus installed requirement. Instead, the compiled files
-	  are checked in as well.
-
-2005-02-13  Peter Bartok  <pbartok at novell.com>
-
-	* System.Windows.Forms.dll.sources: Added SelectionRangeConverter.cs,
-	  OpacityConverter.cs, KeysConverter.cs, Hwnd.cs
-	* System.Windows.Forms.dll.resources: Added
-	* Makefile: Added support for generating resources
-
-2005-02-12  Geoff Norton  <gnorton at customerdna.com>
-
-	* System.Windows.Forms.dll.sources: Added ResXNullRef.cs
-	
-2005-02-03  Peter Bartok  <pbartok at novell.com>
-
-	* System.Windows.Forms.dll.Sources: Added ComponentModel.cs and
-	  PropertyGridView.cs
-
-2005-01-30  John BouAntoun  <jba-mono at optusnet.com.au>
-
-	* System.Windows.Forms.dll.Sources: Added DateTimePicker.cs and
-	  DateTimePickerFormat.cs
-	  
-2005-01-29  Peter Bartok  <pbartok at novell.com>
-
-	* System.Windows.Forms.dll.Sources: Added ArrangeDirection.cs and
-	  ArrangeStartingPosition.cs
-	* SWF.csproj: Updated
-
-2005-01-28  Peter Bartok  <pbartok at novell.com>
-
-	* SWF.csproj: Updated with all the latest files
-	* build-csproj: Added, allows to autogenerate SWF.csproj
-	* Makefile: Added rule to automatically call build-csproj (Thanks
-	  to Geoff Norton for review and a simpler rule)
-
-2005-01-26  Peter Bartok  <pbartok at novell.com>
-
-	* System.Windows.Forms.dll.Sources: Added GridEntry.cs,
-	  GridItem.cs, GridItemCollection.cs, GridItemType.cs,
-	  PropertyGrid.cs, PropertySort.cs, PropertyTabChangedEventArgs.cs,
-	  PropertyTabChangedEventHandler.cs, PropertyValueChangedEventArgs.cs
-	  PropertyValueChangedEventHandler.cs,
-	  SelectedGridItemChangedEventArgs.cs,
-	  SelectedGridItemChangedEventHandler.cs
-
-2005-01-26  Peter Bartok  <pbartok at novell.com>
-
-	* System.Windows.Forms.dll.Sources: Added NotifyIcon.cs
-
-2005-01-16  Peter Bartok  <pbartok at novell.com>
-
-	* System.Windows.Forms.dll.Sources: Added AccessibleEvents.cs
-
-2005-01-16  Peter Bartok  <pbartok at novell.com>
-
-	* System.Windows.Forms.dll.Sources: Added Cursors.cs
-
-2005-01-11  Peter Bartok  <pbartok at novell.com>
-
-	* System.Windows.Forms.dll.Sources: Added OSXStructs.cs
-
-2005-01-05  Peter Bartok  <pbartok at novell.com>
-
-	* System.Windows.Forms.dll.Sources: Added ICommandExecutor.cs,
-	  IDataGridColumnStyleEditingNotificationService.cs,
-	  IFeatureSupport.cs, IFileReaderService.cs, AmbientProperties.cs,
-	  NavigateEventArgs.cs, NavigateEventHandler.cs, FeatureSupport.cs,
-	  OSFeature.cs, ErrorBlinkStyle.cs, ListBindingConverter.cs
-
-2004-12-27  Peter Bartok  <pbartok at novell.com>
-
-	* System.Windows.Forms.dll.Sources: Added
-	  System.Windows.Forms.Design/ComponentEditorForm.cs,
-	  System.Windows.Forms.Design/ComponentEditorPage.cs,
-	  System.Windows.Forms.Design/EventsTab.cs,
-	  System.Windows.Forms.Design/IUIService.cs,
-	  System.Windows.Forms.Design/IWindowsFormsEditorService.cs,
-	  System.Windows.Forms.Design/PropertyTab.cs,
-	  System.Windows.Forms.Design/WindowsFormsComponentEditor.cs,
-	  ColorDialog.cs, ComboBox.cs, ComboBoxStyle.cs, DataGrid.cs,
-	  DataGridLineStyle.cs, DataGridParentRowsLabelStyle.cs,
-	  DataGridTableStyle.cs, FontDialog.cs, FileDialog.cs,
-	  GridColumnStylesCollection.cs, GridTableStylesCollection.cs,
-	  IComponentEditorPageSite.cs, OpenFileDialog, Splitter.cs,
-	  SplitterEventArgs.cs, SplitterEventHandler.cs, TextBox.cs
-
-2004-12-24  Jordi Mas i Hernandez <jordi at ximian.com>
-
-	* System.Windows.Forms.dll.Sources: Added ComboBox.cs and
-	  ComboBoxStyle.cs
-
-2004-12-20  Peter Bartok  <pbartok at novell.com>
-
-	* System.Windows.Forms.dll.Sources: Added CommonDialog.cs
-
-2004-12-16  Peter Bartok  <pbartok at novell.com>
-
-	* System.Windows.Forms.dll.Sources: Added TextBoxBase.cs and
-	  TextControl.cs
-
-2004-12-15  Peter Bartok  <pbartok at novell.com>
-
-	* Design: Updated to reflect Mac Driver; added mention
-	  of System.Drawing patches for MWF support
-
-	* README: Credited Geoff Norton with the Mac driver
-
-2004-12-15  Jackson Harper  <jackson at ximian.com>
-
-	* System.Windows.Forms.dll.sources: Add keyboard love to the build.
-
-2004-12-08  Peter Bartok  <pbartok at novell.com>
-
-	* SWF.csproj: Added XplatUIOSX.cs to build list
-
-2004-12-07  Geoff Norton  <gnorton at customerdna.com>
-
-	* System.Windows.Forms.dll.sources:  Add the XplatUIOSX.cs driver.
-
-2004-12-07  Ravindra  <rkumar at novell.com>
-
-	* SWF.csproj: Added ThreadExceptionDialog.cs to project and removed
-	some of the components that were added twice. This fixes MWF build on
-	Windows.
-
-2004-12-03  Marek Safar  <marek.safar at seznam.cz>
-
-	* System.Windows.Forms.dll.sources: Add ThreadExceptionDialog.cs
-
-2004-12-03  Marek Safar  <marek.safar at seznam.cz>
-
-	* Makefile: Added System.Drawing.dll deps for tests.
-
-	* System.Windows.Forms_test.dll.sources: New test files.
-
-2004-12-02  Peter Bartok  <pbartok at novell.com>
-
-	* SWF.csproj: Added Jackson's fresly minted TreeView files to
-	  build list
-
-2004-12-01  Jackson Harper  <jackson at ximian.com>
-
-	* System.Windows.Forms.dll.sources: Add TreeNode love to the build.
-
-2004-11-30  Peter Bartok  <pbartok at novell.com>
-
-	* System.Windows.Forms.dll.sources: Removed textbox
-	  references, accidentally checked those in, but textbox is
-	  not yet ready for primetime
-
-2004-11-29  Peter Bartok  <pbartok at novell.com>
-
-	* System.Windows.Forms.dll.sources: Removed tree
-	  additions.
-	  I am removing these files as they conflict with already completed
-	  work. While it is fantastic to get contributions to MWF, I
-	  respectfully ask that everyone please coordinate their contributions
-	  through mono-winforms-list or #mono-winforms at this time. We're
-	  explicitly avoiding stubbing and don't want controls that don't have
-	  their basic functionality implemented in svn. Please also see
-	  http://www.mono-project.com/contributing/winforms.html
-	
-2004-11-29  Marek Safar  <marek.safar at seznam.cz>
-
-	* System.Windows.Forms.dll.sources: Added
-	TreeNode.cs, TreeNodeCollection.cs, TreeView.cs,
-	TreeViewAction.cs, TreeViewEventArgs.cs
-
-	* System.Windows.Forms_test.dll.sources: Added
-	TreeNodeTest.cs
-
-2004-11-24  Ravindra  <rkumar at novell.com>
-
-	* SWF.csproj: Updated project.
-
-2004-11-23  John BouAntoun <jba-mono at optusnet.com.au>
-
-	* System.Windows.Forms.dll.sources: added MonthCalendar files
-
-2004-11-21  Ravindra  <rkumar at novell.com>
-
-	* SWF.csproj: Updated project.
-
-2004-11-11  Jackson Harper  <jackson at ximian.com>
-
-	* System.Windows.Forms.dll.sources: Add
-	TreeViewImageIndexConverter.cs and OwnerDrawPropertyBag.cs to build
-
-2004-11-01 23:19  ravindra
-
-	* SWF.csproj: Updated project.
-
-2004-10-26 03:38  ravindra
-
-	* SWF.csproj: Updated project.
-
-2004-10-20 04:16  jordi
-
-	* System.Windows.Forms.dll.sources: enum need it by SystemInfo
-
-2004-10-19 16:50  jackson
-
-	* System.Windows.Forms.dll.sources: New optimized event queue
-
-2004-10-18 00:31  ravindra
-
-	* SWF.csproj, System.Windows.Forms.dll.sources: Updated sources
-	  list and project to fix the build.
-
-2004-10-15 09:14  ravindra
-
-	* SWF.csproj, System.Windows.Forms.dll.sources: Updates sources
-	  list and project.
-
-2004-10-15 06:43  jordi
-
-	* System.Windows.Forms.dll.sources: menu work, mainmenu, subitems,
-	  etc
-
-2004-10-13 21:21  ravindra
-
-	* SWF.csproj: Updated project.
-
-2004-10-04 04:58  ravindra
-
-	* SWF.csproj: Updated project.
-
-2004-10-02 12:55  pbartok
-
-	* System.Windows.Forms.dll.sources:
-	  - Added LeftRightAlignment source reference
-
-2004-09-30 07:32  ravindra
-
-	* SWF.csproj, System.Windows.Forms.dll.sources: Updated project and
-	  sources list.
-
-2004-09-29 23:02  jambunathan
-
-	* SWF.csproj: Updated csproj to include Appearance.cs, CheckBox.cs,
-	  CheckState.cs
-
-2004-09-28 14:11  jackson
-
-	* System.Windows.Forms.dll.sources: Give the build some love
-
-2004-09-28 04:31  ravindra
-
-	* Notes: Added a minor note.
-
-2004-09-28 00:18  pbartok
-
-	* Notes:
-	  - Initial check in. A place to log info about MWF that doesn't fit
-	    anywhere else
-
-2004-09-24 12:02  jackson
-
-	* System.Windows.Forms.dll.sources: Add tab classes to the build
-
-2004-09-23 01:44  ravindra
-
-	* SWF.csproj, System.Windows.Forms.dll.sources: Updated sources
-	  list and project file.
-
-2004-09-20 18:54  jackson
-
-	* Makefile: New message loop that uses poll so we don't get a busy
-	  loop
-
-2004-09-19 23:41  ravindra
-
-	* Guidelines: Added a note to Guidelines.
-
-2004-09-17 06:19  jordi
-
-	* System.Windows.Forms.dll.sources: Very early menu support
-
-2004-09-16 01:19  ravindra
-
-	* SWF.csproj, System.Windows.Forms.dll.sources: Updated project and
-	  sources list.
-
-2004-09-13 22:09  ravindra
-
-	* SWF.csproj: Updated project.
-
-2004-09-13 09:24  jordi
-
-	* System.Windows.Forms.dll.sources: Add to the build Process
-
-2004-09-09 01:15  jordi
-
-	* System.Windows.Forms.dll.sources: measureitem args and handler
-
-2004-09-09 00:03  ravindra
-
-	* SWF.csproj: Updated project.
-
-2004-09-08 23:57  ravindra
-
-	* System.Windows.Forms.dll.sources: Added some new enums to the
-	  list.
-
-2004-09-08 06:45  jordi
-
-	* System.Windows.Forms.dll.sources: enumerations need it by menus
-
-2004-09-07 11:12  jordi
-
-	* System.Windows.Forms.dll.sources: GroupBox control
-
-2004-09-02 14:28  pbartok
-
-	* System.Windows.Forms.dll.sources:
-	  - Added AccessibleNavigation and AccessibleSelection source files
-
-2004-08-31 20:52  ravindra
-
-	* Design, Guidelines: Minor formatting changes and added location
-	  for the coding style guideline for Mono.
-
-2004-08-31 19:37  pbartok
-
-	* Guidelines:
-	  - Removed wrong stuff
-
-2004-08-31 16:10  pbartok
-
-	* README:
-	  - Updated
-
-2004-08-31 03:13  ravindra
-
-	* System.Windows.Forms_test.dll.sources: Added sources list for
-	  test dll.
-
-2004-08-30 10:48  pbartok
-
-	* Design, Guidelines:
-	  - Initial check-in
-
-2004-08-29 22:35  pbartok
-
-	* System.Windows.Forms.dll.sources:
-	  - Added System.Resources source files
-
-2004-08-27 16:18  ravindra
-
-	* Makefile: Lets do some tests too.
-
-2004-08-27 16:14  ravindra
-
-	* System.Windows.Forms.dll.sources: Added ImageIndexConverter to
-	  sources.
-
-2004-08-23 13:14  pbartok
-
-	* SWF.csproj, SWF.sln:
-	  - Created properly pathed VS.Net project and solution
-
-2004-08-23 10:46  jackson
-
-	* System.Windows.Forms.dll.sources: oops. remove unused file
-
-2004-08-22 17:47  jackson
-
-	* System.Windows.Forms.dll.sources: Add PictureBox to the build
-
-2004-08-22 12:04  pbartok
-
-	* System.Windows.Forms.dll.sources:
-	  - Added Cursor.cs source
-
-2004-08-22 11:59  pbartok
-
-	* System.Windows.Forms.dll.sources:
-	  - Restored sort order for file
-	  - Added UserControl source file
-
-2004-08-20 13:10  jackson
-
-	* System.Windows.Forms.dll.sources: Classes for sending Async
-	  messages through X/Win32
-
-2004-08-19 16:25  jordi
-
-	* System.Windows.Forms.dll.sources: theme enhancaments
-
-2004-08-17 15:09  jackson
-
-	* System.Windows.Forms.dll.sources: Add Panel to the build
-
-2004-08-16 15:24  jackson
-
-	* System.Windows.Forms.dll.sources: HandleData is used for storing
-	  message information for window handles
-
-2004-08-16 08:59  pbartok
-
-	* System.Windows.Forms.dll.sources:
-	  - Added ButtonBase.cs
-
-2004-08-15 17:22  ravindra
-
-	* System.Windows.Forms.dll.sources: Updated sources list for
-	  ToolBar Control.
-
-2004-08-13 10:25  jackson
-
-	* System.Windows.Forms.dll.sources: SWF Timer
-
-2004-08-12 10:19  jackson
-
-	* System.Windows.Forms.dll.sources: Classes for handling status bar
-	  panel click events
-
-2004-08-11 15:24  pbartok
-
-	* System.Windows.Forms.dll.sources:
-	  - Fixed filename for BindingManagerBase.cs
-	  - Alphabetized files
-
-2004-08-10 19:11  jackson
-
-	* System.Windows.Forms.dll.sources: Add StatusBarDrawItem stuff to
-	  build
-
-2004-08-10 12:59  jackson
-
-	* System.Windows.Forms.dll.sources: Add Draw Item
-
-2004-08-09 15:40  jackson
-
-	* System.Windows.Forms.dll.sources: Add status bar panel files to
-	  the build
-
-2004-08-07 17:01  jackson
-
-	* System.Windows.Forms.dll.sources: Add HorizontalAlignment enum to
-	  build
-
-2004-07-26 11:42  jordi
-
-	* System.Windows.Forms.dll.sources: Theme support
-
-2004-07-26 05:41  jordi
-
-	* System.Windows.Forms.dll.sources: initial messagebox
-	  implementation
-
-2004-07-21 10:19  jordi
-
-	* System.Windows.Forms.dll.sources: LinkLabel control
-	  implementation
-
-2004-07-16 05:18  jordi
-
-	* System.Windows.Forms.dll.sources: add ImageList,
-	  ImageListStreamer, and ColorDepth to the build process
-
-2004-07-15 03:38  jordi
-
-	* System.Windows.Forms.dll.sources: Horizontal and Vertical
-	  TrackBar control implementation
-
-2004-07-13 09:33  jordi
-
-	* System.Windows.Forms.dll.sources: vertical and hort. classes
-	  commit
-
-2004-07-08 23:21  pbartok
-
-	* Makefile, README, System.Windows.Forms.dll.sources:
-	  - Initial check-in
-
diff --git a/mcs/class/Managed.Windows.Forms/Makefile b/mcs/class/Managed.Windows.Forms/Makefile
index 0e1eba8..2e09acd 100644
--- a/mcs/class/Managed.Windows.Forms/Makefile
+++ b/mcs/class/Managed.Windows.Forms/Makefile
@@ -9,7 +9,7 @@ LIB_MCS_FLAGS = /unsafe \
 	/r:System.Data.dll /r:Mono.Posix.dll \
 	/r:Mono.WebBrowser \
 	@System.Windows.Forms.dll.resources \
-	-debug -nowarn:618,612,809
+	-nowarn:618,612,809
 
 ifneq (1, $(FRAMEWORK_VERSION_MAJOR))
 LIB_MCS_FLAGS += /r:System.Configuration.dll
@@ -21,6 +21,8 @@ endif
 
 RESX_RESOURCES = \
 	resources/keyboards.resources
+	
+CLEAN_FILES += $(RESX_RESOURCES)
 
 CUR_RESOURCES = resources/NWSE.cur resources/NESW.cur \
 	resources/SplitterNS.cur \
diff --git a/mcs/class/Managed.Windows.Forms/System.Resources/ChangeLog b/mcs/class/Managed.Windows.Forms/System.Resources/ChangeLog
index b4598e7..b0276bd 100644
--- a/mcs/class/Managed.Windows.Forms/System.Resources/ChangeLog
+++ b/mcs/class/Managed.Windows.Forms/System.Resources/ChangeLog
@@ -1,12 +1,3 @@
-2010-10-31  Nikolaos Georgiou  <Nikolaos.Georgiou at gmail.com>
-
-	Changed new method back to private, it was accidentally public.
-
-2010-10-31  Nikolaos Georgiou  <Nikolaos.Georgiou at gmail.com>
-
-	Modified ResXResourceWriter so that the comment of ResXNode is not
-	lost. Added unit test.
-
 2010-02-23 Gonzalo Paniagua Javier <gonzalo at novell.com>
 
 	* ResXResourceReader.cs: handle resource file comments.
diff --git a/mcs/class/Managed.Windows.Forms/System.Resources/ChangeLog.old b/mcs/class/Managed.Windows.Forms/System.Resources/ChangeLog.old
deleted file mode 100644
index b0276bd..0000000
--- a/mcs/class/Managed.Windows.Forms/System.Resources/ChangeLog.old
+++ /dev/null
@@ -1,254 +0,0 @@
-2010-02-23 Gonzalo Paniagua Javier <gonzalo at novell.com>
-
-	* ResXResourceReader.cs: handle resource file comments.
-	Patch by Jeffrey Alvarez. Bug #582440 fixed.
-
-2009-02-24  Marek Habersack  <mhabersack at novell.com>
-
-	* ResXFileRef.cs: the class must be internal when compiled as part
-	of System.Web
-
-2008-04-18  Marek Habersack  <mhabersack at novell.com>
-
-	* ResXResourceWriter.cs, ResXResourceReader.cs, ResXDataNode.cs,
-	ResXFileRef.cs: if compiled as part of System.Web, make the
-	classes internal.
-
-2008-04-06  Gert Driesen  <drieseng at users.sourceforge.net>
-
-	* ResXDataNode.cs: Modified argument name to fix corcompare error.
-
-2008-03-04  Jonathan Pobst  <monkey at jpobst.com>
-
-	* ResXResourceWriter.cs: Implement or stub the remaining 2.0 bits
-	to this.
-
-2008-01-27  Gert Driesen  <drieseng at users.sourceforge.net>
-
-	* ResXResourceReader.cs: Avoid unnecessary initialization of
-	useResXDataNodes field. Modified argument names to match MS. When
-	UseResXDataNodes is true, then never use the metadata hashtable.
-	* ResXFileRef.cs: Only support convert from fileref to MemoryStream
-	on 2.0 profile.
-	* ResXResourceWriter.cs: Modified argument names to match MS.
-	* ResXDataNode: Fixed line endings.
-
-2008-01-21  Zoltan Varga  <vargaz at gmail.com>
-
-	* ResXFileRef.cs (ConvertFrom): Add special support for MemoryStream. Fixes
-	#354994.
-
-2008-01-20  Olivier Dufour <olivier.duff at gmail.com>
-
-	* ResXDataNode.cs: Add GetNodePosition, GetValueTypeName, GetValue
-	* ResXResourceReader.cs: Add Node Position
-
-2007-12-07  Atsushi Enomoto  <atsushi at ximian.com>
-
-	* ResXResourceReader.cs: fix build.
-
-2007-12-01  Olivier Dufour <olivier.duff at gmail.com>
-
-	* ResXResourceReader.cs: Add support of assemblyName, metadata and useResXDataNode. 
-
-2007-09-09  Gert Driesen  <drieseng at users.sourceforge.net>
-
-	* ResXResourceReader.cs: First consider MIME type, if set, regardless
-	of the presence of a type attribute. Only convert from base64 string
-	if "mimetype" is "...bytearray.base64" and type is set. When no MIME
-	type is set, ignore value of resource with a type, if the type is not
-	byte [] or has no TypeConverter that can convert from string. On 1.0
-	profile, use string value if "mimetype" or "type" are set and no
-	conversion was done.
-
-2007-05-23  Andreia Gaita <avidigal at novell.com>
-
-	* ResXResourceReader.cs: Ignore comment nodes, for now. Fix 
-	failing tests.
-
-2007-05-23  Andreia Gaita <avidigal at novell.com>
-
-	* ResXResourceReader.cs: Fix CDATA detection
-
-2007-05-21  Andreia Gaita <avidigal at novell.com>
-
-	* ResXDataNode.cs: Added
-	* ResXResourceWriter.cs: Add 2.0 support for ResXDataNode resource.
-	* ResXResourceReader.cs: Added support for comment nodes (coming from
-	ResXDataNode), fix bug on GetDataValue, refactor code to guidelines.
-
-2007-04-18  Gert Driesen  <drieseng at users.sourceforge.net>
-
-	* ResXFileRef.cs: byte [] is only supported on 2.0 profile.
-
-2007-03-12   Frederik Carlier <frederik.carlier at ugent.be>
-
-	* ResXFileRef.cs: Add support for byte[] types.
-
-	Fixes 81122
-
-2007-03-10  Gert Driesen  <drieseng at users.sourceforge.net>
-
-	* ResXFileRef.cs: On 2.0 profile, special case files with .ico 
-	extension to retain their actual dimension.
-
-2007-02-10  Gert Driesen  <drieseng at users.sourceforge.net>
-
-	* ResXResourceReader.cs: Add additional checks for validity of reader
-	and writer.
-
-2007-02-04  Gert Driesen  <drieseng at users.sourceforge.net>
-
-	* ResXResourceReader.cs: Added support for BasePath (2.0 only). Lazy load
-	resources in GetEnumerator. Always verify resheader (resmimetype). When
-	loading resources from file, release file once reading is finished.
-	Exception compatibility fixes. Allow data & resheader elements to be in
-	non-default namespace. Do not allow data element without name.
-	* ResXFileRef.cs: In ConvertFrom, return null if value is not a string.
-	On 2.0 profile, throw ArgumentException if value consists of only a single
-	part. Added FileName, TypeName, TextFileEncoding property (public on
-	2.0 only). Fixed ToString to including encoding.
-
-2007-01-29  Marek Habersack  <grendello at gmail.com>
-
-	* ResXFileRef.cs: Remove extra ;utf8 from the System.String name
-
-2007-01-29  Miguel de Icaza  <miguel at novell.com>
-
-	* ResXFileRef.cs: Catch the string case and create strings with
-	the specified encoding from its string source.
-
-2006-12-29  Gert Driesen  <drieseng at users.sourceforge.net>
-
-	* ResXResourceReader.cs: For invalid mime type, return value as string
-	on 1.0 profile. This matches MS.
-
-2006-10-03  Robert Jordan  <robertj at gmx.net>
-
-	* ResXResourceReader.cs: Factor out parse_data_node () from load_data ()
-	to be able to correctly handle data nodes that occur before resheader.
-	Fix the handling of objects that have a byte[] converter.
-	Use the type resolver.
-
-	* ResXResourceWriter.cs: Fix AddResource (string, object) to accept
-	only serializable type, matching MS.NET.
-	Fix WriteBytes to not emit the mimetype attribute when the
-	type is byte[], otherwise MS.NET won't parse correctly.
-
-2006-10-02  Sebastien Pouliot  <sebastien at ximian.com>
-
-	* ResXResourceReader.cs: Handle empty mimetype just like a null 
-	mimetype. Fix bug #77481.
-	* ResXResourceWriter.cs: Fix to InitWriter method by Atsushi. Fix
-	bug #79039.
-
-2006-03-29  Mike Kestner  <mkestner at novell.com>
-
-	* ResXResourceWriter.cs: Make Dispose() virtual.
-
-2006-01-14  Robert Jordan  <robertj at gmx.net>
-
-	* ResXResourceReader.cs: Fix for bug #77253. Thanks to Marek Habersack
-	(grendello at gmail.com).
-
-2005-12-05  Peter Bartok  <pbartok at novell.com>
-
-	* ResXResourceReader.cs: Removed previous patch. More than just Byte[]
-	  has that mime type and the patch was causing things to fail.
-	  Since our writer no longer emits the mimetype this should be fine.
-
-2005-12-01  Robert Jordan  <robertj at gmx.net>
-
-	* ResXResourceReader.cs: Handle mimetype="application/x-microsoft.net.object.bytearray.base64" correctly. Fixes the decoding of System.Byte[].
-	* ResXResourceWriter.cs: Fixed AddResource (string, object) to pass
-	control to AddResource (string, byte[]) if the value parameter is
-	a byte[]. Removed the emitting of the mimetype attribute for
-	System.Byte[].
-
-2005-11-30  Peter Bartok  <pbartok at novell.com>
-
-	* ResXResourceReader.cs: Handle System.Byte[] encodings without
-	  needing a typeconverter (This fixes bug #76414)
-
-2005-11-30  Robert Jordan  <robertj at gmx.net>
-
-	* ResXResourceReader.cs, ResXResourceWriter.cs: Made string conversions
-	culture-invariant.
-	* ResXResourceWriter.cs: Fixed AddResource (string, object) to emit
-	the type attribute when the object has a type converter.
-
-2005-10-04  Peter Bartok  <pbartok at novell.com>
-
-	* ResXResourceReader.cs, ResXResourceWriter.cs: Added call
-	  to GC.SuppressFinalize() in dispose method. Fixes #76330
-
-2005-05-13  Peter Bartok  <pbartok at novell.com>
-
-	* ResXResourceWriter.cs: 
-	  - Fixed/Improved AddResource(), now only uses string converter if 
-	    the converter supports both directions
-	  - Added ability for AddResource(string, object) to detect if
-	    a byte[] converter is supported for the object, if so it now calls
-	    AddResource(string, byte[]) for those
-	  - WriteBytes: Changed to write it's base64 output as pretty 
-	    as Microsoft's, inserting newlines every 80 chars
-	  - WriteBytes: Added output of mimetype even if type is specified
-
-2005-05-11  Peter Bartok  <pbartok at novell.com>
-
-	* ResXResourceSet.cs: Implemented
-	* ResXFileRef.cs: Implemented
-	* ResXNullRef.cs: Added missing attribute
-	* ResXResourceReader.cs: Implemented missing .ctor()s and other
-	  assorted fun stuff, should now be complete
-	* ResResourceWriter.cs: Implemented missing methods and added
-	  missing static fields
-
-2005-04-14  Jackson Harper  <jackson at ximian.com>
-
-	* ResXResourceReader.cs: Use serialization on values that have a
-	mime type set but no type.
-
-2005-02-16  Peter Bartok  <pbartok at novell.com>
-
-	* ResXResourceReader.cs, ResXResourceWriter.cs: Removed sealed
-	  attribute from classes
-
-2005-02-12  Geoff Norton  (gnorton at customerdna.com)
-
-	* ResXResourceReader.cs (load_data): Undo previous change as
-	ResXNullRef is now properly handled.
-	* ResXNullRef.cs: Added
-	
-2005-02-11  Geoff Norton  (gnorton at customerdna.com)
-
-	* ResXResourceReader.cs (load_data): Temporarily re-introduce the 
-	old failure for types that we cannot yet handle to allow Npgsql to
-	build.
-	
-2005-02-11  Raja R Harinath  <rharinath at novell.com>
-
-	* ResXResourceReader.cs (load_data): Make exception more informative.
-
-2005-02-10  Geoff Norton  <gnorton at customerdna.com>
-
-	* ResXResourceReader.cs: Implement the ability to convert the
-	MS Base64 encoded objects.  Implement the ability to convert objects
-	to their type rather than just to string.
-
-2004-11-08 14:28  pbartok
-
-	* ResXResourceReader.cs:
-	  - BenM's Fix for bug 68260
-
-2004-10-13 08:14  pbartok
-
-	* ResXResourceReader.cs:
-	  - Patch by joel.reed at ddiworld.com (joel) to handle CDATA sections.
-
-2004-08-29 22:36  pbartok
-
-	* ResXResourceReader.cs, ResXResourceWriter.cs:
-	  - Transfered files from previous version of System.Windows.Forms
-	  - Added full copyright header
-
diff --git a/mcs/class/Managed.Windows.Forms/System.Resources/ResXDataNode.cs b/mcs/class/Managed.Windows.Forms/System.Resources/ResXDataNode.cs
index 7a55de6..62dd910 100644
--- a/mcs/class/Managed.Windows.Forms/System.Resources/ResXDataNode.cs
+++ b/mcs/class/Managed.Windows.Forms/System.Resources/ResXDataNode.cs
@@ -24,7 +24,6 @@
 //  Olivier Dufour  olivier.duff at gmail.com
 //
 
-#if NET_2_0
 using System;
 using System.Runtime.Serialization;
 using System.Drawing;
@@ -148,4 +147,3 @@ namespace System.Resources
 		#endregion
 	}
 }
-#endif
diff --git a/mcs/class/Managed.Windows.Forms/System.Resources/ResXFileRef.cs b/mcs/class/Managed.Windows.Forms/System.Resources/ResXFileRef.cs
index c1e70e2..ca129da 100644
--- a/mcs/class/Managed.Windows.Forms/System.Resources/ResXFileRef.cs
+++ b/mcs/class/Managed.Windows.Forms/System.Resources/ResXFileRef.cs
@@ -26,9 +26,7 @@
 
 using System;
 using System.ComponentModel;
-#if NET_2_0
 using System.Drawing;
-#endif
 using System.IO;
 using System.Reflection;
 using System.Text;
@@ -67,13 +65,10 @@ namespace System.Resources {
 				}
 
 				string [] parts = ResXFileRef.Parse ((string) value);
-#if NET_2_0
 				if (parts.Length == 1)
 					throw new ArgumentException ("value");
-#endif
 
 				Type type = Type.GetType (parts [1]);
-#if NET_2_0
 				if (type == typeof(string)) {
 					Encoding encoding;
 					if (parts.Length > 2) {
@@ -86,14 +81,12 @@ namespace System.Resources {
 						return reader.ReadToEnd();
 					}
 				}
-#endif
 
 				using (FileStream file = new FileStream (parts [0], FileMode.Open, FileAccess.Read, FileShare.Read)) {
 					buffer = new byte [file.Length];
 					file.Read(buffer, 0, (int) file.Length);
 				}
 
-#if NET_2_0
 				if (type == typeof(System.Byte[]))
 					return buffer;
 
@@ -104,7 +97,6 @@ namespace System.Resources {
 
 				if (type == typeof (MemoryStream))
 					return new MemoryStream (buffer);
-#endif
 
 				return Activator.CreateInstance(type, BindingFlags.CreateInstance
 					| BindingFlags.Public | BindingFlags.Instance, null, 
@@ -126,52 +118,30 @@ namespace System.Resources {
 
 		public ResXFileRef (string fileName, string typeName)
 		{
-#if NET_2_0
 			if (fileName == null)
 				throw new ArgumentNullException ("fileName");
 			if (typeName == null)
 				throw new ArgumentNullException ("typeName");
-#endif
 
 			this.filename = fileName;
 			this.typename = typeName;
 		}
 
-#if NET_2_0
-		public
-#else
-		internal
-#endif
-		ResXFileRef (string fileName, string typeName, Encoding textFileEncoding)
+		public ResXFileRef (string fileName, string typeName, Encoding textFileEncoding)
 			: this (fileName, typeName) 
 		{
 			this.textFileEncoding = textFileEncoding;
 		}
 
-#if NET_2_0
-		public
-#else
-		internal
-#endif
-		string FileName {
+		public string FileName {
 			get { return filename; }
 		}
 
-#if NET_2_0
-		public
-#else
-		internal
-#endif
-		Encoding TextFileEncoding {
+		public Encoding TextFileEncoding {
 			get { return textFileEncoding; }
 		}
 
-#if NET_2_0
-		public
-#else
-		internal
-#endif
-		string TypeName {
+		public string TypeName {
 			get { return typename; }
 		}
 
diff --git a/mcs/class/Managed.Windows.Forms/System.Resources/ResXResourceReader.cs b/mcs/class/Managed.Windows.Forms/System.Resources/ResXResourceReader.cs
index 0e0ca33..2557392 100644
--- a/mcs/class/Managed.Windows.Forms/System.Resources/ResXResourceReader.cs
+++ b/mcs/class/Managed.Windows.Forms/System.Resources/ResXResourceReader.cs
@@ -56,13 +56,10 @@ namespace System.Resources
 		private Hashtable hasht;
 		private ITypeResolutionService typeresolver;
 		private XmlTextReader xmlReader;
-
-#if NET_2_0
 		private string basepath;
 		private bool useResXDataNodes;
 		private AssemblyName [] assemblyNames;
 		private Hashtable hashtm;
-#endif
 		#endregion	// Local Variables
 
 		#region Constructors & Destructor
@@ -105,8 +102,6 @@ namespace System.Resources
 			this.typeresolver = typeResolver;
 		}
 
-#if NET_2_0
-
 		public ResXResourceReader (Stream stream, AssemblyName [] assemblyNames)
 			: this (stream)
 		{
@@ -125,15 +120,12 @@ namespace System.Resources
 			this.assemblyNames = assemblyNames;
 		}
 
-
-#endif
 		~ResXResourceReader ()
 		{
 			Dispose (false);
 		}
 		#endregion	// Constructors & Destructor
 
-#if NET_2_0
 		public string BasePath {
 			get { return basepath; }
 			set { basepath = value; }
@@ -147,15 +139,12 @@ namespace System.Resources
 				useResXDataNodes = value; 
 			}
 		}
-#endif
 
 		#region Private Methods
 		private void LoadData ()
 		{
 			hasht = new Hashtable ();
-#if NET_2_0
 			hashtm = new Hashtable ();
-#endif
 			if (fileName != null) {
 				stream = File.OpenRead (fileName);
 			}
@@ -187,14 +176,11 @@ namespace System.Resources
 						case "data":
 							ParseDataNode (false);
 							break;
-#if NET_2_0
 						case "metadata":
 							ParseDataNode (true);
 							break;
-#endif
 						}
 					}
-#if NET_2_0
 				} catch (XmlException ex) {
 					throw new ArgumentException ("Invalid ResX input.", ex);
 				} catch (Exception ex) {
@@ -202,11 +188,6 @@ namespace System.Resources
 						xmlReader.LineNumber, xmlReader.LinePosition);
 					throw new ArgumentException ("Invalid ResX input.", xex);
 				}
-#else
-				} catch (Exception ex) {
-					throw new ArgumentException ("Invalid ResX input.", ex);
-				}
-#endif
 				header.Verify ();
 			} finally {
 				if (fileName != null) {
@@ -266,7 +247,6 @@ namespace System.Resources
 		{
 			string value = null;
 			comment = null;
-#if NET_2_0
 			while (xmlReader.Read ()) {
 				if (xmlReader.NodeType == XmlNodeType.EndElement && xmlReader.LocalName == (meta ? "metadata" : "data"))
 					break;
@@ -287,33 +267,17 @@ namespace System.Resources
 				else
 					value = xmlReader.Value.Trim ();
 			}
-#else
-			xmlReader.Read ();
-			if (xmlReader.NodeType == XmlNodeType.Element) {
-				value = xmlReader.ReadElementString ();
-			} else {
-				value = xmlReader.Value.Trim ();
-			}
-
-			if (value == null)
-				value = string.Empty;
-#endif
 			return value;
 		}
 
 		private void ParseDataNode (bool meta)
 		{
-#if NET_2_0
 			Hashtable hashtable = ((meta && ! useResXDataNodes) ? hashtm : hasht);
 			Point pos = new Point (xmlReader.LineNumber, xmlReader.LinePosition);
-#else
-			Hashtable hashtable = hasht;
-#endif
 			string name = GetAttribute ("name");
 			string type_name = GetAttribute ("type");
 			string mime_type = GetAttribute ("mimetype");
 
-
 			Type type = type_name == null ? null : ResolveType (type_name);
 
 			if (type_name != null && type == null)
@@ -322,11 +286,9 @@ namespace System.Resources
 
 			if (type == typeof (ResXNullRef)) {
 				
-#if NET_2_0
 				if (useResXDataNodes)
 					hashtable [name] = new ResXDataNode (name, null, pos);
 				else
-#endif
 					hashtable [name] = null;
 				return;
 			}
@@ -355,7 +317,6 @@ namespace System.Resources
 				} else {
 					TypeConverter c = TypeDescriptor.GetConverter (type);
 					if (c.CanConvertFrom (typeof (string))) {
-#if NET_2_0
 						if (BasePath != null && type == typeof (ResXFileRef)) {
 							string [] parts = ResXFileRef.Parse (value);
 							parts [0] = Path.Combine (BasePath, parts [0]);
@@ -363,25 +324,16 @@ namespace System.Resources
 						} else {
 							obj = c.ConvertFromInvariantString (value);
 						}
-#else
-						obj = c.ConvertFromInvariantString (value);
-#endif
 					}
 				}
 			} else {
 				obj = value;
 			}
 
-#if ONLY_1_1
-			if (obj == null)
-				obj = value;
-#endif
-
 			if (name == null)
 				throw new ArgumentException (string.Format (CultureInfo.CurrentCulture,
 					"Could not find a name for a resource. The resource value "
 					+ "was '{0}'.", obj));
-#if NET_2_0
 			if (useResXDataNodes)
 			{
 				ResXDataNode dataNode = new ResXDataNode(name, obj, pos);
@@ -390,7 +342,6 @@ namespace System.Resources
 				
 			}
 			else
-#endif
 			hashtable [name] = obj;
 		}
 
@@ -399,7 +350,6 @@ namespace System.Resources
 			if (typeresolver != null) {
 				return typeresolver.GetType (type);
 			} 
-#if NET_2_0
 			if (assemblyNames != null) {
 				Type result;
 				foreach (AssemblyName assem in assemblyNames) {
@@ -412,7 +362,6 @@ namespace System.Resources
 				//if type not found on assembly list we return null or we get from current assembly?
 				//=> unit test needed
 			}
-#endif
 			return Type.GetType (type);
 
 		}
@@ -462,7 +411,7 @@ namespace System.Resources
 		{
 			return new ResXResourceReader (new StringReader (fileContents), typeResolver);
 		}
-#if NET_2_0
+
 		public static ResXResourceReader FromFileContents (string fileContents, AssemblyName [] assemblyNames)
 		{
 			return new ResXResourceReader (new StringReader (fileContents), assemblyNames);
@@ -474,7 +423,7 @@ namespace System.Resources
 				LoadData ();
 			return hashtm.GetEnumerator ();
 		}
-#endif
+
 		#endregion	// Public Methods
 
 		#region Internal Classes
diff --git a/mcs/class/Managed.Windows.Forms/System.Resources/ResXResourceWriter.cs b/mcs/class/Managed.Windows.Forms/System.Resources/ResXResourceWriter.cs
index 761cd28..16b4980 100644
--- a/mcs/class/Managed.Windows.Forms/System.Resources/ResXResourceWriter.cs
+++ b/mcs/class/Managed.Windows.Forms/System.Resources/ResXResourceWriter.cs
@@ -49,9 +49,7 @@ namespace System.Resources
 		private TextWriter	textwriter;
 		private XmlTextWriter	writer;
 		private bool		written;
-#if NET_2_0		
 		private string		base_path;
-#endif		
 		#endregion	// Local Variables
 
 		#region Static Fields
@@ -61,11 +59,7 @@ namespace System.Resources
 		public static readonly string ResMimeType			= "text/microsoft-resx";
 		public static readonly string ResourceSchema			= schema;
 		public static readonly string SoapSerializedObjectMimeType	= "application/x-microsoft.net.object.soap.base64";
-#if NET_2_0
 		public static readonly string Version				= "2.0";
-#else
-		public static readonly string Version				= "1.3";
-#endif
 		#endregion	// Static Fields
 
 		#region Constructors & Destructor
@@ -314,7 +308,6 @@ namespace System.Resources
 			WriteString (name, value, null, comment);
 		}
 
-#if NET_2_0
 		[MonoTODO ("Stub, not implemented")]
 		public virtual void AddAlias (string aliasName, AssemblyName assemblyName)
 		{
@@ -467,7 +460,6 @@ namespace System.Resources
 			writer.WriteEndElement ();
 			ms.Close ();
 		}
-#endif
 
 		public void Close ()
 		{
@@ -536,12 +528,10 @@ namespace System.Resources
 ".Replace ("'", "\"");
 
 		#region Public Properties
-#if NET_2_0
 		public string BasePath {
 			get { return base_path; }
 			set { base_path = value; }
 		}
-#endif
 		#endregion
 	}
 }
diff --git a/mcs/class/Managed.Windows.Forms/System.Windows.Forms.CarbonInternal/ChangeLog b/mcs/class/Managed.Windows.Forms/System.Windows.Forms.CarbonInternal/ChangeLog
index 674dfe9..264e831 100644
--- a/mcs/class/Managed.Windows.Forms/System.Windows.Forms.CarbonInternal/ChangeLog
+++ b/mcs/class/Managed.Windows.Forms/System.Windows.Forms.CarbonInternal/ChangeLog
@@ -1,12 +1,3 @@
-2011-02-01  Geoff Norton  <grompf at sublimeintervention.com>
-
-	Avoid a stack overflow when deactivating a window
-
-2010-09-07  Atsushi Eno  <atsushi at ximian.com>
-
-	Avoid crash for use of deprecated InstallTrackingHandler in Snow
-	Leopard.
-
 2009-06-26  Atsushi Enomoto  <atsushi at ximian.com>
 
 	* KeyboardHandler.cs : support multi-byte text input.
diff --git a/mcs/class/Managed.Windows.Forms/System.Windows.Forms.CarbonInternal/ChangeLog.old b/mcs/class/Managed.Windows.Forms/System.Windows.Forms.CarbonInternal/ChangeLog.old
deleted file mode 100644
index 264e831..0000000
--- a/mcs/class/Managed.Windows.Forms/System.Windows.Forms.CarbonInternal/ChangeLog.old
+++ /dev/null
@@ -1,261 +0,0 @@
-2009-06-26  Atsushi Enomoto  <atsushi at ximian.com>
-
-	* KeyboardHandler.cs : support multi-byte text input.
-	  Fixed bug #501276.
-
-2009-01-07  Geoff Norton  <gnorton at novell.com>
-
-	* WindowHandler.cs: Don't attempt to activate a disposed Form.
-	Fixes several of the nunit winforms crashes on Mac.
-
-2008-08-14  Geoff Norton  <gnorton at novell.com>
-	
-	* WindowHandler.cs: Revert the change which didn't set ActiveWindow
-	here and fix the problem in the driver.  Fully fixes #393317.
-
-2008-08-01  Geoff Norton  <gnorton at novell.com>
-
-	* CarbonCursor.cs: If the window doesn't have a cursor set, revert
-	to the default.  Fixes #411114.
-
-2008-07-31  Geoff Norton  <gnorton at novell.com>
-
-	* WindowHandler.cs: Dont set ActiveWindow when emitting the event,
-	its set when the event is handled.  Fixes #393317.
-
-2008-05-10  Geoff Norton  <gnorton at novell.com>
-
-	* MouseHandler.cs: Fix the generation of msg.wParam for mouse up/down
-	events.  Fixes #368041
-
-2008-05-10  Geoff Norton  <gnorton at novell.com>
-
-	* WindowHandler.cs: Send ENTER/EXITSIZEMOVE when doing minimize/maximize
-	events as well as resize events.  Fixes #346529
-
-2008-05-10  Geoff Norton  <gnorton at novell.com>
-
-	* EventHandler.cs: Subscribe to Collapsed/Expanded.
-	* WindowHandler.cs: Send WINDOWPOSCHANGED with Collapsed/Expanded.  Fixes
-	#325122
-
-2008-05-10  Geoff Norton  <gnorton at novell.com>
-
-	* MouseHandler.cs: For some reason carbon gives us kEventMouseDown
-	in the grow box, but not kEventMouseUp.  If a form has a managed resize
-	grow box under our unmanaged one, it can get confused into thinking the
-	mouse is permanantly down.  Lets just not report grow box events.
-	Fixes #381097
-
-2008-05-10  Geoff Norton  <gnorton at novell.com>
-
-	* WindowHandler.cs: Properly raise inactiate/activate events
-	Partially fixes #386504
-
-2008-04-11  Geoff Norton  <gnorton at novell.com>
-
-	* WindowHandler.cs: Move the caret back to the real screen position
-	after a window bounds is changed.
-
-2008-04-11  Geoff Norton  <gnorton at novell.com>
-
-	* KeyboardHandler.cs: Fix keyboard support on little endian
-	architectures.
-
-2008-03-21  Geoff Norton  <gnorton at novell.com>
-
-	* KeyboardHandler.cs: Fix mapping of Delete.
-
-2008-02-26  Geoff Norton  <gnorton at novell.com>
-	
-	* WindowHandler.cs: Send WM_CLOSE instead of WM_DESTROY.  Fixes 
-	#364281
-
-2008-02-14  Geoff Norton  <gnorton at novell.com>
-
-	* WindowHandler.cs: Ensure we send WM_ACTIVATE when we activate our
-	Form.  Fixes #360721
-
-2008-02-04  Geoff Norton  <gnorton at novell.com>
-
-	* KeyboardHandler.cs: Filter the translate call.
-
-2008-02-04  Geoff Norton  <gnorton at novell.com>
-
-	* KeyboardHandler.cs: Commit support for the last batch of keytypes
-	(F1-12; Fn+modifiers; etc).
-
-2008-02-04  Geoff Norton  <gnorton at novell.com>
-
-	* KeyboardHandler.cs: lParam should be cleared in the broken menu 
-	filter case.
-
-2008-02-04  Geoff Norton  <gnorton at novell.com>
-
-	* KeyboardHandler.cs: Control+key does not generate SYSKEY, it prevents
-	SYSKEY (ctrl+alt+foo).  Also implement broken menu keyup filtering.
-
-2008-02-04  Geoff Norton  <gnorton at novell.com>
-
-	* KeyboardHandler.cs: Control+key generates SYSKEY/SYSCHAR as well
-	as Alt+key.
-
-2008-02-04  Geoff Norton  <gnorton at novell.com>
-
-	* EventHandler.cs: Expose GetEventClass internally.  Subscribe to
-	the unicode text events.
-	* KeyboardHandler.cs: Commit the new keyboard handler.  We grab
-	the unicode characters provided by apple and push them thru a translation
-	table to generate windows style keyboard events.
-
-2008-01-28  Geoff Norton  <gnorton at novell.com>
-
-	* EventHandler.cs: Subscribe ot ResizeBegin and ResizeEnd events.
-	* WindowHandler.cs: Send WM_ENTERSIZEMOVE and WM_EXITSIZEMOVE
-
-2008-01-23  Geoff Norton  <gnorton at novell.com>
-
-	* Cursor.cs: Expose the colors to avoid some warnings until we use them
-
-2008-01-23  Geoff Norton  <gnorton at novell.com>
-
-	* MouseHandler.cs: Send HITTEST events.
-	* Cursor.cs: Initial support for Theme cursors.  Custom cursors not
-	quite yet.
-
-2008-01-23  Geoff Norton  <gnorton at novell.com>
-
-	* ControlHandler.cs: Remove some dead code that was causing warnings.
-
-2008-01-22  Geoff Norton  <gnorton at novell.com>
-	
-	* EventHandler.cs: Subscribe to the MouseWheel and MouseScroll events.
-	* MouseHandler.cs: Post MOUSEWHEEL events when scrolling with old
-	mice, and mighty mice, and two-finger scrolling.
-
-2008-01-16  Geoff Norton  <gnorton at novell.com>
-
-	* ControlHandler.cs:  Flicker be gone!  Generate our messages in
-	AddExpose instead of trusting apples compositing manager which doesn't
-	work for our use case.
-
-2008-01-16  Geoff Norton  <gnorton at novell.com>
-
-	* ControlHandler.cs:  Dont send another invalidate when carbon
-	already knows that the control is dirty.
-
-2008-01-16  Geoff Norton  <gnorton at novell.com>
-
-	* KeyboardHandler.cs: Track the control key(s) as well and put them
-	into KeyboardModifiers as toggled.
-	* MouseHandler.cs: Support simulating right click on single-button
-	mouse macintoshs with the standard Control+Click usage pattern.
-
-2008-01-15  Geoff Norton  <gnorton at novell.com>
-
-	* ControlHandler.cs:  Only mark the dirty area as dirty when we are
-	told to expose by the subsystem.
-
-2008-01-15  Geoff Norton  <gnorton at novell.com>
-
-	* MouseHandler.cs: Avoid a NRE if we dont know the window the event 
-	came in on.
-
-2008-01-15  Geoff Norton  <gnorton at novell.com>
-
-	* ApplicationHandler.cs:  Fix the Grab declaration.
-	* MouseHandler.cs: Fix the grab declaration and a minor optimization.
-
-2008-01-10  Geoff Norton  <gnorton at novell.com>
-
-	* ControlHAndler.cs:  Mark all dirty areas as dirty with the Hwnd system.
-
-2008-01-10  Geoff Norton  <gnorton at novell.com>
-
-	* ControlHandler.cs:  Ensure we send controls a WM_WINDOWPOSCHANGED
-	when their bounds are changed by the carbon system.  Fixes initial sizing
-	of PDN DocumentWorkspace bug.
-
-2008-01-09  Geoff Norton  <gnorton at novell.com>
-
-	* WindowHandler.cs:  Hide utility windows when the window is minimizing
-	or deactivating.  Show them when the window is restored.
-	* ApplicationHandler.cs: Hide the utility windows when the app
-	deactivates.  Restore them when we get focus back.
-
-2008-01-04  Geoff Norton  <gnorton at novell.com>
-
-	* Enums.cs: Fix a typo
-	* MouseHandler.cs:  Send NC events in global coordinates.
-
-2007-12-21  Geoff Norton  <gnorton at novell.com>
-
-	* Dnd.cs: Flush the message queue during drag callbacks.  This allows
-	queued paints to occur when we're dragging.
-
-2007-12-21  Geoff Norton  <gnorton at novell.com>
-
-	* Dnd.cs: Add support for D&D of objects internally and serialized
-	objects across instances.
-
-2007-12-21  Geoff Norton  <gnorton at novell.com>
-
-	* *Handler.cs: Update the ProcessEvent method to pass the callref
-	in as well.
-	* ControlHandler.cs: Direct the kEventControlDrag events to our
-	Dnd implementation.
-	* EventHandler.cs: Register kEventControlDrag event callbacks and 
-	HIObject subclassing callbacks.
-	* KeyboardHandler.cs: Keep some key modifiers in a Keys state.
-	* MouseHandler.cs: Dont prevent non-hwnd events from going to the next
-	Event handler.
-	* Dnd.cs: Initial D&D implementation.  Supports dragging internally
-	and from finder->mwf apps.
-	* Pasteboard.cs: Initial clipboard support.
-	* HIObjectHandler.cs: Subclass HIView and run our own specialized
-	native object constructor.  This is required for dnd.
-
-2007-12-07  Geoff Norton  <gnorton at novell.com>
-
-	* ControlHandler.cs: Properly update our invalidated information when
-	Quartz asks us to redraw.  This helps fix TabControl but introduces
-	over-zealous drawing causing our flicker.  Implement visibility tracking
-	to generate out WM_SHOWWINDOW calls.  Refactor mouse tracking to live
-	entirely in MouseHandler.
-	* EventHandler.cs: Unregister some events we no longer handle.  Register
-	the new MouseEvents that we do handle.
-	* KeyboardHandler.cs: Implement some more key translations.
-	* MouseHandler.cs:  Handle all mouse events at the application level now
-	This allows us to paint while dragging the mouse, and handle double
-	click events properly.
-	* WindowHandler.cs: Properly generate WM_SHOWWINDOW messages when
-	our application window is exposed.
-
-2007-11-21  Geoff Norton  <gnorton at novell.com>
-
-	* ControlHandler.cs: Allow custom HIView to get keyboard focus.
-	* Enums.cs: Remove some unused Enums.
-	* EventHandler.cs: Make controls listen to kEventControlGetFocusPart
-	* KeyboardHandler.cs: Get the focus control from Carbon before returning control from the function
-
-2007-11-15  Geoff Norton  <gnorton at novell.com>
-
-	* EventHandler.cs: The new event handler dispatcher for the Carbon port.
-	Every event is dispatched thru this class and directed to the appropriate
-	event type handler.
-	* ApplicationHandler.cs: Handles the application level events AppActivated
-	and AppDeactivated.  We hook these to remove overlay windows when the application
-	looses focus.
-	* ControlHandler.cs: Handles the control level events Click, Track, Draw and BoundsChanged.
-	Translates these events to their WndProc equivalents and routes them to the appropriate
-	Control.
-	* KeyboardHandler.cs: Handles the keyboard level events KeyDown, KeyUp, KeyRepeat, KeyModifiersChanged
-	translated them to the WndProc message and routes it to the keyboard focus control.
-	* MouseHandler.cs: Handles the global mouse events and sends the appropriate WM_MOUSEMOVE to the 
-	control affected.
-	* WindowHandler.cs: Handles the window level events BoundsChanged and Close and resizes the Hwnds
-	or destroys them accordingly.
-	* EventHandlerBase.cs: Base class for all the EventHandlers.
-	* IEventHandler.cs: Interface declaring the methods needed for all EventHandlers.
-	* Enums.cs: Contains needed enums for the Carbon port.
-	* Structs.cs: Contains all the needed structs for the Carbon port.
diff --git a/mcs/class/Managed.Windows.Forms/System.Windows.Forms.Design/ComponentEditorForm.cs b/mcs/class/Managed.Windows.Forms/System.Windows.Forms.Design/ComponentEditorForm.cs
index 2ecefa5..9e3faad 100644
--- a/mcs/class/Managed.Windows.Forms/System.Windows.Forms.Design/ComponentEditorForm.cs
+++ b/mcs/class/Managed.Windows.Forms/System.Windows.Forms.Design/ComponentEditorForm.cs
@@ -29,10 +29,8 @@ using System.Runtime.InteropServices;
 
 namespace System.Windows.Forms.Design {
 	[ToolboxItem (false)]
-#if NET_2_0
 	[ClassInterfaceAttribute (ClassInterfaceType.AutoDispatch)]
 	[ComVisible (true)]
-#endif
 	public class ComponentEditorForm : Form {
 
 		[MonoTODO]
@@ -40,7 +38,6 @@ namespace System.Windows.Forms.Design {
 		}
 
 		#region Public Properties
-#if NET_2_0
 		[Browsable (false)]
 		[EditorBrowsable (EditorBrowsableState.Never)]
 		[DesignerSerializationVisibility (DesignerSerializationVisibility.Hidden)]
@@ -48,7 +45,6 @@ namespace System.Windows.Forms.Design {
 			get { return base.AutoSize; }
 			set { base.AutoSize = value; }
 		}
-#endif
 		#endregion
 		
 		[MonoTODO]
@@ -89,14 +85,12 @@ namespace System.Windows.Forms.Design {
 		}
 
 		#region Public Events
-#if NET_2_0
 		[Browsable (false)]
 		[EditorBrowsable (EditorBrowsableState.Never)]
 		public new event EventHandler AutoSizeChanged {
 			add { base.AutoSizeChanged += value; }
 			remove { base.AutoSizeChanged -= value; }
 		}
-#endif
 		#endregion
 	}
 }
diff --git a/mcs/class/Managed.Windows.Forms/System.Windows.Forms.Design/ComponentEditorPage.cs b/mcs/class/Managed.Windows.Forms/System.Windows.Forms.Design/ComponentEditorPage.cs
index 320c307..dc0cb07 100644
--- a/mcs/class/Managed.Windows.Forms/System.Windows.Forms.Design/ComponentEditorPage.cs
+++ b/mcs/class/Managed.Windows.Forms/System.Windows.Forms.Design/ComponentEditorPage.cs
@@ -29,10 +29,8 @@ using System.Runtime.InteropServices;
 
 namespace System.Windows.Forms.Design
 {
-#if NET_2_0
 	[ClassInterfaceAttribute (ClassInterfaceType.AutoDispatch)]
 	[ComVisible (true)]
-#endif
 	public abstract class ComponentEditorPage : Panel
 	{
 		private bool commitOnDeactivate = false;
@@ -47,7 +45,6 @@ namespace System.Windows.Forms.Design
 		{
 		}
 
-#if NET_2_0
 		[Browsable (false)]
 		[EditorBrowsable (EditorBrowsableState.Never)]
 		[DesignerSerializationVisibility (DesignerSerializationVisibility.Hidden)]
@@ -55,7 +52,6 @@ namespace System.Windows.Forms.Design
 			get { return base.AutoSize; }
 			set { base.AutoSize = value; }
 		}
-#endif
 
 		public bool CommitOnDeactivate
 		{
@@ -202,14 +198,12 @@ namespace System.Windows.Forms.Design
 		}
 
 		#region Public Events
-#if NET_2_0
 		[Browsable (false)]
 		[EditorBrowsable (EditorBrowsableState.Never)]
 		public new event EventHandler AutoSizeChanged {
 			add { base.AutoSizeChanged += value; }
 			remove { base.AutoSizeChanged -= value; }
 		}
-#endif
 		#endregion
 	}
 }
diff --git a/mcs/class/Managed.Windows.Forms/System.Windows.Forms.Design/ToolStripItemDesignerAvailability.cs b/mcs/class/Managed.Windows.Forms/System.Windows.Forms.Design/ToolStripItemDesignerAvailability.cs
index 8cabf9f..66c8b98 100644
--- a/mcs/class/Managed.Windows.Forms/System.Windows.Forms.Design/ToolStripItemDesignerAvailability.cs
+++ b/mcs/class/Managed.Windows.Forms/System.Windows.Forms.Design/ToolStripItemDesignerAvailability.cs
@@ -25,7 +25,6 @@
 // Authors:
 //	Jonathan Pobst (monkey at jpobst.com)
 //
-#if NET_2_0
 
 using System;
 
@@ -42,4 +41,3 @@ namespace System.Windows.Forms.Design
 		All = 15
 	}
 }
-#endif
\ No newline at end of file
diff --git a/mcs/class/Managed.Windows.Forms/System.Windows.Forms.Design/ToolStripItemDesignerAvailabilityAttribute.cs b/mcs/class/Managed.Windows.Forms/System.Windows.Forms.Design/ToolStripItemDesignerAvailabilityAttribute.cs
index c477129..8f6c985 100644
--- a/mcs/class/Managed.Windows.Forms/System.Windows.Forms.Design/ToolStripItemDesignerAvailabilityAttribute.cs
+++ b/mcs/class/Managed.Windows.Forms/System.Windows.Forms.Design/ToolStripItemDesignerAvailabilityAttribute.cs
@@ -25,7 +25,6 @@
 // Authors:
 //	Jonathan Pobst (monkey at jpobst.com)
 //
-#if NET_2_0
 
 using System;
 using System.Collections.Generic;
@@ -80,4 +79,3 @@ namespace System.Windows.Forms.Design
 		#endregion
 	}
 }
-#endif
\ No newline at end of file
diff --git a/mcs/class/Managed.Windows.Forms/System.Windows.Forms.Internal/DebugHelper.cs b/mcs/class/Managed.Windows.Forms/System.Windows.Forms.Internal/DebugHelper.cs
index aa32089..dbfcda2 100644
--- a/mcs/class/Managed.Windows.Forms/System.Windows.Forms.Internal/DebugHelper.cs
+++ b/mcs/class/Managed.Windows.Forms/System.Windows.Forms.Internal/DebugHelper.cs
@@ -27,11 +27,7 @@
 //#define TRACE
 
 using System;
-#if NET_2_0
 using System.Collections.Generic;
-#else
-using System.Collections;
-#endif
 using System.Reflection;
 using System.Text;
 using System.IO;
@@ -53,22 +49,8 @@ namespace System.Windows.Forms
 				this.args = a;
 			}
 		}
-#if NET_2_0		
+
 		static Stack<Data> methods = new Stack<Data>();
-#else
-		class DataStack : System.Collections.Stack {
-			public new Data Peek () {
-				return (Data) base.Peek ();
-			}
-			public new Data Pop () {
-				return (Data) base.Pop ();
-			}
-			public DataStack (int initialCapacity) : base (initialCapacity) {}
-			public DataStack () : base () {}
-			public DataStack (ICollection icol) : base (icol) {}
-		}
-		static DataStack methods = new DataStack();
-#endif
 		
 		[Conditional("DEBUG")]
 		internal static void DumpCallers () {
@@ -151,11 +133,8 @@ namespace System.Windows.Forms
 			if (methods.Count == 0 || methods.Count <= index || index < 0)
 				return;
 
-#if NET_2_0
 			Stack<Data> temp = new Stack<Data>(index-1);
-#else
-			DataStack temp = new DataStack(index-1);
-#endif
+
 			for (int i = 0; i < index; i++)
 				temp.Push (methods.Pop ());
 
@@ -172,12 +151,9 @@ namespace System.Windows.Forms
 		{
 			if (methods.Count == 0)
 				return;
-			
-#if NET_2_0
+
 			Stack<Data> temp = new Stack<Data>();
-#else
-			DataStack temp = new DataStack();
-#endif
+
 			Data data = methods.Peek ();
 			bool foundit = false;
 			for (int i = 0; i < methods.Count; i++)
diff --git a/mcs/class/Managed.Windows.Forms/System.Windows.Forms.Layout/ArrangedElementCollection.cs b/mcs/class/Managed.Windows.Forms/System.Windows.Forms.Layout/ArrangedElementCollection.cs
index 8adf30e..05b01b7 100644
--- a/mcs/class/Managed.Windows.Forms/System.Windows.Forms.Layout/ArrangedElementCollection.cs
+++ b/mcs/class/Managed.Windows.Forms/System.Windows.Forms.Layout/ArrangedElementCollection.cs
@@ -25,7 +25,6 @@
 // Authors:
 //	Jonathan Pobst (monkey at jpobst.com)
 //
-#if NET_2_0
 
 using System.Collections;
 
@@ -171,4 +170,3 @@ namespace System.Windows.Forms.Layout
 		#endregion
 	}
 }
-#endif
diff --git a/mcs/class/Managed.Windows.Forms/System.Windows.Forms.Layout/ChangeLog b/mcs/class/Managed.Windows.Forms/System.Windows.Forms.Layout/ChangeLog
index b45eb8d..5f09aef 100644
--- a/mcs/class/Managed.Windows.Forms/System.Windows.Forms.Layout/ChangeLog
+++ b/mcs/class/Managed.Windows.Forms/System.Windows.Forms.Layout/ChangeLog
@@ -1,8 +1,3 @@
-2010-12-10  Miguel de Icaza  <miguel at gnome.org>
-
-	[winforms] Use conditional attributes, not ifdefs to insert
-	conditional code
-
 2009-02-04  Jonathan Pobst  <monkey at jpobst.com>
 
 	* FlowLayout.cs: When laying out ToolStripItems, they should be
diff --git a/mcs/class/Managed.Windows.Forms/System.Windows.Forms.Layout/ChangeLog.old b/mcs/class/Managed.Windows.Forms/System.Windows.Forms.Layout/ChangeLog.old
deleted file mode 100644
index 5f09aef..0000000
--- a/mcs/class/Managed.Windows.Forms/System.Windows.Forms.Layout/ChangeLog.old
+++ /dev/null
@@ -1,328 +0,0 @@
-2009-02-04  Jonathan Pobst  <monkey at jpobst.com>
-
-	* FlowLayout.cs: When laying out ToolStripItems, they should be
-	the height of the ToolStrip, not their preferred height.
-	[Fixes bug #469196]
-
-2008-11-07  Jonathan Pobst  <monkey at jpobst.com>
-
-	* DefaultLayout.cs: Apply patch from Jonathan Anderson that keeps
-	undocked autosize controls from moving when resized.
-	[Fixes bug #439479]
-
-2008-11-06  Jonathan Pobst  <monkey at jpobst.com>
-
-	* DefaultLayout.cs: Apply patch from Jonathan Anderson that better
-	handles AutoSize controls when docked.
-	[Fixes bug #439443]
-
-2008-10-13  Jonathan Pobst  <monkey at jpobst.com>
-
-	* TableLayout.cs: My previous fix broke a test, tweak it a bit.
-
-2008-10-08  Jonathan Pobst  <monkey at jpobst.com>
-
-	* TableLayout.cs: If multiple controls are set to the same cell,
-	flow the additional ones to other empty cells.  [Fixes bug #433531]
-
-2008-09-12  Jonathan Pobst  <monkey at jpobst.com>
-
-	* TableLayoutSettingsTypeConverter.cs: Don't create an instance of 
-	TableLayoutPanel in ConvertFrom.
-	[Fixes bug #425647]
-
-2008-07-28  Ivan N. Zlatev  <contact at i-nz.net>
-
-	* TableLayout.cs: MS adds rows instead of columns even when 
-	GrowStyle is AddColumns, but RowCount is 0.
-
-2008-07-26  Ivan N. Zlatev  <contact at i-nz.net>
-
-	* TableLayout.cs: Perform layout even if they are no child controls, so 
-	that cell sizes are updated properly for the cell border painting.
-
-2008-07-25  Ivan N. Zlatev  <contact at i-nz.net>
-
-	* TableLayout.cs: For newly created cells for controls without a 
-	specifically assinged such enforce AddRows if ColumnCount == 0 else 
-	AddColumns if RowCount == 0.
-	[Fixes bug #412163]
-
-2008-07-25  Ivan N. Zlatev  <contact at i-nz.net>
-
-	* TableLayout.cs: Automagically add the required number of columns/rows 
-	if the control is added at non-existent such. Note that ColumnCount and 
-	RowCount do not change in LayoutSettings.
-	[Fixes bug #412161]
-
-2008-07-25  Ivan N. Zlatev  <contact at i-nz.net>
-
-	* TableLayout.cs: Initialize columns and rows as empty array, so that we 
-	can drop the null check when drawing and always draw the control border, 
-	but void for the cell borders if there aren't any.
-	[Fixes bug #411858]
-
-2008-07-07  Ivan N. Zlatev  <contact at i-nz.net>
-
-	* TableLayout.cs: Controls bounds should be taken into account regardless
-	of their Dock and Anchor states.
-	[Fixes bug #402651]
-
-2008-06-10  Jonathan Pobst  <monkey at jpobst.com>
-
-	* TableLayoutSettingsTypeConverter.cs: Patch from Andy Hume to
-	use InvariantCulture.
-
-2008-06-10  Jonathan Pobst  <monkey at jpobst.com>
-
-	* DefaultLayout.cs, TableLayout.cs, FlowLayout.cs: Use SetBoundsInternal
-	instead of SetBoundsCoreInternal.
-
-2008-06-09  Jonathan Pobst  <monkey at jpobst.com>
-
-	* DefaultLayout.cs, TableLayout.cs, FlowLayout.cs: Use SetBoundsCoreInternal
-	instead of SetBounds.
-
-2008-06-09  Jonathan Pobst  <monkey at jpobst.com>
-
-	* TableLayoutSettingsTypeConverter.cs: Fix spelling of Columns.
-	Accomadate .Net's use of culture separator.  [Fixes bug #398274]
-
-2008-06-03  Jonathan Pobst  <monkey at jpobst.com>
-
-	* DefaultLayout.cs: It appears that TableLayoutPanels are immune to
-	AutoSizeMode and always ShrinkAndGrow.  [Fixes bug #396433]
-
-2008-06-02  Jonathan Pobst  <monkey at jpobst.com>
-
-	* TableLayout.cs: Fix a c&p error so we correctly calculate row
-	border heights.  [Fixes part of bug #396433]
-
-2008-03-05  Jonathan Pobst  <monkey at jpobst.com>
-
-	ArrangedElementCollection.cs: corcompare - fix parameter names.
-
-2008-03-05  Jonathan Pobst  <monkey at jpobst.com>
-
-	* TableLayout.cs: Guard against an exception when a control's colspan
-	or rowspan is greater than the number of columns or rows.
-	[Fixes bug #367249]
-
-2008-02-19  Jonathan Pobst  <monkey at jpobst.com>
-
-	* FlowLayout.cs: Take padding into account when determining if there
-	is still room left on a row.  [Fixes bug #361448]
-
-2008-01-23  Jonathan Pobst  <monkey at jpobst.com>
-
-	* TableLayout.cs: Don't include Dock.Fill, multicolumn/multirow spanned
-	controls when calculating column/row sizes.
-	[Fixes bug #355408]
-
-2008-01-22  Jonathan Pobst  <monkey at jpobst.com>
-
-	* DefaultLayout.cs: Remove using the padding.  This is now included
-	properly in the DisplayRectangle.  Fixes a broken test.
-
-2008-01-22  Jonathan Pobst  <monkey at jpobst.com>
-
-	* TableLayout.cs: When we reset our current_pos back to the left
-	beginning, make sure we take padding into account.
-	[Fixes bug #354676]
-
-2007-12-13  Jonathan Pobst  <monkey at jpobst.com>
-
-	* TableLayout.cs: Use ExplicitBounds so that we get the user requested
-	size, not the AutoSize/Dock size.  Make CalculateControlPositions
-	internal so that TableLayoutPanel can call it.
-	[Fixes bug #346246]
-
-2007-10-16  Jonathan Pobst  <monkey at jpobst.com>
-
-	* TableLayout.cs: Revert the last change to TableLayout.  It breaks
-	other, more important things.
-
-2007-10-15  Jonathan Pobst  <monkey at jpobst.com>
-
-	* TableLayout.cs: If a control has an explicitly set col/row greater
-	than the number of columns/rows in the panel, expand the table to
-	accommodate the control.  [Fixes bug #332892]
-
-2007-10-11  Jonathan Pobst  <monkey at jpobst.com>
-
-	* TableLayout.cs: When calculating the size of AutoSize row/columns,
-	don't take !Visible controls into account.  When laying out controls,
-	start from the DisplayRectangle instead of (0,0) to account for
-	a scrolled TableLayoutPanel where the start point is negative.
-	[Fixes bug #332892]
-
-2007-09-17  Jonathan Pobst  <monkey at jpobst.com>
-
-	* DefaultLayout.cs: Fix copy/paste error for dist_right.  Fixes
-	reopened bug #325429.
-
-2007-09-13  Jonathan Pobst  <monkey at jpobst.com>
-
-	* TableLayout.cs: Use control's PreferredSize when figuring up the
-	size of an AutoSize row/column.
-
-2007-09-12  Jonathan Pobst  <monkey at jpobst.com>
-
-	* DefaultLayout.cs: Apply AutoSize logic to the variable dimension 
-	of Docked controls.
-
-2007-09-11  Jonathan Pobst  <monkey at jpobst.com>
-
-	* DefaultLayout.cs: When working with Anchor = none, and we move a
-	control, we need to update its dist_right/dist_bottom.
-	[Fixes bug #82762]
-
-2007-09-06  Jonathan Pobst  <monkey at jpobst.com>
-
-	* DefaultLayout.cs: Only LayoutAutoSizeContainer if the container is
-	a Form, others should be taken care of by their parent.
-	* TableLayout.cs: If a control is AutoSize, default to its preferred
-	size if possible.  [Fixes bug #82605]
-
-2007-07-31  Jonathan Pobst  <monkey at jpobst.com>
-
-	* ArrangedElementCollection.cs: Rename internal method RemoveAt
-	so that subclasses can have a public version of it without hiding.
-
-2007-07-23  Rolf Bjarne Kvinge <RKvinge at novell.com> 
-
-	* ArrangedElementCollection.cs: Implement NotSupported behaviour
-	  confirmed by tests.
-
-2007-07-07  Jonathan Pobst  <monkey at jpobst.com>
-
-	* TableLayout.cs: Parenthesis out of place when centering control
-	in a table cell.  [Fixes bug #81936]
-
-2007-06-21  Jonathan Pobst  <monkey at jpobst.com>
-
-	* TableLayout.cs: Take CellBorderStyle into account when laying
-	stuff out.  [Fixes bug #81884]
-
-2007-06-12  Jonathan Pobst  <monkey at jpobst.com>
-
-	* TableLayout.cs: When we come across a Dock=Fill control, use the
-	ExplicitSize to calculate an AutoSize row/column from.
-	[Fixes bug #81843]
-
-2007-06-07  Jonathan Pobst  <monkey at jpobst.com>
-
-	* DefaultLayout.cs: When calculating autosize children, default to
-	ExplicitSize.  After laying out a container's children, if the container
-	is AutoSize, adjust its size if necessary.
-
-2007-05-23  Jonathan Pobst  <monkey at jpobst.com>
-
-	* DefaultLayout.cs: Take parent's padding into account when docking
-	children.
-
-2007-05-07  Jonathan Pobst  <monkey at jpobst.com>
-	Applying contributed patch from Stefan Noack.
-
-	* DefaultLayout.cs: Implement AutoSize logic.	
-
-2007-04-24  Andreia Gaita  <avidigal at novell.com>
-
-	* TableLayoutSettingsTypeConverter.cs: Implemented the converters
-	for TableLayoutSettings.
-
-2007-04-22  Jonathan Pobst  <monkey at jpobst.com>
-
-	* DefaultLayout.cs: Use the parent's DisplayRectangle for laying
-	out docked children.  [Fixes bug #81397]
-
-2007-04-04  Jonathan Pobst  <monkey at jpobst.com>
-
-	* FlowLayout.cs: Call SetBounds with BoundsSpecified.None instead of
-	using Control Size, Location setters.
-
-2007-03-24  Jonathan Pobst  <monkey at jpobst.com>
-
-	* DefaultLayout.cs: Call SetBounds with BoundsSpecified.None instead
-	of using SetImplicitBounds.
-	* TableLayout.cs: Call SetBounds with BoundsSpecified.None instead of
-	modifying Control.Bounds.
-
-2007-02-28  Jonathan Pobst  <monkey at jpobst.com>
-
-	* DefaultLayout.cs: Use ClientRectangle instead of DisplayRectangle
-	to layout children because DisplayRectangle can be overridden.
-	[Fixes bug #80917]
-
-2007-02-14  Jonathan Pobst  <monkey at jpobst.com>
-
-	* FlowLayout.cs: Add support for laying out ToolStrips, which
-	use ToolStripItems instead of Controls.
-
-2007-01-29  Jonathan Pobst  <monkey at jpobst.com>
-
-	* DefaultLayout.cs: MdiClient should always be added last, it should
-	never Dock:Fill under other controls.  [Fixes a part of bug #80223]
-
-2007-01-20  Jonathan Pobst  <monkey at jpobst.com>
-
-	* DefaultLayout.cs: Remove special loop for Dock.Fill and handle
-	it with the other docking code.  [Fixes bug #80227]
-
-2007-01-09  Jonathan Pobst  <monkey at jpobst.com>
-
-	* DefaultLayout.cs: Use PreferredSize for non-Anchor/Dock controls. (2.0)
-	Change a SetBounds to SetImplicitBounds.
-
-2007-01-07  Jonathan Pobst  <monkey at jpobst.com>
-
-	* ArrangedElementCollection.cs: Make list internal.
-
-2006-12-28  Chris Toshok  <toshok at ximian.com>
-
-	* DefaultLayout.cs: split out the various parts (docking,
-	anchoring) into separate methods.  make use of the
-	Control.ControlLayoutType property, as well as
-	Control.VisibleInternal (and fix a couple of unit tests which were
-	broken due to use of Visible here.)
-
-2006-12-25  Chris Toshok  <toshok at ximian.com>
-
-	* DefaultLayout.cs: invert the tests for anchoring to make the
-	code a little more compact.
-
-2006-12-25  Chris Toshok  <toshok at ximian.com>
-
-	* DefaultLayout.cs: remove references to dist_left and dist_top.
-	just use left and top instead.
-
-2006-12-23  Chris Toshok  <toshok at ximian.com>
-
-	* TableLayoutSettingsTypeConverter.cs: new file, a skeleton.
-
-2006-12-23  Chris Toshok  <toshok at ximian.com>
-
-	* DefaultLayout.cs: include this in 1.1, and make use of
-	SetImplicitBounds like the Control.PerformLayout code does.
-
-2006-12-06  Chris Toshok  <toshok at ximian.com>
-
-	* DefaultLayout.cs: make Control.child_controls private.  switch
-	all uses over to Control.Controls.
-
-2006-12-04  Chris Toshok  <toshok at ximian.com>
-
-	* ArrangedElementCollection.cs: fix up corcompare for this file.
-	we need to make all the interface methods explicit, not public,
-	and add internal methods that can be called from the subclasses
-	(we also call them from the explicit implementations.)
-
-2006-11-30  Jonathan Pobst <monkey at jpobst.com>
-	* ArrangedElementCollection.cs: Make constructor internal.
-	* FlowLayout.cs: Make work with ToolStrip.
-
-2006-10-02  Jonathan Pobst <monkey at jpobst.com>
-	* ArrangedElementCollection.cs: Initial commit.
-
-2006-09-15  Jonathan Pobst <monkey at jpobst.com>
-	* DefaultLayout.cs, FlowLayout.cs: Initial commit.
\ No newline at end of file
diff --git a/mcs/class/Managed.Windows.Forms/System.Windows.Forms.Layout/DefaultLayout.cs b/mcs/class/Managed.Windows.Forms/System.Windows.Forms.Layout/DefaultLayout.cs
index 405c464..35bb2be 100644
--- a/mcs/class/Managed.Windows.Forms/System.Windows.Forms.Layout/DefaultLayout.cs
+++ b/mcs/class/Managed.Windows.Forms/System.Windows.Forms.Layout/DefaultLayout.cs
@@ -44,10 +44,8 @@ namespace System.Windows.Forms.Layout
 				Control child = controls[i];
 				Size child_size = child.Size;
 
-#if NET_2_0
 				if (child.AutoSize)
 					child_size = GetPreferredControlSize (child);
-#endif
 
 				if (!child.VisibleInternal
 				    || child.ControlLayoutType == Control.LayoutType.Anchor)
@@ -158,7 +156,6 @@ namespace System.Windows.Forms.Layout
 			}
 		}
 		
-#if NET_2_0
 		void LayoutAutoSizedChildren (Control parent, Control[] controls)
 		{
 			for (int i = 0; i < controls.Length; i++) {
@@ -228,7 +225,6 @@ namespace System.Windows.Forms.Layout
 
 			container.SetBoundsInternal (left, top, width, height, BoundsSpecified.None);
 		}
-#endif
 
 		public override bool Layout (object container, LayoutEventArgs args)
 		{
@@ -238,15 +234,12 @@ namespace System.Windows.Forms.Layout
 
 			LayoutDockedChildren (parent, controls);
 			LayoutAnchoredChildren (parent, controls);
-#if NET_2_0
 			LayoutAutoSizedChildren (parent, controls);
 			if (parent is Form) LayoutAutoSizeContainer (parent);
-#endif
 
 			return false;
 		}
 
-#if NET_2_0
 		private Size GetPreferredControlSize (Control child)
 		{
 			int width;
@@ -280,6 +273,5 @@ namespace System.Windows.Forms.Layout
 				
 			return new Size (width, height);
 		}
-#endif
 	}
 }
diff --git a/mcs/class/Managed.Windows.Forms/System.Windows.Forms.Layout/FlowLayout.cs b/mcs/class/Managed.Windows.Forms/System.Windows.Forms.Layout/FlowLayout.cs
index c39f420..df5884c 100644
--- a/mcs/class/Managed.Windows.Forms/System.Windows.Forms.Layout/FlowLayout.cs
+++ b/mcs/class/Managed.Windows.Forms/System.Windows.Forms.Layout/FlowLayout.cs
@@ -358,13 +358,9 @@ namespace System.Windows.Forms.Layout
 				// Only apply layout to visible controls.
 				if (!c.Available) { continue; }
 
-				// Resize any AutoSize controls to their preferred width
-				// (the height should fill the ToolStrip)
-				if (c.AutoSize == true) {
-					Size preferred_size = c.GetPreferredSize (c.Size);
-					preferred_size.Height = parentDisplayRectangle.Height;
-					c.SetBounds (new Rectangle (c.Location, preferred_size));
-				}
+				// Resize any AutoSize controls to their preferred size
+				if (c.AutoSize == true)
+					c.SetBounds (new Rectangle (c.Location, c.GetPreferredSize (c.Size)));
 
 				switch (settings.FlowDirection) {
 					case FlowDirection.BottomUp:
diff --git a/mcs/class/Managed.Windows.Forms/System.Windows.Forms.Layout/LayoutEngine.cs b/mcs/class/Managed.Windows.Forms/System.Windows.Forms.Layout/LayoutEngine.cs
index 738537b..b619976 100644
--- a/mcs/class/Managed.Windows.Forms/System.Windows.Forms.Layout/LayoutEngine.cs
+++ b/mcs/class/Managed.Windows.Forms/System.Windows.Forms.Layout/LayoutEngine.cs
@@ -29,12 +29,7 @@ using System.ComponentModel;
 
 namespace System.Windows.Forms.Layout {
 
-#if NET_2_0
-	public
-#else
-	internal
-#endif
-	abstract class LayoutEngine {
+	public abstract class LayoutEngine {
 		
 		public virtual void InitLayout (object child, BoundsSpecified specified)
 		{
diff --git a/mcs/class/Managed.Windows.Forms/System.Windows.Forms.Layout/TableLayout.cs b/mcs/class/Managed.Windows.Forms/System.Windows.Forms.Layout/TableLayout.cs
index 4956d8f..83b820f 100644
--- a/mcs/class/Managed.Windows.Forms/System.Windows.Forms.Layout/TableLayout.cs
+++ b/mcs/class/Managed.Windows.Forms/System.Windows.Forms.Layout/TableLayout.cs
@@ -26,7 +26,6 @@
 //	Jonathan Pobst (monkey at jpobst.com)
 //
 
-#if NET_2_0
 
 #undef TABLE_DEBUG
 
@@ -526,4 +525,3 @@ namespace System.Windows.Forms.Layout
 #endif
 	}
 }
-#endif
diff --git a/mcs/class/Managed.Windows.Forms/System.Windows.Forms.Layout/TableLayoutSettingsTypeConverter.cs b/mcs/class/Managed.Windows.Forms/System.Windows.Forms.Layout/TableLayoutSettingsTypeConverter.cs
index 10558b8..575c0fe 100644
--- a/mcs/class/Managed.Windows.Forms/System.Windows.Forms.Layout/TableLayoutSettingsTypeConverter.cs
+++ b/mcs/class/Managed.Windows.Forms/System.Windows.Forms.Layout/TableLayoutSettingsTypeConverter.cs
@@ -20,7 +20,6 @@
 // Copyright (c) 2006 Novell, Inc.
 //
 
-#if NET_2_0
 
 using System;
 using System.ComponentModel;
@@ -119,7 +118,7 @@ namespace System.Windows.Forms.Layout
 
 			XmlDocument xmldoc = new XmlDocument();
 			xmldoc.LoadXml (value as string);
-			TableLayoutSettings settings = new TableLayoutSettings(null);
+			TableLayoutSettings settings = new TableLayoutSettings(new TableLayoutPanel());
 			int count = ParseControl (xmldoc, settings);
 			ParseColumnStyle (xmldoc, settings);
 			ParseRowStyle (xmldoc, settings);
@@ -232,5 +231,3 @@ namespace System.Windows.Forms.Layout
 		}
 	}
 }
-
-#endif
diff --git a/mcs/class/Managed.Windows.Forms/System.Windows.Forms.RTF/Charcode.cs b/mcs/class/Managed.Windows.Forms/System.Windows.Forms.RTF/Charcode.cs
index f0e93eb..fc9ca63 100644
--- a/mcs/class/Managed.Windows.Forms/System.Windows.Forms.RTF/Charcode.cs
+++ b/mcs/class/Managed.Windows.Forms/System.Windows.Forms.RTF/Charcode.cs
@@ -84,10 +84,7 @@ namespace System.Windows.Forms.RTF {
 				return codes[c];
 			}
 
-#if NET_2_0
-			private 
-#endif			
-			set {
+			private set {
 				if (c < 0 || c >= size) {
 					return;
 				}
diff --git a/mcs/class/Managed.Windows.Forms/System.Windows.Forms.Theming/Default/ChangeLog b/mcs/class/Managed.Windows.Forms/System.Windows.Forms.Theming/Default/ChangeLog
index 82b9cfc..b0c1652 100644
--- a/mcs/class/Managed.Windows.Forms/System.Windows.Forms.Theming/Default/ChangeLog
+++ b/mcs/class/Managed.Windows.Forms/System.Windows.Forms.Theming/Default/ChangeLog
@@ -1,7 +1,3 @@
-2010-12-10  Thomas Goldstein  <stifu at free.fr>
-
-	[winforms] Small optimization
-
 2010-06-25  Carlos Alberto Cortez <calberto.cortez at gmail.com>
 
 	* TabControlPainter.cs: Use TabControl.Font instead of the values of
diff --git a/mcs/class/Managed.Windows.Forms/System.Windows.Forms.Theming/Default/ChangeLog.old b/mcs/class/Managed.Windows.Forms/System.Windows.Forms.Theming/Default/ChangeLog.old
deleted file mode 100644
index b0c1652..0000000
--- a/mcs/class/Managed.Windows.Forms/System.Windows.Forms.Theming/Default/ChangeLog.old
+++ /dev/null
@@ -1,200 +0,0 @@
-2010-06-25  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* TabControlPainter.cs: Use TabControl.Font instead of the values of
-	TabPage.Font.
-	Fixes bits of #551032.
-
-2010-06-20  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* TabControlPainter.cs: Actually draw the focus rectangle - TabControl
-	ignores the value of ShowFocusCues. Also, properly compute the bounds
-	for the focus rectangle, since it should include the padding of the
-	tab page.
-	Fixes bits of #515045.
-
-2010-05-17  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* TabControlPainter.cs: Don't use FocusRectSpacing or BorderThickess
-	to calculate the interior rectangle to draw the tab contents, as
-	TabControl.Padding is enough - we had been ignoring it. This make
-	should our tab look more like that one in .net.
-
-2010-05-17  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* TabControlPainter.cs: When drawing tabs, use TabControl.Padding into
-	account for the interior rectangle for the text/image contents.
-	Fixes the remaining bits of #604034.
-
-0201-05-16  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* TabControlPainter.cs: The text for our tabs should always be
-	vertically centered, and it should be horizontally centered if the
-	size mode is Fixed. Patch from Thomas Goldstein (stifu at free.fr).
-	Fixes part of #599841.
-
-2010-05-15  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* TabControlPainter.cs: Reduce the height for our default item size,
-	as we were ignoring the padding before.
-
-2008-10-20  Jonathan Pobst  <monkey at jpobst.com>
-
-	* ToolStripPainter.cs: Don't paint over a set BackgroundImage.
-
-2008-10-09  Everaldo Canuto  <ecanuto at novell.com>
-
-	* LinkLabelPainter.cs: Take Padding into account when drawing the linklabel
-	text.
-
-2008-10-08  Everaldo Canuto  <ecanuto at novell.com>
-
-	* LabelPainter.cs: Use control.PaddingClientRectangle instead of calculate
-	rectangle with padding. Also break some lines that theres more than 120
-	characters.
-
-2008-09-24  Jonathan Pobst  <monkey at jpobst.com>
-
-	* TabControlPainter.cs: Add 1 pixel to the tab text rectangle
-	to keep the text from getting cut off on XP.
-	[Fixes bug #428116]
-
-2008-09-16  Jonathan Pobst  <monkey at jpobst.com>
-
-	* TabControlPainter.cs: Hook tab painting into ShowFocusCues.
-
-2008-07-31  George Giolfan  <georgegiolfan at yahoo.com>
-
-	* TabControlPainter.cs: Added DrawScrollButton, GetButtonState.
-
-2008-06-09  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* TabControlPainter.cs: When calculating the display rectangle for
-	TabPage elements, don't include TabControlSelectedDelta.Y as part of
-	the page height, since it is only added ad the end (this is the way
-	it's done in TabControl). This way having a lot of pages with
-	Multiline as true doesn't add much extra space between the tab pages
-	labels and the actual tab pages area.
-	Fixes #393912.
-
-2008-05-21  George Giolfan <georgegiolfan at yahoo.com>
-
-	* TabControlPainter.cs: Added HasHotElementStyles.
-
-2008-05-19  George Giolfan <georgegiolfan at yahoo.com>
-
-	* TabControlPainter.cs: Refactored: Extracted DrawBackground.
-
-2008-05-16  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* TabControlPainter.cs: Use HotPrefix.Show as the value of
-	StringFormat.HotPrefix when drawing the tab text.
-	Fixes #355193.
-
-2008-05-16  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* TabControlPainter.cs: Use StringAlignment.Near as the value for
-	StringFormat.Alignment when drawing the tab text.
-	Fixes part of #352399.
-
-2008-02-25  Jonathan Pobst  <monkey at jpobst.com>
-
-	* LabelPainter.cs: Take Padding into account when drawing
-	the label text.
-
-2008-01-23  Everaldo Canuto  <ecanuto at novell.com>
-
-	* LabelPainter.cs: Added.
-
-2008-01-22  Everaldo Canuto  <ecanuto at novell.com>
-
-	* LinkLabelPainter.cs: Change Draw method to virtual.
-
-2008-01-22  Everaldo Canuto  <ecanuto at novell.com>
-
-	* LinkLabelPainter.cs: Added.
-
-2007-09-04  Everaldo Canuto  <everaldo at simios.org>
-
-	* CheckBoxPainter.cs: Adjust checkbox light color to ControlLightLight to
-	mimic win32 look. Fixes #82656 (2.0).
-
-2007-08-28  Jonathan Pobst  <monkey at jpobst.com>
-
-	* RadioButtonPainter.cs: Added.
-
-2007-08-22  Jonathan Pobst  <monkey at jpobst.com>
-
-	* CheckBoxPainter.cs: Added.
-
-2007-08-19  Everaldo Canuto  <ecanuto at novell.com>
-
-	* TabControlPainter.cs: Fix regression in default padding x.
-
-2007-08-19  Everaldo Canuto  <ecanuto at novell.com>
-
-	* TabControlPainter.cs: Fix border thickness, padding and tab text format to 
-	be horizontal centralized. Fixes #82471.
-
-2007-08-18  Everaldo Canuto  <ecanuto at novell.com>
-
-	* TabControlPainter.cs: Remove one vertical pixel from tab drawing, the 
-	bottom line was one pixel more than needed.
-
-2007-07-26  Everaldo Canuto  <ecanuto at novell.com>
-
-	* TabControlPainter.cs: Adjust vertical image position on tab. Fixes #81837.
-
-2007-07-26  Everaldo Canuto  <ecanuto at novell.com>
-
-	* TabControlPainter.cs: Uses str_rect to draw text since it take in account
-	the image size. Fixes #81836.
-
-2007-07-20  Jonathan Pobst  <monkey at jpobst.com>
-
-	* ToolStripPainter.cs: Patch from Rolf.  We weren't painting a
-	Checked button as sunken.  [Fixes bug #82151]
-
-2007-07-16  Jonathan Pobst  <monkey at jpobst.com>
-
-	* ButtonPainter.cs: For flat buttons, draw mouse highlight when
-	button is focused.  Remove random extra rectangle.
-
-2007-07-16  Jonathan Pobst  <monkey at jpobst.com>
-
-	* ButtonPainter.cs: For Flat button, if no mouse over / press
-	backcolor is specified, calculate one from the normal backcolor.
-
-2007-07-12  Jonathan Pobst  <monkey at jpobst.com>
-
-	* ButtonPainter.cs: For Flat button, if BorderSize is 0, don't
-	draw the rectangle.  Setting the pen's width to 1 isn't good
-	enough, it still draws the border.  [Fixes bug #82081]
-
-2007-07-03  Jonathan Pobst  <monkey at jpobst.com>
-
-	* ToolStripPainter.cs: Added. This is where we paint toolstrips
-	using the ToolStripSystemRenderer.
-
-2007-05-04  Andreia Gaita  <avidigal at novell.com>
-
-	* TabControlPainter.cs: Use ControlPaint static methods
-	instead of ThemeEngine ones (seeing as they're there and
-	all :p )
-
-2007-04-15  Andreia Gaita  <avidigal at novell.com>
-
-	* ButtonPainter.cs: refactoring of the button drawing
-	that was originally located in ThemeElementsDefault
-	
-	* TabControlPainter.cs: refactoring of the tabcontrol
-	drawing code originally located in the ThemeWin32Classic.
-	Also, fixes and changes:
-		- replaced most hardcoded values with properties to 
-		make it easier to customize implementations.
-		- fixed left and right alignment drawing problems
-		- fixed flatbutton border drawing on left and
-		right alignment
-		- fixed #79619
-		- fixed paddings, spacings and positioning.
-
-	
diff --git a/mcs/class/Managed.Windows.Forms/System.Windows.Forms.Theming/Default/CheckBoxPainter.cs b/mcs/class/Managed.Windows.Forms/System.Windows.Forms.Theming/Default/CheckBoxPainter.cs
index c0ec2af..b29f7eb 100644
--- a/mcs/class/Managed.Windows.Forms/System.Windows.Forms.Theming/Default/CheckBoxPainter.cs
+++ b/mcs/class/Managed.Windows.Forms/System.Windows.Forms.Theming/Default/CheckBoxPainter.cs
@@ -26,7 +26,6 @@ using System;
 using System.Drawing;
 using System.Drawing.Drawing2D;
 
-#if NET_2_0
 namespace System.Windows.Forms.Theming.Default
 {
 	/// <summary>
@@ -129,7 +128,7 @@ namespace System.Windows.Forms.Theming.Default
 			if (state == CheckState.Checked)
 				DrawCheck (g, bounds, Color.Black);
 			else if (state == CheckState.Indeterminate)
-				DrawCheck (g, bounds, SystemColors.ControlDarkDark);
+				DrawCheck (g, bounds, SystemColors.ControlDark);
 		}
 		
 		public virtual void DrawHotCheckBox (Graphics g, Rectangle bounds, Color backColor, Color foreColor, CheckState state)
@@ -356,4 +355,3 @@ namespace System.Windows.Forms.Theming.Default
 		#endregion
 	}
 }
-#endif
\ No newline at end of file
diff --git a/mcs/class/Managed.Windows.Forms/System.Windows.Forms.Theming/Default/RadioButtonPainter.cs b/mcs/class/Managed.Windows.Forms/System.Windows.Forms.Theming/Default/RadioButtonPainter.cs
index 09271d2..622b0be 100644
--- a/mcs/class/Managed.Windows.Forms/System.Windows.Forms.Theming/Default/RadioButtonPainter.cs
+++ b/mcs/class/Managed.Windows.Forms/System.Windows.Forms.Theming/Default/RadioButtonPainter.cs
@@ -26,7 +26,6 @@ using System;
 using System.Drawing;
 using System.Drawing.Drawing2D;
 
-#if NET_2_0
 namespace System.Windows.Forms.Theming.Default
 {
 	/// <summary>
@@ -238,4 +237,3 @@ namespace System.Windows.Forms.Theming.Default
 		#endregion
 	}
 }
-#endif
\ No newline at end of file
diff --git a/mcs/class/Managed.Windows.Forms/System.Windows.Forms.Theming/Default/TabControlPainter.cs b/mcs/class/Managed.Windows.Forms/System.Windows.Forms.Theming/Default/TabControlPainter.cs
index c770d85..0d32cb9 100644
--- a/mcs/class/Managed.Windows.Forms/System.Windows.Forms.Theming/Default/TabControlPainter.cs
+++ b/mcs/class/Managed.Windows.Forms/System.Windows.Forms.Theming/Default/TabControlPainter.cs
@@ -446,9 +446,30 @@ namespace System.Windows.Forms.Theming.Default
 				} else {
 					Rectangle str_rect = interior;
 
+					if (is_selected) {
+						// Reduce the interior size to match the inner size of non-selected tabs
+						str_rect.X += selectedTabDelta.X;
+						str_rect.Y += selectedTabDelta.Y;
+						str_rect.Width -= selectedTabDelta.Width;
+						str_rect.Height -= selectedTabDelta.Height;
+
+						str_rect.Y -= selectedTabDelta.Y; // Move up the text / image of the selected tab
+					}
+
 					if (tab.ImageList != null && page.ImageIndex >= 0 && page.ImageIndex < tab.ImageList.Images.Count) {
-						int image_y = interior.Y + (interior.Height - tab.ImageList.ImageSize.Height) / 2;
-						tab.ImageList.Draw (dc, new Point (interior.X, image_y), page.ImageIndex);
+						int image_x;
+						if (tab.SizeMode != TabSizeMode.Fixed) {
+							image_x = str_rect.X;
+						}
+						else {
+							image_x = str_rect.X + (str_rect.Width - tab.ImageList.ImageSize.Width) / 2;
+							if (page.Text != null) {
+								SizeF textSize = dc.MeasureString(page.Text, page.Font, str_rect.Size);
+								image_x -= (int)(textSize.Width / 2);
+							}
+						}
+						int image_y = str_rect.Y + (str_rect.Height - tab.ImageList.ImageSize.Height) / 2;
+						tab.ImageList.Draw (dc, new Point (image_x, image_y), page.ImageIndex);
 						str_rect.X += tab.ImageList.ImageSize.Width + 2;
 						str_rect.Width -= tab.ImageList.ImageSize.Width + 2;
 					}
diff --git a/mcs/class/Managed.Windows.Forms/System.Windows.Forms.Theming/Default/ToolStripPainter.cs b/mcs/class/Managed.Windows.Forms/System.Windows.Forms.Theming/Default/ToolStripPainter.cs
index 7c9471b..04fa545 100644
--- a/mcs/class/Managed.Windows.Forms/System.Windows.Forms.Theming/Default/ToolStripPainter.cs
+++ b/mcs/class/Managed.Windows.Forms/System.Windows.Forms.Theming/Default/ToolStripPainter.cs
@@ -25,7 +25,6 @@
 using System;
 using System.Drawing;
 
-#if NET_2_0
 namespace System.Windows.Forms.Theming.Default
 {
 	internal class ToolStripPainter
@@ -188,4 +187,3 @@ namespace System.Windows.Forms.Theming.Default
 		#endregion
 	}
 }
-#endif
\ No newline at end of file
diff --git a/mcs/class/Managed.Windows.Forms/System.Windows.Forms.Theming/ThemeElements.cs b/mcs/class/Managed.Windows.Forms/System.Windows.Forms.Theming/ThemeElements.cs
index 9e55dd5..ee653bb 100644
--- a/mcs/class/Managed.Windows.Forms/System.Windows.Forms.Theming/ThemeElements.cs
+++ b/mcs/class/Managed.Windows.Forms/System.Windows.Forms.Theming/ThemeElements.cs
@@ -105,7 +105,6 @@ namespace System.Windows.Forms.Theming
 			get { return theme.TabControlPainter; }
 		}
 
-#if NET_2_0
 		public virtual Default.CheckBoxPainter CheckBoxPainter {
 			get { return theme.CheckBoxPainter; }
 		}
@@ -117,7 +116,6 @@ namespace System.Windows.Forms.Theming
 		public virtual Default.ToolStripPainter ToolStripPainter {
 			get { return theme.ToolStripPainter; }
 		}
-#endif
 
 		#endregion
 	}
diff --git a/mcs/class/Managed.Windows.Forms/System.Windows.Forms.Theming/ThemeElementsDefault.cs b/mcs/class/Managed.Windows.Forms/System.Windows.Forms.Theming/ThemeElementsDefault.cs
index 3f02ded..638210c 100644
--- a/mcs/class/Managed.Windows.Forms/System.Windows.Forms.Theming/ThemeElementsDefault.cs
+++ b/mcs/class/Managed.Windows.Forms/System.Windows.Forms.Theming/ThemeElementsDefault.cs
@@ -65,7 +65,6 @@ namespace System.Windows.Forms.Theming
 			}
 		}
 
-#if NET_2_0
 		protected Default.ToolStripPainter toolStripPainter;
 		public virtual Default.ToolStripPainter ToolStripPainter {
 			get {
@@ -92,6 +91,5 @@ namespace System.Windows.Forms.Theming
 				return radioButtonPainter;
 			}
 		}
-#endif
 	}
 }
diff --git a/mcs/class/Managed.Windows.Forms/System.Windows.Forms.Theming/ThemeElementsVisualStyles.cs b/mcs/class/Managed.Windows.Forms/System.Windows.Forms.Theming/ThemeElementsVisualStyles.cs
index 52d3340..692eb06 100644
--- a/mcs/class/Managed.Windows.Forms/System.Windows.Forms.Theming/ThemeElementsVisualStyles.cs
+++ b/mcs/class/Managed.Windows.Forms/System.Windows.Forms.Theming/ThemeElementsVisualStyles.cs
@@ -26,7 +26,6 @@ namespace System.Windows.Forms.Theming
 {
 	class ThemeElementsVisualStyles : ThemeElementsDefault
 	{
-#if NET_2_0
 		public override Default.CheckBoxPainter CheckBoxPainter {
 			get {
 				if (checkBoxPainter == null)
@@ -48,7 +47,6 @@ namespace System.Windows.Forms.Theming
 				return toolStripPainter;
 			}
 		}
-#endif
 		public override Default.TabControlPainter TabControlPainter {
 			get {
 				if (tabControlPainter == null)
diff --git a/mcs/class/Managed.Windows.Forms/System.Windows.Forms.Theming/VisualStyles/CheckBoxPainter.cs b/mcs/class/Managed.Windows.Forms/System.Windows.Forms.Theming/VisualStyles/CheckBoxPainter.cs
index 0a0c878..3369d6d 100644
--- a/mcs/class/Managed.Windows.Forms/System.Windows.Forms.Theming/VisualStyles/CheckBoxPainter.cs
+++ b/mcs/class/Managed.Windows.Forms/System.Windows.Forms.Theming/VisualStyles/CheckBoxPainter.cs
@@ -22,7 +22,6 @@
 // Authors:
 //	George Giolfan (georgegiolfan at yahoo.com)
 
-#if NET_2_0
 using System.Drawing;
 using System.Windows.Forms.VisualStyles;
 namespace System.Windows.Forms.Theming.VisualStyles
@@ -103,4 +102,3 @@ namespace System.Windows.Forms.Theming.VisualStyles
 		}
 	}
 }
-#endif
\ No newline at end of file
diff --git a/mcs/class/Managed.Windows.Forms/System.Windows.Forms.Theming/VisualStyles/RadioButtonPainter.cs b/mcs/class/Managed.Windows.Forms/System.Windows.Forms.Theming/VisualStyles/RadioButtonPainter.cs
index 166dfa0..a3d2484 100644
--- a/mcs/class/Managed.Windows.Forms/System.Windows.Forms.Theming/VisualStyles/RadioButtonPainter.cs
+++ b/mcs/class/Managed.Windows.Forms/System.Windows.Forms.Theming/VisualStyles/RadioButtonPainter.cs
@@ -22,7 +22,6 @@
 // Authors:
 //	George Giolfan (georgegiolfan at yahoo.com)
 
-#if NET_2_0
 using System.Drawing;
 using System.Windows.Forms.VisualStyles;
 namespace System.Windows.Forms.Theming.VisualStyles
@@ -55,4 +54,3 @@ namespace System.Windows.Forms.Theming.VisualStyles
 		}
 	}
 }
-#endif
\ No newline at end of file
diff --git a/mcs/class/Managed.Windows.Forms/System.Windows.Forms.Theming/VisualStyles/ToolStripPainter.cs b/mcs/class/Managed.Windows.Forms/System.Windows.Forms.Theming/VisualStyles/ToolStripPainter.cs
index 25ce31a..22acab1 100644
--- a/mcs/class/Managed.Windows.Forms/System.Windows.Forms.Theming/VisualStyles/ToolStripPainter.cs
+++ b/mcs/class/Managed.Windows.Forms/System.Windows.Forms.Theming/VisualStyles/ToolStripPainter.cs
@@ -22,7 +22,6 @@
 // Authors:
 //	George Giolfan (georgegiolfan at yahoo.com)
 
-#if NET_2_0
 using System.Drawing;
 using System.Windows.Forms.VisualStyles;
 namespace System.Windows.Forms.Theming.VisualStyles
@@ -212,4 +211,3 @@ namespace System.Windows.Forms.Theming.VisualStyles
 		}
 	}
 }
-#endif
\ No newline at end of file
diff --git a/mcs/class/Managed.Windows.Forms/System.Windows.Forms.VisualStyles/BackgroundType.cs b/mcs/class/Managed.Windows.Forms/System.Windows.Forms.VisualStyles/BackgroundType.cs
index 7f6330d..f8b39df 100644
--- a/mcs/class/Managed.Windows.Forms/System.Windows.Forms.VisualStyles/BackgroundType.cs
+++ b/mcs/class/Managed.Windows.Forms/System.Windows.Forms.VisualStyles/BackgroundType.cs
@@ -26,7 +26,6 @@
 //	Jonathan Pobst (monkey at jpobst.com)
 //
 
-#if NET_2_0
 namespace System.Windows.Forms.VisualStyles
 {
 	public enum BackgroundType
@@ -36,4 +35,3 @@ namespace System.Windows.Forms.VisualStyles
 		None = 2
 	}
 }
-#endif
\ No newline at end of file
diff --git a/mcs/class/Managed.Windows.Forms/System.Windows.Forms.VisualStyles/BooleanProperty.cs b/mcs/class/Managed.Windows.Forms/System.Windows.Forms.VisualStyles/BooleanProperty.cs
index 3da2f70..f1cf307 100644
--- a/mcs/class/Managed.Windows.Forms/System.Windows.Forms.VisualStyles/BooleanProperty.cs
+++ b/mcs/class/Managed.Windows.Forms/System.Windows.Forms.VisualStyles/BooleanProperty.cs
@@ -28,10 +28,7 @@
 
 namespace System.Windows.Forms.VisualStyles
 {
-#if NET_2_0
-	public
-#endif
-	enum BooleanProperty
+	public enum BooleanProperty
 	{
 		Transparent = 2201,
 		AutoSize = 2202,
diff --git a/mcs/class/Managed.Windows.Forms/System.Windows.Forms.VisualStyles/BorderType.cs b/mcs/class/Managed.Windows.Forms/System.Windows.Forms.VisualStyles/BorderType.cs
index efc28b3..c56faac 100644
--- a/mcs/class/Managed.Windows.Forms/System.Windows.Forms.VisualStyles/BorderType.cs
+++ b/mcs/class/Managed.Windows.Forms/System.Windows.Forms.VisualStyles/BorderType.cs
@@ -26,7 +26,6 @@
 //	Jonathan Pobst (monkey at jpobst.com)
 //
 
-#if NET_2_0
 namespace System.Windows.Forms.VisualStyles
 {
 	public enum BorderType
@@ -36,4 +35,3 @@ namespace System.Windows.Forms.VisualStyles
 		Ellipse = 2
 	}
 }
-#endif
\ No newline at end of file
diff --git a/mcs/class/Managed.Windows.Forms/System.Windows.Forms.VisualStyles/CheckBoxState.cs b/mcs/class/Managed.Windows.Forms/System.Windows.Forms.VisualStyles/CheckBoxState.cs
index 4d269f2..4d888a8 100644
--- a/mcs/class/Managed.Windows.Forms/System.Windows.Forms.VisualStyles/CheckBoxState.cs
+++ b/mcs/class/Managed.Windows.Forms/System.Windows.Forms.VisualStyles/CheckBoxState.cs
@@ -28,10 +28,7 @@
 
 namespace System.Windows.Forms.VisualStyles
 {
-#if NET_2_0
-	public
-#endif
-	enum CheckBoxState
+	public enum CheckBoxState
 	{
 		UncheckedNormal = 1,
 		UncheckedHot = 2,
diff --git a/mcs/class/Managed.Windows.Forms/System.Windows.Forms.VisualStyles/ColorProperty.cs b/mcs/class/Managed.Windows.Forms/System.Windows.Forms.VisualStyles/ColorProperty.cs
index 164ee3d..6580958 100644
--- a/mcs/class/Managed.Windows.Forms/System.Windows.Forms.VisualStyles/ColorProperty.cs
+++ b/mcs/class/Managed.Windows.Forms/System.Windows.Forms.VisualStyles/ColorProperty.cs
@@ -28,10 +28,7 @@
 
 namespace System.Windows.Forms.VisualStyles
 {
-#if NET_2_0
-	public
-#endif
-	enum ColorProperty
+	public enum ColorProperty
 	{
 		BorderColor = 3801,
 		FillColor = 3802,
diff --git a/mcs/class/Managed.Windows.Forms/System.Windows.Forms.VisualStyles/ComboBoxState.cs b/mcs/class/Managed.Windows.Forms/System.Windows.Forms.VisualStyles/ComboBoxState.cs
index edb9543..0a92048 100644
--- a/mcs/class/Managed.Windows.Forms/System.Windows.Forms.VisualStyles/ComboBoxState.cs
+++ b/mcs/class/Managed.Windows.Forms/System.Windows.Forms.VisualStyles/ComboBoxState.cs
@@ -26,7 +26,6 @@
 //	Jonathan Pobst (monkey at jpobst.com)
 //
 
-#if NET_2_0
 namespace System.Windows.Forms.VisualStyles
 {
 	public enum ComboBoxState
@@ -37,4 +36,3 @@ namespace System.Windows.Forms.VisualStyles
 		Disabled = 4
 	}
 }
-#endif
\ No newline at end of file
diff --git a/mcs/class/Managed.Windows.Forms/System.Windows.Forms.VisualStyles/ContentAlignment.cs b/mcs/class/Managed.Windows.Forms/System.Windows.Forms.VisualStyles/ContentAlignment.cs
index 765a6d4..0cdf011 100644
--- a/mcs/class/Managed.Windows.Forms/System.Windows.Forms.VisualStyles/ContentAlignment.cs
+++ b/mcs/class/Managed.Windows.Forms/System.Windows.Forms.VisualStyles/ContentAlignment.cs
@@ -26,7 +26,6 @@
 //	Jonathan Pobst (monkey at jpobst.com)
 //
 
-#if NET_2_0
 namespace System.Windows.Forms.VisualStyles
 {
 	public enum ContentAlignment
@@ -36,4 +35,3 @@ namespace System.Windows.Forms.VisualStyles
 		Right = 2
 	}
 }
-#endif
\ No newline at end of file
diff --git a/mcs/class/Managed.Windows.Forms/System.Windows.Forms.VisualStyles/EdgeEffects.cs b/mcs/class/Managed.Windows.Forms/System.Windows.Forms.VisualStyles/EdgeEffects.cs
index a92a9ad..686453b 100644
--- a/mcs/class/Managed.Windows.Forms/System.Windows.Forms.VisualStyles/EdgeEffects.cs
+++ b/mcs/class/Managed.Windows.Forms/System.Windows.Forms.VisualStyles/EdgeEffects.cs
@@ -29,10 +29,7 @@
 namespace System.Windows.Forms.VisualStyles
 {
 	[Flags]
-#if NET_2_0
-	public
-#endif
-	enum EdgeEffects
+	public enum EdgeEffects
 	{
 		None = 0,
 		FillInterior = 2048,
diff --git a/mcs/class/Managed.Windows.Forms/System.Windows.Forms.VisualStyles/EdgeStyle.cs b/mcs/class/Managed.Windows.Forms/System.Windows.Forms.VisualStyles/EdgeStyle.cs
index 4072dc5..fc96eaf 100644
--- a/mcs/class/Managed.Windows.Forms/System.Windows.Forms.VisualStyles/EdgeStyle.cs
+++ b/mcs/class/Managed.Windows.Forms/System.Windows.Forms.VisualStyles/EdgeStyle.cs
@@ -28,10 +28,7 @@
 
 namespace System.Windows.Forms.VisualStyles
 {
-#if NET_2_0
-	public
-#endif
-	enum EdgeStyle
+	public enum EdgeStyle
 	{
 		Raised = 5,
 		Etched = 6,
diff --git a/mcs/class/Managed.Windows.Forms/System.Windows.Forms.VisualStyles/Edges.cs b/mcs/class/Managed.Windows.Forms/System.Windows.Forms.VisualStyles/Edges.cs
index 3bb6f57..369ea70 100644
--- a/mcs/class/Managed.Windows.Forms/System.Windows.Forms.VisualStyles/Edges.cs
+++ b/mcs/class/Managed.Windows.Forms/System.Windows.Forms.VisualStyles/Edges.cs
@@ -29,10 +29,7 @@
 namespace System.Windows.Forms.VisualStyles
 {
 	[Flags]
-#if NET_2_0
-	public
-#endif
-	enum Edges
+	public enum Edges
 	{
 		Left = 1,
 		Top = 2,
diff --git a/mcs/class/Managed.Windows.Forms/System.Windows.Forms.VisualStyles/EnumProperty.cs b/mcs/class/Managed.Windows.Forms/System.Windows.Forms.VisualStyles/EnumProperty.cs
index bbd7066..e79b4f9 100644
--- a/mcs/class/Managed.Windows.Forms/System.Windows.Forms.VisualStyles/EnumProperty.cs
+++ b/mcs/class/Managed.Windows.Forms/System.Windows.Forms.VisualStyles/EnumProperty.cs
@@ -28,10 +28,7 @@
 
 namespace System.Windows.Forms.VisualStyles
 {
-#if NET_2_0
-	public
-#endif
-	enum EnumProperty
+	public enum EnumProperty
 	{
 		BackgroundType = 4001,
 		BorderType = 4002,
diff --git a/mcs/class/Managed.Windows.Forms/System.Windows.Forms.VisualStyles/FilenameProperty.cs b/mcs/class/Managed.Windows.Forms/System.Windows.Forms.VisualStyles/FilenameProperty.cs
index be687f5..6e31303 100644
--- a/mcs/class/Managed.Windows.Forms/System.Windows.Forms.VisualStyles/FilenameProperty.cs
+++ b/mcs/class/Managed.Windows.Forms/System.Windows.Forms.VisualStyles/FilenameProperty.cs
@@ -28,10 +28,7 @@
 
 namespace System.Windows.Forms.VisualStyles
 {
-#if NET_2_0
-	public
-#endif
-	enum FilenameProperty
+	public enum FilenameProperty
 	{
 		ImageFile = 3001,
 		ImageFile1 = 3002,
diff --git a/mcs/class/Managed.Windows.Forms/System.Windows.Forms.VisualStyles/FillType.cs b/mcs/class/Managed.Windows.Forms/System.Windows.Forms.VisualStyles/FillType.cs
index 47368fb..4468784 100644
--- a/mcs/class/Managed.Windows.Forms/System.Windows.Forms.VisualStyles/FillType.cs
+++ b/mcs/class/Managed.Windows.Forms/System.Windows.Forms.VisualStyles/FillType.cs
@@ -26,7 +26,6 @@
 //	Jonathan Pobst (monkey at jpobst.com)
 //
 
-#if NET_2_0
 namespace System.Windows.Forms.VisualStyles
 {
 	public enum FillType
@@ -38,4 +37,3 @@ namespace System.Windows.Forms.VisualStyles
 		TileImage = 4
 	}
 }
-#endif
\ No newline at end of file
diff --git a/mcs/class/Managed.Windows.Forms/System.Windows.Forms.VisualStyles/FontProperty.cs b/mcs/class/Managed.Windows.Forms/System.Windows.Forms.VisualStyles/FontProperty.cs
index 8592c9d..3129d2a 100644
--- a/mcs/class/Managed.Windows.Forms/System.Windows.Forms.VisualStyles/FontProperty.cs
+++ b/mcs/class/Managed.Windows.Forms/System.Windows.Forms.VisualStyles/FontProperty.cs
@@ -28,10 +28,7 @@
 
 namespace System.Windows.Forms.VisualStyles
 {
-#if NET_2_0
-	public
-#endif
-	enum FontProperty
+	public enum FontProperty
 	{
 		GlyphFont = 2601
 	}
diff --git a/mcs/class/Managed.Windows.Forms/System.Windows.Forms.VisualStyles/GlyphFontSizingType.cs b/mcs/class/Managed.Windows.Forms/System.Windows.Forms.VisualStyles/GlyphFontSizingType.cs
index a71e6ae..6d6e4aa 100644
--- a/mcs/class/Managed.Windows.Forms/System.Windows.Forms.VisualStyles/GlyphFontSizingType.cs
+++ b/mcs/class/Managed.Windows.Forms/System.Windows.Forms.VisualStyles/GlyphFontSizingType.cs
@@ -26,7 +26,6 @@
 //	Jonathan Pobst (monkey at jpobst.com)
 //
 
-#if NET_2_0
 namespace System.Windows.Forms.VisualStyles
 {
 	public enum GlyphFontSizingType
@@ -36,4 +35,3 @@ namespace System.Windows.Forms.VisualStyles
 		Dpi = 2
 	}
 }
-#endif
\ No newline at end of file
diff --git a/mcs/class/Managed.Windows.Forms/System.Windows.Forms.VisualStyles/GlyphType.cs b/mcs/class/Managed.Windows.Forms/System.Windows.Forms.VisualStyles/GlyphType.cs
index d241895..184173a 100644
--- a/mcs/class/Managed.Windows.Forms/System.Windows.Forms.VisualStyles/GlyphType.cs
+++ b/mcs/class/Managed.Windows.Forms/System.Windows.Forms.VisualStyles/GlyphType.cs
@@ -26,7 +26,6 @@
 //	Jonathan Pobst (monkey at jpobst.com)
 //
 
-#if NET_2_0
 namespace System.Windows.Forms.VisualStyles
 {
 	public enum GlyphType
@@ -36,4 +35,3 @@ namespace System.Windows.Forms.VisualStyles
 		FontGlyph = 2
 	}
 }
-#endif
\ No newline at end of file
diff --git a/mcs/class/Managed.Windows.Forms/System.Windows.Forms.VisualStyles/GroupBoxState.cs b/mcs/class/Managed.Windows.Forms/System.Windows.Forms.VisualStyles/GroupBoxState.cs
index def276d..c1d46c1 100644
--- a/mcs/class/Managed.Windows.Forms/System.Windows.Forms.VisualStyles/GroupBoxState.cs
+++ b/mcs/class/Managed.Windows.Forms/System.Windows.Forms.VisualStyles/GroupBoxState.cs
@@ -28,10 +28,7 @@
 
 namespace System.Windows.Forms.VisualStyles
 {
-#if NET_2_0
-	public
-#endif
-	enum GroupBoxState
+	public enum GroupBoxState
 	{
 		Normal = 1,
 		Disabled = 2
diff --git a/mcs/class/Managed.Windows.Forms/System.Windows.Forms.VisualStyles/GtkPlus.cs b/mcs/class/Managed.Windows.Forms/System.Windows.Forms.VisualStyles/GtkPlus.cs
index 878a700..0cba0d4 100644
--- a/mcs/class/Managed.Windows.Forms/System.Windows.Forms.VisualStyles/GtkPlus.cs
+++ b/mcs/class/Managed.Windows.Forms/System.Windows.Forms.VisualStyles/GtkPlus.cs
@@ -118,12 +118,10 @@ namespace System.Windows.Forms.VisualStyles
 		readonly GtkWidgetPointer @fixed;
 		readonly GtkStylePointer [] styles;
 		#region ComboBox
-#if NET_2_0
 		readonly GtkWidgetPointer combo_box_drop_down_toggle_button;
 		readonly GtkWidgetPointer combo_box_drop_down_arrow;
 		GtkStylePointer combo_box_drop_down_toggle_button_style;
 		GtkStylePointer combo_box_drop_down_arrow_style;
-#endif
 		#endregion
 		#region ToolBar
 		readonly GtkWidgetPointer tool_bar_button;
@@ -141,10 +139,8 @@ namespace System.Windows.Forms.VisualStyles
 		readonly CheckBoxPainter check_box_painter = new CheckBoxPainter ();
 		readonly RadioButtonPainter radio_button_painter = new RadioButtonPainter ();
 		#region ComboBox
-#if NET_2_0
 		readonly ComboBoxDropDownButtonPainter combo_box_drop_down_button_painter = new ComboBoxDropDownButtonPainter ();
 		readonly ComboBoxBorderPainter combo_box_border_painter = new ComboBoxBorderPainter ();
-#endif
 		#endregion
 		#region GroupBox
 		readonly GroupBoxPainter group_box_painter = new GroupBoxPainter ();
@@ -199,7 +195,6 @@ namespace System.Windows.Forms.VisualStyles
 			gtk_container_add (@fixed, widgets [(int)WidgetType.CheckBox] = gtk_check_button_new ());
 			#endregion
 			#region ComboBox
-#if NET_2_0
 			gtk_container_add (@fixed, widgets [(int)WidgetType.ComboBox] = gtk_combo_box_entry_new ());
 			gtk_widget_realize (widgets [(int)WidgetType.ComboBox]);
 			combo_box_drop_down_toggle_button = GetFirstChildWidgetOfType.Get (widgets [(int)WidgetType.ComboBox], gtk_toggle_button_get_type ());
@@ -207,7 +202,6 @@ namespace System.Windows.Forms.VisualStyles
 			combo_box_drop_down_arrow = GetFirstChildWidgetOfType.Get (combo_box_drop_down_toggle_button, gtk_arrow_get_type ());
 			g_object_ref (combo_box_drop_down_toggle_button_style = GetWidgetStyle (combo_box_drop_down_toggle_button));
 			g_object_ref (combo_box_drop_down_arrow_style = GetWidgetStyle (combo_box_drop_down_arrow));
-#endif
 			#endregion
 			#region GroupBox
 			gtk_container_add (@fixed, widgets [(int)WidgetType.GroupBox] = gtk_frame_new (null));
@@ -270,10 +264,8 @@ namespace System.Windows.Forms.VisualStyles
 			for (int widget_index = 0; widget_index < WidgetTypeCount; widget_index++)
 				g_object_unref (styles [widget_index]);
 			#region ComboBox
-#if NET_2_0
 			g_object_unref (combo_box_drop_down_toggle_button_style);
 			g_object_unref (combo_box_drop_down_arrow_style);
-#endif
 			#endregion
 			#region ToolBar
 			g_object_unref (tool_bar_button_style);
@@ -309,7 +301,6 @@ namespace System.Windows.Forms.VisualStyles
 		}
 		#endregion
 		#region ComboBox
-#if NET_2_0
 		public void ComboBoxPaintDropDownButton (IDeviceContext dc, Rectangle bounds, Rectangle clippingArea, GtkPlusState state)
 		{
 			combo_box_drop_down_button_painter.Configure (state);
@@ -319,7 +310,6 @@ namespace System.Windows.Forms.VisualStyles
 		{
 			Paint (WidgetType.ComboBox, bounds, dc, clippingArea, combo_box_border_painter);
 		}
-#endif
 		#endregion
 		#region GroupBox
 		public void GroupBoxPaint (IDeviceContext dc, Rectangle bounds, Rectangle excludedArea, GtkPlusState state)
@@ -529,9 +519,7 @@ namespace System.Windows.Forms.VisualStyles
 			g_object_unref (drawable);
 			Bitmap bitmap = new Bitmap (painted_area.Width, painted_area.Height, rowstride, PixelFormat.Format32bppPArgb, pixel_data);
 			Graphics g;
-#if NET_2_0
 			bool graphics_is_from_hdc = false;
-#endif
 			switch (deviceContextType) {
 			case DeviceContextType.Graphics:
 				g = (Graphics)dc;
@@ -540,16 +528,12 @@ namespace System.Windows.Forms.VisualStyles
 				g = Graphics.FromHdc (dc.GetHdc ());
 				break;
 			default:
-#if NET_2_0
 				g = dc as Graphics;
 				if (g == null) {
 					graphics_is_from_hdc = true;
 					g = Graphics.FromHdc (dc.GetHdc ());
 				} else
 					graphics_is_from_hdc = false;
-#else
-				g = (Graphics)dc;
-#endif
 				break;
 			}
 			painted_area.Offset (bounds.X, bounds.Y);
@@ -562,12 +546,10 @@ namespace System.Windows.Forms.VisualStyles
 				dc.ReleaseHdc ();
 				break;
 			default:
-#if NET_2_0
 				if (graphics_is_from_hdc) {
 					g.Dispose ();
 					dc.ReleaseHdc ();
 				}
-#endif
 				break;
 			}
 			bitmap.Dispose ();
@@ -698,7 +680,6 @@ namespace System.Windows.Forms.VisualStyles
 		}
 		#endregion
 		#region ComboBox
-#if NET_2_0
 		class ComboBoxDropDownButtonPainter : Painter
 		{
 			GtkPlusState state;
@@ -766,7 +747,6 @@ namespace System.Windows.Forms.VisualStyles
 					 x, y, width, height);
 			}
 		}
-#endif
 		#endregion
 		#region GroupBox
 		class GroupBoxPainter : Painter
@@ -1246,9 +1226,7 @@ namespace System.Windows.Forms.VisualStyles
 		{
 			Button,
 			CheckBox,
-#if NET_2_0
 			ComboBox,
-#endif
 			GroupBox,
 			ProgressBar,
 			RadioButton,
@@ -1281,14 +1259,12 @@ namespace System.Windows.Forms.VisualStyles
 			gtk_widget_style_get (widget, propertyName, out result, IntPtr.Zero);
 			return result;
 		}
-#if NET_2_0
 		static float GetWidgetStyleSingle (GtkWidgetPointer widget, string propertyName)
 		{
 			gfloat result;
 			gtk_widget_style_get (widget, propertyName, out result, IntPtr.Zero);
 			return result;
 		}
-#endif
 		static bool GetWidgetStyleBoolean (GtkWidgetPointer widget, string propertyName)
 		{
 			gboolean result;
@@ -1296,7 +1272,6 @@ namespace System.Windows.Forms.VisualStyles
 			return result;
 		}
 		#region GetFirstChildWidgetOfType
-#if NET_2_0
 		static class GetFirstChildWidgetOfType
 		{
 			public static GtkWidgetPointer Get (GtkContainerPointer parent, GType childType)
@@ -1331,7 +1306,6 @@ namespace System.Windows.Forms.VisualStyles
 			static GtkWidgetPointer Result;
 			static ArrayList ContainersToSearch;
 		}
-#endif
 		#endregion
 		static GtkStylePointer GetWidgetStyle (GtkWidgetPointer widget)
 		{
@@ -1410,28 +1384,22 @@ namespace System.Windows.Forms.VisualStyles
 		static extern IntPtr gtk_check_version (guint required_major, guint required_minor, guint required_micro);
 		[DllImport (GtkLibraryName)]
 		static extern void gtk_container_add (GtkContainerPointer container, GtkWidgetPointer widget);
-#if NET_2_0
 		[DllImport (GtkLibraryName)]
 		static extern void gtk_container_forall (GtkContainerPointer container, GtkCallback callback, gpointer callback_data);
 		[UnmanagedFunctionPointer (CallingConvention.Cdecl)]
 		delegate void GtkCallback (GtkWidgetPointer widget, gpointer data);
-#endif
 		[DllImport (GtkLibraryName)]
 		static extern void gtk_object_destroy (GtkObjectPointer @object);
 		[DllImport (GtkLibraryName)]
 		static extern GtkStylePointer gtk_rc_get_style (GtkWidgetPointer widget);
 		[DllImport (GtkLibraryName)]
 		static extern GtkStylePointer gtk_style_attach (GtkStylePointer style, GdkWindowPointer window);
-#if NET_2_0
 		[DllImport (GtkLibraryName)]
 		static extern void gtk_widget_realize (GtkWidgetPointer widget);
-#endif
 		[DllImport (GtkLibraryName)]
 		static extern void gtk_widget_style_get (GtkWidgetPointer widget, string property, out gint value, IntPtr nullTerminator);
-#if NET_2_0
 		[DllImport (GtkLibraryName)]
 		static extern void gtk_widget_style_get (GtkWidgetPointer widget, string property, out gfloat value, IntPtr nullTerminator);
-#endif
 		[DllImport (GtkLibraryName)]
 		static extern void gtk_widget_style_get (GtkWidgetPointer widget, string property1, out gint value1, string property2, out gint value2, IntPtr nullTerminator);
 		[DllImport (GtkLibraryName)]
@@ -1461,24 +1429,20 @@ namespace System.Windows.Forms.VisualStyles
 		[DllImport (GtkLibraryName)]
 		static extern GtkWidgetPointer gtk_bin_get_child (GtkBinPointer bin);
 		#region Widget type
-#if NET_2_0
 		[DllImport (GtkLibraryName)]
 		static extern GType gtk_arrow_get_type ();
 		[DllImport (GtkLibraryName)]
 		static extern GType gtk_container_get_type ();
 		[DllImport (GtkLibraryName)]
 		static extern GType gtk_toggle_button_get_type ();
-#endif
 		#endregion
 		#region Widget creation
 		[DllImport (GtkLibraryName)]
 		static extern GtkWidgetPointer gtk_button_new ();
 		[DllImport (GtkLibraryName)]
 		static extern GtkWidgetPointer gtk_check_button_new ();
-#if NET_2_0
 		[DllImport (GtkLibraryName)]
 		static extern GtkWidgetPointer gtk_combo_box_entry_new ();
-#endif
 		[DllImport (GtkLibraryName)]
 		static extern GtkWidgetPointer gtk_entry_new ();
 		[DllImport (GtkLibraryName)]
@@ -1765,10 +1729,8 @@ namespace System.Windows.Forms.VisualStyles
 		static extern gpointer g_object_ref (gpointer @object);
 		[DllImport (GobjectLibraryName)]
 		static extern void g_object_unref (gpointer @object);
-#if NET_2_0
 		[DllImport (GobjectLibraryName)]
 		static extern gboolean g_type_check_instance_is_a (GTypeInstancePointer type_instance, GType iface_type);
-#endif
 		[DllImport (GobjectLibraryName)]
 		static extern void g_object_get (gpointer @object, string property_name, out gboolean value, IntPtr nullTerminator);
 		const int G_TYPE_FUNDAMENTAL_SHIFT = 2;
diff --git a/mcs/class/Managed.Windows.Forms/System.Windows.Forms.VisualStyles/HitTestCode.cs b/mcs/class/Managed.Windows.Forms/System.Windows.Forms.VisualStyles/HitTestCode.cs
index 0609b7e..9af2100 100644
--- a/mcs/class/Managed.Windows.Forms/System.Windows.Forms.VisualStyles/HitTestCode.cs
+++ b/mcs/class/Managed.Windows.Forms/System.Windows.Forms.VisualStyles/HitTestCode.cs
@@ -28,10 +28,7 @@
 
 namespace System.Windows.Forms.VisualStyles
 {
-#if NET_2_0
-	public
-#endif
-	enum HitTestCode
+	public enum HitTestCode
 	{
 		Nowhere = 0,
 		Client = 1,
diff --git a/mcs/class/Managed.Windows.Forms/System.Windows.Forms.VisualStyles/HitTestOptions.cs b/mcs/class/Managed.Windows.Forms/System.Windows.Forms.VisualStyles/HitTestOptions.cs
index 0aedc25..23a4c2f 100644
--- a/mcs/class/Managed.Windows.Forms/System.Windows.Forms.VisualStyles/HitTestOptions.cs
+++ b/mcs/class/Managed.Windows.Forms/System.Windows.Forms.VisualStyles/HitTestOptions.cs
@@ -29,10 +29,7 @@
 namespace System.Windows.Forms.VisualStyles
 {
 	[Flags]
-#if NET_2_0
-	public
-#endif
-	enum HitTestOptions
+	public enum HitTestOptions
 	{
 		BackgroundSegment = 0,
 		FixedBorder = 2,
diff --git a/mcs/class/Managed.Windows.Forms/System.Windows.Forms.VisualStyles/HorizontalAlign.cs b/mcs/class/Managed.Windows.Forms/System.Windows.Forms.VisualStyles/HorizontalAlign.cs
index a785e1b..a31bec9 100644
--- a/mcs/class/Managed.Windows.Forms/System.Windows.Forms.VisualStyles/HorizontalAlign.cs
+++ b/mcs/class/Managed.Windows.Forms/System.Windows.Forms.VisualStyles/HorizontalAlign.cs
@@ -26,7 +26,6 @@
 //	Jonathan Pobst (monkey at jpobst.com)
 //
 
-#if NET_2_0
 namespace System.Windows.Forms.VisualStyles
 {
 	public enum HorizontalAlign
@@ -36,4 +35,3 @@ namespace System.Windows.Forms.VisualStyles
 		Right = 2
 	}
 }
-#endif
\ No newline at end of file
diff --git a/mcs/class/Managed.Windows.Forms/System.Windows.Forms.VisualStyles/IconEffect.cs b/mcs/class/Managed.Windows.Forms/System.Windows.Forms.VisualStyles/IconEffect.cs
index 9fd6f5b..9978a55 100644
--- a/mcs/class/Managed.Windows.Forms/System.Windows.Forms.VisualStyles/IconEffect.cs
+++ b/mcs/class/Managed.Windows.Forms/System.Windows.Forms.VisualStyles/IconEffect.cs
@@ -26,7 +26,6 @@
 //	Jonathan Pobst (monkey at jpobst.com)
 //
 
-#if NET_2_0
 namespace System.Windows.Forms.VisualStyles
 {
 	public enum IconEffect
@@ -38,4 +37,3 @@ namespace System.Windows.Forms.VisualStyles
 		Alpha = 4
 	}
 }
-#endif
\ No newline at end of file
diff --git a/mcs/class/Managed.Windows.Forms/System.Windows.Forms.VisualStyles/ImageOrientation.cs b/mcs/class/Managed.Windows.Forms/System.Windows.Forms.VisualStyles/ImageOrientation.cs
index 28eb3fa..05a97e6 100644
--- a/mcs/class/Managed.Windows.Forms/System.Windows.Forms.VisualStyles/ImageOrientation.cs
+++ b/mcs/class/Managed.Windows.Forms/System.Windows.Forms.VisualStyles/ImageOrientation.cs
@@ -26,7 +26,6 @@
 //	Jonathan Pobst (monkey at jpobst.com)
 //
 
-#if NET_2_0
 namespace System.Windows.Forms.VisualStyles
 {
 	public enum ImageOrientation
@@ -35,4 +34,3 @@ namespace System.Windows.Forms.VisualStyles
 		Horizontal = 1
 	}
 }
-#endif
\ No newline at end of file
diff --git a/mcs/class/Managed.Windows.Forms/System.Windows.Forms.VisualStyles/ImageSelectType.cs b/mcs/class/Managed.Windows.Forms/System.Windows.Forms.VisualStyles/ImageSelectType.cs
index f5cf27a..c7ad9b5 100644
--- a/mcs/class/Managed.Windows.Forms/System.Windows.Forms.VisualStyles/ImageSelectType.cs
+++ b/mcs/class/Managed.Windows.Forms/System.Windows.Forms.VisualStyles/ImageSelectType.cs
@@ -26,7 +26,6 @@
 //	Jonathan Pobst (monkey at jpobst.com)
 //
 
-#if NET_2_0
 namespace System.Windows.Forms.VisualStyles
 {
 	public enum ImageSelectType
@@ -36,4 +35,3 @@ namespace System.Windows.Forms.VisualStyles
 		Dpi = 2
 	}
 }
-#endif
\ No newline at end of file
diff --git a/mcs/class/Managed.Windows.Forms/System.Windows.Forms.VisualStyles/IntegerProperty.cs b/mcs/class/Managed.Windows.Forms/System.Windows.Forms.VisualStyles/IntegerProperty.cs
index c6983bc..a3c7bf3 100644
--- a/mcs/class/Managed.Windows.Forms/System.Windows.Forms.VisualStyles/IntegerProperty.cs
+++ b/mcs/class/Managed.Windows.Forms/System.Windows.Forms.VisualStyles/IntegerProperty.cs
@@ -28,10 +28,7 @@
 
 namespace System.Windows.Forms.VisualStyles
 {
-#if NET_2_0
-	public
-#endif
-	enum IntegerProperty
+	public enum IntegerProperty
 	{
 		ImageCount = 2401,
 		AlphaLevel = 2402,
diff --git a/mcs/class/Managed.Windows.Forms/System.Windows.Forms.VisualStyles/MarginProperty.cs b/mcs/class/Managed.Windows.Forms/System.Windows.Forms.VisualStyles/MarginProperty.cs
index 3b92724..a79a5c6 100644
--- a/mcs/class/Managed.Windows.Forms/System.Windows.Forms.VisualStyles/MarginProperty.cs
+++ b/mcs/class/Managed.Windows.Forms/System.Windows.Forms.VisualStyles/MarginProperty.cs
@@ -28,10 +28,7 @@
 
 namespace System.Windows.Forms.VisualStyles
 {
-#if NET_2_0
-	public
-#endif
-	enum MarginProperty
+	public enum MarginProperty
 	{
 		SizingMargins = 3601,
 		ContentMargins = 3602,
diff --git a/mcs/class/Managed.Windows.Forms/System.Windows.Forms.VisualStyles/OffsetType.cs b/mcs/class/Managed.Windows.Forms/System.Windows.Forms.VisualStyles/OffsetType.cs
index f660660..2315d31 100644
--- a/mcs/class/Managed.Windows.Forms/System.Windows.Forms.VisualStyles/OffsetType.cs
+++ b/mcs/class/Managed.Windows.Forms/System.Windows.Forms.VisualStyles/OffsetType.cs
@@ -26,7 +26,6 @@
 //	Jonathan Pobst (monkey at jpobst.com)
 //
 
-#if NET_2_0
 namespace System.Windows.Forms.VisualStyles
 {
 	public enum OffsetType
@@ -47,4 +46,3 @@ namespace System.Windows.Forms.VisualStyles
 		BelowLastButton = 13
 	}
 }
-#endif
\ No newline at end of file
diff --git a/mcs/class/Managed.Windows.Forms/System.Windows.Forms.VisualStyles/PointProperty.cs b/mcs/class/Managed.Windows.Forms/System.Windows.Forms.VisualStyles/PointProperty.cs
index a227873..54f7877 100644
--- a/mcs/class/Managed.Windows.Forms/System.Windows.Forms.VisualStyles/PointProperty.cs
+++ b/mcs/class/Managed.Windows.Forms/System.Windows.Forms.VisualStyles/PointProperty.cs
@@ -28,10 +28,7 @@
 
 namespace System.Windows.Forms.VisualStyles
 {
-#if NET_2_0
-	public
-#endif
-	enum PointProperty
+	public enum PointProperty
 	{
 		Offset = 3401,
 		TextShadowOffset = 3402,
diff --git a/mcs/class/Managed.Windows.Forms/System.Windows.Forms.VisualStyles/PushButtonState.cs b/mcs/class/Managed.Windows.Forms/System.Windows.Forms.VisualStyles/PushButtonState.cs
index ebaa3cd..3c334c0 100644
--- a/mcs/class/Managed.Windows.Forms/System.Windows.Forms.VisualStyles/PushButtonState.cs
+++ b/mcs/class/Managed.Windows.Forms/System.Windows.Forms.VisualStyles/PushButtonState.cs
@@ -28,10 +28,7 @@
 
 namespace System.Windows.Forms.VisualStyles
 {
-#if NET_2_0
-	public
-#endif
-	enum PushButtonState
+	public enum PushButtonState
 	{
 		Normal = 1,
 		Hot = 2,
diff --git a/mcs/class/Managed.Windows.Forms/System.Windows.Forms.VisualStyles/RadioButtonState.cs b/mcs/class/Managed.Windows.Forms/System.Windows.Forms.VisualStyles/RadioButtonState.cs
index cc2e427..48f0a29 100644
--- a/mcs/class/Managed.Windows.Forms/System.Windows.Forms.VisualStyles/RadioButtonState.cs
+++ b/mcs/class/Managed.Windows.Forms/System.Windows.Forms.VisualStyles/RadioButtonState.cs
@@ -28,10 +28,7 @@
 
 namespace System.Windows.Forms.VisualStyles
 {
-#if NET_2_0
-	public
-#endif
-	enum RadioButtonState
+	public enum RadioButtonState
 	{
 		UncheckedNormal = 1,
 		UncheckedHot = 2,
diff --git a/mcs/class/Managed.Windows.Forms/System.Windows.Forms.VisualStyles/ScrollBarArrowButtonState.cs b/mcs/class/Managed.Windows.Forms/System.Windows.Forms.VisualStyles/ScrollBarArrowButtonState.cs
index 586ad00..cac618b 100644
--- a/mcs/class/Managed.Windows.Forms/System.Windows.Forms.VisualStyles/ScrollBarArrowButtonState.cs
+++ b/mcs/class/Managed.Windows.Forms/System.Windows.Forms.VisualStyles/ScrollBarArrowButtonState.cs
@@ -26,7 +26,6 @@
 //	Jonathan Pobst (monkey at jpobst.com)
 //
 
-#if NET_2_0
 namespace System.Windows.Forms.VisualStyles
 {
 	public enum ScrollBarArrowButtonState
@@ -49,4 +48,3 @@ namespace System.Windows.Forms.VisualStyles
 		RightDisabled = 16
 	}
 }
-#endif
\ No newline at end of file
diff --git a/mcs/class/Managed.Windows.Forms/System.Windows.Forms.VisualStyles/ScrollBarSizeBoxState.cs b/mcs/class/Managed.Windows.Forms/System.Windows.Forms.VisualStyles/ScrollBarSizeBoxState.cs
index fccca27..a33f233 100644
--- a/mcs/class/Managed.Windows.Forms/System.Windows.Forms.VisualStyles/ScrollBarSizeBoxState.cs
+++ b/mcs/class/Managed.Windows.Forms/System.Windows.Forms.VisualStyles/ScrollBarSizeBoxState.cs
@@ -26,7 +26,6 @@
 //	Jonathan Pobst (monkey at jpobst.com)
 //
 
-#if NET_2_0
 namespace System.Windows.Forms.VisualStyles
 {
 	public enum ScrollBarSizeBoxState
@@ -35,4 +34,3 @@ namespace System.Windows.Forms.VisualStyles
 		LeftAlign = 2
 	}
 }
-#endif
\ No newline at end of file
diff --git a/mcs/class/Managed.Windows.Forms/System.Windows.Forms.VisualStyles/ScrollBarState.cs b/mcs/class/Managed.Windows.Forms/System.Windows.Forms.VisualStyles/ScrollBarState.cs
index 6ba4b33..8e62f8f 100644
--- a/mcs/class/Managed.Windows.Forms/System.Windows.Forms.VisualStyles/ScrollBarState.cs
+++ b/mcs/class/Managed.Windows.Forms/System.Windows.Forms.VisualStyles/ScrollBarState.cs
@@ -26,7 +26,6 @@
 //	Jonathan Pobst (monkey at jpobst.com)
 //
 
-#if NET_2_0
 namespace System.Windows.Forms.VisualStyles
 {
 	public enum ScrollBarState
@@ -37,4 +36,3 @@ namespace System.Windows.Forms.VisualStyles
 		Disabled = 4
 	}
 }
-#endif
\ No newline at end of file
diff --git a/mcs/class/Managed.Windows.Forms/System.Windows.Forms.VisualStyles/SizingType.cs b/mcs/class/Managed.Windows.Forms/System.Windows.Forms.VisualStyles/SizingType.cs
index 1f899f3..b937cac 100644
--- a/mcs/class/Managed.Windows.Forms/System.Windows.Forms.VisualStyles/SizingType.cs
+++ b/mcs/class/Managed.Windows.Forms/System.Windows.Forms.VisualStyles/SizingType.cs
@@ -26,7 +26,6 @@
 //	Jonathan Pobst (monkey at jpobst.com)
 //
 
-#if NET_2_0
 namespace System.Windows.Forms.VisualStyles
 {
 	public enum SizingType
@@ -36,4 +35,3 @@ namespace System.Windows.Forms.VisualStyles
 		Tile = 2
 	}
 }
-#endif
\ No newline at end of file
diff --git a/mcs/class/Managed.Windows.Forms/System.Windows.Forms.VisualStyles/StringProperty.cs b/mcs/class/Managed.Windows.Forms/System.Windows.Forms.VisualStyles/StringProperty.cs
index 18ae7e1..f262c81 100644
--- a/mcs/class/Managed.Windows.Forms/System.Windows.Forms.VisualStyles/StringProperty.cs
+++ b/mcs/class/Managed.Windows.Forms/System.Windows.Forms.VisualStyles/StringProperty.cs
@@ -28,10 +28,7 @@
 
 namespace System.Windows.Forms.VisualStyles
 {
-#if NET_2_0
-	public
-#endif
-	enum StringProperty
+	public enum StringProperty
 	{
 		Text = 3201
 	}
diff --git a/mcs/class/Managed.Windows.Forms/System.Windows.Forms.VisualStyles/TabItemState.cs b/mcs/class/Managed.Windows.Forms/System.Windows.Forms.VisualStyles/TabItemState.cs
index fe957c3..0192118 100644
--- a/mcs/class/Managed.Windows.Forms/System.Windows.Forms.VisualStyles/TabItemState.cs
+++ b/mcs/class/Managed.Windows.Forms/System.Windows.Forms.VisualStyles/TabItemState.cs
@@ -26,7 +26,6 @@
 //	Jonathan Pobst (monkey at jpobst.com)
 //
 
-#if NET_2_0
 namespace System.Windows.Forms.VisualStyles
 {
 	public enum TabItemState
@@ -37,4 +36,3 @@ namespace System.Windows.Forms.VisualStyles
 		Disabled = 4
 	}
 }
-#endif
\ No newline at end of file
diff --git a/mcs/class/Managed.Windows.Forms/System.Windows.Forms.VisualStyles/TextBoxState.cs b/mcs/class/Managed.Windows.Forms/System.Windows.Forms.VisualStyles/TextBoxState.cs
index d8973ac..a6a418b 100644
--- a/mcs/class/Managed.Windows.Forms/System.Windows.Forms.VisualStyles/TextBoxState.cs
+++ b/mcs/class/Managed.Windows.Forms/System.Windows.Forms.VisualStyles/TextBoxState.cs
@@ -26,7 +26,6 @@
 //	Jonathan Pobst (monkey at jpobst.com)
 //
 
-#if NET_2_0
 namespace System.Windows.Forms.VisualStyles
 {
 	public enum TextBoxState
@@ -39,4 +38,3 @@ namespace System.Windows.Forms.VisualStyles
 		Assist = 7
 	}
 }
-#endif
\ No newline at end of file
diff --git a/mcs/class/Managed.Windows.Forms/System.Windows.Forms.VisualStyles/TextMetrics.cs b/mcs/class/Managed.Windows.Forms/System.Windows.Forms.VisualStyles/TextMetrics.cs
index e7a4457..3ab5ca8 100644
--- a/mcs/class/Managed.Windows.Forms/System.Windows.Forms.VisualStyles/TextMetrics.cs
+++ b/mcs/class/Managed.Windows.Forms/System.Windows.Forms.VisualStyles/TextMetrics.cs
@@ -28,10 +28,7 @@
 
 namespace System.Windows.Forms.VisualStyles
 {
-#if NET_2_0
-	public
-#endif
-	struct TextMetrics
+	public struct TextMetrics
 	{
 		#region Private Variables
 		private int ascent;
diff --git a/mcs/class/Managed.Windows.Forms/System.Windows.Forms.VisualStyles/TextMetricsCharacterSet.cs b/mcs/class/Managed.Windows.Forms/System.Windows.Forms.VisualStyles/TextMetricsCharacterSet.cs
index 0c09e16..ce77181 100644
--- a/mcs/class/Managed.Windows.Forms/System.Windows.Forms.VisualStyles/TextMetricsCharacterSet.cs
+++ b/mcs/class/Managed.Windows.Forms/System.Windows.Forms.VisualStyles/TextMetricsCharacterSet.cs
@@ -28,10 +28,7 @@
 
 namespace System.Windows.Forms.VisualStyles
 {
-#if NET_2_0
-	public
-#endif
-	enum TextMetricsCharacterSet
+	public enum TextMetricsCharacterSet
 	{
 		Ansi = 0,
 		Default = 1,
diff --git a/mcs/class/Managed.Windows.Forms/System.Windows.Forms.VisualStyles/TextMetricsPitchAndFamilyValues.cs b/mcs/class/Managed.Windows.Forms/System.Windows.Forms.VisualStyles/TextMetricsPitchAndFamilyValues.cs
index a40c623..cd33f50 100644
--- a/mcs/class/Managed.Windows.Forms/System.Windows.Forms.VisualStyles/TextMetricsPitchAndFamilyValues.cs
+++ b/mcs/class/Managed.Windows.Forms/System.Windows.Forms.VisualStyles/TextMetricsPitchAndFamilyValues.cs
@@ -29,10 +29,7 @@
 namespace System.Windows.Forms.VisualStyles
 {
 	[Flags]
-#if NET_2_0
-	public
-#endif
-	enum TextMetricsPitchAndFamilyValues
+	public enum TextMetricsPitchAndFamilyValues
 	{
 		FixedPitch = 1,
 		Vector = 2,
diff --git a/mcs/class/Managed.Windows.Forms/System.Windows.Forms.VisualStyles/TextShadowType.cs b/mcs/class/Managed.Windows.Forms/System.Windows.Forms.VisualStyles/TextShadowType.cs
index a5666eb..f939744 100644
--- a/mcs/class/Managed.Windows.Forms/System.Windows.Forms.VisualStyles/TextShadowType.cs
+++ b/mcs/class/Managed.Windows.Forms/System.Windows.Forms.VisualStyles/TextShadowType.cs
@@ -26,7 +26,6 @@
 //	Jonathan Pobst (monkey at jpobst.com)
 //
 
-#if NET_2_0
 namespace System.Windows.Forms.VisualStyles
 {
 	public enum TextShadowType
@@ -36,4 +35,3 @@ namespace System.Windows.Forms.VisualStyles
 		Continuous = 2
 	}
 }
-#endif
\ No newline at end of file
diff --git a/mcs/class/Managed.Windows.Forms/System.Windows.Forms.VisualStyles/ThemeSizeType.cs b/mcs/class/Managed.Windows.Forms/System.Windows.Forms.VisualStyles/ThemeSizeType.cs
index 335ba2d..22e0a3b 100644
--- a/mcs/class/Managed.Windows.Forms/System.Windows.Forms.VisualStyles/ThemeSizeType.cs
+++ b/mcs/class/Managed.Windows.Forms/System.Windows.Forms.VisualStyles/ThemeSizeType.cs
@@ -28,10 +28,7 @@
 
 namespace System.Windows.Forms.VisualStyles
 {
-#if NET_2_0
-	public
-#endif
-	enum ThemeSizeType
+	public enum ThemeSizeType
 	{
 		Minimum = 0,
 		True = 1,
diff --git a/mcs/class/Managed.Windows.Forms/System.Windows.Forms.VisualStyles/ToolBarState.cs b/mcs/class/Managed.Windows.Forms/System.Windows.Forms.VisualStyles/ToolBarState.cs
index 9d632cb..7813361 100644
--- a/mcs/class/Managed.Windows.Forms/System.Windows.Forms.VisualStyles/ToolBarState.cs
+++ b/mcs/class/Managed.Windows.Forms/System.Windows.Forms.VisualStyles/ToolBarState.cs
@@ -26,7 +26,6 @@
 //	Jonathan Pobst (monkey at jpobst.com)
 //
 
-#if NET_2_0
 namespace System.Windows.Forms.VisualStyles
 {
 	public enum ToolBarState
@@ -39,4 +38,3 @@ namespace System.Windows.Forms.VisualStyles
 		HotChecked = 6
 	}
 }
-#endif
\ No newline at end of file
diff --git a/mcs/class/Managed.Windows.Forms/System.Windows.Forms.VisualStyles/TrackBarThumbState.cs b/mcs/class/Managed.Windows.Forms/System.Windows.Forms.VisualStyles/TrackBarThumbState.cs
index 5d565ca..44c0f9d 100644
--- a/mcs/class/Managed.Windows.Forms/System.Windows.Forms.VisualStyles/TrackBarThumbState.cs
+++ b/mcs/class/Managed.Windows.Forms/System.Windows.Forms.VisualStyles/TrackBarThumbState.cs
@@ -26,7 +26,6 @@
 //	Jonathan Pobst (monkey at jpobst.com)
 //
 
-#if NET_2_0
 namespace System.Windows.Forms.VisualStyles
 {
 	public enum TrackBarThumbState
@@ -37,4 +36,3 @@ namespace System.Windows.Forms.VisualStyles
 		Disabled = 5
 	}
 }
-#endif
\ No newline at end of file
diff --git a/mcs/class/Managed.Windows.Forms/System.Windows.Forms.VisualStyles/TrueSizeScalingType.cs b/mcs/class/Managed.Windows.Forms/System.Windows.Forms.VisualStyles/TrueSizeScalingType.cs
index 641e1d5..8d87c94 100644
--- a/mcs/class/Managed.Windows.Forms/System.Windows.Forms.VisualStyles/TrueSizeScalingType.cs
+++ b/mcs/class/Managed.Windows.Forms/System.Windows.Forms.VisualStyles/TrueSizeScalingType.cs
@@ -26,7 +26,6 @@
 //	Jonathan Pobst (monkey at jpobst.com)
 //
 
-#if NET_2_0
 namespace System.Windows.Forms.VisualStyles
 {
 	public enum TrueSizeScalingType
@@ -36,4 +35,3 @@ namespace System.Windows.Forms.VisualStyles
 		Dpi = 2
 	}
 }
-#endif
\ No newline at end of file
diff --git a/mcs/class/Managed.Windows.Forms/System.Windows.Forms.VisualStyles/VerticalAlignment.cs b/mcs/class/Managed.Windows.Forms/System.Windows.Forms.VisualStyles/VerticalAlignment.cs
index 6620ec6..35c873d 100644
--- a/mcs/class/Managed.Windows.Forms/System.Windows.Forms.VisualStyles/VerticalAlignment.cs
+++ b/mcs/class/Managed.Windows.Forms/System.Windows.Forms.VisualStyles/VerticalAlignment.cs
@@ -26,7 +26,6 @@
 //	Jonathan Pobst (monkey at jpobst.com)
 //
 
-#if NET_2_0
 namespace System.Windows.Forms.VisualStyles
 {
 	public enum VerticalAlignment
@@ -36,4 +35,3 @@ namespace System.Windows.Forms.VisualStyles
 		Bottom = 2
 	}
 }
-#endif
\ No newline at end of file
diff --git a/mcs/class/Managed.Windows.Forms/System.Windows.Forms.VisualStyles/VisualStyleElement.cs b/mcs/class/Managed.Windows.Forms/System.Windows.Forms.VisualStyles/VisualStyleElement.cs
index a1d0070..1194993 100644
--- a/mcs/class/Managed.Windows.Forms/System.Windows.Forms.VisualStyles/VisualStyleElement.cs
+++ b/mcs/class/Managed.Windows.Forms/System.Windows.Forms.VisualStyles/VisualStyleElement.cs
@@ -28,10 +28,7 @@
 
 namespace System.Windows.Forms.VisualStyles
 {
-#if NET_2_0
-	public
-#endif
-	class VisualStyleElement
+	public class VisualStyleElement
 	{
 		#region Private Variables
 		#region Class name/part/state constants
diff --git a/mcs/class/Managed.Windows.Forms/System.Windows.Forms.VisualStyles/VisualStyleInformation.cs b/mcs/class/Managed.Windows.Forms/System.Windows.Forms.VisualStyles/VisualStyleInformation.cs
index 9eab198..9805f04 100644
--- a/mcs/class/Managed.Windows.Forms/System.Windows.Forms.VisualStyles/VisualStyleInformation.cs
+++ b/mcs/class/Managed.Windows.Forms/System.Windows.Forms.VisualStyles/VisualStyleInformation.cs
@@ -27,40 +27,11 @@
 //
 
 using System.Drawing;
-#if !NET_2_0
-using System.Runtime.InteropServices;
-#endif
 
 namespace System.Windows.Forms.VisualStyles
 {
-#if NET_2_0
-	public static
-#endif
-	class VisualStyleInformation
+	public static class VisualStyleInformation
 	{
-#if !NET_2_0
-		static readonly Color system_colors_button_highlight;
-		// These are taken from System.Drawing.
-		internal enum GetSysColorIndex {
-			COLOR_BTNHIGHLIGHT		= 20,
-		}
-		// Windows values are in BGR format and without alpha
-		// so we force it to opaque (or everything will be transparent) and reverse B and R
-		static uint GetSysColor (GetSysColorIndex index)
-		{
-			uint bgr = Win32GetSysColor (index);
-			return 0xFF000000 | (bgr & 0xFF) << 16 | (bgr & 0xFF00) | (bgr >> 16);
-		}
-		[DllImport ("user32.dll", EntryPoint = "GetSysColor", CallingConvention = CallingConvention.StdCall)]
-		static extern uint Win32GetSysColor (GetSysColorIndex index);
-		static VisualStyleInformation ()
-		{
-			if (Environment.OSVersion.Platform == PlatformID.Win32NT)
-				system_colors_button_highlight = Color.FromArgb ((int)GetSysColor (GetSysColorIndex.COLOR_BTNHIGHLIGHT));
-			else
-				system_colors_button_highlight = Color.FromArgb (0xFF, 0xFF, 0xFF, 0xFF);
-		}
-#endif
 		#region Public Static Properties
 		public static string Author {
 			get {
@@ -93,13 +64,7 @@ namespace System.Windows.Forms.VisualStyles
 		public static Color ControlHighlightHot {
 			get {
 				if (!VisualStyleRenderer.IsSupported)
-					return
-#if NET_2_0
-					SystemColors.ButtonHighlight
-#else
-					system_colors_button_highlight
-#endif
-					;
+					return SystemColors.ButtonHighlight;
 
 				return VisualStyles.VisualStyleInformationControlHighlightHot;
 			}
diff --git a/mcs/class/Managed.Windows.Forms/System.Windows.Forms.VisualStyles/VisualStyleRenderer.cs b/mcs/class/Managed.Windows.Forms/System.Windows.Forms.VisualStyles/VisualStyleRenderer.cs
index b3cc613..9a6ad66 100644
--- a/mcs/class/Managed.Windows.Forms/System.Windows.Forms.VisualStyles/VisualStyleRenderer.cs
+++ b/mcs/class/Managed.Windows.Forms/System.Windows.Forms.VisualStyles/VisualStyleRenderer.cs
@@ -30,10 +30,7 @@ using System.Drawing;
 
 namespace System.Windows.Forms.VisualStyles
 {
-#if NET_2_0
-	public
-#endif
-	sealed class VisualStyleRenderer
+	public sealed class VisualStyleRenderer
 	{
 		private string class_name;
 		private int part;
diff --git a/mcs/class/Managed.Windows.Forms/System.Windows.Forms.VisualStyles/VisualStyleState.cs b/mcs/class/Managed.Windows.Forms/System.Windows.Forms.VisualStyles/VisualStyleState.cs
index a1c4136..7ab797f 100644
--- a/mcs/class/Managed.Windows.Forms/System.Windows.Forms.VisualStyles/VisualStyleState.cs
+++ b/mcs/class/Managed.Windows.Forms/System.Windows.Forms.VisualStyles/VisualStyleState.cs
@@ -28,10 +28,7 @@
 
 namespace System.Windows.Forms.VisualStyles
 {
-#if NET_2_0
-	public
-#endif
-	enum VisualStyleState
+	public enum VisualStyleState
 	{
 		NoneEnabled = 0,
 		NonClientAreaEnabled = 1,
diff --git a/mcs/class/Managed.Windows.Forms/System.Windows.Forms.VisualStyles/VisualStylesGtkPlus.cs b/mcs/class/Managed.Windows.Forms/System.Windows.Forms.VisualStyles/VisualStylesGtkPlus.cs
index 10e5c95..b2c5566 100644
--- a/mcs/class/Managed.Windows.Forms/System.Windows.Forms.VisualStyles/VisualStylesGtkPlus.cs
+++ b/mcs/class/Managed.Windows.Forms/System.Windows.Forms.VisualStyles/VisualStylesGtkPlus.cs
@@ -48,9 +48,7 @@ namespace System.Windows.Forms.VisualStyles
 		}
 		enum ThemeHandle {
 			BUTTON = 1,
-#if NET_2_0
 			COMBOBOX,
-#endif
 			EDIT,
 			HEADER,
 			PROGRESS,
@@ -233,7 +231,6 @@ namespace System.Windows.Forms.VisualStyles
 				}
 			#endregion
 			#region COMBOBOX
-#if NET_2_0
 			case ThemeHandle.COMBOBOX:
 				switch ((COMBOBOXPARTS)part) {
 				#region CP_DROPDOWNBUTTON
@@ -262,7 +259,6 @@ namespace System.Windows.Forms.VisualStyles
 				#endregion
 				default: return false;
 				}
-#endif
 			#endregion
 			#region EDIT
 			case ThemeHandle.EDIT:
@@ -958,7 +954,6 @@ namespace System.Windows.Forms.VisualStyles
 				}
 			#endregion
 			#region COMBOBOX
-#if NET_2_0
 			case ThemeHandle.COMBOBOX:
 				switch ((COMBOBOXPARTS)iPartId) {
 				case COMBOBOXPARTS.CP_DROPDOWNBUTTON:
@@ -966,7 +961,6 @@ namespace System.Windows.Forms.VisualStyles
 					return true;
 				default: return false;
 				}
-#endif
 			#endregion
 			#region EDIT
 			case ThemeHandle.EDIT:
diff --git a/mcs/class/Managed.Windows.Forms/System.Windows.Forms.WebBrowserDialogs/AlertCheck.cs b/mcs/class/Managed.Windows.Forms/System.Windows.Forms.WebBrowserDialogs/AlertCheck.cs
index 8a7f152..46f2aa5 100644
--- a/mcs/class/Managed.Windows.Forms/System.Windows.Forms.WebBrowserDialogs/AlertCheck.cs
+++ b/mcs/class/Managed.Windows.Forms/System.Windows.Forms.WebBrowserDialogs/AlertCheck.cs
@@ -22,7 +22,6 @@
 // Authors:
 //	Andreia Gaita	<avidigal at novell.com>
 
-#if NET_2_0
 
 using System;
 using System.Collections.Generic;
@@ -60,4 +59,3 @@ namespace System.Windows.Forms.WebBrowserDialogs
 		}
 	}
 }
-#endif
\ No newline at end of file
diff --git a/mcs/class/Managed.Windows.Forms/System.Windows.Forms.WebBrowserDialogs/ConfirmCheck.cs b/mcs/class/Managed.Windows.Forms/System.Windows.Forms.WebBrowserDialogs/ConfirmCheck.cs
index b11e15a..72affe5 100644
--- a/mcs/class/Managed.Windows.Forms/System.Windows.Forms.WebBrowserDialogs/ConfirmCheck.cs
+++ b/mcs/class/Managed.Windows.Forms/System.Windows.Forms.WebBrowserDialogs/ConfirmCheck.cs
@@ -22,7 +22,6 @@
 // Authors:
 //	Andreia Gaita	<avidigal at novell.com>
 
-#if NET_2_0
 
 using System;
 using System.Collections.Generic;
@@ -68,4 +67,3 @@ namespace System.Windows.Forms.WebBrowserDialogs
 		}
 	}
 }
-#endif
\ No newline at end of file
diff --git a/mcs/class/Managed.Windows.Forms/System.Windows.Forms.WebBrowserDialogs/Generic.cs b/mcs/class/Managed.Windows.Forms/System.Windows.Forms.WebBrowserDialogs/Generic.cs
index f7a246e..a5bfe15 100644
--- a/mcs/class/Managed.Windows.Forms/System.Windows.Forms.WebBrowserDialogs/Generic.cs
+++ b/mcs/class/Managed.Windows.Forms/System.Windows.Forms.WebBrowserDialogs/Generic.cs
@@ -22,7 +22,6 @@
 // Authors:
 //	Andreia Gaita	<avidigal at novell.com>
 
-#if NET_2_0
 
 using System;
 using System.Collections.Generic;
@@ -190,4 +189,3 @@ namespace System.Windows.Forms.WebBrowserDialogs
 		}
 	}
 }
-#endif
\ No newline at end of file
diff --git a/mcs/class/Managed.Windows.Forms/System.Windows.Forms.WebBrowserDialogs/Prompt.cs b/mcs/class/Managed.Windows.Forms/System.Windows.Forms.WebBrowserDialogs/Prompt.cs
index 843da5b..662dd0a 100644
--- a/mcs/class/Managed.Windows.Forms/System.Windows.Forms.WebBrowserDialogs/Prompt.cs
+++ b/mcs/class/Managed.Windows.Forms/System.Windows.Forms.WebBrowserDialogs/Prompt.cs
@@ -22,7 +22,6 @@
 // Authors:
 //	Andreia Gaita	<avidigal at novell.com>
 
-#if NET_2_0
 
 using System;
 using System.Collections.Generic;
@@ -61,4 +60,3 @@ namespace System.Windows.Forms.WebBrowserDialogs
 		}
 	}
 }
-#endif
\ No newline at end of file
diff --git a/mcs/class/Managed.Windows.Forms/System.Windows.Forms.dll.sources b/mcs/class/Managed.Windows.Forms/System.Windows.Forms.dll.sources
index c1b379c..67755b6 100644
--- a/mcs/class/Managed.Windows.Forms/System.Windows.Forms.dll.sources
+++ b/mcs/class/Managed.Windows.Forms/System.Windows.Forms.dll.sources
@@ -383,7 +383,6 @@ System.Windows.Forms/IDataGridEditingService.cs
 System.Windows.Forms/IDataGridViewEditingCell.cs
 System.Windows.Forms/IDataGridViewEditingControl.cs
 System.Windows.Forms/IDataObject.cs
-System.Windows.Forms/IDeviceContext.cs
 System.Windows.Forms/IDropTarget.cs
 System.Windows.Forms/IFeatureSupport.cs
 System.Windows.Forms/IFileReaderService.cs
diff --git a/mcs/class/Managed.Windows.Forms/System.Windows.Forms/BindingContext.cs b/mcs/class/Managed.Windows.Forms/System.Windows.Forms/BindingContext.cs
index a66a2e3..33f2054 100644
--- a/mcs/class/Managed.Windows.Forms/System.Windows.Forms/BindingContext.cs
+++ b/mcs/class/Managed.Windows.Forms/System.Windows.Forms/BindingContext.cs
@@ -210,19 +210,17 @@ namespace System.Windows.Forms {
 					managers.Remove (keys[i]);
 			}
 		}
-#if NET_2_0
+
 		[MonoTODO ("Stub, does nothing")]
 		public static void UpdateBinding (BindingContext newBindingContext, Binding binding)
 		{
 		}
-#endif
+
 		#endregion	// Protected Instance Methods
 
 		#region Events
-#if NET_2_0
 		[Browsable (false)]
 		[EditorBrowsable (EditorBrowsableState.Never)]
-#endif
 		public event CollectionChangeEventHandler CollectionChanged {
 			add { throw new NotImplementedException (); }
 			remove { /* nothing to do here.. */ }
diff --git a/mcs/class/Managed.Windows.Forms/System.Windows.Forms/BindingSource.cs b/mcs/class/Managed.Windows.Forms/System.Windows.Forms/BindingSource.cs
index 09dc0b6..3e92845 100644
--- a/mcs/class/Managed.Windows.Forms/System.Windows.Forms/BindingSource.cs
+++ b/mcs/class/Managed.Windows.Forms/System.Windows.Forms/BindingSource.cs
@@ -344,7 +344,7 @@ namespace System.Windows.Forms {
 			get { return datasource; }
 			set {
 				if (datasource != value) {
-					if (datasource == null)
+					if (value == null)
 						datamember = String.Empty;
 
 					DisconnectDataSourceEvents (datasource);
diff --git a/mcs/class/Managed.Windows.Forms/System.Windows.Forms/ChangeLog b/mcs/class/Managed.Windows.Forms/System.Windows.Forms/ChangeLog
index 1d98d40..d7d4a57 100644
--- a/mcs/class/Managed.Windows.Forms/System.Windows.Forms/ChangeLog
+++ b/mcs/class/Managed.Windows.Forms/System.Windows.Forms/ChangeLog
@@ -1,459 +1,3 @@
-2011-03-29  Vincent Povirk  <madewokherd at gmail.com>
-
-	System.Windows.Forms.Mime: Use freedesktop.org only on Unix
-	platforms.
-
-2011-02-11  Miguel de Icaza  <miguel at gnome.org>
-
-	[fix] changing Form.Enabled sometimes can change the list of
-	OpenForms, fixes 671098
-
-2011-02-01  Geoff Norton  <grompf at sublimeintervention.com>
-
-	Avoid a stack overflow when deactivating a window
-
-2011-01-06  Thomas Goldstein  <stifu at free.fr>
-
-	Replace decimal to hex string conversion code with a much more
-	simple alternative (suggested by Oliver Thimm). Fixes bug 661750.
-
-2011-01-06  Thomas Goldstein  <stifu at free.fr>
-
-	Remove #if NET_2_0.
-
-2011-01-01  Thomas Goldstein  <stifu at free.fr>
-
-	Add missing properties that should be copied when cloning a
-	TreeNode. Fixes bug 661753.
-
-2010-12-22  Thomas Goldstein  <stifu at free.fr>
-
-	Remove null check in ComboBox.SelectedText setter (now handled in
-	TextBoxBase).
-
-2010-12-22  Thomas Goldstein  <stifu at free.fr>
-
-	If SelectedText is given a null value, set it to String.Empty.
-
-2010-12-21  Thomas Goldstein  <stifu at free.fr>
-
-	When ComboBox.SelectedText is given a null value, set it to
-	String.Empty. Fixes bug 660294.
-
-2010-12-16  Jonathan Pobst  <monkey at jpobst.com>
-
-	Move line inside if () to fix 2 tests.
-
-	Broke by 9aa23d8ebec0f5c60ae66fee3df8a3c6c39cf191.
-
-2010-12-16  Miguel de Icaza  <miguel at gnome.org>
-
-	[winforms] undo accidental removal of a line
-
-2010-12-16  Miguel de Icaza  <miguel at gnome.org>
-
-	[winforms] revert patch, it regresses the test suite:
-	https://github.com/mono/mono/commit/8334fe3a56c978ffe7f8cb199536f9b3234afdbe
-
-2010-12-12  Miguel de Icaza  <miguel at gnome.org>
-
-	[winforms] Pass 4 of removing NET_2_0 from winforms
-
-2010-12-12  Miguel de Icaza  <miguel at gnome.org>
-
-	[winforms] Pass 3 of removing NET_2_0 from winforms
-
-2010-12-12  Miguel de Icaza  <miguel at gnome.org>
-
-	[winforms] Pass 3 of removing NET_2_0 from winforms
-
-2010-12-12  Miguel de Icaza  <miguel at gnome.org>
-
-	[winforms] Pass 2 of removing NET_2_0 from winforms
-
-2010-12-12  Miguel de Icaza  <miguel at gnome.org>
-
-	[winforms] Pass 2 of removing NET_2_0 from winforms
-
-2010-12-12  Miguel de Icaza  <miguel at gnome.org>
-
-	Pass 1 of removing NET_2_0 from winforms
-
-2010-12-11  Thomas Goldstein  <stifu at free.fr>
-
-	[winforms] Small optimizations, use properties that do not compute
-	values
-
-2010-12-10  Miguel de Icaza  <miguel at gnome.org>
-
-	[winforms] Style, braces
-
-2010-12-10  Miguel de Icaza  <miguel at gnome.org>
-
-	[winforms] Use conditional attributes, not ifdefs to insert
-	conditional code
-
-2010-12-10  Miguel de Icaza  <miguel at gnome.org>
-
-	[winforms] Use conditional attributes, not ifdefs to insert
-	conditional code
-
-2010-12-10  Gonzalo Paniagua Javier  <gonzalo.mono at gmail.com>
-
-	Line endings
-
-2010-12-10  Ralph Leckett  <rleckett at gmail.com>
-
-	[winforms] Fix graphics leak
-
-2010-12-10  Ralph Leckett  <rleckett at gmail.com>
-
-	[winforms] Fix graphics leak
-
-2010-12-10  Ralph Leckett  <rleckett at gmail.com>
-
-	[winforms] For what it appeared to be a crasher from the
-	JumboPatch
-
-2010-12-10  Ralph Leckett  <rleckett at gmail.com>
-
-	[winforms] Reorder code a bit
-
-2010-12-10  Ralph Leckett  <rleckett at gmail.com>
-
-	[winforms] Avoid leaking the Graphics
-
-2010-12-10  Ralph Leckett  <rleckett at gmail.com>
-
-	[winforms] Avoid leaking the Graphics + style
-
-2010-12-10  Ralph Leckett  <rleckett at gmail.com>
-
-	[winforms] Cope with null current regions
-
-2010-12-10  Ralph Leckett  <rleckett at gmail.com>
-
-	[winforms] Cope with small windows
-
-2010-12-10  Ralph Leckett  <rleckett at gmail.com>
-
-	[winforms] Style
-
-2010-12-10  Ralph Leckett  <rleckett at gmail.com>
-
-	[winforms] Style
-
-2010-12-10  Ralph Leckett  <rleckett at gmail.com>
-
-	[winforms] Style, reduce full sizes of common types
-
-2010-12-10  Ralph Leckett  <rleckett at gmail.com>
-
-	[winforms] Do not leak Graphics in Invalidate + some Style
-
-2010-12-10  Miguel de Icaza  <miguel at gnome.org>
-
-	[winforms] style, and NET_2_0 dropped
-
-2010-12-10  Ralph Leckett  <rleckett at gmail.com>
-
-	[winforms] Style
-
-2010-12-10  Ralph Leckett  <rleckett at gmail.com>
-
-	[winforms] Cope with null Hwnd value from Hwnd.ObjectFromHandle
-
-2010-12-10  Ralph Leckett  <rleckett at gmail.com>
-
-	[winforms] Win32 fixes for window class name
-
-	This is extracted from Ralph Leckett's jumbo-patch to winforms
-
-2010-12-10  Thomas Goldstein  <stifu at free.fr>
-
-	[winforms] quick cleanup patches for a few WinForms classes
-
-2010-12-10  Miguel de Icaza  <miguel at gnome.org>
-
-	[winforms] Prepare for Gnome 3, by not depending on libgnomeui
-
-2010-12-10  Tom Hindle  <tom_hindle at sil.org>
-
-	[winforms] Fix ContextMenuStrip vertical position can be wrong.
-
-	Fixes #658945
-
-	This can lead to the top of the context menu being off the screen.
-	This only happens with context menus with lots of items.
-
-2010-12-10  Tom Hindle  <tom_hindle at sil.org>
-
-	[winforms] WM_SETFOCUS is sent before Keyboard Focus is changed.
-
-	Switches Keyboard focus so that it occurs before WM_SETFOCUS is
-	sent.
-
-	This means that the wrong keyboard im is selected while process
-	winform events caused by WM_SETFOCUS.
-
-	Attaching patch that changes this so that keyboard im is focused
-	before WM_SETFOCUS is sent.
-
-	Fixes: #557277
-
-2010-12-10  Tom Hindle  <tom_hindle at sil.org>
-
-	* XplatUIStructs.cs: Added user messages WM_XIM_PREEDITSTART,
-	WM_XIM_PREEDITDONE, WM_XIM_PREEDITDRAW, WM_XIM_PREEDITCARET *
-	X11Keyboard.cs: Changed preedit callbacks to emit WM_XIM_*
-	messages * X11Structs.cs: Added XIMFeedbackStruct and XIMFeedback
-	enum.
-
-	Here is some sample code which make use of this feature:
-
-	/// <summary> /// Proof on concept implementation of a user
-	defined TextBox that does on-the-spot /// input method editing.
-	/// There is a number of know flaws - eg. doesn't end preedit when
-	user moves cursor with mouse. /// Need to run with
-	MONO_WINFORMS_XIM_STYLE=on-the-spot mono /// </summary> public
-	class OnTheSpotTextBox : TextBox, XIM.IPreedit { // store text
-	before preedit. string backup;
-
-	#region IPreedit implementation public int PreeditStart (IntPtr
-	clientData, IntPtr callData) { Console.WriteLine ("PreeditStart");
-	backup = Text; return 100; }
-
-	public int PreeditDone (IntPtr clientData, IntPtr callData) {
-	Clear (); AppendText (backup); return 0; }
-
-	public int PreeditDraw (IntPtr clientData, IntPtr callData) {
-	XIM.PreeditDrawInfo info = new XIM.PreeditDrawInfo (callData);
-	Console.WriteLine ("PreeditDraw PreeditDrawInfo {0}", info); if
-	(info.ChangeLength > 0) { Clear (); AppendText (backup); } if
-	(info.Caret > 0) AppendText (info.Text); return 0; }
-
-	public int PreeditCaret (IntPtr clientData, IntPtr callData) {
-	XIM.PreeditCaretInfo info = new XIM.PreeditCaretInfo (clientData);
-	Console.WriteLine ("PreeditCaret PreeditCaretInfo {0}", info);
-	return 0; }
-
-	protected override void WndProc (ref Message m) { switch (m.Msg) {
-
-	case /*WM_USER*/0x400 + 0x1d00: // WM_XIM_PREEDITSTART // The
-	WParam value identifies what is occurring. PreeditStart (m.WParam,
-	m.LParam); break; case /*WM_USER*/0x400 + 0x1d01: //
-	WM_XIM_PREEDITDONE PreeditDone (m.WParam, m.LParam); break; case
-	/*WM_USER*/0x400 + 0x1d02: // WM_XIM_PREEDITDRAW PreeditDraw
-	(m.WParam, m.LParam); break; case /*WM_USER*/0x400 + 0x1d03: //
-	WM_XIM_PREEDITCARET PreeditCaret (m.WParam, m.LParam); break; }
-	base.WndProc (ref m); }
-
-	#endregion
-
-	}
-
-2010-12-10  Tom Hindle  <tom_hindle at sil.org>
-
-	[winforms] Add modal support to Forms
-
-	This fixes 614850 "Modal dialogs should prevent closing their
-	parent windows."
-
-2010-12-10  Tom Hindle  <tom_hindle at sil.org>
-
-	[winforms] DataGridView.cs : Made MoveCurrentCell not attempt
-	access Column index -1.
-
-	Fixes #516960
-
-2010-12-10  Tom Hindle  <tom_hindle at sil.org>
-
-	[winforms,fix] Prevent Clipboard APIs from running any Idle
-	handlers
-
-	Fixes: 641756
-
-	This prevents idle methods to be invoked when calling the
-	Clipboard APIs on X11, which is not the expected behavior.
-
-	The description from the bug report is:
-
-	Mono X11 Clipboard handling calls UpdateMessageQueue, which has
-	the side affect of potentially calling Idle handlers.
-
-	If any Idle handlers call Clipboard functions, this can cause idle
-	handler reentry.
-
-	See attached test case.
-
-	Incidentally removing the reentry check from the idle handler will
-	actually cause mono to segfault.
-
-	I will attach a patch shortly which fixes this by overloading
-	UpdateMessageQueue to allow Clipboard methods to call a version
-	that doesn't run idle processing.
-
-2010-12-10  Thomas Goldstein  <stifu at free.fr>
-
-	[winforms, fix] Keep the carret in sync with changes to the text
-	entry value
-
-	Patch from Thomas Goldstein for bug #621475
-
-	The IndexOutOfRangeException is apparently a caret position bug.
-	As a workaround, doing textbox.SelectionStart = 0; before
-	resetting the Text avoids the bug.
-
-	Here's a patch to fix the bug. Basically, it applies the same
-	caret updates whether the Text is null/empty or not. I hope I can
-	get away with the minor style updates without having to submit
-	them as a separate patch...
-
-2010-12-10  Andy Hume  <andyhume32 at yahoo.co.uk>
-
-	[fix, winforms] Fix the ProgressBar speed in Marquee situations
-
-	This issue was identified as:
-
-	Marquee speed is very weird, changing between very very fast and
-	very very very very fast, and in inverse to the speed setting?
-
-	In https://bugzilla.novell.com/show_bug.cgi?id=440220
-
-	Also fixes this bug which was the test case isolated:
-
-	https://bugzilla.novell.com/show_bug.cgi?id=655797
-
-2010-12-10  Nagappan Alagappan  <nagappan at gmail.com>
-
-	[winforms, datagrid, fix] fixes crasher reported in 416111
-
-2010-10-31  Miguel de Icaza  <miguel at gnome.org>
-
-	Expose some of our internals to the Mono.Winforms assembly
-
-2010-10-31  Miguel de Icaza  <miguel at gnome.org>
-
-	Fix broken patch
-
-2010-10-31  Miguel de Icaza  <miguel at gnome.org>
-
-	Allow this file to expose its types as public if needed
-
-2010-10-25  Carlos Alberto Cortez  <calberto.cortez at gmail.com>
-
-	* ComboBox.cs: Fire the Mouse* events when using the child
-	TextBox. Fixes #647689.
-
-2010-10-25  Carlos Alberto Cortez  <calberto.cortez at gmail.com>
-
-	* ListView.cs: When updating the Z-order for our controls don't
-	forget to add the implicit scrollbars we well. Fixes #648449.
-
-2010-10-24  Marek Safar  <marek.safar at gmail.com>
-
-	Warnings cleanup.
-
-2010-10-20  Latif Khalifa  <lkalif at openmetaverse.org>
-
-	Avoid nullref when clearing TextBox that has not yet been
-	displayed
-
-2010-09-27  Carlos Alberto Cortez  <calberto.cortez at gmail.com>
-
-	* Form.cs: When setting DialogResult call RaiseCloseEvents instead
-	of directly setting 'closing', since we need to have our
-	FormClosing event invoked *before* the form dissapears, so the
-	user can properly cancel the close operation if desired. Fixes
-	#631810.
-
-2010-09-26  Carlos Alberto Cortez  <calberto.cortez at gmail.com>
-
-	* X11Keyboard.cs: Manually handle the conversion of the string
-	returned by XLookupString, just as we were already doing for XIM
-	support - using StringBuilder directly was somehow returning a
-	corrupt buffer from time to time. Fixes #639939.
-
-2010-09-21  acken  <acken at acken.no>
-
-	Had an issue where the linklabel was clicked, the form was redrawn
-	with some changes and some internal behavior called the OnGotFocus
-	where sorted_links now was null and focused_index was 0. Don't
-	know wheter that is wrong but solved the issue with a nullcheck
-
-2010-08-31  Carlos Alberto Cortez  <calberto.cortez at gmail.com>
-
-	* ListBox.cs: Invalidate the selection border when horizontally
-	scrolling - the call to ScrollWindow is not enough, so we need to
-	update by ourselves the new margin of the selection border by a
-	quite small offset. Fixes #512136.
-
-2010-08-31  Carlos Alberto Cortez  <calberto.cortez at gmail.com>
-
-	* NotifyIcon.cs: Use SystemColors.Menu to paint the background of
-	the control, since at least in gnome the menu and the panel share
-	the back color (unfortunately we can't just leave the rectangle
-	transparent, as some window managers use a default white). Fixes
-	#581287.
-
-2010-08-31  Tom Hindle  <tom_hindle at sil.org>
-
-	* TreeView.cs: Create a new method to check that the new valid for
-	the vertical scroll is in the valid range - this is specially
-	important when the size of the TreeView can show less than one
-	element. Fixes #624915.
-
-2010-08-16  Carlos Alberto Cortez  <calberto.cortez at gmail.com>
-
-	* DataGridView.cs: When refreshing the scrolling info, set the
-	values for the internal scrollbars even if we are forced to not
-	display them, since they are used to compute the navigation, which
-	should be available *always*.
-
-2010-08-15  Thomas Goldstein  <stifu at free.fr>
-
-	* ListControl.cs: Use the actual value of the items in the Format
-	event, just as .net does. Fixes #620326.
-
-2010-08-15  Carlos Alberto Cortez  <calberto.cortez at gmail.com>
-
-	* ListViewItem.cs: * ListView.cs: Force an update in the selection
-	if a new added/inserted item to ListViewItemCollection is already
-	selected.
-
-2010-08-15  Carlos Alberto Cortez  <calberto.cortez at gmail.com>
-
-	* ListViewItem.cs: Remove all the NET_2_0 directives since we
-	don't need them anymore.
-
-2010-08-14  Carlos Alberto Cortez  <calberto.cortez at gmail.com>
-
-	* TextBoxBase.cs: In Text property always call
-	Document.SetSelectionToCaret just like we do in other places
-	calling Document.Empty(). This way we don't leave our selection
-	stuff in an inconsistent state.
-
-2010-08-09  Carlos Alberto Cortez  <calberto.cortez at gmail.com>
-
-	* Application.cs: At the end of the message loop in RunLoop don't
-	break the loop if the Form handle has been destroyed already -
-	which means that we *need* to wait for WM_QUIT and handle it
-	properly instead, so it doesn't end up affecting other forms.
-
-2010-08-08  Carlos Alberto Cortez  <calberto.cortez at gmail.com>
-
-	* ListView.cs: When using Details view re-populate our implicit
-	control collection to our header control is always on top. We
-	could try to just use BringToFront but since these controls are
-	implicit, we are not gracefully handling them.
-
-2010-08-07  Carlos Alberto Cortez  <calberto.cortez at gmail.com>
-
-	* ListView.cs: Don't call Dispose for our implicit scrollbars, as
-	the default Control.Dispose impl is already disposing all the
-	implicit controls. This was generating extra Layout events when
-	disposing.
-
 2010-07-08 Gonzalo Paniagua Javier <gonzalo at novell.com>
 
 	* ThemeWin32Classic.cs: implement ResetDefaults.
diff --git a/mcs/class/Managed.Windows.Forms/System.Windows.Forms/ChangeLog.old b/mcs/class/Managed.Windows.Forms/System.Windows.Forms/ChangeLog.old
deleted file mode 100644
index d7d4a57..0000000
--- a/mcs/class/Managed.Windows.Forms/System.Windows.Forms/ChangeLog.old
+++ /dev/null
@@ -1,41074 +0,0 @@
-2010-07-08 Gonzalo Paniagua Javier <gonzalo at novell.com>
-
-	* ThemeWin32Classic.cs: implement ResetDefaults.
-	Fixes bug #581956.
-
-2010-07-05  Dick Porter  <dporter at codicesoftware.com>
-
-	* MenuAPI.cs: Only handle mnemonic key shortcuts when the context
-	menu is visible.  Fixes bug 616739.
-
-2010-07-02  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* ThemeWin32Classic.cs: The images drawn in the column header must be
-	vertically centered. Fixes #616432.
-	Patch by Thomas Goldstein (stifu at free.fr).
-
-2010-06-25  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* TabControl.cs: Don't use the Font property of our TabPages - use our
-	own Font property instead, as .Net does.
-	Fixes some bits of #551032.
-
-2010-06-24  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* TabControl.cs: Call Invalidate when removing a tab page. We were
-	depending on the redraw routines of SelectedIndex, which could be not
-	enough to detect the real affected area.
-
-2010-06-24  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* TabControl.cs: Don't set SelectedTabIndex when getting the focus *at
-	all*.
-	Fixes #613765.
-
-2010-06-24  Dick Porter  <dporter at codicesoftware.com>
-
-	* Fix NullReferenceException when keyboard shortcut activates
-	disabled context menu item.  Fixes bug 615940.
-
-2010-06-22  Dick Porter  <dporter at codicesoftware.com>
-
-	* TextControl.cs, XplatUIX11.cs, XplatUICarbon.cs: Expand paint
-	regions slightly so that the full extents of text get painted.
-	Fixes bug 464464.
-
-2010-06-21  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* TreeNode.cs: Clone should detect the type of the current instance
-	and properly create the correct object.
-	Fixes #613708.
-
-2010-06-21  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* TabControl.cs: When setting SelectedIndex and the new selected tab
-	bounds are obscured by the scrollers, take into account the self tab
-	when looking for the proper bounds to adjust the slider. This is specially
-	important when we need to adjust the slider pos for the *last* tab page.
-	Fixes #615382.
-
-2010-06-20  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* TabControl.cs: Show the tooltip depending on the value 
-	of ShowTooltips.
-	Fixes #615376.
-
-2010-06-20  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* TabControl.cs: Implement ToolTip support for our tab pages.
-	Fixes part of #515045.
-
-2010-06-19  Jonathan Pobst  <monkey at jpobst.com>
-
-	* FontDialog.cs: Make the 16 colors in the color drop down
-	match .Net.  Patch by Thomas Goldstein (stifu at free.fr).
-	[Fixes bug #506726]
-
-2010-06-19  Jonathan Pobst  <monkey at jpobst.com>
-
-	* FontDialog.cs: Show all 16 colors in the color drop down
-	to match .Net.  Patch by Thomas Goldstein (stifu at free.fr).
-	[Fixes bug #508523]
-
-2010-06-17  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* TabControl.cs: When calculating the size of our tabs use
-	MinimumTabWidth only if SizeMode is other than Fixed.
-	Patch by Thomas Goldstein (stifu at free.fr).
-
-2010-05-20  Andreia Gaita <avidigal at novell.com> 
-
-	* X11Dnd.cs: Fix a few crashers, making sure the client window is valid
-	when dragging
-
-2010-05-15  Carlos Alberto Cortez <calberto.cortez at gmail.com> 
-
-	* TabControl.cs: Properly implement ItemSize, which should depend on
-	Font and ImageList -if available-, instead of having a fixed height.
-	Setting ImageList should cause a Redraw also.
-	Fixes #599950.
-
-2010-05-15  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* TabControl.cs: ItemSize should be returning two times the padding
-	values instead of one.
-
-2010-05-14  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* TabControl.cs: ItemSize should include the padding value.
-	Update the retrieval of this info in SizeTab as well.
-	Fixes part of #604034.
-
-2010-05-11  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* ScrollableControl.cs: It seems .Net is creating DockPadding lazyly,
-	which means that *any* padding for children controls is not applied
-	*until* DockPadding is accesed using its getter.
-	* FlowLayoutPanel.cs:
-	* TableLayoutPanel.cs:
-	* Form.cs: These children classes need to have the DockPadding
-	property available *always*, so create it for them in their respective
-	constructors.
-	Fixes #599506.
-
-2010-05-09  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* ListView.cs: Properly adjust SmallChange and LargeChange values for
-	our scrollbars depending on the view. Also, update the maximum allowed
-	value when setting the values from SetScrollValue to use the already
-	available information contained within them.
-	Fixes the remaining bits of #543785.
-
-2010-05-06  Carlos Alberto Cortez <calberto.cortez at gmail.com> 
-
-	* ListView.cs: When calculating the scrollbars, take into account the
-	height of the horizontal scrollbar (if visible) to assign the maximum
-	value for our vertical one.
-	Fixes #543785.
-
-2010-05-06  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* TreeNodeCollection.cs: Do some clean up by renaming some of our
-	local vars in Add and AddSorted, so we have better readibility.
-	Patch from Thomas Goldstein (stifu at free.fr).
-
-2010-05-06  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* TreeNodeCollection.cs: When adding a sorted node return the correct
-	position of that node instead of returning the count.
-	Patch from Thomas Goldstein (stifu at free.fr).
-
-2010-05-06  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* TreeNodeCollection.cs: In SetupNode remove the redundant check,
-	since we only need to have a valid tree view to call UpdateBelow.
-	Patch from Thomas Goldstein (stifu at free.fr).
-
-2010-05-04  Geoff Norton  <gnorton at novell.com>
-
-	* XplatUICarbon.cs: Patch from adrian.taylor at realvnc.com to avoid
-	blocking the message loop while processing events.
-
-2010-05-03  Carlos Alberto Cortez <calberto.cortez at gmail.com> 
-
-	* ListView.cs: Just as we did with TreeView, start the drag
-	computation in MouseDown instead of MouseMove, in order to avoid
-	firing the ItemDrag event more than one time per clicked item.
-
-2010-05-03  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* ComboBox.cs: our internal textbox should show selection only if it
-	is enabled. Don't set HideSelection since it's preventing us
-	from correctly hide the selection when needed. Finally connect a
-	handler in case our parent ComboBox gets its Enabled state changed.
-	Fixes #600433.
-
-2010-05-03  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* TreeView.cs: Set our internal fields related to the starting drag
-	position from MouseDown to MouseMove - we need to make sure
-	that the OnItemDragged event is fired only *one* time per element
-	clicked.
-	Fixes #551734.
-
-2010-05-03  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* TreeNodeCollection.cs: Instead of Sorting from SetupNode, do it
-	directly from Add (which uses AddSorted for this purpose) and Insert.
-	This way we first avoid a double sort, take advantage of our fast
-	version of Add for the default sorting, and also supress the call to Sort
-	when using our indexer setter (.Net ignores the sorting in this case).
-
-2010-05-02  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* TreeNodeCollection.cs: When Adding a new node don't remove it from
-	any previous collection. Even if this seems a little buggy, this is
-	what .Net does.
-	Fixes #601766.
-
-2010-05-02  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* StatusStrip.cs: In SetDisplayedItems call ClearInternal on
-	displayed_items instead of Clear, since this is only an internal
-	collection and we don't want to have our items have their Parent/Owner
-	modified.
-	Fixes the remaining bits of #590100.
-
-2010-05-02  Ivan Zlatev  <ivan at ivanz.com>
-
-	* DataGridViewCell.cs: Avoid a NRE in GetValue if the cell doesn't 
-	have a DataGridView associated yet.
-	[Fixes bug #600786]
-
-2010-05-01  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* ToolStripItemCollection.cs: When calling Clear set Owner and Parent
-	properties to null for each of the items in the collection, just as
-	Remove/RemoveAt do. Implement a ClearInternal method that clears the
-	collection without modifying the mentioned properties.
-	* ToolStrip.cs:
-	* ToolStripOverflow.cs: Call ToolStripItemCollection.ClearInternal
-	for our internal collections.
-	This should fix #590100, which producing a race when the garbage
-	collector was calling ToolStripItem.Dispose, which in turn was firing
-	a Layout in the ToolStrip.
-
-2010-04-27  Ivan Zlatev  <ivan at ivanz.com>
-
-	* DataGridView.cs: Fix multiple issues when inserting and adding new 
-	columns.
-
-2010-04-27  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* ToolStripSplitButton.cs:
-	* ToolStripDropDownItem.cs:
-	* ToolStripMenuItem.cs: Update overrides.
-	* ToolStripItem.cs: Pass the number of clicks to HandleClick when
-	firing OnMouseUp, so we can later fire either OnClick or
-	OnDoubleClick.
-
-	Fixes #558632.
-
-2010-04-26  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* RichTextBox.cs: When emitting the complete RTF value escape chars
-	above 0x80, at .Net seems to do. This way we are able to make
-	round-trip assignations between the setter and getter of the
-	RichTextBox.Rtf property.
-	Fixes part of #586901.
-
-2010-04-26  Ivan Zlatev  <ivan at ivanz.com>
-
-	* DataGridView.cs: Handle all possible cases for when a new column is 
-	added and there are existing rows with existing cells both in the 
-	non-databound and the databound scenario.
-	[Fixes bug #583387]
-
-2010-04-26  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* XplatUIX11.cs: When retrieving data from the x11 clipboard and we
-	are using either XA_STRING or OEMTEXT try to detect if we have escaped
-	unicode chars, and unescape them as needed. This us used by some
-	(gnome) applications to pass unicode chars in a non-unicode context.
-	Fixes #596402.
-
-2010-04-25  Ivan Zlatev  <ivan at ivanz.com>
-
-	* DataGridViewCellCollection.cs, DataGridView.cs: 
-	Ensure column cell templates are properly applied.
-	[Fixes bug #583404]
-
-2010-04-24  Ivan Zlatev  <ivan at ivanz.com>
-
-	* DataGridViewColumnCollection.cs: When adding a column also 
-	set the DisplayIndex if its now set by the user already.
-	[Fixes bug #583387]
-
-2010-04-19  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* NotifyIcon.cs: Make BalloonWindow expose the owner's Handle.
-	* Theme.cs:
-	* ThemeWin32Classic.cs: Add a HideBalloonWindow method to force to
-	close an active balloon window.
-	* XplatUIX11.cs: When removing from the system tray try to close
-	the balloon window. This is important when we hide a NotifyIcon and
-	thus need to close its related balloon window as well.
-	Fixes bits of #590093.
-
-2010-04-19  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* XplatUIX11.cs: When adding a NotifyIcon to the system tray, mark its
-	Hwnd.mapped as true, since its handle is going to be mapped later by
-	the tray (not us), but we need to know it's alive and can later properly unmap
-	it.
-	Fixes part of #590093.
-
-2010-04-16  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* TreeNodeCollection.cs: When adding/inserting/setting a new node call
-	TreeView.Sort if needed, and update/recalculate this entire
-	collection in that case.
-	* TreeView.cs: Make 'sorted' internal, instead of directly using
-	Sorted, as this one could trigger a complete Sort() operation.
-
-2010-04-14  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* TreeView.cs: We must use the comparer supplied by TreeViewNodeSorter
-	*always*, since it is used recursively, so checking for a number of
-	top level nodes is useless. This should fix a case where we were not
-	sorting any node with a single root node.
-
-2010-04-14  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* DataGridView.cs: Call the base Paint impl last, instead of do that
-	at the beginning, to let handlers draw on top of us. 
-	Fixes the remaining bits of #587563.
-
-2010-04-14  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* ToolStripItem.cs: Separate the background rendering from the Paint
-	routine, so we can both make sure the background stuff is done first,
-	and we also let our items fire the OnPaint event handlers before or
-	after their own routines.
-	* ToolStripLabel.cs: Move the base call to OnPaint to the end, so any
-	user's Paint handler can draw on top of us, like .Net does.
-	Fixes #587563.
-
-2010-04-13  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* XplatUIX11.cs: When checking for the values returned by
-	_NET_WORKAREA, use current_desktop+1 instead of current_desktop, since
-	we need the actual value, instead of the index (which is 0 based, and
-	is not working in this case). Patch by Andy Stühr
-	(andysmuell at hammerhartes.de).
-	Fixes #494234.
-
-2010-04-04  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* ToolTip.cs: Make TipState internal.
-	* ToolStrip.cs: Use the same idea of ToolTip'state to have our
-	internal timer close the tooltip window after a delay, instead of
-	waiting for the mouse to move to a different item. Also, hide the
-	tooltip window when the handle is destroyed, and also when the control
-	is getting hidden.
-	Fixes #581273.
-
-2010-03-31  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* ListView.cs: Selection should be available after the first time the
-	handle has been created, even if later the handle is destroyed or
-	temporary invalidated.
-	Fixes #584070.
-
-2010-03-01  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* TreeView.cs: When receiving a double click on a node, toggle it only
-	if it has one or more nodes - just as .net does.
-	Fixes #578079.
-
-2010-03-01  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* X11Keyboard.cs: Small correction for the previous patch: I forgot to
-	take into account the case where the buffer used in XLookupString is
-	not empty, but filled with garbage.
-
-2010-03-01  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* X11Keyboard.cs: When handling the key events, sometimes calling
-	either Xutf8LookupString or XLookupString with special chars (such
-	backspace and enter) can result in a buffer filled with garbage, or
-	empty - thus re-use the value returned by the same functions to fill
-	the gap.
-	Fixes #582691.
-
-2010-02-25  Ivan Zlatev  <ivan at ivanz.com>
-
-	* Control.cs: ControllCollaction IList implementation wasn't calling the 
-	Add implementation causing ParentChanged and all sorts of other events not to 
-	get fired.
-	[Fixes bug #580042]
-
-2010-02-25  Ivan Zlatev  <ivan at ivanz.com>
-
-	* DataGridView.cs: If we are setting a new data source and it is 
-	data bindable clear DataMember before binding.
-	[Fixes bug #554296]
-
-2010-02-25  Ivan Zlatev  <ivan at ivanz.com>
-
-	* DataGridViewCheckBoxCell.cs: Toggle the checkbox on Space key press.
-	[Fixes bug #574259]
-
-2010-02-17  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* RichTextBox.cs: When retrieving SelectedRtf/Rtf properly escape any
-	RTF reserved char, so we don't end up messing around the actual rtf
-	values.
-	Fixes part of #575731.
-
-2010-02-16  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* Line.cs: When setting the Text property, if the new text is larger
-	than the previous one, call Grow to update our internal 'widths'
-	array, to be properly in sync with the new text.
-	Fixes #569530.
-
-2010-02-10  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* TabControl.cs: When calculating the layout for the tab pages, take
-	into account the ImageList size info if it exists, even if it is
-	empty.
-
-2010-02-03  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* StatusStrip.cs:
-	* XplatX11.cs:
-	* X11Structs: Implement the new BeginMoveResize method, designed to
-	instruct the window manager to init a resize operation on a top level
-	form. This is used by StatusStrip.
-	* XplatUI.cs:
-	* XplatUIDriver.cs:
-	* XplatUIWin32.cs:
-	* XplatUICarbon.cs: Fill the gaps by creating stubs and updating the
-	method calls.
-	Fixes #573299.
-
-2010-02-01  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* ComboBox.cs: When creating DrawItemEventArgs pass the fore color and
-	back color arguments depending on the higlight/focus state, just like
-	.net.
-	Fixes #572643.
-
-2010-01-20  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* ComboBox.cs: When the normal drop down window is closed, make sure
-	that the auto complete list -if any- is closed as well, instead of
-	stay open without need.
-
-2010-01-20  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* TextBox.cs: When showing the autocomplete listbox, make sure it's on
-	top, by calling the raw XplatUI.SetZOrder for it, since we can't
-	properly call BringToFront on it as it is parentless. This fixes an
-	issue when using this feature with ComboBox's own parentless listbox.
-	Fixes the remaining bits of #489339.
-
-2010-01-19  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* XplatUI.cs:
-	* XplatUIDriver:
-	* XplatUICarbon:
-	* XplatUIWin32:
-	* XplatUIX11.cs: 
-	* XplatUIStructs: Implement support for different kind of audible
-	alerts in Windows, and update the requiered classes.
-	* MessageBox.cs: 
-	* TextBoxBase.cs: Update calls to XplatUI.AudibleAlert.
-	Fixes #473725.
-
-2010-01-18  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* ComboBox.cs: When use manually setting DropDownHeight, ignore the
-	MaxDropDownHeight property - also rename our field 'count' to
-	'visible_items_count' to avoid confusion as much as possible.
-	Fixes an issue with several items, showing an incorrect layout.
-
-2010-01-18  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* RichTextBox.cs: SelectedText should set Modified to true. Observe
-	that this is happening just here, not for the Text property, and
-	neither for the TextBoxBase impl.
-	Fixes #569950.
-
-2010-01-10  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* ToolStripMenuItem.cs: Put the Checked/CheckState logic in a single
-	place and synchronize the events properly. Fixes a lack of
-	coordination between the events - which should be fired together.
-
-2010-01-09  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* TrackBar.cs: Move our events code to a single method, allowing it to
-	optionally fire the Scroll event. This way we both avoid the
-	duplicated calls to OnScroll and also will be able to fire Scroll
-	*before* OnValueChanged in other places.
-	Fixes #568026.
-
-2010-01-04  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* RadioButton.cs: When drawing, if Appearance is Button use the old
-	normal routine in the theme engine, instead of using the one in 2.0,
-	since this last one doesn't support proper rendering of the control as
-	a button.
-	Fixes #567904.
-
-2010-01-03  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* GroupBoxRenderer.cs: Properly use SystemColors.GrayText to draw to
-	text of the group box if it is disabled.
-	Fixes #567847.
-
-2009-12-15  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* Control.cs: When changing the cursor and updating it, do update the
-	cursor immediately even if there's a child control under the current
-	cursor position - this is exactly what .net does.
-	Fixes #555780.
-
-2009-11-19  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* DataGrid.cs: In OnLeave, do cancel or end current edit, depending on
-	the commit_new_row value, instead of just trying to cancel if a new
-	row had been added. This is important when modifying existing rows and
-	then moving the focus out of the control.
-
-2009-11-17  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* XplatUICarbon.cs: Implement the overriden AudibleAlert
-	function in XplatUICarbon.  Currently it throws
-	NotImplementedException which will kill a WinForms application showing
-	a dialog box.
-	Patch by  Erik Ylvisaker (erik at agatelib.org).
-
-2009-11-17  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* DataGrid.cs: In CurrentCell, the check to do nothing in case we are
-	in the same cell as specified *and* not editing is wrong.
-
-2009-11-16  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* DataGrid.cs: When removing the cells, don't do anything if the
-	specified row is the extra cell we use to add new ones.
-
-2009-11-16  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* DataGrid.cs: CurrentCell should be *used* if the new value is the
-	same as the current one, since we could need to activate the edition
-	in the current row. Also, when beginning the edition, do nothing if,
-	basides having an empty source, we are sure we don't have the new
-	cell, which could obviously start it.
-	Fixes other bits of #323154.
-
-2009-11-16  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* DataGrid.cs: When we get notified by a change in the position of our
-	data source, don't set CurrentRow if the source is empty, as there's
-	no need to do anything else in the first place, and second, the logic
-	in the CurrentRow setter (public property) will add a new row by
-	default in this case (that is, when the source is empty).
-	Fixes part of #323154.
-
-2009-11-16  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* ToolStripMenuItem.cs: Don't try to use SystemColors.MenuText if fore
-	color is SystemColors.ControlText, as this system color detection
-	should be done *completely*. This is specially important when
-	detecting colors in systems running Gtk+ and dark themes.
-
-2009-11-11  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* DataGrid.cs: Add a new internal property to get the maximum possible
-	visible rows in the grid. We cannot use VisibleRowCount since this
-	value can, depending on the scroll position, return a +1 or -1 value,
-	so we need an absolute way to know whether we need a scroll bar or
-	not. Also, update VLargeChange to avoid code duplication.
-	Fixes a vertical scroll mismatch happening trying to add a new row
-	while the scrollbar has reached its maximum value.
-
-2009-11-09  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* DataGridTextBoxColumn.cs:
-	* DataGrid.cs: Position the cursor in the add row should *not* show
-	yet another new row - that will happen till we get any real input data
-	from the user. When that happens, we will also mark the new row as
-	ready to commit - otherwise, when the cursor moves to a different row,
-	the just added row will be discarded. This is exactly what .Net seems
-	to do.
-
-2009-11-09  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* DataGrid.cs: The large value for our vertical scrollbar should
-	depend on the number of visible rows, instead of trying to re-use the
-	value of VisibleRowCount, which is the value of *current* visible
-	rows, and can easily end messed up if new rows are added/removed.
-
-2009-11-09  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* DataGrid.cs: When moving the scroll, *dont* ever end the current
-	edit - this could seriously mess up our current edit cycle, specially
-	when adding new rows.
-
-2009-11-02  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* TabControl.cs: In OnKeyDown call the base implementation first -
-	this way we let the user tell us whether we should handle the key or
-	not.
-	Fixes #543717.
-
-2009-11-02  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* DataGrid.cs: Implement removal of rows the Correct Way by creating a
-	copy of the indexes, as any direct write access to the source will cause to
-	reset the entire selection - also, do the linear de-selection in
-	reverse order to avoid any index mismatch in the source, due to out of
-	synchronization removing the rows.
-
-2009-11-02  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* DataGridTextBoxColumn.cs:
-	* DataGrid.cs: Don't use this add-pending behaviour to try to add a
-	new row until we have the first input char - it was helping us to fix
-	other issues we have/had, but it's not matching .net.
-
-2009-10-30  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* TextBoxBase.cs: When returning the preferred height, and we are
-	supposed to be borderless, return the TopMargin value - usually in
-	borderless mode it has a value of 0, but in the ToolStrip controls we
-	need to set the margin manually.
-	Fixes #551214.
-
-2009-10-29  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* ToolTip.cs: ShowAlways works at the form level, not at the control
-	level. Fixes #544565.
-
-2009-10-28  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* ButtonBase.cs: Usually the click routines are handled in Control,
-	but in this class we are handling it ourselved, thus we need to have
-	the same calls, and we were missing the call to MouseClick.
-	Patch by Eric Petit <surfzoid at gmail.com>.
-
-2009-10-26  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* ComboBox.cs: When setting Text and data source is being used, if the
-	passed value is not matching any of the items in the source, don't
-	pass it to GetItemText, since it's useless, as GetItemText expects a
-	valid item.
-	Fixes #546009.
-
-2009-10-23  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* ListView.cs: When retrieving an item in virtual mode, as part of the
-	process calculate its layout, instead of trying to do it later.
-	* ListViewItem.cs: There's no need to try to infer whether we need to
-	compute layout or not anymore - we just do it every time we are
-	returning an item.
-	This way we should be fixing View changes with cached items, which
-	were storing the previous value, and not updating their contents
-	properly.
-
-2009-10-23  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* ColumnHeader.cs: Remove the double linear search in the Index
-	property, by removing the call to Contains, which is not needed.
-	Also, Columns collection can never be null.
-
-2009-10-23  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* ColumnHeader.cs: When calculating the width and height of the
-	column, try to expand to the right and use all the free space if we
-	are the last column *and* the resize mode is set to -2/header content.
-	Fixes #544716.
-
-2009-10-14  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* ListView.cs: When retrieving the top item, take into account the
-	offset represented by the header control, to retrieve the proper
-	value. Patch by Christoph von Wittich (Christoph at ApiViewer.de)
-	Fixes the remaining bits of #543773.
-
-2009-10-14  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* ListView.cs: TopItem setter should set the value as the top, not
-	only ensuring its visibility.
-	Fixes part of #543773.
-
-2009-10-12  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* ListView.cs: For virtual mode, when navigating the items using keyboard,
-	don't use the matrix of positions, and instead calculate the positions
-	based on the number of cols and rows, taking advantage of the fixed
-	positions of items. Use the same idea to implement FirstVisibleIndex,
-	so we avoid iterating over all the items. Patch by Stephen Robinson
-	mono at esar.org.uk.
-	Fixes part of #467418.
-
-2009-10-12  Dick Porter  <dporter at codicesoftware.com>
-
-	* Splitter.cs: Adjust offsets when more than one splitter is
-	present in a control.  Fixes bug 509472.
-
-2009-10-07  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* ListView.cs: When computing the value for groups height don't use
-	text_size field, since in LargeIcon view it sometimes contains a
-	double height value - use Font.Height directly, and also improve the
-	padding value.
-	* ThemeWin32Classic: The same as above.
-	This way the space between the group header, the line, and the items
-	area is not that big in LargeIcon view.
-
-2009-10-04  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* ListView.cs: When retrieving the fixed positions for the items in
-	virtual mode, use the row value to compute the coords of the item,
-	instead of the col value, as opposed to SmallIcon/LargeIcon views.
-
-2009-09-29  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* ListView.cs: The location of the items should be computed on the fly
-	in virtual mode - that decreased speed overall, but reduces the load
-	time.that decreased speed overall, but reduces the load time. Also,
-	handle the cases where we were using data structures we don't need to
-	use/create for this mode.
-	Fixes part of #467418.
-
-2009-09-28  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* ListView.cs: Tile view and VirtualMode can't be applied together.
-	Patch by Stephen Robinson <mono at esar.org.uk>.
-
-2009-09-28  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* ListView.cs: When calculating the layout for Details view, don't ask
-	for the items *at all* in case we are in virtual mode. This should
-	re-enable the proper behaviour of virtual mode.
-
-2009-09-26  Jonathan Pobst  <monkey at jpobst.com>
-
-	* TreeNode.cs: When we invalidate a node, make sure we start at
-	0, instead of the node's Bounds.Left, which does not include
-	the +/-, checkbox, or stateimages.
-	[Fixes bug #542481]
-
-2009-09-24  Ivan N. Zlatev  <contact at i-nz.net>
-
-	* DataGridView.cs: Compare the name and not displayname of properties 
-	when checking if the column is already bound.
-
-2009-09-21  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* RichTextBox.cs: For SelectedRtf, after inserting the stream, adjust
-	the position of the caret by adding the needed chars represented by the new line chars,
-	according to the system, using rich *or* hard new lines as needed. Also do a
-	check to be sure we don't move the cursor position beyond the limits
-	of our text. This should avoid problems with text being pasted,
-	regarding the position of the caret.
-
-2009-09-16  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* RichTextBox.cs: When SelectedRtf is set, and we are in the 0
-	position in the x axis, force to re-use any already available line,
-	even if it is not empty. This way pasting text into our textbox in the
-	beginning for non empty lines should work fine.
-
-2009-09-14  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* RichTextBox.cs: When we are inserting a flow of rtf text, and we are
-	*not* loading it from a file, try to re-use a line if already
-	available, since the default behaviour of the parser is to create new
-	lines for the document.
-	This should fix a regressions we found after the last fix for #513030.
-
-2009-09-14  Tom Hindle <tom_hindle at sil.org>
-
-	* ToolStripOverflow.cs: Fixes #536036 by adding null ptr check.
-
-2009-09-11  Ivan N. Zlatev  <contact at i-nz.net>
-
-	* PropertyGrid.cs: Hide the splitter when the help is hidden.
-
-2009-09-11  Ivan N. Zlatev  <contact at i-nz.net>
-
-	* InternalWindowManager.cs: Call Invalidate-Update instead of 
-	Refresh for MS compitability. Note also that Refresh is virtual 
-	and several controls override it in order to provide data refresh 
-	functionallity on top of the redraw and they do not expect this 
-	extra refresh call.
-	* Control.cs: In Refresh Invalidate the control and all children 
-	insead of calling Refresh for each of them.
-	[Fixes bug #538336]
-
-2009-09-11  Ivan N. Zlatev  <contact at i-nz.net>
-
-	* PropertyGrid.cs: Always set the help panel properties on the 
-	internal control, because they are inherited and can change with 
-	the parent.
-	[Fixes bug #525305]
-
-2009-09-08  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* RichTextBox.cs: When processing rtf, don't add a new line if we
-	already have one for that position. This way we avoid overriding by
-	mistake our lines when copying/pasting.
-	Fixes #513030.
-
-2009-09-07  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* TextControl.cs: When inserting new lines, look for the end of file
-	char, and remove chars after it. This is unlikely to happeng either
-	loading a file, pasting text or pressing a char, but can happen using
-	the TextBox.Text property.
-	Fixes #535884.
-
-2009-09-06  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* Line.cs: In DeleteCharacters, cache line.Length for every tag, since
-	tag.Start changes will modify it indirectly and then we would end up
-	with wrong values.
-	Fixes #512521.
-
-2009-09-03  Ivan N. Zlatev  <contact at i-nz.net>
-
-	* BindingSource.cs: Implement support for chained data sources.
-	* ListBindingHelper.cs: Add support for ICurrencyManagerProvider and 
-	clean up.
-	[Fixes part of bug #536547]
-
-2009-09-01  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* RichTextBox.cs: When saving the text to a file using SaveFile use
-	Environment.NewLine to separate the lines. This way we should be
-	saving the files according to the system.
-	Fixes the remaining part of #511515.
-
-2009-08-31  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* RichText.cs: Remove some unix new line characters and use
-	Environment.NewLine. Fixes part of #511515.
-
-2009-08-28  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* TextBoxBase.cs: Modified should *not* be modified from the Text
-	property, as our new tests show. It should be to false, however, in
-	Append and Clear; and Paste, Cut, Undo, and direct user input should set it
-	to true. Also, as opposed to what the .net docs say -but proven by our
-	tests-, the changes should be generating a ModifiedChanged event
-	(thus we set the property, instead of the field).
-	Fixes #511267.
-
-2009-08-27  Ivan N. Zlatev  <contact at i-nz.net>
-
-	* DataGridView.cs: Fire the CellDoubleClicked event.
-	[Fixes bug #533430]
-
-2009-08-27  Ivan N. Zlatev  <contact at i-nz.net>
-
-	* DataGridView.cs: Add support for column DataGridViewAutoSizeColumnMode
-	DisplayedCells and DisplayedCellsExceptHeader.
-	[Fixes bug #533435]
-
-2009-08-27  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* TextControl.cs: When removing a simple char, actually record the
-	action in the undo manager. This way we both support undoing the
-	removal of chars using backspace/delete, as well as keeping data
-	integrity when other undo tasks are performed.
-	Fixes #531983.
-
-2009-08-24  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* Control.cs: Remove the ancient code in ResetText, which was setting
-	the internal field to String.Empty, instead of doing it for our Text
-	property, as .net does (which also causes a TextChanged event and all
-	the other related routines).
-	Fixes #531587.
-
-2009-08-24  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* TreeNodeCollection.cs: Correctly implement Contains by using a
-	linear search - there's no possible way to use a binary search, since
-	the node instances are not implementing IComparable, nor have a
-	specific order.
-	Fixes #529927.
-
-2009-08-24  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* DataGrid.cs: If we are *not* changing a row
-	already added to the source, and thus we are adding a new 
-	row instead, try to move to the previous row when Esc is
-	pressed -if possible-.
-	Fixes some bits of #322974.
-
-2009-08-24  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* DataGridTextBoxColumn.cs:
-	* DataGrid.cs: Moving the cell to the add row (the last one) should
-	not immediately add a new row - this should happen until the very
-	first change happens in that textbox.
-	Fixes part of #322974.
-
-2009-08-19  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* ToolStripDropDown.cs: When assigning the owner item, use its Font as
-	well.
-
-2009-08-17  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* ToolStripItem.cs: When the owner changes its Font, call the
-	OnFontChanged event, so we let our users know that we likely have a
-	new font - since Font is an ambient property.
-	* ToolStripDropDownItem.cs: When our Font changes, propagate that
-	information to our DropDown control, if any.
-	Fixes #531515.
-
-2009-08-17  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* DataGrid.cs: 
-	* ThemeWin32Classic.cs: When the user clicks on a new cell, we should reset any
-	previous selection, just like .net does. Also, in the cases where a
-	cell is being edited and it keeps the selected status, use the normal
-	colors for it, and use the selected colors for the rest of the columns of
-	that row.
-	Fixes the remaining bits of #323051.
-
-2009-08-16  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* DataGrid.cs: When getting ProcessKeyPreview fired, call Edit() if we
-	are not editing already - so the edition is actually active on our
-	column style textbox. Also, it seems the code handling process the
-	grid keys is repeated, but instead of removing it, just comment it for
-	now.
-	Fixes part of #323051.
-
-2009-08-13  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* AsyncMethodResult.cs: Store a exception field in case the called
-	method actually caused an exception. This way we can throw it later.
-	* XplatUIDriver.cs: Check if the async method result has an exception
-	- throw it if needed. 
-	The idea is that Control.Invoke throws the exception from the thread
-	that called it, not the main MWF thread. 
-	Patch by Tom Spink <tspink at gmail.com>. Fixes #497175.
-
-2009-08-12  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* DataGrid.cs: In mouse move we need to shift the selection in case
-	the pointer is on the row headers.
-	Fixes #323052.
-
-2009-08-11  Ivan N. Zlatev  <contact at i-nz.net>
-
-	* SplitContainer.cs: Avoid updating the splitter distance if it hasn't 
-	moved. Updating the distance was causing a re-layout which was resetting 
-	the clicks counter and preventing DoubleClick from every firing.
-	[Fixes bug #521387]
-
-2009-08-11  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* DataGrid.cs: When a new TableStyle is added, don't create new
-	columns for it unless it is empty - this is the correct way to both
-	respect the columns if they were provided by our user, or create them
-	for him in case the column collection is empty.
-	Fixes #323111.
-
-2009-08-10  Carlos Alberto Cortez <calberto.cortez at gmail.com> 
-
-	* DataGrid.cs: Actually call BindColumns in the handler for
-	ListManager.MetaDataChanged, since the current code is already taking
-	into account the scenario when a custom table style is used - this was
-	confusing us before, and that's why we commented the call to
-	BindColumns. Also call CallAreasAndInvalidate, to properly reflect the
-	changes as needed.
-	Fixes #465021.
-
-2009-08-10  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* DataGrid.cs: When setting the data source, if we have a user
-	provided table style available, force a complete bind in case the
-	column styles for that table style is empty.
-
-2009-08-09  Ivan N. Zlatev  <contact at i-nz.net>
-
-	* DataGridViewCell.cs: Handle null and DBNull values.
-
-2009-08-07 Rodrigo Kumpera  <rkumpera at novell.com>
-
-	* ListBindingHelper.cs: Fix the 1.0 build by making this type available
-	under that profile.
-
-2009-08-07  Ivan N. Zlatev  <contact at i-nz.net>
-
-	* CurrencyManager.cs: Remove duplicate code.
-
-2009-08-07  Ivan N. Zlatev  <contact at i-nz.net>
-
-	* DataGridView.cs, DataGridViewCell.cs, DataGridViewColumn.cs: 
-	Massive population performance boost. From seconds to ms.
-	[Fixes bug #528887]
-
-2009-08-04  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* DataGrid.cs: When handling mouse down on a column, don't do any sort
-	even if the list supports it if we are empty. This way we avoid an exc
-	sorting the empty list, and keep the UI compatible with .net.
-
-2009-08-04  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* DataGrid.cs: In Edit () check we have any row before trying to use
-	the current row. Fixes a IOOR exc with an empty data grid.
-
-2009-08-03  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* DataGridColumnStyle.cs: Don't call CheckValidDataSource when setting
-	the owner DataGrid - even if this seems to be the right thing to do,
-	.net is not doind this check at this point, but in later operations.
-	Fixes #465019.
-
-2009-07-28  Mike Gorse  <mgorse at novell.com>
-
-	* ToolStripMenuItem.cs: Added UIA CheckOnClickChanged event.
-
-2009-07-28  Carlos Alberto Cortez <calberto.cortez at gmail.com> 
-
-	* Application.cs: Make FilterMessage internal for 1.1. Fixes the 1.1 build.
-
-2009-07-28  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* XplatUIX11.cs:
-	* XplatUIWin32.cs: We need to filter the messages using
-	Application.FilterMessage for our DoEvents implementations. Observe
-	that I don't like the idea of XplatUI call the upper level Application
-	class, but at this point is easier and simpler to do this call - based
-	on the fact it's only one simple call.
-	Fixes #516735.
-
-2009-07-28  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* TreeNodeCollection.cs: When removing the selected node, set the
-	SelectedNode value of TreeView to null if there aren't more nodes left - 
-	this is better than to clear the selected node in Clear, since we need
-	to handle the situation in the Remove methods as well.
-	Fixes #525002.
-
-2009-07-24  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* ToolStripItemCollection.cs: Find should do a case insensitive
-	search, and should throw an ArgumentNullException if the parameter is
-	an empty string.
-
-2009-07-23  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* PropertyGrid.cs: Use click handlers for each ToolStripButton instead
-	of using a global handler for the ToolStrip. This way the buttons can
-	be recovered and can have its PerformClick method called properly.
-	Fixes #522454.
-
-2009-07-20  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* X11Dnd.cs: Implement support for XdndActionList, so we can get the
-	complete list of the supported actions in the drag source, and use the
-	action passed in the Position message only as a fallback. This will
-	help us with dnd operations with non winforms apps.
-	Fixes #402158.
-
-2009-07-20  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* ToolStripItemCollection.cs: Use a List<> instead of an ArrayList in
-	Find. This should fix the exception we were getting when trying to
-	convert the ArrayList to an array of objects (since we were losing the
-	type parameter).
-	Fixes #519944.
-
-2009-07-17  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* RadioButton.cs: Setting Checked when none of the sibligs is checked
-	should happen *not* in GotFocus, but in the Enter event. This is
-	specially important since we should get that Checked behaviour even if
-	no handle is created yet - and thus, no actual GotFocus call happens at
-	the time.
-	Fixes #520764.
-
-2009-07-16  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* ComboBox.cs: Adjust manually the top border for out internal
-	ComboBox, since removing the border from it leaves it without any
-	margin. This is not noticeable in a default ComboBox, but it is in an
-	instance shown on top of ToolStrip.
-	Fixes the remaining part of #507462.
-
-2009-07-13  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* TextBoxBase.cs: Expose the margin top width as a property, to keep
-	the code clean.
-	* ToolStripTextBox.cs: Since we are actually using no border in the
-	default TextBox impl, and we are drawing the border ourselves, we need
-	to manually set the top margin.
-	Fixes part of #507462.
-
-2009-07-06  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* PrintPreviewDialog.cs: Record when left was pressed, so we can
-	simulate Tab+Alt when moving the focus throughout our buttons and
-	controls.
-	Fixes the remaining bits of #509142.
-
-2009-07-05  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* TabControl.cs: When computing the width of each tab page, use the
-	page's Font instead of the tab control one.
-	Fixes #514368.
-
-2009-07-03  Carlos Alberto Cortez <calberto.cortez at gmail.com> 
-
-	* MenuAPI.cs: When handling the Keys.Left key, don't close the menu if
-	the current menu is specifically a ContextMenu (this is what .net does
-	as well). This way we also avoid a crash caused by MenuTracker trying
-	to use the menu when it was already hidden.
-
-2009-07-03  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* PrintPreviewDialog.cs: Remove the code used to handle the
-	DropDown menu, since we are now doing it by default in ToolBar, and
-	just call the base impl as needed.Also, deactivate the dropdown menu
-	before moving the focus to a different button in our toolbar, as .net
-	does.
-	* ContextMenu.cs:
-	* MenuAPI.cs: Make as internal the needed bits to deactivate a
-	ContextMenu, and also to keep some beauty in our api.
-
-2009-07-02  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* ToolBar.cs: When handling the key down message, if we are on a
-	drop down button, either show the DropDownMenu or pass the key to its
-	ProcessCmdKey method as needed.
-	Fixes the remaining bits of #509985.
-
-2009-06-29  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* ToolBar.cs: Isolate the event logic related to OnButtonClick. Also
-	set current_item when navigating with the keyboard, so we can use it
-	properly later. Finally, handle both Enter and Space to fire
-	OnButtonClick *only*, without any other impact, as .net does.
-	Fixes part of #509985.
-
-2009-06-29  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* MenuAPI.cs: Close any active menu when we get a simple Alt.
-	Fixes #509299.
-
-2009-06-26  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* ToolBar.cs: In OnButtonClick only change the Pushed value for
-	buttons with toogle style. We were previously doing it for
-	DropDownButton's buttons, but that's not what .net is doing.
-	Fixes #510030.
-
-2009-06-26  Atsushi Enomoto  <atsushi at ximian.com>
-
-	* XplatUICarbon.cs : support multi-byte text input.
-	  Fixed bug #501276.
-
-2009-06-22  Carlos Alberto Cortez <calberto.cortez at gmail.com> 
-
-	* ListBox.cs: When creating DrawItemEventArgs, pass either
-	Theme.ColorHighlightText or ForeColor depending on the selected state
-	of our item, as .net does.
-	Fixes #512115.
-
-2009-06-22  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* ComboBox.cs: When handling WM_CHAR, process the message first, and
-	send it to the textbox only if it wasn't handled.
-	Fixes #507459.
-
-2009-06-18  Jonathan Pobst  <monkey at jpobst.com>
-
-	* ComboBox.cs: Only do my big sort at the end of AddRange if
-	the combobox is actually set to Sorted.
-
-2009-06-18 Tom Hindle <tom_hindle at sil.org>
-	
-	* XplatUIX11.cs: Enabled Text to coexist with custom data formats.
-	Fixes #511849.
-
-2009-06-18  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* ListBox.cs: When calculating the scrollbars for non MultiColumn
-	mode, force the use of the horizontal scrollbar only if
-	ScrollAlwaysVisible is true as well.
-	Fixes #513029.
-
-2009-06-17  Jonathan Pobst  <monkey at jpobst.com>
-
-	* ComboBox.cs: When using AddRange on a sorted combobox, don't
-	try to use our inefficient sorted insert method, just append
-	it and sort the whole thing at then end.
-	[Fixes bug #511247]
-
-2009-06-16  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* ToolBar.cs: Expose as internal the code used to show a dropdown menu.
-	* PrintPreviewDialog.cs: Handle the down/up arrow keys for our
-	DropDown element.
-	Fixes #509152.
-
-2009-06-16  Ivan N. Zlatev  <contact at i-nz.net>
-
-	* DataGridView.cs: Scrolling fixes.
-	[Fixes bug #512816]
-
-2009-06-16  Ivan N. Zlatev  <contact at i-nz.net>
-
-	* DataGridView.cs, DataGridViewRowCollection.cs: Clean up a bit and 
-	optimize for batch adding rows.
-
-2009-06-16  Ivan N. Zlatev  <contact at i-nz.net>
-
-	* DataGridView.cs: Avoid calling ReBind twice during the initial data 
-	binding.
-	[Fixes bug #512807]
-
-2009-06-16  Ivan N. Zlatev  <contact at i-nz.net>
-
-	* DataGridView.cs: Suppress invalidation during data binding.
-	[Fixes part of bug #512807]
-
-2009-06-15  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* PrintPreviewDialog.cs: Tune the navigation among the buttons and
-	controls that are part of our ToolBar, so we can mimic the behaviour
-	observed in .Net, by handling also the arrow keys and doing the
-	preprocess for them too.
-	Fixes the remaining bits of #509142.
-
-2009-06-12  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* ToolBar.cs: Expose the current item as internal.
-	* PrintPreviewDialog.cs: Tune the TabStop property for
-	PrintPreviewControl/ToolBar so we match the .net scenario regarding
-	Tab navigation. Also implement support to navigate throughout the
-	items in the ToolBar.
-	Fixes #509142.
-
-2009-06-09  Ivan N. Zlatev  <contact at i-nz.net>
-
-	* DataGridViewComboBoxCell.cs, DataGridViewComboBoxColumn.cs: 
-	Implement items syncing in the non-databound scenario.
-	[Fixes bug #494031]
-
-2009-06-09  Ivan N. Zlatev  <contact at i-nz.net>
-
-	* DataGridView.cs: Call OnCellValidating and OnCellValidated and 
-	handle the Cancel accordingly.
-	[Fixes bug #506838]
-
-2009-06-09  Ivan N. Zlatev  <contact at i-nz.net>
-
-	* DataGridViewBand.cs: Fix a typo in DefaultHeaderCellType.
-	[Fixes bug #506796]
-
-2009-06-09  Ivan N. Zlatev  <contact at i-nz.net>
-
-	* DataGridViewColumnCollection.cs, DataGridViewRowCollection.cs, 
-	DataGridView.cs: Fire CollectionChangeAction.Refresh collection 
-	changed when Clearing the collections so that the DataGridView 
-	can know and reset the current cell.
-	[Fixes bug #492549]
-
-2009-06-09  Ivan N. Zlatev  <contact at i-nz.net>
-
-	* BindingSource.cs: In ResetBindings use the ListChangedEventArgs ctor 
-	with the PropertyDescriptor parameter instead of index, because the 
-	latter will set some irelevant indices. Fixes a bug uncovered by recent
-	 fix to ListChangedEventArgs.
-
-2009-06-09  Carlos Alberto Cortez <calberto.cortez at gmail.com> 
-
-	* DataObject.cs: When looking for any specific format, do a case
-	insensitive search, as .net does.
-	Fixes #509199.
-
-2009-06-09  Ivan N. Zlatev  <contact at i-nz.net>
-
-	* CurrencyManager.cs: In AllowNew firstly check if the list is a 
-	IBindingList and proxy to AllowNew. IBindingList has slightly differet 
-	logic and eventhough it's an IList IsReadOnly should not be used in this 
-	case as it might be True but AllowNew could be True as well.
-	Fixes a bug uncovered by a fix to the Array class.
-
-2009-06-08  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* ListBindingHelper.cs: In GetListItemType do a null check when
-	looking for IList.Item, since the impl could be explicit, and thus
-	private. Fix by Florent Fayolle (p.ricca at odyssee-ingenierie.com).
-	Fixes the remaining part of #507120
-
-2009-06-07  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* DataObject.cs: Map StringFormat/Text/UnicodeText formats properly,
-	to match them in all the cases, as this is exactly what .net does.
-	Fixes #510728.
-
-2009-06-06  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* ListBindingHelper.cs: In GetListItemType handle gracefully the case
-	where an instance of IEnumerator returns a null value for its Current
-	property. Fix by Florent Fayolle (p.ricca at odyssee-ingenierie.com).
-	Fixes #507120.
-
-2009-06-05  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* ComboBox.cs: Properly detect whether we need to use our vertical
-	scrollbar or not, specially for DropDownList/DropDown styles,
-	depending on the value of DropDownHeight.
-	Fixes #508541.
-
-2009-06-01  Carlos Alberto Cortez <calberto.cortez at gmail.com> 
-
-	* ToolTip.cs: Call the base implementation in Dispose, but do it
-	before anything else to avoid a regression. This way we do the default
-	routines related to any System.ComponentModel.Container.
-	Fixes #508586.
-
-2009-06-01  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* Clipboard.cs:
-	* XplatUIX11.cs:
-	* DataFormats.cs: Implement support for serializable types in our
-	clipboard.
-	Fixes #357642.
-
-2009-05-25  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* ColorDialog.cs: Actually add the help button to the form, so it can
-	be visible.
-	Fixes #478555.
-
-2009-05-25  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* PrintPreviewDialog.cs: Don't use Dock.Fill for the
-	PrintPreviewControl, since it will be hidden in the top by our
-	toolbar. Use manual location and anchoring instead.
-	Fixes #474889.
-
-2009-05-25  Carlos Alberto Cortez <calberto.cortez at gmail.com> 
-
-	* FileDialog.cs: When saving the size of the dialog, use the
-	ClientSize instead of Size, so we have always the same size for the
-	form. Patch by Alex Shulgin.
-	Fixes #503064.
-
-2009-05-25  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* MessageBox.cs: When showing the dialog call XplatUI.AudibleAlert to
-	show a beep, similar to what .net does. 
-	Fixes #473725.
-
-2009-05-23  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* ContainerControl.cs:
-	* MenuStrip.cs
-	* ToolStrip.cs: Implicit mnemonic processing should happen for every
-	ToolStrip child, not only for MenuStrip, so we are going to do that in
-	ToolStrip.ProcessMnemonic, where we already had that exactly
-	functionality, but we are only just checking that either this instance
-	is a ToolStripDropDownMenu instance or Alt has been pressed. Finally
-	remove the extra code, since we are not going to use it now.
-	Fixes the remaining bits of #503663.
-
-2009-05-21  Neville Gao  <nevillegao at gmail.com>
-
-	* ContextMenu.cs: Cleaned up UIA properties.
-
-2009-05-20  Dick Porter  <dick at acm.org>
-
-	* XplatUICarbon.cs: Add more locking around MessageQueue
-	manipulations.
-
-2009-05-18  Carlos Alberto Cortez <calberto.cortez at gmail.com> 
-
-	* DateTimePicker.cs: Call Focus in HideMonthCalendar to avoid
-	duplication of code, as well as actually getting the focus back in
-	*any* scenario where the drop down is closed.
-
-2009-05-18 Tom Hindle <tom_hindle at sil.org>
-	* ScrollableControl.cs: Ignore setting properties HScroll and 
-	VScroll when AutoScroll is true.
-	[Fixes bug #500213]
-
-2009-05-18  Jonathan Pobst  <monkey at jpobst.com>
-
-	* ToolStripRenderer.cs: Apply patch from Thomas Goldstein to make
-	disabled graphics look closer to the ones that .Net produces.
-	[Fixes bug #473660]
-
-2009-05-18  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* DateTimePicker.cs: When calculating the max width for the year part,
-	use the current value, since *all* the possible values are exactly a 4
-	digits number. This way we avoid a ArgumentOutOfRangeException trying
-	to check against different values.
-	Fixes #500917.
-
-2009-05-15  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* MessageBox.cs: When handling ProcessDialogChar, check that
-	CancelButton is not null before trying to use it, to avoid a null ref
-	exception. We don't need to do that on the ok/yes buttons, since they
-	always exist.
-	Fixes #503935.
-
-2009-05-15  Carlos Alberto Cortez <calberto.cortez at gmail.com> 
-
-	* ListBox.cs: Handle the key down event in WndProc instead of doing it
-	in an event handler, as we need to avoid any operation in case
-	the user has handled it in its own OnKeyDown handler, and this can't
-	be achieved since our handler would be the first one always.
-	* FontDialog.cs: Update the calls since our method handling key down
-	has been renamed.
-	Fixes #503469.
-
-2009-05-15  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* Application.cs: We should dismiss the active ToolStrip when we
-	receive a WM_SYSKEYDOWN message, instead of WM_SYSKEYUP, so the next
-	keyboard short cut can be properly processed by another menu item.
-	Fixes part of #503663.
-
-2009-05-13  Andreia Gaita  <avidigal at novell.com>
-
-	* HtmlDocument.cs: If the objects are strings, wrap them in ""
-
-2009-05-13  Andreia Gaita  <avidigal at novell.com>
-
-	* HtmlDocument.cs: Fix InvokeScript call (duh).
-
-2009-05-11  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* TextBox.cs: Expose IsAutoCompleteAvailable as internal.
-	* ComboBox.cs: If auto complete is being used, it is needed to update
-	the actual value of the combo box, doing it immediately if the user
-	presses Enter, or doing it when our combo box loses focus. Finally,
-	when handling Enter and Escape keys for the combobox, don't try to
-	hide the listbox if it is not visible in the first place. 
-	Fixes part of #489339.
-
-2009-05-11  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* ToolStripDropDownMenu.cs: Use the height returned by
-	ToolStripItem.GetPreferredHeight to calculate our own height.
-
-2009-05-10  Carlos Alberto Cortez <calberto.cortez at gmail.com> 
-
-	* TreeNode.cs: When setting Checked, do a double null check, since the
-	current node can still get a null parent handling
-	TreeView.OnAfterCheck.
-	Fixes #502567.
-
-2009-05-10  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* Control.cs: When assigning ContextMenu, do a null check before
-	assigning its container field.
-
-2009-05-08  Brad Taylor  <brad at getcoded.net>
-
-	* DateTimePicker.cs: Add a UIA-specific property to ensure that if
-	is_checkbox_checked is changed, we won't break.
-
-2009-05-08  Andrés G. Aragoneses  <aaragoneses at novell.com>
-
-	* ToolStripItem.cs: Prevent NRE when our holder is a
-	ToolStripDropDownButton and we get Select()ed.
-
-2009-05-08  Carlos Alberto Cortez <calberto.cortez at gmail.com> 
-
-	* ToolStripControlHost.cs: DefaultSize must return the current size of
-	the Control, not the value returned by GetPreferredSize. Also connect
-	a handle to the control Resize event, and use it to fire
-	OnHostedControlReize.
-	Fixes the remaining bits of #483146.
-
-2009-05-08  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* ToolStripDropDown.cs: When performing the layout, use
-	ToolStripItem.GetPreferredSize ().Height instead of
-	ToolStripItem.Height, since we are already using it that way in this
-	same method.
-	Fixes part of ##483146.
-
-2009-05-08  Brad Taylor  <brad at getcoded.net>
-
-	* DateTimePicker.cs: Wrap UIA specific code in NET_2_0 wrappers.  Send
-	OnUIASelectionChanged when ShowCheckbox is true and the checkbox
-	recieves focus.  Part of fix for #502029.
-
-2009-05-06  Mike Gorse  <mgorse at novell.com>
-
-	* FileDialog.cs: Add UIAFocusedItemChanged to PopupButtonPanel.
-	Add PerformClick and PerformDoubleClick to PopupButton.
-	Fixes #499851.
-
-2009-05-04  Andrés G. Aragoneses  <aaragoneses at novell.com>
-
-	* TabControl.cs: call Focus() to emit GotFocus event at the
-	proper time when SelectionIndex changes. Fixes #499887.
-
-2009-05-03  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* MonthCalendar.cs: In SetBoundsCore always do the bounds check to
-	have valid values, even if BoundSpecified is not including
-	Size/Height/Width - this is useful when we are in a control using Dock
-	or Anchor.
-	Fixes part of #483146.
-
-2009-04-27  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* ComboBox.cs: When losing the focus, if our textbox is not null,
-	close its auto complete list, if any.
-	Fixes part of #489339.
-
-2009-04-27  Andrés G. Aragoneses  <aaragoneses at novell.com>
-
-	* ListView.cs: Make OnColumnClick +internal to be used by a11y.
-
-2009-04-27  Brad Taylor  <brad at getcoded.net>
-
-	* ToolStripButton.cs: Emit an internal event when CheckOnClick is
-	changed.
-
-2009-04-26  Carlos Alberto Cortez <calberto.cortez at gmail.com> 
-
-	* XplatUIX11.cs: Properly support UTF8 when handling the
-	SelectionRequest event - this is helpful supporting some window
-	managers, such KDE, that explictly request the text in utf8, as
-	opposed to gnome, that supports ascii.
-	Fixes #489393.
-
-2009-04-26  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* ToolStripDropDownItem.cs: When assigning a new
-	ToolStripDropDownMenu, let it know we are its OwnerItem. This way the
-	Capture duties performed by Application/ToolStripManager are handled
-	nicely and we don't end up in an inconsisten stat.
-	Fixes #492815.
-
-2009-04-25  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* ToolStrip.cs: Even if we are not exactly a MenuStrip instance, close
-	any ToolStripDropDownItem when receiving a mouse down event in an
-	empty area.
-
-2009-04-24  Andrés G. Aragoneses  <aaragoneses at novell.com>
-
-	* ToolBarButton.cs: add UIA events for style and dropdownmenu changes.
-
-2009-04-24  Andrés G. Aragoneses  <aaragoneses at novell.com>
-
-	* ToolBarButton.cs: rename a method to include UIA prefix.
-
-2009-04-24  Andrés G. Aragoneses  <aaragoneses at novell.com>
-
-	* ToolBarButton.cs: change visibility of some UIA methods from
-	protected virtual to private.
-
-2009-04-24  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* ToolStripDropDown.cs: In OnVisibleChanged, if we have an OwnerItem,
-	fire OnDropDownOpened/OnDropDownClosed depending on the new
-	visibility. This also ensures that any direct access to this instance
-	will fire the mentioned events for the OwnerItem.
-	* ToolStripDropDownItem.cs: Remove the invocations to
-	OnDropDownOpened/OnDropDownClosed, since they are handled in
-	ToolStripDropDown, as well as updating the
-	OnDropDownHide/OnDropDownShow calls to be in the right order.
-	Fixes #496193.
-
-2009-04-21  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* Control.cs, ContextMenuStrip.cs, ToolStripMenuItem.cs: Only process any 
-	shortchut in ToolStripMenuItem.ProcessCmdKey if the control generating the 
-	event is the same as the owner of the menu item. Also set properly 
-	SourceControl for ContextMenuStrip, as well as add an internal field to 
-	contain the control that owns the ContextMenuStrip (we need to know this 
-	even before the public property is assigned).
-	Fixes bits of #393775.
-
-2009-04-20  Carlos Alberto Cortez <calberto.cortez at gmail.com> 
-
-	* StatusStrip.cs: Use the same icon as .net when the mouse is over the
-	size grip.
-	Fixes #492828.
-
-2009-04-20  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* ComboBox.cs: When calculating the height of the ComboListBox,
-	specially for the 2.0 profile, use MaxDropDownItems if the
-	DropDownHeight property hasn't been set, and use the later if it has
-	been set. This way we support both properties.
-	Fixes #493308.
-
-2009-04-14  Carlos Alberto Cortez <calberto.cortez at gmail.com> 
-
-	* ThreadExceptionDialog.cs: Draw the error icon, previously missing.
-	Fixes #474253.
-
-2009-04-14  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* ContainerControl.cs: Implement support for Control.CausesValidation,
-	by adding a pending list of controls to be validated in the top
-	container control, and postpone validation as needed. 
-	Also remove any control in the validation chain in case it gets removed 
-	from its owner before the pending validation actually happens.
-	Fixes #457170.
-
-2009-04-09  Carlos Alberto Cortez <calberto.cortez at gmail.com> 
-
-	* ListBox.cs: The default instance StringFormat field used to draw our
-	items should use the StringFormatFlags.NoWrap value, so it doesn't try
-	to put in a different line the text that doesn't fit our bounds, but
-	show it partially.
-	Fixes #475581.
-
-2009-04-09  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* CheckedListbox.cs: When executing OnItemClick check that the index
-	is different to -1 before trying to retrieve an item using that value.
-	Fixes a ArgumentOutOfRangeException thrown when the horizontal
-	scrollbar was visible but not needed, and then a clicked was received
-	on its area.
-
-2009-04-08  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* MaskedTextBox.cs: If Insert is pressed, change the internal
-	overwrite mode for our default value.
-	Fixes some bits of #477395.
-
-2009-04-06  Carlos Alberto Cortez <calberto.cortez at gmail.com> 
-
-	* ListView.cs: In EnsureVisible avoid any direct access to items if we
-	are using virtual mode - otherwise use the bounds stored in a specific
-	item in a given index. This is specially important when using groups
-	or when items are re-arranged, since the position in the items
-	collection can be different than that one being displayed.
-	Fixes the rest of ##491978.
-
-2009-04-06  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* ThemeWin32Classic.cs: Include the previous check for ListView in a
-	2.0 define as needed.
-
-2009-04-06  Carlos Alberto Cortez <calberto.cortez at gmail.com> 
-
-	* ThemeWin32Classic.cs: Don't draw ListView's gridlines if we are using groups.
-	Fixes part of #491978.
-
-2009-04-06  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* ToolTip.cs: New fields to store the title/icon information.
-	* ThemeWin32Classic.cs: Implement support for tooltip's title and
-	icon.
-	Fixes #491978.
-
-2009-04-03  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* TabControl.cs: When removing a tab that was previously selected, set
-	internally the value of selected_index to -1, to avoid trying to
-	access the previous one when trying to set the new one (and was
-	already removed from the collection). This is what .net seems to do
-	too.
-	Fixes #490937.
-
-2009-04-02  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* XplatUIX11.cs, X11Clipboard.cs: Text and Rtf formats must be
-	separated, and we cannot fallback on Text if Rtf is requested but not
-	present.
-	* Clipboard.cs: Actually use the format specified by our user when
-	putting data.
-
-2009-03-31  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* X11Clipboard.cs: Actually look for the RtfText format when calling
-	GetRftText in our clipboard formats list, instead of using the
-	generical Text format.
-
-2009-03-30  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* TextBox.cs: Process auto completion properly when we are using the
-	internal source provided by ComboBox, and also remove some repeated
-	checks.
-	Fixes #489339.
-
-2009-03-30 Tom Hindle <tom-hindle at sil.org>
-	
-	* DataGridView added Support for Invisible Columns to 
-	AutoFillColumnsInternal method.
-
-2009-03-30  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* X11Structs:
-	* X11Clipboard.cs: Move internal ClipboardStruct from X11Structs to
-	its own file, since it is adding some functionality and thus is not a
-	simple struct as before.
-	* XplatUIX11.cs: Add support to store different formats that could
-	have been specified by the user when puting data in the Clipboard -
-	this is important when more than one format is supported (such plain
-	text and rtf text). Update in the needed places, as well as simplify
-	the code.
-	Fixes #489625.
-
-2009-03-30  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* XplatUIX11.cs: When handling the SelectionRequest event, use
-	SelectionRequestEvent instead of SelectionEvent, so we get the right
-	data for the app asking for clipboard data. Set the member of
-	SelectioneEvent.property to indicate the place where we are storing
-	the information as well - this is specially important for gnome/kde
-	apps using the TARGETS atom to ask for the supported permission before
-	actually asking for a specific format.
-	Fixes #489393.
-
-2009-03-28  Ivan N. Zlatev  <contact at i-nz.net>
-
-	* DataGridViewCell.cs: We don't support drawing all types of cell borders, 
-	so fallback and at least draw something instead of nothing.
-
-2009-03-27  Ivan N. Zlatev  <contact at i-nz.net>
-
-	* DataGridView.cs: If the column header isn't visible allow resizing 
-	using the cell column border. Also be sure to reset the cursor properly.
-	[Fixes bug #489929]
-
-2009-03-26   Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* ToolStrip.cs: When disposing, iterate over the items in reverse
-	order, since disposing the items modifies the collection.
-	* ToolStripItem.cs: Remove from the owner when disposing.
-	Fixes #485769.
-
-2009-03-26  Ivan N. Zlatev  <contact at i-nz.net>
-
-	* DataGridView.cs: Add an implementation for UpdateRowHeightInfo. No 
-	longer throws a NotImplementedException.
-	  Based on a patch by Tom Hindle <tom_hindle at sil.org>
-	[Fixes bug #488319]
-
-2009-03-26  Ivan N. Zlatev  <contact at i-nz.net>
-
-	* DataGridView.cs: Implement IsCurrentRowDirty. No longer throws 
-	NotImplementedException.
-
-2009-03-26  Ivan N. Zlatev  <contact at i-nz.net>
-
-	* DataGridViewColumn.cs, DataGridViewTextBoxColumn.cs: 
-	Fix SortMode clash handling.
-	[Fixes bug #488263]
-
-2009-03-26  Ivan N. Zlatev  <contact at i-nz.net>
-
-	* DataGridView.cs: Do not show the vertical scrollbar if there is only 
-	one row or less. For the sake of MSNET compatibility.
-	[Fixes bug #487988]
-
-2009-03-26  Ivan N. Zlatev  <contact at i-nz.net>
-
-	* DataGridView.cs: When the current cell is moved out of the editing row 
-	be sure to reset it back to a place holder row.
-
-2009-03-19  Ivan N. Zlatev  <contact at i-nz.net>
-
-	* DataGridView.cs: If IsHandleCreated and the very first row is added 
-	to the grid in a non-databound scenario - select the first cell.
-	[Fixes bug #486881]
-
-2009-03-19  Ivan N. Zlatev  <contact at i-nz.net>
-
-	* DataGridView.cs: If we are not databound and empty once the first row 
-	gets added select the first cell.
-	[Fixes bug #486881]
-
-2009-03-19  Ivan N. Zlatev  <contact at i-nz.net>
-
-	* DataGridView.cs, DataGridViewColumn.cs: Do not set Row/CellTemplate's
-	DataGridView. They do not belong to a DataGridView.
-	[Fixes bug #486645]
-
-2009-03-19  Ivan N. Zlatev  <contact at i-nz.net>
-
-	* DataGridViewCellCollection.cs, DataGridViewColumnCollection.cs: 
-	Set indices and associate with DataGridView only after the item is 
-	add to the internal list.
-	[Fixes part of bug #486645]
-
-2009-03-19  Ivan N. Zlatev  <contact at i-nz.net>
-
-	* DataGridView.cs: Do not add any cells to the FullRowTemplate in RowCount. 
-	FullRowTemplate already contains all the cells.
-	[Fixes part of bug #486645]
-
-2009-03-19  Ivan N. Zlatev  <contact at i-nz.net>
-
-	* DataGridView.cs, DataGridViewCellCollection.cs: Split the column removal 
-	to perform Pre and Post removal actions to allow the current cell to be 
-	moved and all events fired properly before the column is removed.
-
-2009-03-19  Ivan N. Zlatev  <contact at i-nz.net>
-
-	* DataGridView.cs, DataGridViewRow.cs: Split the row removal to perform Pre and 
-	Post removal action to allow the current cell to be moved and all events fired 
-	properly before the row is removed.
-
-2009-03-18  Ivan N. Zlatev  <contact at i-nz.net>
-
-	* DataGridView.cs: Fire CellEnter and CellLeave events for the Cell.
-	[Fixes bug #486640]
-
-2009-03-18  Jonathan Pobst  <monkey at jpobst.com>
-
-	* XplatUICarbon.cs: Commit patch from Alex Shulgin that fixes window
-	placement of popup windows on OSX.
-
-2009-03-18  Matt Guo  <matt at mattguo.com>
-
-	* FontDialog.cs: Override "ToString" for FontDialog.ColorComboBox.ColorComboBoxItem
-	[Fixes bug #482690]
-
-2009-03-18  Ivan N. Zlatev  <contact at i-nz.net>
-
-	* DataGridView.cs: Implement the CellMouseDoubleClick event.
-	[Fixes bug #486262]
-
-2009-03-18  Ivan N. Zlatev  <contact at i-nz.net>
-
-	* DataGridView.cs: Fix scrolling to take into account that the 
-	scrollbars are actually inside the client area of the datagridview.
-
-2009-03-18  Ivan N. Zlatev  <contact at i-nz.net>
-
-	* DataGridView.cs: Implement mouse wheel scrolling.
-	[Fixes bug #486159]
-
-2009-03-17  Ivan N. Zlatev  <contact at i-nz.net>
-
-	* DataGridView.cs: When DataSource changes the rebinding should happen 
-	not if IsHandleCreated but if BindingContext != null.
-	[Fixes bug #486013]
-
-2009-03-17  Ivan N. Zlatev  <contact at i-nz.net>
-
-	* DataGridView.cs: Browsable(false) properties should be skipped when 
-	autogenerating the columns.
-	[Fixes bug #486021]
-
-2009-03-16  Carlos Alberto Cortez <calberto.cortez at gmail.com> 
-
-	* DomainUpDown.cs: When ReadOnly is true, all the text entered by the
-	user should use a different handling, trying to use every pressed char
-	as a unique and only one prefix to compare against the items. Also,
-	refactor some input check code to avoid duplication.
-	Fixes #458607.
-
-2009-03-16  Ivan N. Zlatev  <contact at i-nz.net>
-
-	* DataGridViewCell.cs: In OwningColumng Handle invalid column index 
-	silently.
-	[Fixes bug #485278]
-
-2009-03-16  Ivan N. Zlatev  <contact at i-nz.net>
-
-	* DataGridViewBand.cs: Update our State whenever a property changes.
-	* DataGridView.cs: Don't be so generous in reseting Displayed, because 
-	it will spawn lots and lots of unneeded State changed events.
-	[Fixes bug #484989]
-
-2009-03-16  Ivan N. Zlatev  <contact at i-nz.net>
-
-	* DataGridView.cs, DataGridViewRow.cs, DataGridViewColumn.cs: 
-	Add support for invisible rows and columns.
-	[Fixes bug #484951]
-
-2009-03-16  Ivan N. Zlatev  <contact at i-nz.net>
-
-	* DataGridViewCell.cs: Escape literal { in ToString.
-	* DataGridViewTextBoxCell.cs: Fix ToString.
-	[Fixes bug #484923]
-
-2009-03-16  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* MenuAPI.cs: When navigating items using the keyboard properly handle
-	the case when no item is selected - this way we should try to select
-	the first or the last item depending on the direction, but no the
-	second or third one, etc.
-
-2209-03-15  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* Form.cs: When calling ProcessCmdKey, just after checking for any
-	MainMenu, check if there's an active ContextMenu that is *not* owned
-	by the form - this is needed when a non-focusable control owns a
-	ContextMenu but its ProcessCmdKey method can't be called since it
-	can't receive any input.
-	Fixes #477655.
-
-2009-03-13  Neville Gao  <nevillegao at gmail.com>
-
-	* ToolBar.cs: Sent ButtonClick events when button style is DropDown.
-	* ContextMenu.cs: Add UIA Framework property UIAVisible to detect if
-	ContextMenu is displayed.
-
-2009-03-12  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* XplatUIX11.cs: In GetMessage when F1 gets pressed, besides sending a
-	WM_HELP message for the associated window, don't call
-	NativeWindow.WndProc *at all*, since this could send a WM_*
-	key-related to Control.WndProc. Also, return the keypress message, in
-	case it needs to be preprocessed for any menu.
-	Fixes #478476.
-
-2009-03-08  Ivan N. Zlatev  <contact at i-nz.net>
-
-	* DataGridView.cs: When removing the first displayed row and moving 
-	the current cell up one we must invalidate the first displayed row 
-	index before calculating the row heights, etc.
-	[Fixes bug #483202]
-
-2009-03-08  Ivan N. Zlatev  <contact at i-nz.net>
-
-	* DataGridView.cs: Fix three column bugs:
-	   - Rows should be cleared (but not removed) if columns become 0.
-	   - The current cell should get moved
-	   - ColumnCount increase was adding too many columns.
-
-2009-03-07  Ivan N. Zlatev  <contact at i-nz.net>
-
-	* DataGridView.cs: Fix RowCount decrease which wasn't working well 
-	in both scenarions - with and without editing row.
-
-2009-03-06  Ivan N. Zlatev  <contact at i-nz.net>
-
-	* DataGridView.cs: Be compatible with MS in that the scroll to 
-	selection has a synchronous effect. The trick here is that in 
-	order to avoid unnecessary calculations each time a row/column 
-	is added/removed we recalculate the whole grid size just before 
-	just before the scroll to selection.
-	[Fixes bug #482478]
-
-2009-03-06  Carlos Alberto Cortez <calberto.cortez at gmail.com> 
-
-	* RichTextBox.cs: LoadFile(string path) should pass by default
-	RichTextBoxStreamType.RichText, without caring about the detection or
-	extension of the file.
-
-2009-03-06  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* RichTextBox.cs: When calling LoadFile, remove the extra EOL
-	introduced by StreamReader, since it will convert the EOF to an EOL.
-	Fixes #479646.
-
-2009-03-06  Jonathan Pobst  <monkey at jpobst.com>
-
-	* ToolStripDropDownMenu.cs: Use Math.Max instead of calculating
-	preferred size twice.
-
-2009-03-06  Jonathan Pobst  <monkey at jpobst.com>
-
-	* ToolStripMenuItem.cs: Don't draw the dropdown arrow or shortcut
-	string if we aren't on a ToolStripDropDownMenu.
-
-2009-03-06  Jonathan Pobst  <monkey at jpobst.com>
-
-	* ToolStripDropDownButton.cs, ToolStripItem.cs: Refactor some Button
-	code from Item to Button.  Patch from Alex Shulgin.
-
-2009-03-05  Jonathan Pobst  <monkey at jpobst.com>
-
-	* ToolStripDrowDown.cs: Remove some hardcoded values and assumptions.
-	* ToolStripDropDownButton.cs: This should use a ToolStripDropDownMenu,
-	not a ToolStripDropDown.
-	* ToolStripItem.cs: Don't use the item margins on a ToolStripDropDown.
-
-2009-03-04  Ivan N. Zlatev  <contact at i-nz.net>
-
-	* DataGridView.cs: Fix RowCount/ColumnCount decreasing.
-
-	  Based on a patch by Tom Hindle <tom_hindle at sil.org>
-	  [Fixes bug #482133]
-
-2009-03-04  Ivan N. Zlatev  <contact at i-nz.net>
-
-	* DataGridView.cs, DataGridViewElement.cs: 
-	   - Always calls OnDataGridViewChanged() if the new DGV is 
-	   not the same/null as the current one.
-	   - Do not throw NREs when setting TopLeftHeaderCell to null
-	   - Unset the DGV for TopLeftHeaderCell when replacing it
-	  Based on a patch by Tom Hindle <tom_hindle at sil.org>
-	  [Fixes bug #481681]
-
-2009-03-04  Jonathan Pobst  <monkey at jpobst.com>
-
-	* ToolStripDropDown.cs: When dismissing control due to ESC, don't
-	hit a NRE if we are a ContextMenuStrip and do not have a parent.
-	[Fixes bug #478616]
-
-2009-03-01  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* ListView.cs: When removing items from a ListViewItemCollection
-	contained in ListView (not in ListViewGroup), before actually removing
-	the items remove them also from their -if any- associated groups. If
-	the item is present in ListViewGroup.Items but not in ListView.Items,
-	then don't remove it - this is *exactly* what .net seems to do.
-	Fixes the remaining bits of #478689.
-
-2009-02-28  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* ListView.cs: In our MouseDown handler in ItemControl use the item in
-	the very specific *real* position where the mouse was pressed, using
-	GetItemAtDisplayIndex for that purpose, instead of directly accessing
-	Items - this is specially useful when groups with Details view is
-	used. This is what we do in other places when using groups.
-	Fixes part of #478689.
-
-2009-02-27  Carlos Alberto Cortez <calberto.cortez at gmail.com> 
-
-	* MaskedTextBox.cs: Properly replace selection when a new valid key
-	is pressed - even when IsOverwriteMode is false. This is what .net
-	does.
-
-2009-02-27  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* MaskedTextBox.cs: When setting Text and RejectOnFirstFailure is
-	true, use MaskedTextProvider.Set instead of MaskedTextProvider.Replace, 
-	since Set will keep the previous value in case of error (just what we
-	need), but still call MaskedTextProvider.Clear if
-	RejectOnFirstFailure is false - match .net.
-
-2009-02-26  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* MaskedTextBox.cs: When setting Text use the very precise algorithm
-	that .net uses: iterate over every char of the new value, trying to
-	use every char, and use a normal call to MaskedTextProvider.Replace
-	call if RejectInputOnFirstFailure is true. Fire OnMaskInputRejected 
-	in case of error in both cases, as well.
-	Fixes #477408.
-
-2009-02-25  Neville Gao  <nevillegao at gmail.com>
-
-	* ColorDialog.cs: Added UIA Framwork Property:
-	UIASelectedSmallColorControl.
-
-2009-02-25  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* MaskedTextBox.cs: Forgot to update the call of the new method
-	introduces in the previous patch.
-
-2009-02-25  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* MaskedTextBox.cs: Handle OnKeyDown to properly process the Delete
-	key. Also create a new method to avoid code duplication between
-	OnKeyDown and OnKeyPress.
-	Fixes #477388.
-
-2009-02-24  Ivan N. Zlatev  <contact at i-nz.net>
-
-	* DataGridViewCell.cs: Invalidate the datagrid when the cell is selected 
-	or deselected.
-	[Fixes bug #479124]
-
-2009-02-23  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* MaskedTextBox.cs: In OnKeyPress the IsOverwriteMode check is
-	actually inversed, so put it the right way. Also, don't automatically
-	look for the next editable item after adding a new one, but way for
-	the next insertion (this is what .net does) - this is not needed when
-	MaskedTextProvider.InsertAt is called however, since it already looks for the
-	next editable position.
-	Fixes the remaining bits of #477383.
-
-2009-02-23  Carlos Alberto Cortez <calberto.cortez at gmail.com> 
-
-	* MaskedTextBox.cs: In OnKeyPress handle backspace by calling
-	MaskedTextProvider.RemoveAt method. Also for setting the SelectionStart
-	property after the text was modified, adjust the testPosition value
-	depending on what method was called.
-	Fixes part of #477383.
-
-2009-02-23  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* ListView.cs: For EnsureVisible, adjust the view port bounds based on
-	the existence of the column headers, as well as using this information
-	to adjust the vscrollbar value, so items never get hidden by the
-	column headers.
-	Fixes #478498.
-
-2009-02-23  Ivan N. Zlatev  <contact at i-nz.net>
-
-	* DataGridView.cs: Make the ScrollBars property work properly.
-
-2009-02-22  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* TextBox.cs: Some code lifting for AutoComplete's support. First,
-	when handling non-navigation keys, save the original Text typed by the
-	user, and don't motify it BEFORE. This was a design mistake, since the
-	re-assignation happens only when navigating the append/suggest list,
-	not while creating the matches. Also, process the Delete key just like 
-	the backspace one. Finally, when handling WM_CHAR, ignore both Escape
-	and Enter keys.
-	Fixes some missing bits of #469967.
-
-2009-02-22  Ivan N. Zlatev  <contact at i-nz.net>
-
-	* DataGridView.cs: Fix row removal in the data-bound scenario.
-
-2009-02-19  Ivan N. Zlatev  <contact at i-nz.net>
-
-	* DataGridViewCell.cs: Use strict equality comparison in order to 
-	prevent superfluous CellValueChanged events.
-
-2009-02-19  Ivan N. Zlatev  <contact at i-nz.net>
-
-	* DataGridView.cs: Do not reset the columns when the data list changes, 
-	but only the rows. Fixes multiple bugs related to sorting, custom 
-	column styles being reset and more.
-
-2009-02-19  Jonathan Pobst  <monkey at jpobst.com>
-
-	* ThemeWin32Classic.cs: Respect a PictureBox's Padding when
-	drawing the image.
-
-2009-02-18  Andrés G. Aragoneses  <aaragoneses at novell.com>
-
-	* ToolBarButton.cs: Oops, use the correct event (fix r127298).
-
-2009-02-17  Andrés G. Aragoneses  <aaragoneses at novell.com>
-
-	* ToolBarButton.cs: Event for Enabled property (needed to fix
-	  UIA #474197).
-
-2009-02-16  Carlos Alberto Cortez <calberto.cortez at gmail.com> 
-
-	* TextBox.cs: When handling WndProc with autocomplete activated,
-	event if the new text is not causing any change in the look up
-	algorithm, save it as we normally do when numbers and letters.
-	Fixes #469967.
-
-2009-02-16  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* TreeNode.cs: When Text/StateImageIndex/StateImageKey/NodeFont change
-	Invalidate the proper bounds in the TreeView, not only resetting the
-	width.
-	Fixes #475542.
-
-2009-02-09  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* TreeNode.cs: Don't return TreeView.BackColor when retrieving our own
-	BackColor property. This is what .net does in both 1.1 and 2.0.
-	* TreeView.cs: When selected_node is not the same as highlighted_node,
-	we need to handle the back color in a different way, trying to use the
-	node's BackColor if it's not Color.Empty.
-	Fixes #464200.
-
-2009-02-09  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* TreeView.cs: When canceling selection in our MouseUp handler,
-	invalidate also the previous selected node bounds.
-	Fixes #464191.
-
-2009-02-07  Ivan N. Zlatev  <contact at i-nz.net>
-
-	* DataGridView.cs: End or if end fails then cancel the current edit 
-	operation before clearing the data source.
-
-2009-02-07  Ivan N. Zlatev  <contact at i-nz.net>
-
-	* DataGridView.cs: Data-bind only after the handle is created.
-	[Fixes bug #473680]
-
-2009-02-06  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* TreeView.cs: When handling the MouseMove event, check if
-	focused_node and selected_node fields are null - usually they are non
-	null, since we have always a selected node, but canceling selection by
-	handling BeforeSelect event leaves the two of them as null.
-	Fixes #470451.
-
-2009-02-06  Neville Gao  <nevillegao at gmail.com>
-
-	* TabControl.cs: Control enabled to support accessibility.
-	[Fixes Bug #472428]
-
-2009-02-05  Ivan N. Zlatev  <contact at i-nz.net>
-
-	* DataGridViewRowCollection.cs, DataGridView.cs: Fix row insertation: 
-	   - Use ArrayList.Insert instead of the Item property so that the item 
-	   is actually inserted and not an existing item replaced.
-	   - Call DataGridView.OnRowsAddedInternal and drop internal from 
-	   OnRowsAdded for binary compitability. This also fixes several 
-	   redrawing issues.
-	[Fixes bug #472968]
-
-2009-02-05  Andrés G. Aragoneses  <aaragoneses at novell.com>
-
-	* ToolBarButton.cs: Doh, fire OnUIATextChanged *after* setting
-	  the value.
-
-2009-02-04  Andrés G. Aragoneses  <aaragoneses at novell.com>
-
-	* ToolBarButton.cs: Add another event (OnUIATextChanged).
-
-2009-02-04  Andrés G. Aragoneses  <aaragoneses at novell.com>
-
-	* ToolBarButton: Fix typo in previous commit (r125704).
-
-2009-02-04  Andrés G. Aragoneses  <aaragoneses at novell.com>
-
-	* ToolBar.cs, ToolBarButton.cs: Add new UIA events to know
-	when a button gets focus, firing the events from the ToolBar.
-	r: jpobst
-
-2009-02-04  Mario Carrion  <mcarrion at novell.com>
-
-	* ColumnHeader.cs: Raising ListView.ColumnWidthChanged when setting 
-	Width.
-	* ListView.cs: Internal method added: RaiseColumnWidthChanged, used by
-	ColumnHeader to raise ColumnWidthChanged.
-	[Fixes Bug #467086]
-
-2009-02-03  Ivan N. Zlatev  <contact at i-nz.net>
-
-	* DataGridViewRowCollection.cs, DataGridView.cs: Move row completion 
-	code in the row collection code, so that the completion happens before 
-	the CollectionChanged event, also better encapsulation.
-	[Fixes bug #471987]
-
-2009-02-02  Ivan N. Zlatev  <contact at i-nz.net>
-
-	* DataGridView.cs: When editing is finished do not remove the editing 
-	row, because it has already become a real one. Instead add a new one.
-	[Fixes bug #471754]
-
-2009-02-02  Carlos Alberto Cortez <calberto.cortez at gmail.com> 
-
-	* TreeView.cs: When drawing the node's image, check that the index
-	specified by the node is valid for the ImageList.
-	Fixes #471094.
-
-2009-02-02  Andrés G. Aragoneses  <aaragoneses at novell.com>
-
-	* ToolBar.cs: Add new UIAPerformClick method to be called by
-	UIAutomationWinforms when someone calls Invoke() on the
-	ToolBarButtonProvider. r: jpobst
-
-2009-02-02  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* XplatUIX11.cs: Don't send a WM_SHOWWINDOW message when receiving
-	MapNotify/UnmapNotify events - we are already firing those events in
-	the proper places, so we avoid this way to send the same message two
-	times. I'm leaving the handling code in case we could break something
-	in the future, as this change seems dangerous (but needed).
-	Fixes #467546.
-
-2009-02-01  Ivan N. Zlatev  <contact at i-nz.net>
-
-	* DataGridView.cs: Complete incomplete rows when they are added to 
-	the grid.
-	[Fixes bug #471068]
-
-2009-02-01  Ivan N. Zlatev  <contact at i-nz.net>
-
-	* DataGridView.cs, DataGridViewColumnCollection.cs: Ensure that the 
-	binding is cleared prior to setting it to null. Fixes a regression 
-	causing exceptions when the DataSource is set to null and then set 
-	again to a data source.
-
-2009-02-01  Ivan N. Zlatev  <contact at i-nz.net>
-
-	* DataGridView.cs, DataGridViewImageColumn.cs, DataGridViewCell.cs: 
-	   - Make Image/Bitmap cells work.
-	   - Handle images with size greater than the cell.
-	   - Default to MiddleCenter alignment for image cells.
-	[Fixes bug #471101]
-
-2009-01-30  Ivan N. Zlatev  <contact at i-nz.net>
-
-	* UpDownBase.cs: Force Height to PreferredHeight.
-
-2009-01-29  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* XplatUIX11.cs: We should use utf8 handling clipboard transference
-	with other x11 applications, and use utf16 when handling clipboard
-	data in the class library. Update the related points as well.
-	Fixes #468683.
-
-2009-01-28  Ivan N. Zlatev  <contact at i-nz.net>
-
-	* DataGridViewCell.cs: Format strings according to the supplied 
-	CellStyle.Format.
-	[Fixes bug #470384]
-
-2009-01-28  Ivan N. Zlatev  <contact at i-nz.net>
-
-	* DataGridView.cs: Reset the hover cell if it gets moved due to row(s) 
-	addition or removal. Fixes multiple crashes in OnMouseMove.
-
-2009-01-27  Ivan N. Zlatev  <contact at i-nz.net>
-
-	* DataGridView.cs: Fix a NRE when setting the CurrentCell to null.
-
-2009-01-27  Ivan N. Zlatev  <contact at i-nz.net>
-
-	* XplatUIX11.cs: Fire Timer.Tick even if there is no MainForm for the 
-	current context.
-	[Fixes bug #469239]
-
-2009-01-26  Andreia Gaita  <avidigal at novell.com>
-
-	* WebBrowser.cs: fix initial value of ScrollbarsEnabled, so they
-	won't be disabled by default.
-	Fixes #468690
-
-2009-01-26  Ivan N. Zlatev  <contact at i-nz.net>
-
-	* DataGridView.cs: Do not clear the rows if we are not databound.
-
-2009-01-26  Ivan N. Zlatev  <contact at i-nz.net>
-
-	* DataGridView.cs: Do not be too smart about selecting the first cell 
-	when the first row is added as this is not what MS does. Fixes the 
-	failing unit tests.
-
-2009-01-26  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* TreeNode.cs: NextVisibleNode and PrevVisibleNode properties don't
-	take into account the fact that OpenTreeNodeEnumerator needs to call
-	MoveNext/MovePrevious to actually put the passed node as the one
-	retrieved in Current. This way this property should work as really
-	expected in .net.
-	Fixes part of #467225.
-
-2000-01-26  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* TreeView.cs: When calculating the scrollbars, don't use
-	TreeNode.Bounds, since it still can have the values of the previous
-	-and now invalid- layout -which depends on TreeView.skipped_nodes, and
-	could not have been updated as well-, and use the actual number of
-	visible number of nodes to compute the height needed to contain all
-	the nodes. Also reset the value of vbar to 0 when disabled - this way
-	we make sure that, when re-enabled, it will update the visible area of
-	the treeview, even if the previous value before disabling it is the
-	same as now. Finally don't do anything for the vbar.ValueChanged
-	handler - for the case wheer we manually set the value but don't the
-	vbar is disabled already.
-	Fixes part of #467225.
-
-2009-01-23  Jonathan Pobst  <monkey at jpobst.com>
-
-	* ToolStrip.cs: Switch from foreach to for, in case the collection
-	somehow changes while enumerating it.
-
-2009-01-23  Ivan N. Zlatev  <contact at i-nz.net>
-
-	* DataGridView.cs, DataGridViewCell.cs: Fix crashes when there is no 
-	editing control.
-
-2009-01-23  Ivan N. Zlatev  <contact at i-nz.net>
-
-	* DataGridView.cs: Fix new row adding/editing in the non-databound 
-	scenario.
-
-2009-01-21  Mike Gorse  <mgorse at novell.com>
-
-	* TrackBar.cs: Make LargeIncrement/Decrement internal so that UIA can
-	  use them.
-	  Added UIAValueParamChangedEvent.
-
-2009-01-21  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* TreeView.cs: In CollapseAll, set vbar to the maximum value, instead
-	of trying to set as top node the highest parent of the previous top
-	node. Moving to the bottom of the TreeView after a call to CollapseAll
-	is exactly what .net does. This should avoid some nasty issue when
-	CollapseAll is called and we don't need the vertical scroll bar.
-
-2009-01-21  Mario Carrion <mcarrion at novell.com>
-
-	* Form.cs: UIA Support: Internal events added: UIAWindowStateChanged
-	and UIATopMostChanged.
-
-2009-01-21  Sandy Armstrong  <sanfordarmstrong at gmail.com>
-
-	* MenuItem.cs: Add UIACheckChanged, UIARadioCheckChanged,
-	UIAEnabledChanged, and UIATextChanged events.
-
-	* Form.cs: Add UIAMenuChanged event.
-
-	* Menu.cs:
-	* MenuAPI.cs: Note which internal APIs are being used by UIA.
-
-2009-01-21  Neville Gao  <nevillegao at gmail.com>
-
-	* ToolBar.cs: Control enabled to support accessibility.
-	[Fixes Bug #455950]
-
-2009-01-19  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* TreeView.cs: When handling mouse up event, check whether
-	highlighted_node is null or not - usually it should be non-null
-	alwaays, since the mouse down handler sets it, but some externa
-	operations, such TreeNodeCollection.Clear, could set it to null.
-	Fixes #438650.
-
-2009-01-19  Ivan N. Zlatev  <contact at i-nz.net>
-
-	* ThemeWin32Classic.cs: Draw the menu item shortcut even if the menu 
-	item is disabled.
-
-2009-01-19  Ivan N. Zlatev  <contact at i-nz.net>
-
-	* MenuAPI.cs: Do not handle shortcuts if the menu item is disabled.
-	[Fixes bug #467285]
-
-2009-01-19  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* MonthCalendar.cs: When handling the selection changes using the
-	mouse, don't set SelectionRange if the selection range didn't actually
-	change. This matters because, even if we set the range to the same
-	previous range, an extra DateChanged event is fired. Just to be clear:
-	SelectionRage property doesn't check whether the new value is
-	different to the previous one (by ref equals doesn't work here).
-	Fixes other bits of #364914.
-
-2009-01-19  Carlos Alberto Cortez <calberto.cortez at gmail.com> 
-
-	* MonthCalendar.cs: Remove the extra OnDateChanged call when handling
-	selection using the keyboard, since we are already firing this event
-	when setting SelectionRange. Also don't set SelectionRange if the
-	previous and the new value are the same (the property, just as .net
-	does, doesn't check whether the previous value and the new one are the
-	same). This saves us from firing OnDateChanged event if the selection
-	range didn't change actually.
-	Fixes the remaining bits of #364914.
-
-2009-01-19  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* ListBox.cs: When removing an item and the last item is selected,
-	remove it from the selection, and if selection mode is One try to
-	select the new last item.
-	Fixes #465422.
-
-2009-01-16  Mike Gorse  <mgorse at novell.com>
-
-	* Splitter.cs: Make MaxSize internal so that UIA code can use it.
-
-2009-01-16  Mario Carrion <mcarrion at novell.com>
-
-	* ColumnHeader.cs: UIA Support: raising internal event UIATextChanged 
-	when changing Text. 
-
-2009-01-16  Carlos Alberto Cortez <calberto.cortez at ggmail.com>
-
-	* X11Structs.cs:
-	* XplatUIX11.cs: Properly encode/decode the unicode strings we
-	store/retrieve in the Clipboard. Also, since we try to convert the
-	data to different formats, separate the source and the result of
-	it, so we can always fallback to the original and don't mix wrong
-	conversions.
-
-2009-01-16  Mike Gorse  <mgorse at novell.com>
-
-	* TextControl.cs: Add UIASelectionChanged event.
-
-2009-01-16  Ivan N. Zlatev  <contact at i-nz.net>
-
-	* DataGridView.cs: Forward the first key events to the editing control.
-	[Fixes bug #457307]
-
-2009-01-14  Andrés G. Aragoneses  <aaragoneses at novell.com>
-
-	* Application.cs: Oops, launch the copied handler of PreRun instead of
-	the global one (gendarme would bark otherwise). (Improving r123375)
-
-2009-01-14  Andrés G. Aragoneses  <aaragoneses at novell.com>
-
-	* XplatUI.cs:
-	* Application.cs: Move the PreRun event fire to the end of the XplatUI
-	static ctor (we don't move the PreRun event to this class because its
-	usage would cause the call to the static ctor). This way we can get
-	a11y support for dialogs that run without App.Run.
-
-2009-01-14  Andrés G. Aragoneses  <aaragoneses at novell.com>
-
-	* ListView.cs: New internal property to know the inner array's length of
-	the location of items, in order to avoid a try-catch strategy for the
-	case when this array has not been resized yet (for reference, look at
-	r123288). r: jpobst
-
-2009-01-13  Andrés G. Aragoneses  <aaragoneses at novell.com>
-
-	* Application.cs: Simplify UIA initialization, reducing it from 4 to 1
-	reflection calls. This requires UIAutomationWinforms r123213.
-
-2009-01-12  Carlos Alberto Cortez <calberto.cortez at gmail.com> 
-
-	* MonthCalendar.cs: Detect selection changes in MouseDown/MouseMove
-	handlers and fire the DateSelected event until MouseUp is reached,
-	like .net does, instead of firing it for each mouse event.
-	Fixes part of #364914.
-
-2009-01-12  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* TreeView.cs: When the selection gets canceled using the BeforeSelect
-	event, invalidate the previous highlighted_node bounds, to show the
-	user that the item was *not* selected.
-	Fixes #464191.
-
-2009-01-11  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* ComboBox.cs: Separate some scroll logic: setting SelectedIndex, as
-	well as -in DropDown and Simple modes- writing in the textbox should
-	try to set the requested item as the top one, but navigating with the
-	keyboard and handling mouse selection don't need that behaviour. Also,
-	when resetting selected_index handling key press events, reset
-	ComboListBox.HighlightIndex. 
-	Fixes the remaining bits of #464188.
-
-2009-01-11  Ivan N. Zlatev  <contact at i-nz.net>
-
-	* DataGridView.cs: Fix crashes when shortcut keys are pressed, but 
-	there are no cells:
-	   - CurrentCellAddress should be -1, -1 and not 0, 0.
-	   - Be tolerant and fall back to clearing the current cell if either 
-	   column or row is -1 in MoveCurrentCell.
-	   - Misc. more -1 checks.
-
-2009-01-11  Ivan N. Zlatev  <contact at i-nz.net>
-
-	* DataGridView.cs: Preserve the column index. Fixes a regression 
-	introduced by the data binding position tracking code.
-
-2009-01-11  Ivan N. Zlatev  <contact at i-nz.net>
-
-	* DataGridView.cs: If the bottom of the row matches the client height 
-	do not regard the row as partially visible. Fixes the weird scrolling 
-	when there is no scrollbar.
-
-2009-01-11  Ivan N. Zlatev  <contact at i-nz.net>
-
-	* DataGridViewComboBoxCell.cs: Implement/Fix the data binding.
-
-2009-01-09  Mario Carrion  <mcarrion at novell.com>
-
-	* MessageBox.cs: Fixed internal UIAIconRectangle property.
-
-2009-01-09  Ivan N. Zlatev  <contact at i-nz.net>
-
-	* DataGridViewCheckBoxCell.cs: Respect the ReadOnly state of the Cell.
-
-2009-01-09  Ivan N. Zlatev  <contact at i-nz.net>
-
-	* DataGridView.cs: Track the Position in the CurrencyManager.
-
-2009-01-09  Ivan N. Zlatev  <contact at i-nz.net>
-
-	* DataGridView.cs: Implement data-bound new item editing/addition.
-	* DataGridViewRowCollection.cs: Make it possible for us to internally 
-	remove the edit row.
-	[Fixes bugs #457107, #457308, #325240]
-
-2009-01-09  Ivan N. Zlatev  <contact at i-nz.net>
-
-	* CurrencyManager.cs: Even if Position is set to a greater value than the 
-	list count reset it to position of the last item.
-
-2009-01-09  Ivan N. Zlatev  <contact at i-nz.net>
-
-	* BindingSource.cs: AddNew doesn't set index/add_pending for IBindingList. 
-	Fix that in order to make CancelNew to work.
-
-2009-01-09  Ivan N. Zlatev  <contact at i-nz.net>
-
-	* BindingSource.cs: When adding a new item try to delegate to the internal 
-	list first before throwing an exception.
-
-2009-01-09  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* ComboBox.cs: When setting the text and adjusting the top_item, do it
-	*only* if the current item is *not* visible already.
-	Fixes part of #464188.
-
-2009-01-09  Ivan N. Zlatev  <contact at i-nz.net>
-
-	* DataGridView.cs: Requesting the CurrencyManager for the first time can 
-	lead to unexpected OnBindingContextChanged calls and recursive rebinding. 
-	Fix that.
-	[Fixes bug #464493]
-
-2009-01-08  Brad Taylor  <brad at getcoded.net>
-
-	* ComboBox.cs: Expose a few private fields as internal UIA properties.
-
-2009-01-07  Mario Carrion <mcarrion at novell.com>
-	
-	* DataGrid.cs: CWL removed.
-
-2009-01-06  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* RadioButton.cs: When setting Checked, we should first update the
-	check state of the current RadioButton, as well as invalidating it,
-	and after that actually update the siblings. This is done to match
-	.net.
-	Fixes the remaining bits of #463028.
-
-2009-01-05  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* RadioButton.cs: Setting Checked to false should set TabStop to stop
-	as well. Also, when we get the focus and no other RadioButton is
-	selected in the parent control, we should mark ourselves as Checked.
-	Fixes part of #463028.
-
-2009-01-05  Mario Carrion <mcarrion at novell.com>
-
-	* DataGrid.cs: UIA suppport. internal events: 
-	UIAGridCellChanged, UIAColumnsHeadersVisibleChanged, 
-	UIASelectionChanged, UIACollectionChanged. Internal properties: 
-	UIARowHeight, UIACellsArea, UIACaptionArea, 
-	UIAColumnHeadersArea, UIASelectedRows, UIACurrentTableStyle, 
-	UIAVScrollBar and UIAHScrollBar.
-
-2009-01-05  Jonathan Pobst  <monkey at jpobst.com>
-
-	* ToolStripSplitStackLayout.cs: Enable the overflow button if any
-	of the buttons are set to Overflow = Always.
-	[Fixes bug #463013]
-
-2009-01-03  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* BindingNavigator.cs: Properly enable/disable the toolstrip buttons,
-	based on whether the binding source is availble or not. Fixes #463008.
-
-2009-01-03  Ivan N. Zlatev  <contact at i-nz.net>
-
-	* DataGridViewCell.cs: We should return a value even if we are not bound 
-	to a DataGridView.
-
-2009-01-02  Ivan N. Zlatev  <contact at i-nz.net>
-
-	* CurrencyManager.cs, DataGrid.cs: 
-	   - Rename CanAddRows to AllowNew. The CurrencyManager has no 
-	   concept of "rows".
-	   - Add two more internal properties AllowRemove and AllowEdit.
-	* DataGridView.cs: Refactor in a data-bound situation AllowUserToAddRows, 
-	AllowUserToDeleteRows and cell ReadOnly state to be also checked against the 
-	CurrencyManager data source.
-
-2009-01-02  Ivan N. Zlatev  <contact at i-nz.net>
-
-	* DataGridView.cs: Fix crashes caused by assigning negative values to 
-	ScrollBar.LargeIncrement when the ClientSize.Width/Height is less than 
-	the column/row heights/widths.
-	[Fixes bug #462684]
-
-2009-01-02  Ivan N. Zlatev  <contact at i-nz.net>
-
-	* DataGridView.cs: Non-autogenerated columns that have a data property 
-	set that exists in the current datasource should be set to be data-bound.
-
-2009-01-02  Ivan N. Zlatev  <contact at i-nz.net>
-
-	* DataGridView.cs: Fix column sorting for columns containing null 
-	values. A "null" value is not always "null" (e.g could be String.Empty) 
-	and thus parsing numeric types throwed an exception for "null" values.
-
-2009-01-02  Ivan N. Zlatev  <contact at i-nz.net>
-
-	* DataGridView.cs: Detach the editing control when the edit is 
-	finished.
-
-2009-01-02  Ivan N. Zlatev  <contact at i-nz.net>
-
-	* DataGridView.cs: Multiple fixes to handle last column/row removal 
-	and cell movement after that instead of throwing exceptions.
-
-2009-01-02  Ivan N. Zlatev  <contact at i-nz.net>
-
-	* DataGridViewCellCollection.cs: When cells are removed the column 
-	indices become invalid if the cell is not the last one and have to 
-	be refreshed.
-
-2009-01-01  Ivan N. Zlatev  <contact at i-nz.net>
-
-	* DataGridView.cs: Return false in CommitEdit if there was an error.
-
-2009-01-01  Ivan N. Zlatev  <contact at i-nz.net>
-
-	* DataGridView.cs: Remove a leftover Console.WriteLine.
-
-2009-01-01  Ivan N. Zlatev  <contact at i-nz.net>
-
-	* DataGridViewRow.cs: Access the indexer of the data manager directly 
-	instead of the internal list.
-
-2009-01-01  Ivan N. Zlatev  <contact at i-nz.net>
-
-	* DataGridViewCell.cs, DataGridView.cs, DataGridViewCheckBoxCell.cs: 
-	Rewrite the value getting, setting, parsing, formatting logic:
-	   - If data-bound value get/set should actually get and set from the 
-	     data source.
-	   - Make proper usage of TypeConverters for value parsing/formatting.
-	   - Raise DataError if setting the new value fails.
-	   - Get rid off the internal valueType field and get/set the ValueType 
-	   property instead.
-	[Fixes bug #462051]
-
-2009-01-01  Ivan N. Zlatev  <contact at i-nz.net>
-
-	* DataGridView.cs: Rewrite the DataBinding layer:
-	   - Get rid off all BindingSource/IBindingList/DataSet/DataTable 
-	   specific code.
-	   - Get rid off the per DataSource type column autogeneration code.
-	   - Use the CurrencyManager for everything that is DataBinding related.
-
-2009-01-01  Ivan N. Zlatev  <contact at i-nz.net>
-
-	* CurrencyManager.cs: Do not fire duplicate ListChanged events.
-
-2008-12-31  Ivan N. Zlatev  <contact at i-nz.net>
-
-	* DataGridView.cs, DataGridViewRow.cs: Add a new internal property 
-	DataManager to fetch the CurrencyManager for the DataGridView and to 
-	spare this logic for the other components to follow.
-
-2008-12-31  Mario Carrion  <mcarrion at novell.com>
-
-	* MessageBox.cs: UIA support: new properties: UIAMessage, 
-	UIAMessageRectangle and UIAIconRectangle.
-
-2008-12-31  Sandy Armstrong  <sanfordarmstrong at gmail.com>
-
-	* FileDialog.cs: Add PopupButtonPanel.PopupButton.PerformClick method
-	and DirComboBox.DirComboBoxItem.ToString override for UIA support.
-
-2008-12-31  Ivan N. Zlatev  <contact at i-nz.net>
-
-	* DataGridView.cs: Do not autogenerate duplicate column for a 
-	data member that has already problematically been assigned one.
-	[Fixes bug #457305]
-
-2008-12-30  Jonathan Pobst  <monkey at jpobst.com>
-
-	* ProfessionalColorTable.cs: Better detection of user's theme.
-	[Fixes bug #462766]
-
-2008-12-30  Ivan N. Zlatev  <contact at i-nz.net>
-
-	* DataGridView.cs: In the case where there are no autogenerated 
-	columns and the user adds columns problematically we must generate 
-	the rows after the very first column is added.
-
-2008-12-30  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* DateTimePicker.cs: When increasing/decreasing the value of month
-	with ShowUpDown set to true, moving from december to january, and
-	moving from january to december should adjust the year to the next and
-	the previous year, respectively.
-	Fixes the remaining bits of #459674.
-
-2008-12-30  Ivan N. Zlatev  <contact at i-nz.net>
-
-	* DataGridView.cs: If a new cell is selected edit mode should be 
-	immediately enabled only if EditOnEnter is set. Whether the mouse 
-	or not was used to select the cell is irrelevant.
-
-2008-12-29  Ivan N. Zlatev  <contact at i-nz.net>
-
-	* DataGridView.cs: Remove a bogus ReBind call, which was causing 
-	recursive rebinding.
-
-2008-12-24  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* DateTimePicker.cs: Handle the "MMMM" month format.
-	Fixes #459674.
-
-2008-12-23  Ivan N. Zlatev  <contact at i-nz.net>
-
-	* DataGridView.cs: 
-	   - Make ReBind private and refactor various calls to call ReBind 
-	   instead of ClearBinding/DoBinding
-	   - Rebind when the column collection changes
-	* DataGridViewColumnCollection.cs: 
-	   - Leave the rebinding on change to be handled by the DataGridView.
-
-2008-12-23  Jonathan Pobst  <monkey at jpobst.com>
-
-	* DataGridView.cs: Add a ReBind convenience method.
-	* DataGridViewColumnCollection.cs: Rebind when a column is added.
-	[Fixes bug #462019]
-
-2008-12-23  Neville Gao  <nevillegao at gmail.com>
-
-	* StatusBar.cs: Modified argument variable.
-	* SplitContainer.cs: Control enabled to support accessibility.
-	[Fixes Bug #455950]
-
-2008-12-22  Jonathan Pobst  <monkey at jpobst.com>
-
-	* ToolStripMenuItem.cs: Guard against an NRE.
-	[Fixes bug #457110]
-
-2008-12-22  Mario Carrion  <mcarrion at novell.com>
-
-	* Control.cs: AccessibleXXXX properties don't return 
-	AccessibleObject.XXXX, instead a local referece is returned.
-
-2008-12-22  Neville Gao  <nevillegao at gmail.com>
-
-	* PrintPreviewControl.cs: Added internal properties to support
-	accessibility.
-	[Fixes Bug #459699]
-
-2008-12-19  Mario Carrion  <mcarrion at novell.com>
-
-	* Control.cs: Reverted r121561. 
-
-2008-12-19  Andrés G. Aragoneses  <aaragoneses at novell.com>
-
-	* X11DesktopColors.cs: Since r121873 we don't need gtk a11y checks here,
-	it has been moved to the bridge.
-
-2008-12-18  Brad Taylor  <brad at getcoded.net>
-
-	* DateTimePicker.cs: Add a few UIA specific events, and a couple
-	internal methods useful for UIA.
-
-2008-12-18  Mario Carrion <mcarrion at novell.com>
-
-	* ListBox.cs: Fixed GetItemRectangle when MultiColumn is true.
-	[Fixes Bug #455752]
-
-2008-12-17  Mike Gorse  <mgorse at novell.com>
-
-	* ListView.cs, ListViewItem.cs: Send OnUIAFocusedItemChanged if an
-	  item's Focused property is set.
-
-2008-12-17  Sandy Armstrong  <sanfordarmstrong at gmail.com>
-
-	* TreeView.cs:
-	* TreeNode.cs:
-	* TreeNodeCollection.cs: Add events for UIA support:
-	UIACheckBoxesChanged, UIALabelEditChanged, UIANodeTextChanged, and
-	UIACollectionChanged.
-
-2008-12-17  Bill Holmes  <billholmes54 at gmail.com>
-
-	* ListViewItem.cs (ListViewSubItem.ctor): Initalizing the 
-	  SubItemStyle member field. 
-
-	Contributed under MIT/X11 license.
-
-2008-12-16  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* ListBox.cs: In MultiColumn mode don't use top_index to calculate the
-	y coord, since it's useless in this case, and we need to rely only on
-	the number of rows and ItemHeight to compute this value.
-	Fixes part of #257471.
-
-2008-12-15  Mike Gorse  <mgorse at novell.com>
-
-	* StatusBar.cs: Send OnUIACollectionChanged in Remove().
-
-2008-12-15  Mario Carrion  <mcarrion at novell.com>
-
-	* Control.cs: Accessibility properties instantiate AccessibilityObject when
-	needed.
-	[Fixes Bug #459223]
-
-2008-12-15  Brad Taylor  <brad at getcoded.net>
-
-	* ToolStripItem.cs: Add a UIA specific event for listening for when a
-	ToolStripItem becomes selected or deselected.
-
-2008-12-15  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* MonthCalendar.cs: Select the date in MouseDown, not in MouseUp, as
-	.net does. Use the date in the point of the mouse move coords as the
-	new range as well, if the left button of the mouse is being pressed.
-	Fixes #364914.
-
-2008-12-12  Carlos Alberto Cortez <calberto.cortez at gmail.com> 
-
-	* MonthCalendar.cs: When modifying either AnnuallyBoldedDates,
-	MonthlyBoldedDates or BoldedDates call UpdateBoldedDates, to
-	effectively repaint the control.
-	Fixes the remaining bits of #417961.
-
-2008-12-12  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* MonthCalendar.cs: When setting MaxDate/MinDate, adjust the selected
-	range to contain only dates within the new possible range.
-	Fixes part of #417961.
-
-2008-12-11  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* MaskedTextBox.cs: MaskedTextService.Replace doesn't expect the
-	length of the text, but the end position, so we need to substract 1 to
-	have a valid value. Also, in the same InputText method, don't use
-	SelectionLength as the length of the text, since the selected text
-	could actually be empty, but we need to set the value anyway.
-	Fixes #457370.
-
-2008-12-10  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* TextBox.cs: Don't do any auto complete task if the custom source is
-	null or empty. Also avoid duplication of code.
-	Fixes #457743.
-
-2008-12-09  Ivan N. Zlatev  <contact at i-nz.net>
-
-	* DataGridView.cs: Refresh column sizes when new rows are added.
-	[Fixes bug #457050]
-
-2008-12-09  Carlos Alberto Cortez <calberto.cortez at gmail.com> 
-	* RichTextBox.cs: When parsing the contents of a rtf file, don't call
-	Split to create a line - we are already doing this, by _adding_ a new
-	one when rtf_cursor_x is 0 (this field gets this value just after we
-	receive the newline param as true). This avoids having a proportional number
-	of empty lines in the end of the rich text box.
-	Fixes #396664.
-
-2008-12-09  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* RichTextBox.cs: When saving the contents as a plain text, don't add
-	a new line for every Line structure, since the data in Document
-	already contains the new line characters. This avoids duplicated new
-	lines using the Save methods.
-	Fixes #445618.
-
-2008-12-09  Sandy Armstrong  <sanfordarmstrong at gmail.com>
-
-	* TreeView.cs: Expose ScrollBars as internal properties, for use by UIA
-	framework.  Fixes bug #457678.
-
-2008-12-08  Ivan N. Zlatev  <contact at i-nz.net>
-
-	* DataGridViewRow.cs: Prevent an exception on a not yet databound grid, 
-	where datasource is null.
-	[Fixes exception reported in bug 441240]
-
-2008-12-08  Ivan N. Zlatev  <contact at i-nz.net>
-
-	* DataGridView.cs: EndEdit validation fixes.
-
-2008-12-08  Ivan N. Zlatev  <contact at i-nz.net>
-
-	* DataGridView.cs: This is the cool patch that adds support for 
-	actually updating the data in the databinding backend after editing. 
-	With bonus firing and handling the DataError event.
-
-2008-12-08  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* Line.cs: When calculating the text tags's Shift value, store it as
-	pixels instead of points. This way we can actually handle different
-	fonts in the same RichTextBox, as well as the right size of the caret.
-	Fixes part of #351938.
-
-2008-12-08  Ivan N. Zlatev  <contact at i-nz.net>
-
-	* DataGridViewCheckBoxCell.cs: Fix to make it work. Wrong value was 
-	casted to CheckState causing InvalidCastExceptions.
-
-2008-12-08  Ivan N. Zlatev  <contact at i-nz.net>
-
-	* DataGridView.cs: Fix the DataGridViewEditMode.EditOnEnter behavior 
-	to not depend on the item being clicked.
-
-2008-12-08  Ivan N. Zlatev  <contact at i-nz.net>
-
-	* DataGridView.cs: Implement NotifyCurrentCellDirty, so that it no 
-	longer throws a NotImplementedException.
-
-2008-12-08  Ivan N. Zlatev  <contact at i-nz.net>
-
-	* DataGridView.cs: Set EditingControlFormattedValue when preparing an 
-	IDataGridViewEditingControl for editing.
-
-2008-12-08  Ivan N. Zlatev  <contact at i-nz.net>
-
-	* DataGridViewComboBoxCell.cs: Implement data binding support.
-
-2008-12-08  Ivan N. Zlatev  <contact at i-nz.net>
-
-	* DataGridView.cs: Use the CurrencyManager to update the data source 
-	binding position instead of casting the data sourcde to BindingSource.
-	This enables position updating for other type of data sources.
-
-2008-12-08  Ivan N. Zlatev  <contact at i-nz.net>
-
-	* ComboBox.cs: Update the SelectedIndex before updating the Text 
-	in OnDisplayMemberChanged.
-
-2008-12-07  Ivan N. Zlatev  <contact at i-nz.net>
-
-	* DataGridView.cs: Fix our support for IDataGridViewEditingControl.
-	[Fixes bug #457112]
-
-2008-12-06  Ivan N. Zlatev  <contact at i-nz.net>
-
-	* DataGridView.cs: Sorting fixes:
-	   - Be strict when sorting is enabled.
-	   - If there is a data source delegate the sorting request.
-
-2008-12-06  Ivan N. Zlatev  <contact at i-nz.net>
-
-	* Binding.cs: When converting the data also try with the destination 
-	type typeconverter. This indirectly adds support for Nullable types 
-	in our databinding layer.
-
-2008-12-06  Ivan N. Zlatev  <contact at i-nz.net>
-
-	* DataGridView.cs: When cell editing is finished focus back the 
-	DataGridView. Fixes keyboard navigation post-editing.
-
-2008-12-06  Ivan N. Zlatev  <contact at i-nz.net>
-
-	* DataGridView.cs: Fix the cell editing by delaying the currentCell 
-	setting to after EndEdit is called for the old cell.
-
-2008-12-06  Ivan N. Zlatev  <contact at i-nz.net>
-
-	* BindingSource.cs: Reset the bindings. Fixes a NotWorking test.
-
-2008-12-06  Ivan N. Zlatev  <contact at i-nz.net>
-
-	* XplatUIX11.cs: Send WM_HELP only to the focused window.
-
-2008-12-05  Ivan N. Zlatev  <contact at i-nz.net>
-
-	* CurrencyManager.cs: Fix exceptions when resetting the data source 
-	for the same time (e.g. in ComboBox): 
-	   - Do not set the list position if we are still transferring data
-	   - When resetting the list firstly push the data then update the 
-	   binding.
-	* Binding.cs: Check BindingManager.Position == -1 instead of 
-	BindingManager.Current == null in order to avoid unexpected 
-	exceptions.
-
-2008-12-05  Brad Taylor  <brad at getcoded.net>
-
-	* MonthCalendar.cs: Add UIA specific events so that we can know when
-	the selection changes, and when MaxSelectedCount changes.
-
-2008-12-05  Ivan N. Zlatev  <contact at i-nz.net>
-
-	* DataGridView.cs: Cleanup rows_displayed out of OnPaint. It's not 
-	used for anything.
-
-2008-12-05  Ivan N. Zlatev  <contact at i-nz.net>
-
-	* DataGridView.cs: Fix scrolling and selection of cells/rows prior
-	to the control being drawn for the first time by:
-	   - Implement DisplayedRowsCount to not rely on the control being
-	   already painted. Also added support for the partial row flag.
-	   - Fix scrolling to take into account partial rows and scroll to
-	   them.
-	[Fixes bug #456527]
-
-2008-12-05  Ivan N. Zlatev  <contact at i-nz.net>
-
-	* DataGridView.cs: Do not reset the CurrentCell when the handle is
-	created if the user has already set it.
-
-2008-12-05  Ivan N. Zlatev  <contact at i-nz.net>
-
-	* DataGridView.cs: Fix CurrentCell to actually select the cell.
-
-2008-12-01  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* XplatUIX11.cs: Add support to RichTextFormat by reading it as ascii
-	text and then let the underneath users of IDataObject interpret and
-	parse by themselves. 
-	Fixes #439251.
-
-2008-12-01  Ivan N. Zlatev  <contact at i-nz.net>
-
-	* DataGridView.cs: Fix my previous commit to actually update what it 
-	was supposed to.
-
-2008-12-01  Ivan N. Zlatev  <contact at i-nz.net>
-
-	* DataGridView.cs: Ensure that when a row is removed the all the 
-	current row/column/cell get updated. Fixes multiple exceptions.
-
-2008-12-01  Ivan N. Zlatev  <contact at i-nz.net>
-
-	* DataGridView.cs: Fix scrolling to the current cell when key navigation 
-	is used.
-	[Fixes bug #443560]
-
-2008-12-01  Ivan N. Zlatev  <contact at i-nz.net>
-
-	* DataGridView.cs, DataGridViewCell.cs: Fire CellStateChanged events.
-	* DataGridViewCell.cs: Set the cell as selected prior to setting the 
-	new state.
-	[Fixes issue 1 in bug #443560]
-
-2008-12-01  Ivan N. Zlatev  <contact at i-nz.net>
-
-	* DataGridView.cs: Invalidate after the current row/column seletion 
-	chagnes.
-	[Fixes bug #438434]
-
-2008-12-01  Ivan N. Zlatev  <contact at i-nz.net>
-
-	* DataGridView.cs: Refresh the data if the data list is reset, etc.
-
-2008-12-01  Ivan N. Zlatev  <contact at i-nz.net>
-
-	* DataGridView.cs: Handle datasource state changes:
-	   - IBindingList - list changes
-	   - BindingSource - list changed and datasource changes
-
-2008-11-30  Ivan N. Zlatev  <contact at i-nz.net>
-
-	* DataGridView.cs: Select the first cell when databound. 
-	Visually select when CurrentCell is set.
-
-2008-11-30  Ivan N. Zlatev  <contact at i-nz.net>
-
-	* DataGridView.cs: Set the current cell before raising CellClick.
-
-2008-11-30  Ivan N. Zlatev  <contact at i-nz.net>
-
-	* DataGridView.cs: Cleanup MoveCurrentCell to not fire any CellEnter, 
-	CellLeave events as this is already done in SetCurrentCellAddressCore.
-
-2008-11-30  Ivan N. Zlatev  <contact at i-nz.net>
-
-	* DataGridView.cs: Set the minimum size for the columns to be the 
-	width of their header, so that the columns don't get squashed 
-	all together.
-
-2008-11-30  Ivan N. Zlatev  <contact at i-nz.net>
-
-	* DataGridView.cs: After the data is bound PerformLayout, so that 
-	the columns get autosized.
-
-2008-11-30  Ivan N. Zlatev  <contact at i-nz.net>
-
-	* DataGridView.cs: Move all currentCell setting code into 
-	one central place - SetCurrentCellAddressCore. That way the 
-	current cell is properly updated when programatically set.
-	Fire RowEnter/Leave events.
-
-2008-11-30  Ivan N. Zlatev  <contact at i-nz.net>
-
-	* DataGridView.cs: Update the CurrencyManager.Position, so that 
-	when a BindingSource is used BindingSource.Current will be correct.
-
-2008-11-30  Ivan N. Zlatev  <contact at i-nz.net>
-
-	* GroupBoxRenderer.cs: Fix when VisualStyles disabled:
-	   - No caption text is drawn because Color.Empty is used.
-	   - Fix top and height off by 1.
-
-2008-11-30  Ivan N. Zlatev  <contact at i-nz.net>
-
-	* DataGridViewRow.cs: Implement DataBoundItem.
-
-2008-11-30  Ivan N. Zlatev  <contact at i-nz.net>
-
-	* BindingSource.cs: Return null for Current if there is no data present.
-
-2008-11-29  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* MenuAPI.cs: Add a Menu.SelectedItem null check when navigating the
-	menus using the arrow keys. Also when handling the left arrow key, don't 
-	assign the current menu to the parent one, if the parent is null.
-	Fixes #446392.
-
-2008-11-24  Everaldo Canuto  <ecanuto at novell.com>
-
-	* PrintPreviewDialog.cs: Fix toolbar size, height must be 26. Fixes bug
-	#413501.
-
-2008-11-24  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* Scrollbar.cs:
-	* ScrollableControl.cs: Simplify the code to manually set the size of
-	the thum area, avoiding duplication of code, and also preserving the
-	right value for different code paths - this can happen when size
-	changes are made to the scrollbar after setting LargeChange, Maximum
-	or related properties for the ScrollBar.
-
-2008-11-24  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* ScrollableControl.cs: When scrolling, don't invalidate the entire
-	area, and call to XplatUIX11.ScrollWindow instead. This is exactly
-	what .Net does: copy the visible area, and only invalidate the part of
-	the area that wasn't visible before scrolling.
-	Fixes #441738.
-
-2008-11-24  Jonathan Pobst  <monkey at jpobst.com>
-
-	* DataGridView.cs: Listen for a DataTable's TableCleared event so we
-	can clear ourselves when it is raised, we don't have a newrowindex
-	if we don't have any columns.
-	* DataGridViewRowCollection.cs: Ensure we always delete all the rows,
-	re-index after each delete so the NewRow will have the correct index.
-	[Fixes bug #448005]
-
-2008-11-24  Jonathan Pobst  <monkey at jpobst.com>
-
-	* Form.cs: Don't change min/max size if it is empty.
-	[Fixes bug #447873]
-
-2008-11-23  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* ScrollBar.cs:
-	* ScrollableControl.cs: When the manual thumb size is used, the
-	maximum allowed value should depend on that thumb size, instead of
-	LargeChange (using the maximum - LargeChange + 1 value). But
-	LargeChange should be used normally when incrementing/decrementing.
-	Fixes the remaining part of #441546.
-
-2008-11-23  Andreia Gaita  <avidigal at novell.com>
-
-	* WebBrowser.cs, WebBrowserBase.cs: Delay loading of DocumentStream 
-	until an about:blank has been loaded (according to spec). Fix 
-	ScrollbarsEnabled to set when a document is loaded (since we use js 
-	for it). Fix url so it reflects the current loading document and not 
-	the previous one. Send StatusChanged events.
-
-2008-11-23  Andreia Gaita  <avidigal at novell.com>
-
-	* Application.cs: If a message comes in for an embedded control
-	(like webbrowser) when we're capturing the keyboard, release the
-	capture and continue.
-	[fixes #429462]
-
-2008-11-22  Andreia Gaita  <avidigal at novell.com>
-
-	* XplatUI.cs: Only use PlatformID.MacOSX enum when not building on VS
-
-2008-11-21  Andreia Gaita  <avidigal at novell.com>
-
-	* WebBrowser.cs, HtmlDocument.cs: Fixes for #428172
-	
-2008-11-21  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* ScrollBar.cs:
-	* ScrollableControl.cs: Set manually the thumb size for the
-	ScrollableControl scrollbars, so any further changes to the underneath
-	scrollbars respect the original size.
-	Fixes part of #441546.
-
-2008-11-21  Geoff Norton  <gnorton at novell.com>
-
-	* XplatUI.cs: Ensure that we can run on .net 2.0 with mono 2.2 where
-	PlatformID.MacOSX now exists.
-
-2008-11-20  Jonathan Pobst  <monkey at jpobst.com>
-
-	* TextBoxBase.cs: Provide a default implementation for ChangeBackColor.
-	Having something internal abstract isn't very nice for people who want
-	to inherit from this class.
-
-2008-11-20  Jonathan Pobst  <monkey at jpobst.com>
-
-	* ToolStripItem.cs: Don't crash if ImageIndex or ImageKey is set to an
-	invalid value.  Just return null for the Image, and use the ImageList's
-	ImageSize for calculations.
-
-2008-11-20  Jonathan Pobst  <monkey at jpobst.com>
-
-	* ComboBox.cs: Call HideWindow instead of Hide when closing the dropdown
-	through DroppedDown so the proper events get called and state gets reset.
-	[Fixes bug #446805]
-
-2008-11-18  Jonathan Pobst  <monkey at jpobst.com>
-
-	* DataGridViewColumnCollection.cs: Make sure we re-index the columns after
-	the collection is modified.
-
-2008-11-17  Jonathan Pobst  <monkey at jpobst.com>
-
-	* DomainUpDown.cs: Remove string cache and reflection optimizations.  They
-	aren't always correct, and fixing them for every case is not worth the
-	negligible benefit they provide.
-	[Fixes bug #445713]
-
-2008-11-17  Jonathan Pobst  <monkey at jpobst.com>
-
-	* DataGridView.cs: We should never add actual cells to the RowTemplate.
-	Internally, use RowTemplateFull to give us a new row with cells.
-	* DataGridViewColumnCollection.cs: Clear Rows when we clear Columns.
-	* DataGridViewRowCollection.cs: Use RowTemplateFull.
-
-2008-11-17  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* XplatUIX11.cs: Forms without borders should be able to change its
-	size - specially they should be able to be maximized, adding the
-	respective MotifFunctions.Resize bit when setting window properties as
-	well as *not* marking the Hwnd as size fixed.
-	Fixes #444347.
-
-2008-11-12  Jonathan Pobst  <monkey at jpobst.com>
-
-	* DataGridViewCellStyle.cs: Allow SelectionBackColor to have
-	an alpha value.
-	[Fixes bug #444348]
-
-2008-11-11  Andrés G. Aragoneses  <aaragoneses at novell.com>
-
-       * Application.cs: After UIA assembly is successfully loaded,
-       dump any exception that happens on initialization to stderr.
-
-2008-11-11  Jonathan Pobst  <monkey at jpobst.com>
-
-	* DataGridView.cs: Add internal to OnAutoSizeColumnModeChanged.
-	* DataGridViewColumn.cs: Recalculate columns when AutoSizeMode changes.  Raise
-	AutoSizeColumnModeChanged.
-	[Fixes bug #443609]
-
-2008-11-11  Jonathan Pobst  <monkey at jpobst.com>
-
-	* DataGridViewRowCollection.cs: Guard against the user deleting the
-	NewRow.  Add an internal delete so we can still delete it.
-	* DataGridView.cs: Use the new internal delete when deleting the NewRow.
-	[Fixes bug #442181]
-
-2008-11-10  Jonathan Pobst  <monkey at jpobst.com>
-
-	* TextControl.cs: Add some order of operation to our math so
-	we don't end up with a negative height for our invalidate rect.
-	[Fixes bug #381889]
-
-2008-11-10  Jonathan Pobst  <monkey at jpobst.com>
-
-	* Control.cs: When our enabled changes, notify our implicit children
-	controls as well as our regular controls.
-	[Fixes bug #441523]
-
-2008-11-08  Andreia Gaita <shana at jitted.com> 
-
-	* HtmlElement.cs: Small code cleanup
-
-2008-11-06  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* BindingNavigator.cs: MoveFirstItem should be enabled only if
-	position is larger than 0, not only different than 0. Also Position
-	and Count items should be enabled if the BindingSource is non null and
-	non empty.
-	Fixes #439961.
-
-2008-11-05  Jonathan Pobst  <monkey at jpobst.com>
-
-	* TabControl.cs: Don't raise SelectedIndexChanged until we have
-	actually modified the tab collection, so TabCount will be correct.
-	[Fixes bug #441896]
-
-2008-11-05  Sandy Armstrong  <sanfordarmstrong at gmail.com>
-
-	* ListViewItem.cs: Mark ListViewSubItem.UIATextChanged event as
-	NonSerialized to fix serialization of ListViewItem.
-
-2008-11-04  Mike Gorse  <mgorse at novell.com>
-
-	* ListView.cs: Call OnUIAFocusedItemChanged after completing the
-	  focus change, and always call in SetFocusedItem.
-	* ListBox.cs: Add UIAFocusedItemChanged as in ListView.
-
-2008-11-04  Jonathan Pobst  <monkey at jpobst.com>
-
-	* ComboBox.cs: Only call OnDrawItem when we are using an OwnerDraw
-	mode.  Based on a patch by John Mortlock.
-	[Fixes bug #436790]
-
-2008-11-04  Carlos Alberto Cortez <calberto.cortez at gmail.com> 
-
-	* ListView.cs: Use the UsingGroups property where needed, instead of
-	duplicating the check in other places.
-
-2008-11-04  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* ListView.cs: When calculating layout, refresh the count of items
-	belonging to the default item, insteas of doing it only one time. This
-	was already working fine for icon views, not not for details.
-	Fixes #438948.
-
-2008-11-03  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* ListView.cs:
-	* ListViewItem.cs:
-	* ThemeWin32Classic.cs: Don't render Tile view if there wasn't a call
-	to Applicatin.EnableVisualStyles, and use LargeIcon view, as .net
-	does.
-	Fixes #437933.
-
-2008-11-03  Sandy Armstrong  <sanfordarmstrong at gmail.com>
-
-	* ListView.cs: Wrap call to OnUIAFocusedItemChanged with #if NET_2_0.
-
-2008-11-03  Sandy Armstrong  <sanfordarmstrong at gmail.com>
-
-	* ListView.cs: Add internal UIAFocusedItemChanged event.  Fixes bug
-	#441280, patch by Mike Gorse <mgorse at novell.com>.
-
-2008-11-03  Jonathan Pobst  <monkey at jpobst.com>
-
-	* TreeView.cs: When doing ExpandAll, don't scroll to the bottom
-	if there is no scrollbar.
-	[Fixes bug #440885]
-
-2008-11-03  Jonathan Pobst  <monkey at jpobst.com>
-
-	* ProgressBar.cs, ThemeWin32Classic.cs, ThemeVisualStyles.cs: Commit
-	patch from Andy Hume that fixes many issues with ProgressBar.
-	[See bug #440220]
-
-2008-11-03  Jonathan Pobst  <monkey at jpobst.com>
-
-	* Form.cs: Don't allow MinimumSize and MaximumSize to conflict.
-	[Fixes bug #438866]
-
-2008-11-03  Sandy Armstrong  <sanfordarmstrong at gmail.com>
-
-	* UpDownBase.cs:
-	* DomainUpDown.cs:
-	* NumericUpDown.cs: Internal events added to UpDownBase:
-	UIAUpButtonClick and UIADownButtonClick.  Patch by Neville Gao
-	<ngao at novell.com>.
-
-2008-11-03  Sandy Armstrong  <sanfordarmstrong at gmail.com>
-
-	* ToolStripLabel.cs: Internal event added: UIAIsLinkChanged.
-
-2008-11-02  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* ListView.cs:
-	* ThemeWin32Classic.cs: Don't use groups nor insertion mark in
-	Application.EnableVisualStyles hasn't been called.
-	Fixes part of #437933.
-
-2008-10-31  Andreia Gaita  <shana at jitted.com>
-
-	* Form.cs (SetVisibleCore): since set_ActiveControl no longer calls focus
-	  if the container is not focused already, we need to specifically set
-	  focus to the first available control, or to the form itself if there
-	  are no controls.
-
-2008-10-31  Andreia Gaita  <shana at jitted.com>
-
-	activate message fix: a call to .Show now waits until both WM_SHOWWINDOW and
-	WM_ACTIVATE have been processed before returning, so it is guaranteed that
-	once it returns and the form is visible, it is actually on the screen on X11
-
-	* ContainerControl.cs: Only send focus to the control if the top container
-	  is already focused. This is so that, when a form is first shown, all
-	  the enter/leave events are done first before any focus stuff comes in.
-	  If a control has no top container, there's an extra check on Control.Focus
-	  to make sure it gets focused in this particular case.
-
-	* Control.cs: Force focus if the control is active but did not receive
-	  focus after being set as active.
-
-	* MdiClient.cs: Dispose the form when closing
-
-	* XplatUIX11.cs: When mapping and unmapping windows, make sure the call
-	  doesn't return until both WM_SHOWWINDOW and WM_ACTIVATE have come in
-	  if the window is a top Form.
-	  Reset all hwnd properties when the window has been destroyed so that
-	  we don't land in any codepaths that might try to do something with it.
-	  Added a bunch of debugging messages. If TRACE is defined, all X calls
-	  are logged through DebugHelper. Set a few missing EntryPoint attributes.
-
-2008-10-29  Mario Carrion <mcarrion at novell.com>
-
-	* ListViewItem.cs: Control enabled to support Accessibility:
-	- Internal events: UIATextChanged, UIASubItemTextChanged.
-	- Internal event UIATextChanged in ListViewSubItem that triggers
-	UIASubItemTextChanged.
-	* ListView.cs: Control enabled to support Accessibility:
-	- Internal events: UIACheckBoxesChanged, UIAMultiSelectChanged, 
-	UIAShowGroupsChanged, UIAViewChanged and UIALabelEditChanged.
-	- Internal event UIACollectionChanged in ColumnHeaderCollection.
-	- Internal event UIACollectionChanged in ListViewItemCollection.
-	- Internal properties: UIAHeaderControl, UIAColumns, UIARows, 
-	UIADefaultListViewGroup, UIAHScrollBar and UIAVScrollBar.
-	- Internal methods: UIAGetHeaderBounds.
-
-2008-10-25  Carlos Alberto Cortez <calberto.cortez at gmail.com> 
-
-	* ScrollableControl.cs: Actually fire the 2.0 Scroll event when we get
-	the event from the respective scrollbars.
-	Fixes #436709.
-
-2008-10-24  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* ComboBox.cs: Use the new CanNavigateAutoCompleteList property of the
-	textbox to know whether any navigation key will be handled or not. If
-	not, don't pass the message to the textbox, and use it here instead. 
-	* TextBox.cs: Define a new CanNavigateAutoCompleteList property -which
-	is more precise- than the previous AutoCompleteMatches one.
-	This should the keyboard navigation in ComboBox when using auto
-	complete modes.
-
-2008-10-24  Jonathan Pobst  <monkey at jpobst.com>
-
-	* ComboBox.cs: Fix item height calculation based off Font to match .Net.
-	[Fixes bug #436730]
-
-2008-10-24  Jonathan Pobst  <monkey at jpobst.com>
-
-	* ToolStripDropDownItem.cs: Call OnClick instead of base.OnClick so
-	overridden methods will get called.
-	* ToolStripItem.cs: Raise Click before MouseUp.
-	* ToolStripSplitButton.cs: Fix up some bounding rectangles to take
-	the item's location into account.
-	[Fixes bug #437683]
-
-2008-10-24  Neville Gao  <nevillegao at gmail.com>
-
-	* NumericUpDown.cs: Control enabled to support accessibility.
-	[Fiexes bug #438135]
-
-2008-10-23  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* TextBox.cs: Check that we actually have items no navigate, select
-	text when pressing enter, as well as handle direction keys only if
-	mode is different to Suggest or the suggest listbox is visible.
-
-2008-10-23  Andreia Gaita  <shana at jitted.com>
-
-	* WebBrowser.cs: Use the new ContentStream property to retrieve
-	  a stream encoded from the document content
-
-2008-10-23  Andreia Gaita  <shana at jitted.com>
-
-	* HtmlDocument.cs,
-	  HtmlElement.cs,
-	  HtmlWindow.cs: Fix GetHashcode for null objects
-
-2008-10-22  Andreia Gaita  <shana at jitted.com>
-
-	* HtmlDocument.cs,
-	  HtmlElement.cs,
-	  HtmlWindow.cs: Fix equality operators (fixes #428173)
-
-2008-10-21  Jonathan Pobst  <monkey at jpobst.com>
-
-	* XplatUIWin32.cs: Apply patch from John Mortlock that ensures
-	mouse_state gets set during WM_MOUSEMOVE and WM_NCMOUSEMOVE.
-	[Fixes bug #436772]
-
-2008-10-21  Jonathan Pobst  <monkey at jpobst.com>
-
-	* ComboBox.cs: Fire SelectedIndexChanged when the user selects the
-	same item with the mouse as was already selected.
-	[Fixes bug #436789]
-
-2008-10-21  Brad Taylor  <brad at getcoded.net>
-	
-	* TextControl.cs: Break out code to get the visible range into
-	  GetVisibleLineIndexes to be used in UIA code.
-	
-	* Line.cs:
-	* TextControl.cs:
-	* TextBoxBase.cs: Add comments indicating that the method or property
-	  is used via reflection from UIA code.
-
-2008-10-20  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* ListViewItem.cs: Match .net serialization.
-	Fixes remaining part of #417520.
-
-2008-10-20  Jonathan Pobst  <monkey at jpobst.com>
-
-	* ToolStripProfessionalRenderer.cs: Don't paint over a set BackgroundImage.
-
-2008-10-20  Mario Carrion <mcarrion at novell.com>
-
-	* ErrorProvider.cs, ToolTip.cs, HelpProvider.cs: UIA internal property 
-	added: UIAToolTipRectangle.
-
-2008-10-19  Carlos Alberto Cortez <calberto.cortez at gmail.com> 
-
-	* ListViewItem.cs: When deserializing enumerate over the data, instead
-	of accessing the data directly. This way we handle much better the
-	cases were we lack information.
-	Fixes #417520.
-
-2008-10-19  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* ListView.cs: When removing an item from a main ListView.Items
-	collection (and not a ListViewGroupCollection.Items one), remove it
-	also from the group, as .net does. Patch by Mario Carrion (mario at
-	novell dot com).
-	Fixes #436653.
-
-2008-10-19  Andreia Gaita  <avidigal at novell.com>
-
-	* Form.cs: Forms that get closed without a handle being created are
-	disposed in 2.0. Fixes failing FormTest.FormClose and
-	FormTest.FormClose2 on windows.
-
-2008-10-18  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* ListView.cs: If both scrollbars are visible, the vertical one
-	shouldn't extend too far down.
-	Fixes #435771.
-
-2008-10-17  Jonathan Pobst  <monkey at jpobst.com>
-
-	* DataGridView.cs: Add the ability to resize columns and rows with
-	the mouse.  Also support double-clicking to autoresize.
-	* DataGridViewColumn.cs: Invalidate the grid if a column's width changes.
-	* DataGridViewRow.cs: Invalidate the grid if a row's height changes.
-	* DataGridViewTextBoxCell.cs: Add 1 to preferred width so ellipsis
-	isn't shown on autoresize.
-	[Fixes bug #420193]
-
-2008-10-17  Mario Carrion <mcarrion at novell.com>
-
-	* ComboBox.cs: Remove UIAListbox.
-
-2008-10-17  Mario Carrion <mcarrion at novell.com>
-
-	* ComboBox.cs, ListBox.cs: Using added/removed item in 
-	  OnUIACollectionChangedEvent instead of index.
-
-2008-10-17  Jonathan Pobst  <monkey at jpobst.com>
-
-	* ComboBox.cs: When we are sorting the items, if the item's type
-	doesn't support IComparer, use a default one that compares based
-	off the item's visible text.
-	[Fixes bug #436328]
-
-2008-10-17  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* ColumnHeader.cs: Invalidate ListView.header_control when setting
-	ImageIndex/ImageKey.
-	* ThemeWin32Classic.cs: When drawing the column header, draw a image
-	for the column if available, and make the required adjustments to the
-	text location.
-	Fixes #435105.
-
-2008-10-17  Neville Gao  <nevillegao at gmail.com>
-
-	* StatusBarPanel.cs: Control enabled to support accessibility.
-	[Fixes bug #435988]
-
-2008-10-16  Jonathan Pobst  <monkey at jpobst.com>
-
-	* DataGridView.cs: When a user begins an edit in the 'new row',
-	make that a real row, and add a new 'new row'.  If the user
-	cancels the edit, remove the new 'new row' and reset everything.
-	Also, ensure UserAddedRow and UserRemovedRow events are raised.
-	[Fixes bug #430954]
-
-2008-10-16  Ivan N. Zlatev  <contact at i-nz.net>
-
-	* TableLayoutSettings.cs: Fix NREs when deserializing and 
-	panel is not yet set.
-	[Fixes bug #436199]
-
-2008-10-16  Jonathan Pobst  <monkey at jpobst.com>
-
-	* DataGridView.cs: Invalidate after deleting a row.
-
-2008-10-16  Jonathan Pobst  <monkey at jpobst.com>
-
-	* DataGridView.cs: Handle Enter and Escape keys.
-	  - Move call to EndEdit to MoveCurrentCell.
-	  - Remove call to EndEdit from navigation key routines.
-	  - Fire CellLeave and CellEnter.
-
-2008-10-16  Jonathan Pobst  <monkey at jpobst.com>
-
-	* DataGridViewCell.cs: Some fixes to the new cell border
-	painting code.
-
-2008-10-16  Jonathan Pobst  <monkey at jpobst.com>
-
-	* ThemeEngine.cs: Enable visualstyles rendering by default
-	(on platforms that support it).
-
-2008-10-15  Ivan N. Zlatev  <contact at i-nz.net>
-
-	* XplatUIX11.cs, XplatUICarbon.cs: Do not Timer.Tick before 
-	MainForm.OnLoad has completed unless DoEvents is forced.
-	[Fixes bug #412536]
-
-2008-10-15  Jonathan Pobst  <monkey at jpobst.com>
-
-	* ToolTip.cs: Ensure that Timer.Internal cannot be set to 0.
-
-2008-10-15  Jonathan Pobst  <monkey at jpobst.com>
-
-	* Control.cs: Make our implementation of DrawToBitmap better 
-	match WmPaint.  [Fixes bug #435579]
-
-2008-10-14  Andreia Gaita  <avidigal at novell.com>
-
-	* WebBrowser.cs: Use DocumentElement as the document's root for the
-	whole content. Should fix DocumentText and DocumentStream problems.
-
-2008-10-14  Jonathan Pobst  <monkey at jpobst.com>
-
-	* DataGridViewColumnCollection.cs: Remove calls to OnColumnAddedInternal,
-	these will get called in DGV.OnCollectionChanged.  Make sure 
-	OnCollectionChanged always gets called.
-	* DataGridView.cs: Make a OnColumnRemovedInternal that removes the cells
-	from every row.  Call this in OnCollectionChanged.
-	[Fixes bug #433669]
-
-2008-10-13  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* ComboBox.cs: WM_KEYDOWN and WM_KEYUP messages should be sent to the
-	textbox if auto complete is used, since we need to navigate over it.
-	And in this case don't pass this messages to the base impl. Also hide
-	the auto complete list box when displaying the drop down listbox.
-	* TextBox.cs: new internal members to expose some of the auto complete
-	functionality to combobox.
-
-2008-10-13  Ivan N. Zlatev  <contact at i-nz.net>
-
-	* XplatUIX11.cs, XplatUICarbon.cs, Form.cs: Do not Timer.Tick before 
-	MainForm.OnLoad has completed.
-	[Fixes bug #412536]
-
-2008-10-13  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* TextBox.cs: Apply an old-approved patch that adds autocomplete's
-	Append support to this controls. We need it to apply new patches.
-
-2008-10-12  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* Control.cs: When updating z order in child controls, send to back
-	the implicit controls. Also, do it explicitly, instead of making
-	GetAllControls return the implicit controls in a specific order, and
-	thus avoid depending on that, which could change in the future.
-	Fixes #434304.
-
-2008-10-11  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* X11Dnd.cs: Try to call Application.DoEvents before returning in a
-	call to StartDrag, since we must fire DragDrop/DragLeave *before*
-	that, as .net does - instead of firing DragDrop/DragLeave *after* the
-	call to Control.DoDragDrop has completed. This is needed since at the
-	point of returning, we have sent related dnd ClientMessages, but we
-	need to wait for them to fire the wmf respective ones.
-	Fixes #325076.
-
-2008-10-09  Everaldo Canuto  <ecanuto at novell.com>
-
-	* LinkLabel.cs: Recreate link pieces when change Padding.
-
-2008-10-09  Everaldo Canuto  <ecanuto at novell.com>
-
-	* LinkLabel.cs: Take Padding into account when recreate link pieces.
-	[Fixes bug #412530]
-
-2008-10-08  Everaldo Canuto  <ecanuto at novell.com>
-
-	* Control.cs: Implement internal property PaddingClientRectangle, it will be
-	useful for drawing controls that must take care about Padding property.
-
-2008-10-08  Jonathan Pobst  <monkey at jpobst.com>
-
-	* BindingSource.cs: Make item_type internal so we can access it in DGV.
-	* DataGridView.cs: Add support for autogenerating columns from a
-	BindingSource.
-
-2008-10-07  Jonathan Pobst  <monkey at jpobst.com>
-
-	* DataGridView.cs: Comment out an exception that is getting thrown
-	too often currently.
-
-2008-10-07  Jonathan Pobst  <monkey at jpobst.com>
-
-	* DataGridView.cs: Always rebind to the datasource, as things may
-	have changed in it that we aren't capturing yet.
-
-2008-10-07  Jonathan Pobst  <monkey at jpobst.com>
-
-	* DataGridViewTextBoxCell.cs: Don't default to VerticalCenter font
-	drawing mode.  If we are top aligned, give ourselves some top padding.
-
-2008-10-06  Carlos Alberto Cortez <calberto.cortez at gmail.com> 
-
-	* X11Dnd.cs: When firing the default dnd enter/leave events, fire the
-	events on the control under the mouse pointer, instead of firing them
-	on the window generating the dnd operation. To achieve this re-use the
-	code used to get the window under the pointer when getting MouseMove
-	events.
-	Fixes #381876.
-
-2008-10-06  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* X11Dnd.cs: Don't check that that the window sending the dnd events
-	is the owner of the selection. Although Gtk+ sets it that way, it's
-	not a requirement of the XDnd protocol, and Qt doesn't seem to do it.
-	So, just as Gtk+ does, we set our window sending the dnd events as the
-	owner of the selection, but don't check it when receiving them. This
-	should fix interoperability with Qt/Kde.
-	Fixes #324251.
-
-2008-10-06  Jonathan Pobst  <monkey at jpobst.com>
-
-	* DataGridView.cs: Make sure we take the vertical scrollbar into
-	account when autosizing columns.
-
-2008-10-06  Jonathan Pobst  <monkey at jpobst.com>
-
-	* DataGridView.cs: Handle sorting datetimes.
-
-2008-10-04  Ivan N. Zlatev  <contact at i-nz.net>
-
-	* ButtonBase.cs, Control.cs, Label.cs, PictureBox.cs, TabControl.cs, 
-	TextBoxBase.cs, ToolBar.cs, TrackBar.cs, TreeView.cs: Cleanup 
-	compilation warnings.
-
-2008-10-03  Ivan N. Zlatev  <contact at i-nz.net>
-
-	* RTF.cs, Application.cs, BindingContext.cs, BindingSource.cs, 
-	ContextMenuStrip.cs, Control.cs, Hwnd.cs, Line.cs, MaskedTextBox.cs, 
-	ProgressBar.cs, SaveFileDialog.cs, TextControl.cs, Theme.cs, 
-	ToolBar.cs, ToolStripItemCollection.cs, TrackBar.cs: Cleanup 
-	compilation warnings.
-
-2008-10-03  Ivan N. Zlatev  <contact at i-nz.net>
-
-	* DataGridView.cs, DataGridViewCell.cs, 
-	DataGridViewCellValidatingEventArgs.cs, 
-	DataGridViewComboBoxEditingControl.cs, DataGridViewHeaderCell.cs, 
-	DataGridViewRow.cs, DataGridViewRowHeaderCell.cs, 
-	DataGridViewTextBoxEditingControl.cs: Cleanup compilation warnings.
-
-2008-10-03  Ivan N. Zlatev  <contact at i-nz.net>
-
-	* HtmlElementEventArgs.cs, HtmlWindowCollection.cs: 
-	Cleanup compilation warnings.
-
-2008-10-03  Ivan N. Zlatev  <contact at i-nz.net>
-
-	* XplatUIWin32.cs: Cleanup compilation warnings.
-
-2008-10-03  Ivan N. Zlatev  <contact at i-nz.net>
-
-	* PropertyGrid.cs: Cleanup compilation warnings.
-
-2008-10-02  Jonathan Pobst  <monkey at jpobst.com>
-
-	* DataGridViewRow.cs: Only clear the row background if we
-	are going to paint a new background.
-
-2008-10-02  Jonathan Pobst  <monkey at jpobst.com>
-
-	* DataGridViewCell.cs, DataGridViewColumnHeaderCell.cs,
-	DataGridViewRowHeaderCell.cs: Remove PaintPartBorder and
-	use PaintBorder instead.	
-
-2008-10-02  Jonathan Pobst  <monkey at jpobst.com>
-
-	* DataGridView.cs: When CellBorderStyle is set, update the
-	AdvancedCellBorderStyle to match.
-
-2008-10-02  Jonathan Pobst  <monkey at jpobst.com>
-
-	* DataGridViewCell.cs: Add helper methods to convert Alignment
-	to TextFormatFlags and align rectangles.
-	* DataGridViewTextBoxCell.cs: Use Alignment when painting text.
-	* DataGridViewImageCell.cs: Use Alignment when painting the image.
-
-2008-10-02  Ivan N. Zlatev  <contact at i-nz.net>
-
-	* ToolTip.cs: Display tooltips only for controls on the active form.
-	[Fixes bug #428115]
-
-2008-10-02  Jonathan Pobst  <monkey at jpobst.com>
-
-	* DataGridView.cs: Make OnCellValueNeeded internal.
-	* DataGridViewCell.cs: Raise the CellValueNeeded event so the
-	user can supply their own value if they choose.
-
-2008-10-02  Jonathan Pobst  <monkey at jpobst.com>
-
-	* DataGridViewColumnHeaderCell.cs: Create a new style object
-	so the DefaultCellStyle doesn't get changed.
-
-2008-10-02  Jonathan Pobst  <monkey at jpobst.com>
-
-	* ToolStripItem.cs: Check to make sure the owner is actually
-	changing in InternalOwner before doing any work.  Fixes some
-	failing tests.
-
-2008-10-01  Jonathan Pobst  <monkey at jpobst.com>
-
-	* DataGridViewColumnHeaderCell.cs: Correctly calculate style.
-	* DataGridView.cs: Use a column header's inherited style instead
-	of just using the default.
-
-2008-10-01  Jonathan Pobst  <monkey at jpobst.com>
-
-	* SplitContainer.cs: Raise SplitterMoved when the splitter is
-	moved through code.
-
-2008-10-01  Mario Carrion <mcarrion at novell.com>
-
-	* ScrollBar.cs: Internal property added: UIAThumbPosition.
-
-2008-10-01  Jonathan Pobst  <monkey at jpobst.com>
-
-	* ToolStripOverflowButton.cs: Use InternalOwner instead of Owner.
-
-2008-10-01  Jonathan Pobst  <monkey at jpobst.com>
-
-	* ToolStripItem.cs: When the user sets Owner, we need to remove
-	it from its previous owner and then add it to the new owner's
-	item collection.  Also, create InternalOwner, so we can set the owner
-	that doesn't do this new stuff.
-	* ToolStripItemCollection.cs: Use InternalOwner instead of Owner.
-
-2008-10-01  Jonathan Pobst  <monkey at jpobst.com>
-
-	* ToolStripItem.cs: When our parent changes, recalculate our text
-	size, since we may be getting our Font from our parent.  When our
-	owner's Font changes, recalculate ourselves as we may be using
-	that font.
-
-2008-10-01  Everaldo Canuto  <ecanuto at novell.com>
-
-	* MenuAPI.cs: Select the first option of a popup when opening the popup via
-	return key. [Fixes bug #413792].
-
-2008-10-01  Jonathan Pobst  <monkey at jpobst.com>
-
-	* ToolStripItem.cs: Make Font, BackColor, and ForeColor be
-	ambient properties.  (Get their value from their parents if
-	values haven't been set.)
-
-2008-10-01  Jonathan Pobst  <monkey at jpobst.com>
-
-	* ToolStripSystemRenderer.cs: Call overridden methods' bases
-	after our logic, so users can do painting by handling the events.
-	Currently, we draw over any user painting.
-
-2008-10-01  Jonathan Pobst  <monkey at jpobst.com>
-
-	* ToolStripProfessionalRenderer.cs: Call overridden methods' bases
-	after our logic, so users can do painting by handling the events.
-	Currently, we draw over any user painting.
-
-2008-09-30  Everaldo Canuto  <ecanuto at novell.com>
-
-	* MenuAPI.cs: Prevent NRE when deactivate menu. Fixes #413636.
-
-2008-09-30  Jonathan Pobst  <monkey at jpobst.com>
-
-	* TreeNode.cs, TreeView.cs: Move logic that determines the node
-	image to draw to TreeNode.  Give Index/Keys put on the node
-	precedence over the global one for the TreeView.
-
-2008-09-30  Jonathan Pobst  <monkey at jpobst.com>
-
-	* TreeNode.cs: Setting ImageIndex or ImageKey should reset the other.
-
-2008-09-29  Mario Carrion <mcarrion at novell.com>
-
-	* ListBox.cs: Index fixed.
-
-2008-09-29  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* TabControl.cs: When expanding the tab -because it's selected now-,
-	using Right alignment, instead of adding some selected delta value to
-	the X origin, substract it, so it gets a location adjacent to the panel, 
-	instead of be more separated.
-	Fixes #409170.
-
-2008-09-29  Jonathan Pobst  <monkey at jpobst.com>
-
-	* MessageBox.cs: Use SystemIcons for graphics instead of keeping our
-	own copies of them.
-
-2008-09-29  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* X11Dnd.cs: source and related fields should be set to IntPtr.Zero,
-	as well as the other static fields, to avoid using their previous
-	values my mistake when handling the dnd events. This should avoid
-	handling any status event after the drop has been finalized/cancelled.
-
-2008-09-28  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* X11Dnd.cs: We have to send a dnd enter event as soon as we start the
-	operation, instead of waiting until we get any movement - this will
-	help us to have the data available in case no movement was detected
-	and _still_ we have to fire DragEnter and DragLeave/DragDrop events.
-	Finally add a windows.forms-only fallback to fire the mentioned events
-	if no movement at all was detected, just like .net does.
-	Fixes #381876.
-
-2008-09-27  Jonathan Pobst  <monkey at jpobst.com>
-
-	* ThemeWin32Classic.cs: When drawing a status bar panel, don't
-	return early if the text is empty because the icon doesn't get
-	drawn then.  [Fixes bug #428113]
-
-2008-09-25  Carlos Alberto Cortez <calberto.cortez at gmail.com> 
-
-	* FileDialog.cs: Implement basic support for sorting by columns in
-	Details view. Patch by Eric Petit.
-	Fixes #428006.
-
-2008-09-25  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* ThemeWin32Classis.cs: When drawing gridlines take into account the
-	case where ListView.ItemSize hasn't been computed, and provide a
-	fallback as well. This prevents a division by 0.
-
-2008-09-24  Jonathan Pobst  <monkey at jpobst.com>
-
-	* ThemeVisualStyles.cs: Use ClientRectangle instead of Bounds to
-	correctly draw tooltip backgrounds.
-
-2008-09-24  Jonathan Pobst  <monkey at jpobst.com>
-
-	* ImageList.cs: Change CopyTo implementation to ensure clones are
-	created of our images.
-	[Fixes bug #409169]
-
-2008-09-24  Jonathan Pobst  <monkey at jpobst.com>
-
-	* Control.cs: When setting fonts, we need to ensure we change our
-	reference to the new font object, even if it represents the same
-	font as before.  If we don't, the original font can get disposed
-	and we will still try to use it.
-	[Fixes bug #386450]
-
-2008-09-24  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* FileDialog.cs: Take into account Tile view when selecting the view
-	(2.0 profile).
-
-2008-09-24  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* ThemeWin32Classic.cs: When drawing gridlines for ListView don't use
-	the item bounds, since we can't iterate over them in virtual mode.
-	Also fix wrong calculation of the gridlines when using scrolling.
-	Fixes #400390.
-
-2008-09-23  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* XplatUIX11.cs: When handling EnterNotify events, take into account
-	both the public and implicit controls when trying to detect the
-	grab/ungrab process. This should fix ListView selection in Details
-	view.
-
-2008-09-23  Jonathan Pobst  <monkey at jpobst.com>
-
-	* TreeView.cs: Redraw the whole node area when the selected node changes.
-	Things like state images were not getting redrawn because the invalid
-	rectangle was too small.
-	[Fixes bug #428211]
-
-2008-09-23  Mario Carrion  <mcarrion at novell.com>
-
-	* ListBox.cs: UIA Selection Pattern fully supported in ListBox control.
-	[Fixes bug #428993]
-
-2008-09-23  Jonathan Pobst  <monkey at jpobst.com>
-
-	* Form.cs: Do not set the Form's icon in the backend if showicon = false.
-	[Fixes bug #428114]
-
-2008-09-23  Jonathan Pobst  <monkey at jpobst.com>
-
-	* ThemeWin32Classic.cs: Allow tooltips to be multiline.
-	[Fixes bug #427884]
-
-2008-09-23  Jonathan Pobst  <monkey at jpobst.com>
-
-	* StatusBar.cs: Add tooltip support.
-	[Fixes bug #428113]
-
-2008-09-23  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* ThemeWin32Classic.cs: Use StringAlignment.Center for the vertical
-	alignments of sub items in Details view. Patch by John Mortlock (johnm at 
-	hlaustralia.com.au).
-	Fixes #425360.
-
-2008-09-23  Neville Gao  <nevillegao at gmail.com>
-
-	* StatusBar.cs: Add UIA event in AddInternal () to support accessibility.
-	[Fixes bug #419079]
-
-2008-09-22  Jonathan Pobst  <monkey at jpobst.com>
-
-	* TextBoxBase.cs: Set Text to "" instead of null in Clear().
-	[Fixes bug #428107]
-
-2008-09-22  Carlos Alberto Cortez <calberto.cortez at gmail.com> 
-
-	* ListView.cs: Don't do anything when EnsureVisible is called inside a
-	BeginUpdate/EndUpdate block.
-	Fixes #425049.
-
-2008-09-22  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* ListViewItem.cs: The semantics for the public .ctor of
-	ListViewSubItemCollection need us to already have a Text value for the
-	item, which in our implementation have as available *after* adding the
-	first sub item. So create an internal .ctor that satisfies our needs
-	and let the public .ctor have the same semantics as .net.
-	Fixes #427561.
-
-2008-09-19  Carlos Alberto Cortez <calberto.cortez at gmail.com> 
-
-	* ListControl.cs: Changes in Formatting related values should call
-	RefreshItems, as .net does.
-	* ComboBox.cs:
-	* ListBox.cs: In the respective overrides of RefreshItems calculate
-	layout as well as refreshing - again, this is what .net does.
-	Fixes #426168.
-
-2008-09-19  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* ListBox.cs: In UpdateTopItem, don' call to XplatUI.ScrollWindow,
-	since we are already doing that when we change the value of the
-	scrollbar or force the call to ScrollWindow in the same method. This
-	way we don't cause a Invalidate call for all the listbox bounds for
-	methods calling UpdateTopItem with an already updated top item. This
-	was happening specially calling EnsureVisible with already visible
-	items.
-
-2008-09-18  Mike Gorse <mgorse at novell.com>
-
-	* Application.cs, IKeyFilter.cs, X11Keyboard.cs, XplatUI.cs,
-	  XplatUIStructs.cs: Added KeyFilter
-	[Fixes bug #427039]
-
-2008-09-18  Carlos Alberto Cortez <calberto.cortez at gmail.com> 
-
-	* RelatedPropertyManager.cs: The properties returned by
-	GetItemProperties should be that ones of the *actual* object returned
-	by the property, not the property type - this is very special when the
-	property exposes a type, but the returned object actually is a child
-	class and implements more functionality and properties.
-
-2008-09-18  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* Binding.cs: Don't look for the property in the data source if the
-	passed string is empty.
-
-2008-09-18  Ivan N. Zlatev  <contact at i-nz.net>
-
-	* XplatUIX11.cs: Comment out _NET_WM_WINDOW_TYPE_DIALOG in order to 
-	fix unused variable warnings.
-
-2008-09-18  Ivan N. Zlatev  <contact at i-nz.net>
-
-	* XplatUIX11.cs: Send WM_HELP when F1 is pressed.
-	[Fixes bug #427073]
-
-2008-09-18  Ivan N. Zlatev  <contact at i-nz.net>
-
-	* XplatUIX11.cs: 
-	 - Do not set _NET_WM_WINDOW_TYPE_DIALOG for modal forms, because this 
-	 leads to the window manager overriding our border style and zorder. 
-	 - Allow the activation of non-modal forms, which are children of a 
-	 modal form.
-	[Fixes bug #423417]
-
-2008-09-17  Ivan N. Zlatev  <contact at i-nz.net>
-
-	* XplatUIX11.cs, X11Structs.cs: For mapped windows SetTopMost should 
-	ask the window manager to do the work instead of changing the property 
-	directly.
-	[Fixes bug #423417]
-
-2008-09-17  Everaldo Canuto  <ecanuto at novell.com>
-
-	* CurrencyManager.cs: Check for positon before call ChangeRecordState in
-	AddNew to fix some navigation for empty datasets. [Fixes #323053]
-
-2008-09-17  Everaldo Canuto  <ecanuto at novell.com>
-
-	* FileDialog.cs: Remove OnPaint method on PopupButtonPanel and set 
-	InternalBorderStyle to BorderStyle.Fixed3D. It is the best way to get 3d
-	border and fixes some drawing issues when resize form.
-
-2008-09-17  Everaldo Canuto  <ecanuto at novell.com>
-
-	* FileDialog.cs: Lots of layout fixes to mimic Win32. [Fixes #408752]
-	
-	* ThemeWin32Classic.cs: We don't need to reduce button size when it is
-	AcceptButton.
-
-2008-09-17  Ivan N. Zlatev  <contact at i-nz.net>
-
-	* TextBoxBase.cs: For standard textbox the scrollbars are always 
-	visible if Multiline is true.
-	[Fixes bug #426896]
-
-2008-05-12  Everaldo Canuto  <ecanuto at novell.com>
-
-	* DataGridTextBoxColumn.cs: Uncomment code accidentally commited in last
-	patch.
-	
-2008-05-12  Everaldo Canuto  <ecanuto at novell.com>
-
-	[Fixes most od DBNull and HeadersVisible problems]
-	
-	* DataGrid.cs:
-	- ShowingColumnHeaders removed because we dont need it, ColumnHeadersVisible
-	returns the value that we need.
-	- Fixed FromPixelToColumn method that return zero for first	column and for
-	row header cell, now it returns -1 for row header cell.
-	- Fixed HitTest to check row header cell in column header area, it now
-	returns HitTestType.None. [Fixes #322864]
-	- Fixed the calculation of visible columns in UpdateVisibleColumn, now it
-	checks for RowHeadersVisible and other things.
-	- If an exception occurs when setting CurrentCell and user type 'yes' in
-	message dialog, invalidade current and new cell and set setting_current_cell
-	to false to prevent future errors. [Partially fixes #323050]
-
-	* DataGridColumnStyle.cs: Don't call EndEdit after set property_descriptor
-	value (SetColumnValueAtRow), it must be done by grid to properly show 
-	messages. [Fixes #323050]
-
-	* ThemeWin32Classic.cs: Lots of fixes in DataGridPaintColumnHeaders to
-	better draw column and row header. Also dont draw anything when column
-	headers is not visible.
-
-2008-09-16  Jonathan Pobst  <monkey at jpobst.com>
-
-	* ThemeWin32Classic.cs: Hook ListViewItems into the ShowFocusCues
-	logic.
-
-2008-09-16  Jonathan Pobst  <monkey at jpobst.com>
-
-	* TreeView.cs: Don't start editing a node on right click, only
-	left click.
-
-2008-09-16  Jonathan Pobst  <monkey at jpobst.com>
-
-	* NativeWindow.cs: Reenable the ThreadExceptionDialog I accidentally
-	disabled over a year ago.
-	* Form.cs: Wrap calling Load in a try/catch because it can happen
-	before the catch-all one in NativeWindow.
-	[Fixes bug #425414]
-
-2008-09-16  Jonathan Pobst  <monkey at jpobst.com>
-
-	* ToolStripDropDownMenu.cs: Calculate the connected area better
-	to take into account when the drop down is not directly under the
-	owner item.
-	* ToolStripProfessionalRenderer.cs: Draw the whole unconnected area.
-
-2008-09-16  Mario Carrion <mcarrion at novell.com>
-
-	* ScrollBar.cs: New event added: UIAValueChanged, generated when
-	  LargeChange, SmallChange, Maximum or Minimum values are changed.
-	[Fixes bug #426464]
-
-2008-09-16  Mario Carrion <mcarrion at novell.com>
-
-	* ErrorProvider.cs: Component enabled to support accessibility.
-	* Application.cs: Updated to Initialize UIA in ErrorProvider.
-	[Fixes bug #426459]
-
-2008-09-16  Jonathan Pobst  <monkey at jpobst.com>
-
-	* TextBoxBase.cs: Flag has_been_focused when SelectionStart is set
-	so we don't highlight on first focus.
-	[Fixes bug #360869]
-
-2008-09-16  Jonathan Pobst  <monkey at jpobst.com>
-
-	* TextControl.cs: Correctly calculate the height of the area we 
-	need to invalidate when we have started scrolling and viewport_y
-	is used.  [Fixes bug #387608]
-
-2008-09-16  Jonathan Pobst  <monkey at jpobst.com>
-
-	* TextControl.cs: When getting the SelectedText, don't add in
-	NewLine characters, as they are already contained in the lines.
-	[Fixes bug #388115]
-
-2008-09-16  Jonathan Pobst  <monkey at jpobst.com>
-
-	* TextBoxBase.cs: Replace the buggy Lines setter with one that
-	simply concats the lines and send it to the Text setter.
-	[Fixes issue #2 and #3 of 388115]
-
-2008-09-16  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* Binding.cs: The default value of DataSourceNullValue should be
-	Convert.DBNull actually. Also, the NullValue should only be used *if*
-	itself is not null, and use the null/Convert.DBNull value instead.
-
-2008-09-15  Jonathan Pobst  <monkey at jpobst.com>
-
-	* TextControl.cs: Add a method to convert a string newline to the
-	newline enum.
-	* TextBoxBase.cs: When the user hits enter, insert a native newline.
-	[Fixes part 1 of bug #388115]
-
-2008-09-15  Mario Carrion <mcarrion at novell.com>
-
-	* ToolTip.cs: UnPopup event set to internal to match public API.
-
-2008-09-15  Jonathan Pobst  <monkey at jpobst.com>
-
-	* TextBoxBase.cs: If the user is using Ctrl-Tab to move focus, we
-	have to remove the Ctrl in order for the focus moving code to kick in.
-	[Fixes bug #426170]
-
-2008-09-15  Jonathan Pobst  <monkey at jpobst.com>
-
-	* CheckedListBox.cs: Return the real item index from Add.  It may not be
-	the last item if the list is sorted.  The user can change the NewValue in
-	the ItemCheck event, we need to use that value if so.
-	* ListBox.cs: Return the real item index from a sorted Add.
-	[Fixes bug #426166]
-
-2008-09-15  Ivan N. Zlatev  <contact at i-nz.net>
-
-	* MimeIcon.cs: Add null checks in the GnomeHandler, because it might 
-	happen that the icons from the theme is missing or the particular size 
-	unavailable.
-	[Fixes bug #424981]
-
-2008-09-15  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* Binding.cs: When assigning null or DBNull depending on value/ref type,
-	use IsValueType instead to get the precise desired value.
-	Fixes #424276.
-
-2008-09-12  Jonathan Pobst  <monkey at jpobst.com>
-
-	* TreeNodeCollection.cs: When adding a new node to an opened node,
-	we have to invalidate everything below the parent node because
-	every node scoots down and we have to repaint them.
-	[Fixes bug #411386]
-
-2008-09-12  Jonathan Pobst  <monkey at jpobst.com>
-
-	* ThemeWin32Classic.cs: Take CheckBox and RadioButton's CheckAlign
-	property into account when drawing.
-	[Fixes bug #416064]
-
-2008-09-12  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* ListBox.cs: When calling Items.Clear(), call
-	SelectedIndexCollection.ClearCore instead of normal Clear method, to
-	not fire any Selected*Changed event - this is done to match .net and
-	don't have invalid values when changing the DataSourceProperty.
-	Fixes #424273.
-
-2008-09-12  Mario Carrion  <mcarrion at novell.com>
-
-	* HelpProvider.cs: Control enabled to support accessibility.
-	* Application.cs: Updated to Initialize UIA in HelpProvider.
-	[Fixes bug #425988]
-
-2008-09-12  Jonathan Pobst  <monkey at jpobst.com>
-
-	* Form.cs: When we are showing a dialog box, if its owner is TopMost,
-	make the dialog TopMost as well.
-	[Fixes bug #425984]
-
-2008-09-12  Jonathan Pobst  <monkey at jpobst.com>
-
-	* Win32DnD.cs, XplatUIWin32.cs: Applied patch from Andy Hume that handles
-	clipboard data better.
-	[Fixes bug #414446]
-
-2008-09-12  Jonathan Pobst  <monkey at jpobst.com>
-
-	* TextBoxBase.cs: Applied patch from John Mortlock that ensures
-	TextChanged and SelectionChanged events fire in the same order as .Net.
-	[Fixes bug #425725]
-
-2008-09-12  Jonathan Pobst  <monkey at jpobst.com>
-
-	* DataGridView.cs: When sorting a column, if it only contains numbers,
-	do a numeric sort instead of a string sort.
-	[Fixes bug #425849]
-
-2008-09-12  Jonathan Pobst  <monkey at jpobst.com>
-
-	* TableLayoutSettings.cs, TableLayoutStyleCollection.cs: Guard
-	against NRE's when the settings have a null panel.
-	* TableLayoutPanel.cs: When setting the TableLayoutSettings, ensure
-	the panel gets set.
-	[Fixes bug #425647]
-
-2008-09-11  Mario Carrion  <mcarrion at novell.com>
-
-	* ToolTip.cs: Control enabled to support accessibility.
-	* Application.cs: Updated to Initialize UIA in ToolTip.
-	[Fixes bug #425277]
-
-2008-09-11  Jonathan Pobst  <monkey at jpobst.com>
-
-	* Control.cs: Make the custom Enumerator internal to fix build.
-
-2008-09-11  Jonathan Pobst  <monkey at jpobst.com>
-
-	* DataGridViewCheckBoxCell.cs: If our content is clicked and we aren't
-	already in edit mode, begin edit mode.  Generally edit mode isn't
-	started until the second click, but CheckBoxes are special.
-
-2008-09-11  Jonathan Pobst  <monkey at jpobst.com>
-
-	* ErrorProvider.cs: Never try to add our icons to ContainerControl,
-	since that can be set to anything.  Always add them to the Control's
-	parent.  [Fixes bug #416058]
-
-2008-09-11  Jonathan Pobst  <monkey at jpobst.com>
-
-	* ListView.cs: Use a custom enumerator for ListViewItemCollection
-	so items can be deleted in a foreach.
-	[Fixes bug #425342]
-
-2008-09-11  Jonathan Pobst  <monkey at jpobst.com>
-
-	* DataGridViewRow.cs: Better implementation of GetPreferredHeight.
-	Store the user set explicit height so that the row can be AutoSized
-	and then when AutoSize is turned off, it can get its original size back.
-	* DataGridView.cs: Use the Row's GetPreferredHeight instead of 
-	duplicating the logic.  When setting AutoSizeRowsMode to None, reset
-	rows' heights back to their explicit values.
-	[Fixes bug #415780]
-
-2008-09-11  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* DateTimePicker.cs: When getting focus, select the checkbox if we are
-	already showing it. Also, don't change its value when pressing space
-	if the checkbox is not visible (ShowCheckBox as false). Finally, the
-	checkbox should remain selected as long as Checked is false, and the
-	other parts are disabled.
-	Fixes #424267.
-	
-2008-09-11  Jonathan Pobst  <monkey at jpobst.com>
-
-	* MessageBox.cs: Handle shortcut keys to dialog buttons.
-	[Fixes bug #425425]
-
-2008-09-11  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* Binding.cs: When the value retrieved from the control property is
-	null, don't return Convert.DBNull for Nullable instances, since they
-	can *actually* get a null value.
-	Fixes #424265.
-
-2008-09-10  Jonathan Pobst  <monkey at jpobst.com>
-
-	* Control.cs: Add an internal field to force doublebuffering regardless
-	of what the public mechanisms are set to.  This is because MS's native
-	controls are doublebuffered even though their .Net bits are set to false.
-	* ProgressBar.cs: Set force_double_buffer to true.
-	[Fixes bug #406595]
-
-2008-09-10  Jonathan Pobst  <monkey at jpobst.com>
-
-	* DataGridViewCheckBoxColumn.cs: Use the threestate constructor for
-	the cell template.
-	* DataGridViewCheckBoxCell.cs: Add proper support for threestate.
-	* DataGridViewCell.cs: Implement GetEditedFormattedValue for types
-	without EditingControls, paint background selection for types without
-	EditingControls, reset the EditingCellValueChanged flag when the
-	cell's value is committed.
-	* DataGridView.cs: Make BeginEdit and EndEdit work with cells that don't
-	have EditingControls, remove a double call to a cell's OnContentClickInternal,
-	don't do cell changing logic in OnMouseDown if the cell didn't change.
-	[Fixes bug #420351]
-
-2008-09-10  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* DateTimePicker.cs: Fix the edition of am/pm specifier.
-
-2008-09-09  Jonathan Pobst  <monkey at jpobst.com>
-
-	* TextControl.cs: Add "&" to the list of valid characters in a URL.
-
-2008-09-09  Carlos Alberto Cortez <calberto.cortez at gmail.com> 
-
-	* DateTimePicker.cs: Before incrementing or decrementing any part in
-	the textbox, end any current edit. Also when ending the current edit
-	use the editing_part_index field instead of the current selected
-	value, since they can be out of synch, and we really need to work on
-	the *real* current edit part. Finally when PartData.Selected changes,
-	always try to end any ongoing edit.
-	This should fix some small errors handling mouse navigation and
-	increase/decrease operations.
-
-2008-09-09  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* DateTimePicker.cs: 'hh' and 'HH' formats (12 and 24 hour formats
-	respectively) should handled different, since the 12 hours format
-	needs the value typed by the user to be adjusted depending on the
-	a.m/p.m value, so it is preserved, and only changed when the value
-	reaches the 12 value (when it changes from a.m to p.m).
-	Fixes part of #416555.
-
-2008-09-08  Jonathan Pobst  <monkey at jpobst.com>
-
-	* ToolStrip.cs: Ensure MouseDown gets called for MenuStrip items.
-	* ToolStripDropDownItem.cs: Don't fire events and such again if
-	ShowDropDown is called on an already dropped down item.
-	* ToolStripMenuItem.cs: Call ShowDropDown even if there aren't any
-	subitems, the user may add some in the DropDownOpening event.
-	[Fixes bug #417877]
-
-2008-09-08  Jonathan Pobst  <monkey at jpobst.com>
-
-	* ComboBox.cs: Fix IOORE when setting SelectedItem to null.
-	[Fixes bug #424270]
-
-2008-09-08  Jonathan Pobst  <monkey at jpobst.com>
-
-	* MdiClient.cs: When looking for menustrips on a child form to merge,
-	look inside ToolStripContainers.
-	[Fixes bug #424264]
-
-2008-09-08  Ivan N. Zlatev  <contact at i-nz.net>
-
-	* ErrorProvider.cs: Unbreak my previous commit.
-
-2008-09-08  Ivan N. Zlatev  <contact at i-nz.net>
-
-	* ErrorProvider.cs: Icon should always be 16x16.
-	[Fixes bug #424380]
-
-2008-09-07  Ivan N. Zlatev  <contact at i-nz.net>
-
-	* GridEntry.cs: Invalidate the child items cache when the property 
-	value changes.
-
-2008-09-07  Ivan N. Zlatev  <contact at i-nz.net>
-
-	* GridEntry.cs, PropertyGridView.cs: 
-	   - Update the ReadOnly detection and rendering to finally hopefully 
-	   match the one of MSFT.
-	   - Niceify and move the debug CWLS.
-	[Fixes bug #409028]
-
-2008-09-05  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* ListView.cs: Don't call Invalidate at all from SetItemLocation,
-	since we are already calling Invalidate for the entire control when
-	needed - and call Redraw() when size changes, since we need to paint
-	there by ourselved and not anymore from the mentioned method. 
-	This should improve the layout process. Also clean some not needed calls 
-	here and there.
-
-2008-09-05  Jonathan Pobst  <monkey at jpobst.com>
-
-	* MenuAPI.cs: Add a null check to the Alt-F4 code.
-	[Fixes bug #420309]
-
-2008-09-05  Jonathan Pobst  <monkey at jpobst.com>
-
-	* ThreadExceptionDialog.cs: Disable AutoScaling for this dialog.
-	[Fixes bug #423040]
-
-2008-09-04  Ivan N. Zlatev  <contact at i-nz.net>
-
-	* GridEntry.cs, CategoryGridEntry.cs, RootGridEntry.cs, PropertyGrid.cs, 
-	PropertyGridView.sc: Implement lazy/delayed propertygrid population 
-	on item expansion. Improves performance and fixes bug #417955.
-	[Fixes bug #417955]
-
-2008-09-05  Stephane Delcroix  <sdelcroix at novell.com>
-
-	* Control.cs: only check for OptimizedDoubleBuffer in NET_2_0.
-	fix the build.
-
-2008-09-04  Jonathan Pobst  <monkey at jpobst.com>
-
-	* TextControl.cs: Add "_" to the list of valid characters in a URL.
-	[Fixes bug #423408]
-
-2008-09-04  Jonathan Pobst  <monkey at jpobst.com>
-
-	* Control.cs: If using OptimizedDoubleBuffer, ensure the clip 
-	region gets set.
-	[Fixes bug #414166]
-
-2008-09-04  Jonathan Pobst  <monkey at jpobst.com>
-
-	* FontDialog.cs: When storing our font size from the starting font,
-	use SizeInPoints instead of Size in case Size is a different unit
-	from Points.
-	[Fixes bug #416489]
-
-2008-09-04  Jonathan Pobst  <monkey at jpobst.com>
-
-	* FileDialog.cs: When enter is pressed on a SaveFileDialog and we
-	don't use it for anything else, check if a directory is highlighted.
-	If it is, navigate into it.
-	[Fixes bug #422087]
-
-2008-09-04  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* Binding.cs: When acquiring a BindingManagerBase for the first time,
-	check that the specified property actually exists in the data source,
-	and throw an ArgumentException if that's not the case - this is only
-	done for this scenario, since for later cases (such Position changes)
-	we throw different exceptions (match .Net).
-
-2008-09-03  Ivan N. Zlatev  <contact at i-nz.net>
-
-	* ButtonBase.cs CheckBox.cs, Control.cs, FlowLayoutPanel.cs, 
-	  FlowLayoutSettings.cs, GroupBox.cs, Label.cs, ListBox.cs, 
-	  PropertyGrid.cs, RadioButton.cs, TableLayoutPanel.cs, 
-	  TableLayoutSettings.cs, ToolStrip.cs, ToolStripDropDownButton.cs, 
-	  ToolStripDropDownMenu.cs, ToolStripItem.cs, ToolStripSplitButton.cs, 
-	  ToolStripStatusLabel.cs: Add missing PerformLayout calls to various 
-	  properties.
-	  [Fixes bug #418684]
-
-2008-09-03  Neville Gao  <nevillegao at gmail.com>
-
-	* StatusBar.cs: Control enabled to support accessibility.
-	[Fixes bug #419079]
-
-2008-09-02  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* Binding.cs: When connecting the event handler for the "Changed"
-	event for the property, only do it for PropertyManager, and not for
-	CurrencyManager - this is exactly what does .Net, totally ignoring any
-	change in the property of the elements of a list.
-	Fixes the tests.
-
-2008-09-02  Jonathan Pobst  <monkey at jpobst.com>
-
-	* XplatUIWin32.cs: Ensure we never send the WS_EX_MDICHILD flag
-	to Windows when creating a window, as we fake MDI stuffs.
-	[Fixes bug #421858]
-
-2008-09-01  Ivan N. Zlatev  <contact at i-nz.net>
-
-	* TextBox.cs: Invalidate after UseSystemPasswordChar, so that the 
-	change takes effect.
-
-2008-08-24  Ivan N. Zlatev  <contact at i-nz.net>
-
-	* XplatUIX11.cs: Provide MouseButtons/State information to the XPlatUI.
-	[Fixes bug #419001]
-
-2008-08-27  Jonathan Pobst  <monkey at jpobst.com>
-
-	* DataGridView.cs: Raise CellContentClick event.
-	[Fixes part of bug #420351]
-
-2008-08-27  Mario Carrion  <mcarrion at novell.com>
-
-	* ScrollBar.cs: Control enabled to support accessibility.
-	[Fixes bug #416759]
-
-2008-08-27  Mario Carrion  <mcarrion at novell.com>
-
-	* ComboBox.cs: Control enabled to support accessibility.
-	[Fixes bug #416663]
-
-2008-08-27  Mario Carrion  <mcarrion at novell.com>
-
-	* ListBox.cs: Control enabled to support accessibility.
-	[Fixes bug #416640]
-
-2008-08-27  Jonathan Pobst  <monkey at jpobst.com>
-
-	* ComboBox.cs: Don't suppress the TextChanged event when changing
-	the SelectedIndex.
-	* ToolStripComboBox.cs: Listen to the ComboBox's TextChanged event
-	and re-raise it.
-	[Fixes bug #420673]
-
-2008-08-26  Jonathan Pobst  <monkey at jpobst.com>
-
-	* ErrorProvider.cs: Fix a regression NRE when setting properties
-	for a control before it has a parent.
-	[Fixes bug #420305]
-
-2008-08-25  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* Binding.cs: Use the BindingManagerBase.Current value to obtain
-	connect the property "Changed" event, instead of using the data
-	sources - this is useful when the property specifies actually a
-	multiple objects path.
-	Fixes part of #417973.
-
-2008-08-24  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* RelatedPropertyManager.cs: PropertyManager instances associated to a
-	nested properties should return not the properties of the data source
-	itself, but the properties of the type of a specific property in the
-	data source - match .net.
-
-2008-08-24  Gert Driesen  <drieseng at users.sourceforge.net>
-
-	* ListBox.cs (IntegerCollection): To avoid duplication, moved code for
-	AddRange overloads into AddItems method, and added missing NULL check.
-	Added extra argument check to RemoveAt for compatibility with MS. 
-	Modified IList implementation of Add, Contains, IndexOf and Remove to
-	throw an ArgumentException if item is not an int. Modified IList.Insert
-	to throw a NotSupportException instead of an Exception. Implemented
-	ICollection.
-	(ObjectCollection): To avoid duplication, use AddItems method from
-	AddRange overloads. On 1.0 profile, first perform NULL check on items
-	in AddItems.
-
-2008-08-23  Gert Driesen  <drieseng at users.sourceforge.net>
-
-	* Control.cs: Do not modify bounds directly in .ctor's. Fixes bug
-	 #419087.
-
-2008-08-22  Atsushi Enomoto  <atsushi at ximian.com>
-
-	* X11Keyboard.cs : comment out some Console.WriteLine().
-
-2008-08-22  Atsushi Enomoto  <atsushi at ximian.com>
-
-	* X11Keyboard.cs : fixed wrong call to XOpenIM() which happened
-	  even if premises are not filled. Also XLookupString() was not
-	  receiving correct input, which blocked precise input handling
-	  on non-XIM mode.
-
-2008-08-20  Carlos Alberto Cortez <calberto.cortez at gmail.com> 
-
-	* ListView.cs: When calling OnCacheVirtualItems, cast to the right
-	type of delegate, instead of EventHandler - this was causing a type
-	cast exception in all apps handling this event.
-	Fixes #417876.
-
-2008-08-20  Jonathan Pobst  <monkey at jpobst.com>
-
-	* ToolStripDropDownItem.cs: Always raise DropDownOpening in
-	ShowDropDown to give the user a chance to dynamically add
-	drop down items.  [Step 1 of fixing bug #417877]
-
-2008-08-20  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* X11Dnd.cs: Don't fire pseudo motion DragOver events if we haven't
-	had any mouse motion since the call to StartDrag, to match the dnd
-	behaviour of .net.
-	Fixes part of #381876.
-
-2008-08-20  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* XplatUIX11.cs: Only do the children control bounds check for EnterNotify
-	if mode is NotifyUngrab, and let it flow if mode is NotifyNormal.
-	Also, if we are actually moving into a different window after
-	grabbing, generate a LeaveNotify event for the previous window, since
-	we need to fire the leave events until the grab ends, not when
-	actually moving outside of the control.
-
-2008-08-19  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* XplatUIX11.cs: The check inside EnterNotify case to fire MouseEnter
-	events only for client windows was wrong - we need to compare the
-	client window against the window receiving the EnterNotify event, not
-	against zero (since client window is never Zero, btw).
-	This prevents having unnecessary handling of EnterNotify events for
-	non-client windows when a gran begins.
-
-2008-08-19  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* XplatUIX11.cs: Handling X ButtonPress events, we must *not* generate
-	MouseMove/MotionNotify events at all (which should only happen after
-	MouseUp/ButtonRelease, as .Net does).
-	This avoids firing an extra and unnecessary MouseMove event just after
-	every MouseDown event.
-
-2008-08-19  Jonathan Pobst  <monkey at jpobst.com>
-
-	* LinkLabel.cs: Always clear any previous links when LinkArea
-	is set.  [Fixes bug #410709]
-
-2008-08-19  Jonathan Pobst  <monkey at jpobst.com>
-
-	* ToolStripProfessionalRenderer.cs: Revert last change.
-	* ProfessionalColorTable.cs: For Classic, use SystemColors.Window
-	for ToolStripDropDownBackground.
-
-2008-08-19  Jonathan Pobst  <monkey at jpobst.com>
-
-	* ToolStripProfessionalRenderer.cs: Use Window color for the 
-	background of dropdowns to match .Net when the user is not
-	using the default white.  [Fixes bug #418108]
-
-2008-08-19  Atsushi Enomoto  <atsushi at ximian.com>
-
-	* XplatUIWin32.cs : SetTimer() used to set wrong window handle and
-	  it caused timer registration twice. Fixed bug #418107.
-
-2008-08-18  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	[Correction: This is the actual change to X11Dnd issue, not the
-	previous one, which was actually a different issue.]
-
-	* X11Dnd.cs: Increase the interval for the Timer, to not fire our
-	pseudo motion HandleMouseOver method so aggresive. Also, don't call it
-	when the pointer is actually in motion, but only when the pointer
-	seems to stop (as .net does).
-	Fixes part of #381876.
-
-
-2008-08-18  Jonathan Pobst  <monkey at jpobst.com>
-
-	* ListBox.cs: Fix CopyTo implementation.
-	[Fixes bug #409169]
-
-2008-08-18  Jonathan Pobst  <monkey at jpobst.com>
-
-	* ThemeWin32Classic.cs: Use ClientRectangle instead of Bounds when
-	drawing a ComboBox's background.  Fixes bad disabled rendering when
-	the control is not at 0,0.
-	[Fixes bug #416063]
-
-2008-08-16  Ivan N. Zlatev  <contact at i-nz.net>
-
-	* GridEntry.cs: Leave the ICustomTypeDescriptor handling up to the 
-	ComponentModel layer, which will properly prioritize the attributes.
-	Avoids wrong prioritization of duplicate attributes when retrieving 
-	the converter and editor.
-	[Fixes bug #417729]
-
-2008-08-15  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* XplatUIX11.cs: Increase the interval for the Timer, to not fire our
-	pseudo motion HandleMouseOver method so aggresive. Also, don't call it
-	when the pointer is actually in motion, but only when the pointer
-	seems to stop (as .net does).
-	Fixes part of #381876.
-
-2008-08-15  Ivan N. Zlatev  <contact at i-nz.net>
-
-	* GridEntry.cs: Perform stricter check for the ParentEntry's 
-	PropertyDescriptor/PropertyOwner for the ICustomTypeDescriptor 
-	implementation.
-	[Fixes bug #417567]
-
-2008-08-14  Geoff Norton  <gnorton at novell.com>
-
-	* XplatUICarbon.cs: Properly implement PeekMessage and DoEvents.
-	Fixes #396983.  Properly fix ActiveWindow trackin and do not
-	prematurely show POPUP windows.
-
-2008-08-12  Carlos Alberto Cortez <calberto.cortez at gmail.com> 
-
-	* XplatUIX11.cs: Handle the obscured regions while scrolling using
-	GraphicsExpose event, processing it just after we copy the scrolled
-	area. This ensures that the next calls to ScrollWindow will copy
-	regions already updated, and the scrolling will be smooth. Also remove
-	the code that was trying to detect the obscured regions, since we are
-	not using it anymore (too slow).
-
-2008-08-12  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* ListBox.cs: Fix the -temporary- broken selection in ListBox for
-	MultiExtended mode, by separating some logic between the ctrl/shift
-	handling. Also ignore any MouseMove events generated together with
-	MouseDown events - we are only interested in the real motion event.
-	Fixes part of #414963.
-
-2008-08-08  Jonathan Pobst  <monkey at jpobst.com>
-
-	* DataGridViewCell.cs: Guard against an AOORE when checking if a cell
-	is selected.  [Fixes bug #414143]
-
-2008-08-07  Ivan N. Zlatev  <contact at i-nz.net>
-
-	* GridEntry.cs: Check if current property is a ICustomTypeDescriptor 
-	and not the parent one (the propertyowner). Fixes the behavior of 
-	GetConverter/GetEditor.
-	[Fixes bug #415452]
-
-2008-08-07  Ivan N. Zlatev  <contact at i-nz.net>
-
-	* PropertyGrid.cs: Refresh should also repopulate the PropertyGrid.
-	[Fixes part of bug #415452]
-
-2008-08-05  Ivan N. Zlatev  <contact at i-nz.net>
-
-	* GridEntry.cs: ITypeDescriptorContext should be relative to the parent 
-	GridEntry, not the current.
-	[Fixes bug #413896]
-
-2008-08-04  Ivan N. Zlatev  <contact at i-nz.net>
-
-	* TextBoxBase.cs: De-internalize max_length field.
-	* RichTextBox.cs: Use base.MaxLength - both TextBoxBase and RichTextBox 
-	share the same logic.
-	[Fixes bug #414454]
-
-2008-08-03  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* ListBox.cs: Selection changes made in the MouseDown handler should
-	use the *Core versions of selection in SelectedIndices collection,
-	since the SelectedIndexChanged/SelectedValueChanged events are fired
-	until we get a MouseUp event, and thus we need to separate the logic
-	from the events, as done in the keyboard navigation. Also, fire those
-	selection events from keyboard navigation in SelectionMode.None, even
-	if we don't have a selection, as .Net does.
-
-2008-08-01  Jonathan Pobst  <monkey at jpobst.com>
-
-	* ToolStripButton.cs, ToolStripMenuItem.cs: Guard against a NRE my
-	last change introduced when an item is clicked but isn't on a toolstrip.
-
-2008-07-31  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* ListBindingHelper.cs: When looking for an object's properties, check
-	if it implements ICustomTypeDescriptor, in which case we should
-	resolve the propertu based on its GetProperties method, not in its
-	actual properties. This is what .Net seems to do.
-	Fixes a UsingWebBrowser problem during initialization.
-
-2008-07-31  Jonathan Pobst  <monkey at jpobst.com>
-
-	* ToolStrip.cs: Fix an NRE caused by clicking on a ToolStripButton
-	sitting on a MenuStrip.
-
-2008-07-31  Jonathan Pobst  <monkey at jpobst.com>
-
-	* ToolStripButton.cs: If we "click" a top button on a menustrip that has
-	no children with the keyboard, we need to release the keyboard capture.
-	[Fixes bug #413567]
-
-2008-07-31  Jonathan Pobst  <monkey at jpobst.com>
-
-	* ToolStripMenuItem.cs: If we "click" a top level menu item that has
-	no children with the keyboard, we need to release the keyboard capture.
-	[Fixes bug #413567]
-
-2008-07-31  George Giolfan  <georgegiolfan at yahoo.com>
-
-	* ThemeVisualStyles.cs: Made ScrollBar rendering less strict so it supports
-	the GTK+-based implementation of VisualStyles.
-	* ThemeWin32Classic.cs: Exposed various layout values for use in the
-	GTK+-based implementation of VisualStyles: ListViewGetHeaderHeight(Font),
-	ListViewGetHeaderHeight(), ProgressBarChunkSpacing, ProgressBarGetChunkSize(),
-	ProgressBarGetChunkSize(int), ProgressBarDefaultHeight,
-	TrackBarGetThumbSize(), TrackBarVerticalTrackWidth,
-	TrackBarHorizontalTrackHeight.
-
-2008-07-31  George Giolfan  <georgegiolfan at yahoo.com>
-
-	* TabControl.cs: Added hot style handling for the scroll buttons.
-	right_slider_state, left_slider_state are now of type PushButtonState to
-	allow for a hot state. Added tracking of the mouse button being held down
-	on a tab page. Extracted HasHotElementStyles, RightScrollButtonArea,
-	LeftScrollButtonArea.
-	* Theme.cs, ThemeWin32Classic.cs: Removed TabControlGetLeftScrollRect,
-	TabControlGetRightScrollRect.
-
-2008-07-30  Everaldo Canuto  <ecanuto at novell.com>
-
-	* MenuAPI.cs: Check for null GrabControl on ProcessMnemonic to prevent 
-	runtime errors.
-
-2008-07-30  Ivan N. Zlatev  <contact at i-nz.net>
-
-	* Form.cs: Ensure that we reset the shown_raised flag after 
-	the form is closed, so that we raise the show events the next 
-	time the form is shown.
-	[Fixes bug #413141]
-
-2008-07-30  Ivan N. Zlatev  <contact at i-nz.net>
-
-	* Form.cs: Ensure closing events are raised only once.
-	[Fixes bug #413143]
-
-2008-07-30  Ivan N. Zlatev  <contact at i-nz.net>
-
-	* X11Keyboard.cs: Refactor SendKeyboardInput to accept the keycode, 
-	so that we can successfully generate the LParam in-place instead of 
-	in KeyEvent, which isn't called for e.g. MainMenu. Fixes keyboard 
-	navigation for menus.
-
-2008-07-30  Everaldo Canuto  <ecanuto at novell.com>
-
-	* MenuAPI.cs: When montion don't set the keyboard navigation state to 
-	'navigating'. Fixes bug #411356.
-
-2008-07-30  Everaldo Canuto  <ecanuto at novell.com>
-
-	[Fixed remaining issues of #406773 (#1)]
-	* MenuItem.cs: UpdateMenuItem added to track the shotcut changes.
-
-	* MenuAPI.cs: Don't create tracker on TrackPopupMenu, it will be created in
-	MainMenu (already done) and ContextMenu creation.
-
-	* ContextMenu.cs: Create tracker on construction. 
-
-2008-07-30  Everaldo Canuto  <ecanuto at novell.com>
-
-	* MenuAPI.cs: For ContextMenu set GrabControl on TrackPopupMenu, it make
-	possible to instantiate MenuTracker without GrabControl.
-
-2008-07-30  Everaldo Canuto  <ecanuto at novell.com>
-
-	* MenuAPI.cs: On constructor dont set the GrabControl for non ContextMenu.
-
-	* MainMenu.cs: Set GrabControl on SetForm using current form.
-
-2008-07-30  Everaldo Canuto  <ecanuto at novell.com>
-
-	* MenuAPI.cs: Chage grab_control to GrabControl and make it public.
-
-2008-07-30  Everaldo Canuto  <ecanuto at novell.com>
-
-	* MenuAPI.cs: Check if menu is activated before deactivate it in 
-	ProcessShortcut.
-
-2008-07-30  Ivan N. Zlatev  <contact at i-nz.net>
-
-	* TableLayoutStyleCollection, TableLayoutStyle.cs, RowStyle.cs, 
-	ColumnStyle.cs: 
-	Make the TableLayoutStyle owned by the the TableLayoutPanel, so that:
-	 - One style instance can only participate in a single style collection.
-	 - Styles can request their owner to layout whenever their properties 
-	 change.
-	 [Fixes bugs #412583 and #412582]
-
-2008-07-29  Ivan N. Zlatev  <contact at i-nz.net>
-
-	* X11Keyboard.cs: Implement the generation of the LParam for 
-	all keyboard messages.
-	[Fixes bug #378728]
-
-2008-07-29  Jonathan Pobst  <monkey at jpobst.com>
-
-	* ListBox.cs: Don't let the user set TopIndex so high that it
-	scrolls up far enough to show empty items.
-	[Fixes bug #412728]
-
-2008-07-29  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* ThemeWin32Classic.cs: Actually commit the changes to fix #410880
-	(I'm an idiot and forgot to commit the actual changes, as well as
-	specify the right file, which is this one, not ListView.cs).
-
-2008-07-28  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* ListView.cs: Don't draw ListViewSubItem instances from
-	DrawListViewItem - we need to reuse the main item's drawing for the
-	first sub item in case owner draw is true, but wants the system to
-	do the default draw for the first sub item, without incurring in a
-	recursion problem.
-	Fixes #410880.
-
-2008-07-28  Jonathan Pobst  <monkey at jpobst.com>
-
-	* ToolStripButton.cs: Update Checked for CheckOnClick before
-	raising the Click event.  [Fixes bug #412505]
-
-2008-07-28  Ivan N. Zlatev  <contact at i-nz.net>
-
-	* Form.cs: Remove some seems leftover code for non-TopLevel's 
-	CreateParams, which is breaking ClientSize sizing, because it 
-	removes the border window styles.
-
-2008-07-27  Ivan N. Zlatev  <contact at i-nz.net>
-
-	* PropertyGrid.cs: Invalidate the View when the PropertyTab 
-	changes.
-
-2008-07-25  Gert Driesen  <drieseng at users.sourceforge.net>
-
-	* WebBrowser.cs: Removed debug output.
-
-2008-07-25  Jonathan Pobst  <monkey at jpobst.com>
-
-	* FileDialog.cs: Apply patch from Ernesto to clean up some
-	dialog messages.
-
-2008-07-25  Ivan N. Zlatev  <contact at i-nz.net>
-
-	* TableLayoutPanel.cs: Perform layout on GrowStyle change, so 
-	that the change has an immediate effect.
-
-2008-07-25  Ivan N. Zlatev  <contact at i-nz.net>
-
-	* ScrollableControl.cs: Update PerformLayout calls to include 
-	provide the name of the property that changed.
-
-2008-07-25  Ivan N. Zlatev  <contact at i-nz.net>
-
-	* TableLayoutPanel.cs: Draw relative to the DisplayRectangle 
-	location. Fixes drawing of border and cell borders if scrollable.
-
-2008-07-25  Ivan N. Zlatev  <contact at i-nz.net>
-
-	* ScrollableControl.cs: Perform layouting after the AutoScroll 
-	properties have changed, so that the changes have immediate 
-	effect.
-	[Fixes bug #409090]
-
-2008-07-25  Ivan N. Zlatev  <contact at i-nz.net>
-
-	* XplatUIX11.cs: Non Client area is actually Client such in the 
-	case of NotifyIcon, so double check WholeWindow == ClientWindow 
-	when adding an expose.
-	[Fixes bugs #324237 and #357022]
-
-2008-07-25  Ivan N. Zlatev  <contact at i-nz.net>
-
-	* TableLayoutPanel.cs: Invalidate after layouting, so that we 
-	repaint the cell borders.
-
-2008-07-25  Ivan N. Zlatev  <contact at i-nz.net>
-
-	* PropertyGridTextBox.cs: Stop filtering messages prior to our 
-	disposal to avoid unexpected ObjectDisposedExceptions.
-
-2008-07-24  Ivan N. Zlatev  <contact at i-nz.net>
-
-	* TableLayoutPanel.cs: Layout on Row/Column count change.
-
-2008-07-22  Gert Driesen  <drieseng at users.sourceforge.net>
-
-	* ListViewItem.cs: Changed binary serialization to match MS. Fixes
-	bug #409351.
-	* PictureBox.cs: When ImageLocation is set to null or an empty string,
-	only set image to null if it was previously initialized from an url
-	(or using ImageLocation). In ImageLocation, load specified image
-	asynchronously if WaitOnLoad is false. Added support for local file
-	paths to LoadAsync, and added missing argument check.
-
-2008-07-22  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* DateTimePicker.cs: 
-	* ThemeWin32Classic.cs: Add a editing capability to DateTimePicker, in
-	order to set the value as required (which means: when selection
-	changes for a part being edited, and not before that if not needed).
-	Also use an enum to describe which part are we using, and use the
-	selection as a property in PartData, in order to notify the
-	DateTimePicker owner that we need to end the current edit.
-	Fixes #383462.
-
-2008-07-17  Ivan N. Zlatev  <contact at i-nz.net>
-
-	* PropertyGridTextBox.cs: Validation should be performed only if we 
-	are focused. We can lose focus for example if the Return key is used 
-	to set the entry and there is an error. When the message box is 
-	displayed we would have validate on click in the message box.
-
-2008-07-16  Ivan N. Zlatev  <contact at i-nz.net>
-
-	* GridEntry.cs: Checking for DesignerSerializaitonVisibility.Content 
-	in order to determine that we are expandable is wrong. There was a bug, 
-	now fixed, in TypeDescriptor that was causing the wrong converter to be 
-	returned which caused GetPropertiesSupported == false in most cases.
-	[Fixes bug #409027]
-
-2008-07-15  Jonathan Pobst  <monkey at jpobst.com>
-
-	* ImageList.cs: Fix ICollection.CopyTo implementation for
-	ImageListCollection.  [Fixes bug #409169]
-
-2008-07-14  Jonathan Pobst  <monkey at jpobst.com>
-
-	* MenuAPI.cs, ToolStripDropDown.cs: Use VirtualScreen instead of
-	WorkingArea so that menus can appear on the second monitor
-	when one has dual monitors.
-
-2008-07-14  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* TextBox.cs: Auto complete stuff in WndProc should be 2.0 only.
-	Fixes build.
-
-2008-07-14  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* TextBox.cs: Implement navigation support for auto complete in
-	TextBox, as well as refactor the code to show the auto complete window
-	when receiving a WM_CHAR message, instead of TextChanged, since
-	autocomplete itself should be able to set the Text a lot of times and
-	finally only typing should show it, not changes from code.
-
-2008-07-14  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* TabControl.cs: When expanding the selected tab, don't adjust the
-	width if alignment is Right, since it has a different offset than 0,
-	as opposed to the other alignments.
-	Fixes the selected tab not being painted at all with alignment = Right
-	and using FillToRight size mode.
-
-2008-07-14  Jonathan Pobst  <monkey at jpobst.com>
-
-	* TreeView.cs: Fix ToString to match MS.  [Fixes bug #409029]
-
-2008-07-14  Jonathan Pobst  <monkey at jpobst.com>
-
-	* NumericUpDown.cs: Apply patch from Andy Hume to clamp out of range
-	values from the textbox to the boundary values.  [Fixes bug #409026]
-
-2008-07-14  Jonathan Pobst  <monkey at jpobst.com>
-
-	* TreeNodeCollection.cs: We were copying one too many elements when
-	doing our array copy.  Fixes a crash when RemoveAt is called.
-	[Fixes bug #408999]
-
-2008-07-14  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* TabControl.cs: When doing the layout and need to call FillRow -using
-	FillToRight size mode-, use the overload receiving a bool param
-	indicating whether we need to do a vertical or horizontal calculation.
-	Fixes part of #399583.
-
-2008-07-13  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* TextBox.cs: When painting, use the value returned by
-	GetLastVisibleItem instead of using the cached last_item field, since
-	there could be a desynchronization between the layout and the
-	painting. Fixes a AOOR exception in auto complete mode.
-
-2008-07-12  George Giolfan  <georgegiolfan at yahoo.com>
-
-	* ThemeVisualStyles.cs: Disabled when Application.VisualStyleState is
-	NonClientAreaEnabled until our VisualStyles is modified to allow it.
-
-2008-07-12  Gert Driesen  <drieseng at users.sourceforge.net>
-
-	* TextBox.cs: Fixed NRE in LostFocus. Avoid unnecessary initialization.
-
-2008-07-11  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* TextBox.cs: When focus is lost, if the auto complete listbox is
-	visible, hide it.
-
-2008-07-11  George Giolfan  <georgegiolfan at yahoo.com>
-
-	* InternalWindowManager.cs: HandleSizing: Implemented a better minimum
-	tracking size for tool windows.
-	* Theme.cs, ThemeWin32Classic.cs : Extracted
-	ManagedWindowSpacingAfterLastTitleButton.
-
-2008-07-11  Jonathan Pobst  <monkey at jpobst.com>
-
-	* ThemeEngine.cs: Remove the clearlooks, nice, and old gtk themes.
-	They are bit-rotted and have always been listed as "unsupported".
-
-2008-07-11  Jonathan Pobst  <monkey at jpobst.com>
-
-	* PictureBox.cs: Don't crash if ImageLocation is set to "" or null.
-
-2008-07-11  George Giolfan  <georgegiolfan at yahoo.com>
-
-	* ThemeVisualStyles.cs: Fixed minimized window height adjustment.
-
-2008-07-10  Jonathan Pobst  <monkey at jpobst.com>
-
-	* ListBox.cs: Make sure last_item_visible gets reset before we try
-	to do a layout due to scrollbars appearing or disappearing.
-	[Fixes bug #408139]
-
-2008-07-10  Jonathan Pobst  <monkey at jpobst.com>
-
-	* XPlatUIWin32.cs: Change GetMenuOrigin to calculate borders better
-	for different window themes.  [Fixes bug #339140]
-
-2008-07-10  George Giolfan  <georgegiolfan at yahoo.com>
-
-	* ThemeWin32Classic.cs: Implemented minimized window border width properly,
-	in ManagedWindowBorderWidth.
-
-2008-07-10  Jonathan Pobst  <monkey at jpobst.com>
-
-	* InternalWindowManager.cs: Change MouseMove to take a point, so
-	we can use the same point later on.
-	* MdiWindowManager.cs: Store point sent to MouseMove so we can
-	later reset to it.  On Windows, the Cursor.Position had already
-	changed by the time we were resetting to it.
-	[Fixes bug #363239]
-
-2008-07-10  Jonathan Pobst  <monkey at jpobst.com>
-
-	* InternalWindowManager.cs: Ignore mouse actions on TitleButtons that
-	are inactive.
-	* ThemeWin32Classic.cs: Disable or hide MinimizeBox/MaximizeBox if
-	user requested it.
-	[Fixes bug #398686]
-
-2008-07-10  Jonathan Pobst  <monkey at jpobst.com>
-
-	* MdiWindowManager.cs: Double-clicking on the title bar should not
-	maximize a MDI form if MaximizeBox = false.
-
-2008-07-10  George Giolfan  <georgegiolfan at yahoo.com>
-
-	* ThemeVisualStyles.cs: Fixed a warning.
-
-2008-07-10  George Giolfan  <georgegiolfan at yahoo.com>
-
-	* ThemeVisualStyles.cs: Fixed warnings and formatted.
-
-2008-07-10  George Giolfan  <georgegiolfan at yahoo.com>
-
-	* ThemeVisualStyles.cs: Removed ManagedWindowGetMenuButtonSize. The base
-	implementation produces a better result.
-
-2008-07-10  George Giolfan  <georgegiolfan at yahoo.com>
-
-	* ThemeVisualStyles.cs: Adjusted height and border rendering for minimized
-	windows.
-
-2008-07-10  George Giolfan  <georgegiolfan at yahoo.com>
-
-	* Application.cs: Added VisualStylesEnabled because XplatUI.ThemesEnabled
-	cannot be used from the ThemeEngine constructor.
-	* ThemeEngine.cs: Changed the XplatUI.ThemesEnabled check to
-	Application.VisualStylesEnabled because it does not work on X11.
-
-2008-07-09  Jonathan Pobst  <monkey at jpobst.com>
-
-	* StatusBar.cs: Apply patch from Andy Hume to remove lazy instantiation
-	that we did not always check for, as well as fixes to the IList
-	implementations.  [Fixes bug #402703]
-
-2008-07-09  George Giolfan  <georgegiolfan at yahoo.com>
-
-	* IDeviceContext.cs: Added Dispose.
-
-2008-07-09  George Giolfan  <georgegiolfan at yahoo.com>
-
-	* Control.cs: Added OnSizeInitializedOrChanged.
-	* Form.cs: OnLoadInternal: Added a call to
-	Control.OnSizeInitializedOrChanged.
-	* InternalWindowManager.cs:
-	 * HandleTitleBarMouseMove: No longer invalidates the parent window.
-	 * DrawTitleButton: Extracted Theme.ManagedWindowDrawMenuButton.
-	 * TitleButton: Added Entered.
-	 * TitleButtons.MouseMove: Added handling of TitleButton.Entered.
-	* MdiWindowManager.cs:
-	 * HandleTitleBarMouseMove: Now invalidates the parent window when a mouse
-	 move over the maximized title buttons causes a change.
-	 * IsActive: Can now be called before the window is added to a MDI parent.
-	* Theme.cs: Added ManagedWindowTitleButtonHasHotElementStyle,
-	ManagedWindowDrawMenuButton, ManagedWindowOnSizeInitializedOrChanged.
-	* ThemeVisualStyles.cs: Implemented proper managed window rendering.
-	* ThemeWin32Classic.cs:
-	 * Extracted ManagedWindowDrawTitleBarAndBorders, ManagedWindowDrawTitleButton.
-	 * DrawTitleButton takes a new form parameter.
-	 * Added ManagedWindowTitleButtonHasHotElementStyle,
-	 ManagedWindowDrawMenuButton, ManagedWindowOnSizeInitializedOrChanged.
-
-2008-07-09  George Giolfan  <georgegiolfan at yahoo.com>
-
-	* ThemeEngine.cs: ThemeVisualStyles is now selected if
-	Application.EnableVisualStyles has been called, even if the current system
-	configuration does not support rendering with Visual Styles.
-	* ThemeVisualStyles.cs: Now falls back to ThemeWin32Classic when Visual
-	Styles should not be used.
-
-2008-07-08  Jonathan Pobst  <monkey at jpobst.com>
-
-	* ComboBox.cs: PreferredHeight is not tied to ItemHeight.  Fixes 3rd
-	ComboBox in FormsTest.
-
-2008-07-08  Ivan N. Zlatev  <contact at i-nz.net>
-
-	* ThemeWin32Classic.cs: (ManagedWindowBorderWidth): width 3 is only 
-	for fixed toolwindows.
-
-2008-07-08  George Giolfan  <georgegiolfan at yahoo.com>
-
-	* Form.cs: SetBoundsCore: Added minimum size for minimized windows.
-
-2008-07-07  Ivan N. Zlatev  <contact at i-nz.net>
-
-	* Control.cs: CreateControl just returns if the Control is diposed 
-	and doesn't throw ObjectDisposedException.
-	[Fixes bug #406566]
-
-2008-07-07  Ivan N. Zlatev  <contact at i-nz.net>
-
-	* Control.cs: Do not create the control if the parent isn't created 
-	yet, e.g in the case of a parented form on which .Show is called.
-	It will be created when the parent is made visible/created.
-	Improves #402446.
-
-2008-07-07  Ivan N. Zlatev  <contact at i-nz.net>
-
-	* Form.cs: Avoid recursively calling OnSizeChanged due to recursive 
-	WM_WINDOWPOSCHANGED caused by the layouting code on win32.
-	[Fixes bug #406786]
-
-2008-07-07  Ivan N. Zlatev  <contact at i-nz.net>
-
-	* Form.cs: When disposed set owner to null. Improves #402446.
-
-2008-07-07  Ivan N. Zlatev  <contact at i-nz.net>
-
-	* Form.cs, FlowLayoutPanel.cs: When calculating the PreferredSize 
-	use children's PreferredSize if in AutoSize mode and ExplicitBounds 
-	if not.
-	* Form.cs: Take the Padding into account for the PreferredSize.
-	[Fixes bug #402849]
-
-2008-07-07  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* TabControl.cs: Since we don't support more than one direction in
-	TabControl rows alignment (this is, the row becomes the
-	bottom row when selected), make Direction return always 1. This way
-	the layout doesn't get confused about a bad calculation.
-	Fixes #399582.
-
-2008-07-07  Ivan N. Zlatev  <contact at i-nz.net>
-
-	* XplatUIX11.cs: Implement NC hit-testing for mouse down/up messages, 
-	so that the wparam is properly set.
-	Fixes form moving in the test case in bug 402446.
-
-2008-07-07  Jonathan Pobst  <monkey at jpobst.com>
-
-	* FolderBrowserDialog.cs: If we can't find the SelectedPath, display
-	the full tree instead of nothing.  [Improves bug #406584]
-
-2008-07-07  George Giolfan  <georgegiolfan at yahoo.com>
-
-	* ThemeWin32Classic.cs: Adjusted minimized window painting.
-
-2008-07-07  George Giolfan  <georgegiolfan at yahoo.com>
-
-	* InternalWindowManager.cs: No longer draws decorations for maximized MDI
-	children.
-
-2008-07-04  Jonathan Pobst  <monkey at jpobst.com>
-
-	* TreeView.cs: Add a null check when using CollapseAll on an
-	empty tree.  [Fixes bug #406449]
-
-2008-07-03  Jonathan Pobst  <monkey at jpobst.com>
-
-	* Form.cs: Make OnMenuComplete internal so we can call it.
-	* MenuAPI.cs: Raise Form.MenuComplete when a menu item is clicked.
-	[Fixes bug #399321]
-
-2008-07-03  Jonathan Pobst  <monkey at jpobst.com>
-
-	* TabControl.cs: Handle Up and Down keys when TabControl is in
-	vertical alignment.
-	[Fixes bug #399585]
-
-2008-07-03  Jonathan Pobst  <monkey at jpobst.com>
-
-	* TabControl.cs: Invalidate when we remove a tab.  Guard against
-	an AOORE when trying to remove a tabpage that is not owned by the
-	parent control.
-	[Fixes bug #399927]
-
-2008-07-03  Jonathan Pobst  <monkey at jpobst.com>
-
-	* ScrollBar.cs: Change the LargeChange calculation to be correct.
-	Ensure we are using LargeChange instead of large_change so we our
-	calculations are correct.
-	[Fixes bug #403122]
-
-2008-07-03  Jonathan Pobst  <monkey at jpobst.com>
-
-	* TableLayoutPanel.cs: When we change to a serialized TableLayoutSettings,
-	we need to ensure the ColumnCount/RowCount gets set.
-	[Fixes bug #404851]
-
-2008-07-02  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* ListBox.cs: When handling item navigation, if selection mode is
-	None, call EnsureVisible, since scrolling is normally handled by
-	selection, that we are not calling in this case.
-	Fixes #398345.
-
-2008-07-02  Jonathan Pobst  <monkey at jpobst.com>
-
-	* ContainerControl.cs: Apply a patch from Ernesto Carrea that adds
-	a null check to our focus walking code.  [Fixes bug #394332]
-
-2008-07-02  Andy Hume <andyhume32 at yahoo dot co dot uk>
-
-        * ComboBox.cs: Case missed in bug 379596 "Support item
-        navigation by entering text": On _close_ drop-down select
-        the first item matching the text in the textbox.  [Fixes bug #397265]
-
-2008-07-02  Jonathan Pobst  <monkey at jpobst.com>
-
-	* DataGridView.cs: Fix a crash when sorting by column headers, 
-	mentioned in bug #404841.  Remove some dead switch cases.
-
-2008-07-01  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* ComboBox.cs:
-	* TextBox.cs: Implement AutoComplete support for ComboBox, which just
-	uses the AutoComplete support in the internal TextBox. Also TextBox
-	can store a reference to ComboBox, in case AutoCompleteSource is set
-	to ListItems (this is, ComboBox's items, and we don't want to pass an
-	additional collection).
-
-2008-07-01  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* ListViewItem.cs: Restore the initial value of bounds rect to
-	Rectangle.Empty, and is this value for Layout detection in virtual
-	mode. Fixes the tests.
-
-2008-06-30  Jonathan Pobst  <monkey at jpobst.com>
-
-	* XPlatUI.cs: Remove references to "new" X11 backend.
-
-2008-06-28  Ivan N. Zlatev  <contact at i-nz.net>
-
-	* Control.cs: Add an internal virtual OnDragDropEnd method 
-	to allow controls such as ListBox, which depend on a sequence 
-	of MouseDown+Move+End events, to handle the lack of a MouseUp 
-	when a DnD operation is started in MouseDown.
-	* ListBox.cs: If a DnD operation is started in MouseDown we won't 
-	get a MouseUp, so reset our state whenever a DnD operation ends.
-
-2008-06-28  Ivan N. Zlatev  <contact at i-nz.net>
-
-	* PropertyGrid.cs: Clear the root griditem first thing when 
-	new object/s is/are selected. Fixes some rare cases where 
-	the View will get a paint request and won't know that the 
-	grid is in the process of repopulating.
-
-2008-06-27  Ivan N. Zlatev  <contact at i-nz.net>
-
-	* XplatUIX11.cs, InternalWindowManager.cs: 
-	If WS_EX_TOOLWINDOW is set in the CreateParams for a form MS 
-	doesn't automagically update the FormBorderStyle, so we must 
-	double check the CreateParams explicitly to determine if the 
-	window is a toolwindow.
-	* ThemeWin32Classic.cs: Use InternalWindowManager.IsToolWindow 
-	instead of doing custom checks.
-
-	Fixes toolwindows for the test case in bug #402446
-
-2008-06-27  Ivan N. Zlatev  <contact at i-nz.net>
-
-	* Control.cs: Visibility of the control should be false 
-	when the handle is destroyed in WmDestroy and not immediately 
-	in Dispose(). This is effectively where the disposing process 
-	ends even though the control is marked as Disposed immediately 
-	after calling Dispose().
-	[Fixes bug #402446]
-
-2008-06-27  Ivan N. Zlatev  <contact at i-nz.net>
-
-	* PropertyGridTextBox.cs: Start monitoring the mouse clicks 
-	when the textbox gets focus.
-	[Fixes bug #402704]
-
-2008-06-27  Ivan N. Zlatev  <contact at i-nz.net>
-
-	* PropertyGridTextBox.cs, PropertyGridView.cs: 
-	 - Alt + Down should show the drop down editor.
-	 - Focus the editor when showing it
-	[Fixes bug #402710]
-
-2008-06-25  Jonathan Pobst  <monkey at jpobst.com>
-
-	* ThemeWin32Classic.cs: Fix from Andy for panel text for panels
-	that are not the first panel.
-	* StatusBar.cs: Ensure that the X coordinate of panels is always
-	stored.  Fix IList implementation of StatusBarPanelCollection to
-	call the regular methods.
-	[Fixes bug #403599, #402165]
-
-2008-06-23  Jonathan Pobst  <monkey at jpobst.com>
-
-	* ThemeWin32Classic.cs: Fix position calculation for centered
-	text on status bar panels.  [Fixes bug #402165]
-
-2008-06-22  Ivan N. Zlatev  <contact at i-nz.net>
-
-	* Splitter.cs: Fix Splitter to:
-	 - Work for arbitrary splitter size
-	 - Handle MinSize and MinExtra properly
-	 - Get rid of absolute positioning during drag and use relative
-	 - Multiple other fixes 
-	 [Fixes bug #338966]
-
-2008-06-22  Ivan N. Zlatev  <contact at i-nz.net>
-
-	* Cursor.cs: Show shouldn't hide the cursor.
-
-2008-06-21  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* ListViewItem.cs: When invalidating, add some extra space to bounds,
-	since focus rectangle and selection can add some space and need to
-	take into account those small offsets - specially in Details view.
-	* ListView.cs: Instead of invalidate using item Bounds directly, call
-	item.Invalidate, to have the code centralized.
-	Fixes focused/selection garbage when selecting and deselecting items
-	that are close.
-
-2008-06-21  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* ListViewItem.cs: Set bounds initially to -1 values - thus in virtual
-	mode we can check whether we have to force a Layout or not, and can
-	cache based on this, instead of avoiding caching all the the time. Do
-	this check in GetBounds and TextBounds.
-	Fixes selection in Details view.
-
-2008-06-20  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* ListView.cs: Make HeaderControl internal, thus the theme engine can
-	get its *real* height instead of trying to infere it.
-	* ThemeWin32Classic.cs: When drawing gridlines, don't iterate over the items to
-	get the position of them, since it's in general a bad idea in general,
-	and because we can't do that in virtual mode. Instead get the first
-	visible item as well as item height, and draw them.
-	Fixes #400390.
-
-2008-06-20  Jonathan Pobst  <monkey at jpobst.com>
-
-	* ToolStripSplitButton.cs: We can't add in extra width if
-	the button is not AutoSize.  [Fixes bug #401279]
-
-2008-06-20  Ivan N. Zlatev  <contact at i-nz.net>
-
-	* PaddingConverter.cs: 
-	 - Implement conversion to InstanceDescriptor
-	 - Handle "All" in CreateInstance by using the supplied 
-	 ITypeDescriptorContext.
-	 [Fixes bugs #396076 and #396078]
-
-	 Patch by Andy Hume  <andyhume32 at yahoo.co.uk>
-         Code contributed under MIT/X11 license.
-
-2008-06-19  Andy Hume <andyhume32 at yahoo dot co dot uk>
-
-        * ComboBox.cs, ListControl.cs, Control.cs, Button.cs, 
-	ButtonBase.cs:
-	Add Category attributes.
-	Code is contributed under the MIT/X11 license.
-
-2008-06-18  Ivan N. Zlatev  <contact at i-nz.net>
-
-	* Form.cs: 
-	 - Fix a NRE when unparenting a form.
-	 - Do not recreate or destroy a parented form when 
-	unparenting. 
-
-2008-06-18  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* TextBox.cs: Implement basic support for AutComplete with custom
-	sources.
-
-2008-06-18  Jonathan Pobst  <monkey at jpobst.com>
-
-	* ToolStripSplitButton.cs: Left and Top of ButtonBounds, SplitterBounds,
-	DropDownButtonBounds should be from the origin of the button, not the
-	ToolStrip.  [Fixes bug #401279]
-
-2008-06-16  Sandy Armstrong <sanfordarmstrong at gmail.com> 
-
-	* X11DesktopColors.cs: Clear GTK_MODULES environment variable before
-	  running gtk_init_check.  This prevents GAIL from loading
-	  unnecessarily, which was breaking UIA support.  Initial fix for bug
-	  #375987.
-	* Application.cs: Add UIA support to Winforms.  New static constructor
-	  uses reflection to initialize UIAutomationWinforms assembly.  Added
-	  PreRun event so UIA can initialize before the mainloop starts, and
-	  FormAdded event so UIA can provide a11y support for new Forms in an
-	  Application.
-
-2008-06-16  Jonathan Pobst  <monkey at jpobst.com>
-
-	* DataGridView.cs: When binding to a dataset, subscribe to table
-	and column change events.  Unsubscribe to these when we clear bindings.
-	[Fixes bug #399601]
-
-2008-06-14  Everaldo Canuto  <ecanuto at novell.com>
-
-	[DataGrid drawing refactory]
-
-	* DataGrid.cs: Fix the caption size, we need one pixel more for divider.
-
-	* DataGridColumnStyle.cs: Removing PaintHeader code, the draw operations
-	must be handle by Theme, now it call DataGridPaintColumnHeader.
-
-	* DataGridTextBoxColumn.cs: Fix the textbox size. It must be one pixel less,
-	test cases must be also fixed because it checks for wrong size.
-
-	* ThemeWin32Classic.cs: 
-		- Draw the bottom line of grid caption.
-		- Prevent to draw caption text when it is empty.
-		- Use CPDrawBorder3D for 3D efects to simplify code.
-		- Uses 3D (when not flat) to paint corner shared between row and column
-		header.
-		- Fix header drawing issues on win32, now borders are drawing.
-		- Fix column header paint issues to mimic win32.
-		- Adjust header drawing for last column, like first one it must be draw
-		different.
-		- Added DataGridPaintRowHeaderStar to draw star like .net does, it is
-		not an character.
-		- DataGridPaintColumnHeader created to draw column headers, it also
-		paint stuff right on Win32.
-		- Use DataGridPaintColumnHeader method instead of DataGridColumnStyle 
-		class.
-
-	* Theme.cs: 
-		- DataGridPaintRowHeaderStar method added.
-		- DataGridPaintColumnHeader method added.
-
-2008-06-13  Jonathan Pobst  <monkey at jpobst.com>
-
-	* Control.cs: Don't reset to Dock style layout if DockStyle is
-	set to none.  [Fixes bug #399316]
-
-2008-06-12  Everaldo Canuto  <ecanuto at novell.com>
-
-	* Win32DnD.cs: Fix the check for control not equal null.
-	Fixes bug #341420 and #381886. 
-
-2008-06-12  Jonathan Pobst  <monkey at jpobst.com>
-
-	* DataGridViewRowCollection.cs: Update the indexes of rows after
-	one has been removed.
-	* DataGridViewSelectedRowCollection.cs: Add internal clear method.
-	* DataGridViewSelectedColumnCollection.cs: Add internal clear method.
-	* DataGridView.cs: Add support for deleting rows via Delete key, deleting
-	rows for the Rows collection, or deleting rows from the bound DataSet.
-
-2008-06-12  Jonathan Pobst  <monkey at jpobst.com>
-
-	* DataGridView.cs: Listen to a DataSet's changed event even
-	when autogeneratecolumns is false.  Refactor the changed event's
-	add row code to use the same as the existing add row code.
-	[Fixes bug #399601]
-
-2008-06-11  Jonathan Pobst  <monkey at jpobst.com>
-
-	* TextBoxBase.cs: We need to call RaiseSelectionChanged pretty
-	much any time the caret moves and there is text, not just when
-	the selection changes as one would think.
-	* RichTextBox.cs: Override RaiseSelectionChanged and fire
-	SelectionChanged.
-	[Fixes bug #397271]
-
-2008-06-11  Jonathan Pobst  <monkey at jpobst.com>
-
-	* FontDialog.cs: Forward ListBox keyboard events to the ListBox
-	instead of trying to duplicate the code.
-	* ListBox.cs: Make method internal so we can send keyboard events.
-	[Fixes bug #398344]
-	
-2008-06-11  Jonathan Pobst  <monkey at jpobst.com>
-
-	* TextBoxBase.cs: When pasting and checking the max length,
-	subtract the selected text length (the text we will be replacing) from
-	the document length.
-	* TextControl.cs: Ensure every character insertion is reflected in
-	charcount, so max length will work properly.
-	[Fixes bug #398605]
-
-2008-06-11  Jonathan Pobst  <monkey at jpobst.com>
-
-	* ListBox.cs: Ensure scrollbars are updated when a single
-	column listbox with an already set top-index is created.
-	[Fixes bug #398342]
-
-2008-06-11  Jonathan Pobst  <monkey at jpobst.com>
-
-	* FontDialog.cs: Typing in the font/style textboxes should search
-	the list boxes case-insensitively.  [Fixes bug #398343]
-
-2008-06-11  George Giolfan  <georgegiolfan at yahoo.com>
-
-	* ThemeWin32Classic.cs: Managed window title bar layout now uses actual
-	widths of icon and buttons instead of hard coded values.
-
-2008-06-10  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* ListBox.cs: When SelectionMode is None, clicking an item should move focus
-	as well as generating a SelectedIndexChanged event, just like .Net does
-	-surprise-.
-	Fixes #398345.
-
-2008-06-10  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* ListBox.cs: When navigating items visually, use FocusedItem as the
-	reference point instead of SelectedIndex, since even in
-	SelectionMode.None we need to support navigation, and in that case we
-	just can't use SelectedIndex.
-	Fixes part of #398345.
-
-2008-06-10  Jonathan Pobst  <monkey at jpobst.com>
-
-	* Control.cs: Make a SetBoundsInternal that avoids the new
-	SetBounds code.
-	* ComboBox.cs, Form.cs, ListBox.cs, ScrollableControl.cs: Use
-	SetBoundsInternal instead of SetBoundsCoreInternal.
-
-2008-06-10  Ivan N. Zlatev  <contact at i-nz.net>
-
-	* ScrollableControl.cs: Use SetBoundsCoreInternal instead of 
-	SetBounds for the scrollbars.
-
-2008-06-10  Andreia Gaita <avidigal at novell.com> 
-
-	* HtmlDocument.cs: Implement RightToLeft, ContextMenuShowing,
-	  FocusingEvent, LosingFocusEvent, OnMouseDown, OnMouseLeave,
-	  OnMouseMove, OnMouseOver, OnMouseUp
-	* HtmlElement.cs: Optimize InsertBefore. Implement RemoveFocus,
-	  ScrollIntoView, Focusing, GotFocus, LosingFocus, LostFocus.
-	* HtmlElementCollection.cs, HtmlWindowCollection.cs: Keep a reference
-	  to the WebControl object to pass to new collection objects
-	* HtmlHistory.cs: Implement support for individual window histories.
-	* HtmlWindow.cs: Implement History, Position, Size, WindowFrameElement,
-	  AttachEventHandler, DetachEventHandler, RemoveFocus, Error,
-	  GotFocus, LostFocus, OnLoad, OnUnload
-	* WebBrowser.cs: Implement EncryptionLevel, ScrollBarsEnabled,
-	  ContextMenu
-	* WebBrowserBase.cs: Implement Cursor, Enabled, UseWaitCursor, Add
-	  security level changes and context menu event support.
-
-2008-06-10  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* ComboBox.cs: Pressing Enter should close the dropdown listbox, just
-	as happens with Esc, patch my Andy Hume.
-	Fixes #396294.
-
-2008-06-10  George Giolfan  <georgegiolfan at yahoo.com>
-
-	* MdiWindowManager.cs: DrawMaximizedButtons now uses
-	ManagedWindowGetMenuButtonSize instead of ManagedWindowButtonSize.
-	* Theme.cs: Made MenuButtonSize platform dependent. Added
-	ManagedWindowButtonSize.
-	* ThemeWin32Classic.cs: Added ManagedWindowGetMenuButtonSize.
-	* XplatUI.cs, XplatUIDriver.cs, XplatUIWin32.cs: Added MenuButtonSize.
-
-2008-06-10  George Giolfan  <georgegiolfan at yahoo.com>
-
-	* DateTimePicker.cs, Theme.cs, ThemeVisualStyles.cs, ThemeWin32Classic.cs:
-	Added support for rendering with VisualStyles.
-
-2008-06-10  George Giolfan  <georgegiolfan at yahoo.com>
-
-	* ComboBox.cs, Theme.cs, ThemeVisualStyles.cs, ThemeWin32Classic.cs: Added
-	support for rendering the border with VisualStyles.
-
-2008-06-10  George Giolfan  <georgegiolfan at yahoo.com>
-
-	* InternalWindowManager.cs: Added ShowIcon. Fixed IconRectangleContains when
-	the icon is not shown.
-	* ThemeWin32Classic.cs: Now uses InternalWindowManager.ShowIcon instead of
-	its own logic.
-
-2008-06-10  George Giolfan  <georgegiolfan at yahoo.com>
-
-	* InternalWindowManager.cs: Draw minimized windows even if they don't have
-	borders.
-
-2008-06-09  Jonathan Pobst  <monkey at jpobst.com>
-
-	* ComboBox.cs, ListBox.cs: Use SetBoundsInternalCore instead of SetBounds.
-
-2008-06-09  Jonathan Pobst  <monkey at jpobst.com>
-
-	* Control.cs: Fill in the defaults for unspecified bounds in SetBounds.
-	[Fixes bug #397943]
-
-2008-06-06  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* ComboBox.cs: When snaping height -because of IntegralHeight set to
-	true- with ComboBoxStyle.Simple, set the height to PreferredHeight
-	if the requested height leaves the listbox area with *less* than the
-	required are to see one item. We were setting it to PreferredHeight
-	even for values matching the height for a single item.
-	Fixes #396297.
-
-2008-06-06  Jonathan Pobst  <monkey at jpobst.com>
-
-	* DataGridViewCell.cs: Simplify GetInheritedStyle by using ApplyStyle.
-
-2008-06-06  Jonathan Pobst  <monkey at jpobst.com>
-
-	* DataGridViewCell.cs: Use property instead of field.
-
-2008-06-06  George Giolfan  <georgegiolfan at yahoo.com>
-
-	* InternalWindowManager.cs, ThemeWin32Classic.cs: Removed useless Form.Icon
-	null checks.
-
-2008-06-06  George Giolfan  <georgegiolfan at yahoo.com>
-
-	* Theme.cs: Added #region around the managed window code. Made the managed
-	window methods abstract.
-	* ThemeWin32Classic.cs: Added #region around the managed window code.
-
-2008-06-06  George Giolfan  <georgegiolfan at yahoo.com>
-
-	* InternalWindowManager.cs: Now only calls Theme.DrawManagedWindowDecorations
-	if it has borders.
-	* ThemeWin32Classic.cs: Removed HasBorders checks in
-	DrawManagedWindowDecorations.
-
-2008-06-06  George Giolfan  <georgegiolfan at yahoo.com>
-
-	* InternalWindowManager.cs, Theme.cs, ThemeWin32Classic.cs: Refactored:
-	Extracted ManagedWindowGetTitleBarIconArea.
-
-2008-06-05  Jonathan Pobst  <monkey at jpobst.com>
-
-	* DataGridViewCellStyle.cs: Don't clone the font.
-
-2008-06-05  Jonathan Pobst  <monkey at jpobst.com>
-
-	* DataGridViewCell.cs: Ensure we don't pass null to GetConverter.
-
-2008-06-05  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* XplatUIX1..cs: Use IntPtr size instead of int, as wee need to work
-	also on 64 bit machinges. Fixes the BadWindow errors while scrolling
-	in 64 bit machines.
-
-2008-06-05  Jonathan Pobst  <monkey at jpobst.com>
-
-	* DataGridViewCell.cs: Correctly get converters for FormattedValue.
-	Use Format/FormatProvider before trying converters.
-	* DataGridViewCellStyle.cs: ApplyStyle should only apply things that
-	are 'set'.  Change constructor to not use ApplyStyle since it wants
-	everything applied.  Clone the Font.
-	* DataGridViewRowHeaderCell.cs: Start with DefaultCellStyle and
-	ApplyStyle the rest.
-
-2008-06-05  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* ListView.cs: We need to calculate the scrollbars even if the handle
-	hasn't been created - this is needed when methods using scrollbars
-	info, such EnsureVisible, are called before control has been created.
-	Fixes #397272.
-
-2008-06-05  George Giolfan  <georgegiolfan at yahoo.com>
-
-	* ThemeVisualStyles.cs: ScrollBar is now rendered with the VisualStyles API
-	only if the elements are defined. 
-
-2008-06-04  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* ComboBox.cs: I'm an idiiot - forgot to commit the last ComboBox
-	section. Also, when setting bounds, snap height as well as save the
-	requested height if Dock has any value affecting the height: Left,
-	Right and Bottom - important if using IntegralHeight as true.
-
-2008-06-04  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* ComboBox.cs: When calling UpdateComboBoxBounds, adjust the height
-	passed to SetBounds to reflect the new adjusted height (Integral-wise), 
-	instead of doing that only in our SetBoundsCore override, since the 
-	bounds cached can be the same as saved one and we could not get the
-	new height applied.
-	Fixes #396297.
-
-2008-06-04  George Giolfan  <georgegiolfan at yahoo.com>
-
-	* Theme.cs: Made ToolWindowCaptionButtonSize platform dependent.
-	* XplatUI.cs: Added ToolWindowCaptionButtonSize.
-	* XplatUIDriver.cs: Changed SmallCaptionButtonSize to 15,15. Added
-	ToolWindowCaptionButtonSize.
-	* XplatUIWin32.cs: Added ToolWindowCaptionButtonSize.
-
-2008-06-04  George Giolfan  <georgegiolfan at yahoo.com>
-
-	* MdiWindowManager.cs: Now uses SystemInformation.DoubleClickTime instead of
-	hard coded values.
-	* Theme.cs: Made DoubleClickTime plaform dependent.
-
-2008-06-04  George Giolfan  <georgegiolfan at yahoo.com>
-
-	* Theme.cs: Made ToolWindowCaptionHeight platform dependent.
-	* XplatUI.cs, XplatUIDriver.cs, XplatUIWin32.cs: Added
-	ToolWindowCaptionHeight.
-
-2008-06-04  George Giolfan  <georgegiolfan at yahoo.com>
-
-	* InternalWindowManager.cs: The adjustment to ensure positive client area
-	sizes is now platform dependent (disabled on Windows).
-	* XplatUI.cs, XplatUIDriver.cs, XplatUIWin32.cs: Added
-	RequiresPositiveClientAreaSize.
-
-2008-06-04  George Giolfan  <georgegiolfan at yahoo.com>
-
-	* Form.cs: Fixed null handling in Icon (see SettingIconToNull in the tests).
-
-2008-06-04  George Giolfan  <georgegiolfan at yahoo.com>
-
-	* InternalWindowManager.cs: Changed IconicSize to use
-	SystemInformation.MinimizedWindowSize.
-	* XplatUICarbon.cs, XplatUIX11.cs: Removed MinimizedWindowSize.
-	* XplatUIDriver.cs: Changed MinimizedWindowSize to provide a default value.
-
-2008-06-04  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* ComboBox.cs: If the combobox is anchored both on top and bottom,
-	adjust height if IntegralHeight is true when calling SetBoundsCore (as
-	likely the height was modified even if Height wasn't specified in
-	BoundsSpecified parameter).
-	Fixes part of #396297.
-
-2008-06-04  George Giolfan  <georgegiolfan at yahoo.com> 
-
-	* InternalWindowsManager.cs: Changed minimum window size while resizing to
-	SystemInformation.MinWindowTrackSize.
-	* XplatUICarbon.cs, XplatUIX11.cs: Removed MinWindowTrackSize.
-	* XplatUIDriver.cs: Changed MinWindowTrackSize to provide a default value.
-
-2008-06-03  George Giolfan <georgegiolfan at yahoo.com> 
-
-	* MenuItem.cs: Fixed Dispose.
-
-2008-06-03  George Giolfan <georgegiolfan at yahoo.com> 
-
-	* ColumnHeader.cs: CalcColumnHeader now uses the theme to get the height.
-	* DataGridView.cs: * EnableHeadersVisualStyles: Fixed default value.
-	EnteredHeaderCell, PressedHeaderCell: Added.
-	* DataGridViewCell.cs: Refactored: Extracted GetBorderPen.
-	* DataGridViewColumnHeaderCell.cs, DataGridViewRowHeaderCell.cs: Gave the
-	theme a chance to override default painting.
-	* ListView.cs: Added EnteredColumnHeader. Refactored: Extracted
-	GetColumnHeaderInvalidateArea, Invalidate(ColumnHeader).
-	* Theme.cs, ThemeVisualStyles.cs, ThemeWin32Classic.cs: Added members for
-	ListView and DataGridView header rendering.
-	
-2008-06-03  Ivan N. Zlatev  <contact at i-nz.net>
-
-	* RichTextBox.cs: GetPositionFromCharIndex should return the 
-	visual position of the character relative to the viewport.
-	[Fixes part of bug #396664]
-
-2008-06-03  Ivan N. Zlatev  <contact at i-nz.net>
-
-	* GridEntry.cs: Make HasCustomEditor check for EditStyle != None 
-	and not just for the existance of an UITypeEditor. In some cases 
-	there is an editor associated just to do PaintValue, but which 
-	doesn't actually support editing.
-	[Fixes bug #396632]
-
-2008-05-02  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* ComboBox.cs: page_size as well as vscrollbar.LargeChange should be 1
-	if needed, instead of 0 - this should help us in the corner case where
-	we have more than one item but we are only partially showing 1 item.
-	Fixes part of #374713.
-
-2008-05-02  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* XplatUiX11.cs: When scrolling and detecting the obscured areas in a
-	control, return immediately if the any parent control's handle hasn't
-	been created or isn't visible, as well as avoiding creating the parent
-	Form if the handle hasn't been previously created.
-	Fixes tests.
-
-2008-06-02  Jonathan Pobst  <monkey at jpobst.com>
-
-	* TableLayoutPanel.cs: Use border sizes when calculating the
-	panel's preferred size.  [Fixes part of bug #396433]
-
-2008-06-02  Ivan N. Zlatev  <contact at i-nz.net>
-
-	* SplitContainer.cs:
-	 - Fix SplitterDistance to update only if needed. 
-	 - Make it force min and max validation.
-	 - Handle properly mouse moves outside the resizeable area.
-	 [Fixes bug #396232]
-
-2008-06-02  Andreia Gaita <avidigal at novell.com> 
-
-	* WebBrowserBase.cs: Implement support for ScriptErrorsSuppressed
-	  (which also suppresses all popup dialogs). Throw NotSupported
-	  exceptions for activex getters/setters.
-	* WebBrowser.cs: Implement DocumentStream, DocumentType, IsBusy,
-	  IsOffline, ReadyState, ScriptErrorsSuppressed, ScrollbarsEnabled,
-	  StatusText, Version, GoSearch
-	* HtmlDocument.cs: Add DocType support
-
-2008-06-02  Andy Hume  <andyhume32 at yahoo.co.uk>
-
-	* TextBox.cs: Implement TextBoxAutoCompleteSourceConverter.
-	[Fixes bug 396124]
-
-2008-06-02  Ivan N. Zlatev  <contact at i-nz.net>
-
-	* GridEntry.cs: Pass the ITypeDescriptorContext everywhere.
-
-2008-06-02  Jonathan Pobst  <monkey at jpobst.com>
-
-	* TableLayoutPanel.cs: When calculating preferred size, use the
-	actual number of columns and rows, not what the user set them to.
-	[Fixes bug #396141]
-
-2008-06-02  George Giolfan <georgegiolfan at yahoo.com> 
-
-	* Form.cs: Enabled managed handling of tool window MDI children. Fixes bug
-	394311.
-
-2008-06-01  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* XplatUIX11.cs: When detecting areas obscured in a control by other
-	toplevel windows while scrolling, return if the control hasn't a 
-	container form.
-	Fixes some tests.
-
-2008-05-01  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* XplatUIX11.cs: Properly detect the visible area of a control being
-	scrolled (obscured by other winforms controls and any X toplevel
-	windows), to mark as invalid the requested area to be scrolled that
-	isn't visible and thus can't be copied.
-	Fixes #324513.
-
-2008-05-30  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* ListBox.cs: Compute the precise amount to vertically scroll when
-	using DrawMode.OwnerDrawVariable.
-	Patch by jkeymer (j.keymer at gmx.net).
-
-2008-05-30  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* ComboBox.cs: Use ListBox-like scrollbar values In ComboListBox 
-	to avoid setting an invalid value for the verticall scrollbar 
-	when navigating items. And, duh, also remove my silly debug messages
-	from previous commits.
-	Fixes #374713.
-
-2008-05-30  Ivan N. Zlatev  <contact at i-nz.net>
-
-	* FlatButtonAppearance.cs: Make FlatButtonAppearanceConverter exandable and 
-	make it MS compatible.
-
-2008-05-30  Ivan N. Zlatev  <contact at i-nz.net>
-
-	* PropertyGrid.cs, PropertyGridView.cs, GridEntry.cs: 
-	 - Allow the editing of entries even if their parent is read-only.
-	 - Do not render expandable properties read-only.
-	 - Refactor expansion checks form PropertyGrid into PropertyGrid.
-
-2008-05-30  George Giolfan <georgegiolfan at yahoo.com> 
-
-	* ScrollBar.cs, Theme.cs, ThemeVisualStyles.cs, ThemeWin32Classic.cs: Added
-	support for the hover style.
-
-2008-05-29  Andreia Gaita <avidigal at novell.com> 
-
-	* ContainerControl.cs: Check for null dead-end when traversing the tree
-	  of parent controls.
-	
-	  [Fixes #394332, patch by Ernesto Carrea]
-
-2008-05-29  Geoff Norton  <gnorton at novell.com>
-
-	* XplatUICarbon.cs: Fix a culture-dependent conversion to be the
-	constant that it is.  Fixes #393981
-
-2008-05-29  Jonathan Pobst  <monkey at jpobst.com>
-
-	* Form.cs: Add a MonoTODO to the AutoScaleBaseSize setter explaining
-	that the user probably doesn't want to set this.
-
-2008-05-29  Jonathan Pobst  <monkey at jpobst.com>
-
-	* ThemeWin32Classic.cs: Don't let the text size be bigger than
-	the control size for CheckBox/RadioBox.
-	[Fixes part of bug #394645]
-
-2008-05-29  Ivan N. Zlatev  <contact at i-nz.net>
-
-	* PropertyGrid.cs: Update the state of the sorting buttons in 
-	the toolbar if PropertySort is set programatically.
-
-2008-05-29  Ivan N. Zlatev  <contact at i-nz.net>
-
-	* GridItemCollection.cs: Add multiple items with conflicting names 
-	support and also preserve name ordering.
-	[Fixes #395345]
-
-2008-05-29  Ivan N. Zlatev  <contact at i-nz.net>
-
-	* GridItemCollection.cs: Revert my multiple items with same 
-	name patch.
-
-2008-05-28  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* ScrollBar.cs: Scrollbars should only react to left-clicks, not right
-	or middle ones.
-	Fixes part of #393908.
-
-2008-05-28  Jonathan Pobst  <monkey at jpobst.com>
-
-	* ToolStripDrowDown.cs: When using the Show () methods that have a
-	Control parameter, set the menu owner to that Control.
-	[Fixes bug #394345]
-
-2008-05-28  Ivan N. Zlatev  <contact at i-nz.net>
-
-	* PropertyGridTextBox.cs, PropertyGridView.cs: Implement validation.
-	[Fixes bug #362756]
-
-2008-05-27  Ivan N. Zlatev  <contact at i-nz.net>
-
-	* GridItemCollection.cs: Refactor to support multiple items with the 
-	same name.
-	[Fixes bug #394314]
-
-2008-05-27  Jonathan Pobst  <monkey at jpobst.com>
-
-	* Control.cs: The 2.0 check for illegal cross thread calls in 
-	Control.Handle were throwing an exception when we were getting
-	the Handle in order to invoke correctly.  Created a private
-	version that does not contain this check.
-	[Fixes bug #394531]
-
-2008-05-27  Ivan N. Zlatev  <contact at i-nz.net>
-
-	* PropertyGrid.cs: Respect DefaultTabType.
-
-2008-05-27  Ivan N. Zlatev  <contact at i-nz.net>
-
-	* ListView.cs: SPACE selects an item.
-	[Fixes bug #393023]
-
-2008-05-27  Ivan N. Zlatev  <contact at i-nz.net>
-
-	* ListView.cs: Reset the search string whenever the items are 
-	modified.
- 	[Fixes bug #393020]
-
-2008-05-25  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* ListControl.cs: For the first added item PositionChanged is fired
-	_before_ ItemChanged, which leave us in a temporary invalid state - so
-	we need to set the selected index from ItemChanged handler *if* we
-	know that the first item has just been added *and* the items have been
-	actually added to the ListControl.
-	Fixes #369048.
-
-2008-05-24  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* TabControl.cs: Only clicks with the left button should be
-	handled.
-	Fixes #393908.
-
-2008-05-24  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* ComboBox.cs: 
-	* FIleDialog.cs:
-	* TextBox.cs: Expose an internal method in TextBox to restore the
-	original context menu, and call it from ComboBox to re-use it in the
-	combobox containing the file name in FileDialog.cs.
-	Fixes part of #393775.
-
-2008-05-24  George Giolfan  <georgegiolfan at yahoo.com>
-
-	* ThemeVisualStyles.cs: Added support for the hot ComboBox drop down button
-	style.
-
-2008-05-24  George Giolfan  <georgegiolfan at yahoo.com>
-
-	* ComboBox.cs, Theme.cs, ThemeWin32Classic.cs: Added support for the hot drop
-	down button style.
-
-2008-05-23  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* ComboBox.cs: Minor correction to previous patch: PageDown should
-	also *try* to move by one item if the computed offset is negative,
-	just like the PageUp case.
-
-2008-05-23  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* ComboBox.cs: When navigating using PageDown/PageUp the navigation
-	should be done for at least 1 item, and not stay at the same item.
-	Fixes part of #374713.
-
-2008-05-23  Jonathan Pobst  <monkey at jpobst.com>
-
-	* FileDialog.cs: Add a FSEntryComparer, and use it to sort the
-	directories.  [Fixes bug #393931]
-
-2008-05-22  Andreia Gaita <avidigal at novell.com> 
-
-	* WebBrowser.cs: Implement DocumentText. Implement AllowNavigation.
-	  Don't fire events until the initial about:blank page has finished
-	  loading. Clean up events.
-
-2008-05-22  Atsushi Enomoto  <atsushi at ximian.com>
-
-	* XplatUIX11.cs : when we call WM_SETFOCUS, call X11Keyboard
-	  FocusIn() too. This should fix the issue on switching
-	  scim keyboards.
-
-2008-05-22  Atsushi Enomoto  <atsushi at ximian.com>
-
-	* X11Keyboard.cs : set XIM font size to somewhat reasonable
-	  number (ideally the input textbox size, but that could be
-	  too messy).
-
-2008-05-22  Jonathan Pobst  <monkey at jpobst.com>
-
-	* ToolStripTextBox.cs: List for the TextBox's TextChanged and fire
-	the ToolStripItem's TextChanged.  [Fixes bug #393597]
-
-2008-05-21  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* TabControl.cs: When invalidating in SelectedIndex and we need to
-	inflate to take into account the border of the tabs, make sure that
-	the invalidated rect doesn't overflow the control bounds, since that
-	would avoid updating at all.
-
-2008-05-21  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* TabControl.cs: Don't substract scroller width from the row width,
-	since we need to take into account the total width of the control when
-	calculating the position of the tabs. This avoids showing scroller
-	when it is actually not needed.
-	Fixes part of #322325.
-
-2008-05-21  George Giolfan  <georgegiolfan at yahoo.com>
-
-	* ThemeVisualStyles.cs: Added support for TextBoxBase.
-
-2008-05-21  George Giolfan  <georgegiolfan at yahoo.com>
-
-	* RichTextBox.cs, TextBoxBase.cs, Theme.cs, ThemeWin32Classic.cs: Refactored:
-	Extracted TextBoxBase.Draw and Theme.TextBoxBase*.
-
-2008-05-21  Jonathan Pobst  <monkey at jpobst.com>
-
-	* DataGridView.cs: Only paint the top left header cell if there
-	are columns.
-
-2008-05-21  Jonathan Pobst  <monkey at jpobst.com>
-
-	* DataGridView.cs: When binding to a BindingSource, get the underlying
-	list to bind to.  [Fixes bug #345483]
-
-2008-05-21  Jonathan Pobst  <monkey at jpobst.com>
-
-	* DataGridView.cs: Do not bind to collection properties.
-	[Fixes bug #337470]
-
-2008-05-21  George Giolfan  <georgegiolfan at yahoo.com>
-
-	* ThemeVisualStyles.cs: Added support for the hot TrackBar thumb style.
-
-2008-05-21  George Giolfan  <georgegiolfan at yahoo.com>
-
-	* Theme.cs, ThemeWin32Classic.cs, TrackBar.cs: Added support for the hot
-	thumb style.
-
-2008-05-21  George Giolfan  <georgegiolfan at yahoo.com>
-
-	* ThemeVisualStyles.cs: Added support for ToolTip transparent background.
-
-2008-05-21  George Giolfan  <georgegiolfan at yahoo.com>
-
-	* Theme.cs, ThemeWin32Classic.cs, ToolTip.cs: Added support for transparent
-	background.
-
-2008-05-21  George Giolfan  <georgegiolfan at yahoo.com>
-
-	* ThemeVisualStyles.cs: Added support for ToolBar hot and hot checked styles.
-
-2008-05-21  George Giolfan  <georgegiolfan at yahoo.com>
-
-	* Theme.cs, ThemeWin32Classic.cs, ToolBar.cs: Added support for hot and hot
-	checked styles.
-
-2008-05-21  George Giolfan  <georgegiolfan at yahoo.com>
-
-	* TabControl.cs: Extended to handle the hot style.
-
-2008-05-21  George Giolfan  <georgegiolfan at yahoo.com>
-
-	* Theme.cs, ThemeVisualStyles.cs, ThemeWin32Classic.cs, UpDownBase.cs:
-	Extended UpDownBase code to handle hot and disabled styles.
-
-2008-05-20  Jonathan Pobst  <monkey at jpobst.com>
-
-	* DataGridView.cs: Handle databinding to generic list type things.
-	[Fixes bug #325239]
-
-2008-05-20  Jonathan Pobst  <monkey at jpobst.com>
-
-	* DataGridViewCellCollection.cs: Add a method to find the cell
-	with the given DataPropertyName.
-	* DataGridViewColumn.cs: Track if the column was autogenerated or not.
-	* DataGridViewColumnCollection.cs: Add a method to clear all
-	autogenerated columns.
-	* DataGridView.cs: If AutoGenerateColumns is false, don't autogenerate
-	columns.
-	[Fixes bug #348082]
-
-2008-05-20  Jonathan Pobst  <monkey at jpobst.com>
-
-	* DataGridView.cs: Don't try to update the RowTemplate with
-	a null CellTemplate.
-
-2008-05-20  Jonathan Pobst  <monkey at jpobst.com>
-
-	* DataGridViewColumn.cs: Allow IsDataBound to be set internally.
-	* DataGridViewColumnCollection.cs: Ensure OnColumnAdded is called.
-	* DataGridView.cs: Lots of fixes/enhancements to databinding to
-	a DataSet.
-
-2008-05-20  Jonathan Pobst  <monkey at jpobst.com>
-
-	* Control.cs: Remove invalidating implicit child controls when
-	control is invalidated.  It was causing too many redraws on
-	controls with implicit scrollbars.
-	* ListView.cs: Listen to the Invalidated event and invalidate
-	child controls.
-
-2008-05-20  Andreia Gaita <avidigal at novell.com> 
-
-	* WebBrowserBase.cs, WebBrowser.cs: Hook up page loading events
-	* HtmlDocument.cs: Check for nulls
-
-2008-05-19  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* Control.cs: In ControlCollection.RemoveInternal, remove the
-	internal control before calling PerformLayout and OnControlRemoved,
-	which was leaving us in an invalid state and causing a X error (bad
-	match). Observe that Remove () call has the same order.
-	Fixes an X error changing ComboBoxStyle.DropDownStyle.
-
-2008-05-19  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* TabControl.cs: Don't paint by ourselved and instead let OnPaint
-	being fired if ControlStyles.UserPaint style is activated.
-	Fixes #371905.
-
-2008-05-19  Ivan N. Zlatev  <contact at i-nz.net>
-
-	* GridEntry.cs: Don't be so strict when setting the value - 
-	do not check if what we set is what we get.
-	[Fixes bug #389245]
-
-2008-05-19  Ivan N. Zlatev  <contact at i-nz.net>
-
-	* XplatUIX11.cs: If there are no timers timeout should be 0
-	[Fixes bug #363522]
-
-2008-05-19  Jonathan Pobst  <monkey at jpobst.com>
-
-	* Control.cs: As a followup to invalidating implicit children when
-	a control is invalidated, only invalidate them if they are in the
-	clip rectangle.
-
-2008-05-19  George Giolfan  <georgegiolfan at yahoo.com>
-
-	* ThemeVisualStyles.cs: Implemented partial support for ToolTip.
-
-2008-05-19  George Giolfan  <georgegiolfan at yahoo.com>
-
-	* ThemeWin32Classic.cs: Refactored: Extracted ToolTipDrawBackground.
-
-2008-05-19  George Giolfan  <georgegiolfan at yahoo.com>
-
-	* GroupBoxRenderer.cs: Fixed text area clipping in the Visual Styles case.
-	* XplatUIWin32.cs: Made Win32DeleteObject public.
-
-2008-05-19  Ivan N. Zlatev  <contact at i-nz.net>
-
-	* GridEntry.cs: Determine HasDefaultValue more strictly by using 
-	PropertyDescriptor.ShouldSerializeValue.
-	[Fixes bug #391924]
-
-2008-05-19  George Giolfan  <georgegiolfan at yahoo.com>
-
-	* ThemeVisualStyles.cs: Enabled support for ScrollBar element styles not present
-	in the classic theme.
-
-2008-05-19  George Giolfan  <georgegiolfan at yahoo.com>
-
-	* ScrollBar.cs: Added FirstButtonEntered, SecondButtonEntered, ThumbEntered,
-	ThumbPressed.
-	* Theme.cs, ThemeWin32Classic.cs: Added ScrollBarHasHotElementStyles,
-	ScrollBarHasPressedThumbStyle.
-
-2008-05-19  George Giolfan  <georgegiolfan at yahoo.com>
-
-	* TextRenderer.cs: Included some methods in the 1.1 profile.
-
-2008-05-19  Jonathan Pobst  <monkey at jpobst.com>
-
-	* Control.cs: When we make a control visible, it may have been
-	previously visible and while it wasn't visible, the z-order of
-	things may have been shuffled, so the control needs to have its
-	z-order updated just in case.  [Fixes bug #391518]
-
-2008-05-19  George Giolfan  <georgegiolfan at yahoo.com>
-
-	* ThemeVisualStyles.cs: Added support for GroupBox.
-
-2008-05-19  George Giolfan  <georgegiolfan at yahoo.com>
-
-	* GroupBoxRenderer.cs: Included in the 1.1 profile.
-
-2008-05-16  Atsushi Enomoto  <atsushi at ximian.com>
-
-	* XplatUIX11.cs, X11Keyboard.cs : redoing r103060 with fix for
-	  bug #389996; XSelectInput() behaved as mouse handler robber,
-	  so remove extra call to it.
-
-2008-05-15  Jonathan Pobst  <monkey at jpobst.com>
-
-	* Control.cs: Simplify ControlCollection.Contains method.
-
-2008-05-15  Jonathan Pobst  <monkey at jpobst.com>
-
-	* DataGridViewRow.cs: Implement GetPreferredSize.
-
-2008-05-15  Jonathan Pobst  <monkey at jpobst.com>
-
-	* DataGridViewComboBoxCell.cs: Don't declare text twice.  Fixes build.
-
-2008-05-15  Jonathan Pobst  <monkey at jpobst.com>
-
-	* DataGridViewComboBoxCell.cs: Implement some NIEX stuffs, better
-	painting and edit control fixes.
-
-2008-05-14  Jonathan Pobst  <monkey at jpobst.com>
-
-	* DataGridView.cs, DataGridViewCell.cs: Work around some external
-	checks to make sure we are in an actual row/col for top left header cell.
-	* DataGridViewTopLeftHeaderCell.cs: Implement some NIEX's.
-
-2008-05-14  Jonathan Pobst  <monkey at jpobst.com>
-
-	* Control.cs: Use long instead of int when handling WParam from
-	mousewheel scrolling.  Int was overflowing on Win64.
-
-2008-05-14  Jonathan Pobst  <monkey at jpobst.com>
-
-	* FlowLayoutPanel.cs, ScrollableControl.cs: We need to layout the
-	flow panel without scrolling first, and then calculate the 
-	scrolling based on the new layout.  [Fixes bug #390149]
-
-2008-05-14  Jonathan Pobst  <monkey at jpobst.com>
-
-	* ListBox.cs: Invalidate after scrolling up when selected index
-	changes.  [Fixes bug #390151]
-
-2008-05-13  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* ComboBox.cs: When setting mode to Simple *and* height hasn't been
-	set, default height to 150. I tried first with DefaultSize, but this
-	is not generating a SetBoundsCore call before handle creation time, so
-	we can take it into account. This is just what .net does.
-
-2008-05-13  Jonathan Pobst  <monkey at jpobst.com>
-
-	* XplatUIX11.cs, X11Keyboard.cs: Had to revert eno's r103060,
-	as it broke some stuff.  Calberto is filing a bug for eno to
-	work with.
-
-2008-05-13  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* ComboBox.cs: When handling PageDown pressed event, set SelectedIndex
-	to 0 is the current value is -1, and if style is not Simple, just
-	return, like .net does.
-	Fixes part of #374713.
-
-2008-05-13  Jonathan Pobst  <monkey at jpobst.com>
-
-	* ThemeWin32Classic.cs, ThemeVisualStyles.cs: When calculating
-	progress bar stuffs, use doubles instead of ints to prevent
-	overflow.  [Fixes bug #389798]
-
-2008-05-13  Atsushi Enomoto  <atsushi at ximian.com>
-
-	* XplatUIX11.cs, X11Keyboard.cs :
-	  Significant refactoring on XIM support. Now IM engine UI
-	  should show up, at mostly-correct preedit position.
-	  - Eliminated use of FocusWindow, as it is never mapped
-	    and hence blocks correct preedit position. XIC is now
-	    created per window, and it must be destroyed too when
-	    the window is destroyed.
-	  - WM_QUIT messages should not be filtered even when hwnd
-	    is zombie. Filtering it could cause endless loop.
-	  - Preedit position must move only when the window is alive.
-	  - Make it IDisposable and make sure to release XIM/XICs.
-
-2008-05-13  Atsushi Enomoto  <atsushi at ximian.com>
-
-	* Timer.cs, Control.cs, Form.cs, ApplicationContext.cs,
-	  XplatUIX11.cs, XplatUIWin32.cs :
-	  fix for bug #325033 and #387693;
-	  - WM_QUIT should not be sent when no running application
-	    exists.
-	  - SetTimer/KillTimer (especially on win32) should be
-	    invoked for the window that the timer is/will_be attached.
-	  - There could be unattached timers to a window when it's
-	    started. For those timers, hold pending timers and when
-	    a window is mapped, attach them to it.
-	  - WaitForHwndMessage() could run into loop when
-	    WM_SHOWWINDOW is handled before this method is called.
-	    So, strictly check wm_showwindow state.
-	  - Tick handler should not be invoked while one Tick handler
-	    call is still running (introduced Busy state).
-
-2008-05-13  Andreia Gaita <avidigal at novell.com> 
-
-	* WebBrowserBase.cs: Override Internal alternative methods for
-	  SetBoundsCore and OnResize instead of the protected ones.
-	* Control.cs: Move SetBoundsCore and OnResize implementations to
-	  SetBoundsCoreInternal and OnResizeInternal, so they can be
-	  overriden internally (WebBrowserBase needs to catch them but can't
-	  override the protected methods without api compat problems)
-
-2008-05-13  Andreia Gaita <avidigal at novell.com> 
-
-	* WebBrowserBase.cs: Hiding away non-public overrides for api compat
-
-2009-05-12  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* Binding.cs:
-	* ListView.cs: Remove debug messages.
-
-2008-05-12  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* ComboBox.cs: Don't do any calculation for simple mode if the listbox
-	area is empty. Also calculate scrollbars in Simple mode based in area
-	height and total number of items, not in MaxDropDownItems.
-	Fixes part of #371991.
-
-2008-05-12  Jonathan Pobst  <monkey at jpobst.com>
-
-	* PictureBox.cs: Always invalidate on resize.  Fixes an app for jhill.
-
-2008-05-12  Jonathan Pobst  <monkey at jpobst.com>
-
-	* BindingSource.cs: GetListSortDescription is not public.
-
-2008-05-12  Jonathan Pobst  <monkey at jpobst.com>
-
-	* WebBrowser.cs, WebBrowserBase.cs, WebBrowserSiteBase.cs: corcompare.
-
-2008-05-12  Jonathan Pobst  <monkey at jpobst.com>
-
-	* HtmlElement.cs: Fix parameter names to match MS.
-	* HtmlWindowCollection.cs: Should not be sealed.
-
-2008-05-12  Jonathan Pobst  <monkey at jpobst.com>
-
-	* ThemeWin32Classic.cs: Always draw the scrollbar area under the thumb
-	button, because the thumb button will not get drawn if the scrollbar
-	is disabled.  [Fixes bug #389262]
-
-2008-05-12  Jonathan Pobst  <monkey at jpobst.com>
-
-	* ListBox.cs: Handle End key for multi-column listboxen.
-	[Fixes bug #389266]
-
-2008-05-12  Jonathan Pobst  <monkey at jpobst.com>
-
-	* ListBox.cs: Fix algorithm to determine which column our item is in.
-	[Fixes bug #389265]
-
-2008-05-12  Jonathan Pobst  <monkey at jpobst.com>
-
-	* ListBox.cs: Invalidate when the listbox is resized.
-	[Fixes bug #389256]
-
-2008-05-12  Jonathan Pobst  <monkey at jpobst.com>
-
-	* ListBox.cs: There is always at least one row in the ListBox (if
-	we are doing these calculations.)  [Fixes bug #389253]
-
-2008-05-12  Jonathan Pobst  <monkey at jpobst.com>
-
-	* ListBox.cs: There is always at least one column in the ListBox.
-	[Fixes bug #389250]
-
-2008-05-10  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* ComboBox.cs: When handle is created call UpdateComboBoxBounds to
-	ensure in Simple mode that the height is exactly the requested one.
-	Also add the ComboBoxListControl to the controls collection in Simple
-	mode even if handle hasn't been created.
-	Fixes part of #371991.
-
-2008-05-10  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* ComboBox.cs: For ComboListBox control -specially in Simple mode-, give focus to
-	our ComboBox owner instead of giving it back to the previous control (
-	as done in other controls). Also remove the empty override of Select
-	method, since we want to be selected *and* give focus to our owner.
-	This should let the user do keys-navigation in Simple mode. 
-
-2008-05-10  Geoff Norton  <gnorton at novell.com>
-
-	* XplatUICarbon.cs: Dont use HIViewScrollRect as it's causing painting
-	problems with rapid scrolling of treeviews. Fixes #381084
-
-2008-05-10  Geoff Norton  <gnorton at novell.com>
-
-	* XplatUICarbon.cs: Deactivate the active window before
-	activating the desired window.  Completes fixing #386504
-
-2008-05-09  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* ListView.cs: When calculating scrollbars, set horizontal scroll bar
-	SmallChange to the item size width plus the padding, to match .net.
-
-2008-05-09  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* FileDialog.cs: Apply the custom filter typed by the user in the file
-	name combobox as much as possible while navigating in the file dialog.
-	Fixes #385261.
-
-2008-05-09  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* Binding.cs: Actually use NullValue if the retrieved value of
-	data source is null or DBNull. Makes a test pass.
-
-2008-05-09  Jonathan Pobst  <monkey at jpobst.com>
-
-	* ErrorProvider.cs, Form.cs: Get icons from ResourceImageLoader.
-	* MimeIcon.cs: Provide a way to get icons from resources.
-
-2008-05-08  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* Binding.cs: When the value retrieved from the control to be assigned
-	to the data source is null, actually use the 2.0 DataSourceNullValue
-	value. Make pass a data binding test.
-
-2008-05-08  Jonathan Pobst  <monkey at jpobst.com>
-
-	* Control.cs: We need to invalidate implicit children even when
-	invalidate is called with invalidatechildren = false.  (Implicit
-	children are really part of the parent.)
-	* ListView.cs: Double-buffer internal child controls for less
-	flicker.
-	* ThemeWin32Classic.cs: Remove an extra nested loop in drawing
-	owner ListView subitems for greatly increased performance.
-	[Fixes bug #388477]
-
-2008-05-08  Carlos Alberto Cortez <calebrto.cortez at gmail.com>
-
-	* FileDialog.cs: When the user types a wildcard character in the
-	filename combobox, update the contents of the folder using the text as
-	a filter.
-	Fixes part of #385261.
-
-2008-05-08  Jonathan Pobst  <monkey at jpobst.com>
-
-	* ListBox.cs: Various fixes for MultiColumn listboxen.
-	[Fixes bug #388114]
-
-2008-05-08  Andreia Gaita <avidigal at novell.com> 
-
-	* HtmlElement.cs: Implement Style property
-
-2008-05-08  Jonathan Pobst  <monkey at jpobst.com>
-
-	* ListBox.cs: Respect checkboxes when measuring item size.
-	* ThemeWin32Classis.cs: When drawing list items, don't draw
-	text outside of the item's bounds to prevent overlapping.
-	(.Net actually overlaps, but that's just silly.)
-	[Fixes bug #388117]
-
-2008-05-08  Everaldo Canuto  <ecanuto at novell.com>
-
-	* NotifyIcon.cs: Call SetForegroundWindow before show context menu. Thanks
-	Gert Driesen. Fixes bug #324830. 
-
-2008-05-07  Everaldo Canuto  <ecanuto at novell.com>
-
-	* XplatUI.cs, XplatUIDriver.cs, XplatUIWin32.cs: SetForegroundWindow
-	method implemented.
-
-2008-05-07  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* BindingSource.cs: When calling IsSynchronized, return the value of
-	the related IList list.
-
-2008-05-07  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* ListBindingHelper.cs: Fix some bits in GetListItemProperties, to
-	make a test pass.
-
-2008-05-07  Jonathan Pobst  <monkey at jpobst.com>
-
-	* DataGridView.cs: Implement PageUp/PageDown keys.  Extend keyboard
-	navigation to scroll the grid if the current cell is not visible.
-
-2008-05-07  Andreia Gaita <avidigal at novell.com> 
-
-	* HtmlElement.cs: Implement TabIndex
-
-2008-05-07  Jonathan Pobst  <monkey at jpobst.com>
-
-	* ListBox.cs: Respect ScrollAlwaysVisible and HorizontalScrollbar
-	properties, even when there are no items.
-	[Fixes bug #387611]
-
-2008-05-07  Ivan N. Zlatev  <contact at i-nz.net>
-
-	* NativeWindow.cs: Add support for multiple handles per window.
-	* NativeWindows.cs, LibSupport.cs, Control.cs, XplatUIX11GTK.cs, 
-	XplatUIX11.cs, X11Display.cs: Do not access NativeWindow.windows_collection 
-	directly - use FromHandle instead.
-	[Fixes bug #374660]
-
-2008-05-07  Andreia Gaita <avidigal at novell.com> 
-
-	* HtmlElement.cs: Implement InnerHTML setter
-
-2008-05-07  Andreia Gaita <avidigal at novell.com> 
-
-	* HtmlDocument.cs: Implement Focused
-
-2006-05-06  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* BindingSource.cs: Minor fixes to the the ApplySort and Remove sort
-	methods, as well as add messages to the exceptions.
-
-2006-05-06  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* BindingSource.cs: Setting DataSource should only reset DataMember if
-	the previous value was null (make pass a not working test).
-
-2006-05-06  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* BindingSource.cs: When EndInit call is postponed and is called until
-	DataSource.EndInit is called, remove the handler for data source.
-
-2008-05-06  Jonathan Pobst  <monkey at jpobst.com>
-
-	* ToolStripManager.cs: Don't use IsAlive, race condition, etc. etc.
-
-2008-05-06  Jonathan Pobst  <monkey at jpobst.com>
-
-	* ToolStripManager.cs: Store references to toolstrips as
-	weak references so they do not prevent forms from getting collected.
-	[Fixes bug #386483]
-
-2008-05-06  Jonathan Pobst  <monkey at jpobst.com>
-
-	* TrackBar.cs: We can't set ResizeRedraw because it isn't set
-	on .Net.  So do the same thing in WndProc.
-
-2008-05-06  Jonathan Pobst  <monkey at jpobst.com>
-
-	* TrackBar.cs: Commit patch from Andy Hume that corrects
-	the clickable areas to better match .Net.
-	[Fixes bug #387074]
-
-2008-05-06  Jonathan Pobst  <monkey at jpobst.com>
-
-	* TrackBar.cs: Commit patch from Andy Hume that adds the
-	ResizeRedraw control flag so the track bar repaints itself
-	when it is resized.  [Fixes bug #387072]
-
-2008-05-06  Jonathan Pobst  <monkey at jpobst.com>
-
-	* TrackBar.cs: Commit patch from Andy Hume that adds better
-	support for keyboard navigation when the TrackBar is vertical.
-	[Fixes bug #387071]
-
-2008-05-06  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* BindingSource.cs: Implement ISupportInitializeNotification support.
-
-2008-05-06  George Giolfan  <georgegiolfan at yahoo.com>
-
-	* ThemeVisualStyles.cs: Added support for ToolBar.
-
-2008-05-06  George Giolfan  <georgegiolfan at yahoo.com>
-
-	* ToolBar.cs: Made the Vertical property internal.
-
-2008-05-05  George Giolfan  <georgegiolfan at yahoo.com>
-
-	* ThemeVisualStyles.cs: Added support for TrackBar.
-
-2008-05-05  George Giolfan  <georgegiolfan at yahoo.com>
-
-	* ThemeWin32Classic.cs: Refactored: Extracted TrackBarGetThumbSize,
-	TrackBarDrawVerticalTrack, TrackBarDrawVerticalThumbRight,
-	TrackBarDrawVerticalThumbLeft, TrackBarDrawVerticalThumb,
-	TrackBarGetVerticalTickPainter, TrackBarDrawHorizontalTrack,
-	TrackBarDrawHorizontalThumbBottom, TrackBarDrawHorizontalThumbTop,
-	TrackBarDrawHorizontalThumb, TrackBarGetHorizontalTickPainter.
-
-2008-05-05  George Giolfan  <georgegiolfan at yahoo.com>
-
-	* ThemeVisualStyles.cs: Added support for UpDownBase.
-
-2008-05-05  George Giolfan  <georgegiolfan at yahoo.com>
-
-	* Theme.cs, ThemeWin32Classic.cs, UpDownBase.cs: Refactored:
-	Extracted Theme.UpDownBaseDrawButton.
-
-2008-05-05  Jonathan Pobst  <monkey at jpobst.com>
-
-	* ToolStrip.cs, ToolStripDropDownItem.cs: Make sure toolstrips are
-	removed from the static toolstrips collection in ToolStripManager
-	when they are disposed.  Provides a workaround for bug #386483.
-
-2008-05-05  Ivan N. Zlatev  <contact at i-nz.net>
-
-	* GridEntry.cs: Read-only properties with Editor with 
-	UITypeEditorEditStyle.Modal shouldn't be read-only in the PropertyGrid.
-	[Fixes bug #384184]
-
-2008-05-05  Jonathan Pobst  <monkey at jpobst.com>
-
-	* MenuStrip.cs, ToolStrip.cs: Guard against an NRE when pressing
-	the menu key and there are no items on the menu.
-	[Fixes bug #386644]
-
-2008-05-05  Sebastien Pouliot  <sebastien at ximian.com>
-
-	* Control.cs: Avoid calling ToString on a string.
-	* Form.cs: Avoid calling ToString on a string. Found using Gendarme.
-	* GroupBox.cs: In FlatStyle property throw, not just create, the 
-	exception. Avoid calling ToString on a string.
-	* ProgressBar.cs: Avoid calling ToString on a string. 
-	* ScrollBar.cs: Avoid calling ToString on a string. 
-	[All issues were found using Gendarme]
-
-2008-05-05  Everaldo Canuto  <ecanuto at novell.com>
-
-	* NotifyIcon.cs: Prevent click events to be trigger after double click 
-	events. Fixes remaining issues of bug #324832.
-
-2008-05-05  Everaldo Canuto  <ecanuto at novell.com>
-
-	* NotifyIcon.cs: Trigger click and mouseclick events after mouseup event
-	to mimic win32 behavior. Partially fixes bug #324832.
-
-2008-05-04  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* BindingSource.cs: Implement Find methods.
-
-2008-05-04  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* BindingSource.cs: Implement Sort, ApplySort overloads, and
-	RemoveSort methods.
-
-2008-05-04  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* ListBindingHelper.cs: When calling GetListItemProperties and the
-	passed object is ITypedList, return the result of
-	ITypedList.GetItemProperties instead.
-
-2008-05-04  Everaldo Canuto  <ecanuto at novell.com>
-
-	* LinkLabel.cs: Set default value of name on constructor of Link class
-	only for 2.0 profile.
-
-2008-05-04  Everaldo Canuto  <ecanuto at novell.com>
-
-	* LinkLabel.cs: Fix implementation of LinkCollection.LinksAdded property.
-	Fixes remaining issues of bug #346154.
-
-2008-05-04  Everaldo Canuto  <ecanuto at novell.com>
-
-	* LinkLabel.cs: Set a default value for name on internal contructor of
-	Link class. It fixes assert B5 of LinkCollectionTest.Constructor1.
-
-2008-05-04  Everaldo Canuto  <ecanuto at novell.com>
-
-	* LinkLabel.cs: Move links collection from LinkCollection to LinkLabel
-	and refer all instances to owner.links. Partially fixes #346154.
-
-2008-05-03  Everaldo Canuto  <ecanuto at novell.com>
-
-	* LinkLabel.cs: Fix linkarea values for empty text, must have start and 
-	length equal zero. Also called CreateLinkPieces in constructor. It fixes
-	the LinkLabel test 'TestLinkArea'.
-
-2008-05-03  Everaldo Canuto  <ecanuto at novell.com>
-
-	* Form.cs: Remove menu before close form to prevent form to be not gaced.
-	[Fixes #386460]
-
-2008-05-03  Everaldo Canuto  <ecanuto at novell.com>
-
-	* MenuAPI.cs: Dispose popup window after hide. Thanks to Jesse Jones.
-	[Fixes #386463]
-
-2008-05-03  Everaldo Canuto  <ecanuto at novell.com>
-
-	* MenuAPI.cs: Implemented keyboard navigation for ContextMenu.
-	[Fixed bug #357004]
-
-2008-05-03  Everaldo Canuto  <ecanuto at novell.com>
-
-	* MenuAPI.cs: Remove unused ProcessCmdKey method.
-
-2008-05-03  Everaldo Canuto  <ecanuto at novell.com>
-
-	* MenuAPI.cs: Prevent NRE in menu deactivation when shortcut is used. 
-	[Fixes bug #375398]
-
-2008-05-03  Everaldo Canuto  <ecanuto at novell.com>
-
-	* MenuAPI.cs: Enable implicit mnemonics for menus. Fixes remaining issues
-	of bug #367492.
-
-2008-05-03  Everaldo Canuto  <ecanuto at novell.com>
-
-	* MenuAPI.cs: Check if mouse down comes from menu, we need it because
-	sometimes we open a conext menu on mouse down of some controls and the mouse
-	up is dispatched to menu and dont need to. It fix remaining issues of 
-	#363711 and other problems related to menu mouse click events.
-
-2008-05-02  Everaldo Canuto  <ecanuto at novell.com>
-
-	* MonthCalendar.cs: Implemented "Go to today" context menu, also changed
-	some var names to better fit changes, now we have month_menu and today_menu
-	vars. Fixes bug #363711.
-
-2008-05-02  Everaldo Canuto  <ecanuto at novell.com>
-
-	* MonthCalendar.cs: Handle every right mouse click to open context menu,
-	right now the default month menu but it will be change to have "Go to today"
-	menu.
-
-2008-05-02  Jonathan Pobst  <monkey at jpobst.com>
-
-	* FileDialog.cs, MaskedTextBox.cs, OpenFileDialog.cs: corcompare.
-
-2008-05-02  Everaldo Canuto  <ecanuto at novell.com>
-
-	* ThemeWin32Classic.cs: Fix MonthCalendar arrows drawing.
-
-2008-05-02  George Giolfan  <georgegiolfan at yahoo.com>
-
-	* ThemeVisualStyles.cs: Added support for TreeView.
-
-2008-05-02  George Giolfan  <georgegiolfan at yahoo.com>
-
-	* Theme.cs, ThemeWin32Classic.cs, TreeView.cs: Refactored:
-	Moved TreeView.DrawNodePlusMinus to Theme.TreeViewDrawNodePlusMinus.
-
-2008-05-02  Jonathan Pobst  <monkey at jpobst.com>
-
-	* OpenFileDialog.cs: Implement 2.0 SP1 stuffs.
-
-2008-05-02  Jonathan Pobst  <monkey at jpobst.com>
-
-	* FileDialogCustomPlace.cs, FileDialogCustomPlacesCollection.cs:
-	Implement 2.0 SP1 stuffs.
-
-2008-05-02  Jonathan Pobst  <monkey at jpobst.com>
-
-	* FileDialog.cs: Implement 2.0 SP1 stuffs.
-
-2008-05-02  Jonathan Pobst  <monkey at jpobst.com>
-
-	* Control.cs, ContainerControl.cs, DataGridView.cs, TextBoxBase.cs:
-	Implement CanEnableIme property. (2.0 SP1)
-
-2008-05-02  Jonathan Pobst  <monkey at jpobst.com>
-
-	* BindingManagerBase.cs, PropertyManager.cs: Hide GetItemProperties
-	from the 2.0 API.
-
-2008-05-02  Jonathan Pobst  <monkey at jpobst.com>
-
-	* Control.cs: Provide an internal way for a control to override
-	the setting of Height.
-	* DateTimePicker.cs: Remove SetBoundsCore from 2.0 profile,
-	set height using new method.
-
-2008-05-02  George Giolfan  <georgegiolfan at yahoo.com>
-
-	* ThemeVisualStyles.cs: Added support for ControlPaint.DrawMixedCheckBox.
-
-2008-05-02  George Giolfan  <georgegiolfan at yahoo.com>
-
-	* ControlPaint.cs, Theme.cs, ThemeWin32Classic.cs: Refactored:
-	ControlPaint.DrawMixedCheckBox now calls Theme.CPDrawMixedCheckBox.
-
-2008-05-02  George Giolfan  <georgegiolfan at yahoo.com>
-
-	* ThemeVisualStyles.cs: Added support for StatusBar.
-
-2008-05-02  Jonathan Pobst  <monkey at jpobst.com>
-
-	* DataObject.cs: Add the other IDataObject interface.
-
-2008-05-02  George Giolfan  <georgegiolfan at yahoo.com>
-
-	* ThemeWin32Classic.cs: Refactored: extracted DrawStatusBarBackground,
-	DrawStatusBarSizingGrip, DrawStatusBarPanelBackground.
-
-2008-05-02  Jonathan Pobst  <monkey at jpobst.com>
-
-	* DataGridViewCheckBoxCell.cs, DataGridViewImageCell.cs: Fix parameter names.
-	* ListView.cs: Hide non-public API.
-	* MaskedTextBox.cs: Remove extra attribute.
-
-2008-05-02  Jonathan Pobst  <monkey at jpobst.com>
-
-	* DataGridViewImageCell.cs: Use formatted value instead of value
-	to calculate preferred size.
-
-2008-05-01  Jonathan Pobst  <monkey at jpobst.com>
-
-	* ListBox.cs: Move some initialization around so that selected_indices
-	is not accessed before it is created.
-
-2008-05-01  Jonathan Pobst  <monkey at jpobst.com>
-
-	* InputLanguageCollection.cs: Implement the collection better.
-	[Fixes bug #385506]
-
-2008-05-01  Jonathan Pobst  <monkey at jpobst.com>
-
-	* ToolStripDropDownItem.cs: Get the correct event object for
-	DropDownItemClicked.
-	* ToolStripMenuItem.cs: Raise DropDownItemClicked on our owner.
-	[Fixes bug #385475]
-
-2008-05-01  Jonathan Pobst  <monkey at jpobst.com>
-
-	* DataGridViewRowCollection.cs: We don't currently support shared 
-	rows.  Should fix test failures caused by previous commit.
-
-2008-04-30  Jonathan Pobst  <monkey at jpobst.com>
-
-	* DataGridViewRow.cs: Fixes for cloning the row, ensure header cell's
-	datagridview gets set.  Only paint cells in visible columns.
-	* DataGridViewCell.cs: Draw border after cell content.
-	* DataGridView.cs: Invalidate after setting some properties.  Only
-	use visible columns.  Fit hit test bug with areas in the col/row header
-	area but not in a row or col.  Implement UpdateCell/Row methods.
-
-2008-04-30  Jonathan Pobst  <monkey at jpobst.com>
-
-	* DataGridViewElement.cs: Don't throw NIEX.
-	* DataGridViewColumnHeaderCell.cs: Draw error icons for top left header cells.
-	* DataGridViewColumnDesignTimeVisibleAttribute.cs: Don't throw NIEX.
-	* DataGridViewCheckBoxColumn.cs: Implement ToString.
-	* DataGridViewCheckBoxCell.cs: Allow DBNull as a value.
-	* DataGridViewCell.cs: Don't raise CellFormatting for RowHeader cells,
-	if the user filled in the formatting Value, use it.
-
-2008-04-30  Jonathan Pobst  <monkey at jpobst.com>
-
-	* DataGridViewTextBoxCell.cs: Fix for objects that cannot be cast
-	to a string.
-
-2008-04-29  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* BindingSource.cs: Some corrections to Filter property, as well as
-	setting it for our list when resetting it.
-
-2008-04-29  Jonathan Pobst  <monkey at jpobst.com>
-
-	* ScrollBar.cs: Don't let dragging the thumb grip set the value greater
-	than the maximum.  Fixes reopened bug #384182.
-
-2008-04-28  Everaldo Canuto  <ecanuto at novell.com>
-
-	* ToolStripDropDown.cs: Fix offscreen position for DropDown itens.
-	Fixes remaining issues of #367490.
-
-2008-04-28  Everaldo Canuto  <ecanuto at novell.com>
-
-	* ToolStripDropDown.cs: Screen.Bound dont return right value then use 
-	SystemInformation.WorkingArea to get max_screen value.
-
-2008-04-28  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* BindingSource.cs: Implement Filter and RemoveFilter.
-
-2008-04-28  Everaldo Canuto  <ecanuto at novell.com>
-
-	* MenuAPI.cs: Prevent sub-menu positon to be less than zero.
-
-2008-04-28  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* X11Dnd.cs: When trying to convert data and we know we started the
-	dnd loop, don't try to use the cached data if the loop is not running,
-	which means that the data has been resetted.
-	Fixes #378191.
-
-2008-04-28  Everaldo Canuto  <ecanuto at novell.com>
-
-	* MenuAPI.cs: Force first menu subitem to show from left to right to mimic
-	win32 behavior.
-
-2008-04-28  Everaldo Canuto  <ecanuto at novell.com>
-
-	* MenuAPI.cs: Check the screen limits before show sub-menus and prevent
-	it to drawn off screen edge. Fixes bug #367490.
-
-2008-04-28  Everaldo Canuto  <ecanuto at novell.com>
-
-	* MenuAPI.cs: In PopupWindow.RefreshItems uses a temp point var to store
-	menu position to have only one assignment of Location var.
-
-2008-04-28  Everaldo Canuto  <ecanuto at novell.com>
-
-	* MenuAPI.cs: Implement the right key for sub-menus. Thanks Ernesto Carrea
-	for this patch. Fixes bug #384115.
-
-2008-04-28  Jonathan Pobst  <monkey at jpobst.com>
-
-	* ScrollBar.cs: If SmallChange is larger than LargeChange, make them
-	the same.  If LargeChange is zero, set a minimum size for the scroll
-	thumb grip.  [Fixes bug #384182]
-
-2008-04-28  Jonathan Pobst  <monkey at jpobst.com>
-
-	* TextBoxTextRenderer.cs: Don't turn &A into a prefix for textboxen.
-	[Fixes bug #384181]
-
-2008-04-28  Jonathan Pobst  <monkey at jpobst.com>
-
-	* ListBox.cs: Math.Min should be Math.Max.  [Fixes bug #384183]
-
-2008-04-28  George Giolfan  <georgegiolfan at yahoo.com>
-
-	* ThemeVisualStyles.cs: Added partial support for ScrollBar (based on the
-	patch from Ernesto).
-
-2008-04-28  George Giolfan  <georgegiolfan at yahoo.com>
-
-	* ThemeVisualStyles.cs: Added support for ControlPaint.DrawComboButton.
-
-2008-04-28  George Giolfan  <georgegiolfan at yahoo.com>
-
-	* ThemeVisualStyles.cs: Added support for ControlPaint.DrawButton.
-
-2008-04-28  George Giolfan  <georgegiolfan at yahoo.com>
-
-	* ThemeVisualStyles.cs: Added support for ControlPaint.DrawRadioButton.
-
-2008-04-28  George Giolfan  <georgegiolfan at yahoo.com>
-
-	* ThemeVisualStyles.cs: Added support for ControlPaint.DrawScrollButton.
-
-2008-04-27  George Giolfan  <georgegiolfan at yahoo.com>
-
-	* ThemeVisualStyles.cs: Added support for ButtonBase.UseVisualStyleBackColor.
-
-2008-04-27  Andreia Gaita <avidigal at novell.com> 
-
-	* HtmlWindow.cs, HtmlHistory.cs: Throw on DomHistory getter (it's
-	  supposed to return a reference to an mshtml interface, which we
-	  don't support).
-	* HtmlElement.cs: Throw on DomElement getter (it's supposed to return a
-	  reference to an mshtml interface, which we don't support). Code
-	  formatting cleanup.
-	* HtmlDocument.cs: Add DefaultEncoding getter implementation. Throw on
-	  DomDocument getter (it's supposed to return a reference to an
-	  mshtml interface, which we don't support). Code formatting cleanup.
-
-2008-04-26  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* ListView.cs: Ouch, forgot to commit.
-
-2008-04-26  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* ListView.cs: 
-	* ThemeWin32Classic.cs: Fire the -until now- forgotten CacheVirtualItems event.
-
-2008-04-26  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* ListView.cs: When calculating box selection for virtual mode, don't
-	look for intersection with item's text, but item bounds, since that
-	would mean read ListViewItem's text for _every_ item, and that's
-	something we just can't do in virtual mode (items are only requested
-	when drawn).
-
-2008-04-26  George Giolfan  <georgegiolfan at yahoo.com>
-
-	* ThemeVisualStyles.cs: Added support for ControlPaint.DrawCaptionButton and
-	partial support for managed windows (based on the patch from Ernesto).
-
-2008-04-25  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* ListView.cs: When doing a key search use FindItemWithText method
-	instead of doing the search by ourselves, this way we avoid
-	duplicating the code and also we handle the special case for virtual
-	mode. To achieve that make our private overload of FindItemWithText
-	internal and also have a 'roundtrip' parameter.
-
-2008-04-25  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* ListView.cs: When doing the layout don't request the
-	ListViewItem instance if we are in virtual mode (since we can't request it
-	until the item is actully drawn).
-
-2008-04-25  George Giolfan  <georgegiolfan at yahoo.com>
-
-	* ThemeVisualStyles.cs: Added support for ProgressBar (based on the patch 
-	from Ernesto).
-
-2008-04-25  George Giolfan  <georgegiolfan at yahoo.com>
-
-	* ThemeVisualStyles.cs: Added support for ControlPaint.DrawCheckBox (based on 
-	the patch from Ernesto).
-
-2008-04-25  George Giolfan  <georgegiolfan at yahoo.com>
-
-	* ThemeEngine.cs: Added code to select ThemeVisualStyles.
-	* ThemeVisualStyles.cs: Added.
-
-2008-04-25  George Giolfan  <georgegiolfan at yahoo.com>
-
-	* IDeviceContext.cs: Added a missing using.
-
-2008-04-25  George Giolfan  <georgegiolfan at yahoo.com>
-
-	* ButtonBase.cs: Made IsDefault protected internal.
-	* ButtonRenderer.cs: Made GetPushButtonRenderer(PushButtonState) internal.
-
-2008-04-25  George Giolfan  <georgegiolfan at yahoo.com>
-
-	* Application.cs: Included VisualStyles-related members in the 1.1 profile.
-	* ButtonRenderer.cs, CheckBoxRenderer.cs, Padding.cs, PaddingConverter.cs,
-	RadioButtonRenderer.cs: Included in the 1.1 profile.
-	* IDeviceContext.cs: Added.
-	* TextRenderer.cs: Included a member in the 1.1 profile.
-
-2008-04-25  George Giolfan  <georgegiolfan at yahoo.com>
-
-	* ThemeWin32Classic.cs: Added ShouldPaintFocusRectangle(ButtonBase).
-
-2008-04-24  Jonathan Pobst  <monkey at jpobst.com>
-
-	* ErrorProvider.cs: Make the error icons come after the control
-	they refer to.  It isn't the way the MS does it, but its better
-	than what we were doing.  See bug #368587.
-
-2008-04-24  Jonathan Pobst  <monkey at jpobst.com>
-
-	* InputLanguage.cs, InputLanguageCollection.cs: Apply patch
-	from Eric Albright that lazy loads the input language as ensures
-	everything gets properly initialized.  Fixes bug #373871.
-
-2008-04-24  Jonathan Pobst  <monkey at jpobst.com>
-
-	* ToolStrip.cs: Don't use ToolStripControlHosts when figuring up
-	implicit mnemonics.  [Fixes bug #383000]
-
-2008-04-23  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* X11Dnd.cs: When canceling the operation, automatically restore the
-	default cursor - normally the default cursor is restored when the
-	mouse buttons are released, but we should be able to restore it even
-	if the buttons are still pressed (for example, when pressing ESC to
-	cancel).
-	Fixes #381894.
-
-2008-04-23  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* X11Dnd.cs: When starting a new drad and drop operation, set control
-	field to null, just as the other fields, to avoid calling any
-	operation on a previous control. Also, when calling DndLeave on a
-	control, set it to null, thus we don't fire that event multiple times
-	for that control.
-	Fixes #209264.
-
-2008-04-23  Geoff Norton  <gnorton at novell.com>
-
-	* XplatUICarbon.cs: Ensure that we have a valid hwnd before accessing
-	the whole_window object.  Fixes #377084.
-
-2008-04-23  Andreia Gaita <avidigal at novell.com> 
-
-	* HtmlElement.cs: Implement RaiseEvent (event injection into the
-	  embedded browser)
-
-2008-04-23  Jonathan Pobst  <monkey at jpobst.com>
-
-	* DataGridViewColumnHeaderCell.cs: Implement some NIEX stuffs.
-
-2008-04-23  Andreia Gaita <avidigal at novell.com> 
-
-	* HtmlElement.cs, HtmlDocument.cs: Implement javscript method
-	  invocation
-
-2008-04-23  Andreia Gaita <avidigal at novell.com> 
-
-	* HtmlElement.cs, HtmlDocument.cs: Implement custom event handler
-	  attaching/detaching
-
-2008-04-23  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* X11Dnd.cs: When the drop was cancelled, or could just not be
-	performed, return DragDropEffect.None always (match .net).
-
-2008-04-22  Jonathan Pobst  <monkey at jpobst.com>
-
-	* DataGridViewRowHeaderCell.cs: Fill in some NIEX stuff.
-
-2008-04-22  Jonathan Pobst  <monkey at jpobst.com>
-
-	* DataGridViewRowCollection.cs: Revert something I didn't mean to commit.
-
-2008-04-22  Jonathan Pobst  <monkey at jpobst.com>
-
-	* DataGridView.cs: Add support for error icon tool tips.
-	* DataGridViewCell.cs: ErrorIconBounds needs to call GetErrorIconBounds.
-	* DataGridViewRowHeaderCell.cs: Need internal way to get ErrorIconBounds.
-
-2008-04-22  Ivan N. Zlatev  <contact at i-nz.net>
-
-	* X11Structs.cs: Add mouse button masks enum.
-	* XplatUIX11.cs, Hwnd.cs: Send WM_ENTERSIZEMOVE and 
-        WM_EXITSIZEMOVE only once at the beginning and at the end of the 
-	form resize/move operation instead of for each step of it.
-	[Fixes bug #346529 for the x11 backend]
-
-2008-04-21  Jonathan Pobst  <monkey at jpobst.com>
-
-	* DataGridView*: Implement support for drawing error icons.
-
-2008-04-21  Jonathan Pobst  <monkey at jpobst.com>
-
-	* TreeView.cs: Make vbar and hbar internal.
-	* TreeNode.cs: If collapsing the node removes one of the TreeView's
-	scrollbars, invalidate the whole thing.
-	[Fixes bug #382001]
-
-2008-04-21  Jonathan Pobst  <monkey at jpobst.com>
-
-	* TreeView.cs: Calling Sort() sets Sorted = true.
-	* TreeNodeCollection.cs: Try to find the owner TreeView to determine
-	if the nodes need to be sorted.
-	[Fixes bug #382028]
-
-2008-04-21  Ivan N. Zlatev  <contact at i-nz.net>
-
-	* Form.cs: Fire SizeChanged for both when the form is minimized and 
-	restored.
-	* XplatUIX11.cs: Instead of tracking minimization on UnmapNotify track it 
-	on PropertyNotify of _NET_WM_STATE. Much much cleaner.
-
-2008-04-21  Jonathan Pobst  <monkey at jpobst.com>
-
-	* ComboBox.cs: If the combobox is disabled, draw a disabled
-	background before painting anything else.
-	[Fixes bug #381729]
-
-2008-04-20  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* X11Dnd.cs: Wehn the drag and drop operation is cancelled don't
-	forget to send a Leave event to the target window - just as .net does
-	when cancelling dnd operations.
-
-2008-04-20  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* X11Dnd.cs: Stop tracking messages as part of the dnd operation as
-	soon as possible - this happens when we send the drop message to the
-	target window. This way we avoid firing any DragOver _after_ drop finished.
-	Fixes #378179.
-
-2008-04-20  Ivan N. Zlatev  <contact at i-nz.net>
-
-	* XplatUIX11.cs: Send WM_WINDOWPOSCHANGED when a toplevel is minimized.
-	* Form.cs: Handle form minimization as a special state, where size doesn't 
-	change, but we have to fire SizeChanged.
-	[Fixes bug #325122 for the win32 and x11 backends]
-
-2008-04-20  Ivan N. Zlatev  <contact at i-nz.net>
-
-	* XplatUIX11.cs: Win32 doesn't send WM_(KILL|SET)FOCUS 
-	if the handle is disabled.
-	[Fixes bug #371751]
-
-2008-04-20  Ivan N. Zlatev  <contact at i-nz.net>
-
-	* XplatUIX11.cs: Enable Maximize/Minimize/Close ability (not decorations) 
-	for forms with FormBorderStyle.None.
-	[Fixes bug #349571]
-
-2008-04-20  Ivan N. Zlatev  <contact at i-nz.net>
-
-	* XplatUIX11.cs: Implement support for WM_ENTERSIZEMOVE and 
-	WM_EXITSIZEMOVE.
-	[Fixes bug #346529 for the X11 backend]
-
-2008-04-19  Ivan N. Zlatev  <contact at i-nz.net>
-
-	* XplatUIX11.cs: 
-	  - Send a mouse Enter message after say dragging the mouse with a 
-	  button down and then release it in another client.
-	  - Reset the cursor to prevent X11 from remembering it and setting it 
-	  before the control gets WM_SETCURSOR.
-	  - Qeueue a mouse move after a mouse enter like win32.
-	  [Fixes bug #323234]
-
-2008-04-19  Ivan N. Zlatev  <contact at i-nz.net>
-
-	* XplatUIX11.cs: Implement limited support for WM_SYSCOMMAND. 
-	It's sent when the form gets moved, resized, closed.
-	* XplatUIStructs.cs: Add SystemCommands enum for WM_SYSCOMMAND.
-	[Fixes bug #359193 for X11]
-
-2008-04-19  Ivan N. Zlatev  <contact at i-nz.net>
-
-	* Form.cs: Add a ValidateChildren for the 1.1 profile. Fixes 
-	the build.
-
-2008-04-19  Ivan N. Zlatev  <contact at i-nz.net>
-
-	* ListView.cs: Move CalculateDetailsGroupItemsCount to the NET_2_0 
-	group. Fixes the 1.1 build.
-
-2008-04-18  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* ListView.cs: Use display indexes for selection in Details view, as
-	well as do the proper layout based on display indexes for that view
-	too.
-
-2008-04-18  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* ListView.cs: Focused item information is now stored as a display
-	index, and display indexes are used all over the place for selection,
-	instead of ListViewItem.Index values, which doesn't give us enough
-	information to modify the selection in groups mode, and was broken.
-
-2008-04-18  Ivan N. Zlatev  <contact at i-nz.net>
-
-	* Control.cs: Do not fire MouseDown if validation of the control has 
-	failed.
-	* Form.cs: Validate the form before closing.
-	[Fixes bugs #330501 and #353310]
-
-2008-04-18  Andreia Gaita <avidigal at novell.com> 
-
-	* WebBrowserBase.cs: Added WndProc, DrawToBitmap,
-	  CreateWebBrowserSiteBase implementations
-	* HtmlElement.cs: Add missing OuterHTML, OuterText setters, stubbed
-	  Style and TabIndex setters
-
-2008-04-18  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* ListViewGroup.cs: When returning the actual item count, return the
-	proper count for default group.
-	Fix the tests.
-
-2008-04-18  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* ListView.cs:
-	* ListViewGroup.cs: When calculating groups layout, get the actual
-	number of items per group, since groups added to the group BUT not
-	added to the ListView are just ignored, and can cause some nasty
-	exceptions because of the lack of synchronization. Also for
-	ListViewGroup don't use lazy initialization for items, since we 
-	the common scenario is to use it always - and it helps us to  refactor
-	and clean the .ctor overloads.
-
-2008-04-18  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* ListView.cs: When adding an item to a ListViewItemCollection
-	belonging to a group (ListViewGroup.Items), don't generate a redraw if
-	the added item hasn't beeen previously added to the ListView instance
-	refered by the group, since it will be ignored. This should avoid some 
-	really nasty flickering.
-
-2008-04-17  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* ListView.cs: When accessing an item in a specific display
-	position, use the helper method GetItemAtDisplayIndex, instead of
-	direct access to the reordered_items_indices array. When doing layout
-	for groups set the correct Items index for the display position (since
-	in groups mode items don't have the same position as in Items
-	collection).
-	* ListViewGroup.cs: Add a field to store the starting item number,
-	which is later used when calculating the layout.
-
-	Fixes #360805.
-
-2008-04-17  Gert Driesen  <drieseng at users.sourceforge.net>
-
-	* Application.cs: Fixed ProductVersion to fallback to the assembly
-	version. Fixes regression for bug #325413.
-
-2008-04-16  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* ListView.cs: New helper method to retrieve an item in a _specific
-	display_ position (the items can be displayed in a different order
-	than one of Items collection).
-	* ThemeWin32Classic.cs: When drawing, instead of iterating over Items
-	collection, use ListView.GetItemAtDisplayIndex, to get an item in a
-	specific display position (again remember that items can be sorted
-	different than Items).
-
-2008-04-16  Jonathan Pobst  <monkey at jpobst.com>
-
-	* DataGridViewColumnCollection.cs: Create a cached copy of our sorted
-	list and update it when the collection changes.  We were recreating
-	this several times per row paint and for every pixel the mouse moved
-	across the grid.
-	* DataGridViewColumn.cs: Regenerate cached sorted list when DisplayIndex
-	changes.
-
-2008-04-16  Jonathan Pobst  <monkey at jpobst.com>
-
-	* DataGridViewColumnCollection.cs: Convert our internal sorted columns
-	list to use generics.
-	* DataGridView.cs, DataGridViewRow.cs: Use generic sorted column list
-	and remove unneccessay casts.
-
-2008-04-16  Jonathan Pobst  <monkey at jpobst.com>
-
-	* DataGridViewBand.cs: Add internal way to set displayed variable.
-	* DataGridViewRow.cs: Don't paint cells in non-displayed columns.
-	* DataGridView.cs: Make sure we always keep track of Displayed
-	rows and columns, and only draw things that are displayed.
-
-2008-04-16  Atsushi Enomoto  <atsushi at ximian.com>
-
-	* X11Keyboard.cs, XplatUIX11.cs : manage key state regardless of
-	  whether the key events are filtered or not. Introduced
-	  PreFilter() process for this purpose. This fixes atokx3/iiimx
-	  shift state issue.
-
-2008-04-16  Andreia Gaita <avidigal at novell.com> 
-
-	* HtmlHistory.cs: Implement Length property
-
-2008-04-15  Jonathan Pobst  <monkey at jpobst.com>
-
-	* DataGridView.cs: Call EndEdit when a sort is performed so we take
-	away the edit textbox.  Refactor to reuse column sort code.
-
-2008-04-12  Everaldo Canuto  <ecanuto at novell.com>
-
-	* MenuAPI.cs: Remove the code that save and restore capture status of 
-	grab_control, this fixes some Menu and Context menu bugs but maybe it can
-	cause some others, I cant figure the possible problems of this patch but
-	right now remove the code looks to be better than keep it. This patch fixes
-	bugs #357638, #378721 and #379570.
-
-2008-04-12  Andreia Gaita <avidigal at novell.com> 
-
-	* HtmlDocument.cs, HtmlElement.cs, HtmlHistory.cs, WebBrowser.cs:
-	Implement OuterHtml, OuterText, Enabled, Scroll*, *Rectangle properties,
-	add missing properties and event handlers.
-	
-2008-04-14  Jonathan Pobst  <monkey at jpobst.com>
-
-	* ListBox.cs: Make sure the LargeChange we are setting is at least
-	zero, to prevent an IOORE.  [Fixes bug #379531]
-
-2008-04-13  Andy Hume <andyhume32 at yahoo.co.uk>
-
-	* ComboBox.cs: Support item navigation by entering text.  Firstly, 
-	in DropDownList mode, for each key-press select the next item 
-	starting with that letter.
-	For other modes, when no item selected, on arrow-up/-down and open 
-	drop-down select the first item matching the text in the textbox.
-
-2008-04-14  Atsushi Enomoto  <atsushi at ximian.com>
-
-	* X11Keyboard.cs : Control.FromHandle() could return null
-	  in MoveCurrentCaretPos().
-
-2008-04-12  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* ListView.cs: When changing the size in VirtualMode, also Reset the
-	selection.
-	* ListViewItem.cs: Don't call SelectedIndexCollection.Reset when
-	changing selection info for VirtualMode.
-	Fixes #372618.
-
-2008-04-12  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* ThemeWin32Classic.cs: When drawing ListViewItem instancesin Details
-	view, don't use LineLimit for the first item - use NoWrap *always*
-	instead, since ListView.LabelWrap is not used for this view.
-	Fixes #378054.
-
-2008-04-12  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* Binding.cs: Call UpdateIsBinding when setting control - probably
-	Binding is already usable and we don't need to wait to check the
-	IsBinding state. Also for 1.1 profile use IsHandleCreated instead of
-	Created, just like 2.0 does.
-	* CurrencyManager.cs: I'm so lame - the previous check was wrong.
-
-2008-04-11  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* Binding.cs: Just realized we don't need to have a handler for
-	BindingContextChanged, since this info should be now consumed directly
-	in the BindingManagerBase. And also, the manager.IsBindingSuspended
-	state info is checked directly, instead of caching it.
-
-	* CurrencyManager.cs: IsSuspended should return always false if Count
-	== 0.
-
-2008-04-11  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* Binding.cs: When calling PushData, return if manager.Count == 0,
-	since we just don't have data to be read. Also, when setting the
-	Control for binding, hook up some events to refresh the IsBinding
-	state when BindingContext change or control gets created; use
-	Control.IsHandleCreated instead of Control.Created check to set
-	IsBinding state - we *actually* need to modify IsBinding when control
-	is created, but we don't have any Created event, only HandleCreated.
-	Fixes part of #349364.
-
-2008-04-11  Geoff Norton  <gnorton at novell.com>
-
-	* XplatUICarbon.cs: Expose Caret to the Carbon layer.  Guard against
-	warping a null Caret.
-
-2008-04-11  Jonathan Pobst  <monkey at jpobst.com>
-
-	* DataGridView.cs: Implement row/column autosizing methods. Implement
-	autosorting.
-	* DataGridViewColumnHeaderCell.cs: Add painting of the sort glyph.
-	* DataGridViewRowCollection.cs: Add an internal sorting method.
-
-2008-04-11  Jonathan Pobst  <monkey at jpobst.com>
-
-	* ThemeWin32Classic.cs: Apply patch from Ernesto to cache an expensive
-	value in ListView drawing code.
-
-2008-04-11  Jonathan Pobst  <monkey at jpobst.com>
-
-	* FileDialog.cs: Only call FileOk when Ok is clicked, not when Cancel
-	is clicked.  Respect the user setting Cancel in FileOk.
-
-2008-04-11  Geoff Norton  <gnorton at novell.com>
-
-	* ListView.cs: Avoid setting and resetting control Width/Heights and
-	calculate the final value and set it once.  Prevents a feedback loop
-	on the mac.
-
-2008-04-10  Jonathan Pobst  <monkey at jpobst.com>
-
-	* TreeView.cs: Clamp setting the scrollbar value using SafeValueSet.
-	[Fixes bug #378869]
-
-2008-04-10  Atsushi Enomoto  <atsushi at ximian.com>
-
-	* X11Keyboard.cs, X11Structs.cs : make over-the-spot mode default.
-	  Add some on-the-spot code, but it seems we don't need it.
-
-2008-04-10  Jonathan Pobst  <monkey at jpobst.com>
-
-	* Form.cs: Add method for DataGridView to trigger focus cues
-	even when it handles the tab keypress.
-
-2008-04-10  Jonathan Pobst  <monkey at jpobst.com>
-
-	* DataGridView.cs: More keyboard handling, tab, esc.
-	* DataGridViewTextBoxEditingControl.cs: Don't request arrow keys
-	when at the beginning or end of the text in the text box.
-
-2008-04-09  Jonathan Pobst  <monkey at jpobst.com>
-
-	* DataGridViewCell.cs: Guard against an NRE causing a test to fail.
-
-2008-04-09  Jonathan Pobst  <monkey at jpobst.com>
-
-	* DataGridView.cs: Some fixups for showing and adding the edit control.
-	* DataGridViewButtonColumn.cs: Implement ToString.
-	* DataGridViewCell.cs: Size and position the control simultaneously.
-	* DataGridViewTextBoxCell.cs: Use base to position control.
-
-2008-04-09  Jonathan Pobst  <monkey at jpobst.com>
-
-	* DataGridViewCell.cs: Fix up some formatting and painting code.
-	* DataGridViewImageCell.cs: Implement some NIEX methods.
-
-2008-04-09  Jonathan Pobst  <monkey at jpobst.com>
-
-	* ToolStripItemCollection.cs: What moving an item from one owner
-	to another, remove from source owner before adding to destination.
-	[Fixes bug #378109]
-
-2008-04-09  Jonathan Pobst  <monkey at jpobst.com>
-
-	* PictureBox.cs: Call Load when ImageLocation is set.
-	[Fixes bug #378308]
-
-2008-04-09  Atsushi Enomoto  <atsushi at ximian.com>
-
-	* X11Keyboard.cs, XplatUIX11.cs :
-	  Implement over-the-spot mode (with some odd offsets).
-	  - set preedit position when caret is set.
-	  - Wrap XMoveResizeWindow() to move preedit position.
-
-2008-04-08  Everaldo Canuto  <ecanuto at novell.com>
-
-	* X11keyboard.cs: Fix last patch, maxval must be less not greater than
-	array lenght.
-
-2008-04-08  Everaldo Canuto  <ecanuto at novell.com>
-
-	* KeyboardLayouts.cs: Uses GENERATING_RESOURCES to make VKeyTableIndex
-	and ScanTableIndex public, it fix compilations errors when compiling
-	WinForms to generate keyboard layout resources.
-
-2008-04-08  Everaldo Canuto  <ecanuto at novell.com>
-
-	* X11keyboard.cs: Prevent keyboard errors when vitual table theres 
-	different element count than scan table. It prevents some errors in non
-	standard keyboards.
-
-2008-04-08  Jonathan Pobst  <monkey at jpobst.com>
-
-	* DataGridViewHeaderCell.cs: Implement some NIEX methods.
-
-2008-04-08  Jonathan Pobst  <monkey at jpobst.com>
-
-	* DataGridView.cs: Call OnContentClick.
-	* DataGridViewCell.cs: Do a null check on ValueType instead
-	of valueType.
-	* DataGridViewCheckBoxCell.cs: Implement.
-
-2008-04-08  Atsushi Enomoto  <atsushi at ximian.com>
-
-	* X11Keyboard.cs : Do not cast IntPtr to int. Use long.
-
-2008-04-08  Atsushi Enomoto  <atsushi at ximian.com>
-
-	* X11Keyboard.cs : Check XGetIMValues() return value in
-	  case it does not return input styles in some environment.
-
-2008-04-08  Atsushi Enomoto  <atsushi at ximian.com>
-
-	* X11Keyboard.cs : sizeof(IntPtr) != 4 on amd64.
-
-2008-04-07  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* BindingContext.cs: Stub UpdateBinding method.
-
-2008-04-07  Atsushi Enomoto  <atsushi at ximian.com>
-
-        * X11Structs.cs : added couple of structs for XIM support.
-        * X11Keyboard.cs :
-          Release XIM in case it failed to create XIC. 
-          Use consts for XNblah string.
-          Add support for IM style customization and XIC creation
-          for preedit-position and preedit-callback.
-          Right now use MONO_WINFORMS_XIM_STYLE environment variable
-          (list of: over-the-spot | on-the-spot | root). Only root
-          mode works so far.
-
-	  (redoing r99172 with fix.)
-
-2008-04-07  Jonathan Pobst  <monkey at jpobst.com>
-
-	* TreeView.cs: Center the checkbox a little better.
-
-2008-04-07  Jonathan Pobst  <monkey at jpobst.com>
-
-	* ThemeClearlooks.cs, ThemeGtk.cs, ThemeNice.cs, ThemeWin32Classic.cs:
-	Apply very nice patch from Ernesto Carrea that simplifies our
-	scrollbar drawing.  [From bug #376146]
-
-2008-04-07  Jonathan Pobst  <monkey at jpobst.com>
-
-	* TreeView.cs: Correct the location of the root node checkbox when
-	ShowRootLines = false.  Don't draw the root lines for the root node
-	when ShowRootLines = false.  [Fixes bug #377535]
-
-2008-04-06  Gert Driesen  <drieseng at users.sourceforge.net>
-
-	* WebBrowserBase.cs: Added missing attributes and fixed attributes.
-	Fixed line endings.
-	* WebBrowser.cs: Added missing attributes and fixed attributes. Fixed
-	line endings.
-	* MaskedTextBox.cs: Added missing attribute. Code formatting.
-	* PageSetupDialog.cs: Added missing attribute. Code formatting.
-	* HtmlWindowCollection.cs: Code formatting. Fixed line endings.
-	* ImeMode.cs: Added missing field.
-	* HtmlWindow.cs: Code formatting. Fixed line endings.
-	* HtmlElement.cs: Code formatting. Fixed line endings. Fixed compiler
-	warnings.
-	* HtmlHistory.cs: Code formatting. Fixed line endings.
-	* HtmlDocument.cs: Code formatting. Fixed line endings.
-	* ToolStripPanel.cs: Added missing IList implementation.
-	* HtmlElementCollection.cs: Code formatting. Fixed line endings.
-
-2008-04-06  Gert Driesen  <drieseng at users.sourceforge.net>
-
-	* BindingContext.cs: Changed argument names to fix corcompare errors.
-	* DataGridView.cs: Removed extra explicit interface implementation
-	of IDropTarget. Code formatting.
-	* FlowLayoutPanel.cs: Changed argument names to fix corcompare errors.
-	* ComboBox.cs: Changed argument names to fix corcompare errors.
-	* DataGridTextBoxColumn.cs: Changed argument names to fix corcompare
-	errors.
-	* GridColumnStylesCollection.cs: Changed argument names to fix
-	corcompare errors. Removed extra tabs.
-	* GridTableStylesCollection.cs: Changed argument names to fix corcompare
-	errors.
-	* Control.cs: Changed argument names to fix corcompare errors. Code
-	formatting. Removed extra explicit IList implementation.
-	* TextBox.cs: Changed argument names to fix corcompare errors. Code
-	formatting. Use string.Empty instead of "".
-	* GridItemCollection.cs: Changed argument names to fix corcompare
-	errors. Code formatting.
-	* DataGridViewTopLeftHeaderCell.cs: Changed argument names to fix
-	corcompare errors. Code formatting.
-	* ImageList.cs: Changed argument names to fix corcompare errors.
-	* ToolStripItem.cs: Changed argument names to fix corcompare errors.
-	* DataGridViewRowCollection.cs: Changed argument names to fix
-	corcompare errors. Code formatting.
-	* TableLayoutPanel.cs: Changed argument names to fix corcompare errors.
-	* DataGridViewSelectedCellCollection.cs: Changed argument names to
-	fix corcompare errors. Code formatting.
-	* DataGridViewComboBoxCell.cs: Changed argument names to fix
-	corcompare errors. Code formatting.
-	* LinkLabel.cs: Changed argument names to fix corcompare errors.
-	* TreeNode.cs: Changed argument names to fix corcompare errors. Code
-	formatting.
-	* PropertyGrid.cs: Changed argument names to fix corcompare errors.
-	Code formatting.
-	* BindingSource.cs: Changed argument names to fix corcompare errors.
-	Removed extra explicit interface implementations.
-	* DataGridViewSelectedRowCollection.cs: Changed argument names to
-	fix corcompare errors. Code formatting.
-	* ToolStripItemCollection.cs: Removed extra explicit interface
-	implementation of IList.ReadOnly.
-	* DataGridViewColumnCollection.cs: Changed argument names to fix
-	corcompare errors. Code formatting.
-	* DataGridViewRow.cs: Rename converter to match MS. Code formatting.
-	* ListView.cs:  Changed argument names to fix corcompare errors.
-	* DataGridViewHeaderCell.cs: Changed argument names to fix corcompare
-	errors.
-	* DataGridBoolColumn.cs: Changed argument names to fix corcompare
-	errors.
-	* ListBindingHelper.cs: Changed argument names to fix corcompare
-	errors.
-	* DataGridViewSelectedColumnCollection.cs: Changed argument names to
-	fix corcompare errors. Code formatting.
-	* ToolStripPanel.cs: Removed extra explicit implementation of
-	IDropTarget interface.
-	* ListBox.cs: Changed argument names to fix corcompare errors. Code
-	formatting. Removed extra tabs and spaces.
-	* DataGridViewCellCollection.cs: Changed argument names to fix
-	corcompare errors.
-	* Help.cs: Changed argument names to fix corcompare errors. Code
-	formatting.
-	* TabControl.cs: Changed argument names to fix corcompare errors.
-	* DataGridColumnStyle.cs: Changed argument names to fix corcompare
-	errors.
-	* TableLayoutSettings.cs: Changed argument names to fix corcompare
-	errors.
-
-2008-04-05  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* ListBindingHelper.cs: When returning properties, only return those
-	that are browsable. Also, don't do a linear search of the properties,
-	but use the indexer of the PropertyDescriptorCollection class.
-
-2008-04-05  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* BindingSource.cs: Implement GetRelatedCurrencyManager by adding a
-	Dictionary containing the related (child) currency managers. Also,
-	when setting DataSource, add datasource to our List if it is not a list.
-
-2008-04-05  Ivan N. Zlatev  <contact at i-nz.net>
-
-	* PropertyGridTextBox.cs: Fix background color of the buttons.
-	* PropertyGridView.cs: Make the entry less jumpy.
-
-2008-04-05  Ivan N. Zlatev  <contact at i-nz.net>
-
-	* PropertyGrid.cs: Fix unused variable warnings.
-
-2008-04-05  Ivan N. Zlatev  <contact at i-nz.net>
-
-	* PropertyGridView.cs: Fix expansion via [+] misbehavior on 
-	double-click. It expanded it once in the mouse down and then 
-	again in the double-click handler.
-
-2008-04-04  Ivan N. Zlatev  <contact at i-nz.net>
-	
-	* GridEntry.cs: ICustomTypeDescriptor support for PropertyOwner, 
-	TypeConverter and UITypeEditors.
-
-2008-04-04  Ivan N. Zlatev  <contact at i-nz.net>
-
-	* Control.cs: Visibility should be set synchronously, 
-	so we must also redraw once it is and not rely on layouting or 
-	other code to repaint.
-	[Fixes bug #339898]
-
-2008-04-04  Jonathan Pobst  <monkey at jpobst.com>
-
-	* DataGridViewCell.cs: Respect DataGridView.GridColor.
-
-2008-04-03  Jonathan Pobst  <monkey at jpobst.com>
-
-	* Control.cs: Invalidate when the alpha channel is less than 255,
-	not only when control is transparent.
-
-2008-04-03  Jonathan Pobst  <monkey at jpobst.com>
-
-	* DataGridViewRowPrePaintEventArgs.cs, DataGridViewRowPostPaintEventArgs.cs:
-	Implement some painting convenience methods that threw NIEX.
-
-2008-04-03  Jonathan Pobst  <monkey at jpobst.com>
-
-	* DataGridView.cs: Call CellMouse[Enter|Move|Leave] properly.
-	* DataGridViewLinkCell.cs: Implement.
-
-2008-04-03  Ivan N. Zlatev  <contact at i-nz.net>
-
-	* GridEntry.cs: Report the conversion exception error description.
-	[Fixes bug #375792]
-
-2008-04-03  Ivan N. Zlatev  <contact at i-nz.net>
-
-	* PropertyGridView.cs: Do not scroll to item on resize.
-	[Fixes bug #375789]
-
-2008-04-02  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* BindingContext.cs: When retrieving a BindingManagerBase, if the
-	dataSource parameter is ICurrencyManagerProvider, then return
-	ICurrencyManagerProvider.CurrencyManager/GetRelatedCurrencyManager
-	instead of creating a new one.
-
-2008-04-02  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* BindingSource.cs: Implement support for Type instances as
-	DataSource.
-
-2008-04-02  Jonathan Pobst  <monkey at jpobst.com>
-
-	* DataGridView.cs: Minor cleanups and call CellMouseUp.
-	* DataGridViewCell.cs: Make some painting routines internally virtual.
-	* DataGridViewButtonCell.cs: Implement.
-
-2008-04-02  Jonathan Pobst  <monkey at jpobst.com>
-
-	* Control.cs: We always need to invalidate our children with
-	transparent backgrounds when we are invalidated.
-	[Fixes bug #376081]
-
-2008-04-01  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* BindingSource.cs: EndEdit and CancelEdit should call EndCurrentEdit
-	and CancelCurrentEdit on CurrencyManager respectively. Implement
-	support for ICancelAddNew too.
-
-2008-04-01  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* CurrencyManager.cs: When calling EndCurrentEdit/CancelCurrentEdit,
-	call EndNew/CancelNew if list is ICancelAddNew.
-
-2008-04-01  Jonathan Pobst  <monkey at jpobst.com>
-
-	* DataGridView.cs: Guard against an exception while painting
-	if there are no rows.
-
-2008-04-01  Jonathan Pobst  <monkey at jpobst.com>
-
-	* DataGridView.cs: Implement a bunch of keyboard commands.
-
-2008-03-31  Jonathan Pobst  <monkey at jpobst.com>
-
-	* ToolBar.cs: Don't do our painting if UserPaint is set.  If UserPaint
-	isn't set, don't call OnPaint.  [Fixes bug #375300]
-
-2008-03-30  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* BindingSource.cs: IsBindingSuspended, ResumeBinding and
-	SuspendBinding depend on CurrencyManager. Implement RemoveCurrent,
-	hookup the remaining events related to CurrencyManager, and fire
-	OnListChanged also for the Clear () method.
-
-2008-03-30  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* BindingSource.cs: Use Current and Position implementations in
-	CurrencyManager instead of using our own routines, since we need 
-	to be in synch with it. Count should NEVER return a -1 value, and 
-	also report ListChanged events for both simple IList data 
-	sources (manually) as well for IBindingList ones (by hooking up an
-	event handler for it).
-
-2008-03-28  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* BindingSource.cs: Make one .ctor call the another, to avoid
-	duplicate code. Add the CurrencyManager property, and also for AddNew
-	throw the proper exceptions and show better error messages.
-
-2008-03-28  Jonathan Pobst  <monkey at jpobst.com>
-
-	* ComboBox.cs: Only adjust selectedindex if Handle has been
-	created.  Fixes failing test.
-
-2008-03-28  Jonathan Pobst  <monkey at jpobst.com>
-
-	* ComboBox.cs: Adjust selectedindex if we insert a new item
-	above the current selectedindex in a sorted ComboBox.
-	[Fixes bug #374654]
-
-2008-03-28  Jonathan Pobst  <monkey at jpobst.com>
-
-	* ComboBox.cs: Support PageUp/PageDown when dropdown is closed.
-	[Fixes bug #374712]
-
-2008-03-28  Jonathan Pobst  <monkey at jpobst.com>
-
-	* DataGridViewTextBoxCell.cs: Implement stuffs.
-
-2008-03-27  Jonathan Pobst  <monkey at jpobst.com>
-
-	* TreeView.cs: Create the scrollbars even earlier to be
-	double dog certain they are created before they are accessed.
-
-2008-03-27  Jonathan Pobst  <monkey at jpobst.com>
-
-	* XplatUIX11.cs: Remove a no-op line that csc was choking on.
-
-2008-03-27  Jonathan Pobst  <monkey at jpobst.com>
-
-	* ScrollBar.cs: Create an internal safe Value setter so we
-	won't crash if we try to set a value outside the min and max.
-	* TextBoxBase.cs: Use safe value setter to guard against a
-	potential NRE that is being reported by Reflector.
-
-2008-03-27  Jonathan Pobst  <monkey at jpobst.com>
-
-	* TreeView.cs: Create the scrollbars earlier in the constructor
-	to attempt to guard against an NRE in SetTop in Reflector.
-
-2008-03-27  Jonathan Pobst  <monkey at jpobst.com>
-
-	* DataGridView.cs, DataGridViewCell.cs, DataGridViewCell.cs,
-	DataGridViewRowCollection.cs: Do not scroll column and row headers,
-	show messagebox on data format error, use column display index
-	correctly, make sure HitTest supports new layout stuff,
-	make sure scrollbars support new layout stuff.
-
-2008-03-27  Atsushi Enomoto  <atsushi at ximian.com>
-
-	* XplatUIX11.cs : Patch by Doug Rintoul.
-	  For some IM engines, keypress events need to delay call
-	  to XPending() and XNextEvent() in the loop so that it
-	  does not mess the orders in XIM commit callback.
-	  Some KeyRelease events such as shift keys need to be
-	  processed both in the IM engine and winforms driver
-	  itself since winforms holds its own state check.
-
-	  For details, see: http://lists.ximian.com/pipermail/mono-winforms-list/2008-March/003279.html
-
-2008-03-27  Atsushi Enomoto  <atsushi at ximian.com>
-
-	* X11Keyboard.cs, XplatUIX11.cs :
-	  add primitive support for XIM input support (preedit-
-	  nothing and status-nothing). It requires precise event
-	  capturing (XSelectInput/"filterEvents") and different
-	  call to XFilterEvent against root window.
-	  Get composed string and send dummy WM_IME_COMPOSITION.
-	  Free XIM and XIC instances in finalizer.
-
-	  (This first patch does not include suggested changes
-	   by Doug Rintoul. It will follow.)
-
-2008-03-26  Jonathan Pobst  <monkey at jpobst.com>
-
-	* DataGridView.cs: When binding to a property, if the property
-	doesn't have a setter, set the column to readonly.
-	[Fixes bug #343965]
-
-2008-03-26  Jonathan Pobst  <monkey at jpobst.com>
-
-	* ComboBox.cs: Guard against NRE if an arrow key is hit while
-	we aren't dropped down.  Support Home/End in DropDownList mode.
-	[Fixes bug #371990]
-
-2008-03-26  Jonathan Pobst  <monkey at jpobst.com>
-
-	* TreeNodeCollection.cs: Don't increment count until we've
-	saved our index to return.
-	[Fixes bug #373603]
-
-2008-03-25  Jonathan Pobst  <monkey at jpobst.com>
-
-	* Label.cs: Add padding to the label's AutoSize calculation.
-	[Fixes bug #373792]
-
-2008-03-25  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* ListBindingHelper.cs: Actually implement GetListName method.
-
-2008-03-25  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* BindingSource.cs: Throw the propert expceptions for some methods, as
-	well as detect the list item type for Add method if DataSource is null.
-
-2008-03-25  Jonathan Pobst  <monkey at jpobst.com>
-
-	* DataGridViewCell.cs: I don't know why I commented this out,
-	putting it back for now.
-
-2008-03-25  Jonathan Pobst  <monkey at jpobst.com>
-
-	* DataGridViewCell.cs: Remove storage for owning column, just
-	use column index.
-	* DataGridViewColumn.cs: Make getter for HeaderTextSet.
-	* DataGridViewColumnHeaderCell.cs: If the header text has been
-	explicitly set, return it.
-	[Fixes bug #325979]
-
-2008-03-25  Jonathan Pobst  <monkey at jpobst.com>
-
-	* DataGridViewRowCollection.cs: Disable row sharing when
-	using data binding.  Its a great feature, but lets work on
-	getting DGV usable first before we worry about optimizations.
-
-2008-03-24  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* BindingSource.cs: When resetting our internal list, compute list
-	item type information to be used for indirect list access. Also
-	implement/tune some properties and methods related to the list access
-	too.
-	* ListBindingHelper.cs: Add a stub for GetListName method, used from
-	BindingSource.
-
-2008-03-24  Jonathan Pobst  <monkey at jpobst.com>
-
-	* DataGridView.cs: If RowCount is increased while ColumnCount
-	is zero, add a column.  [Fixes bug #331649]
-
-2008-03-24  Jonathan Pobst  <monkey at jpobst.com>
-
-	* DataGridViewRowCollection.cs: When adding new rows for
-	databinding, make sure they are place before the add row.
-	[Fixes bug #343961]
-
-2008-03-24  Jonathan Pobst  <monkey at jpobst.com>
-
-	* DataGridViewRow.cs: Draw cells in column DisplayIndex order
-	instead of Index order.
-
-2008-03-24  Jonathan Pobst  <monkey at jpobst.com>
-
-	* DataGridView.cs: If columns are added by increasing ColumnCount,
-	they need to be DataGridViewTextBoxColumns, not DataGridViewColumn.
-	[Fixes bug #325588]
-
-2008-03-24  Jonathan Pobst  <monkey at jpobst.com>
-
-	* DataGridView.cs: Turn off and on the "new row" when 
-	AllowUserToAddRows is toggled.  When the handle is created,
-	set current cell and selected cell/row/col.
-
-2008-03-24  Jonathan Pobst  <monkey at jpobst.com>
-
-	* ComboBox.cs: When navigating the drop down by keyboard, we
-	need to scroll the list box if our selection moves out of the
-	currently shown items.  [Fixes bug #371990]
-
-2008-03-24  Luke Page <luke.a.page at gmail.com>
-
-	* RichTextBox.cs: Handles visible rtf tag and no longer shows the text
-	on the control. Also now handles unicode compatibility characters and
-	stores the unicode compatibility length on the stack. Fixes Bugs
-	#355198 and #366436.
-
-2008-03-23  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* BindingSource..cs: Take into account DataMember when re-creating the
-	List property, and also create a specific kind of list as needed.
-
-2008-03-23  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* ListBindingHelper.cs: Add a new case for GetList () method - when we
-	get an empty IEnumerable, try to detect whether the datamember is
-	valid or not for that type, if true, return null, and throw exception
-	otherwise.
-
-2008-03-22  Jonathan Pobst  <monkey at jpobst.com>
-
-	* ComboBox.cs: Alt-Down should drop down the list, Esc should
-	retract it.  [Fixes bug #371989]
-
-2008-03-22  Ivan N. Zlatev  <contact at i-nz.net>
-
-	* PropertyGrid.cs: Initialize the sorting button as pushed.
-
-2008-03-22  Ivan N. Zlatev  <contact at i-nz.net>
-
-	* PropertyGrid.cs: 
-	 - Visually select the PropertyTab.
-	 - Filter Properties by Attributes properly.
-
-2008-03-21  Jonathan Pobst  <monkey at jpobst.com>
-
-	* MenuItem.cs: Remove menu item from parent when disposed.
-	[Fixes bug #372845]
-
-2008-03-21  Jonathan Pobst  <monkey at jpobst.com>
-
-	* ToolBar.cs: Don't reset layout_type if Dock = None.
-
-2008-03-21  Andreia Gaita <avidigal at novell.com> 
-
-	* UserControl.cs: Select the first available control when we get focus.
-	  Fixes #372616
-
-2008-03-21  Jonathan Pobst  <monkey at jpobst.com>
-
-	* DataGridViewCell.cs, DataGridViewTextBoxCell.cs: Don't paint
-	the content if we are in edit mode.  [Fixes bug #343964]
-
-2008-03-21  Jonathan Pobst  <monkey at jpobst.com>
-
-	* DataGridViewCell.cs: Fix border painting for column headers.
-
-2008-03-20  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* BindingSource.cs: When setting or resetting data source,
-	use ListBindingHelper.GetList () method, since it will get the list in
-	case datasource is IListSource.
-
-2008-03-20  Jonathan Pobst  <monkey at jpobst.com>
-
-	* DataGridViewCell.cs: Implement lots more stuffs.
-
-2008-03-20  Ivan N. Zlatev  <contact at i-nz.net>
-
-	* PropertyGridView.cs, GridEntry.cs: Implement support for 
-	UITypeEditor.IsDropDownResizable.
-
-2008-03-20  Jonathan Pobst  <monkey at jpobst.com>
-
-	* DataGridViewCell.cs: Remove unused variables, improve how
-	several of the property getters work.
-	* DataGridViewRow.cs: Don't call setSize on a cell, cell should
-	get its size from the parent row/col.
-
-2008-03-20  Ivan N. Zlatev  <contact at i-nz.net>
-
-	* PropertyGrid.cs: Ensure PropertiesTab is visible even if the 
-	user alters manually the PropertyTabs collection via the 
-	PropertyTabs property.
-
-2008-03-20  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* ListBindingHelper.cs: Implement -previously- ignored cases. We have
-	new tests for them to be sure to be compatible with .net.
-
-2008-03-20  Andreia Gaita <avidigal at novell.com> 
-
-	* WebBrowserBase.cs: Fix attributes, add events
-	* WebBrowser.cs: Fix Padding signature
-
-2008-03-20  Ivan N. Zlatev  <contact at i-nz.net>
-
-	* PropertyGrid.cs, PropertyGridView.cs: Implement PropertyTab support.
-
-2008-03-19  Jonathan Pobst  <monkey at jpobst.com>
-
-	* DataGridView.cs, DataGridViewCell.cs, DataGridViewCellStyle.cs,
-	DataGridViewLinkCell.cs, DataGridViewRow.cs, DataGridViewRowHeaderCell.cs,
-	DataGridViewTextBoxCell.cs: Changes so that DataGridViewCell
-	passes the new suite of tests for it.
-
-2008-03-18  Andreia Gaita <avidigal at novell.com> 
-
-	* WebBrowser.cs: Add missing attributes, missing Padding and
-	  DefaultSize properties, remove extraneous getters
-
-2008-03-17  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* ListBindingHelper.cs: Implement a pair of GetListItemProperties
-	method overloads.
-
-2008-03-16  Jonathan Pobst  <monkey at jpobst.com>
-
-	* ComboBox.cs: Move resetting the selected index to keypress
-	instead of textchanged.  Changing the text programmatically
-	should not trigger resetting the selected index.  Fixes test.
-
-2008-03-16  Jonathan Pobst  <monkey at jpobst.com>
-
-	* ComboBox.cs: When the user types into the textbox, reset
-	the selected index to -1.  [Fixes bug #371672]
-
-2008-03-16  Jonathan Pobst  <monkey at jpobst.com>
-
-	* FileDialog.cs: Support Control-A for selecting everything
-	in an OpenFileDialog.  [Fixes bug #371564]
-
-2008-03-15  Jonathan Pobst  <monkey at jpobst.com>
-
-	* DataGridView.cs: When row/column visible/height properties
-	change, invalidate.  Take the NIEX out of InvalidateRow/Column
-	etc.  We don't support them yet, but we can just invalidate
-	everything until we do support them.  (Added MonoTODO).  Set
-	proper control styles.
-	* DataGridViewRow.cs: Don't call PaintHeader if row headers
-	are turned off.	
-
-2008-03-15  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* ListBindingHelper.cs: Implement 2.0 GetListItemType methods.
-
-2008-03-14  Jonathan Pobst  <monkey at jpobst.com>
-
-	* DataGridViewRow.cs: Only paint the white background in
-	cell bounds, the row bounds extends past the cells if the 
-	grid width isn't as wide as the DGV.
-
-2008-03-14  Jonathan Pobst  <monkey at jpobst.com>
-
-	* DataGridView*: Completely revamp the drawing to match the
-	public API.  Our grids now look better, and call all the
-	appropriate methods and event to allow users to override
-	the painting and do their own.
-
-2008-03-13  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* ListBindingHelper.cs: Implement 2.0 GetList methods.
-
-2008-03-13  Jonathan Pobst  <monkey at jpobst.com>
-
-	* DataGridView.cs: Implement BorderStyle.
-
-2008-03-13  Jonathan Pobst  <monkey at jpobst.com>
-
-	* FileDialog.cs: Apply patch from Andy Hume: Any time we
-	are comparing attributes, make sure we only look at the
-	one we are interested.  These calls were failing if there
-	were more than one attribute.
-	[Fixes bug #370385]
-
-2008-03-13  Jonathan Pobst  <monkey at jpobst.com>
-
-	* DataGridColumnStyle.cs: Hide ctor from 1.1 profile.
-
-2008-03-12  Jonathan Pobst  <monkey at jpobst.com>
-
-	* PageSetupDialog.cs: Stub EnableMetric.
-	* PrintControllerWithStatusDialog.cs: Implement IsPreview.
-	* PrintPreviewDialog.cs: Add ProcessDialogKey,
-	ProcessTabKey.
-
-2008-03-12  Jonathan Pobst  <monkey at jpobst.com>
-
-	* MonthCalendar.cs: Remove unused variable.
-
-2008-03-12  Jonathan Pobst  <monkey at jpobst.com>
-
-	* DataGridView*.cs: corcompare stuffs.
-
-2008-03-11  Jonathan Pobst  <monkey at jpobst.com>
-
-	* MonthCalendar.cs: Remove an incorrect invalidate optimization.
-	The savings aren't worth the extra code to fix the optimization.
-	[Fixes bug #368585]
-
-2008-03-11  Jonathan Pobst  <monkey at jpobst.com>
-
-	* ToolBar.cs: Always call base.Dock in the Dock override so that
-	Control's layout_type gets reset correctly.
-	[Fixes bug #368882]
-
-2008-03-11  Ivan N. Zlatev  <contact at i-nz.net>
-
-	* X11Dnd.cs: End DnD operation also for the middle mouse button.
-
-2008-03-11  Jonathan Pobst  <monkey at jpobst.com>
-
-	* ContainerControl.cs: We can't do MenuStrip implicit mnemonics
-	at the same time we do explicit ones, because we have to give all
-	other controls on the container a chance to handle explicit ones
-	first.  If no one has an explicit mnemonic, then we can let the
-	MenuStrip have a shot at implicit mnemonics.
-	* MenuStrip.cs: Create an implicit mnemonic function.
-	* ToolStrip.cs: When processing explicit mnemonics, don't do implicit
-	mnemonics for MenuStrips.
-	[Fixes bug #368493]
-
-2008-03-11  Jonathan Pobst  <monkey at jpobst.com>
-
-	* AxHost.cs, Binding.cs, DataGridView.cs, DataGridViewCell.cs,
-	DataGridColumnStyle.cs: corcompare stuffs.
-
-2008-03-10  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* FileDialog.cs: Don't add any ColumnHeader to Columns if view is not
-	Details - This is needed after we added the bits to use any available
-	column also for List and SmallIcon view. 
-
-2008-03-09  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* ListBox.cs: Fire SelectedIndexChanged and SelectedValueChanged events
-	at the proper place, not only when changing SelectedIndex and changing
-	the selection using keys/mouse, as .net does.
-
-2008-03-07  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* ControlBindingsCollection.cs: Implement last 2.0
-	DefaultDataSourceUpdateMode property. Also fix a wrong instruction
-	in the new 2.0 Add methods.
-
-2008-03-07  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* ListBox.cs: When calling SelectedIndexCollection.Clear,
-	return if no items are previously selected - this is done to avoid 
-	firing OnSelectedIndexChanged without need to do so. Also,
-	when creating handle ensure that the focused item is visible (as
-	.net does).
-
-2008-03-06  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* ListBox.cs: Rewrote/refactored most of selection code. We require
-	the following things in selection: a) keep selection sorted (both
-	indices and items), b) SelectedIndices automatically detect the
-	selection mode, c) SelectedIndex should be the first selected item
-	index, d) Need to Focus/adjust scroll bar when selecting a new item,
-	not only for SelectedIndex, which is specially important in Multi*
-	selection modes. To achieve this we are moving the selection core to
-	SelectedIndexCollection and make depend all selection modifications on
-	it.
-	Fixes #366438.
-
-2008-03-06  Jonathan Pobst  <monkey at jpobst.com>
-
-	* ToolStrip.cs: Enable implicit mnemonics for drop down
-	menu strips.  [Fixes part of bug #367692]
-
-2008-03-06  Jonathan Pobst  <monkey at jpobst.com>
-
-	corcompare - fix parameter names [stragglers].
-	Binding.cs, BindingsCollection.cs, GridColumnStylesCollection.cs,
-	HelpEventHandler.cs, Label.cs, ListView.cs, Message.cs,
-	TabControl.cs.
-
-2008-03-06  Jonathan Pobst  <monkey at jpobst.com>
-
-	Control.cs: Don't call ProcessMenuKey on WM_SYSKEYUP if there
-	was a mnemonic pressed as well as Alt.  Also, if nothing handles a
-	mnemonic, let the ToolStripManager have it even if it doesn't
-	have a matching mnemonic.
-	[Fixes bug #367499]
-
-2008-03-06  Jonathan Pobst  <monkey at jpobst.com>
-
-	corcompare - fix warning about implicit implementation
-	* ToolStrip.cs: Add IToolStripData interface.
-	* IToolStripData.cs: Add.
-
-2008-03-06  Jonathan Pobst  <monkey at jpobst.com>
-
-	corcompare - fix warning about implicit implementation
-	* Control.cs, ToolStripPanelRow.cs: Add IBounds interface.
-	* IBounds.cs: Add.
-
-2008-03-05  Jonathan Pobst  <monkey at jpobst.com>
-
-	corcompare - fix parameter names [N-Z].
-	LinkArea.cs, NativeWindow.cs, NotifyIcon.cs, PageSetupDialog.cs,
-	Panel.cs, PrintDialog.cs, PrintPreviewControl.cs, PropertyGrid.cs,
-	PropertyManager.cs, RichTextBox.cs,
-	ScrollBar.cs, SelectionRange.cs, SplitContainer.cs, StatusBar.cs,
-	StatusBarDrawItemEventArgs.cs, StatusBarPanelClickEventArgs.cs,
-	StatusStrip.cs, TabControl.cs, TableLayoutColumnStyleCollection.cs,
-	TableLayoutRowStyleCollection.cs, TableLayoutStyleCollection.cs,
-	TextBoxBase.cs, ThreadExceptionDialog.cs, ToolStrip.cs,
-	ToolStripContentPanel.cs, ToolStripDropDown.cs,
-	ToolStripDropDownMenu.cs, ToolStripItem.cs, ToolStripMenuItem.cs,
-	ToolStripPanel.cs, ToolStripSeparator.cs,
-	TreeNode.cs, TreeView.cs, TreeViewHitTestInfo.cs,
-	UICuesEventHandler.cs, UpDownBase.cs.
-
-2008-03-05  Jonathan Pobst  <monkey at jpobst.com>
-
-	corcompare - fix parameter names [G-M].
-	GridColumnStylesCollection.cs, GridItemCollection.cs,
-	GridTableStylesCollection.cs, GroupBox.cs, Help.cs,
-	HelpProvider.cs, ImageListStreamer.cs, InputLanguageCollection.cs,
-	Label.cs, LayoutEngine.cs, LinkClickedEventArgs.cs,
-	LinkLabel.cs, ListBox.cs, ListView.cs, ListViewGroupCollection.cs,
-	ListViewItem.cs, Menu.cs, MenuItem.cs, MenuStrip.cs, MouseEventArgs.cs.
-
-2008-03-05  Jonathan Pobst  <monkey at jpobst.com>
-
-	corcompare - fix parameter names [A-F].
-	Control.cs, DataGridBoolColumn.cs, DataGridColumnStyle.cs,
-	DataGridTextBoxColumn.cs, DataGridViewButtonCell.cs,
-	DataGridViewCellCollection.cs, DataGridViewCellParsingEventArgs.cs,
-	DataGridViewCheckBoxCell.cs, DataGridViewColumnDesignTimeVisibleAttribute.cs,
-	DataGridViewComboBoxCell.cs, DataGridViewHeaderCell.cs,
-	DataGridViewImageCell.cs, DataObject.cs, DomainUpDown.cs,
-	DrawItemEventArgs.cs, FolderBrowserDialog.cs, FontDialog.cs, Form.cs.
-
-2008-03-03  Ivan N. Zlatev  <contact at i-nz.net>
-
-	* GridEntry.cs: Do not convert not only if the types match, 
-	but also if the property type is assigneable from the value's
-	type.
-	[Fixes bug #366566]
-
-2008-03-03  Ivan N. Zlatev  <contact at i-nz.net>
-
-	* PropertyGridView.cs: 
-	 - Subscribe to the listbox only once and not everytime.
-	 - Update the textbox even if SetValue fails.
-	 - Close the listbox before calling TrySetValue just in case.
-	 [Fixes bug #366569]
-
-2008-03-03  Jonathan Pobst  <monkey at jpobst.com>
-
-	* Control.cs: Hide ICollection.CopyTo from the 1.1 profile.
-
-2008-03-02  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* ListView.cs: Implement support for custom column width based on
-	Columns collection (we were previously using this collection only
-	with Details view).
-	Fixes #364484.
-
-2008-03-01  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* ListViewItem.cs: For Tile view, always set bounds for the first
-	subitem (which is the main one), and also don't let Width be larger
-	than ListView.TileSize.Width. Improve code readibility also.
-	* ThemeWin32Classic.cs: When painting the ListViewItem instances
-	in Tile view, _always_ use the NoWrap flag.
-	Fixes #360798.
-
-2008-02-29  Ivan N. Zlatev  <contact at i-nz.net>
-
-	* PropertyGrid.cs: Check for null PropertyDescriptor.Name just 
-	in case.
-	* GridEntry.cs: For MS compitability make all child properties 
-	readonly if the parent is readonly. Ugh.
-	[Fixes bug #365945 and #365944]
-
-2008-02-29  Andreia Gaita <avidigal at novell.com> 
-
-	* HtmlHistory.cs: Fix sigs for Forward and Back to navigate by index
-	  relative to the history
-
-2008-02-29  Andreia Gaita <avidigal at novell.com>
-
-	* HtmlElement.cs: More handlers for mouse and key events
-
-2008-02-28  Andreia Gaita <avidigal at novell.com>
-
-	* WebBrowserBase.cs: MouseClick sig changed.
-	* HtmlHistory.cs: Implement history navigation
-	* HtmlElement.cs: Add event handlers, and connect them.
-
-2008-02-28  Ivan N. Zlatev  <contact at i-nz.net>
-
-	* GridEntry.cs: 
-	 - Use PropertyDescriptor.DisplayName instead of .Name for Label,
-	   so that DisplayNameAttribute doesn't get ignored.
-	 - Check for ParenthesizeNameAttribute and parenthesize the Label.
-	 - Add support for PasswordPropertyTextAttribute
-	* PropertyGridView.cs: Check if an entry is a password.
-	[Fixes bugs #365589, #365586, #365588]
-
-2008-02-28  Andreia Gaita <avidigal at novell.com>
-
-	* PropertyGridView.cs: Revert the message filtering change, as we
-	need it to block after all. Remove block parameter, unnecessary.
-
-2008-02-27  Jonathan Pobst  <monkey at jpobst.com>
-
-	* UserControl.cs: Better implementation of GetPreferredSize.
-	First step to fixing bug #361441.
-
-2008-02-26  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* Binding.cs: Actually implement data binding support for 
-	classes implementing IBindableComponent.
-	* ControlBindingsCollection.cs: Likewise.
-
-2008-02-26  Andreia Gaita  <avidigal at novell.com>
-
-	* PropertyGridView.cs: Use a message filter to check when to 
-	close the dropdown
-
-2008-02-26  Andreia Gaita  <avidigal at novell.com>
-
-	* Application.cs: Change the message_filters loop so a filter 
-	can be removed while looping.
-
-2008-02-26  Ivan N. Zlatev  <contact at i-nz.net>
-
-	* GridEntry.cs: Optimization in ToggleValue so that it caches
-	the current value.
-	* PropertyGridView.cs: An optimization so that the property isn't 
-	re-read twice for each StandardValue added to the drop-down menu.
-	Patch by Andy Hume <andyhume32 at yahoo.co.uk> under the MIT/X11
-	license.
-	[Fixes bug #362755]
-
-2008-02-26  Jonathan Pobst  <monkey at jpobst.com>
-
-	* Application.cs: Apply patch from Justin Cherniak to match
-	MS better for ProductName, ProductVersion, and CompanyName.
-	[Fixes bug #361709]
-
-2008-02-25  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* Binding.cs: Actually implement 2.0 NullValue property. Also
-	when changing the formatting related properties, only update the state
-	if formatting_enabled is true (we don't mind otherwise).
-
-2008-02-25  Jonathan Pobst  <monkey at jpobst.com>
-
-	* ToolStrip.cs: Don't raise ItemClicked for disabled items.
-	[Fixes bug #364486]
-
-2008-02-25  Ivan N. Zlatev  <contact at i-nz.net>
-
-	* GridEntry.cs: Use the PropertyDescriptor.PropertyType instead 
-	of GetType on the current value as it uses reflection to 
-	determine the type. This fixes the case where the new value is 
-	null. 
-
-2008-02-25  Ivan N. Zlatev  <contact at i-nz.net>
-
-	* PropertyGridView.cs: Limit mousewheel scrolling to not scroll
-	past the view.
-
-2008-02-24  Luke Page  <luke.a.page at gmail.com>
-
-	* Line.cs, TextControl.cs: Implement offset x and y so that a
-	document doesn't have to begin  at (0,0) on the viewpoint.
-	* TextBox.cs, TextBoxBase.cs: RightToLeft switches the scroll
-	bars and switches the text alignment (and therefore is now
-	implemented for textbox). Fixes #321383.
-
-2008-02-23  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* Binding.cs: Actually implement 2.0 FormatString and FormatInfo
-	properties. Also when changing FormattingEnabled update the control
-	property -as .Net does-.
-
-2008-02-22  Carlos Alberto Cortez <calberto.cortez@ŋmail.com>
-
-	* ControlBindingsCollection.cs: Add the missing 2.0 Add overloads.
-	* Binding.cs: Add stubs for the overloads of the Add method in
-	CBCollection.
-
-2008-02-22  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* Binding.cs: PullData () returns a false value if we got an exception.
-	Also when validating the control and we get an error, instead of
-	setting the value of the previous one, cancel the event (tested in 1.1
-	and 2.0).
-
-2008-02-22  Jonathan Pobst  <monkey at jpobst.com>
-
-	* TreeView.cs: Make selected_node and highlighted_node internal.
-	* TreeNodeCollection.cs: Reset selected_node and highlighted_node
-	to null when Nodes.Clear is called.
-	[Fixes bug #363884]
-
-2008-02-21  Jonathan Pobst  <monkey at jpobst.com>
-
-	* FontDialog.cs: Ensure that when the Font is set in code,
-	all the gui pieces are updated accordingly.
-	[Fixes bug #361020]
-
-2008-02-21  Jonathan Pobst  <monkey at jpobst.com>
-
-	* TextRenderer.cs: Respect proposed size for MeasureString.
-	* ThemeWin32Classics.cs: If our CheckBox/RadioButton isn't
-	autosize, use a proposed width to force wrapping for long text.
-	[Fixes bug #360981]
-
-2008-02-21  Jonathan Pobst  <monkey at jpobst.com>
-
-	* TreeView.cs: Factor in checkboxes = false and state images in
-	to HitTest.  [Fixes bug #363360]
-
-2008-02-21  Jonathan Pobst  <monkey at jpobst.com>
-
-	* ThemeWin32Classic.cs: Only look at the Date part of a DateTime
-	when drawing the selected range.
-	[Fixes bug #363648]
-
-2008-02-21  Jonathan Pobst  <monkey at jpobst.com>
-
-	* ToolStripContainer.cs: Add SupportsTransparentBackColor and
-	ResizeRedraw control styles.
-	[Fixes bug #363555]
-
-2008-02-20  Jonathan Pobst  <monkey at jpobst.com>
-
-	* TreeView.cs: StateImages are basically custom checkboxes, so
-	factor their size the same as real checkboxes when determining
-	what got clicked.
-	[Fixes bug #363367]
-
-2008-02-20  Jonathan Pobst  <monkey at jpobst.com>
-
-	* MessageBox.cs: Make the message box wider if the form caption
-	is longer than the text in the form.
-	[Fixes bug #361137]
-
-2008-02-20  Ivan N. Zlatev  <contact at i-nz.net>
-
-	* PropertyGridView.cs: Fix a NRE when closing the drop down form.
-
-2008-02-20  Jonathan Pobst  <monkey at jpobst.com>
-
-	* TreeNode.cs: Guard against an NRE when the parent's
-	StateImageList hasn't been set.
-	[Fixes bug #363353]
-
-2008-02-20  Jonathan Pobst  <monkey at jpobst.com>
-
-	* SplitContainer.cs: Add SupportsTransparentBackColor and
-	OptimizedDoubleBuffering control styles.
-	[Fixes bug #363303]
-
-2008-02-20  Jonathan Pobst  <monkey at jpobst.com>
-
-	* Application.cs: For the app data paths and the registry key paths,
-	ensure they are created before returning them to the user.
-	[Fixes bug #361709]
-
-2008-02-20  Jonathan Pobst  <monkey at jpobst.com>
-
-	* Application.cs: Guard against an NRE in CompanyName and
-	ProductName.
-
-2008-02-20  Jonathan Pobst  <monkey at jpobst.com>
-
-	* Application.cs: For CompanyName, ProductName, and ProductVersion,
-	make sure we handle all three cases correctly: attribute is present,
-	attribute is present but is an empty string, and attribute is not
-	present.
-
-2008-02-20  Ivan N. Zlatev  <contact at i-nz.net>
-
-	* PropertyGridView.cs: 
-	 - Fix a NRE that caused a test failure
-	 - Another performance improvement - cache the standard values
-	 listbox.
-
-2008-02-19  Jonathan Pobst  <monkey at jpobst.com>
-
-	* ComboBox.cs: Fix previous change to affect both 1.1 and 2.0
-	code paths.
-
-2008-02-19  Ivan N. Zlatev  <contact at i-nz.net>
-
-	* PropertyGridView.cs: Fix a big performance bug.
-
-2008-02-19  Jonathan Pobst  <monkey at jpobst.com>
-
-	* SelectionRange.cs: Apply patch from Andy Hume to make
-	constructor behavior more accurate.  [Fixes bug #362117]
-
-2008-02-19  Andreia Gaita <avidigal at novell.com> 
-
-	* Control.cs: Added a new flag is_disposing to track if the
-	window is currently in the process of being disposed of.
-	This is used so that, when firing visibility changes triggered
-	by unparenting controls during Dispose, the control doesn't
-	get created again.	
-
-2008-02-19  Jonathan Pobst  <monkey at jpobst.com>
-
-	* ComboBox.cs: Set height to preferred height when the handle
-	is created.  [Fixes bug #360862]
-
-2008-02-18  Andreia Gaita <avidigal at novell.com>
-
-	* XplatUIX11.cs: Create FosterParent with border width at 0.
-	With the previous value of 4, everytime a control got reparented
-	from parent = null, it's location would be shifted right and 
-	down by 4, since these coordinates would be offset by the 
-	FosterParent's border width.
-
-2008-02-18  Ivan N. Zlatev  <contact at i-nz.net>
-
-	* Control.cs: During diposing firstly remove ourselfes from
-	the parent and *then* destroy our handle, because removing
-	ourselfes from the parent controls collection causes 
-	VisibilityChange, etc events, which require a handle and end
-	up recreating the control.
-
-2008-02-17  Ivan N. Zlatev  <contact at i-nz.net>
-
-	* GridEntry.cs: Set expanded state before notifying that the
-	expansion has taken place.
-	* PropertyGridView.cs:
-	 - Set the propertygridtextbox text to the selected 
-	 StandardValue before proceeding to setting it.
-	 - Scrolling bugfixes.
-
-2008-02-16  Ivan N. Zlatev  <contact at i-nz.net>
-
-	* GridEntry.cs:
-	 - Fix ValueText to not return null.
-	 - Fix conversion error reporting to actually happen.
-	* PropertyGridView.cs: Set entry only if the text has changed.
-	[Fixes bug #362116]
-
-2008-02-16  Ivan N. Zlatev  <contact at i-nz.net>
-
-	* GridEntry.cs: 
-	 - Fix handling of a null current value.
-	 - Swallow editor exceptions.
-	[Fixes bug #362114]
-
-2008-02-16  Ivan N. Zlatev  <contact at i-nz.net>
-
-	* PropertyGrid.cs: Clear current items first thing before 
-	repopulating subitems.
-	* GridEntry.cs: 
-	 - Handle null StandardValuesCollection.
-	 - Mark as not editable if there is no PropertyDescriptor and
-	 if the Converter cannot convert from string.
-	[Part of fix for bugs #360666 and #358332]
-
-2008-02-15  Luke Page  <luke.a.page at gmail.com>
-	* MaskedTextBox.cs: Now skips non editable characters after a
-	character has been entered and we are progressing to the next
-	position in the MaskedTextBox.
-
-2008-02-15  Luke Page  <luke.a.page at gmail.com>
-	* TextBoxBase.cs: Handles MouseDown when shift key is clicked so
-	that it changes the selection rather than just repositioning the
-	cursor. Fixes Bug #360873.
-
-2008-02-15  Luke Page  <luke.a.page at gmail.com>
-	* TextBoxBase.cs, TextControl.cs, RichTextBox.cs: TextChanged fires
-	when Undo/Redo changes the text. Undo/Redo/Undo/Redo now works
-	correctly. See #359330
-
-2008-02-15  Andreia Gaita <avidigal at novell.com>
-
-	* XplatUIX11.cs: If the handle is null when posting a message, use the
-	current thread queue to post instead. Fixes #332409
-
-	* SendKeys.cs: Slight optimization
-
-2008-02-14  Ivan N. Zlatev  <contact at i-nz.net>
-
-	* PropertyGrid.cs, PropertyGridView.cs:
-	Fix multiple scrolling and sizing issues.
-	[Fixes bug #359199]
-
-2008-02-12  Ivan N. Zlatev  <contact at i-nz.net>
-
-	* PropertyGridView.cs: Ensure that drop down editors are shown
-	in the WorkingArea of the screen.
-	[Fixes bug #359807]
-
-2008-02-12  Ivan N. Zlatev  <contact at i-nz.net>
-
-	* GridEntry.cs: Fail silently when UITypeEditor is missing.
-	[Fixes bug #360666]
-
-2008-02-11  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* Binding.cs: Implement 2.0 DataSourceNullValue property.
-
-2008-02-11  Ivan N. Zlatev  <contact at i-nz.net>
-
-	* PropertyGridView.cs:
-	 - Clear the controls in the drop down form after it is hidden.
-	 - Fix Width sizing of the dropdown editors to match MSFT.
-
-2008-02-11  Ivan N. Zlatev  <contact at i-nz.net>
-
-	* PropertyGridView.cs: 
-	 - Fix height for drawing the grid entry
-	 text value, so that it clips multiline text properly.
-	 - Fix unfocusing to match MSFT.
-
-2008-02-11  Ivan N. Zlatev  <contact at i-nz.net>
-
-	* PropertyGrid.cs: Do not populate subgriditems unless expandable.
-	Fixes a bug where on repopulation after value changed items become
-	expandable.
-
-2008-02-10  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* Binding.cs: For the 2.0 profile, look for a 
-	'PropertyChanged' event in the target control, and add checks for
-	DataSourceUpdateMode property to change -or not- the data source
-	from validation/control property change.
-
-2008-02-10  Atsushi Enomoto  <atsushi at ximian.com>
-
-	* Binding.cs : build fix (operator == is not overriden in 1.x. Do
-	  not compare struct with null in 2.0).
-
-2008-02-10  Luke Page <luke.a.page at gmail.com>
-
-	* MaskedTextBox.cs: UseSystemPasswordChar updates PasswordChar, PasswordChar
-	updates the provider and if not using a provider, uses the internal document
-	class implementation of password char. Also when showing text, uses display string
-	from the provider, instead of the actual text.
-
-2008-02-09  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* Binding.cs: Ooooops, forgot to take into account the data_source
-	and binding_member_info null case (it was breaking the Binding tests).
-
-2008-02-09  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* Binding.cs: Implement support for data source changes exposed by
-	'PropertyNameChanged' events, and update the control property as
-	needed.
-
-2008-02-08  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* Binding.cs: Implement 2.0 WriteValue method.
-
-2008-02-08  Jonathan Pobst  <monkey at jpobst.com>
-
-	Commit patch from James Purcell for better AutoScale implementation:
-
-	* ScaleControl should call GetScaledBounds with the control's total size rather
-	than client size.  GetScaledBounds should handle ignoring the borders in its
-	calculations.  Cleaned up ScaleControl/GetScaledBounds overrides in controls
-	(for the most part they just call the base code now since that is fixed).
-	* Added ScaleChildrenInternal to allow controls to disable scaling of children
-	without having to override ScaleChildren (since none of .NET's controls do). 
-	This is required for most controls in Mono that have scrollbars to prevent the
-	scrollbars from being moved/resized.
-	* Nested ContainerControls can have a different scale mode than their parent. 
-	This is briefly mentioned in MSDN but is buggy in MS.NET (the runtime and
-	designer produce different results both of which look incorrect).
-	* Default AutoScaleMode for ContainerControl should be Inherit.
-	* Simplified workaround for ComboBox scaling issue.
-	* 1.0 style auto-scaling now uses its own methods instead of sharing 2.0's. 
-	1.0 style auto scaling should scale the whole control's size instead of
-	ignoring the borders (except for Form) and the rounding is done differently to
-	preserve control alignment.
-	* ApplyAutoScaling (used for 1.0 style) should use the rounded result of
-	GetAutoScaleSize.
-	* Cleaned up fix for "Bug 355703 - Setting AutoScale = true doesn't stick".
-	* CurrentAutoScaleDimensions should round the estimated character width instead
-	of truncating.
-	* ListBox's GetScaledBounds should always use the height it was set to instead
-	of the height that was passed in.  This prevents rounding errors from
-	accumulating quickly with IntegralHeight.
-	[Bug #359098]
-
-2008-02-08  Andreia Gaita <avidigal at novell.com>
-
-	* Form.cs: Add a null check (darn it). 
-
-2008-02-08  Jonathan Pobst  <monkey at jpobst.com>
-
-	* MdiClient.cs: Make sure the requesting form actually owns the
-	control menu items before removing them.  Also, use
-	Suspend/ResumeLayout when adding or removing items so we only
-	layout once.
-	[Fixes bug #359887]
-
-2008-02-08  Jonathan Pobst  <monkey at jpobst.com>
-
-	* Control.cs: Guard against an NRE in ShowFocusCues.
-	[Fixes bug #359830]
-
-2008-02-08  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* Binding.cs: Implement 2.0 ReadValue method and ControlUpdateMode
-	property, as well as stubbing DataSourceUpdateMode.
-
-2008-02-08  Andreia Gaita <avidigal at novell.com>
-
-	* Form.cs: When closing forms, get focus back to the active control of the
-	active form. [Fixes #341314, corner case]
-	
-2008-02-07  Jonathan Pobst  <monkey at jpobst.com>
-
-	* MdiClient.cs: After we move the scrollbars, invalidate the NC
-	area, so any old scrollbar artifacts are cleaned up.
-	[Fixes bug #336305]
-
-2008-02-07  Jonathan Pobst  <monkey at jpobst.com>
-
-	* MdiWindowManager.cs: If we are maximized and using MainMenuStrip
-	for our menus, display that control box menu instead of the 1.1
-	menu one.
-
-2008-02-07  Jonathan Pobst  <monkey at jpobst.com>
-
-	* MdiControlStrip.cs: Add property to access the mdi form tied to
-	each toolstripitem.
-	* MdiClient.cs: Be smarter about removing and adding toolstripitems
-	to the implicitly merged menu.  Every time we clicked the form, items
-	were getting removed and the re-added, causing the form to jump around
-	as the menu resized.
-
-2008-02-07  Jonathan Pobst  <monkey at jpobst.com>
-
-	* MdiClient.cs: Make sure the NormalBounds always gets set.  It
-	was being reset by the implicit menu merge for menustrips.
-	[Fixes bug #336296]
-
-2008-02-07  Jonathan Pobst  <monkey at jpobst.com>
-
-	* Form.cs: Don't do the previous change when WindowState = Normal,
-	or it messes up where the window is placed.  Fixes test failure.
-
-2008-02-07  Jonathan Pobst  <monkey at jpobst.com>
-
-	* Form.cs: When becoming visible, if we are an MDI child, call
-	SetWindowState with a dummy old_state so that changes will actually
-	be made.
-	[Fixes the 2nd part of bug #325473]
-
-2008-02-07  Andreia Gaita <avidigal at novell.com>
-
-	* Control.cs: Reset properties to their pre parent-change values in case
-	the new parent == null (in which case we're basically removing the control, 
-	and don't want any events fired due to fake property changes)
-	[Fixes #355850]
-
-2008-02-06  Ivan N. Zlatev  <contact at i-nz.net>
-
-	* PropertyGridView.cs: 
-	 - Refactor SetValue to allow setting the value
-	when a custom editor is used, but the entry is not editable.
-	 - Remove the custom editor control on CloseDropDown.
-	[Fixes #359196]
-
-2008-02-06  Andreia Gaita <avidigal at novell.com>
-
-	* PrintControllerWithStatusDialog.cs: Set PrintFileName value through
-	reflection only on 1.1, this property is public on system.drawing on 2.0.
-	Fixed #359247
-
-2008-02-06  Andreia Gaita  <avidigal at novell.com>
-	
-	* WebBrowser.cs: Do a normal page refresh by default.
-
-2008-02-05  Andreia Gaita  <avidigal at novell.com>
-
-	* XplatUIWin32.cs, XplatUICarbon.cs: set the hwnd.Mapped flag when we create 
-	the window so that the check on Control.UpdateZOrderOfChild passes on non-X
-	platforms. Fixes #359036
-	
-	Note: Control.UpdateZOrderOfChild needs to be rewritten to not rely on 
-	platform-specific flags.
-
-2008-02-05  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* Binding.cs: Add 2.0 BindableComponent property - just return control
-	by now.
-
-2008-02-05  Everaldo Canuto  <ecanuto at novell.com>
-
-	* MenuAPI.cs: Check if control is disposable when track popup menu. Thanks
-	Jonathan for this patch. Fixes #358442.
-
-2008-02-05  Jonathan Pobst  <monkey at jpobst.com>
-
-	* Form.cs: If we change the active MDI child form, let the others
-	know they need to repaint their title bar so it will appear inactive.
-	[Fixes part 1 of bug #325473]
-
-2008-02-05  Ivan N. Zlatev  <contact at i-nz.net>
-
-	 * PropertyGridView.cs: Do not trucate custom editors' width
-	 and align them to the left.
-	 [Fixes #358353 and #358349]
-
-2008-02-04  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* BindingsCollection.cs: Implement 2.0 CollectionChanging event.
-	Also fix the arguments passed to CollectionChangeEventArgs in the
-	related methods.
-
-2008-02-04  Geoff Norton  <gnorton at novell.com>
-
-	* Hwnd.cs: The conversion to Quartz coordinates happens in
-	System.Drawing.  Removing this translation from here.
-
-2008-02-04  Ivan N. Zlatev  <contact at i-nz.net>
-
-	 * PropertyGrid.cs, PropertyGridView.cs, GridEntry.cs,
-	 CategoryGridEntry.cs, RootGridEntry.cs, GridItem.cs,
-	 GridItemCollection.cs:
-	 PropertyGrid rewrite part 2. Tons of bugfixes and new features.
-
-2008-02-04  Geoff Norton  <gnorton at novell.com>
-
-	* X11Keyboard.cs: VK_MENU should send a KEYUP instead of 
-	SYSKEYUP if any other key has been pressed in the mean time.
-	Fixes #324404
-
-2008-02-04  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* ListView.cs: In ItemControl.ItemsMouseMove, only fire ItemDrag event
-	when the item in current position is different than 0. Also, save the
-	item index in the beginning of the operation, instead of getting the
-	index of the item when the event is actually performed. Lastly clean
-	the related fields in ItemsMouseUp if the ItemDrag operation wasn't
-	triggered.
-	[Fixes #357873]
-
-2008-02-03  Jonathan Pobst  <monkey at jpobst.com>
-
-	* Form.cs: Alt-Minus for MDI children system menu should work
-	with both the minus keys on the keyboard.
-	[Fixes bug #336295]
-
-2008-02-03  Jonathan Pobst  <monkey at jpobst.com>
-
-	* Control.cs: Don't invalidate on region change.  The WM should
-	take care of this automagically.  Keeps us out of an infinite
-	paint loop if someone changes the Region in the OnPaint.
-	[Fixes bug #358327]
-
-2008-02-04  Ivan N. Zlatev  <contact at i-nz.net>
-
-	 * ImageIndexConverter.cs: ConvertFrom must handle "(none)".
-
-2008-02-03  Jonathan Pobst  <monkey at jpobst.com>
-
-	* DateTimePicker.cs: Apply patch from Srikanth Madikeri so we drop
-	down the MonthCalendar only on F4, not Alt+F4.
-	* MonthCalendar.cs: If we are a popup, close ourselves on Alt+F4.
-	[Fixes bug #358340]
-
-2008-02-03  Jonathan Pobst  <monkey at jpobst.com>
-
-	* ThemeWin32Classic.cs: For MonthCalendar, draw a dark border
-	if its part of a DateTimePicker, else, use the back color.
-	[Fixes bug #358339]
-
-2008-02-03  Jonathan Pobst  <monkey at jpobst.com>
-
-	* Hwnd.cs: Use GraphicContext instead of the uninitialized bmp_g.
-	[Fixes bug #358342]
-
-2008-02-03  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* CurrencyManager.cs: When we get a ListChanged event from our source,
-	always fire our own ListChanged event, as .Net does.
-
-2008-02-03  Luke Page  <luke.a.page at gmail.com>
-
-	* RichTextBox.cs: AutoSize now defaults to false. Fixes Bug
-	#358379.
-
-2008-02-03  Luke Page  <luke.a.page at gmail.com>
-
-	* TextBoxBase.cs, RichTextBox.cs, TextControl.cs: Sets richtext
-	property. Removed if for richtext property that was always true.
-	PgUp/PgDn at top/bottom fixed for RTB. Fixes bug #358237.
-
-2008-02-03  Luke Page  <luke.a.page at gmail.com>
-
-	* TextBoxBase.cs - commited patch from James Purcell that
-	correctly sets the FixedHeight control style when the MultiLine
-	property is changed on a TextBox control. Fixes bug 358229.
-
-2008-02-02  Luke Page  <luke.a.page at gmail.com>
-
-	* Line.cs, LineTag.cs, RichTextBox.cs, TextControl.cs
-	Fixes bug 351938 - caret is positioned correctly when drawn
-	and when calculating textual position of caret, no longer
-	has a NRE in certain situations.
-	
-2008-02-01  Geoff Norton  <gnorton at novell.com>
-
-	* Hwnd.cs: Ensure that windows moved into -'ve coordinate space
-	get that region removed from the paint event.
-	* XplatUICarbon.cs: Remove the window mapping after disposing of 
-	window.  Prevents a crash with handle reuse.  Optimize exposes
-	only onto visible windows (rare; but possible).
-
-2008-02-01  Jonathan Pobst  <monkey at jpobst.com>
-
-	* UpDownBase.cs: Make sure the internal textbox calls the base's
-	OnMouseDown and OnMouseUp so the textbox will function correctly.
-	There were notes saying it doesn't chain up, but its an internal
-	class, so our implementation may differ.
-	[Fixes bug #357482]
-
-2008-02-01  Jonathan Pobst  <monkey at jpobst.com>
-
-	* ListBox.cs: Fix a logic error and don't process MouseDown
-	for mouse buttons other than Left.
-
-2008-02-01  Jonathan Pobst  <monkey at jpobst.com>
-
-	* Control.cs: Remove HeightInternal.
-	* ListBox.cs: Commit patch from James Purcell that correctly
-	calculates heights for ListBoxen.
-	[Fixes bug #357152]
-
-2008-02-01  Jonathan Pobst  <monkey at jpobst.com>
-
-	* Label.cs: Apply patch from James Purcell that corrects the 
-	signature of the AutoSize property.
-	[Fixes bug #357605]
-
-2008-02-01  Jonathan Pobst  <monkey at jpobst.com>
-
-	* ListBox.cs: Don't throw [Mouse]Click events for buttons
-	other than the left mouse button.
-
-2008-01-31  Jonathan Pobst  <monkey at jpobst.com>
-
-	* Control.cs: Remove my awesome optimization as it caused some
-	regressions with control ordering.  :(
-	[Fixes bug #357467]
-
-2008-01-31  Ivan N. Zlatev  <contact at i-nz.net>
-
-	 * PropertyGridView.cs: Fix a NRE on double click when there is no
-	 selected object.
-
-2008-01-30  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* BindingManagerBase.cs: Implement IsBindingSuspended 2.0 property.
-
-2008-01-30  Jonathan Pobst  <monkey at jpobst.com>
-
-	* ListBox.cs: Call MouseClick and MouseDoubleClick.
-	[Fixes bug #357146]
-
-2008-01-29  Jonathan Pobst  <monkey at jpobst.com>
-
-	* Hwnd.cs: Make bmp, bmp_g variables threadstatic and private.
-	* Control.cs, DataGridViewCell.cs, LineTag.cs: Use Hwnd.GraphicsContext
-	instead of Hwnd.bmp_g.
-
-2008-01-29  Jonathan Pobst  <monkey at jpobst.com>
-
-	* TextRenderer.cs: Don't maintain private bitmap/graphics contexts.
-	Use the Hwnd one instead.
-
-2008-01-29  Jonathan Pobst  <monkey at jpobst.com>
-
-	* Form.cs: Remove duplicated copy of GetAutoScaleSize.
-
-2008-01-29  Jonathan Pobst  <monkey at jpobst.com>
-
-	* Form.cs: corcompare for RestoreBounds.
-
-2008-01-29  Jonathan Pobst  <monkey at jpobst.com>
-
-	* Control.cs: Add MarshalAs attribute to Font getter for corcompare.
-
-2008-01-29  Jonathan Pobst  <monkey at jpobst.com>
-
-	* Form.cs: Handle Alt-Minus for MDI children forms.
-	* MdiWindowManager.cs: Make ShowPopup internal so Form can call it.
-	Add mnemonics to the control menu.
-	[Fixes bug #336295]
-
-2008-01-28  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* Binding.cs: Initial implementation bits of FormattingEnabled
-	property and BindingComplete event (2.0). 
-	* BindingCompleteEventArgs.cs: Internal methods for setting error text
-	and exception.
-
-2008-01-28  Jonathan Pobst  <monkey at jpobst.com>
-
-	* TableLayoutPanel.cs: Draw the table border at 0,0 instead of
-	table.Location.  [Fixes bug #354672]
-
-2008-01-28  Jonathan Pobst  <monkey at jpobst.com>
-
-	* Form.cs: Handle WM_ENTERSIZEMOVE and WM_EXITSIZEMOVE to raise
-	ResizeBegin and ResizeEnd.  [Fixes bug #346529 for win32]
-
-2008-01-28  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* ComboBox.cs: When OnDisplayMemberChanged method is reached, instead
-	of doing all the re-bound work, just invalidate and call SetControlText 
-	to set the updated text of selected item to our textbox.
-	Fixes #333750.
-
-2008-01-28  Andreia Gaita <avidigal at novell.com>
-
-	* HtmlWindow.cs: Add event handler support. Add Document, Frames, 
-	IsClosed, Opener, StatusBarText, Url properties, stub out the remaining
-	missing properties and methods. Add Load, Unload, Error, GotFocus, 
-	LostFocus, Resize, Scroll events (only load and unload are connected)
-
-2008-01-27  Gert Driesen  <drieseng at users.sourceforge.net>
-
-	* AccessibleObject.cs: Modified argument names to match MS.
-	* Button.cs: Modified argument names to match MS.
-	* BindingContext.cs: Modified argument names to match MS.
-	* BindingMemberInfo.cs: Modified argument names to match MS.
-	* ButtonBase.cs: Modified argument names to match MS.
-	* ComboBox.cs: Modified argument names to match MS.
-	* Control.cs: Modified argument names to match MS.
-	* CheckedListBox.cs: Modified argument names to match MS.
-	* CommonDialog.cs: Modified argument names to match MS.
-	* DataGrid.cs: Modified argument names to match MS.
-	* CursorConverter.cs: Modified argument names to match MS.
-	* ControlPaint.cs: Modified argument names to match MS.
-	* CheckBox.cs: Modified argument names to match MS.
-	* ControlBindingsCollection.cs: Modified argument names to match MS.
-	* BindingSource.cs: Modified argument names to match MS.
-	* DataFormats.cs: Modified argument names to match MS.
-	* ContainerControl.cs: Modified argument names to match MS.
-	* CurrencyManager.cs: Modified argument names to match MS.
-	* Application.cs: Modified argument names to match MS.
-	* ContextMenuStrip.cs: Modified argument names to match MS.
-	* ContextMenu.cs: Modified argument names to match MS.
-	* BindingManagerBase.cs: Modified argument names to match MS.
-	* WindowsFormsSection.cs: Fixed line ending.	
-
-2008-01-27  Andreia Gaita <avidigal at novell.com>
-
-	* PropertyGridView.cs: Rearrange the dropdown loop so that it exits when
-	detecting that the dropdown toolwindow is hidden. EndLoop outside the
-	while.
-
-2008-01-26  Gert Driesen  <drieseng at users.sourceforge.net>
-
-	* PropertiesTab.cs: Fixed argument name of GetDefaultProperty to match
-	MS. Code formatting.
-
-2008-01-26  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* Binding.cs: Don't avoid the Format event if the control 
-	property type is object. Also, if the value retrieved by 
-	the data source is null _and_ the control proeprty type 
-	is object, return Convert.DBNull (match .Net).
-	Fixes part of #324286.
-
-2008-01-26  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* ListControl.cs: Since we are getting two BinginContextChanged events
-	for the same binding context instance (when the control is added to
-	form, and when the form is actually shown), take it into account only the
-	first time for a given binding context instance.
-	Fixes part of #324286.
-
-2008-01-26  Ivan N. Zlatev  <contact at i-nz.net>
-
-	 * PropertryGridView.cs: Ops.
-
-2008-01-26  Ivan N. Zlatev  <contact at i-nz.net>
-
-	 * PropertyGridView.cs: Close dropdown form if the owner form is
-	 moved or minimized.
-	 [Fixes bug #322446]
-
-2008-01-25  Ivan N. Zlatev  <contact at i-nz.net>
-
-	 * PropertyGrid.cs, PropertyGridView.cs, GridEntry.cs, GridItem.cs, 
-	 RootGridEntry.cs, CategoryGridEntry.cs:
-	 PropertyGrid rewrite.
-	 - Rewrite all of the control logic in PropertyGrid.
-	 - Rewrite all of the ComponentModel logic in GridEntry.
-	 - Rewrite all UI work in PropertyGridView.
-	 - Many bugfixes, etc.
-
-2008-01-24  Jonathan Pobst  <monkey at jpobst.com>
-
-	* TableLayoutPanel.cs: Enhance GetPreferredSize to take into account
-	when all contained controls are autosize or dock-fill.  Also take into
-	account when the total percentage of column/row sizes is not 100%.
-	[Fixes bug #354672]
-
-2008-01-24  Andreia Gaita <avidigal at novell.com>
-
-	* HtmlDocument.cs:
-	- Save a reference to the IDocument in the instance and
-	  use that one instead of going to WebHost.Document; the document that the 
-	  WebHost returns might not be the right one (in case of frames).
-	- Use the hashcode returned from the IDocument interface.
-	- Implemented: ActiveElement, ActiveLinkColor, All, BackColor, Cookie, 
-	  Domain (setter is not supported), Encoding, ForeColor, Forms, Images, 
-	  LinkColor, Url, VisitedColor, Window
-
-	* HtmlElement.cs: 
-	- Implemented: CanHaveChildren, Children, Document, GetAttribute, 
-	  set_Attribute, NextSibling, Parent, TagName, AppendChild, 
-	  GetElementsByTagName, GetHashCode, HasAttribute, InsertAdjacentElement,
-	  SetAttribute, Equals, equality operators.
-	- Added stubs for: AttachEventHandler, DetachEventHandler, Focus, 
-	  InvokeMember, RaiseEvent, RemoveFocus, ScrollIntoView, 
-	
-	* HtmlElementCollection.cs: Change implementation to use a generic
-	collection. Implemented Enumerator and CopyTo
-
-	* HtmlHistory.cs: Add constructor, no implementation yet.
-
-	* HtmlWindow.cs: Initial implementation with: Name, Parent, Alert,
-	Confirm, Prompt, Navigation, ScrollTo, Open, OpenNew, GetHashCode, 
-	Equals, equality operators.
-
-	* HtmlWindowCollection.cs: Implemented. 
-
-	* WebBrowser.cs: Use the Navigation object to navigate (WebHost.Navigate
-	has been deprecated).
-
-	* WebBrowserBase.cs: Use Completed event to track document loading
-	(Navigated has been deprecated)
-
-2008-01-24  Jonatham Pobst  <monkey at jpobst.com>
-
-	* ThemeWin32Classic.cs: Add tab stops and NoWrap to dropdown MenuItems.  Top
-	level MenuItems do not respect tabs.
-	[Fixes bug #355196]
-
-2008-01-23  Geoff Norton  <gnorton at novell.com>
-
-	* XplatUICarbon.cs:  Ensure that windows are created in their initial 
-	FormWindowState.  Finished fixing Fullscreen windows on Carbon
-
-2008-01-23  Everaldo Canuto  <ecanuto at novell.com>
-
-	* MenuAPI.cs: When FindForm fails uses FindRootParent to find the control to
-	be used as grab_control. Also save status of capture before show ContextMenu
-	and restore it after close.
-
-2008-01-23  Everaldo Canuto  <ecanuto at novell.com>
-
-	* Control.cs: Internal FindRootParent method added to return high control
-	in parent tree.
-
-2008-01-23  Geoff Norton  <gnorton at novell.com>
-
-	* Hwnd.cs: Refactor Whole/Client pointer to 1 element for Cursors.
-	* XplatUICarbon.cs: Refactor some dead code out to Cursor.cs and make
-	it work again.  Handle HITTEST events.
-
-2008-01-23  Geoff Norton  <gnorton at novell.com>
-
-	* XplatUICarbon.cs: Ensure that we always have a host window.  Prevents
-	a crash in certain cases.  Support for fullscreen windows in certain cases.
-
-2008-01-23  Jonathan Pobst  <monkey at jpobst.com>
-
-	* Form.cs: Don't set AutoScaleMode in AutoScale if we don't have to.
-	[Fixes bug #355703]
-
-2008-01-23  Geoff Norton  <gnorton at novell.com>
-	
-	* XplatUICarbon.cs: Remove some dead code that was causing warnings.
-
-2008-01-23  Geoff Norton  <gnorton at novell.com>
-
-	* XplatUICarbon.cs:  Re-enabled Carets in QuickDraw as a overlay window.
-
-2008-01-23  Everaldo Canuto  <ecanuto at novell.com>
-
-	* SplitContainer.cs: Remove unused declarations.
-	* Binding.cs: Remove unused declarations.
-
-2008-01-23  Everaldo Canuto  <ecanuto at novell.com>
-
-	* Form.cs: Remove unused declaration of 'active' in Activate method.
-	* Control.cs: Move declaration of nested_layout inside '#if NET_2_0" to 
-	prevent compilation warnings.
-	* TextControl.cs: Remove unused declaration of selection_pos_on_line.
-	* Hwnd.cs: Remove unused declaration of clip in GetClippingRectangles.
-	* Bindings.cs: Remove unused formatting_enabled declaration.
-	* ToolTip.cs: Put some methods inside '#if NET_2_0" to prevent compilation 
-	warnings.
-	* TreeView.cs: Put some methods inside '#if NET_2_0" to prevent compilation 
-	warnings.
-	* PropertyGridView.cs: Remove usused 'ex' declaration.
-	* DataGridView.cs: Remove unused declarations.
-
-2008-01-23  Everaldo Canuto  <ecanuto at novell.com>
-
-	[Fixes bugs #343966, #338511 and other non reported (context)menu bugs]
-	
-	* Form.cs: Remove all active_tracker (used by menu) stuff, it is now moved 
-	to Control class, it makes possible to grab menu to controls that can't 
-	reach Form using parent tree. Handle for WmButtonUp, WmButtonDown and
-	WmMouseMove removed since it was used only to track menu events.
-
-	* Control.cs:
-	- Moved all active_tracker stuff from Form.
-	- ProcessActiveTracker added to prevent code duplicity, now mouse events 
-	can call this method instead of reimplement all necessary code handle for
-	menu tracker.
-	- Call to ProcessActiveTracker for mouse events (WmButtonUp, WmButtonDown
-	and WmMouseMove).
-	
-	* MenuAPI.cs: 
-	- Remove special handle to ToolStripOverflow, now we can grab menu to 
-	controls that can't reach Form using parent tree.
-	- Change type of grab_control from Form to Control.
-
-2008-01-22  Geoff Norton  <gnorton at novell.com>
-
-	* TextBoxBase.cs: Split up the sizing of controls and placing of 
-	controls.  Fixes a bug where scrollbars in Reflector could be sized
-	wrong and have non-working thumbers.
-
-2008-01-23  Geoff Norton  <gnorton at novell.com>
-
-	* XplatUI.cs: Refactor environment variables to default support to the
-	Carbon driver on the Mac.
-
-2008-01-23  Everaldo Canuto  <ecanuto at novell.com>
-
-	* Label.cs: Uses new LabelPainter for drawing operations.
-	* ThemeWin32Classic.cs: DrawLabel and LabelDefaultSize removed.
-	* Theme.cs: DrawLabel and LabelDefaultSize removed.
-
-2008-01-22  Geoff Norton  <gnorton at novell.com>
-
-	* XplatUICarbon.cs: Enable packing scroll delta into the mouse wParam
-
-2008-01-22  Jonathan Pobst  <monkey at jpobst.com>
-
-	* ThemeWin32Classic.cs: Run Flat, Button appearance, 2.0 CheckBoxes
-	through the normal flat button code and don't draw the checkbox glyph.
-	* Theme.cs: Button->ButtonBase signature change.
-	[Fixes bug #324755]
-
-2008-01-22  Everaldo Canuto  <ecanuto at novell.com>
-
-	* LinkLabel.cs: Uses new class LinkLabelPainter.
-
-2008-01-22  Everaldo Canuto  <ecanuto at novell.com>
-
-	* MessageBox.cs: Adjust right border space, we don't need to add 
-	"space_border*2" two times.
-
-2008-01-22  Jonathan Pobst  <monkey at jpobst.com>
-
-	* ScrollableControl.cs: With the advent of 2.0's Padding, DockPadding
-	becomes a wrapper around Padding.
-	[Fixes a part of bug #354676]
-
-2008-01-22 Geoff Norton  <gnorton at novell.com>
-
-	* Mime.cs:  Avoid a needles exception on OSX if we dont have a buffer
-	acquired.  Also ensure the buffer is large enough to grab the header
-	we need on linux boxes.
-
-2008-01-22  Jonathan Pobst  <monkey at jpobst.com>
-
-	* Control.cs: Implement a custom enumerator so people can delete
-	from the Controls collection while in a foreach.
-	[Fixes bug #355074]
-
-2008-01-22  Ivan N. Zlatev  <contact at i-nz.net>
-
-	 * PropertyGridView.cs: Fix focusing behavior:
-	 - Tab should focus the grid text box.
-	 - Clicking on the labels shouldn't focus the grid text box.
-
-2008-01-22  Ivan N. Zlatev  <contact at i-nz.net>
-
-	 * PropertyGridView.cs: IsValueTypeGridItem should return true 
-	 for Arrays as well.
-
-2008-01-22  Ivan N. Zlatev  <contact at i-nz.net>
-
-	 * PropertyGrid.cs, GridEntry.cs, PropertyGridView.cs:
-	  - Renamed GridEntry.SelectedObjects to TargetObjects to better
-	  reflect the property name role.
-	  - PropertyGrid.GetTarget is not required as the target is known
-	  (TargetObjects).
-	  - Setting values will handle value types as a special case now and
-	  populate them up in the chain.
-	  [Fixes #354990]
-
-2008-01-21  Jonathan Pobst  <monkey at jpobst.com>
-
-	* Hwnd.cs: Create a public property for the Graphics we keep around.
-
-2008-01-21  Ivan N. Zlatev  <contact at i-nz.net>
-
-	 * PropertyGridView.cs: Just hide the grid textbox and do nothing more 
-	 when the current object selection changes. 
-	 Fixes failing test SelectedObject_Null2.B5.
-
-2008-01-21  Ivan N. Zlatev  <contact at i-nz.net>
-
-	 * PropertyGrid.cs: Process Browsable properties with 
-	 DesignerSerializationVisibilityAttribute.Content as being expandable.
-	 This seems also what MS does. Without this e.g SplitContainer.Panel1/2
-	 will not be expandable. We should be nested components-friendly now.
-
-2008-01-21  Andreia Gaita <avidigal at novell.com>
-
-	* WebBrowserBase.cs: Check if control was loaded properly, 
-	don't bind if it wasn't.
-
-	* HtmlDocument.cs: Implement CreateElement, Equals, Focus, 
-	GetElementFromPoint, equality operators, OpenNew, Write.
-	Remove extra set_Body
-
-2008-01-18  Jonathan Pobst  <monkey at jpobst.com>
-
-	* ContainerControl.cs, Control.cs: Apply patch from James Purcell
-	that makes our AutoScale* stuff more tolerant to different orders
-	of being set.  [Fixes bug #354669]
-
-2008-01-18  Ivan N. Zlatev  <contact at i-nz.net>
-
-	 * PropertyGridView.cs, PropertyGridTextBox.cs: 
-	 Drop WM_LBUTTONDOWN msg sending and use focusing instead.
-	 [Fixes #339005 and #348209]
-
-2008-01-18  Ivan N. Zlatev  <contact at i-nz.net>
-
-	 * PropertyGridView.cs: Hide the grid text box before adjusting it
-	 for the newly selected GridItem.
-	 [Fixes #338999]
-
-2008-01-18  Jonathan Pobst  <monkey at jpobst.com>
-
-	* Form.cs: Give MDI children the opportunity to cancel the parent form
-	attempting to close.  Ensure that all [Form]Clos[ing,ed] events get called
-	properly for both the parent and child.
-	* Application.cs: Signature of internal method changed, pass the previous
-	default of false.
-	[Fixes bug #354286]
-
-2008-01-17  Ivan N. Zlatev  <contact at i-nz.net>
-
-	* PropertyGridView.cs: Set the property value only if it has changed.
-	[Fixes bug #338997]
-
-2008-01-17  Jonathan Pobst  <monkey at jpobst.com>
-
-	* MenuAPI.cs: Windows sends us MOUSEMOVE messages when any key is pressed.
-	If the mouse hasn't actually moved, ignore these messages so the currently
-	highlighted menuitem isn't reset to the one under the mouse.
-	[Fixes bug #333668]
-
-2008-01-17  Ivan N. Zlatev  <contact at i-nz.net>
-
-	* PropertyGridView.cs: When the property changes Invalidate the GridItem
-	in order for the properties with UITypeEditor.GetPaintValueSupported == true
-	to reflect the change visually.
-	[Fixes bug #338998]
-
-2008-01-17  Jonathan Pobst  <monkey at jpobst.com>
-
-	* ButtonBase.cs: Add LineLimit to 1.1 button drawing, and TextBoxControl
-	to 2.0 button drawing.
-	* ThemeWin32Classic.cs: Ensure that the rectangle we are using to draw 
-	the button text is tall enough for one line.  LineLimit says it will
-	always draw at least one line, but it is a lie.
-	[Fixes bug #324941]
-
-2008-01-17  Atsushi Enomoto  <atsushi at ximian.com>
-
-	* XplatUIStructs.cs, X11Keyboard.cs :
-	  added some more VK_* keys to be handled.
-
-2008-01-16  Andreia Gaita <avidigal at novell.com>
-
-	* Control.cs: Check if there is a container before setting or getting
-	the validation flag.
-
-2008-01-16  Andreia Gaita <avidigal at novell.com>
-
-	* ContainerControl.cs: Add flag to track if a control cancels validation, 
-	so we don't fire click events.
-
-	* Control.cs: 
-	- (HandleClick) Check if validation was cancelled before  firing the click
-	events (doubleclicks are fired, but not clicks)
-	- (WmLButtonDown) Reset validation flag. The flag is normally reset on 
-	ContainerControl.set_ActiveControl, but in the case of non-selectable
-	controls, like a Label, activecontrol is not set. 
-
-	* ButtonBase.cs: Only fire clicks if validation passes.
-	
-	Fixes #353310
-
-2008-01-16  Geoff Norton  <gnorton at novell.com>
-
-	* XplatUICarbon.cs: Implement GetAutoScaleSize to fix Reflector on
-	trunk
-
-2008-01-16  Jonathan Pobst  <monkey at jpobst.com>
-
-	* FolderBrowserDialog.cs: If we cannot interpret the user's requested
-	SelectedPath, just display the default dialog instead of crashing.
-	[Fixes bug #348989]
-
-2008-01-16  Geoff Norton  <gnorton at novell.com>
-
-	* XplatUICarbon.cs:  Flicker be gone!  Generate our messages in
-	AddExpose instead of trusting apples compositing manager which doesn't
-	work for our use case.  Remove some dead code causing warnings and 
-	redecorate some other code to prevent warnings.
-
-2008-01-16  Geoff Norton  <gnorton at novell.com>
-
-	* XplatUICarbon.cs:  Avoid some unecessary invalidation calls when
-	carbon signals us to redraw.  Fixes another portion of the flickering bug
-
-2008-01-16  Everaldo Canuto  <ecanuto at novell.com>
-
-	* Form.cs: Prevent the MdiParent property to be set when value is the same
-	as value already set. Fixes bug #328019.
-
-2008-01-16  Everaldo Canuto  <ecanuto at novell.com>
-
-	* Form.cs: Don't set mdi_parent as null when mdi window close is prevented, 
-	it prevents NRE when closing mdi child windows. Fixes bug #325211.
-
-2008-01-16  Everaldo Canuto  <ecanuto at novell.com>
-
-	* InternalWindowManager.cs: Invalidade close button after mouse up when 
-	mdi form is prevented to close.
-
-2008-01-16  Everaldo Canuto  <ecanuto at novell.com>
-
-	* MdiClient.cs: Fix the minimum bounds on child window sizes when cascade,
-	thanks to Andy Hume. Fixes bug #325433.
-
-2008-01-16  Andreia Gaita <avidigal at novell.com>
-
-	* LinkLabel.cs: Reset focused_index when resellecting the control.
-	Fixes #323190
-
-2008-01-15  Geoff Norton  <gnorton at novell.com>
-
-	* XplatUICarbon.cs:  Rework Grab/Ungrab handling to send some needed 
-	messages.
-
-2008-01-15  Jonathan Pobst  <monkey at jpobst.com>
-
-	* Form.cs: Change 2 more AutoScaleBaseSize calculation to round instead
-	of truncate.
-
-2008-01-15  Jonathan Pobst  <monkey at jpobst.com>
-
-	* ContainerControl.cs: Setting AutoScaleMode to anything should set
-	Form.AutoScale to false.
-	* Form.cs: Setting AutoScale to true should set AutoScaleMode to None.
-	AutoScaleBaseSize should be changed on Font change unless it has been
-	explicitly set.
-	[Fixes bug #353827]
-
-2008-01-15  Everaldo Canuto  <ecanuto at novell.com>
-
-	* MenuAPI.cs: On instance of MenuTracker check if source control is
-	ToolStripOverflow and use properly method to find form.
-	[Fixes bug #338511]
-
-2008-01-15  Everaldo Canuto  <ecanuto at novell.com>
-
-	[Fixes bug #323241 Transparent toolbar support]
-
-	* ToolBar.cs: Define ToolBarStyles.TBSTYLE_FLAT in CreateParams when toolbar
-	is flat.
-
-	* Control.cs: Paint background as transparent in case of TBSTYLE_FLAT is
-	defined in control style to mimic win32 behavior.
-
-	* ThemeWin32Classic.cs: Don't paint background for flat apparence toolbar, 
-	it will be transparent.
-
-2008-01-14  Everaldo Canuto  <ecanuto at novell.com>
-
-	* XplatUIStructs.cs: Implement ToolBarStyles to use in Style property of
-	CreateParams for ToolBar controls.
-
-2008-01-14  Jonathan Pobst  <monkey at jpobst.com>
-
-	* Form.cs, XplatUI.cs, XplatUIDriver.cs, XplatUIX11.cs: Forms with
-	FixedToolWindow, SizeableToolWindow, or None for border styles have
-	different minimum sizes than regular forms.  Implemented to fix
-	regression in PDN with toolbox being too wide.
-
-2008-01-14  Andreia Gaita <avidigal at novell.com>
-
-	* HtmlElementCollection.cs: Implemented
-
-	* HtmlElement.cs: Implemented:
-	  - All
-	  - InnerHtml
-	  - InnerText
-	  - Id
-	  - Name
-	  - FirstChild
-
-	* HtmlDocument.cs: Implemented GetElementsByTagName.
-
-2008-01-14  Jonathan Pobst  <monkey at jpobst.com>
-
-	* Screen.cs: Stub BitsPerPixel to always return 32.
-
-2008-01-14  Jonathan Pobst  <monkey at jpobst.com>
-
-	* Form.cs: Implement RestoreBounds.
-
-2008-01-14  Jonathan Pobst  <monkey at jpobst.com>
-
-	* RichTextBox.cs, ToolStrip.cs: Fix some typos pointed out by
-	Sebastien and his fabulous magical problem-finding machine:
-	Gendarme.  Also put a MonoTodo on AutoWordSelect since we don't
-	respect the value set.
-
-2008-01-14  Everaldo Canuto  <ecanuto at novell.com>
-
-	* Form.cs: In WmWindowPosChanged call base.WndProc including when state is
-	minimized. Fixes bug #325122 for Win32. Thanks  Srikanth Madikeri.
-
-2008-01-12  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* X11Dnd.cs: Since we don't propagate the WM_LBUTTONUP/WM_RBUTTONUP
-	messages (to match .Net), we need to remove the capture ourselves.
-
-2008-01-11  Jonathan Pobst  <monkey at jpobst.com>
-
-	* MenuAPI.cs: If we get an Alt-F4, release our capture so Windows
-	will process the message and close our window.
-	[Fixes bug #324328]
-
-2008-01-10  Geoff Norton  <gnorton at novell.com>
-
-	* XplatUICarbon.cs:  Clip the Graphics context to the invalid area
-	tracked in the Hwnd.  Only invalidate the dirty region to the Carbon
-	window manager.
-
-2008-01-10  Jonathan Pobst  <monkey at jpobst.com>
-
-	* Form.cs: Enforce the Form minimum size in SetBoundsCore.  Fixed
-	failing test.
-
-2008-01-10  Jonathan Pobst  <monkey at jpobst.com>
-
-	* XplatUIX11.cs: Set a minimum window size and enforce it.  Even though
-	Linux doesn't care, having a minimum matches MS and keeps the window
-	from becoming too small to use window decorations.
-	[Fixes bug #338996]
-
-2008-01-10  Jonathan Pobst  <monkey at jpobst.com>
-
-	* ThemeWin32Classic.cs: Tie CheckBox/RadioButton focus rectangles to
-	ShowFocusCues.  Make focus rectangles fit the text instead of the whole
-	control.  [Fixes bug #325419]
-
-2008-01-10  Jonathan Pobst  <monkey at jpobst.com>
-
-	* ComboBox.cs: Guard against an NRE if the user open a new form from a
-	SelectedIndexChanged event.  This closes the combobox dropdown, and we
-	were trying to dispose it.  [Fixes bug #352830]
-
-2008-01-09  Jonathan Pobst  <monkey at jpobst.com>
-
-	* Control.cs, Form.cs: Implement the necessary semantics for
-	ShowFocusCues.  All paint code will need to check Control.ShowFocusCues
-	to determine if a focus rectangle should be drawn.
-	* PropertyGrid.cs: Fix property visibility to match override.
-	* ThemeWin32Classic.cs: Use ShowFocusCues for Button.
-
-2008-01-09  Jonathan Pobst  <monkey at jpobst.com>
-
-	* Application.cs: Use GetCommandLineArgs to calculate ExecutablePath.
-	[Fixes bug #323552]
-
-2008-01-09  Geoff Norton  <gnorton at novell.com>
-	
-	* XplatUICarbon.cs: Scroll windows in the correct direction.
-
-2008-01-09  Geoff Norton  <gnorton at novell.com>
-
-	* XplatUICarbon.cs: Track all created utility windows so we can hide them
-	when the app is deactivated or spaces is enabled.
-
-2008-01-08  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* ListViewItem.cs: Cosmetic fix - When calculating layout for item, don't add an
-	extra separation pixel for the label rect origin if SmallImageList is
-	null, and thus we don't need that separation between icon and label
-	rects.
-	Patch by Ernesto Carrea.
-	Fixes # 340195.
-
-2008-01-08  Jonathan Pobst  <monkey at jpobst.com>
-
-	* StatusStrip.cs: Invalidate after completing a layout.  The base
-	OnLayout does this, but we don't call the base.
-	* ToolStripItem.cs: Revert the previous change to invalidate after
-	the item moves.
-	[Fixes bug #351341 better.]
-
-2008-01-07  Geoff Norton  <gnorton at novell.com>
-
-	* XplatUICarbon.cs:  WM_DESTROY is a teardown of a single window
-	not a notification to exit the application.  Listen for WM_QUIT
-	instead.
-
-2008-01-07  Andreia Gaita <avidigal at novell.com>
-
-	* HtmlDocument.cs: Fix case on GetElementById (interface changed)
-
-2008-01-07  Jonathan Pobst  <monkey at jpobst.com>
-
-	* ToolStripItem.cs: If the bounds of an item changes, invalidate it
-	so it can repaint at the correct location.
-	[Fixes bug #351341]
-
-2008-01-06  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* ListControl.cs: SelectedValue should return a null value if
-	SelectedIndex is -1. Also, when setting it, it should throw an
-	ArgumentNullException if the value is null, as well as taking
-	into account the String.Empty value, instead of ignoring it (we have
-	tests for that now).
-	Fixes part of #324286.
-
-2008-01-06  Jonathan Pobst  <monkey at jpobst.com>
-
-	* TextBoxBase.cs, TextControl.cs: Patch from Luke Page to ensure
-	SelectionStart is updated after pressing enter.  Fixes bug #351918.
-
-2008-01-05  Jonathan Pobst  <monkey at jpobst.com>
-
-	* TextControl.cs: Revert a piece r92316 that prevented the fix
-	from working when there were multiple tags in the text box.
-	Fixes bug #351881.
-
-2008-01-05  Jonathan Pobst  <monkey at jpobst.com>
-
-	* TextControl.cs: Apply patch from Luke Page that prevents an
-	NRE when determining the beginning of a paragraph.
-	Fixes bug #351886.
-
-2008-01-05  Jonathan Pobst  <monkey at jpobst.com>
-
-	* TextBoxBase.cs: Apply patch from Luke Page that ensures the
-	caret gets moved with clicking away from a selected block of
-	text.  Fixes bug #351885.
-
-2008-01-05  Jonathan Pobst  <monkey at jpobst.com>
-
-	* TextControl.cs: Apply patch from Luke Page that takes line
-	alignment into account for mouse selection, so that center and
-	right aligned text can be selected.
-	Fixes bug #351881.
-
-2008-01-05  Jonathan Pobst  <monkey at jpobst.com>
-
-	* RichTextBox.cs: Apply patch from Luke Page that fixes some caret
-	issues after loading an RTF file by using the correct line feeds.
-	Fixes bug #351841.
-
-2008-01-05  Jonathan Pobst  <monkey at jpobst.com>
-
-	* TextControl.cs: When deleting multiple line selections, we need
-	to invalidate every line beginning at the first line of the selection.
-	Patch from Luke Page fixes bug #351791.
-
-2008-01-04  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* ListControl.cs: When getting a CurrencyManager.PositionChanged
-	event, don't set SelectedIndex if the number of items is 1. This is
-	because, for the first item, PositionChanged is fired _before_
-	ItemChanged (the place where we actually populate the items), and
-	leave us in a temporary invalid state (since items collection is
-	empty).
-	Fixes #349655.
-
-2008-01-04  Geoff Norton  <gnorton at novell.com>
-
-	* XplatUICarbon.cs:  Create native toolwindows instead of
-	the managed drawing ones.
-
-2008-01-03  Jonathan Pobst  <monkey at jpobst.com>
-
-	* LineTag.cs: If the line doesn't have any characters, return
-	0 for GetCharIndex.  Fixes an AOORE exception after certain
-	caret movements.  Fixes bug #351683.  Patch by Luke Page.
-
-2008-01-03  Jonathan Pobst  <monkey at jpobst.com>
-
-	* TextBoxBase.cs: Apply patch from Luke Page so when backspace
-	is hit when there is selected text, only the selected text gets
-	deleted, not the character in front of the selection as well.
-	Fixes bug #351578.
-
-2008-01-03  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* ComboBox.cs: When the values are displayed, calculate the
-	ComboListBox scrollbar's LargeChange based on the visible area's
-	height and  the actuall ItemHeight, instead of calculating it
-	based on MaxDropItems value, since it's not used by our _current_ 
-	2.0 profile.
-	Fixes #332366.
-
-2008-01-03  Jonathan Pobst  <monkey at jpobst.com>
-
-	* Line.cs, LineTag.cs, RichTextBox.cs, TextBoxBase.cs, TextControl.cs:
-	Patch from Luke Page that fixes issues with font colors and styles
-	not showing up in a readonly RichTextBox.  Fixes bug #324354.
-
-2008-01-03  Jonathan Pobst  <monkey at jpobst.com>
-
-	* Line.cs, RichTextBox.cs, TextControl.cs: Another awesome patch
-	from Luke Page.  This one fixes bug #349926.
-
-2007-12-30  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* CurrencyManager.cs: Actually fire the 2.0 ListChanged event when
-	an item in the IBindingList source changes with
-	ListChangedType.ItemAdded. Ignore for now firing the event for other
-	changes, since we want to have tests for those cases as well.
-
-2007-12-28  Jonathan Pobst  <monkey at jpobst.com>
-
-	* TextBoxBase.cs: Don't store a 1x1 Bitmap for every TextBox
-	created.
-
-2007-12-28  Jonathan Pobst  <monkey at jpobst.com>
-
-	* TextBoxTextRenderer.cs: Implement a cache for measuring each
-	character.  This is effective because the typical usage of a
-	TextBox is with a limited amount of fonts and characters, and
-	the current implementation of TextBox measures everything one
-	character at a time.  Another second or two speedup for bug #347238.
-
-2007-12-28  Jonathan Pobst  <monkey at jpobst.com>
-
-	* Control.cs: Rewrite the Font getter to only query the parent's
-	Font property once instead of twice.  Since this operation is
-	recursive, the queries were growing exponentially as the control
-	tree got deeper.  Another second or two speedup for bug #347238.
-
-2007-12-28  Jonathan Pobst  <monkey at jpobst.com>
-
-	* Control.cs: Avoid setting a parent (and more importantly, updating
-	the zorder of all its children) if the parent is already correct in
-	WmShowWindow.  Decreases the startup time of the test case on bug
-	#347238 from 35 seconds to 11 seconds.
-
-2007-12-27  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* X11Dnd.cs: When the dnd operation has started and we are 
-	in the dnd loop, don't dispatch either WM_LBUTTONUP nor WM_RBUTTONUP.
-	This is done to match .Net, which doesn't send those messages after
-	dnd operation was completed/cancelled.
-	Fixes #349922.
-
-2007-12-27  Jonathan Pobst  <monkey at jpobst.com>
-
-	* ToolStrip.cs: Previous change should be != null, not == null.
-	Thanks Gert!
-
-2007-12-27  Jonathan Pobst  <monkey at jpobst.com>
-
-	* ToolStrip.cs: Guard against an NRE after ItemClicked is called, the
-	user may have moved the mouse off the current item during the event.
-
-2007-12-23  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* ListView.cs: In ItemControl.ItemsMouseMove, try to avoid
-	calling GetItemAt for every MouseMove event by also taking into
-	account whether any mouse button is pressed (probably dragging); 
-	if so, we can call GetItemAt, and if not, try to not call it 
-	(GetItemAt can be quite expensive when used with a large number of items).
-
-2007-12-22  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* ListView.cs: Implement -finally- support for dnd, by calling
-	OnItemDrag as needed. Also, remove the dnd TODO, and add myself to the
-	authors list ;-).
-	* ListViewInsertionMark.cs: Implement NearestIndex method, by doing a
-	simple calculation of distances for all the items in the owner
-	listview.
-
-2007-12-21  Geoff Norton  <gnorton at novell.com>
-
-	* XplatUICarbon.cs:  Ensure that we create WindowMapping handles
-	for windows that are originally created as invisible.  Fixes missing
-	main window in paint-mono.
-
-2007-12-21  Geoff Norton  <gnorton at novell.com>
-
-	* XplatUICarbon.cs:  Register our D&D handler.  Register our custom
-	subclass handler for com.novell.mwfview subclassing HIView.  Implement
-	Pasteboard and Dnd methods.
-
-2007-12-20  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* ListBox.cs: When we got focus, give focus to first item if there
-	wasn't any pervious focused item. Also update navigation to depend on
-	SelectedIndex rather than FocusedItem, just as .Net does.
-	Fixes #349174.
-
-2007-12-19  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* ListBox.cs: Both FindString and FindStringExact methods must do an
-	case insensitive search, should allow the last valid index to be
-	passed in the overload taking an initial index, and should also
-	continue searching from the top back to the specified index when it
-	reaches the bottom.
-
-2007-12-19  Jonathan Pobst  <monkey at jpobst.com>
-
-	* TextControl.cs: Apply patch from Luke Page that fixes a scrolling
-	redraw issue, and allows RichTextBox to draw colored text even while
-	disabled or readonly.
-
-2007-12-19  Jonathan Pobst  <monkey at jpobst.com>
-
-	* RichTextBox.cs, TextBoxBase.cs: Apply patch from Luke Page that
-	disallows cut/paste in a readonly textbox, adds support for Shift-Insert,
-	and doesn't grey text in a disabled RichTextBox.
-
-2007-12-19  Jonathan Pobst  <monkey at jpobst.com>
-
-	* RichTextBox.cs: Apply patch from Luke Page that adds better support
-	for many RTF commands: quad alignment, separate formatting for blocks
-	inside groups, and ParDef support.  Makes the test case from bug #324589
-	look much better.
-
-2007-12-19  Jonathan Pobst  <monkey at jpobst.com>
-
-	* LineTag.cs: Fix an error in the new Draw method that caused
-	a crash when rendering the document on bug #324589.
-
-2007-12-19  Jonathan Pobst  <monkey at jpobst.com>
-
-	* Line.cs, LineTag.cs, RichTextBox.cs, TextBoxBase.cs,
-	TextControl.cs: Apply patch from Luke Page that adds support
-	for URL links in RichTextBox.
-	[Fixes enhancement #342516]
-
-2007-12-18  Everaldo Canuto  <ecanuto at novell.com>
-
-	* MenuItem.cs: When cloning menuitem clone also name and tag properties for
-	2.0 profile. Thanks Ernesto Carrea and Luke Page. Fixes bug #340289.
-
-2007-12-18  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* ListBox.cs: When a key gets pressed, try to find a string
-	if the key is a character or a digit.
-	Fixes #343971.
-
-2007-12-17  Jonathan Pobst  <monkey at jpobst.com>
-
-	* TableLayoutPanel.cs: Remove some unused variables.
-
-2007-12-17  Jonathan Pobst  <monkey at jpobst.com>
-
-	* DateTimePicker.cs: Commit patch from Luke Page that ensures
-	we don't end up at an invalid date when we click the up/down
-	spinner to change the month or year.  Fixes bug #348682.
-
-2007-12-17  Jonathan Pobst  <monkey at jpobst.com>
-
-	* Application.cs: Calling Exit in 2.0 should chain to the
-	Exit (CancelEventArgs) version so it can be cancelled.
-	* Form.cs: Create a flag to allow raising the Closing
-	events to be skipped.  We raise them once in Application.Exit
-	and don't want to raise them again when the Form is actually
-	closed.  [Fixes bug #349073]
-
-2007-12-16  Jonathan Pobst  <monkey at jpobst.com>
-
-	* ToolStripDropDown.cs: Guard against an NRE when there
-	hasn't been a mainform set in the application context.
-	[Fixes bug #349108]
-
-2007-12-15  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* ListBox.cs: When SetBoundsCore gets called, besides
-	calling UpdateScrollBars, update the value of
-	last_visible_index, since we could need to show more items
-	than before, and we need to let the paint routines know that.
-	Fixes #344445.
-
-2007-12-14  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* ListView.cs: Add DesignerSerializationVisibility attribute to
-	InsertionMark property.
-	* ListViewItem.cs: Add same attribute to Position property.
-
-2007-12-14  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* ListViewItem.cs: .ctor (SerializationInfo, StreamingContext)
-	is 2.0 only.
-
-2007-12-14  Jonathan Pobst  <monkey at jpobst.com>
-
-	* ThemeWin32Classic.cs: Don't draw the background on a
-	flat button if there is a background image.
-	[Fixes bug #348649]
-
-2007-12-13  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* ListBox.cs: If we remove the item currently selected,
-	remove it not only from SelectedItems, but also
-	resetting selected_index. Moreover, set focused_item to Items.Count - 1 if 
-	the items count decreased and focused_item has bigger value than that.
-
-2007-12-13  Jonathan Pobst  <monkey at jpobst.com>
-
-	* Control.cs: Perform our layout after we resize ourselves
-	if we had to adjust our AutoSize.  Missed commit for bug
-	#346246.
-
-2007-12-13  Jonathan Pobst  <monkey at jpobst.com>
-
-	* TableLayoutPanel.cs: Override GetPreferredSizeCore so
-	we can provide an implementation of AutoSize.
-	[Fixes bug #346246]
-
-2007-12-12  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* ListBox.cs: Add the internal overload Sort (bool paint),
-	to indicate whether we actually need a paint or we will
-	call Refresh ourselves. This way we don't request a paint
-	_before_ having an updated and valid layout.
-	Fixes #347233.
-
-2007-12-12  Andreia Gaita <avidigal at novell.com>
-
-	* XPlatUIX11.cs: Send paint messages when updating a systray icon
-	* NotifyIcon.cs: Invalidate the window before doing a systray change so it is
-	properly invalidated. 
-	Fixes #324237
-
-2007-12-10  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* ListViewItem.cs: When using a .ctor taking a ListViewGroup,
-	don't simply assign it to our internal group field, but instead 
-	use our Group property, which should do all the neccessary work
-	required to support groups. Fixes an issue reported to me (mail) by a 
-	guy using this new feature.
-
-2007-12-11  Jonathan Pobst  <monkey at jpobst.com>
-
-	* Control.cs: Use Scale instead of ScaleControl to ensure the
-	whole hierarchy gets scaled.
-	[Fixes bug #347282]
-
-2007-12-10  Jonathan Pobst  <monkey at jpobst.com>
-
-	* DateTimePicker.cs: Don't set the internal MonthCalendar's
-	Parent property.  Doing this causes the control to be hosted by
-	the Form instead of being a popup window.
-	[Fixes bug #347665]
-
-2007-12-10  Jonathan Pobst  <monkey at jpobst.com>
-
-	* ToolStripItemCollection.cs: If we try to insert a ToolStripItem
-	at an index higher than Count, just use Add instead of Insert.
-	[Fixes bug #347669]
-
-2007-12-10  Jonathan Pobst  <monkey at jpobst.com>
-
-	* ThemeWin32Classic.cs: Don't draw a PictureBox's background in
-	DrawPictureBox, this is handled by Control.PaintBackground.
-	[Fixes bug #347276]
-
-2007-12-10  Everaldo Canuto  <ecanuto at novell.com>
-
-	* MenuAPI.cs: When process menu keys return true by default only if menu is
-	active. Fixes bug #342892.
-
-2007-12-09  Andreia Gaita <avidigal at novell.com>
-
-	* Control.cs: check if windows are actually mapped before
-	trying to zorder. Fixes #342509, #346955
-
-2007-12-07  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* ListView.cs:
-	* ListViewInsertionMark.cs:
-	* ThemeWin32Classic.cs: Implement the drawing side of the
-	new 2.0 ListView.InsertionMark property.
-
-2007-12-07  Jonathan Pobst  <monkey at jpobst.com>
-
-	* CurrencyManager.cs: Silence some debug spew.
-
-2007-12-07  Geoff Norton  <gnorton at novell.com>
-	
-	* Hwnd.cs: Refactor GetClippingRectangles to suppose returning the
-	masks for our children as well as siblings to avoid having to query
-	Quartz for this information.
-	* XplatUICarbon.cs: Implement a delegate based system to pass
-	information to System.Drawing.  Implement Async methods.  Remove
-	the hack for the resize thumb and imlpement a transparent Grow Box.
-	Rework the messaging system to proplery create window's and messages,
-	fixes TabControl.
-
-2007-12-06  Andreia Gaita <avidigal at novell.com>
-
-	* X11Keyboard.cs: Use Xutf8LookupString to support international 
-	characters under alternate codepages. Patch from #340878
-
-2007-12-06  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* ListView.cs: When doing layout computations, set position in the
-	ListView instances (we cache the position just as .Net does).
-	* ListViewItem.cs: New internal setter method for Position. Also set
-	position field as also available in 1.1, since we are going to use it
-	now in the common case.
-
-2007-12-06  Andreia Gaita <avidigal at novell.com>
-
-	* Control.cs: When removing controls, get the actual container
-	to notify about active control changes. Fixes 341314.
-
-2007-12-06  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* ListViewItem.cs: Forgot to add Font to our serialization stuff.
-
-2007-12-05  Andreia Gaita <avidigal at novell.com>
-
-	* Control.cs: When updating the zorder, ignore windows that are not
-	mapped. Fixes #342509
-
-2007-12-05  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* ListViewItem.cs: Actually implement serialization on this class.
-
-2007-12-05  Gert Driesen  <drieseng at users.sourceforge.net>
-
-	* LinkLabel.cs: Fixed paramname of ArgumentNullException in ctor of
-	LinkCollection. Spaces to tabs, and removed extra tabs.
-
-2007-12-04  Rolf Bjarne Kvinge <RKvinge at novell.com> 
-
-	* XplatUIX11.cs: Make toolwindows' decorations show up without causing any
-	  tests to fail (hopefully).
-
-2007-12-03  Jonathan Pobst  <monkey at jpobst.com>
-
-	* ToolStripDropDownMenu.cs: Fill in AffectedBounds when drawing
-	the image margin so custom renderers can correctly place it.
-
-2007-12-03  Jonathan Pobst  <monkey at jpobst.com>
-
-	* StatusStrip.cs: Fill in AffectedBounds when drawing the grip
-	so custom renderers can correctly place it.
-
-2007-12-03  Jonathan Pobst  <monkey at jpobst.com>
-
-	* Application.cs: Let WM_CHAR messages flow through to controls
-	hosted in Strips.  [Fixes bug #343972]
-
-2007-12-02  Jonathan Pobst  <monkey at jpobst.com>
-
-	* ToolStripManager.cs: Guard against an NRE I ran into.
-
-2007-12-02  Jonathan Pobst  <monkey at jpobst.com>
-
-	* LinkLabel.cs: Apply patch from George to fix bug 344012.  If
-	a Link is manually added to the Links collection, we need to set
-	its owner, so it can invalidate properly.
-	[Fixes bug #344012]
-
-2007-11-24  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* ListView.cs: When changing ListViewItem.Position (which calls
-	ListView.ChangeItemLocation), invalidate not only the area
-	corresponding to the main item, but also to the area occupied
-	by the items being moved.
-
-2007-11-23  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* ListView.cs: When changing the position of a given item,
-	don't use item bounds, but item areas (which includes the item spacing
-	between them). Also, use first/last position if the requested
-	position is outside bounds (as .Net does). Invalidate the previous and
-	new bounds. Finally, in ItemControl.ItemsMouseDown use the actual item
-	in a specific position, instead of directly accessing Items collection
-	(this is done to get the right item - remember an Item can have a
-	different position in the grid than in the Items collection).
-
-2007-11-23  Everaldo Canuto  <ecanuto at novell.com>
-
-	* MessageBox.cs: Calculate text area instead of just top left, this rect 
-	area will be used in DrawString. Fixes bug #343364.
-
-2007-11-23  Everaldo Canuto  <ecanuto at novell.com>
-
-	* MessageBox.cs: Calculate max amount for text area width, it must be 60% of
-	screen width. Partially fixes bug #343364.
-
-2007-11-23  Everaldo Canuto  <ecanuto at novell.com>
-
-	* NotifyIcon.cs: Remove duplicated code before call realculate and put this
-	code inside recalculate, it makes code more simple.
-
-2007-11-22  Everaldo Canuto  <ecanuto at novell.com>
-
-	* NotifyIcon.cs: When recalculate icon verify if icon is active to decide
-	between update or add icon. Fixes bug #324344.
-
-2007-11-21  Andreia Gaita <avidigal at novell.com>
-
-	* XPlatUIX11.cs: Do not treat tool windows as if they have no 
-	window manager, since that stretches the drawing area to include
-	the window decorations, and they get hidden. Reverts r84444 and fixes
-	#335849 and #342790 (mdi and pdn3 regression)
-
-2007-11-20  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* ListView.cs: When setting focused item, try to give focus to the
-	previous one _only_ if the previous one remains valid. 
-	Fixes #342504.
-
-2007-11-20  Jonathan Pobst  <monkey at jpobst.com>
-
-	* Application.cs: Revert r89650, as it broke a common case to fix
-	an obscure case.  Fixes bug #342606.
-
-2007-11-20  Everaldo Canuto  <ecanuto at novell.com>
-
-	* ThemeWin32Classic.cs: Fix extra space on end of tooltip.
-
-2007-11-20  Everaldo Canuto  <ecanuto at novell.com>
-
-	* ThemeWin32Classic.cs: Fix tooltip text align removing horizontal 
-	alignment. [Fixes #324228]
-
-2007-11-19  Jonathan Pobst  <monkey at jpobst.com>
-
-	* ToolStrip.cs: Handle flow layout in GetPreferredSize to fix PDN3.
-	[Fixes bug #342123]
-
-2007-11-19  Everaldo Canuto  <ecanuto at novell.com>
-
-	* Form.cs: Check for empty Text before assign to cp.Caption in CreateParams
-	it prevent problems when empty captions. [Fixes #342141]
-
-2007-11-19  Jonathan Pobst  <monkey at jpobst.com>
-
-	* Label.cs: Use Size instead of None.  Fixes bug #342077.
-
-2007-11-18  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* ListViewItem.cs: Implement 2.0 FindNearestItem method.
-
-2007-11-17  Jonathan Pobst  <monkey at jpobst.com>
-
-	* MenuStrip.cs: Guard against a NRE when a MdiWindowItem is set
-	but there isn't a MdiContainer.
-	[Fixes bug #342358]
-
-2007-11-17  Jonathan Pobst  <monkey at jpobst.com>
-
-	* TextControl.cs: Don't recalculate document if the recalc_start and
-	recalc_end hasn't changed.
-	[Fixes bug #342505]
-
-2007-11-17  Gert Driesen  <drieseng at users.sourceforge.net>
-
-	* DataGridViewTextBoxCell.cs: Removed CWL.
-
-2007-11-16  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* ListView.cs: Implement 2.0 SearchForVirtualItem event support.
-
-2007-11-16  Jonathan Pobst  <monkey at jpobst.com>
-
-	* TextControl.cs: Missed some code for bug 341534 to trigger a
-	recalculation when the font changes.
-
-2007-11-16  Andreia Gaita <avidigal at novell.com>
-
-	* Control.cs: When updating the zorder, check if the child to update is
-	the same control that is set to always be on top (i.e., scrollbars), and 
-	just put it on top directly. Fixes BadMatch error on pdn3
-
-2007-11-16  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* ListView.cs: Throw the needed exceptions for FindNearestItem.
-
-2007-11-16  Jonathan Pobst  <monkey at jpobst.com>
-
-	* Control.cs: Don't perform a new layout when a label changes its text,
-	cause label handles its own autosizing.
-	[Fixes bug #342077]
-
-2007-11-16  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* ListView.cs: Implement 2.0 FindNearestItem methods.
-
-2007-11-15  Jonathan Pobst  <monkey at jpobst.com>
-
-	* ToolStripPanel.cs: Make Join at least add the control to the panel,
-	even if the rest of what Join does isn't supported.  Add some more
-	support for vertical toolbars.
-	* ToolStripPanelRow.cs: Add some more support for vertical toolbars.
-	[Fixes the application breaking parts of bug #341998]
-
-2007-11-15  Jonathan Pobst <monkey at jpobst.com>
-
-	* ToolStripItem.cs: When determining if we have a check/image margin,
-	we need to look at ShowCheckMargin as well as ShowImageMargin.
-
-2007-11-15  Geoff Norton  <gnorton at novell.com>
-
-	* XplatUIOSX.cs: Rename to...
-	* XplatUICarbon.cs: and refactor all event handling out to the new event handling
-	system in System.Windows.Forms.CarbonInternal.  Lots of code cleanup as well.
-
-2007-11-15  Jonathan Pobst  <monkey at jpobst.com>
-
-	* KeysConverter.cs: The default values should be an array of Keys, not
-	strings.  Also, the array has more values for 2.0.
-	[Fixes bug #341851]
-
-2007-11-14  Jonathan Pobst  <monkey at jpobst.com>
-
-	* Application.cs: Change ExecutablePath to use 
-	Process.GetCurrentProcess ().MainModule.FileName instead of Assembly.GetEntryAssembly.
-	[Fixes bug #323552]
-
-2007-11-14  Jonathan Pobst  <monkey at jpobst.com>
-
-	* LineTag.cs: Don't attempt to draw '\r', treat it like it doesn't exist.
-	When measureing CR or LF, use /u000D instead of /u0013. (Hex, not decimal.)
-	* TextControl.cs: Fix a case in GetLineEnding where a \n before a \r would
-	be ignored.  Create a new GetLineEnding that can specify which types of
-	line endings to look for.  On Insert, only create new lines for \n and \r\n.
-	[Fixes bug #324274]
-
-2007-11-14  Jonathan Pobst  <monkey at jpobst.com>
-
-	* TextBoxBase.cs: As we loop through each line changing the font, tell
-	the document that the line needs to be recalculated.  Fixes bug #341534.
-
-2007-11-13  Jonathan Pobst  <monkey at jpobst.com>
-	[Another round of refactoring]
-	* Line.cs: Add DeleteCharacters.
-	* LineTag.cs: Add Delete.
-	* TextBoxBase.cs: Update to use new methods.
-	* TextControl.cs: Refactor the Delete* methods.
-
-2007-11-13  Everaldo Canuto  <ecanuto at novell.com>
-
-	* Win32DnD.cs: Implement Win32 Drop files, thank you Srikanth Madikeri for
-	the patch. [Fixes #324856]
-
-2007-11-12  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* ListView.cs:
-	* ListViewItem.cs: Add an initial implementation of
-	2.0 ListViewItem.Position getter.
-
-2007-11-12  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* ListView.cs: Add a reordered_items_indices array, to allow us
-	to have a different sorting than that of Items (the sorting in Items
-	could not match the actual sorting in screen). This is needed to
-	implement a pair of 2.0 features.
-	* ListViewItem.cs: Add a DisplayIndex property to keep track of the
-	actual position in the ListView grid, since it could have a position
-	different than its Index (position in ListViewItemCollection). 
-
-2007-11-09  Jonathan Pobst  <monkey at jpobst.com>
-
-	* Label.cs: Add StringFormatFlags.LineLimit.  This tells DrawString to
-	not draw partial lines.
-	* LinkLabel.cs: Change FormatFlags setter from = to |= so that the
-	LineLimit flag from the base is preserved.
-	Fixes the windows part of bug #338965.
-
-2007-11-09  Jonathan Pobst  <monkey at jpobst.com>
-
-	* TextBoxBase.cs: Move handling of the enter key from KEYDOWN to CHAR
-	so that it can be canceled in KeyPress.
-	Fixes bug #340078.
-
-2007-11-08  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* ListView.cs: In ItemControl, reset mouse-handling related
-	fields even if we dont' have items (we still should reset them when
-	we had items but then called Items.Clear). Partially based in a patch
-	by George Giolfan.
-	Fixes #338399.
-
-2007-11-08  Gert Driesen  <drieseng at users.sourceforge.net>
-
-	* Application.cs: In ProductVersion first try AssemblyFileVersion
-	before falling back to assembly version. Fixes bug #339787.
-
-2007-11-08  Andreia Gaita <avidigal at novell.com>
-
-	* HtmlElement.cs: Implement InnerText setter.
-	* WebBrowserBase.cs: Implement Navigated event support.
-	Add flag to track when the browser "document" is ready to be retrieved.
-	* WebBrowser.cs: Implement CanGoBack, CanGoForward, Title, Url.
-	Make sure browser document is ready before retrieving it.
-	Clean up cached objects (document) when moving to a new page through
-	any of the navigation methods.
-	Use the new Mono.WebBrowser.INavigation interface to control navigation.
-	Implement OnNavigated event.
-
-2007-11-07  Jonathan Pobst  <monkey at jpobst.com>
-
-	* ThemeWin32Classic.cs: Don't draw the background in DrawLabel or
-	DrawLinkLabel, this is handled by OnPaintBackground.
-	Fixes bug #339565, part II.
-
-2007-11-07  Andreia Gaita <avidigal at novell.com>
-
-	* Control.cs: Revert r88915. Selecting text on a textbox depends on
-	getting a Select call on click, so this call needs to be here for now.
-	Unfixes #325809
-
-2007-11-07  Geoff Norton  <gnorton at novell.com>
-
-	* OSXStructs.cs: Add the kEventClassApplication constants.
-	* XplatUIOSX.cs: Send a WM_LBUTTONDOWN to the Grab window when the 
-	application is deactivated otherwise Menu overlays linger on top of
-	other application windows.
-
-2007-11-07  Geoff Norton  <gnorton at novell.com>
-
-	* XplatUIOSX.cs: Dont throw an exception on OverrideCursor as we
-	dont support cursors yet anyways.  This allows Reflector to run.
-
-2007-11-07  Geoff Norton  <gnorton at novell.com>
-
-	* XplatUIOSX.cs: Implement DragSize.
-
-2007-11-07  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* ListView.cs: When we receive a WM_LBUTTONDOWN message in
-	ItemControl, request the focus, as .Net does. This is needed after 
-	Control does not request focus anymore when it receives a
-	WM_LBUTTONDOWN.
-
-2007-11-06  Jonathan Pobst  <monkey at Jpobst.com>
-
-	* Label.cs: Make DrawImage internal so it can be called from Theme code.
-	Remove the DrawImage call from OnPaint.
-	* LinkLabel.cs: Remove the DrawImage call from OnPaint.
-	* ThemeWin32Classic.cs: Call DrawImage after we paint the background,
-	but before we draw the text for DrawLabel and DrawLinkLabel.
-	Fixes bug #339565.
-
-2007-11-05  Andreia Gaita <avidigal at novell.com>
-
-	* Control.cs: Remove select call on click. Fixes #325809
-
-2007-11-05  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* ListViewItem.cs: Add 2.0 Position property getter.
-
-2007-11-04  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* ListView.cs: Add 2.0 BackgroundImageTiled property.
-	Also, to make it work properly, change item's BackColor and
-	BackgroundImageLayout as needed.
-	* ThemeWin32Classic.cs: Don't fill any background rectangle 
-	in ListView.ItemControl when drawing items; just let the Control
-	base implementation fill it.
-
-2007-11-04  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* ListViewGroup.cs: Adda TypeConverter attribute for this class,
-	as well as adding a custom 'dummy' Converter, as .net does.
-
-2007-11-04  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* PropertyGridView.cs: When clicking drop-down button,
-	select an index in the listbox only if our standard values collection 
-	has one or more items.
-
-2007-11-04  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* ListViewItem.cs: Add a DefaultValue attribute to 2.0 IndentCount
-	property.
-
-2007-11-04  Gert Driesen  <drieseng at users.sourceforge.net>
-
-	* PropertyGrid.cs: In PropertySort, update the toolbar buttons even if
-	the value is not changed. This ensure a pushed button remains in that
-	state when clicked again. When switching the value of PropertySort
-	between Categorized and CategorizedAlphabetical, do not update the
-	grid items and do not fire a PropertyChangedEvent. When clicking the
-	sorting buttons, do not modify the PropertySort value when switching
-	between Categorized and CategorizedAlphabetical but only update the
-	button state.
-
-2007-11-04  Gert Driesen  <drieseng at users.sourceforge.net>
-
-	* Label.cs: Make AutoEllipsis internal on 1.0 profile. Code
-	formatting.
-	* PropertyGrid.cs: Also put Categorized button in pushed state when
-	PropertySort is CategorizedAlphabetical. Set AutoEllipsis to true
-	for help description label.
-
-2007-11-03  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* ListView.cs: When calculating the biggest item for a given column,
-	take into account 2.0 LIstViewItem.IndentCount, since it directly affects
-	the item's width.
-
-2007-11-03  Gert Driesen  <drieseng at users.sourceforge.net>
-
-	* PropertyGrid.cs: Fixed default value for PropertySort. Allow invalid
-	value for PropertySort on 1.0 profile. PropertySortChanged event
-	should only be fired on 2.0 profile. Fixed NullReferenceException
-	in UpdateSortLayout when PropertyGrid contains no items.
-
-2007-11-02  Jonathan Pobst  <monkey at jpobst.com>
-
-	* MessageBox.cs: Patch from George to implement MessageBoxDefaultButton.
-	[Fixes bug #338554]
-
-2007-11-01  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* ListViewItem.cs: Implement 2.0 IndentCount property.
-
-2007-11-01  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* X11Dnd.cs: When sending status in a dnd operation, compare current
-	effect with the 'allowed' field instead of 'drag_data.Allowed', since
-	the later is only created when a Winforms application is both the
-	source and the target, but not when we are the target only.
-	Fixes part of #324251.
-
-2007-11-01  Geoff Norton  <gnorton at novell.com>
-
-	* XplatUI*.cs: Add GetPreviousWindow utility method to return windows in
-	order of Z-Order.
-	* Hwnd.cs: Add initial implementation of GetClippingRectangles to clip sibling 
-	children out of the drawing view on mac.
-	* XplatUIOSX.cs: Code cleanup.  Handle more window grab cases.  Fix SetParent
-	to handle the orphan and invisible case (1/2 fixes TabStrip drawing in FormsTest)
-	
-2007-11-01  Jonathan Pobst  <monkey at jpobst.com>
-
-	* ToolStrip.cs: Don't process MouseUp for a ToolStripControlHost, clicking
-	on the non-hosted-control part of it shouldn't do anything.
-	Fixes part of bug #327498.
-
-2007-11-01  Andreia Gaita <avidigal at novell.com>
-
-	* WebBrowserBase.cs: revert previous change, resize can be called anytime
-
-2007-11-01  Jonathan Pobst  <monkey at jpobst.com>
-
-	* Application.cs: When a toolstrip has the keyboard input loop, let messages
-	it does not use flow through to controls that are hosted in menus.
-	Same with mouse clicks.
-	* Form.cs: Don't close all menus on click if the click is on a
-	control hosted in a menu.
-	Fixes part of bug #327498, and part of bug #325969.
-
-2007-10-31  Andreia Gaita <avidigal at novell.com>
-
-	* WebBrowserBase.cs: Only call resize on gluezilla when it is active
-
-2007-10-31  Jonathan Pobst  <monkey at jpobst.com>
-
-	* TextBoxBase.cs: Use int.MaxValue for MaxLength instead of magic number.
-	Addresses an issue raised in bug #336218.
-
-2007-10-30  Jonathan Pobst  <monkey at jpobst.com>
-
-	* Form.cs: Patch from George that moves the conversion of ClientSize->Size
-	for PreferredSize from OnLayout to PreferredSize.  Fixes bug #325242.
-
-2007-10-30  Andreia Gaita <avidigal at novell.com>
-
-	* ContainerControl.cs: Check if the active control is a
-	child of a removed control and update active_control accordingly.
-	Fixes #329718
-
-2007-10-29  Jonathan Pobst  <monkey at jpobst.com>
-
-	* DateTimePicker.cs: Throw ArgEx if the Value is set outside the MinDate
-	or the MaxDate.  Fixed bug #337693.
-
-2007-10-29  Jonathan Pobst  <monkey at jpobst.com>
-
-	* XplatUIWin32.cs: Always call SetWindowPos with SWP_FRAMECHANGED flag
-	after calling SetWindowLong for a form, to force an immediate NC refresh.
-	Fixes first part of bug #325150.
-
-2007-10-29  Jonathan Pobst  <monkey at jpobst.com>
-
-	* ComboBox.cs: Don't try to resize the listbox when we are DropDownStyle
-	simple.  Fixes the last part of bug #322668.
-
-2007-10-29  Jonathan Pobst  <monkey at jpobst.com>
-
-	* MessageBox.cs: If the owner is TopMost, then the MessageBox form
-	needs to be TopMost as well, or else the MessageBox is under the form.
-	Patch by George fixes bug #325300.
-
-2007-10-27  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* X11Dnd.cs: When starting a new drag operation, reset the static
-	'dropped' field to false (previously the implementation didn't reset
-	it and got confused after the first drag).
-	Fixes #325071.
-
-2007-10-27  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* PropertyGrid.cs: When PropertySort changes, re-organize the grid
-	items instead of re-creating them all. For this purpose we now cache
-	both CategoryGridEntry items and the GridEntries for the main object's
-	properties.
-	* GridItem.cs: Make SetParent method abstract.
-	* GridEntry.cs: Override the SetParent method (already there, but now
-	we override it).
-	Fixes #324866.
-
-2007-10-24  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* PropertyGridView.cs: Set the plus/minus bounds of a grid item
-	depending on its depth (as .Net does). Update the needed values in
-	MouseDown handler. Also draw the plus/minus rect after the label,
-	so we don't draw on top of it.
-
-2007-10-24  Everaldo Canuto  <ecanuto at novell.com>
-
-	* MenuAPI.cs: Return true as default in ProcessKeys to prevent keys to be
-	processed by forms or controls when menu is active. [Fixes #333548]
-
-2007-10-24  Jonathan Pobst  <monkey at jpobst.com>
-
-	* ToolStripItem.cs: Don't focus a ToolStripControlHost on Select of the
-	parent doesn't have focus.  This was causing ToolStripTextBoxes to take
-	focus on mouse over.
-
-2007-10-24  Jonathan Pobst  <monkey at jpobst.com>
-
-	* TextControl.cs: Code cleaning, simplifying.
-
-2007-10-24  Geoff Norton  <gnorton at novell.com>
-
-	* XplatUIOSX.cs: Route mouse events to the grab hwnd on mouse down as well.
-	* XplatUIStructs.cs: Fix the ToString method of POINT and MSG.
-
-2007-10-24  Jonathan Pobst  <monkey at jpobst.com>
-
-	* TextBoxBase.cs: If the user sets maxlength to 0, it should mean
-	the cap is maxvalue, not actually 0.  [Fixes bug #336218]
-
-2007-10-24  Andreia Gaita <avidigal at novell.com>
-
-	* SendKeys.cs: apply jpobst's patch to bug #332409
-
-2007-10-23  Andreia Gaita <avidigal at novell.com>
-
-	* TextBoxTextRenderer.cs: Lower bounds max size to Int16.MaxValue, the 
-	Windows 2000 gdi DrawText call doesn't draw if it's higher than that
-	for some reason
-
-2007-10-23  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* PropertyGridView.cs: If a property has an UIEditor available,
-	make the drop-down/editor button available only if the property
-	is _not_ read only.
-
-2007-10-23  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* PropertyGridView.cs: Don't make the grid item textbox 
-	editable when a drop-down control is available, but 
-	CanConvertFrom (typeof (string)) is false or GetStandardValuesExclusive () is
-	true. The same bur the color of the grid item value's label.
-
-2007-10-22  Geoff Norton  <gnorton at novell.com>
-
-	* OSXStructs.cs: Add the needed constants for keyboard modifiers.
-	* OSXKeyboard.cs: Initial support for keyboard and limited modifiers.
-	* XplatUIOSX.cs: New reversible frame support.  Wire in the new keyboard
-	driver.  Padd the bottom of all real windows so the resize thumb doesn't
-	obscure scroll/status bars.
-
-2007-10-22  Jonathan Pobst  <monkey at jpobst.com>
-
-	* WindowsFormsSection.cs: Implement.
-
-2007-10-22  Everaldo Canuto  <ecanuto at novell.com>
-
-	* MdiClient.cs: Maximize new active mdi child when a maximized child is 
-	closed see #325434 patch.
-
-2007-10-22  Everaldo Canuto  <ecanuto at novell.com>
-
-	* MdiClient.cs: Fix remaining issues from layout vertical and horizontal,
-	see #325434 patch.
-
-2007-10-21  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* PropertyGridView.cs: When showing the textbox for a grid item,
-	have two local variables to store the read-only and non-editable
-	status of a grid item (we were previously using just one variable
-	to do this, when actually they are slightly different).
-	Fixes part of #325023.
-
-2007-10-21  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* PropertyGridView.cs: When showing a drop-down list, try to get the
-	values using TypeConverter.ConvertTo (to convert to a string). Fixes
-	part of #325023.
-
-2007-10-19  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* PropertyGrid.cs: When updating a property and populating sub grid
-	items, remove the previous ones, and invalidate the specific area.
-	* PropertyGridView.cs: A new InvalidateBelowGridItem to invalidate the
-	area behind a grid item.
-	* GridItemCollection.cs: Add an internal Clear method, to allow us to
-	clean the items if needed (specially for controls implementing 
-	ICustomTypeDescriptor and returning a variable number of properties).
-	Fixes #324865.
-
-2007-10-19  Jonathan Pobst  <monkey at jpobst.com>
-
-	* TextControl.cs: Clean up and document the Insert function.
-
-2007-10-17  Jonathan Pobst  <monkey at jpobst.com>
-
-	* TextControl.cs: Make sure we know our start point for updating the view
-	in ReplaceSelection.  Fixes an issue where pasting multiline text wouldn't
-	update the view.
-
-2007-10-17  Jonathan Pobst  <monkey at jpobst.com>
-
-	* ListView: Couple of corcompare fixes.
-
-2007-10-17  Geoff Norton  <gnorton at novell.com>
-
-	* XplatUIOSX.cs: Implement support for window icons in the dock.  Set
-	the title caption of real window.
-
-2007-10-17  Jonathan Pobst  <monkey at jpobst.com>
-
-	* ErrorProvider.cs: Add the error provider's internal window to a 
-	containercontrol when the parent changes.  [Fixes bug #329714]
-
-2007-10-17  Geoff Norton  <gnorton at novell.com>
-
-	* XplatUIOSX.cs: Implement ScrollWindow.  Properly create TOOLWINDOWs.
-	When we make a new window; restore the old active window - fixes dialogs.
-
-2007-10-17  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* PropertyGridView.cs: Look for RefreshPropertiesAttribute
-	when modifying a property, and if found then invalidate as
-	requested.
-	Fixes part of #324865.
-
-2007-10-17  Geoff Norton  <gnorton at novell.com>
-
-	* XplatUIOSX.cs: Re-enable the native driver on the Mac.  This is still
-	highly experimental.  Fixed coordinate translation.  Fixed window locations.
-	Initial support for clipping. Implemented NC areas and menus.  Support for
-	launching from command line from Will Johansson (wjohansson at atacomm.com).
-	* OSXStructs.cs: Add ProcessSerialNumer (Patch from Will Johansson
-	wjohansson at atacomm.com)
-	* Hwnd.cs: Add some internal structures for tracking Mac cursors.
-	Hwnds now track the existence of all of their children for Mac clipping.
-    * XplatUI.cs: Re-enabled the native driver on the Mac.
-
-2007-10-17  Jonathan Pobst  <monkey at jpobst.com>
-
-	* Line.cs: Move the InsertString function to here.
-	* TextControl.cs: Cleanup some duplicate code, move some InsertString
-	functionality to Line.
-
-2007-10-17  Geoff Norton  <gnorton at novell.com>
-
-	* ComboBox.cs: Destroy the popup after hiding it.  Fixes #322582
-
-2007-10-16  Gert Driesen  <drieseng at users.sourceforge.net>
-
-	* ButtonBase.cs: Fixed IsDefault to use assigned value instead of
-	always setting value to true.
-	* Form.cs: When changing AcceptButton, notify new and original button.
-
-2007-10-16  Jonathan Pobst  <monkey at jpobst.com>
-
-	* Form.cs: Guard against an NRE when the user sets the AcceptButton to
-	a custom control that implements IButtonControl instead of an actual
-	button.  [Fixes bug #334244]
-
-2007-10-15  Everaldo Canuto  <ecanuto at novell.com>
-
-	* Form.cs: Change SelectActiveControl to internal, we need to call it in
-	MdiWindowManager.
-	
-	* MdiWindowManager.cs: In RaiseActivated call SelectActiveControl to select
-	active control when activate a new mdi window.
-	
-	[Fixes bug #330495]
-
-2007-10-15  Everaldo Canuto  <ecanuto at novell.com>
-
-	* ComboBox.cs: Dont implicit add listbox_ctrl on OnHandleCreated because it
-	is already added.
-	[Fixes bug #333617]
-
-2007-10-15  Jonathan Pobst  <monkey at jpobst.com>
-
-	* TextControl.cs: When SuspendRecalc is first called, reset the recalc_start
-	to MaxValue and recalc_end to MinValue.  Currently, recalc_start is always 1,
-	so we always recalculate the whole document instead of just the new part.
-	[Fixes bug #325082]
-
-2007-10-15  Jonathan Pobst  <monkey at jpobst.com>
-
-	* LineTag.cs: Fix a case where the GetCharIndex would not return 0
-	when the mouse was to the left of the first character in the line.
-
-2007-10-15  Jonathan Pobst  <monkey at jpobst.com>
-
-	* TextBox.cs, TextBoxBase.cs: When setting the document's password
-	character, use the property instead of the variable so that the
-	UseSystemPasswordChar property is taken into account.
-	[Fixes bug #333748]
-
-2007-10-13  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* FolderBrowserDialog.cs: When a node is right clicked and the "New
-	folder" contex menu appears, actually add the new folder to it, even
-	if the node is not currently selected. Still use SelectedNode in case 
-	there wasn't found a node under the pointer.
-	Fixes #325452.
-
-2007-10-13  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* ListViewItem.cs: When retrieving the focused state, the index check
-	should be done only when ListView is in virtualmode, as it is an
-	expensive check for normal mode.
-
-2007-10-13  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* ListViewItem.cs: Make the focus state information be stored
-	in the ListView, not in the items. This is done to match the MS
-	behaviour for items that are not yet part of a ListView control;
-	besides that, since just one item can be focused at the same time,
-	we save a little space in our items.
-	Fixes part of #331643.
-
-2007-10-13  Gert Driesen  <drieseng at users.sourceforge.net>
-
-	* ComboBox.cs: When focus is lost, deselect the text. When setting
-	text of control, select all text. Do not hide selection when control
-	does not have focus. Fixes bug #333663.
-
-2007-10-13  Gert Driesen  <drieseng at users.sourceforge.net>
-
-	* TextBoxBase.cs: On 2.0 profile, throw ArgumentOutOFRangeException
-	instead of ArgumentException when SelectionLength is set to negative
-	value. Added same check to SelectionStart. Code formatting.
-
-2007-10-13  Gert Driesen  <drieseng at users.sourceforge.net>
-
-	* TextBoxBase.cs: Invalidate selection before changing SelectionLength
-	or SelectionStart. Code formatting.
-
-2007-10-12  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* TreeView.cs: drag_begin_x and drag_begin_y are now set to -1,
-	indicating that there was not a previous drag-and-drop operation going
-	on.
-	Fixes part of #325071.
-
-2007-10-12  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* X11Dnd.cs: When DragEventArgs.Effect is set to a value not part of
-	AllowedEffect, don't let the drop operation happen. 
-	Fixes #32580.
-
-2007-10-12  Jonathan Pobst  <monkey at jpobst.com>
-
-	* TextRenderer.cs: Use GDI on Windows in both the 1.1 and 2.0 profiles.
-
-2007-10-12  Jonathan Pobst  <monkey at jpobst.com>
-
-	* Line.cs, LineTag.cs: Guard against an exception when Document.Clear
-	is called.
-
-2007-10-12  Jonathan Pobst  <monkey at jpobst.com>
-
-	* Line.cs: Add a method that finds the tag that contains an x-coord.
-	* LineTag.cs: Add a method that finds the character at an x-coord using
-	a binary search, the old way was a linear search.
-	* TextControl.cs: Change FindCursor to use the above new methods.
-
-2007-10-11  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* DragEventArgs.cs: Allow Effect to have a non allowed value (a
-	value different than AllowedEffect). This should be possible to
-	indicate that dragging is not possible in some control/area.
-
-2007-10-11  Jonathan Pobst  <monkey at jpobst.com>
-
-	* LineTag.cs: Encapsulate all variables with properties.  Calculate ascent/
-	descent internally when font changes instead of outside code being responsible
-	for setting it.
-	* Line.cs, RichTextBox.cs, TextBoxBase.cs, TextControl.cs: Use Tag properties
-	instead of accessing internal variables.
-
-2007-10-09  Everaldo Canuto  <ecanuto at novell.com>
-
-	* MdiClient.cs: Always call ArrangeIconicWindows before any arrangement and
-	remove special treatment for ArrangeIcons since it is already arranged.
-
-2007-10-09  Jonathan Pobst  <monkey at jpobst.com>
-
-	* TextBoxTextRenderer.cs: Draw takes a Color now instead of a Brush, as
-	the Win32 backend uses Color.
-	* Line.cs, LineTag.cs, RichTextBox.cs, TextBoxBase.cs, TextControl.cs:
-	Refactor to store a Color instead of a Brush for Color.
-
-2007-10-09  Jonathan Pobst  <monkey at jpobst.com>
-
-	* Line.cs, LineTag.cs: Override GetHashCode to make a compiler warning go
-	away.  I didn't realize I needed this when I refactored these earlier.
-
-2007-10-09  Jonathan Pobst  <monkey at jpobst.com>
-
-	* LineTag.cs, RichTextBox.cs, TextBoxBase.cs, TextControl.cs: Refactor to
-	store a Color structure and use the ResPool for back color instead of
-	holding onto brushes.
-
-2007-10-09  Jonathan Pobst  <monkey at jpobst.com>
-
-	* TextControl.cs: Fix how we calculate the end of the tag we are drawing.
-	[Fixes bug #325592]
-
-2007-10-08  Jonathan Pobst  <monkey at jpobst.com>
-
-	* MonthCalendar.cs: When ShowWeekNumbers is changed, force the calendar
-	to recalculate its size.  Fixes a part of bug #331052.
-
-2007-10-08  Jonathan Pobst  <monkey at jpobst.com>
-
-	* NotifyIcon.cs: Set the correct mouse button when handling right mouse
-	button.  Fixes a part of bug #331052.
-
-2007-10-08  Jonathan Pobst  <monkey at jpobst.com>
-
-	* Form.cs: Trim NewLine before setting XPlatUI.SetText, and when setting
-	the CreateParams.
-	* ThemeWin32Classic.cs: Trim NewLine before drawing MDI children window
-	decorations.
-	[Fixes bug #330986]
-
-2007-10-08  Jonathan Pobst  <monkey at jpobst.com>
-
-	* TextBoxTextRenderer.cs: Don't make this a static class, as static
-	doesn't exist in 1.1.  (Thanks jb!)
-
-2007-10-08  Jonathan Pobst  <monkey at jpobst.com>
-
-	* TextBoxTextRenderer.cs: Abstract text measuring and drawing to this
-	class to allow us to use different backends on different platforms.
-	Linux uses the current [Draw|Measure]String backend.  Windows uses
-	the TextRenderer.[Draw|Measure]Text backend, which uses GDI instead
-	of GDI+.  This leads to better looking text and more accurate measurements
-	on Windows, fixing many of the reported issues.
-	* Line.cs, LineTag.cs: Update to use TextBoxTextRenderer.
-
-2007-10-07  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* FolderBrowserDialog.cs: When running on Windows,
-	try to detect paths such "C:" and add Path.DirectorySeparatorChar,
-	since we must match both "C:" and "C:\" forms. A little hackish, but
-	works.
-	Fixes #325247.
-
-2007-10-07  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* ListView.cs: When calling EndEdit (after editing an item),
-	create a new instance of LabelEditEventArgs to keep clean the fields
-	in case we get a new call to BeginEdit; also do Application.DoEvents
-	to have focus in synch. This is a fix similar to TreeView's #325244.
-
-2007-10-07  Andreia Gaita <avidigal at novell.com>
-
-	* HtmlDocument.cs, HtmlElement.cs, WebBrowser.cs: Added dom support
-	* WebBrowserBase.cs: Added dialog support, calling the
-	  WebBrowserDialogs classes for each specific dialog type.
-
-2007-10-06  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* ListView.cs: When the last item is focused and is removed,
-	move the focus to the previous item (in Items order). This is what MS
-	does.
-	Fixes #330415.
-
-2007-10-06  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* ListView.cs: In ListViewItemCollection, make Remove call RemoveAt,
-	instead of the opposite (RemoveAt call Remove). This is a better
-	approach since we don't need to to a pair of traversals when using
-	RemoveAt.
-
-2006-10-05  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* TreeView.cs: When Keys.Left is pressed, before trying to Collapse
-	check that the node actually has nodes, and if not, move to the
-	parent node instead. 
-	Fixes #325265.
-
-2006-10-05  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* TreeView.cs: Move the previous change to the general case (to
-	call Application.DoEvents in cases where the method was called by
-	different places).
-
-2007_10-05  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* TreeView.cs: When calling EndEdit and we need to hide the textbox,
-	call Application.DoEvents. This is neccessary when we get a call to
-	BeginEdit from an AfterLabelEdit handler, because the focus always
-	goes to the TreeView, even if we try to give it to our
-	LabelEditTextBox. The call do Application.DoEvents seems to
-	synchronize the focus, basically.
-	Fixes #325244.
-
-2007-10-04  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* TreeView.cs: When AfterLabelEdit event is fired, TreeNode.IsEditing
-	should be false. This also removes some nasty recursive paths. Fixes
-	part of #325244.
-
-2007-10-04  Everaldo Canuto  <ecanuto at novell.com>
-
-	* MdiClient.cs: When cascade (layout) mdi window that is maximized, set the
-	state to normal. Also resize window when cascading. Fixes #325433. 
-
-2007-10-04  Jonathan Pobst  <monkey at jpobst.com>
-
-	* RichTextBox.cs: When SelectionColor is set to Color.Empty, use
-	DefaultForeColor, as drawing empty colored lines isn't very useful.
-	[Fixes the not drawn lines part of bug #324358]
-
-2007-10-04  Jonathan Pobst  <monkey at jpobst.com>
-
-	* TextControl.cs: Move Line and LineTag classes into separate files to
-	make things easier to find.
-	* Line.cs, LineTag.cs: Bring coding standards up to Mono's guidelines.
-	* RichTextBox.cs: Capitalize LineTag.Length property access.
-	- This is purely an organizational/formatting change, no logic changed. -
-
-2007-10-03  Everaldo Canuto  <ecanuto at novell.com>
-
-	* ThemeWin32Classic.cs: Do not show focus rectangle in radio buttons when
-	text is empty.
-
-2007-10-03  Everaldo Canuto  <ecanuto at novell.com>
-
-	* ThemeWin32Classic.cs: Do not show focus rectangle in checkboxes when
-	text is empty.
-
-2007-10-03  Everaldo Canuto  <ecanuto at novell.com>
-
-	* ComboBox.cs: On contructor use backgound_color instead of BackColor to
-	prevent calling of OnBackColorChanged. Fixes #325321.
-
-2007-10-03  Everaldo Canuto  <ecanuto at novell.com>
-
-	* TextBox.cs: When check enabled uses Enabled property instead of is_enabled
-	because control can be disabled because owner is disabled.
-
-2007-10-02  Jonathan Pobst  <monkey at jpobst.com>
-
-	* ComboBox.cs: For the 1.1 profile, the default SelectedText is
-	string.Empty, test failed from previous change.
-
-2007-10-02  Jonathan Pobst  <monkey at jpobst.com>
-
-	* TextBoxBase.cs: For the 1.1 profile, the default SelectedText
-	is null, not String.Empty.  See bug #323038.
-
-2007-10-01  Jonathan Pobst  <monkey at jpobst.com>
-
-	* TextControl.cs: Change the margins to match MS a little better.
-	Still not perfect for X11 due to some DrawString differences, but
-	is still an improvement over the old stuff.
-	Partially fixes #324467.
-
-2007-09-30  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* FolderBrowserDialog.cs: When using MyComputer as 
-	RootFolder, let absolute paths be considered as valid ones. Also, use
-	Path.DirectorySeparatorChar instead of Path.AltDirectorySeparatorChar,
-	for Windows compatibility.
-	Partially fixes #325247.
-
-2007-09-29  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* FolderBrowserDialog.cs: Fix the recursive FindPathInNodes method.
-	Also remove the stack.Count > 0 check in FBTreeView.SetSelectedNode
-	method, since it causes the dialog to not select folders directly
-	under the root path (when setting SelectedPath property).
-
-2007-09-29  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* TreeNode.cs: When calling Expand/Collapse and need to call 
-	ExpandBelow/CollapseBelow respectively, take into account
-	partially visible nodes (previously Expanding/Collapsing
-	a partially visible node in the bottom was not updating its +- sign).
-
-2007-09-28  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* TreeView.cs: When calling Expand on a TreeNode, and we need to
-	expand nodes below (ExpandBelow), scroll the entire Viewport
-	area if the node is above it and not visible (instead of scrolling
-	the area from node's Bottom, which applies only when the node is
-	visible).
-	Fixes #325266.
-
-2007-09-28  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* TreeView.cs: When calling ExpandAll, set SelectedNode to the top
-	node in the bottom area (as .Net does). This is done to preserve the
-	scroll position when ExpandAll is called before handle is created for
-	the 1.1 profile (bottom area, as opposed to top area in 2.0).
-	Fixes #324103.
-
-2007-09-28  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* TreeView.cs: When calling ExpandAll, don't move the scroll to the 
-	bottom area if we are in fact not using the vertical scroll bar.
-	Fixes #324824.
-
-2007-09-27  Jonathan Pobst  <monkey at jpobst.com>
-
-	* Control.cs: Comment out a double buffering optimization that doesn't
-	take into account invalidates created in OnPaint, causing the control
-	to never be redrawn.  It would take quite a bit of work to work around
-	this, but I left it commented with an explanation for later possible
-	optimization.
-	[Fixes bug #328681]
-
-2007-09-27  Jonathan Pobst  <monkey at jpobst.com>
-
-	* Control.cs: Ask parent to perform a layout if control is AutoSize and
-	the text changes.
-	* RadioButton.cs: Implement GetPreferredSizeCore.
-	[Fixes bug #328672]
-
-2007-09-26  Jonathan Pobst  <monkey at jpobst.com>
-
-	* RichTextBox.cs, TextBoxBase.cs, WindowsFormsSynchronizationContext.cs:
-	corcompare stuffs.
-
-2007-09-26  Jonathan Pobst  <monkey at jpobst.com>
-
-	* Application.cs: Move the sync context stuff to Run instead of RunLoop
-	so that it doesn't get uninstalled on modal forms.
-	* Control.cs: Install a sync context when a control is created.
-	* WindowsFormsSyncronizationContext.cs: Create a private static control
-	to invoke on.  This is easier than trying to find a created control we
-	can use.
-	[Fixes bug #327608]
-
-2007-09-25  Jonathan Pobst  <monkey at jpobst.com>
-
-	* Application.cs: Install a WindowsFormsSynchronizationContext in the
-	run loop, and uninstall it when done.
-	* WindowsFormsSynchronizationContext.cs: Implement.
-	[Fixes the common case in bug #327608]
-
-2007-09-23  Gert Driesen  <drieseng at users.sourceforge.net>
-
-	* DataGridViewCellCollection.cs: Added argument checks for indexers.
-	Use case-insensitive lookup of column name in indexer. Code
-	formatting.
-
-2007-09-21  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* TreeNode.cs: When collapsing or expanding a node, check whether its
-	change will affect the visible area (we were previously doing a
-	IsVisible check, but that check is not enough since children nodes
-	could be still visible). Fixes part of #325266.
-
-2007-09-21  Jonathan Pobst  <monkey at jpobst.com>
-
-	* TreeView.cs: Always select the first node when the TreeView gets
-	focus if there is no currently selected node.
-	[Fixes bug #324279]
-
-2007-09-21  Jonathan Pobst  <monkey at jpobst.com>
-
-	* TreeView.cs: Do not raise BeforeSelect or AfterSelect when the
-	node being selected is null.
-	[Patch from Yves Bastide fixes bug #326858]
-
-2007-09-20  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* TreeNode.cs: Add an internal ArePreviousNodesExpanded, to know
-	whether all the parent nodes are expanded.
-	* TreeNodeCollection.cs: When adding a new node an calling SetupNode,
-	call RecalculateVisibleOrder if all previous nodes are expanded.
-	Before that we were doing a IsVisible check, but sometimes the node
-	is not in the visible area, but _should_already be ready, because of
-	all previous nodes are expanded. Fixes #325259.
-
-2007-09-20  Jonathan Pobst  <monkey at jpobst.com>
-
-	* ToolStripSplitButton.cs: Call the ButtonClick event if the button
-	portion of the item is clicked.
-
-2007-09-20  Jonathan Pobst  <monkey at jpobst.com>
-
-	* TextControl.cs: Do not tell the system to move the cursor if the
-	textbox isn't focused.  Fixes part of bug #322668.
-
-2007-09-20  Jonathan Pobst  <monkey at jpobst.com>
-
-	* ComboBox.cs: When there are no items, do not show the dropdown if
-	the down arrow is clicked.  Fixes part of bug #322668.
-
-2007-09-20  Jonathan Pobst  <monkey at jpobst.com>
-
-	* ToolStripComboBox.cs: Manually set the size of this control in the
-	constructor, as it doesn't seem to be the same as DefaultSize.
-	Fixes a failing monobuild test.
-
-2007-09-19  Jonathan Pobst  <monkey at jpobst.com>
-
-	* DateTimePicker.cs: If the user sets MinDate to DateTime.MinValue,
-	change it to DateTimePicker.MinDateTime.  [Fixes bug #326609]
-
-2007-09-19  Jonathan Pobst  <monkey at jpobst.com>
-
-	* Theme.cs: FileDialogs should be using DesktopDirectory instead of
-	Desktop.  This lets it work for people who have moved their desktops
-	from the default location on windows.  For people who have not, both
-	values are the same, so it shouldn't hurt anything.  [Fixes bug #325270]
-
-2007-09-18  Jonathan Pobst  <monkey at jpobst.com>
-
-	* ToolStripControlHostTest.cs: DefaultSize is based off hosted control,
-	but when the base constructor sets this, the control is null.  Set it
-	again in the constructor.  Fixes a failing monobuild test.
-
-2007-09-18  Jonathan Pobst  <monkey at jpobst.com>
-
-	* ToolStripDropDownItem.cs: Make sure Click and DropDownOpened events
-	get called.
-	* ToolStripSplitButton.cs: Make sure MouseDown and MouseUp events get
-	called.
-
-2007-09-18  Jonathan Pobst  <monkey at jpobst.com>
-
-	* ToolStrip.cs: Don't show tooltips for ToolStripTextBoxes, they
-	will handle it themselves.
-	* ToolStripItem.cs: When deciding what the text of a tooltip should
-	be, use the Text property instead of the text field.
-	* ToolStripTextBox.cs: Handle tooltips.
-	[Fixes bugs #325417 and #325973]
-
-2007-09-18  Jonathan Pobst  <monkey at jpobst.com>
-
-	* ToolStripDropDownButton.cs: Only drop down overflow menu with a
-	left click.  Fixes the easy part of bug #325969.
-
-2007-09-18  Jonathan Pobst  <monkey at jpobst.com>
-
-	* ToolStrip.cs: Set AutoSizeMode back to GrowAndShrink to refix
-	bug #325406, but set a minimum for StatusStrip to 22 to keep
-	bug #325390 fixed.  I think this minimum would have been figured
-	up automatically if the grip was actually a ToolStripItem, but it
-	currently is not.
-
-2007-09-18  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* ListView.cs: max_label_wrapping is now 30 pixels instead of 38,
-	as this is apparently the actual value used by .Net. Also apply
-	ItemPadding in Details view only, and decrease the general width padding,
-	to have only the needed. This should fix #324340 in Windows too.
-
-2007-09-18  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* ListViewItem.cs: Don't Invalidate item if parent is inside
-	a BeginUpdate/EndUpdate block. This prevents to have differences
-	between the ListView and items state, as well as avoid some exceptions
-	there.
-	* ListView.cs: Make 'updating' field internal.
-
-2007-09-17  Jonathan Pobst  <monkey at jpobst.com>
-
-	* ToolStripControlHost.cs: Realign control when ControlAlign changes.
-	* ToolStripItem.cs: Use ImageScalingSize when calculating preferred
-	size if appropriate.
-	Fixes reopened bug #325414.
-
-2007-09-17  Jonathan Pobst  <monkey at jpobst.com>
-
-	* ToolStrip.cs: Set AutoSizeMode back to GrowOnly.
-	* ToolStripItem.cs: Invalidate before and after our new autosize when
-	text changes.
-	Fixes reopened bug #325390.
-
-2007-09-17  Jonathan Pobst  <monkey at jpobst.com>
-
-	* ToolStripMenuItem.cs: Make sure we invalidate when clicked so
-	mnemonics can be drawn or undrawn correctly.  Fixes reopened bug 
-	#325044.
-
-2007-09-17  Jonathan Pobst  <monkey at jpobst.com>
-
-	* Control.cs: Do WM_CONTEXTMENU before OnMouseUp.  [Fixes bug #325535]
-
-2007-09-14  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* ColumnHeader.cs: When drawing column text, use EllipsisCharacter
-	instead of EllipsisWord (by equistango at gmail.com). Fixes part of
-	#82734.
-
-2007-09-14  Jonathan Pobst  <monkey at jpobst.com>
-
-	* ToolStrip.cs: Make ToolStrip selectable when TabStop = true.  Find an
-	item to select when the ToolStrip is selected.
-	* ToolStripControlHost: Realign the control when the bounds or visibility
-	change.
-	* ToolStripItem.cs: When selected, if it's a control host, focus the control.
-	* ToolStripOverflow.cs: When laying out the drop down, respect the item's
-	preferred height.
-	* ToolStripTextBox.cs: OnPaintInternal should call base.OnPaintInternal, not
-	base.OnPaint.  Was causing text not to be drawn.
-
-2007-09-14  Jonathan Pobst  <monkey at jpobst.com>
-
-	* SplitterPanel.cs: Ignore attempts to set AutoSizeMode.
-
-2007-09-13  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* TreeView.cs: When creating the label edit text box,
-	set is initially to Visible = false. This is done to
-	prevent a confusion in the layout which makes it to lose
-	focus when shown the first time. Fixes part of #82592.
-
-2007-09-13 Andreia Gaita <avidigal at novell.com>
-
-	* WebBrowserBase.cs: add FocusOption enumeration for finer focus control
-
-2007-09-13  Jonathan Pobst  <monkey at jpobst.com>
-
-	* ToolStrip.cs: Take Margin into account when calculating preferred
-	size.  Also, allow preferred size to get smaller than the explicit
-	size.
-	* ToolStripTextBox.cs: Don't change the GetPreferredSize implementation.
-	First step towards fixing bug #82747.
-
-2007-09-13  Jonathan Pobst  <monkey at jpobst.com>
-
-	* TreeView.cs: Applied patch from latency at gmx.de to not paint the
-	full row select background over the plus/minus glyph.  Also, turn
-	off the focus rectangle for full row select since MS doesn't seem
-	to ever paint it.  [Fixes bug #81839]
-
-2007-09-13  Jonathan Pobst  <monkey at jpobst.com>
-
-	* ToolStrip.cs: Don't FocusInternal if there is no selected item.
-	This was causing keyboard opened dropdowns to lose focus.
-	[Fixes bug #82803]
-
-2007-09-13  Jonathan Pobst  <monkey at jpobst.com>
-
-	* Control.cs: If Rectangle.Empty is passed to Invalidate, use
-	ClientRectangle instead.  [Fixes bug #82838]
-
-2007-09-13  Jonathan Pobst  <monkey at jpobst.com>
-
-	* SplitContainer.cs: We can't reset Visible on every layout because
-	someone may have set Visible = false explicitly on a SplitterPanel.
-	Make sure when we switch orientation the SplitterDistance does not
-	change.  Fixes two failing tests.
-
-2007-09-12  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* TreeView.cs: Use MeasureTextInternal instead of MeasureText in
-	TextRenderer, since the latter is only available in 2.0.
-
-2007-09-13  Ivan N. Zlatev <contact at i-nz.net>
-
-	* Cursor.cs: Fix Cursor.Current to apply Cursor.Default.
-	* SplitContainer.cs: Implement FixedPanel layouting.
-
-2007-09-12  Andreia Gaita  <avidigal at novell.com>
-
-	* WebBrowserBase.cs: setup shutdown routine
-
-2007-09-12  Andreia Gaita  <avidigal at novell.com>
-
-	* Application.cs: Let keyboard events that are targetted 
-		to non-mwf windows hosted inside mwf (as in, webbrowser),
-		propagate properly. Fixes keyboard handling on the webbrowser.
-
-2007-09-12  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* ListView.cs: When handling MouseUp event and we are 
-	highligting a node with the mouse right button, don't trigger
-	Before/AfterSelecting event, since we are not actually selecting
-	the node.
-
-2007-09-12  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* TreeView.cs: When editing a node, modify the edit text box
-	depending on the text length (as you are typing), like MS does.
-
-2007-09-12  Jonathan Pobst  <monkey at jpobst.com>
-
-	* ToolStrip.cs: Fixup preferred size calculations for vertical toolbars. 
-	Override GetPreferredSizeCore to perform calculations.  Remove custom
-	autosize logic.  [Fixes bug #82739]
-
-2007-09-12  Jonathan Pobst  <monkey at jpobst.com>
-
-	* TextBoxBase.cs: Modified should default to false.
-
-2007-09-11  Jonathan Pobst  <monkey at jpobst.com>
-
-	* Control.cs: Update the anchoring distances even when layout is supspended.
-	Patch provided by George fixes bug #82805.
-
-2007-09-11  Jonathan Pobst  <monkey at jpobst.com>
-
-	* Control.cs: Provide a setter for ExplicitHeight.
-	* TextBoxBase.cs: Now that we have the implementation for explicit heights,
-	remove the hacks in here for requested_height.
-	[Fixes bug #82749]
-
-2007-09-11  Jonathan Pobst  <monkey at jpobst.com>
-
-	* ScrollBar.cs: Fix an issue reported on the lists where setting a scrollbar's
-	Maximum to lower that its current Value caused an ArgumentException by setting
-	the Value to the new Maximum.
-
-2007-09-11  Jonathan Pobst  <monkey at jpobst.com>
-
-	* ThemeWin32Classic.cs: Math is hard!  Fix some math so that the TrackBar
-	handle moves to the closest tick when it is being dragged.
-	[Fixes bug #82751]
-
-2007-09-11  Jonathan Pobst  <monkey at jpobst.com>
-
-	* ToolStripManager.cs: When we have added MDI buttons onto a MenuStrip, we
-	can't let them count as real items when calculating where to merge in the
-	user's items.  [Fixed bug #82786]
-
-2007-09-10  Jonathan Pobst  <monkey at jpobst.com>
-
-	* ToolStripMenuItem.cs: Add a parent type check so we don't crash on people
-	who want to add a menu item directly onto a toolstrip.
-	[Fixes bug #82775, part II]
-
-2007-09-10  Jonathan Pobst  <monkey at jpobst.com>
-
-	* StatusStrip.cs: Synchronize SetDisplayedItems with the ToolStrip version.
-	* ToolStrip.cs: If a ToolStripItem set to not visible is added to a ToolStrip,
-	don't set it to available.
-	* ToolStripItem.cs: When Visible is changed, tell the owner to perform a layout.
-	[Fixes bug #82727, part II]
-
-2007-09-10  Jonathan Pobst  <monkey at jpobst.com>
-
-	* StatusStrip.cs: Change item placement to None if not visible.
-	* ToolStripItem.cs: Invalidate when InternalVisible changes.
-	These should have been committed to fix 82723, but I missed them.
-
-2007-09-10  Jonathan Pobst  <monkey at jpobst.com>
-
-	* ToolStrip.cs: Make sure ItemClicked is raised before the ToolStripItem's
-	Click, and that it is only called once.
-	* ToolStripMenuItem.cs: Call OnClick even when there are dropdown items.
-	* ToolStripDropDownItem.cs: Override HandleItemClick so dropdowns stay
-	dropped down.
-	[Fixes bug #82775]
-
-2007-09-08  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* ColumnHeaderSample.cs: Use 5 pixels as extra height instead of 8
-	to match .Net.
-	* ThemeWin32Classic.cs: For the columns text, use 5 pixels as left padding
-	instead of 8, just like above. Partially fixes #82734.
-
-2007-09-08  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	Patch by Ernesto Carrea <equistango at gmail.com>. Partially 
-	fixes #82734.
-
-	* ListView.cs: Remove extra space between rows in Details view (match
-	.Net). 
-	* ThemeWin32Classic.cs: Header text should use ListView.Font, not
-	the DefaultFont.
-
-2007-09-08  Gert Driesen  <drieseng at users.sourceforge.net>
-
-	* Application.cs: Modified ProductVersion to return value of
-	AssemblyInformationVersion if available, and fallback to assembly
-	version. Fixes bug #82746. Code formatting.
-	* BindingSource.cs: Remove NIE from Dispose, and mark it MonoTODO
-	instead.
-
-2007-09-07  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* Control.cs: When updating ZOrder for a child control,
-	take into account the implicit ones (we need it in our controls
-	using them). Fixes #82642.
-
-2007-09-07  Jonathan Pobst  <monkey at jpobst.com>
-
-	* ToolStripItem.cs: Add support for animated images.
-	[Fixes bug #82726]
-
-2007-09-07  Jonathan Pobst  <monkey at jpobst.com>
-
-	* ToolStrip.cs: Make sure we aren't drawing anything that isn't 
-	visible.  [Fixes bug #82727]
-
-2007-09-06  Jonathan Pobst  <monkey at jpobst.com>
-
-	* ToolStripItem.cs: If AutoSize changes the size of our item, invalidate
-	so we repaint using the new size.  [Fixes bug #82723]
-
-2007-09-06  Jonathan Pobst  <monkey at jpobst.com>
-
-	* TreeView.cs: If ShowLines is true, we should ignore the FullRowSelect
-	option.  [Fixes bug #81779]
-
-2007-09-06  Jonathan Pobst  <monkey at jpobst.com>
-
-	* TreeView.cs: Override HandleClick because the StandardClick style is
-	set to false.  According to MSDN (and testing), the click events should
-	only be raised when the click occurs on a TreeNode.  [Fixes bug #81739]
-
-2007-09-06  Jonathan Pobst  <monkey at jpobst.com>
-
-	* ToolStripTextBox.cs: Invalidate our textbox when it loses focus, so
-	the border will disappear.  Fixes reopened #82653.
-
-2007-09-06  Jonathan Pobst  <monkey at jpobst.com>
-
-	* Control.cs: If the control is autosize, and its preferred size changes
-	when it lays out its children, tell its parent so it can be re-layed out.
-	Fixing some of the fallout from r85433.
-
-2007-09-06  Jonathan Pobst  <monkey at jpobst.com>
-
-	* ThemeWin32Classic.cs: Fix a NRE caused by r85427 because RadioButton
-	and CheckBox share some code.
-
-2007-09-06  Jonathan Pobst  <monkey at jpobst.com>
-
-	* TrackBar.cs: Only call OnScroll if we actually changed the Value of
-	the TrackBar, not every mouse move.  [Fixed bug #82718]
-
-2007-09-06  Jonathan Pobst  <monkey at jpobst.com>
-
-	* ThemeWin32Classic.cs: Allow a CheckBox to be rendered like a Button
-	under 2.0 rendering.  [Fixes bug #82657]
-
-2007-09-06  Jonathan Pobst  <monkey at jpobst.com>
-
-	* TreeView.cs: If we found a TreeNode to display a context menu, but
-	it doesn't have one to show, let the TreeView display its menu
-	instead.  [Fixes bug #82680]
-
-2007-09-06  Jonathan Pobst  <monkey at jpobst.com>
-
-	* ToolStripTextBox.cs: TextBox no longer call OnPaint, we need to use
-	OnPaintInternal instead.  Give the internal TextBox a Border property
-	so it can draw itself more correctly.  [Fixes bug #82653]
-
-2007-09-06  Zoltan Varga  <vargaz at gmail.com>
-
-	* HtmlHistory.cs HtmlWindow.cs HtmlWindowCollection.cs ListBindingHelper.cs WindowsFormsSection.cs WindowsFormsSynchronizationContext.cs: Stubs for missing 2.0 classes.
-
-2007-09-05  Everaldo Canuto  <everaldo at simios.org>
-
-	* ComboBox.cs: Adjust combobox button state to reflect current state when
-	back to enabled = true. Fixes first issue of #82654.
-
-2007-09-05  Everaldo Canuto  <everaldo at simios.org>
-
-	* Control.cs: Fix last patch regression, prevent forms to update zorder	when
-	setting visible property.
-
-2007-09-05  Everaldo Canuto  <everaldo at simios.org>
-
-	* Control.cs: Update zorder after control creation in SetVisibleCore, it 
-	fix zorder for controls initially created as non visible. Fixes #82667.
-
-2007-09-04  Everaldo Canuto  <everaldo at simios.org>
-
-	* ThemeWin32Classic.cs: Adjust checkbox light color to ControlLightLight to
-	mimic win32 look. Fixes #82656.
-
-2007-09-01  Zoltan Varga  <vargaz at gmail.com>
-
-	* FileDialogCustomPlace.cs FileDialogCustomPlacesCollection.cs: 
-	Stubs for new net 3.5 classes.
-
-2007-08-31  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* ListViewItem.cs: In ListViewItemCollection operations calculate
-	Layout for owner as well as invalidate it. Fixes part of #82642.
-
-2007-08-31  Jonathan Pobst  <monkey at jpobst.com>
-
-	* ToolStripItem.cs: Take Parent/Owner's Enabled state in to account
-	when returning Enabled.  [Fixes bug #82651]
-
-2007-08-30  Everaldo Canuto  <everaldo at simios.org>
-
-	* ToolBar.cs: Fix button size for non flat toolbars. Fixes #82368.
-
-2007-08-30  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* ListView.cs: Put item padding info in a single place
-	(Theme.ListViewItemPaddingWidth) to have working AutoResize on
-	columns again.
-	* ThemeWin32Classic.cs:
-	* Theme.cs: Likewise.
-
-2007-08-30  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* ListView.cs: When a ListViewSubItem instance is invalidated,
-	invoke Invalidate on parent ListViewItem, not parent ListView.
-	Fixes #81570.
-
-2007-08-30  Jonathan Pobst  <monkey at jpobst.com>
-
-	* ListView.cs, ListViewItem.cs: corcompare stuffs.
-
-2007-08-30  Jonathan Pobst  <monkey at jpobst.com>
-
-	* BindingMemberInfo.cs: Implement == and != operators.
-
-2007-08-30  Jonathan Pobst  <monkey at jpobst.com>
-
-	* HtmlElementEventArgs.cs: Implement properties.
-
-2007-08-29  Jonathan Pobst  <monkey at jpobst.com>
-
-	* HtmlElementErrorEventArgs.cs, HtmlElementErrorEventHandler.cs: Added.
-
-2007-08-29  Jonathan Pobst  <monkey at jpobst.com>
-
-	* TabControl.cs: I was looking into the MonoTODO on TabPageCollection.
-	Add (string,string,string) to implement the imagekey.  It turns out, we
-	use the requested imagekey whereas .Net does not.  So I broke ours to match
-	theirs.  :(
-
-2007-08-29  Jonathan Pobst  <monkey at jpobst.com>
-
-	* Form.cs, UserControl.cs: Override ValidateChildren, AutoValidate.
-
-2007-08-29  Jonathan Pobst  <monkey at jpobst.com>
-
-	* ContainerControl.cs: Implement ValidateChildren and new Validate overload.
-
-2007-08-29  Gert Driesen  <drieseng at users.sourceforge.net>
-
-	* FolderBrowserDialog.cs: Set Tag of newly created node, and keep it
-	up-to-date. Fixes bug #82618.
-
-2007-08-29  Everaldo Canuto  <everaldo at simios.org>
-
-	* TextBoxBase.cs: Call CalculateDocument after changes Lines property to
-	reflect document changes. Fixes #82367.
-
-2007-08-29  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* ListView.cs: Add/fix some override differences between 1.1 and 2.0,
-	as well as add new ones. This should make work the BackgroundImage
-	property for ListView again.
-
-2007-08-28  Jonathan Pobst  <monkey at jpobst.com>
-
-	* DataGrid.cs, DataGridViewButtonColumn.cs, DataGridViewCheckBoxColumn.cs,
-	DataGridViewComboBoxColumn.cs, DataGridViewImageColumn.cs, DataGridViewLinkColumn.cs,
-	DataGridViewTextBoxColumn.cs, ToolTip.cs: corcompare stuffs.
-
-2007-08-28  Jonathan Pobst  <monkey at jpobst.com>
-
-	* Control.cs, XPlatUI.cs, XPlatUIDriver.cs, XPlatUIWin32.cs: Implement
-	IsKeyLocked.
-
-2007-08-28  Jonathan Pobst  <monkey at jpobst.com>
-
-	* Cursor.cs: Add HotSpot, hook into XPlatUI.GetCursorInfo.
-	* XPlatUIWin32.cs: Implement hotspot lookup in GetCursorInfo.
-
-2007-08-28  Jonathan Pobst  <monkey at jpobst.com>
-
-	* RadioButton.cs: Use 2.0 rendering.  Use base implementation of TextAlign.
-	* Theme.cs, ThemeWin32Classic.cs: Implement 2.0 rendering for RadioButton.
-
-2007-08-27  Ivan N. Zlatev  <contact at i-nz.net>
-
-	* CursorConverter.cs: Implement conversion to InstanceDescriptor.
-
-2007-08-27  Ivan N. Zlatev  <contact at i-nz.net>
-
-	* GridEntry.cs: Implement GetService.
-
-2007-08-27  Jonathan Pobst  <monkey at jpobst.com>
-
-	* LabelEditTextBox.cs, TreeView.cs: After hiding the textbox used
-	for label editting, make sure we focus back on the TreeView.
-	[Fixes bug #82590]
-
-2007-08-27  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* ListView.cs: Add some 2.0 overrides.
-
-2007-08-27  Everaldo Canuto  <ecanuto at novell.com>
-
-	* Form.cs: Uses opacity var instead of Opacity property in CreateHandle
-	because getter dont returns right value before handle creation. Thanks 
-	to George. Fixes #82569.  
-
-2007-08-27  Everaldo Canuto  <ecanuto at novell.com>
-
-	* Theme.cs: Revert last patch, it causes error under win32. 
-
-2007-08-27  Everaldo Canuto  <ecanuto at novell.com>
-
-	* Theme.cs: Uses Environment.SpecialFolder.DesktopDirectory instead of 
-	Environment.SpecialFolder.Desktop in Places method, Desktop returns the 
-	logical Desktop rather than the physical file system location. Fixes #82603. 
-
-2007-08-26  Everaldo Canuto  <ecanuto at novell.com>
-
-	* MessageBox.cs: Add clipboard copy (ctrl+c) to messagebox. Thanks Andy Hume
-	for the patch. Fixes #82568.
-
-2007-08-26  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* ListView.cs: Add a pair of missing 2.0 ListViewItemCollection.Insert
-	methods.
-
-2007-08-26  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* ListViewInsertionMark.cs: New stubbed class.
-
-2007-08-25  Gert Driesen  <drieseng at users.sourceforge.net>
-
-	* FolderBrowserDialog.cs: When adding folder, immediately create the
-	directory with temporary name and rename the directory when editing
-	finishes. This matches MS. Ensure the node for the new folder is 
-	selected and LabelEdit is disabled, when editing is either finished
-	or cancelled.
-
-2007-08-25  Gert Driesen  <drieseng at users.sourceforge.net>
-
-	* TreeView.cs: When editing label of node, ensure node is visible.
-
-2007-08-25  Ivan N. Zlatev  <contact at i-nz.net>
-
-	* PropertyGridView.cs: Set the value only if it has changed.
-
-2007-08-24  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* ListView.cs: Some more code refactoring to add support sorting
-	with groups (now for Details view). Remove unused code also.
-
-2007-08-24  Jonathan Pobst  <monkey at jpobst.com>
-
-	* NodeLabelEditEventArgs.cs: EndEdit immediately when CancelEdit is called.
-	Not a big fan of reacting immediately to a field in an EventArg, but that's
-	the way it's done.  (This is part of the previous commit that got left out.)
-
-2007-08-25  Gert Driesen  <drieseng at users.sourceforge.net>
-
-	* FolderBrowserDialog.cs: Removed need for separate description field.
-	Replaced "" with string.Empty. Fixed tabindex. Ensure OK button
-	has focus when dialog box is displayed again, regardless of what
-	button was pressed the previous time. Set RootFolder and SelectedPath
-	each time dialog box is displayed. This ensures the treeview is
-	refreshed, and fixes bug #82579. Do no hide selected node in TreeView
-	when it does not have focus. Added support for more special folders.
-
-2007-08-24  Jonathan Pobst  <monkey at jpobst.com>
-
-	* TreeView.cs: Create a CancelEdit method.  Clone the edit_args in EndEdit
-	before calling AfterLabelEdit.  If the user calls BeginEdit in that event,
-	it resets the edit_args.
-	* TreeNode.cs: Call CancelEdit if the user passes cancel = true to EndEdit.
-	[Fixes bug #82577]
-
-2007-08-24  Gert Driesen  <drieseng at users.sourceforge.net>
-
-	* FolderBrowserDialog.cs: Modifies form caption and text of new folder
-	button to match MS. Provide more meaningful exception message for
-	invalid RootFolder value. Use zero-length string when SelectedPath
-	is set to null. Allow non-rooted paths in SelectedPath, but ignore
-	them in FolderBrowserTreeView. Allow folders to be created in
-	RootFolder. Fixes bug #82576.
-
-2007-08-24  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* ListView.cs: Correctly compute the layout_ht (height) when using groups,
-	since we need to take into account the group headers and the margin
-	between them.
-	* ListViewGroup.cs: Add a rows field to store the number of rows per
-	group.
-
-2007-08-24  Rolf Bjarne Kvinge <RKvinge at novell.com> 
-
-	* DateTimePicker.cs: The MS' MTB has a really stupid year formatting.
-	  Anyways, let's just follow the lead.
-
-2007-08-24  Jonathan Pobst  <monkey at jpobst.com>
-
-	* CheckBox.cs: Set the AutoSizeMode to GrowAndShrink.
-	* Form.cs, GroupBox.cs: Don't skip Right or Bottom anchored 
-	controls in GetPreferredSizeCore.
-	* ThemeWin32Classic.cs: Tweak text drawing of CheckBoxes.
-	[Fixes bug #82488]
-
-2007-08-24  Jonathan Pobst  <monkey at jpobst.com>
-
-	* PrintDialog.cs: Need to instantiate the form variable here too.
-
-2007-08-24  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* ListView.cs: Do some reorganization to support sorting in groups,
-	by doing the layout sequentially in ListView.Items. Also add support
-	for the Default Group, which should be available for items with no
-	group assigned.
-	* ListViewGroup.cs: Add support for DefaultGroup. Include new members
-	for storing layout info also.
-	* ListViewGroupCollection.cs: Add a DefaultGroup as part of the
-	collection, as well as providing internal members to do a traversal
-	including the default group (needed when doing layout/drawing).
-	* ThemeWin32Classic.cs: When drawing group headers use internal
-	ListViewGroupCollection members to take into account the default
-	group.
-
-2007-08-23  George Giolfan  <georgegiolfan at yahoo.com>
-
-	* FlowLayoutPanel.cs: Add GetPreferredSizeCore.  [Fixes bug #82537]
-
-2007-08-23  Jonathan Pobst  <monkey at jpobst.com>
-
-	* TreeView.cs: IsInputKey: don't ask for any keys if the handle hasn't
-	been created.  If handle is created, we want arror keys.  If we are editing
-	a node, we want things like enter, esc, home, end, page up, page down.
-	Allows Esc to work for FolderBrowserDialog.
-
-2007-08-23  Jonathan Pobst  <monkey at jpobst.com>
-
-	* ColorDialog.cs, FontDialog.cs: Set the form's CancelButton so that
-	they close when ESC is pressed.  Thanks Andy!
-
-2007-08-23  Jonathan Pobst  <monkey at jpobst.com>
-
-	* CommonDialog.cs: Do not instantiate form, leave that for derived classes.
-	This way we can tell if this is a CommonDialog provided with mono, or one
-	that is being implemented outside by a developer.  If it is an external one,
-	the developer is responsible for showing their own form.  We were showing
-	our blank form after the developer showed his.
-	* ColorDialog.cs, FileDialog.cs, FolderBrowserDialog.cs, FontDialog.cs,
-	PageSetupDialog.cs: Instantiate form variable in our constructor.
-	[Fixes bug #82531]
-
-2007-08-23  Jonathan Pobst  <monkey at jpobst.com>
-
-	* ListBox.cs, ListView.cs, TreeView.cs: Override IsInputCharInternal
-	and always return true.  [Fixes bug #81616]
-
-2007-08-23  Jonathan Pobst  <monkey at jpobst.com>
-
-	* TextBoxBase.cs: Allow 2.0 AutoSize to change the height of the
-	TextBox.  [Fixes bug #82549]
-
-2007-08-23  Gert Driesen  <drieseng at users.sourceforge.net>
-
-	* FileDialog.cs: When Save/Open is clicked and no filename is selected
-	or entered then do not close the dialog. Fixes bug #82539. Removed
-	CWLs.
-
-2007-08-22  Everaldo Canuto  <ecanuto at novell.com>
-
-	* FileDialog.cs: Create UpdateRecentFiles and move the recent files refresh
-	code to this method. It is calling every time filter changes. This method
-	will help to fix the bug #80887.
-
-2007-08-22  Jonathan Pobst  <monkey at jpobst.com>
-
-	* CheckBox.cs: Implement AutoSize calculation.
-
-2007-08-22  Jonathan Pobst  <monkey at jpobst.com>
-
-	* CheckBox.cs: Use new 2.0 rendering for 2.0.
-	* Theme.cs: Method declarations for 2.0 rendering path.
-	* ThemeWin32Classic.cs: 2.0 rendering implementation for CheckBox.
-
-2007-08-21  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* ListViewGroupCollection.cs: Fix a typo of the previous patch.
-
-2007-08-21  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* ListViewGroupCollection.cs: Implement AddRange the right way, to
-	only call Redraw on the parent one time.
-
-2007-08-21  Rolf Bjarne Kvinge <RKvinge at novell.com> 
-
-	* DataGridViewRowHeaderCell.cs, DataGridViewColumnHeaderCell.cs: Implemented
-	  GetClipboardContent.
-	* DataGridViewCell.cs: Implemented GetClipboardContent,
-	  GetEditedFormattedValue, GetFormattedValue.
-	* DataGridView.cs: Implemented GetClipboardContent, TopLeftHeaderCell.
-
-2007-08-21  Jonathan Pobst  <monkey at jpobst.com>
-
-	* TableLayoutStyleCollection.cs: corcompare fix.
-
-2007-08-21  Rolf Bjarne Kvinge <RKvinge at novell.com> 
-
-	* DataObject.cs: Implemented retrieval of convertible / not convertible
-	  objects.
-
-2007-08-21  Jonathan Pobst  <monkey at jpobst.com>
-
-	* ToolStripItem.cs: When changing the item's text, invalidate before we resize
-	ourselves.  This ensures the entire old bounds are repainted, in case our new
-	size is smaller.  [Fixes bug #82518]
-
-2007-08-20  Everaldo Canuto  <ecanuto at novell.com>
-
-	* XplatUIX11.cs: Apply patch from #81588, it makes use of PointerMotionHintMask
-	flag to make fast handle of mouse events, without this the mouse move is
-	handled in some manner, whether it is a mouse move or not. Fixes #81588.
-
-2007-08-20  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* ListView.cs: When doing layout calculations don't use a ref
-	param to keep the current item; instead use its Index value (this 
-	is specially important when doing the layout with Groups
-	and Items being sparse). Also don't take into account items added to
-	the Group but not yet added to the main ListView.Items collection.
-
-2007-08-20  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* ListViewGroupCollection.cs: Forgot to mimic an issue
-	in the indexer (don't assign the ListView owner for new values).
-
-2007-08-20  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* ListViewGroupCollection.cs: Make the string indexer use
-	the int based indexer to re-use code, instead of duplicate the code.
-	Also Redraw as needed and take into account null values.
-
-2007-08-20  Jonathan Pobst  <monkey at jpobst.com>
-
-	* StatusStrip.cs: Make sure the item's parent gets set in SetDisplayedItems.
-	[Fixes bug #82481]
-
-2007-08-20  Jonathan Pobst  <monkey at jpobst.com>
-
-	* ToolStrip.cs: Add some logic to un-focus controls in ToolStripControlHosts
-	when other buttons are clicked or navigated to.
-
-2007-08-20  Rolf Bjarne Kvinge <RKvinge at novell.com> 
-
-	* XplatUIX11.cs: Treat toolwindows as if they had no window manager, since
-	  it's XplatUIX11 that attaches them.
-
-2007-08-20  Rolf Bjarne Kvinge <RKvinge at novell.com> 
-
-	* DataGridView.cs: If a column has been added, recreate the editing row.
-	  Fixes #82226.
-
-2007-08-20  Rolf Bjarne Kvinge <RKvinge at novell.com> 
-
-	* TextControl.cs: Use Math.Max instead of Math.Min when deciding the length
-	  of the tag to draw. Makes disappearing text show up again.
-
-2007-08-20  Rolf Bjarne Kvinge <RKvinge at novell.com> 
-
-	* StatusBar.cs: Take into account any icons when a panel has AutoSize =
-	  Contents. Fixes #82487.
-
-2007-08-19  Andreia Gaita  <avidigal at novell.com>
-
-	* Added HtmlElement.cs, HtmlElementCollection.cs, 
-	  HtmlElementEventArgs.cs, HtmlElementEventHandler.cs
-	  
-2007-08-19  Andreia Gaita  <avidigal at novell.com>
-
-	* BindingSource.cs: Implement this, dispose and getenumerator.
-	* DataGridViewRowCollection.cs: Move the InvalidOperationException
-	out of AddInternal, throw it only on public Add calls. The 
-	UsingWebBrowser sample was blowing up with this when setting the
-	DataSource after adding DataBindings, so it's likely that .net
-	only throws this exception when Add is called directly.	
-	
-	* ToolStripControlHost.cs: Return the hosted control's text
-	property, and not the ToolStripItem one (it would always return
-	the initial value).
-	
-	* HtmlDocument.cs: Implement GetElementById and All
-	* WebBrowser.cs: Remove exception on set_DocumentStream.	
-
-2007-08-19  Everaldo Canuto  <ecanuto at novell.com>
-
-	* Form.cs: Fix the max and min value for opacity (0~1).
-
-2007-08-19  Everaldo Canuto  <ecanuto at novell.com>
-
-	[Fixes #80118]
-	* DataGridTableStyle.cs: Default header font is now null, on getter it 
-	returns datagrid font when is null. On setter permits null.
-
-	* DataGrid.cs:
-	- When ResetHeaderFont set header font to null.
-	- On EndInit set grid_style.DataGrid.
-
-2007-08-19  Everaldo Canuto  <ecanuto at novell.com>
-
-	* TabControl.cs: Fix regression in default padding x.
-
-2007-08-19  Everaldo Canuto  <ecanuto at novell.com>
-
-	* TabControl.cs: Fix tab page text area removing padding. Fixes #82471.
-
-2007-08-19  Everaldo Canuto  <ecanuto at novell.com>
-
-	* TabControl.cs: Fix first tab drawing, when selected it must have x = 0
-	not 2. Fixes #82229.
-
-2007-08-18  Everaldo Canuto  <ecanuto at novell.com>
-
-	* TabControl.cs: Fix tab size when image height is less than text height.
-	Partially fixes #81837.
-
-2007-08-18  Everaldo Canuto  <ecanuto at novell.com>
-
-	* Form.cs: Add WS_EX_CONTROLPARENT to forms to make it selectable using 
-	"alt + tab". It works only for Win32, for X11 theres no way to remove window
-	from taskbar and keep it on "alt_tab". Fixes #81722.
-
-2007-08-18  Everaldo Canuto  <ecanuto at novell.com>
-
-	* XplatUIX11.cs: Apply patch from Jurek Bartuszek to fix DrawReversibleFrame
-	and DrawReversibleLine, also apply same behavior to FillReversibleRectangle. 
-	Fixes #80877 and #79418.
-
-2007-08-18  Everaldo Canuto  <ecanuto at novell.com>
-
-	* MenuAPI.cs: Fix popup menu position when the size is larger than distance 
-	between position and one of the screen borders. Fixes #82349.
-
-2007-08-18  Everaldo Canuto  <ecanuto at novell.com>
-
-	* MessageBox.cs: When there is no form that invoked the MessageBox, shows
-	the MessageBox in the taskbar. Fixes #82457.
-
-2007-08-18  Everaldo Canuto  <ecanuto at novell.com>
-
-	* MessageBox.cs: Fix form size when icon is set and text height is bigger
-	than icon. Fixes #82468.
-
-2007-08-18  Rolf Bjarne Kvinge <RKvinge at novell.com> 
-
-	* ThemeWin32Classic.cs: A FixedToolWindow has border size 3.
-	* InternalWindowManager.cs: Change HandleCalcSize to return a boolean value
-	  if handled or not. Implement WM_NCCALCSIZE for WParam == 0 as well.
-	  Refactored HandleNCCalcSize somewhat to avoid code duplication.
-	* Form.cs: Add is_clientsize_set, set in set_ClientSize, used by
-	  FormBorderStyle to decide if we're calculating a new size from the
-	  client size or not. CreateParams: Don't fake tool windows, only the X11
-	  backend manages toolwindows manually.
-
-2007-08-17  Jonathan Pobst  <monkey at jpobst.com>
-
-	* Form.cs: Only reset is_visible if !IsDisposed to prevent an
-	ObjectDisposedException.
-
-2007-08-17  Jonathan Pobst  <monkey at jpobst.com>
-
-	* Form.cs: Reset is_visible back to true after OnLoad.  Setting this
-	in OnLoad should not have any effect.  [Fixes bug #82470]
-
-2007-08-17  Jonathan Pobst  <monkey at jpobst.com>
-
-	* ToolTip.cs: Add a hack to ToolTipWindow so it will still size and
-	paint for controls that create their own ToolTipWindow instead of
-	going through ToolTip.
-
-2007-08-17  Jonathan Pobst  <monkey at jpobst.com>
-
-	* ToolTip.cs: Make Hide internal instead of public to match MS API.
-
-2007-08-17  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* ListViewGroupCollection.cs: Use generic List instead of an
-	ArrayList, since this collection is 2.0 only.
-
-2007-08-17  Jeffrey Stedfast  <fejj at novell.com>
-
-	* ToolTip.cs (Hide): Made public to make the build work (should
-	this not be public?).
-
-2007-08-17  Jonathan Pobst  <monkey at jpobst.com>
-
-	* ToolBar.cs, ToolStrip.cs, TreeView.cs: Use a ToolTip instead of a
-	ToolTipWindow.
-	* ToolTip.cs: Add an internal Visible property to facilitate transition.
-
-2007-08-17  Jonathan Pobst  <monkey at jpobst.com>
-
-	* DrawToolTipEventArgs.cs, DrawToolTipEventHandler.cs, PopupEventArgs.cs,
-	PopupEventHandler.cs: Make these internal for 1.1.
-	* ThemeClearlooks.cs, ThemeWin32Classic.cs: Use TextRenderer, and modify to not
-	use ToolTipWindow internals.
-	* ToolTip.cs: Add 2.0 modal Show methods.  Had to move a lot of stuff around to
-	support this.  A lot of stuff in the ToolTipWindow got moved to the ToolTip.
-
-2007-08-17  Rolf Bjarne Kvinge <RKvinge at novell.com> 
-
-	* X11Dnd.cs: Add a null check.
-
-2007-08-17  Rolf Bjarne Kvinge <RKvinge at novell.com> 
-
-	* X11Dnd.cs: MwfWindow: Try to load the control directly from the handle if
-	  nothing else succeeds. Fixes #82453.
-
-2007-08-17  Rolf Bjarne Kvinge <RKvinge at novell.com> 
-
-	* XplatUIWin32.cs: PaintEventStart: validate the entire source client
-	  rectangle if we're painting to another window than the one the paint
-	  message was generated on. Simplify the code somewhat, which makes
-	  PaintEventEnd also simpler.
-
-2007-08-17  Rolf Bjarne Kvinge <RKvinge at novell.com> 
-
-	* Control.cs: When changing parent of a form, let the form decide whether
-	  XplatUI.SetParent should be called or not.
-	* Form.cs: ChangingParent: only call XplatUI.SetParent if we're not
-	  recreating the handle. If the new parent's handle isn't created, don't
-	  recreate our handle, just destroy it. CreateParams: Check if the
-	  parent's handle is created before fetching it.
-
-2007-08-17  Rolf Bjarne Kvinge <RKvinge at novell.com> 
-
-	* Control.cs, Form.cs, InternalWindowManager.cs, MainMenu.cs, MdiClient.cs:
-	  Update calls to PaintEventStart/End to take a Message argument.
-	* XplatUI.cs, XplatUIDriver.cs, XplatUIOSX.cs: Update PaintEventStart/End to
-	  take a Message argument.
-	* XplatUIWin32.cs, XplatUIX11.cs: Update PaintEventStart/End to take a
-	  Message argument, and handle the case where we don't paint to the window
-	  for which the paint message was generated.
-
-2007-08-17  Rolf Bjarne Kvinge <RKvinge at novell.com> 
-
-	* XplatUIWin32.cs: Don't call Win32GetLastError directly, use
-	  Marshal.GetLastWin32Error. Plug nasty memory leak in
-	  PaintEventStart/End, we were creating a DC we weren't releasing.
-
-2007-08-17  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* ListView.cs: Add Groups support in Details view. Also have a small
-	method to do the layout of the group header. Don't use a separate
-	method to do the groups calculation in Icons view, since our methods
-	are now a little simpler.
-	* ListViewGroup.cs: Use the more accurate `HeaderBounds' name than
-	`Bounds'.
-	* ThemeWin32Classic.cs: Likewise.
-
-2007-08-16  Jonathan Pobst  <monkey at jpobst.com>
-
-	* Application.cs: Add FilterMessage method and rework our message loop
-	logic to use it.
-
-2007-08-16  Jonathan Pobst  <monkey at jpobst.com>
-
-	* Application.cs: Add some methods and stub a few methods that are
-	pretty much never used.
-
-2007-08-15  Jonathan Pobst  <monkey at jpobst.com>
-
-	* TreeNode.cs: Add some serialization methods.
-
-2007-08-14  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* ListView.cs: In ListViewItemCollection have a 
-	'is_main_collection' field to not modify ListViewItem.ListView
-	when using it as ListViewGroup.Items (and not ListView.Items)
-	and also don't modify selection state (.Net behaviour). 
-	Instead, set group for items contained in a ListViewGroup.Items collection.
-	* ListViewItem.cs: Simplify some code in Group setter.
-	* ListViewGroup.cs: use the new .ctor to pass the current instance
-	to the ItemsCollection.
-	* ListViewGroup.cs: Set the ListView property for ListViewGroup
-	instances when adding/removing. Also make Remove use RemoveAt, which
-	should perform better.
-
-2007-08-14  Jonathan Pobst  <monkey at jpobst.com>
-
-	* Message.cs, TabControl.cs, TextBox.cs, TextBoxBase.cs: Hide some 2.0 API
-	that crept into the 1.1 profile.
-
-2007-08-14  Jonathan Pobst  <monkey at jpobst.com>
-
-	* ToolBarButton.cs: Implement ImageKey.
-
-2007-08-14  Jonathan Pobst  <monkey at jpobst.com>
-
-	* ToolBar.cs: Implement ScaleControl/ScaleCore.
-
-2007-08-13  Rolf Bjarne Kvinge <RKvinge at novell.com> 
-
-	* PictureBox.cs: OnAnimateImage/UpdateAnimateImage: Check if handle is still
-	  created, it might have gotten destroyed since we last checked. Fixes
-	  #82405.
-
-2007-08-11  Jonathan Pobst  <monkey at jpobst.com>
-
-	* ToolTip.cs: Remove mouse in control check from mouseleave handler so
-	tooltip will hide when mouse is moved off the control.
-	[Fixes bug #82407]
-
-2007-08-11 Andreia Gaita <avidigal at novell.com>
-
-	* WebBrowserBase.cs, WebBrowser.cs: add implementation
-	using Mono.Mozilla for loading and navigating webcontrol
-	with xulrunner.
-	The initial implementation was done on 
-	/trunk/mozembed/tests/browser , and copied here.
-
-2007-08-11  Gert Driesen  <drieseng at users.sourceforge.net>
-
-	* ThemeWin32Classic.cs: On 2.0 profile, use ForeColor and BackColor of
-	ToolTipWindow for drawing the tooltip. Fixes bug #82408.
-
-2007-08-10  Rolf Bjarne Kvinge <RKvinge at novell.com> 
-
-	* DataGridView.cs: Add support for an editing row. Fixes #82226.
-	  RowTemplateFull: throw an exception if a column doesn't have a template.
-	* DataGridViewRowCollection.cs: AddInternal: if there are any editing rows,
-	  add the row just before it.
-	* DataGridViewTextBoxCell.cs: Don't paint cells which are in edit mode as
-	  selected.
-	* DataGridViewSelectedRowCollection.cs: Don't return the editing row. Add a
-	  DataGridView field to be able to reach the grid's editing row.
-
-2007-08-10  Jonathan Pobst  <monkey at jpobst.com>
-
-	* ToolTip.cs: If the control's handle hasn't been created when it has a
-	tooltip set on it, don't check to see if we need to show the tooltip.  This
-	check was causing the control's handle to be created.
-	[Fixes bug #82399]
-
-2007-08-10  Jonathan Pobst  <monkey at jpobst.com>
-
-	* TextBoxBase.cs: Fix SelectionLength when no text selected to match MS:
-					1.1		2.0
-	Handle Not Created	-1		0
-	Handle Created		0		0
-	[Fixes bug #82371]
-
-2007-08-10  Jonathan Pobst  <monkey at jpobst.com>
-
-	* ToolTip.cs: Hide the tooltip if the control is clicked to match MS behavior.
-	[Fixes bug #82348]
-
-2007-08-09  Jonathan Pobst  <monkey at jpobst.com>
-
-	* DrawToolTipEventArgs.cs: Don't dispose a brush we got from the respool.
-	* ToolTip.cs: Implement some properties and owner draw.
-
-2007-08-09  Rolf Bjarne Kvinge <RKvinge at novell.com> 
-
-	* DataGridView.cs: OnPaint: don't set scrollbar visibility to false then
-	  show them again, since setting visibility causes a paint, causing an
-	  endless loop (instead use a temporary and set it all when it's known if
-	  they should be shown or not). Fixes #79265.
-
-2007-08-09  Rolf Bjarne Kvinge <RKvinge at novell.com> 
-
-	* DataGridView.cs: Only do a full column/row selection if a header was
-	  clicked and we're in Column/RowHeader selection mode. If shift and ctrl
-	  isn't pressed, deselect everything before selecting something.
-
-2007-08-09  Rolf Bjarne Kvinge <RKvinge at novell.com> 
-
-	* DataGridView.cs: Fix SelectedRows and SelectedColumns to match MS
-	  behaviour according to bug #81075 - they are returned in the order they
-	  are selected. Fix HitTest to check if the point is within any of the
-	  headers. Allow for row/column selection when in ColumnHeader or
-	  RowHeader selection mode. Add SetSelected[Column|Row]CoreInternal for
-	  the row and column to call when their selected state changes, and
-	  updated selected_[rows|columns] whenever SetSelected* is called.
-	* DataGridViewBand.cs: Initialize isRow correctly. Call
-	  SetSelected[Row|Column]CoreInternal when the selected state changes, and
-	  add a SelectedInternal to avoid StackOverflows.
-	* DataGridViewColumn.cs, DataGridViewRow.cs: If DGV is ReadOnly, we're also
-	  ReadOnly no matter what.
-	* DataGridViewSelectedColumnCollection.cs,
-	  DataGridViewSelectedRowCollection.cs: Add an InternalAddRange that adds
-	  the items in reverse order (just as MS does...)
-
-2007-08-09  Jonathan Pobst  <monkey at jpobst.com>
-
-	* Application.cs: Only release menustrips if Alt (MenuKey) is pressed by
-	itself, not part of a mnemonic.  [Fixes bug #82378]
-
-2007-08-09  Rolf Bjarne Kvinge <RKvinge at novell.com> 
-
-	* DataGridView.cs: BeginEdit: don't allow editing of readonly cells.
-	* DataGridViewCell.cs: Implement ReadOnly better: the cell is ReadOnly if
-	  the DGV, the column, the row, or the cell itself is readonly.
-
-2007-08-09  Gert Driesen  <drieseng at users.sourceforge.net>
-
-	* ThemeNice.cs: Use XplatUI.RunningOnUnix instead of checking
-	OSVersion.Platform.
-	* FileDialog.cs: Same.
-	* TextRendered.cs: Same.
-	* FolderBrowserDialog.cs: Same.
-	* TextBoxBase.cs: Same.
-	* Application.cs: Same.
-	* Cursors.cs: Same.
-	* ThemeClearLooks.cs: Same.
-
-2007-08-09  Gert Driesen  <drieseng at users.sourceforge.net>
-
-	* XplatUI.cs: Added RunningOnUnix property to be used by controls
-	instead of duplicating these checks everywhere.
-	* FileDialog.cs: Use case-insensitive comparison for populating the
-	DirComboBox when not running on unix. Fixes bug #82385.
-	* OpenFileDialog.cs: to match MS, change label of DirComboBox to 
-	"Look in".
-
-2007-08-09  Rolf Bjarne Kvinge <RKvinge at novell.com> 
-
-	* DataGridView.cs: SelectedRows: we need to check if selectionMode is
-	  FullRowSelect (not FullColumnSelect). Fixes #81075. Implemented
-	  BeginEdit, EndEdit, SetSelected<Cell|Row|Column>Core. Implemented row,
-	  cell and column selection with ctrl and shift pressed. Call the correct
-	  BeginEdit/EndEdit whenever we start/end editing. Move painting code to
-	  the corresponding virtual method (PaintBackground to paint background,
-	  etc).
-	* DataGridViewCell.cs: Implement Selected correctly, we're selected if
-	  either the column, row or the cell itself is selected.
-	* DataGridViewRowCollection.cs: Use DGV.OnRowsAddedInternal instead of
-	  OnRowsAdded.
-	* DataGridViewRow.cs: Moved some of the painting code from DataGridView
-	  here. When the row is selected, don't select all cells. Each cell now
-	  queries the row to see if the row is selected.
-
-2007-08-09  Rolf Bjarne Kvinge <RKvinge at novell.com> 
-
-	* DataGridViewColumn.cs: Throw if the SortMode conflicts with DataGridView's
-	  SelectionMode.
-
-2007-08-08  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* ListView.cs: In ListViewItemsCollection check that owner is
-	not null before trying to access it (this happens quite often
-	using Groups). Also don't duplicate calls by calling CollectionChanged
-	method.
-
-2007-08-08  Jonathan Pobst  <monkey at jpobst.com>
-
-	* ToolStrip.cs: Record if we were activated by mouse or keyboard.  Redraw
-	when we are dismissed to clear keyboard mnemonics.
-	* MenuStrip.cs, ToolStripDropDown.cs, ToolStripItem.cs, 
-	ToolStripMenuItem.cs: Record if we were activated by mouse or keyboard.
-	* ToolStripItemTextRenderEventArgs.cs: Draw mnemonic underlines if menu
-	was activated by keyboard or the OS tells us to always draw them.
-	* ToolStripManager.cs: Setup storage for activated by mouse or keyboard.
-	[Fixes bugs #82376, #82377]
-
-2007-08-08  Jonathan Pobst  <monkey at jpobst.com>
-
-	* Control.cs: If no one accepts a mnemonic, let the MenuStrip have a 
-	shot at having it because Alt was pressed.
-	* MenuStrip.cs: When handling Alt, don't select a SystemMenuItem, select
-	the first real menu item.
-	* ToolStrip.cs: Don't crash when looking for a ToolStripItem to handle
-	a mnemonic if Text is null.
-	[Fixes bug #82374]
-
-2007-08-08  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* ListView.cs: In ListViewItemCollection.AddItem, don't do a linear
-	search do check whether the item is already contained in the
-	collection or not; instead check if the owner of the item is the same
-	as ours. Also, remove a redundant check in the same method. 
-
-2007-08-08  Jonathan Pobst  <monkey at jpobst.com>
-
-	* Control.cs: Allow the clip region to be set back to null.
-	* XplatUIWin32.cs: If we are sent a null clip region, use IntPtr.Zero.
-	[Fixes button still showing up in bug #82370 when Show Through is turned off]
-
-2007-08-08  Rolf Bjarne Kvinge <RKvinge at novell.com> 
-
-	* GridEntry.cs: Add a null check.
-	* PropertyGrid.cs: When checking for existing grid entries, ignore category
-	  entries. Fixes #82297.
-
-2007-08-07  Jonathan Pobst  <monkey at jpobst.com>
-
-	* OwnerDrawPropertyBag.cs: Make the serialization constructor protected
-	for 2.0.
-
-2007-08-07  Jonathan Pobst  <monkey at jpobst.com>
-
-	* ListBox.cs: Implement ScaleControl.
-
-2007-08-07  Rolf Bjarne Kvinge <RKvinge at novell.com> 
-
-	* Form.cs: Add a few ActiveMenu null checks. ActiveMenu might be null if we
-	  have a menu strip.
-	* MdiWindowManager.cs: Don't create a maximized menu if the child or it's
-	  parent has a menu strip. Fixes #81689.
-
-2007-08-07  Rolf Bjarne Kvinge <RKvinge at novell.com> 
-
-	* ToolTip.cs: We don't get mouse events on all platforms in the exact same
-	  moments, so apply some fuzzy logic to determine if the mouse is still
-	  inside a control or not. Fixes #82288 (for the third time).
-
-2007-08-07  Rolf Bjarne Kvinge <RKvinge at novell.com> 
-
-	* Control.cs: CreateControl: create implicit children as well. Fixes #82344.
-	  Don't create the child if it has been disposed already (may happen if
-	  the user closes the form the Load event).
-
-2007-08-07  Rolf Bjarne Kvinge <RKvinge at novell.com> 
-
-	* ToolTip.cs: If ReshowDelay is 0, show the tooltip immediately. Fixes
-	  #82288.
-
-2007-08-07  Rolf Bjarne Kvinge <RKvinge at novell.com> 
-
-	* Control.cs: Add a null check in OnParentBindingContextChanged. The parent
-	  might call us after we've been destroyed, in which case our own private
-	  parent field is null. Fixes #82326.
-
-2007-08-06  Jonathan Pobst  <monkey at jpobst.com>
-
-	* ToolStripDropDown.cs: Fix a failing test on X11 by adding a null
-	check for setting the dropdown's owner.
-
-2007-08-06  Jonathan Pobst  <monkey at jpobst.com>
-
-	* MdiClient.cs: Fix some failing tests on X11 by adding a null check
-	before removing system menu items.
-
-2007-08-02  Jonathan Pobst  <monkey at jpobst.com>
-
-	* MdiClient.cs, MdiWindowManager.cs: Support 2.0 Mdi MenuStrip
-	folding.
-	* MdiControlStrip.cs: Added.  These are the menu items used in mdi
-	folding.
-	* ToolStrip.cs: Add a null check to mnemonics.
-	* ToolStripDropDownMenu.cs: When using a SystemMenuItem, there is
-	no ConnectedArea.
-	[Fixes most of bug #81689]
-
-2007-08-02  Rolf Bjarne Kvinge <RKvinge at novell.com> 
-
-	* PropertyGrid.cs: Add a null-check. Fixes #82289/SVGPad.
-
-2007-08-02  Rolf Bjarne Kvinge <RKvinge at novell.com> 
-
-	Use InitialDelay if ReshowDelay is zero. Fixes #82288.
-
-2007-08-01  Rolf Bjarne Kvinge <RKvinge at novell.com> 
-
-	* DataGridViewCell.cs: EditType: returns
-	  DataGridViewTextBoxEditingControl always.
-
-2007-08-01  Jonathan Pobst  <monkey at jpobst.com>
-
-	* TextRenderer.cs: Remove the LineLimit string format flag from the
-	DrawString fallback method so that things like buttons that aren't
-	tall enough to draw a full line will still draw part of the text.
-	[Fixes part of bug #82272]
-
-2007-08-01  Rolf Bjarne Kvinge <RKvinge at novell.com> 
-
-	* DataGridView.cs: Implemented AutoResizeColumn(s).
-	* DataGridViewCellStyle.cs: Added SetAlignment, fills in a StringFormat
-	  according to the Alignment.
-	* DataGridViewColumnHeaderCell.cs, DataGridViewTextBoxCell.cs:
-	  Implement alignment and padding when painting.
-	* DataGridViewRow.cs: SetValues: Don't create a cell if it already
-	  exists.
-	* DataGridViewCell.cs: Implement BorderWidths in the most primitive
-	  way.
-	* DataGridViewColumnCollection.cs: Raise OnColumnAdded on the DGV when
-	  a column is added.
-
-2007-07-31  Jonathan Pobst  <monkey at jpobst.com>
-
-	* TextBoxBase.cs: Use Control.ExplicitBounds instead of explicit_bounds,
-	which is internal.
-
-2007-07-31  Jonathan Pobst  <monkey at jpobst.com>
-
-	* ToolStrip.cs: Stub out drag and drop methods, fix some corcompare stuff,
-	hide GetPreferredSize from public API.
-	* ToolStripDropDown.cs: Override AllowItemReorder, fix AccessibleObject.
-	* ToolStripItem.cs: Stub out drag and drop methods and events.
-	* ToolStripManager.cs: Stub out Save/LoadSettings.
-	* ToolStripOverflow.cs: Use renamed ToolStrip.GetPreferredSize.
-	* ToolStripPanel.cs: Fix corcompare error.
-	* ToolStripPanelRow.cs: Use renamed ToolStrip.GetPreferredSize.
-	* ToolStripSplitButton.cs: Fix AccessibleObject stuff.
-	* ToolStripSplitStackLayout.cs: Use renamed ToolStrip.GetPreferredSize.
-
-2007-07-31  Jonathan Pobst  <monkey at jpobst.com>
-
-	* TextBoxBase.cs: In our new GetPreferredSizeCore, return the explicit
-	bounds height instead of PreferredHeight.  Puts things back the way 
-	they were for height while still fixing the width.  Fixes broken unit
-	tests.
-
-2007-07-31  Rolf Bjarne Kvinge <RKvinge at novell.com> 
-
-	* Binding.cs: Implement 2.0 constructors and add a null check.
-
-2007-07-31  Rolf Bjarne Kvinge <RKvinge at novell.com> 
-
-	* DataGridViewRowCollection.cs: Allow a null DGV in the constructor,
-	  and fix row index (off by one).
-
-2007-07-31  Rolf Bjarne Kvinge <RKvinge at novell.com> 
-
-	* PropertyGridView.cs: Remove debug output.
-
-2007-07-31  Rolf Bjarne Kvinge <RKvinge at novell.com> 
-
-	* Control.cs: We need to reset the is_created flags when the handle is
-	  destroyed. Fixes #82187.
-	* XplatUIWin32.cs: In GetWindowRect don't offset screen coordinates to
-	  client coordinates if the window doesn't have a parent.
-	  Win32GetParent returns the parent or the owner, and for top-level
-	  windows with no parent (but with an owner) we were calculating the
-	  location from the location of the owner.
-	* Form.cs: Remove incorrect fix for #82187. Don't raise OnLoad if the
-	  form has been disposed.
-	* MdiClient.cs: Add a null-check.
-
-2007-07-30  Jonathan Pobst  <monkey at jpobst.com>
-
-	* TextBoxBase.cs: TextBoxBase reports itself at AutoSize, but doesn't
-	actually do auto-sizing.  Override the internal GetPreferredSizeCore 
-	so we can provide an implementation that returns the current width
-	and preferred height.  Allows anchor = right to work with TextBox 2.0.
-	[Fixes bug #82233]
-
-2007-07-30  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* ListView.cs: Add support for navigating items in Groups mode, by
-	creating a big matrix containing all rows and cols of all groups. When
-	are in other mode than Details, pressing Up should have a similar
-	behaviour as that one of Down (moving to the next available column if
-	current one doesn't have an item in the requested row). Also, don't
-	proceed to use groups if ShowGroups is false.
-	* ListViewGroup.cs: Add an internal int field to store the starting
-	row of the group (used by the big matrix used for navigating the
-	ListView).
-	* ThemeWin32Classic.cs: Don't draw headers if ListView.ShowGroups is
-	false.
-
-2007-07-30  Jonathan Pobst  <monkey at jpobst.com>
-
-	* ToolStripDropDown.cs: When we do Show, start with the 
-	DefaultDropDownDirection, but if our popup menu is going to off-screen,
-	modify the direction to keep it on screen.  [Fixes bug #82210]
-
-2007-07-29  Gert Driesen  <drieseng at users.sourceforge.net>
-
-	* FileDialog.cs: Accept any FilterIndex value, and store it
-	unmodified. When FilterIndex is less than 1, or greater than number
-	of filters, then default to first filter. Only add filter extension to
-	file if user did not specifiy an extension. When type of dialog is
-	OpenFileDialog and DefaultExt is set, then only use filter extension
-	if: CheckFileExists is true and no file wih the default extension
-	exists, or CheckFileExists is false, and user specified file does not
-	exist. When CheckFileExists is true, then add first extension of 
-	selected filter that matches existing file. Perform checks for
-	existing file, overwrite and create after extension has been added to
-	file name. When CheckFileExists is true and type is SaveFileDialog,
-	then only consider first filter extension if DefaultExt is set.
-	When CheckFileExists is true, then ignore DefaultExt if file with that
-	extension does not exist. Also perform check for existing file when
-	type is SaveFileDialog. Changed some field to constants.
-
-2007-07-27  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* ListView.cs: Take into account the region used by header
-	control when doing the vertical scroll (this way we invalidate
-	the precise area, and don't get any dirty one).
-
-2007-07-27  Everaldo Canuto  <ecanuto at novell.com>
-
-	* FileDialog.cs: Check for valid filterIndex on button open/save. 
-	Fixes #82184.
-
-2007-07-27  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* ListView.cs: Update some layout calculations in details view
-	and clean the code in a pair of assignations.
-
-2007-07-26  Jonathan Pobst  <monkey at jpobst.com>
-
-	* ComboBox.cs, ContainerControl.cs, DataGrid.cs, FontDialog.cs, Label.cs,
-	LinkLabel.cs, ListBox.cs, ListView.cs, ListViewItem.cs, MessageBox.cs,
-	MonthCalender.cs, StatusBar.cs, ThemeClearlooks.cs, ThemeWin32Class.cs,
-	ToolBar.cs, TreeView.cs: First pass at using thread-safe string measuring.
-
-2007-07-26  Jonathan Pobst  <monkey at jpobst.com>
-
-	* TextRenderer.cs: Use [ThreadStatic] instead of locks to improve
-	performance of thread-safe Graphic methods.  (Thanks rolf!)
-
-2007-07-26  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* ListView.cs: When doing the layout calculations, don't calculate
-	scroll bars before handle is created. This is unnecessary and also
-	calculating them before handle creation item causes a number of random
-	bugs (which begin to appear after Chris' big patch for handle creation
-	fixes). 
-
-2007-07-26  Jonathan Pobst  <monkey at jpobst.com>
-
-	* TextRenderer.cs: Create thread-safe versions of Graphics.MeasureString
-	for things that don't have a Graphics object.  Currently, things just use
-	the static Hwnd.bmp_g which is not thread safe.
-
-2007-07-26  Rolf Bjarne Kvinge <RKvinge at novell.com> 
-
-	* Form.cs: ShowDialog: don't destroy handles if the dialog is a common
-	  dialog. Fixes #82187.
-
-2007-07-26  Rolf Bjarne Kvinge <RKvinge at novell.com> 
-
-	* DataGridViewElement.cs: Initialize state.
-	* DataGridView.cs: Forward a few Mouse events to cells. Add
-	  GetRowInternal and GetCellInternal that doesn't unshare rows.
-	  Implement GetCellDisplayRectangle. HitTest: if the row is shared,
-	  don't use the index, but look it up. Add
-	  DataGridViewControlCollection.RemoveInternal to remove controls
-	  that Remove won't remove (scrollbars, edit control).
-	* DataGridViewColumn.cs: Initialize State correctly.
-	* DataGridViewColumnHeaderCell.cs, DataGridViewComboBoxCell.cs,
-	  DataGridViewHeaderCell.cs, DataGridViewRowHeaderCell.cs: Started
-	  implementing this.
-	* DataGridViewRowCollection.cs: Implemented shared rows.
-	* DataGridViewRow.cs: Throw exceptions as MS do.
-	* DataGridViewCell.cs: A few properties are implemented by a
-	  Get<Property> method, so move implementation there and remove the
-	  NIEX in the method. Add a bunch of OnXInternal that DataGridView
-	  calls when necessary.
-	* DataGridViewComboBoxEditingControl.cs: Remove a few NIEX'es that just
-	  complicates matters.
-	* DataGridViewCellCollection.cs: Add a GetCellInternal that doesn't
-	  unshare any rows.
-
-2007-07-25  Jonathan Pobst  <monkey at jpobst.com>
-
-	* UpDownBase.cs: We cannot override SetBoundsCore for 2.0, which was relayout-ing
-	the children controls.  Instead, we will just set up the proper docking for the
-	children controls so we don't have to worry about it.  [Fixes bug #82188]
-
-2007-07-25  Jonathan Pobst  <monkey at jpobst.com>
-
-	* TreeView.cs, NodeLabelEditEventArgs.cs, LabelEditTextBox.cs: Support edit
-	canceling and correct Before/AfterLabelEdit properties as layed out in bug
-	81847.  [Fixes bug #81847]
-
-2007-07-25  Jonathan Pobst  <monkey at jpobst.com>
-
-	* Label.cs: If AutoSize = true and a width or height is set, ignore it and
-	redo the autosize.  VS2005 defaults to setting the AutoSize, and then setting
-	an explicit size based on the design-time size of the text.  Since our fonts
-	may not match this explicit size, we tend to cut off the ends of people's labels.
-
-2007-07-24  Jonathan Pobst  <monkey at jpobst.com>
-
-	* Menu.cs: Add some missing methods to MenuItemCollection.
-
-2007-07-24  Rolf Bjarne Kvinge <RKvinge at novell.com> 
-
-	* DataGridView.cs: Added RowTemplateFull, creates a row from the templates in the columns.
-	* DataGridViewBand.cs: DefaultHeaderCellType: initialize correctly. Resizable: if not set, check DGV.
-	* DataGridViewColumn.cs: InheritedAutoSizeMode: if not set, check DGV. Resizable: delegate to base class. ToolTipText: Never return null. Initialize a few other properties correctly.
-	* DataGridViewColumnCollection.cs: Add: Default column is a TextBoxColumn.
-	* DataGridViewComboBoxCell.cs: Started implementing this, lots left still.
-	* DataGridViewElement.cs: State defaults to Visible.
-	* DataGridViewRowCollection.cs: Add: creates the new row based on a template.
-	* DataGridViewTextBoxColumn.cs: SortMode: delegate to base class, but initialize to Automatic. ToString: implement correctly.
-
-2007-07-24  Rolf Bjarne Kvinge <RKvinge at novell.com> 
-
-	* Control.cs: Minor 1.1 corcompare fix.
-
-2007-07-23  Jonathan Pobst  <monkey at jpobst.com>
-
-	* LinkLabel.cs, PrintPreviewDialog.cs, TabPage.cs, TextBox.cs,
-	TextBoxBase.cs, ToolBar.cs: 2.0 corcompare work.
-
-2007-07-23  Rolf Bjarne Kvinge <RKvinge at novell.com> 
-
-	* DataGridViewLinkColumn.cs, DataGridViewRowCollection.cs,
-	  DataGridViewImageColumn.cs, DataGridViewSelectedCellCollection.cs,
-	  DataGridViewComboBoxCell.cs, DataGridViewLinkCell.cs,
-	  DataGridViewSelectedColumnCollection.cs,
-	  DataGridViewSelectedRowCollection.cs: Corcompare work.
-
-2007-07-23  Jonathan Pobst  <monkey at jpobst.com>
-
-	* PrintDialog.cs: Stub UseEXDialog.  I chose to stub this because
-	it is autoset by VS2005 designer and the effect is barely noticeable.
-
-2007-07-23  Jonathan Pobst  <monkey at jpobst.com>
-
-	* TreeView.cs: Implement HitTest.
-
-2007-07-23  Rolf Bjarne Kvinge <RKvinge at novell.com> 
-
-	* DataGridViewTextBoxCell.cs: Use DGV.EditControlInternal instead of
-	  manually adding and removing the control from the Controls
-	  collecftion.
-	* DataGridView.cs: Implement DataGridViewControlCollection. Add an
-	  EditingControlInternal property that tracks the editing control.
-	  Always keeping the scrollbars in the Controls collection, as MS
-	  testing confirms is the right behaviour.
-
-2007-07-23  Rolf Bjarne Kvinge <RKvinge at novell.com> 
-
-	* ScrollableControl.cs: Fix implementation of AutoScrollPosition
-	  according to MSDN and new test.
-
-2007-07-20  Jonathan Pobst  <monkey at jpobst.com>
-
-	* TreeNode.cs: Implement ToolTipText.
-	* TreeView.cs: Implement tooltips, NodeMouse* events.
-
-2007-07-20  Jonathan Pobst  <monkey at jpobst.com>
-
-	* TreeView.cs: Implement OnNodeMouseClick and OnNodeMouseDoubleClick.
-
-2007-07-20  Jonathan Pobst  <monkey at jpobst.com>
-
-	* TreeNode.cs: Implement ContextMenu, ContextMenuStrip, and Level.
-	* TreeView.cs: Use the node's contextmenu[strip] if applicable.
-
-2007-07-20  Ivan N. Zlatev  <contact at i-nz.net>
-
-	* Control.cs, Form.cs, ContainerControl.cs,
-	ScrollableControl.cs, ButtonBase.cs:  Added ShouldSerialize
-	for misc properties.
-
-2007-07-20  Jonathan Pobst  <monkey at jpobst.com>
-
-	* TreeNode.cs: Implement StateImageIndex and StateImageKey.
-	* TreeView.cs: Implement StateImageList.
-
-2007-07-20  Rolf Bjarne Kvinge <RKvinge at novell.com> 
-
-	* Form.cs: Don't check if the current form is the active form before
-	  activating it. Fixes #81904.
-
-2007-07-20  Rolf Bjarne Kvinge <RKvinge at novell.com> 
-
-	* Form.cs: Don't check if the current form is the active form before
-	  activating it. Fixes #81904.
-
-2007-07-20  Rolf Bjarne Kvinge <RKvinge at novell.com> 
-
-	* TreeView.cs: Apply patch from Tyron (tmm at aon.at). Fixes #81847.
-
-2007-07-20  Rolf Bjarne Kvinge <RKvinge at novell.com> 
-
-	* Form.cs: Don't try to position the form after loading if the form was
-	  disposed. Fixes #81969.
-
-2007-07-20  Rolf Bjarne Kvinge <RKvinge at novell.com> 
-
-	* PropertyGrid.cs, PropertyGridView.cs: Implemented 2.0 methods and
-	  properties. Had to change ToolBar into ToolStrip, which required a
-	  few #ifs.
-
-2007-07-20  Rolf Bjarne Kvinge <RKvinge at novell.com> 
-
-	* PropertyGrid.cs: PropertyToolBar: Redraw the entire toolbar when it's
-	  resized, fixes part of #79829 (vertical lines in toolbar).
-	  PropertyGrid: Refactored Populate* to something that's easier to
-	  follow at least for me, as well as splitting it up into several new
-	  methods, required to update only subitems when something has
-	  changed by a popup editor or listbox. Don't use events to check
-	  when any values are changed, since the events are unreliable (we're
-	  changing the objects the events are registered with, and if the
-	  event handling requires the objects to be immutable (objects stored
-	  in hashtables for instance), the events will never be raised).
-	* PropertyGridView.cs: Call PropertyGrid.PropertyValueChangedInternal
-	  everytime we change a value, since events are unreliable.
-	  DropDownButtonClicked: For the same reason don't compare objects to
-	  check if it has changed or not, it would require all objects to
-	  derive Equals. Fix dialog location on windows, MS is doing weird
-	  things when creating parented forms.
-	* GridEntry.cs: Add a SelectedObject setter.
-
-2007-07-19  Jonathan Pobst  <monkey at jpobst.com>
-
-	* TreeNode.cs: Add some corcompare attributes.
-	* TreeNodeCollection.cs: Implement 2.0 stuffs.
-	* TreeView.cs: Implement some 2.0 stuffs.
-
-2007-07-18  Andreia Gaita  <avidigal at novell.com>
-
-	* WebBrowser.cs, WebBrowserBase.cs: add some more MonoTODOs now
-	for moma.
-
-2007-07-19  Jonathan Pobst  <monkey at jpobst.com>
-
-	* ListBox.cs: Implement custom tab offsets.
-
-2007-07-18  Jonathan Pobst  <monkey at jpobst.com>
-
-	* ToolStripContentPanel.cs: Support System renderer.
-	* ToolStripControlHost.cs: Set RightToLeft to default to No.
-
-2007-07-18  Jonathan Pobst  <monkey at jpobst.com>
-
-	* ScrollableControl.cs: Don't mess up the user's explicit bounds.
-
-2007-07-18  Jonathan Pobst  <monkey at jpobst.com>
-
-	* CheckBox.cs: Chain TextAlign to base implementation instead of
-	maintaining another one.
-
-2007-07-18  Jonathan Pobst  <monkey at jpobst.com>
-
-	* ButtonBase.cs: Fix an incorrect string constant.
-
-2007-07-18  Jonathan Pobst  <monkey at jpobst.com>
-
-	* TextRenderer.cs: Use the static Graphics context in Hwnd instead
-	of creating one for measuring strings.
-
-2007-07-18  Jonathan Pobst  <monkey at jpobst.com>
-
-	* ToolStrip.cs, ToolStripDropDown.cs, ToolStripDropDownMenu.cs: 
-	Implement MaxItemSize.
-
-2007-07-17  Jonathan Pobst  <monkey at jpobst.com>
-
-	* Control.cs: Remove per-control 1x1 Bitmap and Graphics context used
-	for DeviceContext.  Instead, use the static one available in Hwnd.
-	Informal tests show this saves about 500k on formtest.exe.
-
-2007-07-17  Jonathan Pobst  <monkey at jpobst.com>
-
-	* ContainerControl.cs: Implement 2.0 AutoScaling.
-
-2007-07-17  Rolf Bjarne Kvinge <RKvinge at novell.com> 
-
-	* ComboBox.cs: Work around bug #82120 (bug in mcs).
-
-2007-07-16  Jonathan Pobst  <monkey at jpobst.com>
-
-	* ThemeWin32Classic.cs: Allow a Flat button to be Focused and Entered.
-	Darken the focus color.
-
-2007-07-16  Jonathan Pobst  <monkey at jpobst.com>
-
-	* ListBox.cs: When measuring items, if it's a CheckedListBox, add room
-	for the checkbox.
-	* ThemeWin32Classic.cs: Make the checkbox bigger in a CheckedListBox and use
-	X, Y instead of a rect for drawing text.
-	- For ControlPaint.DrawCheckBox, center the check a little better when the
-	checkbox is odd width.  When drawing a flat checkbox, use a white background
-	when state != inactive.
-	[Fixes bugs #82097, 82100]
-
-2007-07-16  Gert Driesen  <drieseng at users.sourceforge.net>
-
-	* ListControl.cs: When changing CurrencyManager, disconnect event
-	handlers from previous one. Fixes bug #81771. Code formatting.
-
-2007-07-15  Andreia Gaita <avidigal at novell.com>
-
-	* PrintPreviewControl.cs: Remove extraneous Invalidate calls. Separate
-	full preview invalidation from layout invalidation, and only invalidate
-	the layout when setting zoom or other properties. Invalidation should
-	always be done even when resetting properties with the same values as
-	what is there. Fixes #81744 and #79830.
-
-2007-07-15  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* ListView.cs: Implement initial support for Groups. Split some of the
-	LayoutIcons code to render a partial list of the items (needed by
-	items contained in ListViewGroup instances). Let the
-	ListViewItemsCollection.ListView property be modifiable (needed when
-	using Groups, too).
-	* ListViewGroup.cs: Use a Bounds property rather than a Location
-	one. Also invalidate the bounds when they get changed.
-	* ThemeWin32Classic.cs: When drawing items, also draw the group header
-	if ListView.Groups.Count is bigger than 0. Add a DrawListViewGroupHeader
-	method as well.
-
-2007-07-15  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* ListView.cs: When space gets pressed and CheckBoxes is true, 
-	don't invoke the Begin and EndUpdate methods. We are generating 
-	a redraw of the entire control without need to do so.
-
-2007-07-13  William Holmes <billholmes54 at gmail.com> 
-
-	* Control.cs: Changing logic in FindFlatForward and 
-	  FindFlatBackward to handle multiple Controls with 
-	  the same TabIndex.  
-	  This fixes bug 81687.
-
-2007-07-13  Jonathan Pobst  <monkey at jpobst.com>
-
-	* OSFeature.cs: Enable IsPresent.
-
-2007-07-13  Rolf Bjarne Kvinge <RKvinge at novell.com> 
-
-	* Control.cs: Don't do anything in WmShowWindow if the control has been
-	  disposed. We can get WM_SHOWWINDOW after a control is disposed: a
-	  control is created, put on a form, the control is disposed (the
-	  form is never shown), and then we get a MapNotify, triggering a
-	  WM_SHOWWINDOW.
-	* Form.cs: Exclude the current form when sending Deactivate to all
-	  MdiChildren.
-	* NativeWindow.cs: Set WindowCreating to null as soon as possible,
-	  there was a race condition because assigning the handle raises
-	  events, we can get more messages, therefore trying to assign the
-	  handle again, which would fail if any of those event handlers
-	  closed/disposed the control.
-
-2007-07-13  Rolf Bjarne Kvinge <RKvinge at novell.com> 
-
-	* Form.cs: Make the fix for #80775 windows-only (fixes #81957).
-
-2007-07-12  Jonathan Pobst  <monkey at jpobst.com>
-
-	* SystemInformation.cs, Theme.cs, XplatUI.cs, XplatUIDriver.cs,
-	XplatUIWin32.cs: Implement SystemInformation 2.0 properties.
-
-2007-07-12  Rolf Bjarne Kvinge <RKvinge at novell.com> 
-
-	* DateTimePicker.cs: If there's no part format specifier, return an
-	  empty string.
-
-2007-07-12  Jonathan Pobst  <monkey at jpobst.com>
-
-	* FlatButtonAppearance.cs: Throw NotSupportedException for a
-	Transparent BorderColor.
-
-2007-07-12  Rolf Bjarne Kvinge <RKvinge at novell.com> 
-
-	* DataGridView.cs, TextControl.cs, ProgressBar.cs, PrintDialog.cs,
-	  MessageBox.cs, ButtonBase.cs, PageSetupDialog.cs, NumericUpDown.cs,
-	  X11Dnd.cs, Binding.cs, DataGrid.cs, AxHost.cs,
-	  LinkLabelLinkClickedEventArgs.cs, TextRenderer.cs, Label.cs,
-	  LinkLabel.cs, TreeNode.cs, BindingSource.cs, TabPage.cs,
-	  TextBoxBase.cs, BindingNavigator.cs, Application.cs,
-	  ToolStripPanel.cs, TabControl.cs, ThemeClearlooks.cs, TreeView.cs:
-	  Remove warnings.
-	* X11Structs.cs: Remove warnings, add ToString implementations.
-
-2007-07-11  Rolf Bjarne Kvinge <RKvinge at novell.com> 
-
-	* XplatUIX11.cs: Translate min/max size according to the actual min/max
-	  size, and not the current size. Fixes #81798.
-
-2007-07-11  Rolf Bjarne Kvinge <RKvinge at novell.com> 
-
-	* XplatUIX11.cs: Fix #80822 again (DefWndProc can be reached before
-	  XplatUI.CreateWindow returns, in which case the hwnd isn't assigned
-	  to the control yet).
-
-2007-07-11  Rolf Bjarne Kvinge <RKvinge at novell.com> 
-
-	* PropertyGridTextBox.cs: Add a method that sends any forwarded
-	  mousedowns to the contained textbox.
-	* X11Structs.cs: More ToString implementation.
-	* PropertyGridView.cs: Forward any mousedowns to the textbox, fixes
-	  #81791.
-
-2007-07-11  Rolf Bjarne Kvinge <RKvinge at novell.com> 
-
-	* PropertyGridView.cs: Add a null-check, fixes a few tests.
-
-2007-07-10  Jonathan Pobst  <monkey at jpobst.com>
-
-	* TableLayoutPanelCellPosition.cs: TypeConverter.
-
-2007-07-10  Rolf Bjarne Kvinge <RKvinge at novell.com> 
-
-	[ Fixes #79761]
-	
-	* PropertyGridTextBox.cs: Propagate any color changes to all contained
-	  controls.
-	* PropertyGridView.cs: A few color fixes.
-
-2007-07-10  Jackson Harper  <jackson at ximian.com>
-
-	* TextControl.cs: Remove some old unused text formatting stuff.
-
-2007-07-10  Jackson Harper  <jackson at ximian.com>
-
-	* TreeView.cs: Update full row select invalidation to match the
-	newer DrawSelection... method.
-	- Make sure to invalidate the entire width when selecting a new
-	node, if we have full row selection enabled.
-
-2007-07-10  Rolf Bjarne Kvinge <RKvinge at novell.com> 
-
-	* PropertyGridView.cs: Fix for #81800, makes text show up on initial
-	  display of properties again.
-
-2007-07-10  Jonathan Pobst  <monkey at jpobst.com>
-
-	* ListBox.cs: Add IntegerCollection and Add, Clear, Remove
-	to existing collections.
-
-2007-07-09  Jonathan Pobst  <monkey at jpobst.com>
-
-	* AccessibleObject.cs, RadioButton.cs: Fix some base classes
-	that changed between 1.1 and 2.0.
-
-2007-07-09  Jonathan Pobst  <monkey at jpobst.com>
-
-	* PowerStatus.cs: Added.  This is just a data class, it is filled
-	in by SystemInformation.
-
-2007-07-09  Jonathan Pobst  <monkey at jpobst.com>
-
-	* Message.cs: Add op_Equality and op_Inequality.
-
-2007-07-09  Jonathan Pobst  <monkey at jpobst.com>
-
-	* MenuStrip.cs: Finish corcompare work.
-
-2007-07-09  Jonathan Pobst  <monkey at jpobst.com>
-
-	* LinkArea.cs: Add op_Equality and op_Inequality.
-
-2007-07-09  Jonathan Pobst  <monkey at jpobst.com>
-
-	* Application.cs: Add MessageLoopCallback delegate.
-
-2007-07-09  Jonathan Pobst  <monkey at jpobst.com>
-
-	* ListBox.cs: First set of 2.0 stuffs.
-
-2007-07-09  Jonathan Pobst  <monkey at jpobst.com>
-
-	* Control.cs: Make an internal Height property we can override
-	without messing up the public API.
-	* ListBox.cs: Override HeightInternal to always return the size
-	the user set.  [Fixes bug #80466]
-
-2007-07-08  Jonathan Pobst  <monkey at jpobst.com>
-
-	* TableLayoutPanel.cs: Add a null check so we don't NRE trying to
-	paint cell borders if we haven't calculated where they go yet.
-	[Fixes bugs #82040 and #82041]
-
-2007-07-07  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* ListView.cs: In Details view, set the location of item_control
-	in the (0,0) position (and the header_control is thus on the
-	item_control). This way the Bounds of the Items are relative to the
-	ListView control (before this, they had a Bounds value without the
-	header_control offset, which wasn't matching .Net). Fixes #82004.
-
-2007-07-07  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* ListControl.cs: When DataSource is set to null, pass an empty
-	array of object to SetItemsCore. This is done to clean the items
-	in the ListContol children. Fixes #81788.
-
-2007-07-06  Jonathan Pobst  <monkey at jpobst.com>
-
-	* ListControl.cs: Add 2.0 stuffs.
-
-2007-07-06  Jonathan Pobst  <monkey at jpobst.com>
-
-	* Label.cs: Finish up 2.0 stuffs.  Replace calls to Refresh with Invalidate,
-	Refresh is overkill for just about every repaint request.
-
-2007-07-06  Jonathan Pobst  <monkey at jpobst.com>
-
-	* ToolStripItem.cs: TextDirection getter handles looking up Inherit for us,
-	so remove my custom Get method and fix the property getter.
-
-2007-07-06  Jonathan Pobst  <monkey at jpobst.com>
-
-	* Label.cs: DefaultMargin for 2.0.
-
-2007-07-06  Jonathan Pobst  <monkey at jpobst.com>
-
-	* ComboBox.cs: Override IsInputCharInternal and return true.  Fixes 
-	reported issue where other controls with mnemonics would steal strokes
-	from a selected ComboBox.
-
-2007-07-06  Jonathan Pobst  <monkey at jpobst.com>
-
-	* ScrollOrientation.cs: Make internal for 1.1.
-	* ScrollEventArgs.cs: Add 2.0 stuffs.
-
-2007-07-05  Jonathan Pobst  <monkey at jpobst.com>
-
-	* ToolStrip.cs, ToolStripControlHost.cs, ToolStripDropDown.cs,
-	ToolStripItem.cs, ToolStripItem.cs, ToolStripItemTextRenderEventArgs.cs,
-	ToolStripRenderer.cs, ToolStripSeparator.cs: Implement TextDirection.
-
-2007-07-05  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* ListViewItem.cs: Implement the small 2.0 GetSubItemAt method.
-
-2007-07-05  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* ListView.cs: Implement the so-incredibly broken 2.0 
-	VirtualItemsSelectionRangeChanged event.
-
-2007-07-05  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* ListView.cs: When enter is pressed and selection is non empty,
-	an OnItemActivate event must be fired.
-
-2007-07-05  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* ListView.cs: Store the FocusedItem information as an
-	int instead of a ListViewItem (needed by VirtualMode).
-	Update the calls to SetFocusedItem to pass an index instead of
-	an item.
-	* ListViewItem.cs: Likewise. Also, in VirtualMode retrieve
-	the Focused state from the owner ListView. 
-
-2007-07-04  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* ListView.cs: Set ListView.focused_item from ListViewItem.Focused
-	property. Also, invalidate previous focused item in the mentioned
-	property (match .Net).
-
-2007-07-04  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* ListView.cs: Implement 2.0 FocusedItem property setter.
-
-2007-07-03  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* ListView.cs: Implement 2.0 TopItem property setter.
-
-2007-07-03  Jonathan Pobst  <monkey at jpobst.com>
-
-	* StatusStrip.cs: The default renderer is System.
-	* ToolStrip.cs, ToolStripManager: Now that we have System renderer, use it 
-	if the user specifies it.
-	* ToolStripDropDown.cs: Don't reset our Renderer on changing OwnerItem
-	if we are ManagerRenderMode.
-	* ToolStripMenuItem.cs: Calculate our text color better.
-	* ToolStripRenderer.cs, ToolStripProfessionalRenderer.cs: Move some stuff
-	from Professional to the base class based off working with the System renderer.
-	* ToolStripSystemRenderer.cs: Added.
-
-2007-07-02  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* ListView.cs: I'm so lame - the real name is HitTest, not HitInfo.
-
-2007-07-02  Jonathan Pobst  <monkey at jpobst.com>
-
-	* ToolTip.cs: Implement 2.0 Tag property.
-
-2007-06-25  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* ListView.cs: Implement 2.0 HitTest methods.
-
-2007-06-24  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* ListViewItem.cs: Add a 2.0 bool Hot property, to tell whether the
-	item is under the pointer or not (sugar). Also remove the TODO
-	regarding to the cursor changes in OneClick activation.
-	* ThemeWin32Classic.cs: When HotTracking is true and we are drawing
-	the subitems use the parent's HotFont if UseItemStyleForSubItems is
-	true; otherwise don't show the underline style.
-
-2007-06-22  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* ListView.cs: In ItemControl.ItemsMouseMove, refactor
-	the code to retrieve the item at position only one time. Also
-	change cursor when Activation is ItemActivation.OneClick as well
-	as invalidate the item if HotTracking is true (to show/hide the
-	underline style). Add an internal HotItemIndex property to retrieve
-	the current hot item's index.
-	* ListViewItem.cs: Add an internal HotFont property to cache the
-	font used when HotTracking is true and the pointer moves within the
-	item's borders.
-	* ThemeWin32Classic.cs: When drawing the item's text, use Font or
-	HotFont depending on the hot state of the item.
-
-2007-06-22  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* ListView.cs: Implement 2.0 HotTracking property.
-
-2007-06-21  Jonathan Pobst  <monkey at jpobst.com>
-
-	* ToolStripControlHost.cs: If our hosted control never got created,
-	don't try to dispose it.  [Fixes bug #81909]
-
-2007-06-21  Jonathan Pobst  <monkey at jpobst.com>
-
-	* TableLayoutPanel.cs: Implement ScaleCore, ScaleControl.
-
-2007-06-21  Jonathan Pobst  <monkey at jpobst.com>
-
-	* TableLayoutPanel.cs: Implement CellBorderStyle.  [Fixes bug #81884]
-
-2007-06-20  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* ThemeWin32Classic.cs: In OwnerDraw mode draw subitems only for 
-	Details view.
-	* DrawListViewColumnHeaderEventArgs.cs:
-	* DrawListViewSubItemEventArgs.cs: Add padding to the bounds when drawing text
-	using the DrawText () methods.
-
-2007-06-19  Jonathan Pobst  <monkey at jpobst.com>
-
-	* ToolStripProfessionalRenderer.cs: Put back clearing a ToolStripDropDown's
-	background which got erased in my changes yesterday.
-
-2007-06-19  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* ListViewItem.cs: Actually set bounds for subitems in Details view
-	(2.0 feature).
-	* ThemeWin32Classic.cs: Refactor the drawing code for subitems, so we
-	can invoke from the owner draw routines if we need it. Also, add
-	support for Owner draw in Details view.
-
-2007-06-18  Jonathan Pobst  <monkey at jpobst.com>
-
-	* ToolStripDropDownMenu.cs, ToolStripItem.cs, ToolStripLabel.cs,
-	ToolStripMenuItem.cs, ToolStripProfessionalRenderer.cs: Respect the
-	ShowImageMargin setting, properly align text in a ToolStripLabel
-	hosted on a ToolStripDropDown.
-
-2007-06-18  Jonathan Pobst  <monkey at jpobst.com>
-
-	* ToolStrip.cs, ToolStripContentPanel.cs, ToolStripDropDownMenu.cs,
-	ToolStripProfessionalRenderer.cs: Refactor and clean up some rendering code.
-
-2007-06-18  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* DrawListViewSubItemEventArgs.cs: Actually implement its methods.
-
-2007-06-18  Jonathan Pobst  <monkey at jpobst.com>
-
-	* ToolStripLabel.cs: If the label is on a dropdown, adjust the text
-	location to match ToolStripMenuItems.
-
-2007-06-15  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* DrawListViewColumnHeaderEventArgs.cs:
-	* ThemeWin32Classic.cs: Implement 2.0 OwnerDraw support for
-	column headers in ListView. 
-
-2007-06-15  Jonathan Pobst  <monkey at jpobst.com>
-
-	* UserControl.cs: Implement AutoSize.
-
-2007-06-15  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* DrawListViewItemEventArgs.cs:
-	* ListView.cs:
-	* ThemeWin32Classic.cs: Implement basic support for 2.0 OwnerDraw in
-	ListView.
-
-2007-06-15  Jonathan Pobst  <monkey at jpobst.com>
-
-	* ToolStripDropDownItemAccessibleObject.cs: Added.
-	* ToolStripDropDownItem.cs, ToolStripItem.cs, ToolStripMenuItem.cs,
-	ToolStripOverflow.cs, ToolStripOverflowButton.cs, ToolStripPanel.cs,
-	ToolStripProgressBar.cs, ToolStripSeparator.cs, ToolStripSplitButton.cs,
-	ToolStripTextBox.cs: corcompare work.
-
-2007-06-14  Jonathan Pobst  <monkey at jpobst.com>
-
-	* OSFeature.cs, StatusStrip.cs, TabControl.cs, TableLayoutSettings.cs,
-	TableLayoutStyle.cs, TableLayoutCollection.cs, ToolStripContentPanel.cs,
-	ToolStripControlHost.cs, ToolStripDropDown.cs, ToolStripDropDownButton.cs:
-		corcompare.
-
-2007-06-14  Jonathan Pobst  <monkey at jpobst.com>
-
-	* OSFeature.cs: Add IsPresent.
-	* PrintPreviewControl.cs: Add RightToLeft.
-	* SplitContainer.cs: Add AutoScrollOffset, ScaleControl.
-	* SplitterPanel.cs: Add AutoSizeMode.
-
-2007-06-13  Jonathan Pobst  <monkey at jpobst.com>
-
-	* LayoutEventArgs.cs: Add 2.0 AffectedComponent.
-	* MdiClient.cs: Add 2.0 ScaleControl.
-	* NativeWindow.cs: Implement 2.0 interface IWin32Window.
-	* NumericUpDownAccelerationCollection.cs: Add [ListBinding].
-
-2007-06-13  Jonathan Pobst  <monkey at jpobst.com>
-
-	* Form.cs: Implement some scaling methods, stub some RTL methods,
-	corcompare work.
-
-2007-06-13  Jonathan Pobst  <monkey at jpobst.com>
-
-	* Control.cs: corcompare work.
-	* FlatButtonAppearance.cs, FolderBrowserDialog.cs: Add TypeConverters.
-
-2007-06-13  Jonathan Pobst  <monkey at jpobst.com>
-
-	* ControlPaint.cs, Theme.cs, ThemeWin32Classic.cs: Implement
-	ControlPaint 2.0 stuffs.
-
-2007-06-12  Jonathan Pobst  <monkey at jpobst.com>
-
-	* ThreadExceptionDialog.cs: Add 2.0 stuffs.
-
-2007-06-12  Jonathan Pobst  <monkey at jpobst.com>
-
-	* UpDownBase.cs: Add 2.0 stuffs.
-
-2007-06-12  Jonathan Pobst  <monkey at jpobst.com>
-
-	* NumericUpDown.cs: Add 2.0 stuffs.
-
-2007-06-12  Jonathan Pobst  <monkey at jpobst.com>
-
-	* NotfiyIcon.cs: Add MouseDoubleClick event, hook up MouseClick event.
-
-2007-06-12  Jonathan Pobst  <monkey at jpobst.com>
-
-	* ErrorProvider.cs: Implement 2.0 stuffs.
-
-2007-06-12  Jonathan Pobst  <monkey at jpobst.com>
-
-	* DomainUpDown.cs: Implement 2.0 stuffs.
-
-2007-06-12  Jonathan Pobst  <monkey at jpobst.com>
-
-	* CheckedListBox.cs: Fix RefreshItems signature.
-
-2007-06-12  Jonathan Pobst  <monkey at jpobst.com>
-
-	* PictureBox.cs: Implement 2.0 stuffs.
-
-2007-06-12  Andreia Gaita  <avidigal at novell.com>
-	
-	* TabControl.cs: Check if there are tabpages before checking
-	the selected index - fix #81802 (font changes raise a ResizeTabs
-	call on controls.add, which blew up nicely with no tabpages)
-
-2007-06-11  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* ListView.cs:
-	* ListViewItem.cs: Implement 2.0 ItemSelectionChanged event.
-
-2007-06-11  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* ListView.cs:
-	* ListViewItem.cs: In VirtualMode the selection information
-	resides in the ListView, rather than in the Items. Also, throw
-	InvalidOperationExceptions when VirtualMode is being used and
-	CheckedItemCollection is accessed.
-
-2007-06-08  Jonathan Pobst  <monkey at jpobst.com>
-
-	* ComboBox.cs: Add ScaleControl.
-
-2007-06-08  Jonathan Pobst  <monkey at jpobst.com>
-
-	* ButtonBase.cs: ButtonBaseAccessibleObject.State should not be visible to 1.1.
-
-2007-06-08  Jonathan Pobst  <monkey at jpobst.com>
-
-	* GroupBox.cs: Add 2.0 stuffs.
-
-2007-06-08  Jonathan Pobst  <monkey at jpobst.com>
-
-	* Panel.cs: Add autosize properties/event.
-
-2007-06-07  Jonathan Pobst  <monkey at jpobst.com>
-
-	* Control.cs:
-	- When we remove a control, remove it from the collection before performing the layout.
-	- Setup an internal property for explicit_bounds.
-	- Don't let the UpdateBounds in CreateHandle overwrite our explicit bounds.
-	- Perform a layout when we set a new AutoSizeMode.
-
-2007-06-07  Jonathan Pobst  <monkey at jpobst.com>
-
-	* ScrollableControl.cs: Add 2.0 stuffs.
-
-2007-06-06  Jonathan Pobst  <monkey at jpobst.com>
-
-	* ScrollBar.cs: Add 2.0 stuffs.
-
-2007-06-06  Jonathan Pobst  <monkey at jpobst.com>
-
-	* Splitter.cs: Add 2.0 stuffs.
-
-2007-06-06  Jonathan Pobst  <monkey at jpobst.com>
-
-	* SplitContainer.cs: Apply patch from Neil Cawse <neilcawse at geotab.com>
-	to have BindingContext simply use base implementation.
-
-2007-06-06  Jonathan Pobst  <monkey at jpobst.com>
-
-	* ColumnHeader.cs: corcompare fix.
-
-2007-06-06  Jonathan Pobst  <monkey at jpobst.com>
-
-	* Button.cs: corcompare fixes.
-	* ButtonBase.cs: corcompare fixes, add ButtonBaseAccessibleObject.State.
-
-2007-06-06  Jonathan Pobst  <monkey at jpobst.com>
-
-	* Button.cs: Override GetPreferredSizeCore.
-	* ButtonBase.cs: PerformLayout after changing properties that can affect
-	AutoSize.  Simplify some mouse/keyboard code.
-	* Control.cs: PerformLayout after changing Padding if AutoSize = true.
-	* MouseEventArgs.cs: Make Location internal for 1.1.
-	* TextRenderer.cs: Make MeasureTextInternal (string, Font, bool) internal for 1.1.
-	* Theme.cs: Add CalculateButtonAutoSize.
-	* ThemeWin32Classic.cs: Implement CalculateButtonAutoSize.
-
-2007-06-05  Miguel de Icaza  <miguel at novell.com>
-
-	* TreeNodeCollection.cs: Applied patch from Neil Cawse <neilcawse at geotab.com>
-
-2007-06-05  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* ListViewItem.cs: We can't cache Bounds in VirtualMode 
-	since we can get different item instances every time we retrieve it.
-
-2007-06-04  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* ListView.cs: Work around for #81602, since an unkown an pretty
-	infrequent condition appears only in some systems (old linux boxes, it
-	seems).
-
-2007-06-04  Jonathan Pobst  <monkey at jpobst.com>
-
-	* Button.cs: Completely reformat and a little refactor to bring
-	this closer to Mono circa 2007.
-
-2007-06-04  Jonathan Pobst  <monkey at jpobst.com>
-
-	* CheckBox.cs, Form.cs, RadioButton.cs: Change call to ButtonBase.Redraw
-	to be ButtonBase.Invalidate.
-
-2007-06-04  Jonathan Pobst  <monkey at jpobst.com>
-
-	* ButtonBase.cs: GetPreferredSize is 2.0 only.  Fixes build.
-
-2007-06-04  Jonathan Pobst  <monkey at jpobst.com>
-
-	* ButtonBase.cs: Completely reformat and a little refactor to bring
-	this closer to Mono circa 2007.
-
-2007-06-01  Everaldo Canuto  <ecanuto at novell.com>
-
-	* Label.cs: Fixes preferred sizes for 2.0 profile, also adjust some
-	values for autosize. Fixes #80137.
-
-2007-06-01  Jonathan Pobst  <monkey at jpobst.com>
-
-	* Control.cs: Don't perform layout when AutoSize changes.
-	* Form.cs: Perform layout in AutoSize override.  Don't set ClientSize
-	directly when autosizing, use SetBounds with BoundsSpecified.None.
-	Fixes unit tests my last commit broke.
-
-2007-06-01  Jonathan Pobst  <monkey at jpobst.com>
-
-	* Control.cs: Perform layout when AutoSize changes.
-	* Form.cs: Implement AutoSizing.
-
-2007-06-01  Chris Toshok  <toshok at ximian.com>
-
-	* DataGrid.cs: remove the XXX'ed check at the top of
-	ProcessGridKey.  fixes #80464.
-
-2007-06-01  Chris Toshok  <toshok at ximian.com>
-
-	* DataGridTextBoxColumn.cs: TextBox.TextChanged event handler
-	adding idempotent (add/remove in Edit()), and also make sure we
-	don't add it until after we set the text, so it's not tripped in
-	Edit().  Fixes unit test regression.
-
-2007-06-01  Jonathan Pobst  <monkey at jpobst.com>
-
-	* Control.cs: In UpdateBounds, only recalculate anchor distances if the
-	change is user explicit, not when the layout engine moves stuff.  Fixes
-	anchoring to bottom and right.  [Fixes bug #81790]
-
-2007-06-01  Andreia Gaita  <avidigal at novell.com>
-
-	* PrintDialog.cs: Add collation preview thumbnails. Fixes #80726.
-
-2007-06-01  Andreia Gaita  <avidigal at novell.com>
-
-	* ContainerControl.cs: 
-	Fire enter event for common ancestor if it is not a ContainerControl.
-	Send focus to the active_control and not the 'value', the active 
-	control might have been changed in one of the events fired.	
-	Definitely fixes #80159.
-
-2007-06-01  Andreia Gaita  <avidigal at novell.com>
-
-	* DataGrid.cs: Finish editing when focus leave the datagrid. Fixes #80159.
-
-2007-06-01  Rolf Bjarne Kvinge <RKvinge at novell.com> 
-
-	* PropertyGrid.cs: Anchor the help description to the bottom of the
-	  help panel and refactor SelectGridItem into a
-	  SelectGridItemInternal that can be set to null (and update it to
-	  clear the help texts when it is set to null). Set root item to null
-	  when there's no SelectedObject. Fixes #80438.
-	* ScrollableControl.cs: In Recalculate we need to ResumeLayout(true)
-	  when we're recalculating after a resize (only).
-
-2007-05-31  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* ListView.cs: Implement 2.0 RedrawItems method.
-
-2007-05-31  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* ListControl.cs: Disconnect PositionChanged and ItemChanged
-	handlers from previous data manager when DataSource is set to
-	null. Fixes #81771.
-
-2007-05-31  Jackson Harper  <jackson at ximian.com>
-
-	* TextBoxBase.cs: These seem to be the correct values.
-
-2007-05-31  Everaldo Canuto  <ecanuto at novell.com>
-
-	* FileDialog.cs: When close dialog with ok set filterindex using combobox
-	value. Fixes #81784.
-
-2007-05-31  Jonathan Pobst  <monkey at jpobst.com>
-
-	* Control.cs: Implement 2.0 scaling methods.
-
-2007-05-31  Rolf Bjarne Kvinge <RKvinge at novell.com> 
-
-	* ProgressBar.cs, WebBrowserBase.cs, Control.cs, MaskedTextBox.cs,
-	  MessageBox.cs, PropertyGrid.cs, RichTextBox.cs: Fix warnings and
-	  corcompare issues.
-
-2007-05-31  Rolf Bjarne Kvinge <RKvinge at novell.com> 
-
-	* ProgressBar.cs: Implemented missing 2.0 members.
-
-2007-05-31  Rolf Bjarne Kvinge <RKvinge at novell.com> 
-
-	* Control.cs: Corcompare issues.
-	* MessageBox.cs: Implemented missing 2.0 functions.
-
-2007-05-31  Rolf Bjarne Kvinge <RKvinge at novell.com> 
-
-	* CheckedListBox.cs, ListBox.cs, ListControl.cs, ComboBox.cs:
-	  Implemented more 2.0 members.
-
-2007-05-31  Rolf Bjarne Kvinge <RKvinge at novell.com> 
-
-	* Application.cs: Try to avoid NRE when Assembly.GetEntryAssembly is
-	  null (strange, but it seems to happen when running unit tests).
-
-2007-05-30  Andreia Gaita  <avidigal at novell.com>
-
-	* ContainerControl.cs: Set active_control even earlier, before 
-	firing any events, and undo it if validation returns false.
-
-2007-05-30  Andreia Gaita  <avidigal at novell.com>
-
-	* ContainerControl.cs: Raise Validation and Enter/Leave events
-	even if there is no Form and set active_control earlier, just
-	before firing Enter events (toshok's patches). Fixes #80647.
-
-2007-05-30  Jackson Harper  <jackson at ximian.com>
-
-	* TextControl.cs: Redid the pageup/pagedown a little to simplify
-	things and fix bug #81311.
-
-2007-05-30  Jackson Harper  <jackson at ximian.com>
-
-	* X11Dnd.cs: Now that we have our own event loop, we need to
-	cancel when we get a mouseup but it won't be accepted.
-
-2007-05-30  Chris Toshok  <toshok at ximian.com>
-
-	* DataGrid.cs (set_CurrentCell): guard against negative
-	column/row.
-
-	* DataGridColumnStyle.cs (CheckValidDataSource): just use the
-	array index syntax instead of looping over the property names.
-
-	* DataGridTextBoxColumn.cs: add a changed handler on the textbox,
-	and set IsInEditOrNavigateMode to false there.
-
-2007-05-30  Jackson Harper  <jackson at ximian.com>
-
-	* TreeView.cs: Make sure we don't get a bad visible order when
-	setting to the top node.  Fixes some misc crashing in
-	ControlInspector.
-
-2007-05-30  Andreia Gaita  <avidigal at novell.com>
-
-	* UserControl.cs: Add 2.0 AutoSizeMode
-
-2007-05-29  Everaldo Canuto  <ecanuto at novell.com>
-
-	* DataGridTextBoxColumn.cs: Fix textbox horizontal offset.
-
-2007-05-29  Everaldo Canuto  <ecanuto at novell.com>
-
-	* DataGridTextBoxColumn.cs: Fix textbox position to prevent override grid
-	lines. Fixes #80285. 
-
-2007-05-29  Everaldo Canuto  <ecanuto at novell.com>
-
-	* DataGridColumnStyle.cs: Add char trimming column header text format. 
-
-2007-05-29  Everaldo Canuto  <ecanuto at novell.com>
-
-	* DataGridColumnStyle.cs: Fix grid header arrow drawing over column name. 
-	Fixes #80147.
-
-2007-05-29  Jackson Harper  <jackson at ximian.com>
-
-	* TreeNode.cs: Fix off by one on calculating whether or not a node
-	is visible.
-
-2007-05-29  Jonathan Pobst  <monkey at jpobst.com>
-
-	* Control.cs: ResumeLayout(false) should recalculate anchor distances.
-	* ScrollableControl.cs: Force an UpdateDistances when we move the
-	scrollbars.
-	[Fixes bug #80605]
-
-2007-05-29  Andreia Gaita  <avidigal at novell.com>
-
-	* PageSetupDialog.cs: Fix #80728 - Changing the printer doesn't
-	update the page setup screen.
-
-2007-05-29  Andreia Gaita  <avidigal at novell.com>
-
-	* PageSetupDialog.cs: Fix landscape mode.
-
-2007-05-28  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* SystemInformation.cs: Add 2.0 IconSizeVerticalSpacing and
-	IconSizeHorizontalSpacing.
-
-2007-05-28  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* ListView.cs: The declaration of prev_tooltip_item should be inside
-	a NET_2_0 conditional (avoid a warning).
-
-2007-05-28  Andreia Gaita  <avidigal at novell.com>
-
-	* PageSetupDialog.cs: Implement PrintPreview control to display
-	the preview thumbnail. Change unit conversion to use 
-	PrinterUnitConvert methods.
-	
-	Note: there is a huge bug in ms.net where the default margins are 
-	interpreted as centimeters (?), when in fact they are set in inches. When 
-	loading the page setup dialog initially (ms.net), the default margins 
-	are set to 1 inch, and the dialog shows them with value 10, when in fact 
-	it should be 25 (properly converted). Our dialog doesn't have this bug.
-	
-	* Theme.cs, ThemeWin32Classic.cs: Add a CPDrawBorder override for 
-	RectangleF.
-	* ControlPaint.cs: Add a DrawBorder internal method for RectangleF.
-
-2007-05-28  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* ListView.cs:
-	* ListViewItem.cs: Implement 2.0 ToolTipText support for listview
-	items.
-
-2007-05-28  Andreia Gaita  <avidigal at novell.com>
-
-	* X11Dnd.cs: A direct cast to VirtualKeys is not allowed from
-	an IntPtr on csc (it builds fine on mcs, could it be a compiler
-	bug?), convert the ptr to Int32 first.
-
-2007-05-28  Jackson Harper  <jackson at ximian.com>
-
-	* X11Dnd.cs: Add a timer, so after drop, if a finish is not
-	recieved, we will exit the dnd tracking loop.
-
-2007-05-28  Jackson Harper  <jackson at ximian.com>
-
-	* X11Dnd.cs: Keep tracking until the xdnd finished event is
-	recieved. TODO: I should probably stick a timer on the dropped
-	event, and finish the drag if the XDND Finished event never shows
-	(because some apps don't seem to send it).
-
-2007-05-28  Everaldo Canuto  <ecanuto at novell.com>
-
-	* ToolBar.cs: Fix toolbar default width for button with image. Fixes
-	#81733.
-
-2007-05-28  Rolf Bjarne Kvinge <RKvinge at novell.com> 
-
-	* MonthCalendar.cs: Only mark the keypresses we actually handle as
-	  handled.
-
-2007-05-28  Rolf Bjarne Kvinge <RKvinge at novell.com> 
-
-	* MonthCalendar.cs: Set the size after initializing all the relevant
-	  variables. Fixes #81742.
-
-2007-05-28  Rolf Bjarne Kvinge <RKvinge at novell.com> 
-
-	* KeyEventArgs.cs: Fix typo.
-
-2007-05-28  Gert Driesen  <drieseng at users.sourceforge.net>
-
-	* DateTimePicker.cs: Changed exceptions thrown by MinDate and MaxDate
-	to match MS. Fixed MinDate to only accept value less than or equal
-	to MaxDate on 2.0 profile and less than MaxDate on 1.0 profile.
-	Removed TODO's that are now verified by unit tests.
-
-2007-05-27  Gert Driesen  <drieseng at users.sourceforge.net>
-
-	* TreeNodeCollection.cs: Minor corrections to exceptions to match
-	MS.
-
-2007-05-25  Jackson Harper  <jackson at ximian.com>
-
-	* X11Dnd.cs: Rework to make StartDrag a blocking call that runs
-	it's own message loop.
-	* XplatUIX11.cs: Remove some of the dnd hooks
-
-2007-05-25  Gert Driesen  <drieseng at users.sourceforge.net>
-
-	* XplatUIX11.cs: Change MinimumWindowSize to {Width=0,Height=0}
-	instead of MinimizedWindowSize.
-
-2007-05-25  Jackson Harper  <jackson at ximian.com>
-
-	* TextBoxBase.cs: Raise textchanged when cutting and pasting text.
-
-2007-05-25  Rolf Bjarne Kvinge <RKvinge at novell.com> 
-
-	* KeyEventArgs.cs: Added SuppressKeyPress.
-	* Control.cs: Added support for SuppressKeyPress.
-
-2007-05-24  Andreia Gaita  <avidigal at novell.com>
-
-	* NumericUpDown.cs: Refactor code to fix regressions on #79950 and
-	problems with PieChart. suppress_validation should not be a counter,
-	if there are several BeginInit calls, the first EndInit will 
-	activate validation. Fix exceptions thrown by set_Value.
-	* UpDownBase.cs: ValidateText only if it's the user editing it.
-
-2007-05-24  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* ListControl.cs: FilterItemOnProperty should return the filtered
-	item proeprty even if DataSource is null. The same applies for
-	GetItemText. Fixes #80427.
-
-2007-05-24  Jonathan Pobst  <monkey at jpobst.com>
-
-	* Control.cs: If a control doesn't have a parent when it's Dock is
-	set, but it has children, it needs to do a layout.  Fixes some nested
-	controls issues.  [Fixes bug #81199]
-
-2007-05-24  Rolf Bjarne Kvinge <RKvinge at novell.com> 
-
-	* ComboBox.cs: If there are few items in the drop down list, make it
-	  the exact size the items need, no bigger. Fixes #81612.
-
-2007-05-24  Jonathan Pobst  <monkey at jpobst.com>
-
-	* Application.cs: When we have captured the keyboard for a menu,
-	check for mouse down events in case we need to close the menu.
-	* Control.cs, Form.cs: Remove mouse down checks for menus.
-
-2007-05-24  Jackson Harper  <jackson at ximian.com>
-
-	* TextControl.cs: Handle tabs in non multiline mode a little
-	differently.
-
-2007-05-24  Jackson Harper  <jackson at ximian.com>
-
-	* TextControl.cs: We need to manually break apart tabbed text and
-	move the tabs, since the system.drawing tabbing mechanism relies
-	on tab stops.
-	* TextBoxBase.cs: Move the caret properly when the user enters a
-	tab.
-
-2007-05-24  Jonathan Pobst  <monkey at jpobst.com>
-
-	* ContainerControl.cs: Don't check CanSelect before calling
-	ProcessMnemonic.
-	* ToolStrip.cs: Only do implicit mnemonics on MenuStrips.  Don't
-	release a KeyboardActive on click if it's not ours.
-
-2007-05-23  Andreia Gaita  <avidigal at novell.com>
-
-	* ColumnHeader.cs: Add TypeConverter
-
-2007-05-23  Everaldo Canuto  <ecanuto at novell.com>
-
-	* LinkLabel.cs: Implement LinkCollection.Add with Link parameter (2.0).
-
-2007-05-23  Everaldo Canuto  <ecanuto at novell.com>
-
-	* LinkLabelLinkClickedEventArgs.cs, LinkLabel.cs: Implement Button property.
-
-2007-05-23  Everaldo Canuto  <ecanuto at novell.com>
-
-	* LinkLabel.cs: Implement public Padding property.
-
-2007-05-23  Everaldo Canuto  <ecanuto at novell.com>
-
-	* LinkLabel.cs: Implement public FlatStyle.
-
-2007-05-23  Jonathan Pobst  <monkey at jpobst.com>
-
-	* Control.cs: Apply patch from George to call parent.PerformLayout
-	when Visible is changed.  [Fixes bugs #81118, 81718]
-
-2007-05-23  Everaldo Canuto  <ecanuto at novell.com>
-
-	* MainMenu.cs, MenuAPI.cs: Implement Collapse event for MainMenu (2.0).
-
-2007-05-23  Everaldo Canuto  <ecanuto at novell.com>
-
-	* ContextMenu.cs: Implement ProcessCmdKey with control parameter.
-
-2007-05-23  Everaldo Canuto  <ecanuto at novell.com>
-
-	* ContextMenu.cs: Implement Collapse.
-
-2007-05-23  Rolf Bjarne Kvinge <RKvinge at novell.com>
-
-	* ToolBarButton.cs: Implement Name.
-
-2007-05-22  Everaldo Canuto  <ecanuto at novell.com>
-
-	* ToolBar.cs: Fix OnButtonDropDown to save item used in dropdown instead of
-	use current_item, it prevents some NRE. Fixes #81675.  
-
-2007-05-22  Andreia Gaita  <avidigal at novell.com>
-
-	* NumericUpDown.cs: Fix PieChart by not returning from UpdateEditText
-	without updating the text.
-
-2007-05-22  Jonathan Pobst  <monkey at jpobst.com>
-
-	* XplatUIWin32.cs: Plug a GDI leak caused by calling Font.ToHfont ()
-	without calling DeleteObject.  [Should fix bug #81709]
-
-2007-05-22  Jackson Harper  <jackson at ximian.com>
-
-	* RichTextBox.cs: Set the line endings correctly, when flushing
-	RTF text.
-
-2007-05-22  Gert Driesen  <drieseng at users.sourceforge.net>
-
-	* XplatUIX11.cs: MinimumWindowSize on X11 is actually
-	 {Width=0,Height=0}.
-
-2007-05-22  Jackson Harper  <jackson at ximian.com>
-
-	* TreeView.cs: Setting top with a null node should set to the very
-	top.
-
-2007-05-22  Rolf Bjarne Kvinge <RKvinge at novell.com> 
-
-	* Form.cs: ShowDialog: destroy the handle when message loop is
-	  finished, matches MS behaviour. Refactor parts of WmClose into
-	  RaiseCloseEvents, that only raises events if they haven't already
-	  been raised. Fixes #81688 and #81521.
-	* Application.cs: Don't call close on the form when exiting a modal
-	  loop, it will raise all the (Form)Closed/Closing events again if
-	  WM_CLOSE has been sent earlier on, instead call RaiseCloseEvent,
-	  which doesn'r raise any events it they have been raised before.
-
-2007-05-22  Jonathan Pobst  <monkey at jpobst.com>
-
-	* Control.cs: Add OnPrint.
-	* ToolStrip.cs: Add GetChildAtPoint.
-	* ToolStripContainer.cs: Add OnRightToLeftChanged.
-	* ToolStripRenderer.cs: Make CreateMirrorImage internal.
-
-2007-05-22  Everaldo Canuto  <ecanuto at novell.com>
-
-	* MenuAPI.cs: Prevent context menu to be typed as MainMenu. Fixes #81509.  
-
-2007-05-22  Rolf Bjarne Kvinge <RKvinge at novell.com> 
-
-	* InternalWindowManager.cs: ToolTipShow: Don't show tooltip if the form
-	  isn't visible anymore. Fixes #81651.
-
-2007-05-22  Rolf Bjarne Kvinge <RKvinge at novell.com> 
-
-	* Control.cs: WmShowWindow: Update children's z-order after setting
-	  their parent. SetParent may show the window, thereby corrupting
-	  z-order, since the window will be shown on top.
-	* XplatUIWin32.cs: SetParent: don't call SetVisible on forms. Prevents
-	  multiple (and redundant) WM_SHOWWINDOW messages.
-	* MdiWindowManager.cs: RaiseDeactivate: only raise after an Activate
-	  event has already been raised.
-	* Form.cs: Change is_changing_visible_state to a counter, since
-	  SetVisibleCore can be called recursively. CreateHandle: when
-	  creating mdi children, send (De)Activated events.
-	* MdiClient.cs: Update use of is_changing_visible_state.
-	* Application.cs: OnThreadException: Surround exception handling with
-	  try/finally to ensure we always reset the error-handling state
-	  before leaving.
-
-2007-05-22  Rolf Bjarne Kvinge <RKvinge at novell.com> 
-
-	* ThemeWin32Classic.cs: DrawProgressBar: Avoid a DivideByZero exception
-	  (#81704).
-
-2007-05-21  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* ListView.cs: Use Theme.ListViewHorizontalSpacing for List and
-	SmallIcon views, now that we have a standarized horizontal spacing.
-
-	* ThemeWin32Classic.cs: ListViewHorizontalSpacing now has a value of
-	4, just like the other views (Match .Net).
-
-2007-05-21  Jonathan Pobst  <monkey at jpobst.com>
-
-	* Control.cs: Delay calculating anchor distances until we actually layout.
-	Always query the WM for the actual size and location it put us at instead of
-	only when we send negative values.
-	[Fixes bugs #81694, 81695]
-
-2007-05-21  Rolf Bjarne Kvinge <RKvinge at novell.com> 
-
-	* Application.cs: Avoid a possible stack overflow when trying to exit
-	  the application.
-
-2007-05-19  Marek Safar  <marek.safar at gmail.com>
-
-	* Theme.cs (GetHatchBrush): A key uses internal value instead of formated
-	enum value.
-
-2007-05-19  Andreia Gaita  <avidigal at novell.com>
-
-	* NumericUpDown.cs: Added 2.0 methods (spin acceleration)
-	* NumericUpDownAcceleration.cs, 
-	  NumericUpDownAccelerationCollection.cs: Added 2.0
-	  implementation.
-
-2007-05-19  Gert Driesen  <drieseng at users.sourceforge.net>
-
-	* RichTextBox.cs: Recalculate the document after the ScrollBars
-	property is changed. Fixes bug #81681.
-
-2007-05-18  Jonathan Pobst  <monkey at jpobst.com>
-
-	* DataObject.cs: Implement 2.0 methods.
-
-2007-05-18  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* ThemeWin32Classic.cs: Draw the check marks in ListViewItems
-	in the center of the checkbox, not in the left-top corner. 
-	Fixes #80037.
-
-2007-05-18  Jackson Harper  <jackson at ximian.com>
-
-	* RichTextBox.cs: Recalculate the document after the scrollbars
-	property is changed.
-	* TextBoxBase.cs: ScrollBars is not a flags enum...This fixes
-	81486.
-
-2007-05-18  Rolf Bjarne Kvinge <RKvinge at novell.com> 
-
-	* CreateParams.cs: Make HasWindowManager marginally faster.
-	* XplatUIX11.cs, Hwnd.cs: CreateWindow: Move the default location code
-	  into Hwnd so that other drivers can use it as well.
-	* XplatUIWin32.cs: CreateWindow: If the window has a window manager get
-	  the default location from Hwnd. Fixes MDI client windows always
-	  showing up at (0,0) in Windows (Win32 won't set the default
-	  location since the window styles aren't correct).
-
-2007-05-18  Gert Driesen  <drieseng at users.sourceforge.net>
-
-	* TreeView.cs: Modified DoubleBuffered to just use the base
-	implementation.
-
-2007-05-18  Jackson Harper  <jackson at ximian.com>
-
-	* TreeView.cs: Set the top node to the last child node when
-	expanding all
-	- When we get focus, if there is no selected node, use the top
-	node.
-
-2007-05-18  Jonathan Pobst  <monkey at jpobst.com>
-
-	* KeysConverter.cs: Add CanConvertTo.
-	* LinkLabel.cs: Add some 2.0 constructors and properties to LinkLabel.Link.
-	* LinkConverter.cs: Added.
-
-2007-05-18  Everaldo Canuto  <ecanuto at novell.com>
-
-	* Cursor.cs: Apply Sebastien patch from #81669 to open file in read mode,
-	it prevents error when file dont have write access. Fixes #81669 and #81667.  
-
-2007-05-18  Everaldo Canuto  <ecanuto at novell.com>
-
-	* ThemeWin32Classic.cs: Check for ShowKeyboardCues true when draw toolbar 
-	button text. Fixes #79640.  
-
-2007-05-18  Everaldo Canuto  <ecanuto at novell.com>
-
-	* Control.cs: According to MSDN controls created in the designer theres 
-	keyboard accelerators visible by default. So included check for design
-	in ShowKeyboardCuesInternal.  
-
-2007-05-18  Everaldo Canuto  <ecanuto at novell.com>
-
-	* ThemeWin32Classic.cs: Check for ShowKeyboardCues true when draw combobox 
-	text. Fixes #81621.  
-
-2007-05-18  Everaldo Canuto  <ecanuto at novell.com>
-
-	* Control.cs: ShowKeyboardCuesInternal add to expose ShowKeyboardCues
-	for 1.0, becuse ShowKeyboardCues is protected on 1.0.  
-
-2007-05-17  Everaldo Canuto  <ecanuto at novell.com>
-
-	* Control.cs: Finish implementation of UI State using WmChangeUIState
-	to send WM_UPDATEUISTATE to all child controls. Some hack will be needed
-	in some controls to check for show_keyboard_cues to draw accell keys "_".  
-
-2007-05-17  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* ListBox.cs: When calculating the horizontal scrollbar
-	in single column mode, don't use values less than 0 for
-	Maximum. Fixes #81474.
-
-2007-05-17  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* ListBox.cs: Throw the some missing exceptions in
-	ListBox.ObjectCollection methods.
-
-2007-05-17  Jackson Harper  <jackson at ximian.com>
-
-	* TextBoxBase.cs: Recalculate the document when the word wrap
-	value has changed. This fixes 81488.
-
-2007-05-17  Jonathan Pobst  <monkey at jpobst.com>
-
-	* Clipboard.cs: Implement missing GetText overload.
-
-2007-05-17  Chris Toshok  <toshok at ximian.com>
-
-	* Control.cs (CheckDataBindings): remove the binding_context arg
-	to binding.Check.
-
-	* CurrencyManager.cs (OnItemChanged): fix this now that
-	BindingManagerBase is fixed. also remove the comment telling where
-	the fix should go.  We set transfering_data to true/false around
-	the call to PushData to keep UpdateIsBinding from being called.
-	(ListChangedHandler): remove the extra OnMetaDataChanged call for
-	PropertyDescriptorAdded in the 1.1 case.  The extra call is
-	actually generated by System.Data generating 2 metadata changed
-	events of its own per column add.  The fix should go there.  Add a
-	comment to that affect in our test's Assert.Ignore.
-
-	* BindingManagerBase.cs: Rework PullData and PushData slightly.
-	we keep a boolean flag (transfering_data) that keeps us from
-	calling UpdateIsBinding multiple times if we re-enter either of
-	them.
-
-	* ControlBindingsCollection.cs (AddCore): remove the
-	binding_context arg to binding.Check.
-
-	* Binding.cs (IsBinding): don't check if we're binding here, just
-	return our cached value.  we update it in UpdateIsBinding.
-	(Check): don't take the binding_context arg, we'll just use our
-	control's.  Also, for some reason MS doesn't use the data member
-	field when getting the bindingmanager for this binding.  it just
-	uses the datasource.  Make this method callable multiple times,
-	and only do the is_null_desc stuff if manager.Position != -1 (so
-	we don't get an exception accessing manager.Current).
-	(UpdateIsBinding): move the code from IsBinding here.
-	(PositionChangedHandler): call Check here to we can initialize
-	things that require a non- -1 position.
-
-2007-05-17  Everaldo Canuto  <ecanuto at novell.com>
-
-	* Form.cs: When alt keys is pressed send WM_CHANGEUISTATE to top level
-	control.
-
-2007-05-17  Andreia Gaita  <avidigal at novell.com>
-
-	* TabControl.cs: Add 2.0 methods and events, including
-	OnEnter / OnLeave and raises it for tabpages (fixes #79869)
-	* TabPage.cs: Add 2.0 methods
-
-2007-05-17  Everaldo Canuto  <ecanuto at novell.com>
-
-	* Control.cs: Implement WmUpdateUIState, show_focus_cues and
-	keyboard_cues is properly handled by message method.  
-
-2007-05-17  Jonathan Pobst  <monkey at jpobst.com>
-
-	* TreeViewImageIndexConverter.cs: Add 2.0 methods.
-
-2007-05-17  Jonathan Pobst  <monkey at jpobst.com>
-
-	* ToolStripTextBox.cs: Wire up new 2.0 Textbox methods/properties.
-
-2007-05-16  Everaldo Canuto  <ecanuto at novell.com>
-
-	* Control.cs: 
-	- WmUpdateUIState added to handle state changes, it make call to
-	OnChangeUICues event.
-	- Fixed ShowKeyboardCues to check for MenuAccessKeysUnderlined in
-	SystemInformation.
-
-2007-05-16  Jonathan Pobst  <monkey at jpobst.com>
-
-	* ImageKeyConverter.cs: Added.
-	* TreeViewImageKeyConverter.cs: Added.
-
-2007-05-16  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-	
-	* ToolTips.cs: Update Text if SetToolTip is called for a control
-	already showing the tooltip, as well as restarting its timer; show
-	tooltip if we are inside the control bounds by the time of calling
-	SetToolTip. Inside ShowTooltip remove the check to not show the 
-	tooltip again for the active control (it is allowed by .Net to 
-	show the tooltip on the same control multiple times).
-
-2007-05-16  Rolf Bjarne Kvinge <RKvinge at novell.com> 
-
-	* MaskedTextBox.cs: Small fix for Text that fixes a broken test.
-
-2007-05-16  Andreia Gaita <avidigal at novell.com> 
-
-	* ContainerControl.cs: only process tab key if there are no 
-	modifier keys present, otherwise the control does the 
-	tab processing, if it needs to. Fixes #81622
-	* TabControl.cs: Fixes calculation for which tab to select on
-	shift+ctrl+tab.
-
-2007-05-16  Rolf Bjarne Kvinge <RKvinge at novell.com> 
-
-	* MaskedTextBox.cs: Small fix for Text that fixes a broken test.
-
-2007-05-15  Jonathan Pobst  <monkey at jpobst.com>
-
-	* Control.cs: Make IsInputCharInternal to allow controls to
-	override it and still match MS API.
-	* TextBoxBase.cs: Override IsInputCharInternal and always
-	return true.
-	[Fixes bug #81616]
-
-2007-05-15  Jackson Harper  <jackson at ximian.com>
-
-	* TextBox.cs: Disable some of the menu options when using a
-	readonly textbox.
-
-2007-05-15  Jackson Harper  <jackson at ximian.com>
-
-	* TextBox.cs:
-	* TextBoxBase.cs:
-	* RichTextBox.cs: Some new 2.0 methods
-
-2007-05-15  Gert Driesen  <drieseng at users.sourceforge.net>
-
-	* FileDialog.cs: On 1.0 profile, do not support multidotted 
-	extensions.
-
-2007-05-14  Jackson Harper  <jackson at ximian.com>
-
-	* TextBoxBase.cs: Implement some of the new 2.0 methods.
-	* RichTextBox.cs: We need to override these methods on 2.0.
-	* MaskedTextBox.cs: These are implemented now
-	* TextControl.cs: This was off by one.
-
-2007-05-14  Jackson Harper  <jackson at ximian.com>
-
-	* TextControl.cs: Because the line endings are including in the
-	text, we don't need to add them in anymore.
-
-2007-05-11  Everaldo Canuto  <everaldo at simios.org>
-
-	* ToolBar.cs: Fix autosize and get it working only after hadle is created,
-	also prevent redraw in set_autosize if handle is not created. Fixes #81523.
-
-2007-05-11  Everaldo Canuto  <everaldo at simios.org>
-
-	* ToolBar.cs: Adjust size to default size when button theres no text and
-	image, it fixes remaining issues from #81524.
-
-2007-05-11  Everaldo Canuto  <everaldo at simios.org>
-
-	* ToolBar.cs: 
-	- When not flat call redraw to recalculate sizes on creare handle to match
-	win32 behavior.
-	- Revert 77220 because it causes some regressions in toobar
-	button.
-
-2007-05-11  Rolf Bjarne Kvinge <RKvinge at novell.com> 
-
-	* MaskedTextBox.cs: Update the base text whenever the text changes. MTB
-	  now actually enters a usable state.
-
-2007-05-11  Everaldo Canuto  <everaldo at simios.org>
-
-	* ToolBar.cs: Check for handle created in redraw to prevent unneeded size
-	calculations, it reduces the size cauculation from 7 to 3 on a toolbar with
-	3 buttons.
-
-2007-05-11  Everaldo Canuto  <everaldo at simios.org>
-
-	* ToolBar.cs: Save default_size on create handle to use later for buttons
-	without text, needed to mimic win32 behavior.
-
-2007-05-11  Everaldo Canuto  <everaldo at simios.org>
-
-	* ToolBar.cs: Fix button layour to best fit width or height according to
-	vertical or not. Fixes #81524.
-
-2007-05-10  Everaldo Canuto  <everaldo at simios.org>
-
-	* ToolBarButton.cs: When change style call ToolBar.Redraw to update
-	toolbar size info because different styles theres different sizes.
-	Fixes #81522.
-
-2007-05-10  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* ThemeWinClassic.cs: For .Net 2.0 don't draw any image
-	if we are using checkboxes, checked is true, and we have less
-	than two images in StateImageList; for the 1.1 in the same scenario
-	draw the first image if we have at least one image in StateImageList.
-	Fixes part of #81191.
-
-2007-05-10  Jonathan Pobst  <monkey at jpobst.com>
-
-	* ToolStrip.cs, ToolStripManager.cs: We need to remove items from
-	the owner's Items collection on merge.
-
-2007-05-10  Jonathan Pobst  <monkey at jpobst.com>
-
-	* ToolStrip.cs: Use new internal ToolStripItemCollection constructor.
-	* ToolStripItemCollection.cs: Lots of fixes to when events get called
-	and parent/owner gets changed based on gert's unit tests.
-
-2007-05-10  Rolf Bjarne Kvinge <RKvinge at novell.com> 
-
-	* MaskedTextBox.cs: Started implementing parts of it.
-
-2007-05-10  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* ListView.cs: When clicking the checkbox on the items
-	take into account the double clicks even if we have only
-	one image in StateImageList (only for 1.0/1.1). Also 
-	generate an extra change of checked state when we receive
-	the second click on checkbox (match .Net behaviour). 
-	Fixes part of #81191.
-
-2007-05-10  Everaldo Canuto  <everaldo at simios.org>
-
-	* ThemeWin32Classic.cs: Fix text rectangles in Tooltips.
-
-2007-05-10  Jonathan Pobst  <monkey at jpobst.com>
-
-	* Form.cs: Move some of OnLoad to OnLoadInternal so it gets called
-	even if OnLoad is overriden and base.OnLoad is not called.
-	[Fixes bug #81582]
-
-2007-05-10  Andreia Gaita  <avidigal at novell.com>
-
-	* TableLayoutSettings.cs: A big doh! fix and bowing down of head in 
-	shame. (I blame my ever-persisting and annoying cold)
-
-2007-05-09  Jonathan Pobst  <monkey at jpobst.com>
-
-	* ListView.cs: Don't eat navigation keys.  Let them flow through to
-	KeyDown/KeyPress routines.  [Fixes bug #81569]
-
-2007-05-09  Jonathan Pobst  <monkey at jpobst.com>
-
-	* ListView.cs: When handling keys for selecting the item based off
-	keyboard input, do not consider keys pressed with Alt or Control.  Also,
-	correctly handle keys when the Shift key is down. [Fixes bug #81578]
-
-2007-05-09  Jonathan Pobst  <monkey at jpobst.com>
-
-	* Control.cs: When using UseWaitCursor, we have to store the requested
-	Cursor to use when UseWaitCursor is turned off.
-
-2007-05-09  Jonathan Pobst  <monkey at jpobst.com>
-
-	* Control.cs: Implement PreProcessControlMessage.  Default IsInputChar
-	to false.
-	* Application.cs: Use PreProcessControlMessage instead of
-	PreProcessMessage.
-	* PreProcessControlMessage.cs: Make internal for 1.1.
-
-2007-05-08  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* Control.cs: Add InternalContains focus property, which hast the same
-	functionality of ContainsFocus, but also including implicit controls.
-	* ListViewItem.cs: Use InternalContainsFocus instead of ContainsFocus,
-	since we need to know if the focus is contained in our implicit
-	ItemControl when calculating Layout. Fixes part of #80888.
-
-2007-05-08  Everaldo Canuto  <everaldo at simios.org>
-
-	* ToolTip.cs: Remove center form string alignment as it must be align to
-	left.
-
-2007-05-08  Jonathan Pobst  <monkey at jpobst.com>
-
-	* ToolStripItemCollection.cs: Set the new item's parent and owner
-	in Insert like we do in Add.  [Fixes bug #81568]
-
-2007-05-08  Jackson Harper  <jackson at ximian.com>
-
-	* TreeView.cs: GotFocus differences between 1.1 and 2.0.
-	- Off by one error in SetTop
-	- Disable DoubeBuffering
-	
-2007-05-08  Rolf Bjarne Kvinge <RKvinge at novell.com> 
-
-	* ScrollableControl.cs: ScrollIControlntoView: we now only move the
-	  control as much as necessary in order to make it entirely visible,
-	  instead of centering the control in the container (matches MS
-	  behaviour). CalculateCanvasSize: we need to take the current scroll
-	  position into account when calculating the maximum canvas,
-	  otherwise the following scenario will fail: resize so that the
-	  scrollbars appear, use the scrollbars to scroll, resize again
-	  smaller, and now the canvas size is too small. Recalculate: when
-	  showing scrollbars make sure they start off at 0, and try to scroll
-	  the active control into view. Fixes #79540. HandleScrollBar: don't
-	  scroll anywhere if the scrollbar isn't visible.
-
-2007-05-07  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* ListView.cs: When focus changed, call Layout/Invalidate
-	in the focused item to update the selected state (should show
-	entire label when ListView is focused, and a part of it if is not).
-	* ListViewItem.cs: When doing layout for LargeIcon, take into account
-	for displaying the entire label not only the Focused state of the
-	item, but also the Focused state of the ListView (match .Net
-	behaviour).
-
-2007-05-07  Jonathan Pobst  <monkey at jpobst.com>
-
-	* Control.cs: Stub CanRaiseEvents, IsMirrored, and NotifyClients.
-	Implement UseWaitCursor. 
-
-2007-05-07  Jonathan Pobst  <monkey at jpobst.com>
-	Applying contributed patch from Sergey Volk.
-
-	* Clipboard.cs: Implement SetDataObject retry logic and new overload
-	of SetDataObject.
-	* XplatUIWin32.cs: Throw an ExternalException if the clipboard set fails.
-
-2007-05-07  Jonathan Pobst  <monkey at jpobst.com>
-
-	* Control.cs: Implement DrawToBitmap.
-
-2007-05-07  Jonathan Pobst  <monkey at jpobst.com>
-	Applying contributed patch from Stefan Noack.
-	
-	* Control.cs: Add [Get|Set]AutoSizeMode.
-
-2007-05-07  Jonathan Pobst  <monkey at jpobst.com>
-
-	* MdiClient.cs: Unmerge menus when the last child is closed.
-
-2007-05-07  Jonathan Pobst  <monkey at jpobst.com>
-
-	* ToolStrip.cs: Do not call BeginMerge on DropDowns.
-	* ToolStripManager.cs: Call Merge on DropDowns.
-	[Fixes bug #81477]
-
-2007-05-07  Rolf Bjarne Kvinge <RKvinge at novell.com> 
-
-	* XplatUIWin32.cs: Changed Win32CreateWindow to take enums instead of
-	  uints.
-	* Form.cs: CreateParams: don't set WS_VISIBLE if we're changing
-	  visibility. We can't create forms visible, since we have to set the
-	  owner before making the form visible (otherwise Win32 will do
-	  strange things with task bar icons). The problem is that we set the
-	  internal is_visible to true before creating the control, so
-	  is_changing_visible_state is the only way of determining if we're
-	  in the process of creating the form due to setting Visible=true -
-	  this works because SetVisibleCore explicitly makes the form
-	  visibile afterwards anyways. Fixes #80775.
-
-2007-05-04  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* ThemeWin32Classic.cs: When drawing ListViewItems,
-	use StringTrimming.EllipsisCharacter if the view is Tile, Details,
-	or LargeIcon _and_ item is not focused (match .Net behaviour).
-
-2007-05-04  Jonathan Pobst  <monkey at jpobst.com>
-
-	* Control.cs, Form.cs: Fix some obsolete method warnings.
-
-2007-05-04  Jonathan Pobst  <monkey at jpobst.com>
-
-	* Control.cs: Implement GetChildAtPoint and OnParentCursorChanged.
-	* GetChildAtPointSkip.cs: Make internal for 1.1 profile.
-
-2007-05-04  Andreia Gaita  <avidigal at novell.com>
-
-	* ContainerControl.cs: Fix active_control attribution when going
-	up the parent chain so that the first parent container gets the control
-	and the rest of the parent containers get the child containers (skips
-	non-containers). Fixes #80729
-
-2007-05-04  Randolph Chung  <tausq at debian.org>
-
-	* FileDialog.cs: Implement the SupportMultiDottedExtensions property.
-	[Fixes bug #81499]
-
-2007-05-04  Rolf Bjarne Kvinge <RKvinge at novell.com> 
-
-	* XplatUIX11.cs: Add a TranslateWindowSizeToXWindowSize overload that
-	  takes a size parameter, since the CreateParam's size isn't true for
-	  minimized forms. Fixes #81518,
-
-2007-05-04  Rolf Bjarne Kvinge <RKvinge at novell.com> 
-
-	* Form.cs: Add OnDeactivateInternal.
-	* MdiClient.cs: Raise Deactivate event. Fixes #81409.
-
-2007-05-04  Rolf Bjarne Kvinge <RKvinge at novell.com> 
-
-	* DateTimePicker.cs: CalculateDropDownLocation: do a null check before
-	  accessing the parent. Fixes #81508.
-
-2007-05-03  Chris Toshok  <toshok at ximian.com>
-
-	* CurrencyManager.cs (CurrencyManager.ListChangeHandler): in the
-	2.0 block, pass listposition + 1 to ChangeRecordState when a row
-	was added before the current listposition.  Fixes the
-	TestInsertRowBeforeCurrent unit test.
-
-2007-05-03  Jonathan Pobst  <monkey at jpobst.com>
-
-	* Application.cs: Add RaiseIdle.
-	* XplatUI.cs, XplatUIDriver.cs, XplatUIOSX.cs, XplatUIWin32.cs,
-	XplatUIX11.cs: Implement RaiseIdle.
-
-2007-05-02  Jonathan Pobst  <monkey at jpobst.com>
-	corcompare work: N - Z
-	* NotifyIcon.cs
-	* ProgressBar.cs
-	* RadionButton.cs
-	* ScrollableControl.cs
-	* SplitContainer.cs
-	* SplitterPanel.cs
-	* StatusBar.cs
-	* SystemInformation.cs
-	* TabControl.cs
-	* TableLayoutControlCollection.cs
-	* TableLayoutPanel.cs
-	* TabPage.cs
-	* ToolBar.cs
-	* ToolBarButton.cs
-	* ToolStrip.cs
-	* ToolStripComboBox.cs
-	* ToolStripContainer.cs
-	* ToolStripContentPanel.cs
-	* ToolStripDropDown.cs
-	* ToolStripDropDownItem.cs
-	* ToolStripDropDownMenu.cs
-	* ToolStripItem.cs
-	* ToolStripItemCollection.cs
-	* ToolStripMenuItem.cs
-	* ToolStripPanel.cs
-	* ToolStripSplitButton.cs
-	* ToolTip.cs
-	* TreeNode.cs
-	* TreeNodeCollection.cs
-	* TreeNodeMouseHoverEventArgs.cs
-	* TreeView.cs
-
-2007-05-01  Everaldo Canuto  <everaldo at simios.org>
-
-	* ContextMenu.cs: Add public method Show with alignment property to 2.0
-	stuff. Thanks aatdark for the patch. 
-
-2007-05-01  Jonathan Pobst  <monkey at jpobst.com>
-
-	* GridItem.cs: Implement 2.0 Tag property.
-
-2007-05-01  Frederik Carlier <frederik.carlier at carlier-online.be> 
-
-	* TreeNodeCollection.cs: Fix ContainsKey and IndexOfKey methods to use
-	count instead of Nodes.Length.  [Fixes bug #81448]
-
-2007-05-01  Jonathan Pobst  <monkey at jpobst.com>
-
-	* ComboBox.cs: Fix paramName sent to ArgumentOutOfRangeException's.
-	[Fixes bug #81506]
-
-2007-05-01  Jonathan Pobst  <monkey at jpobst.com>
-	corcompare work: A - M
-	* BindingNavigator.cs
-	* Button.cs
-	* ButtonBase.cs
-	* CheckBox.cs
-	* Control.cs
-	* FlowLayoutPanel.cs
-	* Form.cs
-	* Label.cs
-	* LinkLabel.cs
-	* ListView.cs
-
-2007-05-01  Jonathan Pobst  <monkey at jpobst.com>
-
-	* Application.cs: Give toolstrips a chance to process mnemonics.
-	* ToolStrip.cs, ToolStripDropDownButton.cs, ToolStripItem.cs,
-	ToolStripItemTextRenderEventArgs.cs, ToolStripLabel.cs,
-	ToolStripMenuItem.cs, ToolStripSplitButton.cs: Implement keyboard mnemonics.
-
-2007-05-01  Jackson Harper  <jackson at ximian.com>
-
-	* TextBoxBase.cs: Better preferred height, FixedSingle gets the
-	wider area too.
-	- Don't set the BoundsSpecified
-
-2007-04-30  Jonathan Pobst  <monkey at jpobst.com>
-
-	* Application.cs: When using the toolstrip shortcut mechanism, allow the
-	message to pass through to a regular control if it hosted by a toolstrip.
-	* ToolStrip.cs, ToolStripControlHost.cs, ToolStripDropDown.cs,
-	ToolStripManager.cs: Enable keyboard navigation for ToolStrips.
-
-2007-04-30  Jonathan Pobst  <monkey at jpobst.com>
-
-	* TextRenderer.cs: Use the flags argument when using the MeasureString
-	fallback algorithm.
-
-2007-04-30  Jonathan Pobst  <monkey at jpobst.com>
-
-	* MenuStrip.cs: Don't let multiple ToolStripSeparators get added to
-	the MDI menu item.  [Fixes bug #81483]
-
-2007-04-30  Gert Driesen  <drieseng at users.sourceforge.net>
-
-	* DataGridViewColumn.cs: Initialize value of headercell to zero-length
-	string. When setting Name to null, use zero-length string instead.
-
-2007-04-29  Andreia Gaita  <avidigal at novell.com>
-
-	* TabControl.cs: Implement missing 2.0 methods (SelectTab, 
-	DeselectTab). Implement missing 2.0 TabPageCollection methods
-	(Add, ContainsKey, RemoveByKey, IndexOfKey)
-
-2007-04-29  Pedro Martínez Juliá  <pedromj at gmail.com>
-
-	* DataGridViewColumn.cs: Make HeaderText take preference over Name.
-
-2007-04-29  Gert Driesen  <drieseng at users.sourceforge.net>
-
-	* RichTextBox.cs: In LoadFile, use StreamReader to read plain text.
-	Fixes bug #81479. Include details of exception when LoadFile fails.
-
-2007-04-28  Alan McGovern <alan.mcgovern at gmail.com>
-
-	* DrawListViewSubItemEventArgs.cs: Added missing setter
-
-2007-04-27  Andreia Gaita  <avidigal at novell.com>
-
-	* ToolTip.cs: Add missing 2.0 properties. Implement 2.0 Show and 
-	Hide methods (not complete). Implement missing 2.0 OnPopup event.
-
-2007-04-27  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* ListView.cs: In ItemControl.OnMouseDown restore a pair of braces I
-	removed in ly last commit (it was breaking the Label edit feature).
-
-	* ThemeWin32Classic.cs: When drawing a ListViewItem use
-	StringAlignment.Near for LineAlignment (match .Net).
-
-2007-04-27  Andreia Gaita  <avidigal at novell.com>
-
-	* TabControl.cs: Change SetTab so it adds the tabpage to the list
-	of controls if it isn't already there - was blowing up when doing
-	tabcontrol.TabPages[i]=new TabPage(). 
-	SetTab now does a replace by removing the page at the index. 
-	Add a new InsertTab method that inserts a page in a given index 
-	instead of replacing. 
-	Implements TabPageCollection.Insert(int, TabPage).
-
-2007-04-27  Chris Toshok  <toshok at ximian.com>
-
-	* BindingManagerBase.cs: fill in CurrentItemChanged (and have an
-	internal handler that can be invoked from our subclasses.)  Also,
-	add a comment to PushData about how we need to fix it.
-
-	* CurrencyManager.cs: tons of changes here.  trying to get things
-	matching the behavior of .net wrt event orders (ItemChanged,
-	CurrentChanged, PositionChanged.)  I've implemented a private .net
-	symbol (ChangeRecordState) that appears in stack traces because
-	it's actually easier to do this than to effective inline all its
-	various behaviors at every call site.
-
-	* RelatedPropertyManager.cs: guard against an exception here by
-	not using parent.Current if the position is set to -1 (if the
-	parent datasource is cleared, for instance).
-
-	* Binding.cs: don't parse data in PushData (this might be wrong,
-	but it jives with MS's behavior.)  Also, don't call PushData when
-	we get a CurrentChanged event.
-
-2007-04-27  Andreia Gaita  <avidigal at novell.com>
-
-	* WebBrowser.cs,
-	  WebBrowserBase.cs,
-	  WebBrowserSiteBase.cs,
-	  HtmlDocument.cs: Added stubbed out classes, no real implementations 
-	  yet.
-
-2007-04-27  Everaldo Canuto  <everaldo at simios.org>
-
-	* MainMenu.cs: In draw method without parameters call draw method with 
-	PaintEvent, another one (just rect) adjust rectangle and we dont need it
-	as Rect property is already adjusted. Fixes #80694.
-
-2007-04-27  Jonathan Pobst  <monkey at jpobst.com>
-
-	* Application.cs: Need to handle keyboard menu deselection here.
-	* Control.cs: Use WM_SYSKEYUP instead of WM_SYSCOMMAND to start menu keyboard
-	navigation, allowing keyboard to work on X11.
-	* ToolStrip.cs: Don't worry about handling the Menu key here anymore.
-
-2007-04-27  Everaldo Canuto  <everaldo at simios.org>
-
-	* MenuAPI.cs: When deactivate menu verify if hotkey (_) is active and redraw
-	menu bar. It fixes some drawing issues in menu bar.
-
-2007-04-27  Everaldo Canuto  <everaldo at simios.org>
-
-	* MenuAPI.cs: Remove unneeded "keynav_state = KeyNavState.Idle" before 
-	Deactivate calls, Deactivate method already do it. Also ser ActiveTracker
-	when <alt> key is pressed.
-
-2007-04-26  Everaldo Canuto  <everaldo at simios.org>
-
-	* XplatUIX11.cs: Simplify SystrayRemove to be like other libraries,	Gtk as 
-	example just set visible to false and make this prevent from other problems.
-	In SystrayAdd always remove pending expose. Fixes #81072.
-
-2007-04-26  Marek Safar  <marek.safar at gmail.com>
-
-	* TextBoxBase.cs (CaretMoved): Consider scroll maximum when scroll
-	value is set.
-
-2007-04-26  Alan McGovern <alan.mcgovern at gmail.com>
-
-	* ListView.cs: Added three missing 2.0 events and corresponding
-	EventHandlers. Added the OwnerDraw property.
-	* DrawListViewColumnHeaderEventHandler.cs: fixed typo
-
-2007-04-26  Alan McGovern <alan.mcgovern at gmail.com>
-
-	* DrawListViewItemEventArgs.cs
-	* DrawListViewSubItemEventArgs.cs: Brought classes up to 2.0 status.
-
-2007-04-26  Alan McGovern <alan.mcgovern at gmail.com>
-
-	* TextControl.cs: Fixed typo in constructor
-
-2007-04-26  Jonathan Pobst  <monkey at jpobst.com>
-
-	* Application.cs: Create a shortcut path so that currently selected
-	MenuStrips can intercept keyboard events without having focus.
-	* Control.cs: Handle WM_SYSCOMMAND message to activate MenuStrips.
-	* MenuStrip.cs, ToolStrip.cs, ToolStripDropDown.cs, ToolStripDropDownItem.cs,
-	ToolStripItem.cs, ToolStripManager.cs, ToolStripMenuItem.cs: Support
-	keyboard navigation (arrows, tab, enter, esc) on Windows.  Still need to
-	generate WM_SYSCOMMAND message in X11 for other platforms.
-	* ToolStripProfessionalRenderer.cs: ToolStripMenuItems need to be painted
-	in OnRenderMenuItemBackground instead of OnRenderButtonBackground.
-	* ToolStripSplitButton.cs: Add DefaultItem property.
-	
-2007-04-26  Everaldo Canuto  <everaldo at simios.org>
-
-	* MainMenu.cs: In OnMenuChanged pass PaintEventArgs to Draw method, it
-	fixes some menu draw problem on Windows with border diferent from default
-	it also fixes #81403.
-
-2007-04-26  Rolf Bjarne Kvinge <RKvinge at novell.com> 
-
-	* Form.cs: Refactor WndProc into separate methods, just like Control is
-	  doing it.
-
-2007-04-26  Rolf Bjarne Kvinge <RKvinge at novell.com> 
-
-	* Control.cs: set_Text: move the call to the driver into a seperate
-	  virtual method so that Form can override it.
-	* MaskedTextBox.cs: Corcompare fixes.
-	* Form.cs: Override UpdateWindowText and only update the styles if the
-	  form has been shown (fixes #81405).
-
-2007-04-25  Jonathan Pobst  <monkey at jpobst.com>
-
-	* Control.cs, Form.cs: Use the better supported WM_?BUTTONDOWN and
-	WM_ACTIVATE messages instead of WM_MOUSEACTIVATE and
-	WM_ACTIVATEAPP.  This fixes menus not disappearing on X11 when
-	the form lost focus or another control was clicked.
-
-2007-04-25  Gert Driesen  <drieseng at users.sourceforge.net>
-
-	* DataGrid.cs: Uncomment MakeTransparent calls since bug #80151 is
-	fixed.
-
-2007-04-25  Rolf Bjarne Kvinge <RKvinge at novell.com> 
-
-	* DrawListViewColumnHeaderEventHandler.cs, DrawToolTipEventArgs.cs,
-	  DrawListViewItemEventHandler.cs,
-	  DrawListViewSubItemEventHandler.cs, DrawToolTipEventHandler.cs:
-	  Added.
-	* X11Structs.cs: More ToString implementation.
-
-2007-04-25  Jonathan Pobst  <monkey at jpobst.com>
-
-	* ToolStripDropDownItem.cs: Don't lazy create a DropDown in Dispose.
-	* ToolStripOverflowButton.cs: Don't lazy create a DropDown in HasDropDownItems.
-
-2007-04-25  Rolf Bjarne Kvinge <RKvinge at novell.com> 
-
-	* Control.cs: Only raise OnVisibleChanged if we're not recreating the
-	  handle.
-	* FormCollection.cs: Don't add a form if it's already in the
-	  collection.
-	* Form.cs: Change ShowDialog () to call ShowDialog (owner) with a null
-	  according to behaviour and MSDN. The ownerWin32 is the active
-	  window at the moment when we call ShowDialog, not the context's
-	  main form (the context's main form may open another form that opens
-	  a form with ShowDialog, the win32 owner is the second form). Add
-	  and remove forms to the Application.OpenForms in other places to
-	  better match MS behaviour. Add an IsActive property that raises
-	  On(de)Activated only if the active state has changed (we were
-	  raising OnDeactivated before OnActivated while creating forms).
-	* Application.cs: Refactor Enabling/Disabling of windows for modal
-	  dialog loops out to separate methods, and restore the thread
-	  context when we quit the method. Fixes #81407.
-
-2007-04-25  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* ListView.cs: In ItemControl.HandleClicks, also fire 
-	2.0 MouseClick or MouseDoubleClick events on the parent,
-	not only the Click/DoubleClick events.
-
-2007-04-24  Andreia Gaita  <avidigal at novell.com>
-
-	* TableLayoutSettings.cs: 
-	- Added a GetControls method and a support structure to help the 
-	TypeConverter to enumerate the controls for	serialization. 
-	- Added a new serialization constructor. 
-	- Added a isSerialized flag initialized to true on the 
-	serialization constructor so that the TableLayoutPanel.LayoutSettings 
-	setter does not throw the designed NotSupportedOperation exception
-	when the object is built through deserialization.
-	- Implemented GetObjectData
-	
-	* TableLayoutPanel.cs: Added check on LayoutSettings.
-
-2007-04-24  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* ListView.cs: Report Click and DoubleClick events to the parent
-	from ItemsMouseUp, instead of ItemsMouseDown. This prevents us
-	from breaking the click count state when using dialog forms (Control
-	reports the clicks in a similar fashion). In the previous behaviour
-	the last WM_LBUTTONUP message in a  double click was sent to the
-	ListView's form, instead of the ListView, which was breaking the click
-	count for it. Fixes #80387.
-
-2007-04-24  Alan McGovern <alan.mcgovern at gmail.com>
-
-	* BindingNavigator.cs : fixed bugs revealed by new nunit tests
-
-2007-04-24  Jonathan Pobst  <monkey at jpobst.com>
-
-	* ToolStripDropDownItem.cs: Lazy initialize the DropDown.  This prevents
-	us from created dropdowns for menu items that do not have subitems.
-	* ToolStripItem.cs, ToolStripProfessionalRenderer.cs, ToolStripSplitButton.cs:
-	Check HasDropDownItems before calling DropDown so a dropdown will not be
-	created if it isn't needed.
-
-2007-04-24  Jackson Harper  <jackson at ximian.com>
-
-	* TreeView.cs: Set the first node to the selected node when we get
-	focus if there is no selected node.
-
-2007-04-24  Andreia Gaita  <avidigal at novell.com>
-
-	* MimeIcon.cs: remove using blocks so that image streams are
-	not disposed of. Fixes #80151
-
-2007-04-24  Jackson Harper  <jackson at ximian.com>
-
-	* TextBoxBase.cs: Fixup the height of textboxes when the control
-	is created.
-
-2007-04-24  Jonathan Pobst  <monkey at jpobst.com>
-
-	* ToolStrip.cs: Fully implement GetNextItem.  Call OnParentRightToLeftChanged
-	for each ToolStripItem when the parent's RightToLeftChanged is called.
-
-2007-04-24  Rolf Bjarne Kvinge <RKvinge at novell.com> 
-
-	* ComboBox.cs: Forward ContextMenu to the underlying textbox, if any.
-	  Fixes #80163.
-	* Control.cs: Replace GetContextMenuInternal() with ContextMenuInternal
-	  property, so that the setter can be overriden too.
-	* TextBox.cs: Change GetContextMenuInternal() to use
-	  ContextMenuInternal.
-
-2007-04-24  Rolf Bjarne Kvinge <RKvinge at novell.com> 
-
-	* ThemeWin32Classic.cs: Use a black pen to draw checkboxes, fixes
-	  #81406.
-
-2007-04-24  Rolf Bjarne Kvinge <RKvinge at novell.com> 
-
-	* ThemeWin32Classic.cs: Use a black pen to draw checkboxes, fixes
-	  #81406.
-
-2007-04-24  Rolf Bjarne Kvinge <RKvinge at novell.com> 
-
-	* MaskedTextBox.cs: Commit this so nobody else starts working on it and
-	  avoid duplicate work. Mostily skeleton code, it's not working at
-	  all yet.
-
-2007-04-20  Leszek Ciesielski <skolima at gmail.com>
-
-	* NotifyIcon.cs : stub for MouseClick event
-	* Application.cs: stub for SetUnhandledExceptionMode
-
-2007-04-24  Alan McGovern <alan.mcgovern at gmail.com>
-
-	* BindingNavigator.cs : Initial (partial) implementation
-
-2007-04-23  Jackson Harper  <jackson at ximian.com>
-
-	* TreeView.cs: Do not create the treeview's handle when setting
-	the scroll position.
-	- ExpandAll needs to compute the scrollbars so it knows which
-	position to set the bar too.
-	* TreeNode.cs: 
-	* TreeNodeCollection.cs: Pass new flag to UpdateScrollBars
-
-2007-04-23  Jackson Harper  <jackson at ximian.com>
-
-	* TextBoxBase.cs: Non multiline textboxes shouldn't take the enter
-	key. Fixes #81408.
-
-2007-04-23  Jonathan Pobst  <monkey at jpobst.com>
-
-	* ToolStripItem.cs: Make GetImageSize internal.
-	* ToolStripMenuItem.cs: Use GetImageSize to determine the size we
-	need to draw an item.  Fixes a reported issue where images on menus
-	that were not 16x16 were drawing incorrectly.
-
-2007-04-21  Miguel de Icaza  <miguel at novell.com>
-
-	* Padding.cs: Use the converter, fixes the resgen2 issue with
-	XMLNotePad. 
-
-2007-04-21  Jackson Harper  <jackson at ximian.com>
-
-	* TreeView.cs: Dont try to unhighlight the selected node if there
-	isn't a selected node.
-
-2007-04-21  Jackson Harper  <jackson at ximian.com>
-
-	* UpDownBase.cs:
-	* TextBoxBase.cs:
-	* ListView.cs:
-	* ListBox.cs:
-	* TreeView.cs: Use the InternalBorderStyle property to set the
-	initial border style, this forces the client rectangle to be sized
-	correctly.
-
-2007-04-20  Jackson Harper  <jackson at ximian.com>
-
-	* TreeView.cs: Simplify scrolling to the last node after expanding
-	all.
-	- Fix some off by ones with setting the bottom.
-
-2007-04-20  Jonathan Pobst  <monkey at jpobst.com>
-
-	* Control.cs: Use DefaultSize for Size, calculate ClientSize from
-	that.  We were incorrectly doing it the other way around.  Also,
-	update ClientSize if we change the BorderStyle before the control
-	is created.
-
-2007-04-20  Gert Driesen  <drieseng at users.sourceforge.net>
-
-	* XplatUI.cs: Added Border3DSize, BorderSize, CaptionButtonSize,
-	DoubleClickSize, DoubleClickTime and FixedFrameBorderSize. Renamed
-	XplatUIDriver.Caption to CaptionHeight. Spaces to tabs.
-	* XplatUIDriver.cs: Added Border3DSize, BorderSize, CaptionButtonSize,
-	DoubleClickSize, DoubleClickTime and FixedFrameBorderSize. Renamed
-	Caption to CaptionHeight.
-	* XplatUIX11.cs: Renamed Caption to CaptionHeight.
-	* Theme.cs: Modified Border3DSize, BorderSize, CaptionButtonSize
-	and FixedFrameBorderSize to return value from current XplatUI driver.
-	* XplatUIWin32.cs: Implemented Border3DSize, BorderSize,
-	CaptionButtonSize, DragFullWindows, DoubleClickSize, DoubleClickTime
-	and FixedFrameBorderSize using win32 API. Renamed Caption to
-	CaptionHeight.
-	* XplatUIOSX.cs: Renamed Caption to CaptionHeight.
-	* SystemInformation.cs: Fixed typo in BorderSize.
-
-2007-04-20  Gert Driesen  <drieseng at users.sourceforge.net>
-
-	* XplatUI.cs: Added MenuAccessKeysUnderlined.
-	* XplatUIDriver.cs: Added MenuAccessKeysUnderlined.
-	* XplatUIX11.cs: Implemented MenuAccessKeysUnderlined by always
-	returning false.
-	* Theme.cs: Modified MenuAccessKeysUnderlined to return corresponding
-	value from XplatUI driver.
-	* XplatUIWin32.cs: Implemented MenuAccessKeysUnderlined using
-	SystemParametersInfo.
-	* ThemeWin32Classic.cs: Remove obsolete MenuAccessKeysUnderlined
-	override.
-	* XplatUIOSX.cs: Implemented MenuAccessKeysUnderlind by always
-	returning false.
-
-2007-04-20  Rolf Bjarne Kvinge <RKvinge at novell.com> 
-
-	* XplatUIX11.cs, Hwnd.cs: Remove warnings.
-
-2007-04-20  Rolf Bjarne Kvinge <RKvinge at novell.com> 
-
-	* MessageBox.cs, XplatUIX11.cs, Hwnd.cs: Remove warnings.
-
-2007-04-20  Jonathan Pobst  <monkey at jpobst.com>
-
-	* ToolStripManager.cs: Fix a reported InvalidCastException when unmerging
-	MenuStrips that contain ToolStripSeparators.
-
-2007-04-20  Rolf Bjarne Kvinge <RKvinge at novell.com> 
-
-	* XplatUI.cs, XplatUIDriver.cs, XplatUIOSX.cs: Add
-	  DefineStdCursorBitmap.
-	* Cursor.cs: Add an internal constructor so that the Cursor knows if it
-	  has been created off a standard cursor. This is used to get a
-	  bitmap of the standard cursor when Draw or DrawStretched is called
-	  in order to draw the cursor.
-	* X11Structs.cs: Added XcursorImage and XcursorImages.
-	* XplatUIX11.cs, XplatUIWin32.cs: Add and implement
-	  DefineStdCursorBitmap.
-	* Cursors.cs: Update all relevant creations of Cursor to use the new
-	  internal constructor.
-
-2007-04-19  Jackson Harper  <jackson at ximian.com>
-
-	* TextBox.cs: Move the has_been_focused into the base control, so
-	some of the text adding methods can manipulate it (probably time
-	for a better name for this flag too).
-	- Call a new version of selectall that doesn't scroll
-	* TextBoxBase.cs: When we append text, if the document is empty,
-	don't scroll.  If the document has text already, we scroll to the
-	end of the appended text.
-	- When the text is changed, we reset the has_been_focused, so the
-	next time the control gets focused, all the text is selected.
-
-2007-04-19  Jackson Harper  <jackson at ximian.com>
-
-	* TextControl.cs: Move the margins to the document, add a method
-	so the margin sizes can be updated.
-	* TextBoxBase.cs: When the border style is changed, update the
-	border sizes.
-
-2007-04-19  Jonathan Pobst  <monkey at jpobst.com>
-
-	* Control.cs: Respect DefaultPadding.
-	* GroupBox.cs: Implement DefaultPadding, DisplayRectangle takes
-	padding into account.
-	* ToolStrip.cs: Remove setting padding to DefaultPadding in constructor.	
-
-2007-04-19  Jackson Harper  <jackson at ximian.com>
-
-	* TextControl.cs: Oops, we need to use the ClientRect not the
-	bounds here.
-
-2007-04-18  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* ListView.cs: In ItemControl.ItemsMouseDown, take into
-	account the double clicks when CheckBoxes are used and
-	the pointer is inside the checkbox. Fixes part of #81191.
-
-2007-04-18  Jackson Harper  <jackson at ximian.com>
-
-	* TextControl.cs: Pressing the end key shouldn't move the caret
-	past the line ending.
-	* TextBoxBase.cs: We can still delete if we are in the line
-	ending and the combine will just kill the existing line ending.
-
-2007-04-18  Jackson Harper  <jackson at ximian.com>
-
-	* TextControl.cs: We can't move lines, then invalidate their
-	bounds, we need to get the old bounds and combine that with the
-	new bounds.
-	* TextBoxBase.cs: Before combining two lines for a delete, we need
-	to invalidate the area of the old line, since that will be moved
-	in the combine operation.
-
-2007-04-18  Everaldo Canuto  <everaldo at simios.org>
-
-	* LinkLabel.cs: In OnPaint invoke draw background to fix problems
-	with transparent background. Fixes #80482.
-
-2007-04-18  Jonathan Pobst  <monkey at jpobst.com>
-
-	* PictureBox.cs: Refresh on resize when SizeMode = Zoom.
-	* ThemeWin32Classic.cs: Implement PictureBox.SizeMode = Zoom.
-	[Fixes bug #81391]
-
-2007-04-18  Rolf Bjarne Kvinge <RKvinge at novell.com> 
-
-	* CreateParams.cs: Add a couple of helper methods and do a less string
-	  concatenation in ToString.
-	* XplatUIX11.cs: Add an TranslateClientRectangleToXClientRectangle
-	  overload that takes a Control parameter, since this method may be
-	  called before a control is assigned to the hwnd (from
-	  CreateWindow), and update CreateWindow to use the new overload. In
-	  GetMenuOrigin subtract the title bar from the y position if the
-	  form has a window manager (since we're painting it and not X).
-	* XplatUIWin32.cs: If we can get a form in GetMenuOrigin use the form's
-	  CreateParams to calculate the origin (since border sizes may vary).
-	  In ScreenToMenu only subtract the title height if we actually have
-	  a title.
-	* MdiWindowManager.cs: Override MenuHeight to always return 0, since
-	  mdi children never have menus of themselves.
-	* InternalWindowManager.cs: Implement menu handling like form does.
-	  Added GetMenuOrigin to calculate the menu origin, can't use the
-	  CreateParams from the form like normally since it's lying.
-	* Hwnd.cs: Implement GetBorderSize better (in the sense more
-	  windows-like) and add Inflate and comparison operators to the
-	  Borders type. When calculating MenuOrigin and it's a form with a
-	  window manager, use the window manager to calculate it.
-
-2007-04-17  Chris Toshok  <toshok at ximian.com>
-
-	* Control.cs (CreateControl): turns out in 2.0 we don't need this
-	OnBindingContextChanged thing here.  It's only generated from
-	ContainerControl.OnCreateControl.  Fixes a newly written unit test
-	- BindingTest.BindingContextChangedTest4.
-	
-2007-04-17  Jackson Harper  <jackson at ximian.com>
-
-	* ScrollBar.cs: When setting values, make sure the current
-	position stays within the new values range.
-
-2007-04-17  Chris Toshok  <toshok at ximian.com>
-
-	* Control.cs (CreateControl): talk about a bizarre corner case.
-	Don't emit OnBindingContextChanged here if we're a parentless
-	control (i.e. if we're a form.).  Fixes
-	BindingTest.BindingContextChangedTest2.
-
-2007-04-17  Everaldo Canuto  <everaldo at simios.org>
-
-	* ButtonBase.cs: Remove TextFormatFlags.WordBreak to mimic same behavior 
-	from win32. Fixes #81255.
-
-2007-04-17  Everaldo Canuto  <everaldo at simios.org>
-
-	* ThemeWin32Classic.cs: Remove text offset from DrawButtonText as it is
-	already present in CalculateButtonTextAndImageLayout.
-
-2007-04-17  Rolf Bjarne Kvinge <RKvinge at novell.com> 
-
-	* XplatUIX11.cs: When setting min/max size for a window we need to
-	  translate the coordinates to x coordinates. Create an overload of
-	  SetWindowMinMax that takes a CreateParams handling this, and change
-	  SetWMStyles to call this function (can't use Control.FromHandle in
-	  the SetWindowMinMax to get the control/CreateParams from the handle
-	  because the handle might not have been assigned to the control
-	  yet). Fixes #81371.
-
-2007-04-16  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* ListView.cs: In ItemControl.ItemMouseDown, don't change check state
-	if StateImageList is non-null and it has less than two items (match MS
-	behaviour). Also, in HandleNavKeys handle the Space key, calling
-	the new ToggleItemsCheckState method, which tries to change the
-	checked state of the selected items. Fixes part of #81191.
-
-2007-04-16  Jackson Harper  <jackson at ximian.com>
-
-	* RichTextBox.cs: namespace cleanup.
-
-2007-04-16  Everaldo Canuto  <everaldo at simios.org>
-
-	* XplatUIWin32.cs: Back last parameter to true in SetClipRegion.
-
-2007-04-16  Everaldo Canuto  <everaldo at simios.org>
-
-	[Fixes #79447]
-	* Control.cs: Call invalidate in set_Region.
-
-	* XplatUIX11.cs, XplatUIWin32.cs: Remove invalidate from SetClipRegion as
-	it dont	works here.
-
-2007-04-16  Jackson Harper  <jackson at ximian.com>
-
-	* TextBoxBase.cs: When enter is pressed, we need to update all
-	lines below the current.
-
-2007-04-16  Jonathan Pobst  <jpobst at monkey.com>
-
-	* MdiClient.cs: Implement implicit menu merging for MDI
-	children.  When a child form is active, if it has a menustrip
-	and the parent form has a MainMenuStrip, automatically merge
-	the menus.
-
-2007-04-15  Andreia Gaita  <avidigal at novell.com>
-
-	* TabControl.cs: Refactored sizing methods to not repeat
-	code all over the place. Tab bounds are now calculated
-	as if alignment is top and single line, and only when 
-	setting the bounds are the positions adjusted according
-	to alignment. Replaced hardcoded positions, spacings and
-	paddings by getting the values the ThemeEngine. 
-	Fixes #79619.
-	
-	* Theme.cs: Change TabControl properties and methods so
-	that all start with TabControl*. Added more properties
-	to help remove hardcoded values on tabcontrol.
-	Add CPDrawBorder3D declaration so the Theming classes
-	can access it.
-	
-	* ThemeClearlooks.cs, ThemeNice.cs: Method signature changes from Theme.
-
-	* ThemeWin32Classic.cs: Rector TabControl out to the TabControlPainter
-	on the Theming namespace, and call the appropriate methods here.
-	Change CPDrawBorder3D to public.
-
-2007-04-13  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* Control.cs: In WmRButtonUp, send the WM_CONTEXTMENU message to
-	the control after firing the OnMouseUp event, instead of sending
-	the message before the mentioned event. This is so we can match the
-	MS behaviour. Fixes part of #80385.
-
-2007-04-13  Jonathan Pobst  <monkey at jpobst.com>
-
-	* ToolStripItem.cs: Call the RightToLeftChanged event when setting the
-	RightToLeft property.
-
-2007-04-13  Jonathan Pobst  <monkey at jpobst.com>
-
-	* ToolStrip.cs: Add properties and internal methods to support merging.
-	* ToolStripItem.cs: Add MergeAction and MergeIndex.
-	* ToolStripItemCollection.cs: Add Insert and Remove methods that do
-	not trigger reparenting or layouts.
-	* ToolStripManager.cs: Add Merge and RevertMerge methods.
-	* ToolStripOverflow.cs: Add a convenience method to find the ToolStrip that
-	is hosting the overflow menu.
-
-2007-04-13  Jackson Harper  <jackson at ximian.com>
-
-	* TextControl.cs: Set the line ending correctly for the first
-	inserted line.
-
-2007-04-13  Sebastien Pouliot  <sebastien at ximian.com>
-
-	* Theme.cs: Update GetMethod to get the new definition for 
-	KnownColors.Update (and fix theme color updates).
-
-2007-04-12  Everaldo Canuto  <everaldo at simios.org>
-
-	* MessageBox.cs: Fix some test and button position.
-
-2007-04-12  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* Form.cs: Consider the implicit controls in
-	GetRealChildAtPoint. We need it since this method
-	is called on Form when handling the some messages in
-	WndProc, and need to consider those implicit ones too.
-	Fixes #80385.
-
-2007-04-12  Jonathan Pobst  <monkey at jpobst.com>
-
-	* ToolStripMenuItem.cs: Display the ShortcutKeyDisplayString even
-	if there are no ShortcutKeys set.
-	* ToolStripProfessionalRenderer.cs: If an item has had its BackColor
-	set, use it when painting.
-
-2007-04-12  Jackson Harper  <jackson at ximian.com>
-
-	* TextControl.cs: Fix some off-by-one issues in line duplication
-	and insertion in the undo manager. Also, overwrite the first tag
-	of a line on insert, if it is just a zero lengthed tag. This
-	prevents us from getting an extra stranded tag at the beginning of
-	the first line.
-
-2007-04-11  Everaldo Canuto  <everaldo at simios.org>
-
-	* Label.cs: Remove check for handle created in CalcAutoSize, we need 
-	to calculated proper size including when handle was not created yet.
-
-2007-04-11  Rolf Bjarne Kvinge <RKvinge at novell.com> 
-
-	* MdiWindowManager.cs: When moving a form, allow the form to be moved
-	  when the mouse is outside of it's parent's client rectangle. Fixes
-	  #79982 (take 3, part 2).
-
-2007-04-10  Rolf Bjarne Kvinge <RKvinge at novell.com> 
-
-	* X11Structs.cs: Add a few ToString() overrides.
-	* XplatUIX11.cs: Added GetTopLevelWindowLocation to try to calculate
-	  the window location in a window-manager independent way. Reworked
-	  FrameExtents, it now actually works. Reworked AddConfigureNotify
-	  and ReparentNotify handling to use GetTopLevelWindowLocation
-	  instead of the earlier, more hacky solution. Reworked SetWMStyles,
-	  hopefully for the better: we now set _NET_WM_WINDOW_TYPE* for all
-	  windows, DIALOG for modal windows, UTILITY for toolboxes and NORMAL
-	  for all other windows (fixes #81281 part 1), a toolwindow is hidden
-	  from the taskbar if it has a parent (fixes #81281 part 2 for kwin),
-	  and generally refactored to do as few calculations as possible
-	  inside the lock.
-
-2007-04-09  Sebastien Pouliot  <sebastien at ximian.com>
-
-	* Theme.cs: Change "reflective-contract" between MWF and SD to 
-	minimize # of calls, avoid Color serialization and avoid updating 
-	every "known colors" each time a single one is updated.
-
-2007-04-09  Gert Driesen  <drieseng at users.sourceforge.net>
-
-	* DataGridTextBoxColumn.cs: Only set IsInEditOrNavigateMode to false
-	when not readonly and the text is explicitly set. Code style updates.
-	* DataGridTableStyle.cs: Removed extra line.
-	* DataGrid.cs: Code style updates. Removed extra whitespace.
-	* DataGridColumnStyle.cs: Code style updates. Removed extra 
-	whitespace.
-
-2007-04-09  Rolf Bjarne Kvinge <RKvinge at novell.com> 
-
-	* XplatUIX11.cs: Added comment that "fixes" #80021.
-
-2007-04-09  Jackson Harper  <jackson at ximian.com>
-
-	* TextControl.cs: We don't need this -1 on the line count anymore.
-
-2007-04-09  Gert Driesen  <drieseng at users.sourceforge.net>
-
-	* DataGridTextBoxColumn.cs: In Commit, use TypeConverter to convert
-	entered value to underlying type, and convert it back to a string to
-	apply formatting. Modified GetFormattedValue to use TypeConverter
-	if available.
-
-2007-04-08  Gert Driesen  <drieseng at users.sourceforge.net>
-
-	* ListViewItem.cs: Added null checks. Avoid duplicating code in ctors.
-	Use SubItems property when we want to ensure there's at least one
-	subitem. Modified SubItems property to ensure there's always at least
-	one subitem. Avoid using ListViewSubItemCollection.AddRange to match
-	the NRE's reported by MS.
-
-2007-04-07  Gert Driesen  <drieseng at users.sourceforge.net>
-
-	* ProgressBar.cs: On 2.0 profile, default forecolor is Highlight. Added
-	ResetForeColor override on 2.0. Fixed a few API compatibility issues.
-	Spaces to tabs. Removed extra tabs.
-
-2007-04-06  Jonathan Pobst  <monkey at jpobst.com>
-
-	* ToolStripSplitStackLayout.cs: If we run out of things to hide, don't
-	infinite loop.  (Forgot to copy to the horizontal toolstrip case.)
-
-2007-04-06  Jackson Harper  <jackson at ximian.com>
-
-	* TextBoxBase.cs: When a delete removes a line, recalculate all
-	lines below that line (they need to get offsets setup correctly)
-	and invalidate.
-
-2007-04-05  Jackson Harper  <jackson at ximian.com>
-
-	* TextControl.cs: We need to invalidate across the width of the
-	document when we are invalidating multiple lines.
-	* TextBoxBase.cs: Don't delete into the line ending.
-
-2007-04-05  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* ListView.cs: Restore the check for the MouseHover event
-	in ListView. It looks like the ListView fires more than one MouseHover
-	event when HoverSelection is true  _only_ in weird-corner scenarios, but
-	in most of the cases it only fires one. Also, add the 2.0 ItemMouseHover
-	event.
-
-2007-04-05  Mike Kestner  <mkestner at novell.com>
-
-	* ListView.cs : raise MouseDown before updating selection.
-	[Fixes #80373 tab 1&3]
-
-2007-04-05  Jonathan Pobst  <monkey at jpobst.com>
-
-	* ToolStripRenderer.cs: Add static method to mirror image.
-	* ToolStripProfessionalRenderer.cs: Support ImageTransparentColor
-	and RightToLeftAutoMirrorImage.
-	* ToolStripItem.cs: Remove MonoTODO from ImageTransparentColor.
-
-2007-04-05  Jonathan Pobst  <monkey at jpobst.com>
-
-	* ToolStripSplitStackLayout.cs: Support Alignment property.
-	* ToolStripItem.cs: Remove MonoTODO from the Alignment property.
-
-2007-04-05  Jackson Harper  <jackson at ximian.com>
-
-	* TextControl.cs: Move around the line endings when crossing line
-	boundaries.
-	- When combining lines, strip the ending text off the first line.
-
-2007-04-05  Jackson Harper  <jackson at ximian.com>
-
-	* TextControl.cs:
-	* TextBoxBase.cs: Try to never move the cursor into the line
-	ending.
-	
-2007-04-04  Jonathan Pobst  <monkey at jpobst.com>
-
-	* ToolStripItem.cs: Make sure we aren't firing mouse events when
-	the item is disabled.  Also add a few missing methods.
-
-2007-04-04  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* ListView.cs: We don't need the MouseEnter/MouseLeave check
-	to fire just one MouseHover event when HoverSelection is true, since
-	.Net does fire more than one MouseHover event in that scenario. Also,
-	fix the selection in HoverSelection, by invoking UpdateMultiSelect
-	if MultiSelect is true, instead of only setting ListViewItem.Selected.
-	Finally, we need to reset the Hover logic in MouseMove, even when we
-	don't have a selected item.
-
-2007-04-04  Jonathan Pobst  <monkey at jpobst.com>
-
-	* ToolStrip.cs: Add several missing methods, properties, and events.
-
-2007-04-04  Chris Toshok  <toshok at ximian.com>
-
-	* DataGridTextBoxColumn.cs: set the bounds of the text box to
-	(0,0,0,0) in Commit, as MS does.
-
-	* DataGrid.cs: call EndEdit() from Select() as microsoft does, and
-	make sure we set CurrentRow on a row header click *before* calling
-	Select.  This moves the current cell (and the textbox) to the new
-	row.  The call to Select then hides the textbox, giving us the
-	correct behavior.  Fixes #80362.
-
-	* CurrencyManager.cs (UpdateIsBinding): raise ItemChanged (-1).
-	(ListChangedHandler): reorder the position/current changed events,
-	and call UpdateIsBinding in the ItemAdded case.
-
-	* GridColumnStylesCollection.cs: add some columns events, one of
-	which raises the CollectionChanged event.
-
-2007-04-04  Jackson Harper  <jackson at ximian.com>
-
-	* TextControl.cs: When we delete multiple selection lines
-	invalidate the selection area, don't need to do that for single
-	lines because the final update view will handle it.
-
-2007-04-04  Jonathan Pobst  <monkey at jpobst.com>
-
-	* Control.cs: When we CreateControl, we need to also create all of the
-	control's children.  The child's OnLoad must also fire before the parent's
-	OnLoad.  Fixes the toolbox size in PDN.
-
-2007-04-04  Jackson Harper  <jackson at ximian.com>
-
-	* TextBoxBase.cs: When the user presses enter, insert a line
-	ending into the text. (Maybe this would be a good spot for
-	Environment.NewLine).
-	* TextControl.cs: Remove undo manager hack, line endings get
-	inserted properly now.
-	
-2007-04-04  Everaldo Canuto  <everaldo at simios.org>
-
-	* MenuAPI.cs: 
-	- Remove unneeded parameters in UpdateCursor.
-	- Fix UpdateCursor to check if menu is active.
-	- Call UpdateCursor when menu deactivate my click.
-	[Fixes remaining issues from #80410]
-
-2007-04-04  Everaldo Canuto  <everaldo at simios.org>
-
-	* Control.cs: GetRealChildAtPoint method added, it make an
-	recursive child control search for the point. 
-
-	* Form.cs: Makes use of GetRealChildAtPoint in mouse event after closes
-	menu.
-
-	* MenuAPI.cs: Makes use of GetRealChildAtPoint in UpdateCursor.
-
-2007-04-03  Everaldo Canuto  <everaldo at simios.org>
-
-	* Form.cs: Fix mouse position when send back mouse event after closes
-	menu.
-
-2007-04-03  Everaldo Canuto  <everaldo at simios.org>
-
-	* Form.cs: Simplify the BUTTONDOWN for active tracker.
-
-2007-04-03  Jonathan Pobst  <monkey at jpobst.com>
-
-	* Control.cs: Fix an issue where if a user resized a control inside
-	a sizing method like OnResize, we would overwrite their explicit
-	value.  Also, only call DefaultSize once in the constructor instead
-	of 4 times.  Also, do not call SetBoundsCore from SetBounds if 
-	nothing actually changed.
-
-2007-04-03  Jackson Harper  <jackson at ximian.com>
-
-	* TextControl.cs: Don't attempt to copy text for lines with no
-	text in them (technically this shouldn't happen, but we aren't
-	always inserting line endings when we should be).
-
-2007-04-03  Jackson Harper  <jackson at ximian.com>
-
-	* TextBoxBase.cs: Calculate the scrollbars before calculating the
-	document, because this sets some of the document size properties
-	that are needed.
-
-2007-04-03  Jackson Harper  <jackson at ximian.com>
-
-	* TextBoxBase.cs: We need to calculate maximums even if this is
-	not a multiline control, because the maxs are used for scrolling.
-	- Display the caret after doing a page up/down, we need to
-	manually display it because a proper CaretMoved event isn't
-	triggered (this is because of the way the math is done to
-	determine how far to scroll).
-
-2007-04-03  Jonathan Pobst  <monkey at jpobst.com>
-
-	* ToolBar.cs: Fix some breakage caused by the SetBoundsCore change.
-	(ToolBar was relying on SetBoundsCore to default the values sent 
-	base off of BoundsSpecified.)
-
-2007-04-03  Rolf Bjarne Kvinge <RKvinge at novell.com> 
-
-	* DateTimePicker.cs: Change Text so that when a null value or empty
-	  string is assigned to the test we always raise ValueChanged and
-	  TextChanged (earlier implementation would only raise ValueChanged
-	  if the current date value was different from DateTime.Now).
-
-2007-04-03  Andreia Gaita <avidigal at novell.com> 
-
-	* ButtonBase: Call update after invalidation, fixes #80194
-
-2007-04-03  Rolf Bjarne Kvinge <RKvinge at novell.com> 
-
-	* ThemeWin32Classic.cs: Draw StatusBar using double buffering. Fixes
-	  #79335.
-
-2007-04-03  Rolf Bjarne Kvinge <RKvinge at novell.com> 
-
-	* XplatUIX11.cs: SetWMStyles: If the control is a form with
-	  FormBorderStyle = None, don't give the window any decorations.
-	  Fixes #81276.
-
-2007-04-03  Rolf Bjarne Kvinge <RKvinge at novell.com> 
-
-	* XplatUI.cs, XplatUIDriver.cs: Updated CalculateWindowRect parameters.
-	* CreateParams.cs: Fix IsSet, wasn't working correctly when the style
-	  to check for is a mix of several styles (such as WS_CAPTION for
-	  instance).
-	* Control.cs: Don't paint an area bigger than the client area when
-	  painting the background colour. Add an internal GetCreateParams.
-	  Update calls to XplatUI.CalculateWindowRect due to API change.
-	* XplatUIX11.cs: In PerformNCCalc set the initial size to the whole
-	  window's size, and handle WM_NCCALCSIZE in DefWndProc to calculate
-	  the size if it hasn't been handled by any windows. When creating
-	  and moving windows, X wants the location of the entire window, but
-	  the size of the client window, so add
-	  TranslateClientRectangleToXClientRectangle,
-	  TranslateWindowSizeToXWindowSIze and
-	  TranslatedXWindowSizeToWindowSize to cope with this, and call them
-	  before every window creation and move. Update CalculateWIndowRect
-	  to use Hwnd.GetWindowRect (one step towards removing DeriveStyles).
-	  In AddConfigureNotify don't do anything if the hwnd is a zombie
-	  (fixes the BadWindow we were getting while running the tests),
-	  always calculate the offsets when it's a parentless window, not
-	  only when reparented, and translate the window size, since we're
-	  getting the client size of the whole window, excluding entire
-	  window.
-	* Theme.cs: Added BorderSizableSize.
-	* XplatUIWin32.cs: Fix RECT Height and Width. Don't fake styles here
-	  anymore. Update calls to XplatUI.CalculateWindowRect due to API
-	  chang
-	* Form.cs: Update calls to XplatUI.CalculateWindowRect due to API
-	  change. Fake the window styles here instead of in XplatUIWin32 so
-	  that all back-ends get the same window styles (and it's Form that's
-	  deciding when to use wm, not the Win32 backend anyways)
-	* Hwnd.cs: Completely reworked GetWindowRectangle and
-	  GetClientRectangle - they are now passed a CreateParams and they
-	  only use Style and ExStyle to determine the rectangles (they should
-	  now work just like Win32AdjustWindowRectEx - though quite a few
-	  special cases are probably missing). They should also be 100%
-	  complimentary (i.e. GetWindowRectangle (GetClientRectangle (rect))
-	  == rect), and all numbers (borders, menu sizes) are taken from the
-	  current theme. Added a GetBorders helper function that will return
-	  the borders for any given CreateParams (including captions and
-	  menus), and GetBorderSize that returns the given border size only.
-	* XplatUIOSX.cs: Update calls to CalculateWindowRect and
-	  Hwnd.GetClientRectangle.
-
-2007-04-02  Chris Toshok  <toshok at ximian.com>
-
-	* DataGridBoolColumn.cs: rewrite things a bit, and fix up the
-	logic between the values we present to the user and the values
-	which are stored in the column's property.  Also, don't call
-	GetPreferredSize - it's virtual. Along the way, fix bug #80965.
-
-2007-04-02  Jackson Harper  <jackson at ximian.com>
-
-	* TextBoxBase.cs: Scroll faster!
-
-2007-04-02  Jonathan Pobst  <monkey at jpobst.com>
-
-	* StatusStrip.cs: Layout fixes for PDN.
-	* ToolStrip.cs: Set item's available to true, and placement to main when
-	added.
-	* ToolStripItem.cs: Fix an Available issue, check that Parent is really
-	changing in setter before doing any work, add InternalVisible.
-	* ToolStripPanel.cs: Remove unused variable to fix compiler warning.
-	* ToolStripSplitStackLayout.cs: If we run out of things to hide, don't
-	infinite loop.
-
-2007-04-02  Jackson Harper  <jackson at ximian.com>
-
-	* TextBox.cs: LBUTTON does not make the textbox select all of it's
-	text on focus.
-
-2007-04-02  Rolf Bjarne Kvinge <RKvinge at novell.com> 
-
-	* XplatUIWin32.cs: Use the previous change in SetParent for forms only.
-	  Makes ToolStripComboBoxes show up again.
-
-2007-04-02  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* ListView.cs: Add a hover_pending field in ListView
-	to fire just one OnMouseHover event for each MouseEnter/MouseLeave
-	cycle (we are resetting the MouseHover logic in XplatUI
-	to handle HoverSelection). Fixes #80429.
-
-2007-04-02  Jackson Harper  <jackson at ximian.com>
-
-	* TextControl.cs: Make sure the attributes get set on the last
-	tag.
-	- Still have to do the end tag if we have stepped all the ways to
-	the end.
-
-2007-04-02  Sebastien Pouliot  <sebastien at ximian.com>
-
-	* XplatUIOSX.cs, XplatUIX11.cs, XplatUIX11GTK.cs: Remove dependency
-	on an internal libgdiplus call when the information is already 
-	available via the public API.
-
-2007-04-02  Rolf Bjarne Kvinge <RKvinge at novell.com> 
-
-	* Control.cs: Call ContainerControl.ChildControlRemoved whenever a
-	  control is removed from a control collecftion.
-	* XplatUIX11.cs: The first location for toplevel form is (22, 22).
-	  Fixes FormPropertyTest (failed on rare occasions).
-	* XplatUIWin32.cs: Add a workaround in SetParent for strange behaviour
-	  of Win32SetParent (when changing from no parent to a parent it
-	  might add the new parent's location in screen coordinates to this
-	  window's location).
-	* Form.cs: Rework ChangingParent once again, now the handle is
-	  recreated whenever a FormWindowManager is added or removed (that is
-	  whenever a normal form is parented or abandoned). Also change
-	  CreateParams so that all non-toplevel windows always get the
-	  specified sice (StartupPosition is never considered for
-	  non-TopLevel forms).
-	* ContainerControl.cs: Add ChildControlRemoved, the container control
-	  needs to be notified when a control is removed from it's
-	  collection, in the case the removed control is the active control.
-
-2007-04-02  Jackson Harper  <jackson at ximian.com>
-
-	* RichTextBox.cs: Use the new methods for setting the font and
-	color, these methods set the specified attribute without
-	overriding the other attributes.
-
-2007-04-02  Jonathan Pobst  <monkey at jpobst.com>
-
-	* ToolStripPanel.cs: Fixes for better layouts in PDN.
-
-2007-03-31  Gert Driesen  <drieseng at users.sourceforge.net>
-
-	* TextBox.cs: Added internal ChangeBackColor method to special-case
-	Color.Empty. Added check for invalid ScrollBars value.
-	* TextBoxBase.cs: Added internal ChangeBackColor method.
-	* RichTextBox.cs: Only set backcolor_set on 2.0 profile. Added
-	internal ChangeBackColor method to special-case Color.Empty. Added
-	check for invalid ScrollBars value.
-
-2007-03-30  Everaldo Canuto  <everaldo at simios.org>
-
-	* MenuItem.cs: On invalidate prevent form to create handle. [Fixes #81272]
-
-2007-03-30  Jonathan Pobst  <monkey at jpobst.com>
-
-	* ScollableControl.cs: Add HorizontalScroll and VerticalScroll properties.
-	* ScrollProperties.cs, HScrollProperties.cs, VScrollProperties.cs: Added.
-	[Based on submitted patch from Olivier Duff.]
-
-2007-03-30  Jackson Harper  <jackson at ximian.com>
-
-	* TextBox.cs: Only select all on initial focus if the user has not
-	specified a selection area.
-
-2007-03-30  Jonathan Pobst  <monkey at jpobst.com>
-
-	* UserControl.cs: Override CreateParams.
-
-2007-03-30  Rolf Bjarne Kvinge <RKvinge at novell.com> 
-
-	[ Fixes #80995 ]
-
-	* XplatUI.cs, XplatUIDriver.cs: Updated CalculateWindowRect parameters.
-	* CreateParams.cs: Fix IsSet, wasn't working correctly when the style to
-	  check for is a mix of several styles (such as WS_CAPTION for instance).
-	* Control.cs: Don't paint an area bigger than the client area when painting
-	  the background colour. Add an internal GetCreateParams. Update calls to
-	  XplatUI.CalculateWindowRect due to API change.
-	* XplatUIX11.cs: In PerformNCCalc set the initial size to the whole window's
-	  size, and handle WM_NCCALCSIZE in DefWndProc to calculate the size if it
-	  hasn't been handled by any windows. When creating and moving windows, X
-	  wants the location of the entire window, but the size of the client
-	  window, so add TranslateClientRectangleToXClientRectangle,
-	  TranslateWindowSizeToXWindowSIze and TranslatedXWindowSizeToWindowSize
-	  to cope with this, and call them before every window creation and move.
-	  Update CalculateWIndowRect to use Hwnd.GetWindowRect (one step towards
-	  removing DeriveStyles). In AddConfigureNotify don't do anything if the
-	  hwnd is a zombie (fixes the BadWindow we were getting while running the
-	  tests), always calculate the offsets when it's a parentless window, not
-	  only when reparented, and translate the window size, since we're getting
-	  the client size of the whole window, excluding entire window.
-	* Theme.cs: Added BorderSizableSize.
-	* XplatUIWin32.cs: Fix RECT Height and Width. Don't fake styles here
-	  anymore. Update calls to XplatUI.CalculateWindowRect due to API change.
-	* Form.cs: Update calls to XplatUI.CalculateWindowRect due to API change.
-	  Fake the window styles here instead of in XplatUIWin32 so that all
-	  back-ends get the same window styles (and it's Form that's deciding when
-	  to use wm, not the Win32 backend anyways)
-	* Hwnd.cs: Completely reworked GetWindowRectangle and GetClientRectangle -
-	  they are now passed a CreateParams and they only use Style and ExStyle
-	  to determine the rectangles (they should now work just like
-	  Win32AdjustWindowRectEx - though quite a few special cases are probably
-	  missing). They should also be 100% complimentary (i.e. GetWindowRectangle
-	  (GetClientRectangle (rect)) == rect), and all numbers (borders, menu
-	  sizes) are taken from the current theme. Added a GetBorders helper
-	  function that will return the borders for any given CreateParams
-	  (including captions and menus), and GetBorderSize that returns the given
-	  border size only.
-	* XplatUIOSX.cs: Update calls to CalculateWindowRect and
-	  Hwnd.GetClientRectangle.
-
-2007-03-30  Rolf Bjarne Kvinge <RKvinge at novell.com> 
-
-	* Form.cs: Don't layout mdi children on MdiParent creation, the initial
-	  layout of the mdi children is handled by CreateParams. Fixes
-	  #79964,
-
-2007-03-29  Everaldo Canuto  <everaldo at simios.org>
-
-	* MenuAPI.cs: Make OnMouseDown returns a boolean to identify if event is
-	processed.
-
-	* Form.cs: When active tracker mouse down is not processed, send event 
-	back to control inside mouse position. [Fixes #81227]
-
-2007-03-29  Jonathan Pobst  <monkey at jpobst.com>
-
-	* ComboBox.cs: Override the ComboListBox's ActivateOnShow property and
-	remove WS_VISIBLE from CreateParams to prevent combobox dropdowns from
-	stealing focus from the active form on Windows.  (Control will be made
-	visible in ShowWindow.)
-
-2007-03-29  Mike Kestner  <mkestner at novell.com>
-
-	* ImageList.cs : add internal Changed event.
-	* ListView.cs : hook up to StateImageList.Changed to perform
-	invalidations when the the state icon list changes. [Fixes #81191]
-
-2007-03-29  Jonathan Pobst  <monkey at jpobst.com>
-
-	* ToolTip.cs: Override the ToolTipWindow's ActivateOnShow property
-	to prevent tooltips from stealing focus from the active form on Windows.
-
-2007-03-29  Everaldo Canuto  <everaldo at simios.org>
-
-	* ThemeWin32Classic.cs: Small stetic fixes in notifyicon balloon. 
-
-	* ThemeClearlooks.cs: Implement notifyicon balloon for clearlooks theme.
-
-2007-03-29  Everaldo Canuto  <everaldo at simios.org>
-
-	* NotifyIcon.cs, ThemeWin32Classic.cs: Icon support added to notifyicon
-	balloons.
-
-2007-03-29  Jackson Harper  <jackson at ximian.com>
-
-	* TextControl.cs: When deleting text from non multiline textboxes,
-	we need to update the entire document, because line offsets will
-	be shifting.
-
-2007-03-29  Everaldo Canuto  <everaldo at simios.org>
-
-	* XplatUIX11.cs, ThemeWin32Classic.cs, Theme.cs: ShowBalloonWindow method
-	added to theme, now we can create themes that uses diferent notify engines
-	like notification-daemon from galago project or growl for Mac OS.
-
-2007-03-28  Everaldo Canuto  <everaldo at simios.org>
-
-	* NotifyIcon.cs: Prevent Balloon to show in task bar.
-
-2007-03-28  Everaldo Canuto  <everaldo at simios.org>
-
-	* XplatUIX11.cs: Prevent system to open more than one balloon.
-
-	* NotifyIcon.cs: Prevent system to open more than one balloon and remove
-	some compiler warning messages.
-
-2007-03-28  Everaldo Canuto  <everaldo at simios.org>
-
-	[Fixes #79149]
-
-	* XplatUIX11.cs: Implement SystrayBalloon for X11 systems.
-
-	* ThemeWin32Classic.cs, Theme.cs: DrawBalloonWindow and BalloonWindowRect 
-	implemented, this methods is used by NotifyIcon.BalloonWindow class.
-
-	* NotifyIcon.cs: BalloonWindow class added to support Balloon in X11 
-	systems.
-
-2007-03-28  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* ListViewItem.cs: Forgot to make Invalidate internal.
-
-2007-03-28  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* ListView.cs: Add a InvalidateSelection method to
-	invalidate methods which are currently selected, and call
-	it when setting FullRowSelect and HideSelection, instead of
-	calling Redraw.
-
-2007-03-28  Chris Toshok  <toshok at ximian.com>
-
-	* XplatUIX11.cs (UnmapWindow): reindent this block.
-
-	* DataGrid.cs (UpdateSelectionAfterCursorMove): we need to update
-	the selection_start if we're moving the selection (that is, not
-	extending it). Fixes bug #80461.
-
-2007-03-28  Jonathan Pobst  <monkey at jpobst.com>
-
-	* ProgressBar.cs: Make the default MarqueeAnimationSpeed = 100.
-	* ToolStripPanel.cs: Fix RowMargin, Renderer, RenderMode, and
-	create private ControlCollection.
-
-2007-03-28  Jonathan Pobst  <monkey at jpobst.com>
-
-	* Control.cs: We need to call OnVisibleChanged for our implicit
-	children as well as our normal children.  Fixes scrollbars in
-	comboboxes not showing up.
-
-2007-03-28  Jonathan Pobst  <monkey at jpobst.com>
-
-	* Control.cs, Form.cs: Anywhere we call CreateHandle, we need to do
-	the check for IsHandleCreated first.  The check in CreateHandle is not
-	good enough because CreateHandle can be overriden, and the override 
-	should not be called if the handle is already created.
-
-2007-03-28  Jonathan Pobst  <monkey at jpobst.com>
-
-	* ToolStrip.cs: Remove MonoTODO for tooltips.
-	* ToolStripComboBox.cs: Fix MonoTODO for DropDownHeight and events.
-	* ToolStripContainer.cs: Add custom ControlCollection class.
-	* ToolStripContentPanel.cs: Fix Renderer setting to match MS behavior.
-	* ToolStripDropDown.cs: Add some missing properties/methods.
-	* ToolStripDropDownMenu.cs: Override OnLayout and SetDisplayedItems.
-	* ToolStripItem.cs: Remove MonoTODO for tooltips.
-	* ToolStripManager.cs: Add IsShortcutDefined.
-	* ToolStripOverflow.cs: Override LayoutEngine.
-	* ToolStripProgressBar.cs: Add MarqueeAnimationSpeed.
-	* ToolStripSeparator.cs: Add ImageKey.
-
-2007-03-28  Jackson Harper  <jackson at ximian.com>
-
-	* TextControl.cs: If a char delete removes a line ending, we need
-	to update the ending style.
-	- Make sure the line ending calcs get called.
-
-2007-03-28  Rolf Bjarne Kvinge <RKvinge at novell.com> 
-
-	* XplatUIX11.cs: CreateWindow: Remove old default form location code,
-	  it was making the new code not work. Fixed a typo in the new code
-	  as well. Fixes #79826.
-
-2007-03-27  Everaldo Canuto  <everaldo at simios.org>
-
-	* XplatUIWin32.cs:
-	- NIF_STATE and NIF_INFO added to NotifyIconFlags.
-	- NOTIFYICONDATA properties sizes fixed, szTip is 128, not 64.
-	- SystrayBalloon method implemented.
-	[Add support for notifyicon balloon on win32, #79149]
-
-2007-03-27  Mike Kestner  <mkestner at novell.com>
-
-	* ThemeWin32Classic.cs : update StateImageList selection to mirror
-	the ms behavior when only one image is added to the list.
-	[Fixes #81191]
-
-2007-03-27  Jackson Harper  <jackson at ximian.com>
-
-	* TextControl.cs: Improvements to non multiline line ending
-	drawing/measuing.
-
-2007-03-27  Everaldo Canuto  <everaldo at simios.org>
-
-	* XplatUIX11.cs: Fix the time which tooltip is opened for NotifyIcon. 
-
-2007-03-27  Everaldo Canuto  <everaldo at simios.org>
-
-	* NotifyIcon.cs: 
-	- Balloon message handling added.
-	- Call XplatUI.SystrayBalloon in ShowBalloonTip. 
-
-	* XplatUI.cs, XplatUIDriver.cs, XplatUIX11.cs, XplatUIWin32.cs,	
-	XplatUIOSX.cs, XplatUIX11-new.cs: ShowBalloonTip method renamed 
-	to SystrayBalloon to me like other Systray method, also a
-	handle parameter added.
-
-2007-03-27  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* ListView.cs: Show scrollbars even when items.Count == 0
-	but the columns Width is bigger than the ListView.Width.
-	Also, when columns.Count == 0 set layout_wd and layout_ht
-	to the ClientRectangle values, so we don't show any scrollbar
-	in that case.
-
-2007-03-27  Everaldo Canuto  <everaldo at simios.org>
-
-	* XplatUIStructs.cs: Balloon (NIN_BALLOON*) constants added.
-
-2007-03-27  Jackson Harper  <jackson at ximian.com>
-
-	* RichTextBox.cs: The RTF library decodes the text properly for us
-	now.
-
-2007-03-27  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* ListView.cs: Display HeaderControl even when columns.Count == 0.
-	* ThemeWin32Classic.cs: Use SystemBrushes.Control to draw the
-	ListView header (HeaderControl), instead of Control.BackColor.
-
-2007-03-27  Jonathan Pobst  <monkey at jpobst.com>
-
-	* Control.cs: Call OnVisibleChanged in SetVisibleCore for non-forms.
-	Fixes tab control issues where controls would not show up because they
-	never received their OnVisibleChanged call.
-
-2007-03-27  Everaldo Canuto  <everaldo at simios.org>
-
-	* NotifyIcon.cs: Balloon events added (BalloonTipClicked, BalloonTipClosed,
-	BalloonTipShown).
-
-2007-03-27  Jonathan Pobst  <monkey at jpobst.com>
-
-	* Control.cs: We won't get a WM_SHOWWINDOW when we create a window that
-	is maximized or minimized, so move CreateControl to Control.OnVisibleChanged.
-	* Form.cs: After we set the form visible, send a fake WM_SHOWWINDOW if we
-	are max or min.  Remove WS_VISIBLE from CreateParams unless we are recreating
-	the handle.  Fix WindowState by using the internal variable until we are 
-	sure that we've been shown.
-	* XplatUIX11.cs: Do not generate a WM_SHOWWINDOW message if new form is
-	max or min.
-	[Fixes bug #81198]
-
-2007-03-27  Rolf Bjarne Kvinge <RKvinge at novell.com> 
-
-	* XplatUIX11.cs: Windows without WS_CAPTION can still get decorations
-	  (at least borders). Fixes #79386 on Linux (with a small difference
-	  in behaviour: when trying to resize a caption-less window metacity
-	  shows the sysmenu. Resizing is still possible though).
-	* XplatUIWin32.cs: When setting window styles send request an extra
-	  WM_NCCALCSIZE when it's a form without title (due to no text and no
-	  caption), since Win32 seems to calculate it wrong the first time we
-	  get the message, though the second time things work as they should.
-	* Form.cs: Reorder a few statements in ChangingParent, otherwise the
-	  newly reparented window might show up unparented. Update
-	  CreateParams to exclude WS_DLGFRAME if ControlBox is false and
-	  there's no title text. Fixes #79386.
-
-2007-03-27  Mike Kestner  <mkestner at novell.com>
-
-	* ListBox.cs : don't perform invalidations if the handle hasn't been
-	created.  [Fixes #80753]
-
-2007-03-27  Mike Kestner  <mkestner at novell.com>
-
-	* ListBox.cs : don't adjust top item when SelectedIndex is set to -1.
-	[Fixes #80428]
-
-2007-03-26  Everaldo Canuto  <everaldo at simios.org>
-
-	* XplatUIWin32.cs: Complete NOTIFYICONDATA structure, additional fields 
-	needed to implement Balloon.
-
-2007-03-26  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* ListViewItem.cs: In the constructors that take
-	an array of strings, don't use ListViewSubItemCollection.AddRange
-	method to add items, since we need to have a different behaviour (in
-	the constructors we add an item for each null string, opposed to
-	the behaviour of AddRange, which adds nothing).
-
-2007-03-26  Andreia Gaita  <avidigal at novell.com>
-
-	* NumericUpDown.cs: Fix broken 1.1 api for ParseEditText
-
-2007-03-26  Jackson Harper  <jackson at ximian.com>
-
-	* TextControl.cs: Draw and measure line endings when in non
-	multiline mode.
-	- When searching the text, count the end of the last line as a
-	word boundary.
-
-2007-03-26  Jackson Harper  <jackson at ximian.com>
-
-	* RichTextBox.cs: The selection_start and selection_end don't
-	really track the correct tags for the selection. So we'll manually
-	compute the correct tag here.
-
-2007-03-26  Rolf Bjarne Kvinge <RKvinge at novell.com> 
-
-	* ProgressBar.cs, ThemeWin32Classic.cs: Implemented drawing of Marquee
-	  and Continuous styles. Fixes #79469.
-
-2007-03-26  Jonathan Pobst  <monkey at jpobst.com>
-
-	* ToolStrip.cs: Implement Tooltips.
-	* ToolStripItem.cs: Create internal method for determining tooltip.
-
-2007-03-26  Jonathan Pobst  <monkey at jpobst.com>
-
-	* PropertyGrid.cs: Hide a EditorBrowsable attribute from 1.1 API.
-
-2007-03-26  Everaldo Canuto  <everaldo at simios.org>
-
-	* NotifyIcon.cs: On disposing verify if icon is visible and hide it,
-	it prevents a problem thak keeps icon visible after application 
-	closes on win32.
-
-2007-03-26  Everaldo Canuto  <everaldo at simios.org>
-
-	* NotifyIcon.cs: Balloon properties and methods created.
-
-	* XplatUI.cs, XplatUIDriver.cs, XplatUIX11.cs, XplatUIWin32.cs,	
-	XplatUIOSX.cs, XplatUIX11-new.cs: Implement ShowBalloonTip method.
-
-2007-03-25  Jonathan Pobst  <monkey at jpobst.com>
-
-	* ToolStripComboBox.cs: Default the ComboBox's FlatStyle to Popup.
-
-2007-03-24  Jonathan Pobst  <monkey at jpobst.com>
-
-	* Control.cs: Make SetBoundsCore match MS better.  The BoundsSpecified
-	parameter indicates which aspects were explicit/user-set.
-	* ComboBox.cs, ListBox.cs: Call SetBoundsCore correctly. (no 0 parameters).
-
-2007-03-24  Jonathan Pobst  <monkey at jpobst.com>
-
-	* ProgressBar.cs: Throw AOORE instead of AE for property Value (2.0).
-	* ScrollBar.cs: Throw AOORE instead of AE for properties LargeChange,
-	SmallChange, and Value (2.0).
-	* Timer.cs: Throw AOORE instead of AE for property Interval (2.0).
-
-2007-03-23  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* ListView.cs: Always set item_control.Width in LayoutDetails
-	if View is Details. Setting it later in CalculateScrollBars
-	in a not-so-corner scenario (the sum of columns width is
-	not bigger than the ListView width when handle is created, and then
-	that sum gets bigger by increasing the width of the columns)
-	causes a very weird recursion path (which shouldn't be happening,
-	since header_control sets it in CalculateScrollBars too). This bug
-	appeared after Chris' fixes for handle created issues, so probably
-	it's related to some handle-creation time.
-
-2007-03-23  Chris Toshok  <toshok at ximian.com>
-
-	* DataGrid.cs (GetVisibleRowCount): increase the row count in the
-	case where there's an add row, just so we don't end up in a case
-	where it's not displayed (this happens when the row is partially
-	obscured).  Fixes bug #79574.
-
-2007-03-23  Jackson Harper  <jackson at ximian.com>
-
-	* TextControl.cs:
-	* TextBoxBase.cs:
-	* RichTextBox.cs: Preserve line endings in the lines text buffer,
-	also added an enum that represents the line ending type. 
-
-2007-03-23  Andreia Gaita  <avidigal at novell.com>
-
-	* NumericUpDown.cs: Fix logic so Text and Value properties are not
-	messed with in every method call, but only from DownButton, 
-	UpButton, UpdateEditText() and ValidateText. Fixes #80346
-
-2007-03-23  Chris Toshok  <toshok at ximian.com>
-
-	* DataGridTextBoxColumn.cs (GetFormattedValue): don't try to
-	format objects if the format spec is "".  Fixes bug #80889.
-
-2007-03-22  Miguel de Icaza  <miguel at novell.com>
-
-	* ToolStripPanel.cs (Join): added stubs to build PDN3
-
-	* Control.cs (AutoScrollOffset): Add.
-
-	* SystemInformation.cs (MouseWheelScrollDelta): Expose this
-	property, its only implemented for Win32, on X11 it defaults to
-	some hardcoded value.
-
-	* ToolStripItem.cs (AllowDrop): Add property
-
-2007-03-22  Mike Kestner  <mkestner at novell.com>
-
-	* ListView.cs : in FullRowSelect Details mode, only enable box
-	selection if the user clicks over the "item" column outside of the
-	text area.  Mmmmm, compatibility.  [Fixes #80374 subpart 7]
-
-2007-03-22  Rolf Bjarne Kvinge <RKvinge at novell.com> 
-
-	* Control.cs: ChangeParent: Call Form's ChangingParent even if the
-	  handle is not created yet.
-	* Form.cs: Select: Don't call CreateHandle if the handle is already
-	  created, avoids a stack overflow on Windows when we are recreating
-	  controls.
-	* ScrollableControl.cs: Set the correct z-order for the scrollbars when
-	  they are made visible, and override AfterTopMostControl to keep
-	  them on top when other controls are brought to front.
-	  CalculateCanvas: Scrollbars are only visible if auto_scroll is true
-	  or force_*scroll_visible is true (old implementation always shows
-	  scrollbars when needed, no matter what auto_scroll was set to).
-	* InternalWindowManager.cs: UpdateWindowDecorations: Add a
-	  IsHandleCreated check.
-
-2007-03-22  Andreia Gaita  <avidigal at novell.com>
-
-	* DataGrid.cs: Implement Column and Row auto sizing when double-clicking on
-	row or col separator.
-	* DataGridTextBoxColumn.cs: Implement GetPreferredHeight and GetPreferredSize
-
-2007-03-22  Everaldo Canuto  <everaldo at simios.org>
-
-	* MenuAPI.cs: Remove unneeded check for grab_control in UpdateCursor.
-
-2007-03-22  Everaldo Canuto  <everaldo at simios.org>
-
-	* MenuAPI.cs: UpdateCursor method added, it is calling in OnMotion to update
-	cursor for child controls. In ShowWindow and HideWindow now call SetCursor 
-	every time. Fixes #80410.
-
-2007-03-22  Chris Toshok  <toshok at ximian.com>
-
-	* BindingSource.cs (AddNew): partially implement.
-
-	remove a couple of NotImplementedException's
-	to get bug #81148 closed.
-
-2007-03-22  Everaldo Canuto  <everaldo at simios.org>
-
-	[Fixes #80380]
-	
-	* Control.cs:
-	- UpdateCursor method added to update the screen cursor.
-	- GetAvailableCursor method added to return cursor for enabled tree,
-	it searches for cursor on control and it's parent's for enabled control.
-	- Call UpdateCursor method on setter of Cursor property.
-	- On setter of Enabled call UpdateCursor when it is false, we need to
-	change cursor to normal (or to this parent cursor) because cursor 
-	setting theres no effect to disabled controls.
-	- Some minor source changes to follow the coding style guidelines.
-
-	* XplatUIX11.cs: In MotionNotify only dispatch SET_CURSOR event for enabled 
-	controls.
-
-2007-03-22  Chris Toshok  <toshok at ximian.com>
-
-	* XplatUIX11.cs: ignore the BadPicture errors cairo+render
-	generates.
-
-2007-03-22  Rolf Bjarne Kvinge <RKvinge at novell.com> 
-
-	* XplatUIX11.cs: Implement default locations for forms.
-	* Form.cs: Completely rework startup location for forms. Fixes #79964.
-	* Hwnd.cs: Add previous_child_startup_location (to track the current
-	  startup location for any child forms of the current form) and
-	  previous_main_startup_location (to track the startup location for
-	  the current toplevel form).
-
-2007-03-21  Jonathan Pobst  <monkey at jpobst.com>
-
-	* Control.cs: Don't trigger a layout if an implicit control is added
-	that isn't visible.  Also, don't notify the owner when an implicit control
-	is added.  (Owners shouldn't even know about their implicit controls.)
-
-2007-03-21  Jonathan Pobst  <monkey at jpobst.com>
-
-	* ScrollableControl.cs: Add implicit controls with AddRangeImplicit
-	to save some re-layouts.
-
-2007-03-21  Everaldo Canuto  <everaldo at simios.org>
-
-	* MenuAPI.cs: In ProcessKeys returns false when key is not processed.
-	[Fixes #81203]
-
-2007-03-21  Jonathan Pobst  <monkey at jpobst.com>
-
-	* FlowLayoutSettings.cs, ToolStrip.cs, ToolStripPanel.cs,
-	ToolStripPanelRow.cs: Lazy instantiate the LayoutEngine.
-
-2007-03-21  Mike Kestner  <mkestner at novell.com>
-
-	* ListView.cs : disable selection update for non-left button clicks
-	with mods and over selected items.  [Fixes #80524]
-
-2007-03-20  Jackson Harper  <jackson at ximian.com>
-
-	* TextControl.cs:
-	* TextBoxBase.cs: Allow different types of line endings. \r, \r\n,
-	\r\r\n, \n.
-
-2007-03-20  Rolf Bjarne Kvinge <RKvinge at novell.com> 
-
-	* ComboBox.cs: PreferredHeight seems to be ItemHeight + 6, but there is
-	  very probably a more complicated calculation there. Update the
-	  textbox' ForeColor and BackColor when the ComboBox' colors are
-	  changed. Change the border change in LayoutComboBox to only affect
-	  the textbox, not all the calculations there. Seems to fix most of
-	  #79436.
-
-2007-03-20  Rolf Bjarne Kvinge <RKvinge at novell.com> 
-
-	* ComboBox.cs: Handle Home and End keys as well as all combinations of
-	  modifiers + navigation keys as input keys, enables advanced text
-	  selection in the combobox (like Shift+Left Arrow for instance).
-	  ComboTextBox now overrides Focused and returns whatever
-	  ComboBox.Focused returns, since it really should be focused
-	  whenever the ComboBox is. Fixes #80795. Also make the border around
-	  the text box one pixel bigger, as mentioned in #79436.
-
-2007-03-20  Jackson Harper  <jackson at ximian.com>
-
-	* TreeView.cs: Don't offset the images, this was causing some
-	artifacts when expanding/collapsing with images that were the
-	exact height of the treenode.
-
-2007-03-20  Rolf Bjarne Kvinge <RKvinge at novell.com> 
-
-	* TrackBar.cs: Query the theme for the correct value when the mouse
-	  moves and the thumb is pressed. 
-	* Theme.cs: Added TrackBarValueFromMousePosition
-	* ThemeWin32Classic.cs: Reworked TrackBar drawing. Earlier
-	  implementation was updating the trackbar value when drawing, now
-	  the drawing methods only draw. Fixes #80900. Refactored the
-	  calculations out to TrackBarValueFromMousePosition and
-	  GetTrackBarDrawingInfo, so that TrackBar can get the correct value
-	  according to the mouse position whenever it wants to. Changed the
-	  light coloured pen when drawing the thumb from ControlLight to
-	  ControlLightLight, because the ControlLight is the same colour as
-	  the background so the 3D effect is lost. 
-
-2007-03-20  Everaldo Canuto  <everaldo at simios.org>
-
-	* Form.cs: In ShowDialog uses MainForm as transient form when no form is
-	defined. Fixes #80784.
-
-2007-03-20  Marek Habersack  <mhabersack at novell.com>
-
-	* ContextMenuStrip.cs: align with the change introduced in
-	revision 74664.
-
-2007-03-20  Everaldo Canuto  <everaldo at simios.org>
-
-	* XplatUIDriver.cs, XplatUIOSX.cs, XplatUIWin32.cs, XplatUIX11.cs, 
-	XplatUI.cs, Form.cs, ToolTip.cs: Remove unneeded parameter owner 
-	in SetTopmost.
-
-2007-03-19  Chris Toshok  <toshok at ximian.com>
-
-	* Control.cs (WmPaint): don't make use of the Handle property
-	after an event is emitted, as the user could have closed the
-	form/destroyed the control.  Store the Handle in a local variable
-	and make use of that.  Fixes bug #80768.
-
-2007-03-20  Everaldo Canuto  <everaldo at simios.org>
-
-	* XplatUIX11.cs: Set _NET_WM_STATE_ABOVE on SetTopmost, it fixes Topmost
-	behavior in X11 environments.
-
-2007-03-20  Everaldo Canuto  <everaldo at simios.org>
-
-	* Form.cs: Call SetTopmost in CreateHandle when window is topmost, its
-	because on setter of topmost we dont call SetTopmost when handle is not
-	created.
-
-2007-03-20  Jackson Harper  <jackson at ximian.com>
-
-	* TextControl.cs: Need to use SelectionLength () not
-	selection_length, since that var is reset to -1.
-	- Draw the caret when we don't have focus.
-	* TextBox.cs: The selectall actually doesn't occur until the first
-	focus.
-	* TextBoxBase.cs: Need to update the caret position after a
-	selectall.
-	
-2007-03-20  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* ListView.cs: Enable scrolling when using Tile view.
-
-2007-03-20  Everaldo Canuto  <everaldo at simios.org>
-
-	[Fixes #80902]
-
-	* XplatUIDriver.cs: Abstract SetOwner method created.
-
-	* XplatUIOSX.cs: Override SetOwner to prevent compilation errors method 
-	must be implemented and was masked as todo.
-
-	* XplatUIWin32.cs: SetOwner implemented using SetWindowLong with 
-	GWL_HWNDPARENT.
-
-	* XplatUIX11.cs: SetOwner implemented using same code from SetTopmost but 
-	cheking for null owner to remove transient. The SetTopmost will be change
-	on a decond step.
-
-	* Form.cs: In set_Owner and CreateHandle uses new SetOwner instead of
-	SetTopmost. Now owned forms will work properly in win32 and X11.
-
-2007-03-20  Rolf Bjarne Kvinge <RKvinge at novell.com> 
-
-	* MdiWindowManager.cs: Update function name.
-	* Form.cs: After closing a form MdiParent is always null.
-	* MdiClient.cs: Rename CloseChildForm to ChildFormClosed to explain
-	  better what it should do: necessary book-keeping when the form is
-	  closed, it should not close the form itself.
-
-2007-03-19  Andreia Gaita  <avidigal at novell.com>
-
-	* ListViewItem.cs: Fix back and fore color. The subitems only
-	use their own colors if they are set, otherwise use the listview's
-	colors. Don't set default colors on constructor for subitem.
-	Fixes #79315.
-
-2007-03-19  Mike Kestner  <mkestner at novell.com>
-
-	* ListView.cs : make box selection for Details views with 
-	FullRowSelect conform to MS behavior when clicking in the "item" 
-	column and clicking outside the defined columns.
-	[Fixes case 5-6 of #80374]
-
-2007-03-19  Chris Toshok  <toshok at ximian.com>
-
-	* ScrollableControl.cs: create the controls from within the ctor,
-	but don't actually add them until our handle is created.  this
-	fixes a NRE possibility jpobst found (if you override OnLayout in
-	a subclass, it's called before your ctor).  Also, add a
-	IsHandleCreated guard to UpdateSizeGripVisibility as well.
-
-2007-03-19  Jackson Harper  <jackson at ximian.com>
-
-	* TextBox.cs: Reduce the amount of invalidation we do.
-	* TextBoxBase.cs: Make shortcuts enabled true by default, at least
-	some of them are true by default on MS.
-	- Add some functions to reduce the amount of invalidates we do.
-	* TextControl.cs: Less invalidation.
-
-2007-03-19  Chris Toshok  <toshok at ximian.com>
-
-	[ Fixes #81773, and *seems* to fix #81553 as well ]
-
-	* XplatUIX11.cs: remove the assignment of hwnd.zombie = true from
-	AccumulateDestroyedHandles.  We need to do it *after* we send
-	WM_DESTROY, as the user's code can access Control.Handle in
-	OnHandleDestroyed, and this shouldn't cause a recreation.  Also,
-	move the WM_DESTROY/zombie handling to before the call to
-	XDestroyWindow.  For some reason without this ordering
-	FormTest.RecreateHandle hangs.  This ordering is semantically
-	equivalent, however, as XDestroyWindow is async anyway.
-
-2007-03-19  Gert Driesen  <drieseng at users.sourceforge.net>
-
-	* RichTextBox.cs: Reset backcolor_set after setting default.
-
-2007-03-19  Chris Toshok  <toshok at ximian.com>
-
-	* ScrollableControl.cs: the scroll position should not effect the
-	canvas size.  commit patch from georgegiolfan at yahoo.com, which
-	fixes some really bizarre behavior on resizing.  Fixes bug #80778.
-	
-2007-03-19  Chris Toshok  <toshok at ximian.com>
-
-	* ScrollableControl.cs: clean this up a bit.  create the
-	scrollbars in the ctor and just show/hide them as needed.  Also,
-	make hscroll_visible/vscroll_visible internal to Recalculate, and
-	just use hscrollbar.VisibleInternal/vscrollbar.VisibleInternal
-	everywhere else.  This seems to fix the scrollbars appearing
-	beneath the content for me (i have *no* idea why that is,
-	however.)
-
-2007-03-19  Jonathan Pobst  <monkey at jpobst.com>
-
-	* ToolStrip.cs: Don't call DoAutoSize when we change Dock.  Also, remove
-	some redundacy for stuff in Anchor and Dock that base will take care of.
-	[Fixes #80762]
-
-2007-03-19  Mike Kestner  <mkestner at novell.com>
-
-	* ListView.cs : make box selection for Details views without 
-	FullRowSelect dependent on the text bounds, not item bounds.
-	* ListViewItem.cs : add an internal property to obtain the TextBounds
-	in Details view.  [Fixes case 1-4 of #80374]
-
-2007-03-19  Andreia Gaita  <avidigal at novell.com>
-
-	* PaintEventArgs.cs (Dispose): Only dispose of graphics object if
-	we're < 2.0. #78448 && #80316
-
-2007-03-19  Jonathan Pobst  <monkey at jpobst.com>
-
-	* FontDialog.cs: Don't crash when we switch to a new font that doesn't
-	have the same style available as the previously selected one.  Also,
-	support FixedPitchOnly property.  [Fixes bugs #80918, #80947]
-
-2007-03-19  Jackson Harper  <jackson at ximian.com>
-
-	* TextControl.cs: Add an alignment property that all new lines
-	will be given.
-	- Make sure to use the align shift when calculating the line's X
-	position.
-	* TextBox.cs: Set the alignment on the document as well as on all
-	the document lines.
-
-2007-03-19  Rolf Bjarne Kvinge <RKvinge at novell.com> 
-
-	* Control.cs: ControlCollection.Add: Remove a couple of duplicated casts and
-	  throw if setting the parent of an mdichild that already has an
-	  mdiparent. Update signature for 2.0 profile. ProductName: If there's no
-	  AssemblyProductAttribute in the assembly, use the type's namespace (as
-	  MS seems to do). CreateControl: don't create the handle if the control
-	  is not visible (according to MS behaviour and spec).  SetTopLevel: Only
-	  create handle if the control is not a form. Change FocusInternal to
-	  virtual so that it can be overriden by Form.
-	* TextBox.cs: Update call to FocusInternal.
-	* Form.cs: Always create the handle when calling Focus on a MdiChild. The
-	  form is not a toplevel form when it's a mdi child, so update is_toplevel
-	  accordingly. ShowIcon/TransparencyKey: avoid creating the handle if it
-	  hasn't been created. Show (IWin32Window): Don't allow this overload for
-	  toplevel windows. CenterToParent/CenterToScreen/Select: create the
-	  handle as MS does. SetVisibleCore: if called on a MdiChild and the
-	  parent isn't visible yet, save the visibility and restore it when the
-	  parent is made visible.
-	* ScrollableControl.cs: Refactor out scrollbar visibility code to separate
-	  methods, since the visibility of the scrollbars can be changed from
-	  several places, not only from AutoScroll.
-	  [Fixes #81179]
-
-2007-03-19  Jackson Harper  <jackson at ximian.com>
-
-	* RichTextBox.cs: Enable shortcuts by default.
-	* TextBoxBase.cs: Add conditional shortcuts.  
-
-2007-03-19  Everaldo Canuto  <everaldo at simios.org>
-
-	* MenuItem.cs: Dont call OnDrawItem when OwnerDraw is false (#81182).  
-
-2007-03-19  Chris Toshok  <toshok at ximian.com>
-
-	[ Fixes bug #80604]
-	
-	* XplatUIX11.cs (WaitForHwndMessage): change this to actually
-	swallow the message we're waiting on, instead of delivering it, as
-	this is only used for the WM_SHOWWINDOW raised from
-	MapWindow/UnmapWindow, and the message needs to be generated
-	(MapWindow, UnmapWindow): generate the WM_SHOWWINDOW message
-	before doing the Map/Unmap.  Also make sure that the Hwnd is still
-	alive after the message has been handled.
-
-	*before* the window is shown.
-
-	* Control.cs (CreateControl): guard a few more things inside the
-	if (!is_created) block, as we might end up being called again -
-	yay .net.
-	(WmShowWindow): call CreateControl if we're showing the control.
-
-2007-03-19  Rolf Bjarne Kvinge <RKvinge at novell.com> 
-
-	* Control.cs: Fix 2.0 signature for Invoke. Support invoking on
-	  controls without a handle if they have any parent with a handle. In
-	  Dispose add a check whether the handle is created or not before
-	  calling BeginInvoke, this removes the need of the extra disposing
-	  parameter (which was bogus anyway since it didn't prevent the
-	  invoke from happening, it only skipped the check for an existing
-	  handle, meaning that the invoke would call on an inexistent
-	  handle).
-
-2007-03-19  Everaldo Canuto  <everaldo at simios.org>
-
-	* MessageBox.cs: Remove WS_POPUP from CreateParams style, with it form
-	appears in taskbar.
-
-2007-03-18  Everaldo Canuto  <everaldo at simios.org>
-
-	* MessageBox.cs:
-	- Fixed a problem that dont show help button for messages with 3 buttons.
-	- Refactory button size and position calculations, now dont use	fixed 
-	values, also fixed button sizes (#80043) and form's border space.
-	- AddButton method created, now all other AddButton methods call this one.
-	- Some other source code cosmetic changes.
-
-2007-03-18  Jackson Harper  <jackson at ximian.com>
-
-	* RichTextBox.cs: Don't do this all fonts must match check if
-	there is only one char selected.
-
-2007-03-18  Jackson Harper  <jackson at ximian.com>
-
-	* TreeView.cs: ScrollWindow works properly now, so we don't need
-	to screw around with the scroll area.  This fixes some artifacts
-	when expanding and collapsing.
-
-2007-03-18  Jackson Harper  <jackson at ximian.com>
-
-	* TextBoxBase.cs: Allow updating the selection position when the
-	cursor is outside the textarea, but we have a capture.
-	* TextControl.cs: A special case for when the cursor is outside
-	the bounds of the TB.
-	
-2007-03-18  Jackson Harper  <jackson at ximian.com>
-
-	* TextBoxBase.cs: Remove image pasting code for now.  There is no
-	way to get an image on the clipboard right now anyways.
-	* TextControl.cs:
-	* RichTextBox.cs: Use the new RTF Picture class for pictures.
-
-2007-03-18  Everaldo Canuto  <everaldo at simios.org>
-
-	* MessageBox.cs:
-	- Set window properties in constructor intead of on CreateParams.
-	- Remove topmost from Window ExStyle.
-	- Set ShowInTaskbar to false.
-	- Set form border to FixedDialog.
-	- Some cosmetic changes and remove unneeded comments.
-	- It fixes itens 2,3 and 4 of bug #80043.
-
-2007-03-18  Gert Driesen  <drieseng at users.sourceforge.net>
-
-	* TextBoxBase.cs: In setter for ReadOnly, only chance BackColor if
-	none was explicitly set. Fixes part of bug #79949.
-
-2007-03-16  George Giolfan  <georgegiolfan at yahoo.com>
-
-	* ToolStripComboBox.cs: Add AutoComplete*.
-
-2007-03-16  George Giolfan  <georgegiolfan at yahoo.com>
-
-	* ToolStripComboBox.cs: Add FlatStyle.
-
-2007-03-16  Jonathan Pobst  <monkey at jpobst.com>
-
-	* ToolStrip.cs, ToolStripProfessionalRenderer.cs,
-	ToolStripSplitStackLayout.cs: Implement some basic vertical toolbar support.
-
-2007-03-16  Rolf Bjarne Kvinge <RKvinge at novell.com> 
-
-	* ButtonBase.cs, ToolStrip.cs, SendKeys.cs, TextRenderer.cs,
-	  CheckBox.cs, RadioButton.cs, BindingSource.cs,
-	  DataGridColumnStyle.cs: Remove warnings.
-
-2007-03-16  Rolf Bjarne Kvinge <RKvinge at novell.com> 
-
-	* Menu.cs: MergeMenu: Check menu argument for null before looping over
-	  it.
-	* MdiWindowManager.cs: Add IsVisiblePending to track the pending
-	  visibility of mdi child forms. FormSizeChangedHandler: update the
-	  maximized size if size has changed while maximized.
-	* MdiClient.cs: SizeScrollbars/ArrangeWindows/ActivateChild: Avoid
-	  creating the handle.
-	* InternalWindowManager.cs: UpdateBorderStyle/FormSizeChangedHandler:
-	  avoid creating the handle if not created.
-	* XplatUI.cs: Update debug output.
-	* XplatUIStructs.cs: Added ToString's for a couple of structs.
-
-2007-03-16  Jonathan Pobst <monkey at jpobst.com>
-
-	* ContainerControl.cs: Give ToolStripManager the opportunity to handle
-	ProcessCmdKey().
-	* ToolStripDownItem.cs, ToolStripItem.cs, ToolStripItemCollection.cs, 
-	ToolStripItemEventType.cs, ToolStripManager.cs, ToolStripMenuItem.cs:
-	Implement keyboard shortcuts.
-
-2007-03-15  Everaldo Canuto  <everaldo at simios.org>
-
-	* CommonDialog.cs: Set StartPosition to CenterScreen on form's constructor.
-	Fixes #79560 and #80200, it also fix problem in	FileDialog, SaveDialog, 
-	ColorDialog and all derived classes.
-
-2007-03-15  Everaldo Canuto  <everaldo at simios.org>
-
-	[ Fixes bug #79828 ]
-
-	* ToolBar.cs:
-	- Rename ToolBarButtonInfor to ToolBarItem.
-	- Add all layout and calculation stuff gtom ToolBarButton to ToolBarItem.
-	- Maintain an array of ToolBarItem, used instead of ToolBarButton
-	collection to be able add same button more than one time on a toolbar.
-	- Refactory all properties and methods to use ToolBarItem. 
-
-	* ToolBarButton.cs: 
-	- Remove all propeties and methods that is now in ToolBarItem.
-	- Rectangle propery now gets the rectangle from first ToolBarItem to
-	mimic win32 behavior.
-	- Size calculation and layout methods also removed.
-
-	* ThemeWin32Classic.cs: Change all ToolBar drawing methods to receive
-	ToolBarItem instead of ToolBarButton to right drawing buttons when
-	same button/separator was added more than one time to ToolBar.
-
-	* ThemeNice.cs: Same as above. 
-
-2007-03-15  Andreia Gaita  <avidigal at novell.com>
-
-	* XplatUIX11.cs: Fire extra MouseMove events right after
-	MouseDown and MouseUp, emulating win32's <censored> behaviour
-	for apps that rely on it.
-
-2007-03-15  Jackson Harper  <jackson at ximian.com>
-
-	* TextControl.cs:
-	* TextBoxBase.cs: On MS, a fixed single border is not in NC area,
-	it is drawn on the controls client window and there is no NC
-	area.
-	- Set the background color to gray on 2.0 when we are readonly.
-
-2007-03-15  Chris Toshok  <toshok at ximian.com>
-
-	[ Fixes bug #81144 ]
-	
-	* XplatUIX11.cs: implement VirtualScreen independently of
-	WorkingArea, by querying the _NET_DESKTOP_GEOMETRY root window
-	property.
-
-2007-03-15  Chris Toshok  <toshok at ximian.com>
-
-	* Hwnd.cs: add an internal field for the cached_window_state.
-
-	* XplatUIX11.cs: cache the window state, invalidating the cache
-	(and thus re-querying the X server) only when we see an update to
-	the _NET_WM_STATE property.
-
-2007-03-15  Chris Toshok  <toshok at ximian.com>
-
-	* BindingSource.cs: get a lot of the unit tests working.
-
-2007-03-15  Jonathan Pobst  <monkey at jpobst.com>
-
-	* Control.cs: Modify UpdateStyles to store distances when bounds >=
-	0 instead of just bounds > 0.  [Fixes bug #80912]
-
-2007-03-15  Jonathan Pobst  <monkey at jpobst.com>
-
-	* ToolStrip.cs, ToolStripItem.cs: Implement several new properties
-	and methods.
-
-2007-03-15  Ivan N. Zlatev <contact at i-nz.net>
-	
-	* ComboBox.cs, Control.cs, XplatUIStructs.cs, XplatUIX11GTK.cs,
-	XplatUIX11.cs, XplatUIWin32.cs, InternalWindowManager.cs,
-	XplatUIOSX.cs, TextControl.cs: Replaces all uses of the custom
-	WM_MOUSE_LEAVE with the system WM_MOUSELEAVE message.
-
-2007-03-15  Chris Toshok  <toshok at ximian.com>
-
-	[ Fixes #81101 ]
-	
-	* Control.cs: add Ivan's fix for 81101, with a slight modification
-	- you can set control.Target to null.
-
-2007-03-14  Jonathan Pobst  <monkey at jpobst.com>
-
-	* ToolStripItem.cs: If our OwnerItem is null, we can't use 
-	HideDropDown, use Hide instead to prevent an NRE.
-	[Fixes bug #81147]
-
-2007-03-14  Jackson Harper  <jackson at ximian.com>
-
-	* TextBoxBase.cs: Mess with the creation stuff a little. We need
-	to calculate the document before the handle is created, in some
-	cases. (Actually just one case).
-
-2007-03-14  Jackson Harper  <jackson at ximian.com>
-
-	* TextBoxBase.cs: Need to display the caret after letting the base
-	wndproc handle the focus methods, because the caret display
-	methods check the focus state.
-	- Try to display the caret after updating it's position with SelectWord.
-	- Don't need to do an immediate update on this recalc, since there
-	will be an invalidate anyways.
-
-2007-03-14  Jackson Harper  <jackson at ximian.com>
-
-	* TreeView.cs: Some workarounds so that we can match event order a
-	little better.
-
-2007-03-14  Gert Driesen  <drieseng at users.sourceforge.net>
-
-	* ErrorProvider.cs: Invoke default ctor from 2.0-only ctor. Fixes bug
-	#80803. Avoid NullReferenceException when Control does not have
-	parent. Fixed different blinkstyle issues. Only subscribe to Tick
-	event a single time. Only draw error icon when control is created and
-	visible. Fixes failing unit tests.
-
-2007-03-14  Andreia Gaita  <avidigal at novell.com>
-
-	* TabControl.cs: Add support for 2.0 Deselecting, Deselected and
-	Selecting events. Fire Leave and Enter events when changing tabs.
-
-2007-03-14  George Giolfan  <georgegiolfan at yahoo.com>
-
-	* TreeView.cs: Add TreeViewNodeSorter.
-	* TreeNodeCollection.cs: Add sorter parameter to Sort method.
-
-2007-03-14  Chris Toshok  <toshok at ximian.com>
-
-	* Form.cs: go ahead and remove the RecreateHandles that jpobst
-	removed earlier and I had him add back it.  It turns out metacity
-	*does* in fact handle the MOTIF_WM_HINTS property changing, it
-	just doesn't redraw the window titlebar until you resize the
-	window.  This also means we aren't recreating the entire window
-	hierarchy on X when you change this property.  And it looks better
-	on windows, too.
-
-2007-03-14  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* ListViewItem.cs:
-	* ListView.cs: Collecting selection information
-	is now done in SelectedIndexCollection rather than in
-	SelectedListViewItemCollection. This is done so we can
-	have the selection information code in one single place
-	(virtual mode selection information entirely depends on
-	SelectedIndexCollection).
-
-2007-03-13  Miguel de Icaza  <miguel at novell.com>
-
-	* ErrorProvider.cs: Add stubs for ISupportInitialize
-
-2007-03-13  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* ListViewItem.cs: Trigger the ItemCheck and ItemChecked events
-	in the right order with the right values, from the Checked property, 
-	just as MS does (instead of triggering them from ListView).
-
-	* ListView.cs: Make OnItemCheck and OnItemChecked internal.
-
-2007-03-13  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* ListView.cs: Implement ItemChecked 2.0 event. Also cast to 
-	the correct handler in OnItemCheck method (ItemCheckEventHandler 
-	instead of EventHandler). This used to throw an InvalidCastException.
-
-2007-03-13  Jackson Harper  <jackson at ximian.com>
-
-	* TextBoxBase.cs: Calculate the document before the handle is
-	created, so there isn't an extra invalidate called.
-
-2007-03-13  Jonathan Pobst  <monkey at jpobst.com>
-
-	* Form.cs: Don't set owner in ShowDialog until we are sure
-	that we aren't going to throw an exception.  [Fixes bug #80773]
-
-2007-03-12  George Giolfan  <georgegiolfan at yahoo.com>
-
-	* TreeView.cs: Make it compile.
-
-2007-03-12  Jonathan Pobst  <monkey at jpobst.com>
-
-	* Control.cs: Another place we don't call SizeFromClientSize.
-	* Form.cs: Another place we don't call SizeFromClientSize.
-	[Fixes bug #81125]
-
-2007-03-12  Jackson Harper  <jackson at ximian.com>
-
-	* TreeView.cs: Basically emulating some strangness here with
-	exanding nodes and setting node positions when windows aren't
-	created.
-	- Also attempting to walk the node tree less than previously, and
-	just use visible order calculations for determining offsets.
-	- oops made scrolling backwards.
-	* TreeNode.cs: We need to start nodes with a zero visible order,
-	because the order calcs are based on the first nodes order.
-
-2007-03-12  Jonathan Pobst  <monkey at jpobst.com>
-
-	* Form.cs: Don't exit the program if RecreateHandle is called on
-	the main form.
-
-2007-03-12  Chris Toshok  <toshok at ximian.com>
-
-	* XEventQueue.cs: remove the use of PostQuitState.
-
-	* XplatUIX11.cs: remove the use of PostQuitState.  If we get a
-	WM_QUIT message in GetMessage, return false (and if we're in the
-	nested WaitForHwndMessage, repost the WM_QUIT message).
-
-2007-03-12  Jonathan Pobst  <monkey at jpobst.com>
-
-	* Form.cs: Don't call RecreateHandle when we change the MinimizeBox
-	or the MaximizeBox properties.  [Part of bug #80640]
-
-2007-03-12  Everaldo Canuto  <everaldo at simios.org>
-
-	* LinkLabel.cs: When calculate pieces make LinkArea empty if theres
-	no links.
-
-2007-03-12  Jonathan Pobst  <monkey at jpobst.com>
-
-	* ToolStripItem.cs: Fix some tests I broke by checking Visible
-	instead of visible.
-
-2007-03-12  Gert Driesen  <drieseng at users.sourceforge.net>
-
-	* FileDialog.cs: Use text of File name combobox to determine what
-	files the user selected. Added tokenizer to parse the file names.
-	Fixes bug #81123.
-
-2007-03-12  Jonathan Pobst  <monkey at jpobst.com>
-
-	* Control.cs: We can't call SizeFromClientSize in the constructor,
-	but we still need to do the same work, so make an internal version.
-	[Fixes bug #80621]
-
-2007-03-12  Jackson Harper  <jackson at ximian.com>
-
-	* TreeView.cs:
-	* TreeNode.cs:
-	* OpenTreeNodeEnumerator: Match MS better for IsVisible and
-	IsExpanded.
-
-2007-03-12  Jackson Harper  <jackson at ximian.com>
-
-	* TextBoxBase.cs: Now that the handles are being created a little
-	later, we need to make sure that the document is recalculated when
-	the handle is created.
-
-2007-03-11  Everaldo Canuto  <everaldo at simios.org>
-
-	* Theme.cs: GetLinkFont abstract method added.
-	
-	* LinkLabel.cs: 
-	- Remove CalcTrimRectangle, no longer needed.
-	- Factor also remove, position issues must be fixed in libgdiplus.
-	- Move GetPieceColor to ThemeWin32Classic.cs as it is theme related.
-	- GetPieceFont, CreateLinkFont and link_font removed, theme must be 
-	care about font	used to draw links.
-	- Set TabStop to true when control is "Selectable", control is selectable
-	when have one or more links. Fixes #80501 (test case is also added).
-	- Set the LinkArea values after links change, LinkArea values must be
-	based in first link position and size, a test case was created.
-	- Fix ControlStyles.Selectable value, now is based on LinkArea value, 
-	the attribute must be true LinkArea.Length > 0. The same was applied to
-	TabStop.
-	
-	* ThemeWin32Classic.cs: 
-	- LinkLabelGetPieceColor and LinkLabelGetPieceFont created and used 
-	in draw method.
-	- Use CPDrawStringDisabled to draw disabled text instead of hard code 
-	color change.
-	- Draw focus rectangle for every parts focused, including parts that 
-	is on another line, its because regions returns various rectangles
-	and not only one. Needed to mimic W32 look.
-	- Uses Graphics.Clip to delimite region painted, it mean that now 
-	complete text is passed to DrawString, with this we solve layout
-	issues without create another text renderer.
-	- Uses Region.Intersect to fix some flickers problems, now only needed
-	parts will redrawed.
-	- This changes fixes #79614 and some other unreported issues, on Linux 
-	some layout problems still remain, the problem is under 
-	MeasureCharacterRanges but it is an libgdiplus bug.
-
-2007-03-10  Gert Driesen  <drieseng at users.sourceforge.net>
-
-	* TextBox.cs: Set for foreground color.
-	* TextBoxBase.cs: Remove Invalidate when setting BackColor, since
-	this is already done in Control.
-
-2007-03-10  Jackson Harper  <jackson at ximian.com>
-
-	* TextBox.cs: Set the background color, but reset the
-	backcolor_set flag which is just for the user setting the
-	background color.
-
-2007-03-09  Chris Toshok  <toshok at ximian.com>
-
-	* Control.cs: really remove the call to XplatUI.SetVisible from
-	CreateHandle(), like I said I did when I merged the branch.
-
-	* BindingSource.cs: implement some more of this stuff.
-
-2007-03-09  Jackson Harper  <jackson at ximian.com>
-
-	* TextBox.cs: Don't explicitly set our background colors.
-	* TextControl.cs:
-	* TextBoxBase.cs: Draw readonly text.
-	- Need to invalidate when backcolor or readonly are changed.
-	
-2007-03-09  Jackson Harper  <jackson at ximian.com>
-
-	* TextBoxBase.cs: Don't set the forecolor until the handle is
-	created.
-	- Do not raise OnPaint, and removed some old debug code.
-
-2007-03-09  George Giolfan  <georgegiolfan at yahoo.com>
-
-	* ScrollableControl.cs: Fix mouse wheel scrolling.
-
-2007-03-09  Jonathan Pobst  <monkey at jpobst.com>
-
-	* Control.cs: Wire up MouseDoubleClick event.
-
-2007-03-09  Jonathan Pobst  <monkey at jpobst.com>
-
-	* ToolStrip.cs: Rework AutoSize to adjust height when docked to the
-	top or bottom.
-	* ToolStripItem.cs: Make Image drawing take ImageScaling into account.
-	* ToolStripItemCollection.cs: Don't call owner.PerformLayout when a new
-	item is added.  This logic was moved to ToolStrip.OnItemAdded.
-	[Fixes bug #81090]
-
-2007-03-08  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* ListVieItem.cs: SetIndex is only valid for 2.0 profile by now.
-
-2007-03-08  Jackson Harper  <jackson at ximian.com>
-
-	* TreeView.cs: Show the correct image for selected node (this used
-	to work, not sure how the code got deleted). Also implemented 2.0 feature
-	SelectedImageKey.
-
-2007-03-08  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* ListView.cs:
-	* ListViewItem.cs: Cache index in items when retrieving them
-	in VirtualMode.
-
-2007-03-08  Jonathan Pobst  <monkey at jpobst.com>
-
-	* ToolStripItem.cs: Don't return the explicit_size if we are using 
-	AutoSize.  Fixes invalidation issue when user has explicitly set a
-	size and has AutoSize = true.
-
-2007-03-08  Jonathan Pobst  <monkey at jpobst.com>
-
-	* XplatUIX11.cs: Hardcode FrameBorderSize value temporarily to fix MWF.
-
-2007-03-07  Pedro Martínez Juliá  <pedromj at gmail.com>
-
-	* DataGridView.cs: Remove event handler from DataView when a
-	DataTable is used as DataSource.
-
-2007-03-08  Jonathan Pobst  <monkey at jpobst.com>
-
-	* Control.cs: Create internal setter for client_size to allow it to be
-	set without triggering resizing code.
-	* Form.cs: Calculate client_size in constructor, only change client_size
-	in FormBorderStyle property if Handle has been created.
-	[Fixes #80574, #80791]
-
-2007-03-08  George Giolfan  <georgegiolfan at yahoo.com>
-
-	* SystemInformation.cs: Add TerminalServerSession.
-
-2007-03-07  Jonathan Pobst  <monkey at jpobst.com>
-
-	* TreeViewDrawMode.cs: Make internal for 1.1 to allow for consolidated
-	TreeView code.
-
-2007-03-07  Jonathan Pobst  <monkey at jpobst.com>
-
-	* XplatUIWin32.cs: The no_activate stuff was forcing us to create a
-	Handle before we were supposed to.  Now checks ActivateOnShow property
-	in Control.
-	* Control.cs: Add internal ActivateOnShow property.
-	* ComboBox.cs, Form.cs, MenuAPI.cs, ToolStripDropDown.cs: Return false
-	for ActivateOnShow.
-	* Hwnd.cs Remove no longer needed no_activate field.
-
-2007-03-07  Jackson Harper  <jackson at ximian.com>
-
-	* TreeView.cs: Implement owner draw tree nodes.  And a couple more
-	2.0 properties
-	* DrawTreeNodeEventHandler.cs: Add
-	* DrawTreeNodeEventArgs.cs: Correct default value.
-	
-2007-03-07  Chris Toshok  <toshok at ximian.com>
-
-	* XplatUIWin32.cs: create InternalWndProc so that we're guaranteed
-	to be called before NativeWindow.WndProc.  Put the HwndCreating
-	magic there to hook up our Hwnd's to handles.
-
-2007-03-07  Gert Driesen  <drieseng at users.sourceforge.net>
-
-	* DataGridView.cs: Comment out debug code.
-
-2007-03-07  Chris Toshok  <toshok at ximian.com>
-
-	[merge -r72718:73765 from mwf-handle-branch, and include 2 changes
-	to make the rest of the world happy]
-
-	* Control.cs (CreateHandle): there's no need to call
-	XplatUI.SetVisible here, it's effectively done by
-	XplatUI.CreateWindow on X now, and always was on windows.
-
-	* XplatUIX11.cs (WaitForHwndMessage): only use the PostQuitState
-	shortcircuit out of the loop if we have a message loop running on
-	this thread.
-
-	[Changelog from merge]
-
-	2007-03-05  Chris Toshok  <toshok at ximian.com>
-
-		* Control.cs (AccessibilityNotifyClients): turns out in 1.1 this
-		causes handle creation.
-
-	2007-02-28  Chris Toshok  <toshok at ximian.com>
-
-		* ApplicationContext.cs: Add a flag to make sure we only raise the
-		ThreadExit event once (ExitThreadCore can be indirectly called
-		from a few places.)  I don't like the additional flag, but it
-		makes the event ordering/count correct.
-
-		* Application.cs (MWFThread.LoopCount): don't use an enumerator
-		without locking the collection.  An enumerator doesn't give us any
-		protection from modification anyway.  Lock the thread hash and
-		replace the complicated enumerator loop with a foreach.
-		(Application.CloseForms): make internal so it can be called from
-		ApplicationContext.  This should probably be moved to MWFThread.
-		(Application.ExitThread): don't call MWFThread.Current.Exit()
-		here.  just call XplatUI.PostQuitMessage.  We'll exit the thread
-		when the runloop exits (in response to WM_QUIT.)
-		(Application.RunLoop): add a comment (and check) for
-		context.MainForm being null after setting context.MainForm.Visible
-		= true.  This is because you're perfectly free to dispose of a
-		form in VisibilityChanged.  Chalk this up to another case where we
-		need to synchronously generate WM_ACTIVATE from Control.Show.
-		Also, add handling for WM_QUIT here so we'll exit the loop.
-		
-		* XplatUIX11.cs: clean up MapWindow and UnmapWindow a bit.  The
-		fact that we don't wait if we're only unmapping the whole_window
-		makes me a bit nervous, but it doesn't seem to cause any problems
-		yet.
-
-		also, add a comment about the stupid, broken and wrong resetting
-		of PostQuitState to false in GetMessage().
-
-		In PostQuitMessage, we need to add a WM_QUIT message to the
-		thread's queue.  We use the FosterParent to get the right
-		handle/hwnd/queue.
-
-		Lastly, in SetVisible, we need to unmap both windows, since the
-		waiting only happens when we're unmapping the client window.  So
-		now, the *only* time we unmap just the whole_window is in the hack
-		for resizing a control to 0,0.
-		
-	2007-02-21  Chris Toshok  <toshok at ximian.com>
-
-		* Application.cs (CloseForms): rewrite this so that we don't
-		modify the list while we're traversing it.
-
-	2007-02-20  Chris Toshok  <toshok at ximian.com>
-
-		* ListBox.cs (.ctor): move the Control.AddImplicits here instead
-		of OnHandleCreated.
-		(HorizontalScrollEvent): only call XplatUI.ScrollWindow if the
-		handle is created.  otherwise we'll create it here.
-		(VerticalScrollEvent): same here.
-
-		* Application.cs (CloseForms): call Form.Dispose, don't post
-		WM_CLOSE_INTERNAL.
-
-		* Form.cs (WndProc): we don't need to use CLOSE_INTERNAL
-		here. Application should Dispose() of the Form's.
-
-		* XplatUIX11.cs (WaitForHwndMessage): break out of the loop on
-		WM_DESTROY as well.
-		(MapWindow,UnmapWindow): only actually do the waiting for
-		SHOWWINDOW if the control we're dealing with is a Form.
-		(CreateWindow): if the control isn't a form, SendMessage
-		WM_SHOWWINDOW here (if the WS_VISIBLE style is set).
-
-		* Control.cs (SetVisibleCore): always use is_visible here, not
-		value.  If we use value, we can end up re-setting something
-		visible if, for instance, you do Control.Hide() in a delegate
-		attached to VisibleChanged as we do in FormTest.ShowDialogTest.
-
-	2007-02-20  Chris Toshok  <toshok at ximian.com>
-
-		* XplatUIX11.cs (WaitForHwndMessage): we need to loop until we get
-		the message we need.  PeekMessage returning false should not be a
-		condition under which we exit the loop.
-
-	2007-02-15  Chris Toshok  <toshok at ximian.com>
-
-		* Control.cs (Refresh): only refresh if we've got a handle and are
-		visible.
-		(CreateAccessibilityInstance): CreateControl() here.
-		(UpdateChildrenZOrder): complicate the code loop even more by
-		taking into account controls that haven't had their handle
-		created, and those that aren't visible.  But on the flip side,
-		simplify the code by splitting it into two loops.  one which
-		builds up the list of child controls we're interested in, and the
-		other that sets the z order of those children.
-
-	2007-02-14  Chris Toshok  <toshok at ximian.com>
-
-		* Control.cs: Control.AccessibilityObject causes the control to be
-		created, not just the handle.
-
-	2007-02-14  Chris Toshok  <toshok at ximian.com>
-
-		* Control.cs: rework UpdateChildrenZOrder to correctly handle the
-		problem on X where a window might have its handle created (and be
-		visible) while the window is unmapped.  calling XConfigureWindow
-		on an unmapped window is bad, and generates X errors.
-
-	2007-02-13  Chris Toshok  <toshok at ximian.com>
-
-		* Control.cs (CreateHandle): don't loop over our children setting
-		their parent here.  do it when in WndProc when we're shown.
-		(UpdateChildrenZOrder): make this internal so we can call it from
-		ScrollableControl.
-		(WndProc): for WM_SHOWWINDOW, reparent the child control after
-		creating its handle.  Also, remove the calls to PerformLayout from
-		here.  they're done in ScrollableControl.OnVisibleChanged.  Also,
-		OnVisibleChanged only seems to be called directly here for the
-		toplevel control.  It's propagated down the window hierarchy by
-		calls to child.OnParentVisibleChanged.
-		(OnVisibleChanged): don't do layout here - it's done (oddly
-		enough, according to a glance at stack traces on ms.net..) in
-		ScrollableControl.
-		
-		* ScrollableControl.cs (OnVisibleChanged): make sure we update the
-		z order of our children before calling PerformLayout.
-
-	2007-02-12  Chris Toshok  <toshok at ximian.com>
-
-		[big change, fixes #80020]
-		
-		* AccessibleObject.cs: we need to make owner internal again to fix
-		some of ControlAccessibleObject.
-
-		* Control.cs: lots of changes here.  add support for WM_CREATE,
-		for which we generate OnHandleCreated.  Remove the OnHandleCreated
-		call from CreateHandle.  Also add support for WM_SHOWWINDOW where
-		we create child controls.  leave the MonoTODO's for the
-		accessibility calls, but fix the exceptions so the tests pass.
-
-		Add the InvalidOperationExceptions to Invoke methods, and remove a
-		couple of InvokeInternal methods we aren't using.
-		
-		Also, add a couple of CreateHandle calls in places where we know
-		the handles are being created but our code doesn't reference
-		.Handle.
-
-		Make SetVisibleCore call OnVisibleChange if the handle isn't
-		created.  If the handle is created, we rely on XplatUI.SetVisible
-		generating the event synchronously.
-		
-		Lastly, make sure we don't use this.Handle inside CreateHandle,
-		because we can call back into client (and that code can dispose of
-		the control).
-
-		* XplatUIStructs.cs: misc/cleanup.
-
-		* XplatUIX11.cs: Map/Unmap X events correspond to WM_SHOWWINDOW,
-		although we don't populate the wParam properly.
-		(CreateWindow): generate WM_CREATE.
-		(MapWindow,UnmapWindow): make these calls synchronous, at great
-		performance expense (particularly in the unmap case), to match
-		win32 behavior.
-
-		* Form.cs (.ctor): remove the call to UpdateBounds. we don't need
-		to call it.
-		(set_MdiParent): don't recreate the handle unless it's been
-		created already.
-		
-		* MdiClient.cs (OnResize): don't InvalidateNC Parent.Handle unless
-		it's created.
-
-		* NativeWindow.cs: this is probably the weirdest part of the
-		patch.  We need a way to link up the window being created to the
-		WM_CREATE message.  Since we can only be creating one window at a
-		time on a given thread, we keep track of a per-thread reference so
-		we can dispatch it properly.  We also need to keep track of the
-		Hwnd currently being created so that the win32 backend doesn't
-		have problems.
-		
-		* XplatUIWin32.cs: a similar change to the one we made in
-		NativeWindow.cs.
-
-2007-03-07  Jonathan Pobst  <monkey at jpobst.com>
-
-	* ToolStripItem.cs: Make CalculatePreferredSize virtual.
-	* ToolStripMenuItem.cs: Modify CalculatePreferredSize and OnPaint
-	to draw the menu shortcut string.
-
-2007-03-07  Jackson Harper  <jackson at ximian.com>
-
-	* TreeNode.cs: Add the 2.0 collapse method.
-
-2007-03-07  Pedro Martínez Juliá  <pedromj at gmail.com>
-
-	* DataGridViewColumn.cs: Fix HeaderText behaviour (Bug #80746).
-
-2007-03-07  Pedro Martínez Juliá  <pedromj at gmail.com>
-
-	* DataGridView.cs: Change DataSource will clear column and row
-	lists. Call Invalidate() to reflect DataSource change.
-
-2007-03-07  Pedro Martínez Juliá  <pedromj at gmail.com>
-
-	* DataGridView.cs: Add rows when DataSource is System.Data.DataView
-	and a new row is added to it.
-
-2007-03-07  Pedro Martínez Juliá  <pedromj at gmail.com>
-
-	* DataGridView.cs: Add columns when DataSource is en empty list but
-	is a System.Data.DataView (from a System.Data.DataTable).
-
-2007-03-06  Andreia Gaita  <avidigal at novell.com>
-
-	* Label.cs: Implement AutoEllipsis (2.0)
-
-2007-03-06  Jackson Harper  <jackson at ximian.com>
-
-	* TreeView.cs: Implement 2.0 TopNode setter property.
-	- Use a local var instead of the skipped_nodes field for computing
-	how many nodes to skip.  Otherwise we won't scroll because the
-	valuechanged handler checks if skipped_nodes is equal to the new
-	value.
-	- Implement 2.0 Sort method.
-	- Add useless 2.0 DoubleBuffer property
-	- Implement 2.0 LineColors property.  Lets you change the color of
-	the lines in the tree. Terribly useful for creating non cohesive
-	desktops.
-	- Implement 2.0 image key feature.
-
-2007-03-06  Jackson Harper  <jackson at ximian.com>
-
-	* TreeView.cs: We can't get the bounds of the nodes before raising
-	the AfterSelect event, because that event could change the node's
-	bounds (scrolling, font change, etc).
-
-2007-03-06  Rolf Bjarne Kvinge <RKvinge at novell.com> 
-
-	* XplatUIWin32.cs: When faking styles don't remove the WS_VISIBLE flag.
-	* Form.cs: Don't recreate handle when creating FormWindowManager, just
-	  update window styles. In CreateParams us VisibleInternal instead of
-	  VIsible to get the actual visible flag set for this form.
-	* FormWindowManager.cs: Activate the form whenever the mouse clicks on
-	  the nc area. Fixes #81042. Also fix HandleTitleBarDoubleClick to
-	  handle the case when the form is already maximized, in which case
-	  it should be restored. Fixes #81043.
-
-2007-03-06  Rolf Bjarne Kvinge <RKvinge at novell.com> 
-
-	* XplatUIX11.cs: Tool windows still get wm styles. Fixes toolwindows showing up with double decorations.
-
-2007-03-05  Jackson Harper  <jackson at ximian.com>
-
-	* TreeViewHitTestInfo.cs: implement.
-
-2007-03-05  Jackson Harper  <jackson at ximian.com>
-
-	* InternalWindowManager.cs: class status fix.
-
-2007-03-05  Rolf Bjarne Kvinge <RKvinge at novell.com> 
-
-	* InternalWindowManager.cs: All windows that have a parent
-	are confined to their parent when they're being moved.
-	Fixes #80822.
-
-2007-03-04  Gert Driesen  <drieseng at users.sourceforge.net>
-
-	* SystemInformation.cs: Marked KeyboardDelay and KeyboardSpeed public
-	on 2.0 profile. Fixes bug #81018. Small code formatting fixes.
-
-2007-03-02  Rolf Bjarne Kvinge <RKvinge at novell.com> 
-
-	* ThemeWin32Classic.cs: ManagedWindowSetButtonLocations: Make all
-	  buttons invisible before deciding which ones should be visible
-	  (fixes minimize/maximize buttons showing up in toolwindows). Remove
-	  an unused variable.
-	* InternalWindowManager.cs: Remove warning.
-
-2007-03-02  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* ListView.cs: Add a check in ListViewItemCollection.RemoveAt
-	to throw an InvalidOperationException is virtual mode is being used.
-
-2007-03-02  Jonathan Pobst  <monkey at jpobst.com>
-
-	* SplitContainer.cs, SplitterPanel.cs, StatusStrip.cs, TableLayoutPanel.cs,
-	ToolStrip.cs, ToolStripContainer.cs, ToolStripContentPanel.cs,
-	ToolStripControlHost.cs, ToolStripDropDownItems.cs, ToolStripItem.cs,
-	ToolStripMenuItem.cs, ToolStripOverflowButton.cs, ToolStripPanel.cs,
-	ToolStripPanelRow.cs, ToolStripProfessionalRenderer.cs, ToolStripSplitButton.cs,
-	ToolStripStatusLabel.cs, ToolStripTextBox.cs: Corcompare work.
-
-2007-03-02  Rolf Bjarne Kvinge <RKvinge at novell.com> 
-
-	* XplatUI.cs: Fixed returning driver.KeyboardSpeed instead of
-	  driver.KeyboardDelay from XplatUI.KeyboardDelay 
-	* XplatUIW	in32.cs: Implemented KeyboardSpeed/KeyboardDelay properties
-	  (patch by Sergey Volk)
-
-2007-03-02  Rolf Bjarne Kvinge <RKvinge at novell.com> 
-
-	* ToolWindowManager.cs: Added, contains logic for
-	  tool windows.
-	* CreateParams.cs: Add a few helper methods and an
-	  internal variable to know which control the CreateParams belongs
-	  to.
-	* Control.cs: Call Form.ChangingParent when the
-	  parent is about to be changed.
-	* XplatUIX11.cs: DeriveStyles (): Set
-	  caption_height for all windows that have captions and are children.
-	  Update to use ToolWindowManager instead of InternalWindowManager
-	  for ToolWindows.
-	* XplatUIWin32.cs: Set fake window styles for all
-	  windows that have window managers.
-	* MdiWindowManager.cs: Added MaximizedTitleButtons (buttons are
-	  now duplicated for mdi windows when they are
-	  maximized, first for the buttons the window itself has, then for
-	  the buttons that appear in the menu bar. Makes things a little
-	  easier). Updated UpdateWindowDecorations, SetWindowState and the
-	  mouse eventhandlers accordingly.
-	* Form.cs: Add ChangingParent (), contains the
-	  logic of what should happen when the parent changes. In MdiParent
-	  don't set things that ChangingParent () is doing. When handling
-	  WM_CLOSE, we can close the form if there are any other modal forms
-	  and the current form is a descendent of the modal form.
-	* InternalWindowManager.cs: A lot of refactoring,
-	  the title buttons are now extracted to a separate container class
-	  that takes care of all button code (clicks, tooltips, etc). Moved
-	  Iconic|Maximized|Normal Bounds properties to this class from
-	  MdiWindowManager, so that the window state logic can succeed for
-	  other than mdi wm's. Implemented general window state change logic.
-	  Moved CreateButtons to ThemeWin32Classic, since the theme might
-	  override which buttons are available when as well as the exact
-	  location.
-	* FormWindowManager.cs: Added, contains logic for
-	  normal forms.
-	* ThemeWin32Classic.cs: ManagedWindowSetButtonLocations now decides
-	  which buttons go where (and if they are at all visible). 
-	  Removed special handling of maximized windows, since they aren't special. 
-	  In DrawManagedWindowDecorations don't try to draw the text if it is
-	  empty.
-	* MdiClient.cs: ArrangeIconicWindows: Don't  calculate any sizes, 
-	  use whatever the wm gives us.
-
-2007-03-02  Jonathan Pobst  <monkey at jpobst.com>
-
-	* ButtonBase.cs: Add 2.0 properties.
-	* Button.cs: Override Draw for 2.0.
-	* Control.cs: Add Entered and Selected properties.
-	* FlatButtonAppearance.cs, TextFormatFlags.cs, TextImageRelation.cs,
-	TextRenderer.cs: Make internal for 1.1 to unify drawing code.
-	* Theme.cs: New abstract functions for drawing Standard, Flat, Popup
-	buttons.
-	* ThemeWin32Classic.cs: Implement layout calculations for 2.0 buttons.
-
-2007-03-01  Jonathan Pobst  <monkey at jpobst.com>
-
-	* XplatUIWin32.cs: Don't use 2.0 methods in 1.1 code.  :/
-
-2007-03-01  Jonathan Pobst  <monkey at jpobst.com>
-
-	* XplatUIWin32.cs: Register a new class with Windows each time we get
-	a new ClassStyle.  [Fixes bugs #79432, #80817]
-	* Controls.cs: Set the correct ClassStyle in CreateParams.
-	* ToolStripDropDown.cs: Don't request an invalid ClassStyle.
-
-2007-03-01  Gert Driesen  <drieseng at users.sourceforge.net>
-
-	* ListView.cs: Add fireEvent argument to ReorderColumn since the
-	ColumnReordered event must not be signaled when modifying DisplayIndex
-	of a ColumnHeader. Added internal ReorderColumns method which takes
-	care of drawing, and updating the internal DisplayIndex of the
-	ColumnHeader. Added AddColumn method which is invoked from
-	ColumnHeaderCollection when adding or inserting columns, and which
-	ensures that reorder_columns_indices is kept in sync. Avoid redrawing
-	after adding each ColumnHeader in ColumnHeaderCollection.AddRange.
-	Recalculated dispay indices after removing a ColumnHeader.
-	* ColumnHeader.cs: Save DisplayIndex separately from ListView to
-	match MS. Allows last display index to be returned after ListView
-	is disposed. Update actual location of ColumnHeader when DisplayIndex
-	is modified.
-
-2007-03-01  Everaldo Canuto  <everaldo at simios.org>
-
-	* LinkLabel.cs: Improve CalcTrimRectangle.
-	
-	* ThemeWin32Classic.cs: Fix some compilation problem under VS 2003.
-
-2007-02-28  Everaldo Canuto  <everaldo at simios.org>
-
-	* LinkLabel.cs: Rename CalcMeasurementFactor as CalcTrimRectangle and
-	get rectangle as a result value.
-
-2007-02-28  Everaldo Canuto  <everaldo at simios.org>
-
-	* LinkLabel.cs: Theres some diferences between rectangle return from 
-	MeasureCharacterRanges and the area used for DrawString to fix this 
-	CalcMeasurementFactor method was created, it calcules the diferences
-	to be use later to adjust rectangle in draw operations. Fixes #80473.
-	
-	* ThemeWin32Classic.cs: Use factor calculated by CalcMeasurementFactor
-	to adjust draw rectangle.
-
-2007-02-27  Everaldo Canuto  <everaldo at simios.org>
-
-	* ThemeWin32Classic.cs: In DrawLinkLabel draw focus rectangle before draw
-	text and some other changes to reduce and optimize source code.
-
-2007-02-27  Jonathan Pobst  <monkey at jpobst.com>
-
-	* RadioButton.cs: Implement 2.0 event.
-	* RelatedImageListAttribute.cs: Implement new class.
-
-2007-02-27  Everaldo Canuto  <everaldo at simios.org>
-
-	* MenuAPI.cs: Change keynav_state before call SelectItem. Fixes #80901.
-
-2007-02-27  Jonathan Pobst  <monkey at jpobst.com>
-
-	* CheckBox.cs: Implement 2.0 functionality.
-
-2007-02-27  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* ListView.cs: Refactor Add and AddRange methods of
-	ListViewItemCollection, to not update the ListView
-	everytime an item is added in AddRange. Also move the update
-	code to a new CollectionChanged method, and call it
-	from other methods that need it as well (this should also fix some
-	bugs when Sorting is used).
-
-2007-02-27  Jackson Harper  <jackson at ximian.com>
-
-	* TextControl.cs: Try to never let the caret stay in a non-text
-	tag.
-	* TextBoxBase.cs: Update the caret.
-
-2007-02-26  Jonathan Pobst  <monkey at jpobst.com>
-
-	* XplatUIStructs.cs: Add some convenience methods for POINT structure.
-	* XplatUIWin32.cs: Add some convenience methods for RECT structure,
-	delete POINT structure, duplicate of one in XplatUIStructs.
-	* TextRenderer.cs: Use XplatUIWin32.RECT instead of UXTheme.RECT.
-
-2007-02-26  Gert Driesen  <drieseng at users.sourceforge.net>
-
-	* ListView.cs: Initialize LabelEditEventArgs after setting Text of
-	edit box since otherwise the Label would immediately be set (even if
-	the user did not modify the label). In OnKeyDown set Handled to true
-	if Return or Escape was pressed. In ColumnHeaderCollection unlink
-	columns that are to be removed. In ListViewItemCollection unlink items
-	that are to be removed.
-
-2007-02-24  Jonathan Pobst  <monkey at jpobst.com>
-
-	* TextRenderer.cs: If we set a GDI clip region, we need to clear
-	it when we are done.  [Fixes bug #80949]
-
-2007-02-23  Jonathan Pobst  <monkey at jpobst.com>
-
-	* Form.cs: Wrap checking ShowWithoutActivation in a NET_2_0 block.
-
-2007-02-23  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* ListView.cs: I forgot to commit the changes for ListView 
-	in my previous patch.
-
-2007-02-23  Jonathan Pobst  <monkey at jpobst.com>
-
-	* Clipboard.cs: Partially implement an overload of SetDataObject.
-	* Form.cs: Implement ShowWithoutActivation.
-	* XPlatUIWin32.cs: Fix for WM_SHOWNOACTIVATE for forms.
-
-2007-02-23  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	This is a first set of changes to make the Virtual mode works,
-	by avoiding the retrieval of ListViewItem instances until
-	draw time.
-
-	* ListView.cs: Store item position in the ListView instead of the
-	ListViewItem, this way we don't request the Bounds property of
-	ListViewItem inside the ListView calculations, as well as cache the item
-	size in item_size field. Store indexes instead of ListViewItem
-	instances in the matrix used by icon view. Add a ItemMatrixLocation
-	struct to hold the row and col info of the matrix info.
-
-	* ListViewItem.cs: Don't store the location anymore, and only cache
-	the rectangles for GetBounds. Use the ListView.GetItemLocation
-	method to retrieve the actual location.
-
-2007-02-23  Jonathan Pobst  <monkey at jpobst.com>
-
-	* TextRenderer.cs: Add clipping support, thanks to George.
-	[Fixes bug #80949]
-
-2007-02-23  Gert Driesen  <drieseng at users.sourceforge.net>
-
-	* ListViewItem.cs: Cancel label edit when item is removed from 
-	ListView.
-	* ListView.cs: Move setting of focus to EndEdit. Fire BeforeLabelEdit
-	event before the edit textbox is displayed.  Added CancelEdit method
-	which is used end to editing while ignoring the value set by the
-	user. In EndEdit, set focus to ListView to avoid losing focus to
-	other controls. In ListViewItemCollection.Clear, cancel editing of
-	any of the items.  In Remove, cancel editing of item being removed.
-	Avoid udplicate code by modifing RemoveAt to invoke Remove.
-
-2007-02-23  Gert Driesen  <drieseng at users.sourceforge.net>
-
-	* FileDialog.cs: Update FSEntry when move is successful. Fixes
-	bug #80948.  
-
-2007-02-23  Everaldo Canuto  <everaldo at simios.org>
-
-	* MainMenu.cs: Change Draw method to take care about MenuOrigin to be 
-	compatible with non X11 systems. Fixes #80901.
-
-2007-02-23  Gert Driesen  <drieseng at users.sourceforge.net>
-
-	* ListView.cs: Added bool argument to UpdateMultiSelection to specify
-	whether the item should be unselected and reselect. We do no want this
-	when we're starting to edit the label. Do not fire the 
-	SelectedIndexChanged event from ListView when its already been fired
-	by modifying ListViewItem.Selected. Fixes bug #80943.
-
-2007-02-23  Jonathan Pobst  <monkey at jpobst.com>
-
-	* TextRenderer.cs: Previos commit logic was backwards.
-
-2007-02-23  Jonathan Pobst  <monkey at jpobst.com>
-
-	* TextRenderer.cs: Don't add padding on MeasureText if we were
-	sent the NoPadding flag.
-
-2007-02-23  Everaldo Canuto  <everaldo at simios.org>
-
-	* ThemeWin32Classic.cs: Invert order of drawing operation with DrawImage
-	after DrawButton. To prevent image overlaps button borders SetClip and 
-	ResetClip added before and after draw image. Fixes #79129.
-
-2007-02-23  Everaldo Canuto  <everaldo at simios.org>
-
-	* FolderBrowserDialog.cs: Use ClientSize instead of Size to specify 
-	window size, it fix problem when you run under win32 that theres
-	Size diferent than ClientSize. Also fix controls size and positions
-	to mimic Win32. Fixes #80837.
-
-2007-02-22  Everaldo Canuto  <everaldo at simios.org>
-
-	* Form.cs: Handle WM_NCHITTEST and return HTMENU when point is on 
-	menu area to fix some problems for non X11 systems. Fixes #80613.
-
-2007-02-22  Jackson Harper  <jackson at ximian.com>
-
-	* TreeNode.cs: When a node is expanded, set its is_expanded flag
-	even if it doesn't have any children.
-
-2007-02-22  Jackson Harper  <jackson at ximian.com>
-
-	* TreeView.cs: Calculate the top node 'on the fly', this
-	eliminates issues where you need to click on the tree before
-	scrolling it to get the top node computed correctly.
-	* TreeNodeCollection.cs: We don't need to mess with the top node
-	anymore.
-
-2007-02-22  Jackson Harper  <jackson at ximian.com>
-
-	* DataGridViewRow.cs: Fix typo so height can actually be set.
-	Patch by Peter Grimm.
-
-2007-02-22  Gert Driesen  <drieseng at users.sourceforge.net>
-
-	* FileDialog.cs: Fixed support for renaming files and directories.
-	* ListView.cs: Do not lose focus when edit is canceled. Process
-	Escape as regular key (to prevent closing of dialogs).
-
-2007-02-22  Gert Driesen  <drieseng at users.sourceforge.net>
-
-	* ListView.cs: Removed TODO for LabelEdit. Removed extra tabs and
-	spaces. Changed spaces to tabs. Removed unnecessary init of bools.
-
-2007-02-22  Gert Driesen  <drieseng at users.sourceforge.net>
-
-	* FileDialog.cs: LabelEditEventArgs.Label now returns null when user
-	did not modify label.
-	* ListView.cs: Only set LabelEditEventArgs.Label if user actually
-	modified the text. Reset Label when user presses Escape in edit mode.
-	Move focus to ListView after having cancelled or finished editing the
-	label.
-
-2007-02-21  Gert Driesen  <drieseng at users.sourceforge.net>
-
-	* ComboBox.cs: Removed unnecessary initializations. Marked items field
-	private. Clear textbox when Text is set to null and SelectedIndex is
-	already -1.
-	* FileDialog.cs: Removed unnecessary initializations. Removed 
-	workarounds for ComboBox bugs that are now fixed. Modified
-	DefaultExt, InitialDirectory and Title property to change null to
-	zero-length string in getters. Avoid directly accessing fields.
-
-2007-02-20  Jackson Harper  <jackson at ximian.com>
-
-	* TextControl.cs: Remove RecalAlignments call, that was some
-	debugging leftovers.
-	- Don't use the line indent when we shouldn't.
-	* RichTextBox.cs: Add support for paragraph left indents.
-
-2007-02-20  Rolf Bjarne Kvinge  <RKvinge at novell.com>
-
-	* Control.cs: Fix BeginInvoke signature for 2.0 profile.
-	Seems like the class status pages doesn't catch params differences.
-
-2007-02-19  Gert Driesen  <drieseng at users.sourceforge.net>
-
-	* ComboBox.cs: Removed extra tabs. Changes spaces to tabs.
-
-2007-02-19  Gert Driesen  <drieseng at users.sourceforge.net>
-
-	* ComboBox.cs: Setting Text should have no effect if item text of
-	selected item exactly matches value. First lookup text using
-	case-sensitive comparison, and fallback to case-insensitive comparison.
-	FindString(Exact) returns -1 if search string is null. On 2.0 profile, 
-	allow startIndex to be last index. Changed ArgumentOutOfRangeException
-	paramname to match MS. Restart from first item if string is not found
-	after startIndex. Fixed paramname of ArgumentNullException that is
-	thrown for null value in ObjectCollection.Contains.
-
-2007-02-19  Everaldo Canuto  <everaldo at simios.org>
-
-	* XplatUIStructs.cs: WM_XXX UISTATE elements uncommented.
-
-2007-02-19  Rolf Bjarne Kvinge <RKvinge at novell.com> 
-
-	* ListControl.cs: In SelectedValue use value.Equals to compare for
-	equality instead of ==, otherwise it will fail for strings.
-	Fixes #80794.
-
-2007-02-19  Rolf Bjarne Kvinge <RKvinge at novell.com> 
-	
-	* ComboBox.cs: Switch the order to ShowSelection and ActivateCaret,
-	since the caret won't show up unless ShowSelection is true. 
-	Fixes #80795.
-
-2007-02-19  Rolf Bjarne Kvinge <RKvinge at novell.com> 
-
-	* Application.cs: When disabling all forms but the main form, do not
-	  disable any descendants of the main form (such as mdi children or
-	  other parented forms). Fixes #80822 on Windows.
-	* Form.cs: If we have a parent, set the WS_CHILD style.
-	* Control.cs: Update the window styles if the control whose parent has
-	  changed is a form (the WS_CHILD style has to be switched).
-
-2007-02-19  Everaldo Canuto  <everaldo at simios.org>
-
-	* XplatUIStructs.cs: MsgUIState structure added.
-
-2007-02-18  Gert Driesen  <drieseng at users.sourceforge.net>
-
-	* FileDialog.cs: Removed need for separate fileName field. On 2.0
-	profile, do not check filename(s) for illegal character if filename(s)
-	were set non-interactively but always check on 1.0 profile. Fixed NRE
-	 in DefaultExt and only strip off first leading dot. Improve exception
-	message when invalid Filter is set. Do not ignore InitialDirectory if
-	it does no exist. Store specified Title, and if empty use default
-	title (depending on type of dialog). Added an internal DialogTitle 
-	property for retrieving dialog title. Fixed logic of displayed dir to
-	more closely match MS. Avoid setting ComboBox.Text to a zero-length 
-	string as its buggy.
-	* OpenFileDialog.cs: In OpenFile, throw ArgumentNullException if
-	FileName is a zero-length string (it can never be null). Override 
-	DialogTitle property to set default title of dialog box.
-	* SaveFileDialog.cs: Override DialogTitle property to set default
-	title of dialog box.
-
-2007-02-18  Gert Driesen  <drieseng at users.sourceforge.net>
-
-	* FileDialog.cs: Modify default text of filename and filetype labels
-	to match that of MS. Reset do_not_call_OnSelectedIndexChanged...
-	after we've updated the SelectedIndex. Fixes part of bug #80887.
-	* SaveFileDialog.cs: Set text of filetype label.
-
-2007-02-16  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* LabelEditEventArgs.cs: New internal SetLabel method, to set the
-	label field. Needed by latest Jackson's fixes for ListView.
-
-2007-02-16  Andreia Gaita  <avidigal at novell.com>
-
-	* PrintPreviewControl/PrintPreviewDialog: Properly dispose of 
-	print preview images.
-
-2007-02-16  Jackson Harper  <jackson at ximian.com>
-
-	* ListView.cs: Make AfterLabelEdit work correctly.
-	* FileDialog.cs: After changing the name of the folder, we have to
-	make sure that it is created, or that we pop up an error because
-	it already exists.
-
-2007-02-16  Jackson Harper  <jackson at ximian.com>
-
-	* X11Dnd.cs: Implement aliases on mime handlers, so things like
-	System.String are mapped to text.
-	- Handle dataobjects, getting all the possible formats out of them
-	- We dont need the drag event args before we give feedback. This
-	allows feedback cursors to be immediate before selections have
-	been converted.
-
-2007-02-16  Jackson Harper  <jackson at ximian.com>
-
-	* TextBoxBase.cs: Modified the method for inserting images to
-	taking a line and position instead of tag and position.
-	* RichTextBox.cs: Handle PngBlip data by inserting the png image
-	into the RTF file.
-	* TextControl.cs: Allow images to be inserted as the first tag of
-	a line.
-	- Fix some off by one issues when we assume the first tag is a
-	text tag, not an image tag.
-
-2007-02-15  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* ListView.cs: Set focus to ListView when ItemControl gets a
-	WM_RBUTTONDOWN message, to mimic .Net behaviour. 
-	Fixes part of #80467.
-
-2007-02-15  Rolf Bjarne Kvinge <RKvinge at novell.com> 
-
-	* DateTimePicker.cs: Call RecreateHandle if the Format changes and
-	  validate Text input (if null or empty string reset Value to default
-	  value). Fixes #80830.
-
-2007-02-14  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* ListView.cs: Set owner as null for columns and items when
-	Dispose is invoked. Fixes #80607.
-
-2007-02-14  Jonathan Pobst  <monkey at jpobst.com>
-
-	* ToolStrip.cs: Allow LayoutStyle.Flow, make sure to call OnOpening when
-	showing DropDowns, don't show a Grip when doing Flow layout.
-	[This fixes the toolbox in PDN 2.72.]
-	* ToolStripItem.cs: Add Anchor property and some internal properties to
-	reduces needed changes to FlowLayout.
-	* ToolStripOverflow.cs: Remove unused variable.
-	* ToolStripSplitStackLayout.cs: If a ToolStripItem isn't visible, don't
-	use it in the layout calculations.
-
-2007-02-13  Everaldo Canuto  <everaldo at simios.org>
-
-	* ToolTip.cs: Add HotkeyPrefix.Hide to MeasureString format, it fix an issue
-	reported in #79640.
-	
-	* ThemeWin32Classic.cs: Uses format for MeasureString in ToolTipSize to fiz
-	size calculation.
-
-2007-02-13  Everaldo Canuto  <everaldo at simios.org>
-
-	* ToolBar.cs, ToolBarButton.cs: Revert and remove HotkeyPrefix from 
-	MeasureString format, it can make button very large in some cases, it is
-	strange but is what win32 do.
-
-2007-02-13  Everaldo Canuto  <everaldo at simios.org>
-
-	* ToolBar.cs, ToolBarButton.cs: Uses format in MeasureString to fix string 
-	size calculation.
-
-	* ThemeWin32Classic.cs: Set HotkeyPrefix in toolbar text format to fix text
-	rendering, the value is based on MenuAccessKeysUnderlined.
-
-2007-02-13  Everaldo Canuto  <everaldo at simios.org>
-
-	* Theme.cs: Change MenuAccessKeysUnderlined to "true" that is value used
-	for most themes.
-	
-	* ThemeWin32Classic.cs: Override MenuAccessKeysUnderlined as false.
-	
-	* ThemeNice.cs, ThemeGtk.cs, ThemeClearlooks.cs: Remove always_draw_hotkeys
-	and use MenuAccessKeysUnderlined instead.
-
-2007-02-13  Andreia Gaita  <avidigal at novell.com>
-
-	* ContainerControl.cs: Focus fix for nunit treeview selection bug.
-	A selected control would not get a Focus call if:
-		- the default active control of the container is the same as
-		  the one that was selected
-		- we are switching from one container to another
-	Under these conditions, the container being selected already has
-	an active_control, which is the same as the one being activated, 
-	so set_ActiveControl would always return and not send the Focus
-	call. Fix to check if the currently active control of the container
-	is actually focused.
-
-2007-02-13  Jonathan Pobst  <monkey at jpobst.com>
-
-	* StatusStrip.cs: Implement the spring layout.
-	* ToolStripControlHost.cs: Make sure the hosted control's visibility
-	always matches the host.
-	* ToolStripItem.cs: Write a more accurate layout for TextBeforeImage
-	and TextAfterImage.
-
-2007-02-13  Andreia Gaita  <avidigal at novell.com>
-
-	* Control.cs: Code reorganization only.
-	  - Reorganize the WndProc cases so that each case has it's own handling method, 
-	  to help with the no-line-numbering stack traces.
-	  - Formatting changes (it's vstudio's fault, really :p)
-
-2007-02-13  Rolf Bjarne Kvinge <RKvinge at novell.com> 
-
-	* MonthCalendar.cs: Switch to using Thread.CurrentCulture instead of
-	  Thread.CurrentUICulture to match DateTimePicker's (and MS)
-	  behaviour.
-
-2007-02-12  Jackson Harper  <jackson at ximian.com>
-
-	* RichTextBox.cs:
-	* TextBox.cs: By default we have a non multiline document
-	- use the multiline property instead of the internal variable
-	* TextBoxBase.cs: Treat multiline and non multiline the same in
-	most places.
-	- Use the documents multiline flag instead of tracking it ourself
-	* TextControl.cs: Attempt at getting multiline to match MS
-	behavior.  Lines now track an offset, which is either their X or Y
-	offset depending on whether or not we are in multiline mode.
-	- Update all the methods to understand that lines have an X value.
-	- Fix crash in Undo::Duplicate when empty lines are deleted.
-
-2007-02-12  Everaldo Canuto  <everaldo at simios.org>
-
-	* Label.cs: CalcPreferredHeight and CalcPreferredWidth methods removed and 
-	code moved to properties PreferredHeight and PreferredWidth. It solve the
-	all problems when preferred sizes must be recalculated. Fixes #80801.
-
-2007-02-12  Everaldo Canuto  <everaldo at simios.org>
-
-	* Label.cs: Fix CalcPreferredHeight for 2.0 that must return only
-	font height when compatible_text_rendering is false. Partially fix #80801.
-
-2007-02-09  Gert Driesen  <drieseng at users.sourceforge.net>
-
-	* Form.cs: Fixed typo in exception message. Fixes bug #80779.
-
-2007-02-09  Gert Driesen  <drieseng at users.sourceforge.net>
-
-	* Form.cs: Improved exception messages in ShowDialog.
-
-2007-02-09  Gert Driesen  <drieseng at users.sourceforge.net>
-
-	* PrintDialog.cs: On 1.0 profile, throw ArgumentException in RunDialog if
-	PrinterSettins has not been set. On 2.0 profile, initialize PrinterSettings
-	if not set. Fixes bug #80764. Avoid accessing current_settings field
-	directly.
-
-2007-02-08  Everaldo Canuto  <everaldo at simios.org>
-
-	* Theme.cs: An new property MenuAccessKeysUnderlined added with default value
-	false.
-
-	* SystemInformation.cs: An new property MenuAccessKeysUnderlined added, it is
-	public in 2.0 and for easy maintenance and dont break compatibility it is 
-	internal in 1.1.
-	
-2007-02-08  Jonathan Pobst  <monkey at jpobst.com>
-
-	* ToolStripItem.cs: Implement using images from ImageList.
-
-2007-02-08  Rolf Bjarne Kvinge <RKvinge at novell.com> 
-
-	* DateTimePicker.cs: Change default date-formatting culture from
-	  CurrentThread.CurrentUICulture to CurrentThread.CurrentCulture,
-	  seems to be the way MS does it.
-
-2007-02-08  Andreia Gaita  <avidigal at novell.com>
-
-	* PrintPreviewControl.cs: rewrite toolbar code to fix #80725. Correct 6-up image 
-	(the 6 was cut off on the right side)
-
-2007-02-08  Jonathan Pobst  <monkey at jpobst.com>
-
-	* Form.cs: Tell MenuStrips to close when the form is clicked.
-	* MenuStrip.cs, ToolStrip.cs, ToolStripControlHost.cs, 
-	ToolStripDropDown.cs, ToolStripDropDownItem.cs, ToolStripItem.cs,
-	ToolStripItemCollection.cs, ToolStripMenuItem.cs, ToolStripProfessionalRenderer.cs,
-	ToolStripSplitButton.cs, ToolStripSplitStackLayout.cs: Add 
-	support for Overflow, where items that do not fit are automatically
-	reparented to a drop down menu.
-	* ToolStripOverflow.cs, ToolStripOverflowButton.cs: Added.
-	Also: fixes bug #80747.
-
-2007-02-08  Rolf Bjarne Kvinge <RKvinge at novell.com> 
-
-	* ComboBox.cs: Remove warning (unused code).
-	* ScrollableControl.cs: Remove warning for 1.1 profile.
-
-2007-02-08  Rolf Bjarne Kvinge <RKvinge at novell.com> 
-
-	* Form.cs: Remove a warning.
-
-2007-02-08  Rolf Bjarne Kvinge <RKvinge at novell.com> 
-
-	* DateTimePicker.cs: Fixed a NRE if CustomFormat was null. Handles the
-	  'g' specifier, not documented anywhere, but seems to always show up
-	  as a single space (might have something to do with the DateTime 'g'
-	  specifier, which is the era format, but since DateTimePicker can't
-	  go earlier than 1753 it wouldn't matter) . Fixed quote handling,
-	  won't crash if the format has an unmatched quote. Now shows
-	  single-character formats correctly. Fixes #80744.
-
-2007-02-08  Jonathan Pobst  <monkey at jpobst.com>
-
-	* StatusStrip.cs: Stretch property needs to call base.Stretch,
-	not this.Stretch to fix stack overflow. [Fixes bug #80760]
-
-2007-02-07  Chris Toshok  <toshok at ximian.com>
-
-	* ThemeWin32Classic.cs (DrawButtonBase): don't clear to the
-	background color.  it overwrites the background image we've
-	already painted.  Fixes #80599.
-
-2007-02-07  Chris Toshok  <toshok at ximian.com>
-
-	* DataGrid.cs: return immediately from Edit() when there are no
-	columns.  Fixes #80662.
-
-2007-02-07  Chris Toshok  <toshok at ximian.com>
-
-	* MessageBox.cs: fix #80625.  don't always show the Help button in
-	2.0.  use the displayHelpButton parameter to determine if we
-	should show it. Also, make the internal show_help field private.
-
-2007-02-07  Chris Toshok  <toshok at ximian.com>
-
-	* Control.cs (SetVisibleCore): check in the proposed patch for
-	80604, and set is_visible before calling CreateControl.
-
-2007-02-07  Jonathan Pobst  <monkey at jpobst.com>
-
-	* ListView.cs: UseCompatibleStateImageBehavior setter changed from NIEX to 
-	MonoInternalNote.  This is added automagically by VS2005, so let's not crash
-	on it.
-
-2007-02-06  Everaldo Canuto  <everaldo at simios.org>
-
-	* MenuAPI.cs: hotkey_active internal field added, it is required because
-	we need to know when hotkeys must be draw, before this change a keystate
-	Navigating was used but we can have menu in navigating state without
-	hotkeys. Fixes #80694.
-	
-	* ThemeWin32Classic.cs: Only draw hot keys when hotkey_active is true.
-
-2007-02-06  Rolf Bjarne Kvinge <RKvinge at novell.com> 
-
-	* Control.cs: Handle WM_CAPTURECHANGED in 1.1 code as well, and change
-	  corresponding events and methods to be internal for 1.1 profile and
-	  public for 2.0 profile (required by SizeGrip).
-	* Form.cs: Use SizeGrip as a virtual SizeGrip (and don't add it to the
-	  implicit control list). Don't set the size nor the location of the
-	  SizeGrip anymore as it's not needed.
-	* SizeGrip.cs: Rewrote large parts, it now supports a virtual mode to
-	  draw directly on the captured control (fixes #80656). Removed
-	  ShowGrip (it wasn't used anywhere), redraw (always true), added
-	  GetDefaultSize and GetDefaultRectangle to calculate defaults.
-	* ScrollableControl.cs: Make UpdateSIzeGripVisible internal so it can
-	  be called from SizeGrip.
-
-2007-02-06  Rolf Bjarne Kvinge <RKvinge at novell.com> 
-
-	* Timer.cs: Throw ArgumentException if Interval <= 0.
-
-2007-02-05  Jackson Harper  <jackson at ximian.com>
-
-	* TreeView.cs: We need to check scrollbar visibility when window
-	visibility is updated, because non visible trees don't ever add
-	scrollbars.
-	* Cursor.cs: We want the override cursor to be reset to NULL when
-	we set current cursor to the default cursor.
-
-2007-02-05  Jackson Harper  <jackson at ximian.com>
-
-	* TextControl.cs: Don't have crlfs when we are non multiline.
-	- Consolidate the line position.
-
-2007-02-05  Jackson Harper  <jackson at ximian.com>
-
-	* X11Keyboard.cs: BACK+CTRL gets a special char code.
-
-2007-02-03  Rolf Bjarne Kvinge <RKvinge at novell.com> 
-
-	* XplatUIX11.cs: Implemented WM_CAPTURECHANGED support, we're now
-	  handling LeaveNotify->NotifyUngrab in order to send
-	  WM_CAPTURECHANGED. However sometimes the NotifyUngrab arrives late
-	  after calling XUngrabPointer, so we call WindowUngrabbed directly
-	  from UngrabWindow in order to send WM_CAPTURECHANGED immediately.
-	* Control.cs: Handle WM_CAPTURECHANGED in order to raise
-	  MouseCaptureChanged correctly. Also create handles if changing
-	  Capture (matches MS behaviour).
-
-2007-02-02  Rolf Bjarne Kvinge <RKvinge at novell.com> 
-
-	* SizeGrip.cs: Make the last change 2.0 only.
-
-2007-02-02  Rolf Bjarne Kvinge <RKvinge at novell.com> 
-
-	* SizeGrip.cs: If resizing and the capture is lost, revert any size
-	  changes to initial size (fixes #80597).
-
-2007-02-02  Rolf Bjarne Kvinge <RKvinge at novell.com> 
-
-	* SizeGrip.cs: Use the normal icon for SizeGrip if it is disabled.
-
-2007-02-02  Rolf Bjarne Kvinge <RKvinge at novell.com> 
-
-	* SizeGrip.cs: Only draw sizegrip if enabled (but always draw
-	  background) and only allow dragging if enabled. This way the
-	  sizegrip can be used to fill the open square that otherwise would
-	  have been shown in the bottom right corner of ScrollableControl
-	  when ScrollableControl is not suppose to support sizing.
-	* ScrollableControl.cs: Create UpdateSizeGripVisible to decide when the
-	  sizegrip is shown and enabled, and hook up with necessary events.
-
-2007-02-01  Chris Toshok  <toshok at ximian.com>
-
-	* DataGridTextBoxColumn.cs: clean up the
-	GetFormattedString/GetColumnValueAtRow combination of functions.
-	Also fix UpdateUI, and the initial state of
-	IsInEditOrNavigateMode.
-
-	* DataGridTextBox.cs: don't chain up to base.OnMouseWheel - we
-	aren't supposed to scroll the textbox here, we're supposed to
-	scroll the datagrid.
-
-2007-02-01  Chris Toshok  <toshok at ximian.com>
-
-	* ComboBox.cs: use vscrollbar_ctrl.Dock instead of explicitly
-	setting the position.
-
-2007-02-01  Chris Toshok  <toshok at ximian.com>
-
-	* DataGrid.cs (OnLeave): we can now do the CancelCurrentEdit thing
-	here, since the most recent focus fixes keep us from generating
-	the Leave event when our textbox gets focus.
-	(Edit): we should be passing null for the column style's
-	instantText parameter.
-	
-2007-02-01  Jonathan Pobst  <monkey at jpobst.com>
-
-	* ToolStripDropDownItem.cs: Make sure DropDownOpening event is 
-	raised.  Fixes menu text/icons not showing up in PDN.
-
-2007-02-01  Rolf Bjarne Kvinge  <RKvinge at novell.com>
-
-	* Control.cs: Remove code in constructor that makes every
-	control with WS_CHILD set have initial location -1, -1.
-
-2007-01-31  Jackson Harper  <jackson at ximian.com>
-
-	* X11Dnd.cs: Take the keyboard on init to reduce coupling with
-	XplatUIX11.
-	* XplatUIX11.cs: Give teh keyboard to teh dnd.
-
-2007-01-31  Jackson Harper  <jackson at ximian.com>
-
-	* X11Dnd.cs: Use IDataObject instead of the DataObject class.
-	- Remove some debug code.
-
-2007-01-31  Jackson Harper  <jackson at ximian.com>
-
-	* XplatUIX11.cs: If you set the override cursor during a grab, it
-	should actually override the grab cursor.  This comes into play
-	when you are setting custom cursors in a DND feedback method.
-
-2007-01-31  Jackson Harper  <jackson at ximian.com>
-
-	* X11Dnd.cs: Add support for handling the QueryContinue and
-	GiveFeedback events.
-	- Cancel drag and drop actions when the escape key is clicked.
-	* XplatUIX11.cs: Let the dnd subsystem get key events, so that it
-	can handle the ESCAPE key.
-	- Allow dnd to swallow BUTTONUP messages if it needs to.  This is
-	done when dnd events are continued after the button is released.
-	- Add a new helper method so that dnd can translate key events.
-
-2007-01-31  Alexander Olk  <alex.olk at googlemail.com>
-
-	* FileDialog.cs: Rewrite of Jacksons OnClickCancelButton patch to
-	make it more obvious what is happening.
-
-2007-01-30  Jackson Harper  <jackson at ximian.com>
-
-	* XplatUIX11.cs: Don't break when handling button release in drag
-	and drop operations. We need that BUTTONUP message to get through
-	so capture is released.
-	* X11Dnd.cs: We don't need to manually grab the pointer anymore,
-	this is handled automatically when the mouse is down.
-
-2007-01-30  Jackson Harper  <jackson at ximian.com>
-
-	* FileDialog.cs: OnClickCancelButton gets called whenever the dialog
-	is closed, so we need to make sure that we aren't changing the
-	dialog result when the OK (Open or Save) button has been clicked
-	and we are closing the window ourselves.  Note we don't need to
-	worry about the cache being written in this case, because it was
-	already done in the previous FilOk call.
-
-2007-01-30  Rolf Bjarne Kvinge  <RKvinge at novell.com>
-	
-	* DateTimePicker.cs: Remove a warning.
-	* ComboBox.cs: Remove a couple of warnings.
-
-2007-01-29  Chris Toshok  <toshok at ximian.com>
-
-	* XplatUIX11.cs: don't crash, and remove the icon if the user has
-	set one, if SetIcon is passed a null icon.
-
-2007-01-29  Andreia Gaita  <avidigal at novell.com>
-
-	* TextBox.cs: Redraw when the password characters changes
-	* TextControl.cs: Check if textbox has a password char and draw 
-	a line of password chars instead of the text in the line. LineTag gets 
-	an extra Draw() method which allows document.Draw to override the text 
-	that will be drawn. Removes 1024 char limitation on length of passworded 
-	lines.
-
-2007-01-29  Jackson Harper  <jackson at ximian.com>
-
-	* TextBoxBase.cs: Deleting sections of text is undoable.  Deleting
-	single chars is not.
-
-2007-01-28  Jonathan Pobst  <monkey at jpobst.com>
-
-	* TextRenderer.cs: Fix cutting off the bottom of letters like "j" by
-	one pixel.  Fix a StackOverflowException caused by an overload wrongly
-	calling itself.
-
-2007-01-26  Everaldo Canuto  <everaldo at simios.org>
-
-	* MenuAPI.cs: Fixed kerboard grab problem when "enter"key is pressed,
-	also remove ProcessArrowKey and put the code inside ProcessKeys.
-
-2007-01-26  Jonathan Pobst  <monkey at jpobst.com>
-
-	* PaddingConverter.cs: Added.
-
-2007-01-26  Rolf Bjarne Kvinge  <RKvinge at novell.com>
-	
-	* ThemeWin32Classic.cs: Only draw the text of a StatusBar if
-	ShowPanels is false (fixes #80600). Only draw up to 127 characters
-	of text (fixes #80601). For panels clip the text to draw to the
-	panel (fixes #80603).
-
-2007-01-26  Rolf Bjarne Kvinge  <RKvinge at novell.com>
-
-	* ComboBox.cs: Fixed implementation of ResetText.
-
-2007-01-25  Jackson Harper  <jackson at ximian.com>
-
-	* TextControl.cs: For the last char of a line we need to use the
-	line size, not that chars width, since it won't actually be
-	computed since the right side of a char is based on the start of
-	the left side of the next char, and the next char does not exist.
-
-2007-01-25  Chris Toshok  <toshok at ximian.com>
-
-	* Splitter.cs: fix the new unit tests, and reindent some switch
-	statements.
-
-2007-01-25  Rolf Bjarne Kvinge  <RKvinge at novell.com>
-
-	* ComboBox.cs: Implemented 2.0 methods and events.
-	* TextBoxBase.cs: Added OnTextUpdate, so that
-	ComboBox.ComboTextBox can inform ComboBox of it.
-
-2007-01-25  Jackson Harper  <jackson at ximian.com>
-
-	* TextControl.cs: Respect ShowSelection when deciding whether or
-	not to display the caret, this allows comboboxes to have carets
-	when the combotextbox does not have focus.
-
-2007-01-25  Jackson Harper  <jackson at ximian.com>
-
-	* TextControl.cs: Add a Suspend/Resume for updating, basically the
-	same as the Suspend/Resume for recalc, except this will do actual
-	Invalidates.
-	- New Undo manager, works much like the MS version.
-	- Implemented Redo
-	* TextBoxBase.cs: The Cut operation is undoable.
-
-2007-01-25  Rolf Bjarne Kvinge  <RKvinge at novell.com>
-	
-	* TextBoxBase.cs: Don't antialias text. Makes it look way better
-	on Windows (no difference on Linux).	
-
-2007-01-25  Rolf Bjarne Kvinge  <RKvinge at novell.com>
-
-	* XplatUIWin32.cs: Set SWP_NOACTIVATE in RequestNCRecalc as well,
-	we don't want to activate any windows. Fixes #79433.
-
-2007-01-25  Jonathan Pobst  <monkey at jpobst.com>
-
-	- ButtonBase.cs: Fix capitalization of parameter: disposing.
-	[Fixes bug #80609]
-
-2007-01-25  Alexander Olk  <alex.olk at googlemail.com>
-
-	* FileDialog.cs:
-	- Move to using System.ComponentModel.EventHandlerList
-	- Replace Refresh with Invalidate
-	- Clear the mime filecache on closing
-	- Some other memory reducing work. After beeing closed FD now uses
-	  only about 300 KB for the fdo mime stuff plus the memory of the
-	  cached icons.
-	* Mime.cs: Changed coding style and removed unnecessary commented
-	code. Some more memory memory reducing work.
-
-2007-01-25  Rolf Bjarne Kvinge  <RKvinge at novell.com>
-
-	* ComboBox.cs: Implemented FlatStyle and DropDownHeight, and added
-	a few other missing 2.0 properties.
-	* Theme.cs: Added DrawFlatStyleComboBox.
-	* ThemeWin32Classic.cs: Implemented DrawFlatStyleComboBox.
-
-2007-01-24  Chris Toshok  <toshok at ximian.com>
-
-	* XplatUIX11.cs: fix the wake_waiting logic - we always clear the
-	wake_waiting flag, not just when there's data to be read.  if we
-	don't, then future wakeup's won't reach us and we'll be doomed to
-	wait for the entire 1 second timeout forever (unless there are X
-	events to be had).
-
-2007-01-24  Jonathan Pobst  <monkey at jpobst.com>
-
-	* ComboBox.cs: FindStringExactMaxException doesn't throw AOORE on 2.0
-	until you pass Items.Count, not Items.Count - 1 like 1.1.
-
-2007-01-24  Gert Driesen  <drieseng at users.sourceforge.net>
-
-	* ColumnHeader.cs: Fixed ParamName in ArgumentOutOfRangeException.
-
-2007-01-24  Jonathan Pobst  <monkey at jpobst.com>
-
-	* ToolStripContainer.cs: The recent Dock fix exposed that I was
-	adding the panels in the wrong order.
-
-2007-01-24  Jackson Harper  <jackson at ximian.com>
-
-	* TextBoxBase.cs: When we move the caret we also need to move the
-	selection, this fixes some random crashing after doing select
-	text, unselect, delete a char, paste.
-
-2007-01-24  Rolf Bjarne Kvinge  <RKvinge at novell.com>
-
-	* Form.cs: Update SizeGrip's location even if it's not visible (fixes #80592).
-
-2007-01-23  Everaldo Canuto  <everaldo at simios.org>
-
-	* Control.cs: In OnParentBackgroundImageChanged remove conditions to call
-	OnBackgroundImageChanged, it mimics win32 behavior. Fixes #80553. 
-	* ToolBar.cs: Force redraw in BackgroundImageChanged.
-
-2007-01-23  Everaldo Canuto  <everaldo at simios.org>
-
-	* ToolBar.cs:
-	- Implement support for vertical toolbars. Fixes #80539;
-	- Call LayoutToolBar when resize, it fix some other problems in layout.
-	- Rename requested_height to requested_size, as we can have width on it
-	when toolbar is vertical.
-	- Create a private property "Vertical" that uses Dock to verify when 
-	toolbar is vertical or not.
-	- Set ControlStyles when change Dock property.
-	- Refactory in LayoutToolBar to have better variables names and to support
-	vertical toolbars.
-	- Fixes default value for ButtonSize when button count is equal zero, size
-	must be (39, 36) test case writed.
-
-2007-01-23  Chris Toshok  <toshok at ximian.com>
-
-	* Control.cs: fix the checks so that they work correctly for mdi
-	parents/children.
-
-2007-01-23  Chris Toshok  <toshok at ximian.com>
-
-	* Control.cs: ControlCollection seems to have super-secret
-	abstraction breaking knowledge of Mdi containers.  allow MdiClient
-	to add toplevel controls.
-
-2007-01-23  Chris Toshok  <toshok at ximian.com>
-
-	* Control.cs: throw an ArgumentException if a toplevel control is
-	added to our control collection from ControlCollection.Add, as
-	well as from ControlCollection.IList.Add.  This fixes the
-	ControlSetTopLevelTest.TestTopLevelAdd unit test.
-
-	Also, in ControlCollection.IList.Add, don't through an
-	ArgumentNullException, throw an ArgumentException, when value ==
-	null.  This matches MS.
-
-2007-01-23  Chris Toshok  <toshok at ximian.com>
-
-	* BindingSource.cs: initial, incomplete, implementation of
-	BindingSource.
-
-2007-01-23  Jackson Harper  <jackson at ximian.com>
-
-	* TextControl.cs:
-	* TextBoxBase.cs: Checking in some pieces of the undo stuff so
-	that I can fix a broken unit test (TextBoxTest::ClearUndo)
- 	
-2007-01-23  Everaldo Canuto  <everaldo at simios.org>
-
-	* ToolBar.cs: Add status fields to ToolBarButtonInfo.
-
-2007-01-23  Andreia Gaita  <avidigal at novell.com>
-
-	* TreeNode.cs: Add new 2.0 ImageKey and SelectedImageKey properties.
-	* TreeNodeCollection.cs: New Add() methods, ContainsKey and
-	IndexOfKey() for 2.0
-
-2007-01-23  Rolf Bjarne Kvinge  <RKvinge at novell.com>
-
-	* XplatWin32.cs: In RequestNCRecalc call SetWindowPos with SWP_NOZORDER
-	to prevent it from changing z-order.
-	* MdiWindowManager.cs: Refactor part of SetWindowState to MdiClient, only
-	leave UI updates in MdiWindowManager.
-	* InternalWindowManager.cs: Check for 0 sized nc areas and make them
-	1 sized (NC handling goes weird on Linux otherwise).
-	* MdiClient.cs: Add missing ExStyle (WS_EX_CLIENTEDGE), so it's no longer
-	necessary to handle WM_NCCALCSIZE anymore. This also made it possible to
-	remove a few NCRequestRecalcs. Changed calculations in IconicBounds
-	to use ClientSize of MdiClient instead of entire size. Refactored ActivateChild
-	and SetWindowState(s) to allow for changing the size of an activated child
-	before activating it (reduces a lot of flicker).
-
-2007-01-22  Jonathan Pobst  <monkey at jpobst.com>
-
-	* Form.cs: Changing FormBorderStyle has different semantics based
-	on whether the Form is visible or not.  If not visible, don't change
-	the Size.  But InvalidateNC needs to be called to force the window
-	to pick up the changes and redraw itself.  [Fixes bug #80574]
-
-2007-01-22  Jonathan Pobst  <monkey at jpobst.com>
-
-	[Moma work]
-	* ContainerControl.cs: ProcessCmdKey.
-	* ErrorProvider.cs: new constructor.
-	* Form.cs: fix AutoValidateEvent compiler warning.
-	* Label.cs: fix OnAutoSizeChanged compiler warning.
-	* MenuStrip.cs: fix CanOverflow compiler warning.
-	* TabControl.cs: SelectTab, OnSelected methods, Selected event.
-	* TextBox.cs: Dispose.
-	* ToolStrip.cs: CanOverflow, re-enable double buffering.
-	* ToolStripControlHost.cs: fix CausesValidation compiler warning.
-	* ToolStripDropDown.cs: fix ContextStripMenu compiler warning.
-	* ToolStripItem.cs: Overflow, RightToLeft properties.
-
-2007-01-22  Rolf Bjarne Kvinge  <RKvinge at novell.com>
-
-	* Form.cs: Move the layout of the main form to MdiWindowManager.
-	* MdiWindowManager.cs: If WindowState changes from or to Maximized,
-	do a layout of the main window to update MdiClient's client area to
-	the right area. Fixes #80533. Remove the calculation of nc size, 
-	it was just wrong and the correct one is the same as for 
-	InternalWindowManager. 
-
-2007-01-20  Jonathan Pobst  <monkey at jpobst.com>
-
-	* Control.cs: Setting Anchor or Dock needs to reset the other
-	to its default.  [Fixes bug #80556]
-
-2007-01-20  Chris Toshok  <toshok at ximian.com>
-
-	* CheckedListBox.cs: class status changes.
-
-	* ScrollableControl.cs: same.
-
-	* RichTextBox.cs: same.
-
-	* ContainerControl.cs: same.
-
-	* ListView.cs: same.
-
-	* NotifyIcon.cs: same.
-
-	* MenuStrip.cs: same.
-
-	* RadioButton.cs: same.
-
-	* CheckBox.cs: same.
-
-	* PrintPreviewDialog.cs: same.
-
-	* Form.cs: same.
-
-2007-01-19  Jonathan Pobst  <monkey at jpobst.com>
-
-	* TreeNode.cs: Apply Alan's patch for Name property.
-
-2007-01-19  Rolf Bjarne Kvinge  <RKvinge at novell.com>
-	
-	* Form.cs: Implemented SizeGripStyle.
-	* SizeGrip.cs: Check for minimum and maximum size for the
-	control being resized and only resize if size has actually
-	changed.
-
-2007-01-19  Chris Toshok  <toshok at ximian.com>
-
-	* DataGridColumnStyle.cs: stop setting _readonly in the
-	PropertyDescriptor setter.  fixes a unit test failure.
-
-	also, rename ParentReadOnly to TableStyleReadOnly, and have it
-	just consult our table style (if we have one).  We don't need to
-	consult the datagrid readonly attribute because that's passed in
-	as the _ro arg to Edit.  this simplifies things a little.
-	
-	* DataGrid.cs: use CurrentColumn instead of
-	current_cell.ColumnNumber just to simplify some of the code.
-
-	switch the order of some things in the CurrentCell setter to keep
-	the previous cell from getting a textbox again -
-	EnsureCellVisibility causes scrolling to happen, which calls Edit.
-	So we need to set the new cell before calling it.
-	
-	call Edit in OnEnter, as does Microsoft.
-	
-	also, make sure the current table style isn't the one we create
-	initially when checking to see if it's different than the one
-	we're setting it to in BindColumns (this fixes #80421).
-
-	* GridTableStylesCollection.cs: table styles can have "" for a
-	mapping name.  part of the fix for #80421.
-
-	* DataGridTextBoxColumn.cs: simplify the readonly calculation in
-	Edit significantly.
-
-2007-01-18  Jonathan Pobst  <monkey at jpobst.com>
-
-	* TextRenderer.cs: Rewrote to be complete-er, more MS-matching-er,
-	and less GDI object leaky-er.
-
-2007-01-18  Andreia Gaita  <avidigal at novell.com>
-
-	* LinkLabel.cs: Add opaque control style
-
-2007-01-18  Jackson Harper  <jackson at ximian.com>
-
-	* TextControl.cs: Calculate width properly.
-	- Don't store the tag's X offset, this can be figured out very
-	easily.
-	- When getting the caret tag make sure to get the last empty tag.
-
-2007-01-18  Jonathan Pobst  <monkey at jpobst.com>
-
-	* Form.cs: Recalculate our size after setting a new FormBorderStyle.
-	[Fixes bug #79959]
-
-	* Control.cs: Color.Empty shouldn't count for previous transparent
-	redraw changes.
-
-2007-01-18  Jackson Harper  <jackson at ximian.com>
-
-	* TextBox.cs:
-	* RichTextBox.cs:
-	* TextControl.cs: Starting to merge in some pieces of my older
-	undo work.  Basically just some slight cleanup of the undo API.
-
-2007-01-18  Rolf Bjarne Kvinge  <RKvinge at novell.com>
-
-	* TrackBar.cs: Fix signature of RightToLeftLayout.
-	* StatusBar.cs: Implemented missing 2.0 methods and attributes.
-	* StatusBarPanel.cs: Implemented missing 2.0 methods and attributes.
-	* Application.cs: Implemented UseWaitCursor.
-
-2007-01-18  Jackson Harper  <jackson at ximian.com>
-
-	* TextControl.cs: We can't skip tags if any part of the tag is
-	visible.
-
-2007-01-18  Jonathan Pobst  <monkey at jpobst.com>
-
-	* ContainerControl.cs: Override OnLayout.
-
-2007-01-18  Jonathan Pobst  <monkey at jpobst.com>
-
-	* NotifyIcon.cs: Add ContextMenuStrip and Tag properties.
-
-	* ContextMenuStrip.cs: Make sure context menu is shown on top of 
-	everything else.
-
-2007-01-18  Chris Toshok  <toshok at ximian.com>
-
-	* ContainerControl.cs: remove the partial handling of LBUTTONDOWN
-	(leftover from the container_selected days, I'd wager).  fixes bug
-	#80546.
-
-2007-01-18  Jonathan Pobst  <monkey at jpobst.com>
-
-	* Control.cs: Apply patch from George to fix the new testcase on
-	bug #80451.  We can't just check for Color.Transparent, we need 
-	to check if the back color's alpha channel is < 255.
-
-2007-01-18  Jonathan Pobst  <monkey at jpobst.com>
-
-	* Form.cs: Move setting show_icon = true to before the constructor
-	so that the base constructor has that information when it calculates
-	the form's size.  Was causing forms to be (6, 6) bigger than they
-	were supposed to be.  Thanks for catching this Rolf!
-
-2007-01-18  Jackson Harper  <jackson at ximian.com>
-
-	* TextControl.cs: When replacing a selection we need to invalidate
-	from the initial selection start, because selection start is moved
-	to the end of the replacement.
-
-2007-01-18  Andreia Gaita  <avidigal at novell.com>
-
-	* LinkLabel.cs: Missing ControlStyles. Fixes #80482
-
-2007-01-18  Chris Toshok  <toshok at ximian.com>
-
-	* DataGridTextBoxColumn.cs: fix most of the NotWorking unit tests
-	I just added.
-
-2007-01-17  Everaldo Canuto  <everaldo at simios.org>
-
-	* ToolBar.cs: Add layout methods to ToolBarButtonInfo class, every 
-	layout methods and properties from ToolBarButton must be available
-	into ToolBarButtonInfo.
-
-2007-01-17  Jonathan Pobst  <monkey at jpobst.com>
-
-	* Control.cs: If the control has a transparent background, we
-	need to refresh it when it moves and when it's parent's background
-	image changes.  [Fixes bug #80451]
-
-2007-01-17  Jonathan Pobst  <monkey at jpobst.com>
-
-	* XplatUIWin32.cs: Don't use 2.0 methods in 1.1 code!  Doh!
-
-2007-01-17  Jonathan Pobst  <monkey at jpobst.com>
-
-	* XplatUIWin32.cs: Implement proper double buffering for Windows.
-	[Fixes bug #80447, and probably speeds up things as well]
-
-2007-01-16  Rolf Bjarne Kvinge  <RKvinge at novell.com>
-
-	* XplatUIX11.cs: Caption height for MDI children is 19, not 26.
-	* XplatUIWin32.cs: We need to recalculate NC size after changing 
-	window style to toolwindow (otherwise the client rectangle will be
-	3 pixels to small for some reason).
-	* MdiWindowManager.cs: Revert NC size calculations to match how
-	they are calculated only based on window styles (to match
-	Win32AdjustWindowRectEx, since otherwise when setting size or 
-	location, Control will call Win32AdjustWindowRectEx to update client 
-	size, which would provoke a paint, then	we'd get a NCCALCSIZE and 
-	calculate a different value of client size causing another paint 
-	(and flickering))
-	* InternalWindowManager.cs: When moving or resizing a window only
-	update size or location if they actually changed.
-	* ThemeWin32Classic.cs: ManagedWindowsBorderWidth is now 4 instead of 3
-	(seems to match Windows behaviour better). Cleaned up 
-	ManagedWindowDecorations to draw what's needed and nothing else
-	(was drawing borders and lines where they shouldn't be)
-	* Hwnd.cs: GetWindowRectangle now knows about MDI border sizes
-	(style = 0xFFFF) and takes into account caption height when 
-	calculating window rectangle.	
-
-2007-01-16  Everaldo Canuto  <everaldo at simios.org>
-
-	* ToolBar.cs: Internal ToolBarButtonInfo class added, Because same button 
-	can be added to toolbar multiple times, we need to maintain a list of 
-	button information for each positions.
-
-2007-01-16  Everaldo Canuto  <everaldo at simios.org>
-
-	* ToolBar.cs: Some small stetic changes.
-
-2007-01-16  Jackson Harper  <jackson at ximian.com>
-
-	* TextBoxBase.cs: Use the new SuspendRecalc/ResumeRecalc methods
-	that allow us to have nested recalc = false blocks.
-	- Add paste support for images in the RichTextBox
-	* RichTextBox.cs: flush the text after the color is changed, so
-	the change takes effect.
-	- Use SuspendRecalc
-	- Some extra debugging info
-	* TextControl.cs: Tags no longer track their length, it is just
-	computed from the next tags length, this makes things a little
-	simpler and reduces places that we have to track length changes.
-	- Refactored the linetag class a little so we could make it
-	a base class for different kinds of tags
-	- Created a image tag, a tag that can have a single image inserted
-	into it
-	- Replace the norecalc flag with a Suspend/Resume Recalc pair, so
-	that we can call suspend multiple times.
-	- Add some debugging methods
-
-2007-01-16  Rolf Bjarne Kvinge  <RKvinge at novell.com>
-
-	* MdiClient.cs: Add ActivatePreviousChild for 
-	mdi child window navigation.
-	* Form.cs: Use MdiClient.ActivateNextChild/
-	ActivatePreviousChild instead of Form.SelectNextControl
-	to select the next/previous child since 
-	SelectNextControl doesn't do it in the same order
-	as mdi children should do it.
-
-2007-01-16  Chris Toshok  <toshok at ximian.com>
-
-	* Control.cs: remove container_selected field.
-
-2007-01-16  Rolf Bjarne Kvinge  <RKvinge at novell.com>
-
-	* MdiClient.cs: Update main form's ActiveChild when
-	updating keyboard focus for the mdi child.
-
-2007-01-16  Jonathan Pobst  <jpobst at novell.com>
-
-	* Control.cs: PreferredSize fix.
-
-	* Form.cs: Add several 2.0 events, properties, and methods.
-
-2007-01-16  Gert Driesen  <drieseng at users.sourceforge.net>
-
-	* Form.cs: Provide meaningful message when MdiParent is assigned a
-	Form that is not an MdiContainer.
-
-2007-01-16  Rolf Bjarne Kvinge  <RKvinge at novell.com>
-
-	* MdiClient.cs: Update main form's ActiveChild when
-	activating a mdi child.
-
-2007-01-16  Rolf Bjarne Kvinge  <RKvinge at novell.com>
-
-	* MdiWindowManager.cs: Fix NRE when merging menus and main form
-	doesn't have a menu.
-
-	* Form.cs: Request NCRecalc after creating a mdi child window.
-	Implement mdi key handling (Ctrl+F4, Ctrl+Shift+F4, Ctrl+Tab, 
-	Ctrl+Shift+Tab, Ctrl+F6 and Ctrl+Shift+F6).
-	
-	* MdiClient.cs: Add new method SendFocusToActiveChild that either
-	sends keyboard focus to the active child, or to the MdiClient
-	if there are no child forms.
-	
-2007-01-15  Chris Toshok  <toshok at ximian.com>
-
-	* ListView.cs: drop the *Internal overrides, just do our work in
-	ItemControl's WndProc instead.
-
-	* UpDownBase.cs: a few large changes.  Fix up the Selectable state
-	of the various controls, and forward the events properly (in the
-	same manner as MS) from the textbox to the UpDown.  Also the
-	ActiveControl of the UpDownBase gets set properly now.  Finally,
-	we don't call UpdateEditText from the ctor.  Fixes bug #79957.
-
-	* NumericUpDown.cs: set Text in the ctor.
-
-	* DomainUpDown.cs: call UpdateEditText in the ctor.
-	
-	* TextBox.cs: on ms.net, WM_LBUTTONDOWN sets focus on the textbox,
-	so even a Selectable = false textbox can be focused if you click
-	in it.  Go figure.
-
-	* Control.cs: remove On{Got,Lost}FocusInternal.  Subclasses can
-	just add their handling in their respective WndProc's.  Also add
-	an explicit FocusInternal method that doesn't consult CanFocus
-	before calling Select(this).
-
-	* TextBoxBase.cs: deal with removal of the FocusInternal calls -
-	do our work in WndProc instead.
-
-	* TabControl.cs: same.
-
-	* ComboBox.cs: same.
-
-2007-01-15  Everaldo Canuto  <everaldo at simios.org>
-
-	* Menu.cs: implement MergeItems and Replace for MenuMerge method.
-	Fixes #80006.
-
-2007-01-15 Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* ListViewItem.cs:
-	* ThemeWin32Classic.cs: Don't draw the item text outside
-	item bounds in Details view, as well as use trimming.
-	Fixes bug #80376.
-
-2007-01-15  Jonathan Pobst  <jpobst at novell.com>
-
-	* Form.cs: Implement Form.ShowIcon.
-	
-	* XplatUIWin32.cs: Allow the SetIcon win32 call to set the icon to
-	null, which when combined with the DlgModalFrame window style removes
-	the icon from the title bar.
-
-2007-01-15  Jonathan Pobst  <jpobst at novell.com>
-
-	* Control.cs: Call OnMouseClick after OnClick. (2.0)
-
-2007-01-15  Everaldo Canuto  <everaldo at simios.org>
-
-	* MdiWindowManager.cs: In CreateMaximizedMenu fix a position of icon
-	menu when mdi child windows theres a menu, uses insert to get icon
-	at first position. Partially fix #80006.
-
-2007-01-15  Jonathan Pobst  <jpobst at novell.com>
-
-	* Clipboard.cs: Implement 2.0 methods.
-
-2007-01-15  Everaldo Canuto  <everaldo at simios.org>
-
-	* Menu.cs: Implement Insert method of MenuItemCollection class
-	to fix MenuMerge.
-
-2007-01-14  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* ListView.cs: Implement 2.0 FindItemWithText method.
-
-2007-01-11  Everaldo Canuto  <everaldo at simios.org>
-
-	* Form.cs: When process WM_NCCALCSIZE message use ClienSize.Width
-	to calculate menu bar size. Fixes #80290.
-
-2007-01-11  Everaldo Canuto  <everaldo at simios.org>
-
-	* ThemeWin32Classic.cs: Fix position of menuitem check mark.
-
-2007-01-11  Chris Toshok  <toshok at ximian.com>
-
-	* XplatUIX11.cs: don't send duplicate WM_ACTIVATE messages to the
-	initial form.
-
-2007-01-11  Chris Toshok  <toshok at ximian.com>
-
-	* LinkLabel.cs: make sure to call base.Select in our Select method
-	if it turns out we're going to be selected (i.e. if we have a link
-	that is going to receive focus).  That way our container's
-	ActiveControl is updated properly.
-
-2007-01-11  Chris Toshok  <toshok at ximian.com>
-
-	* LinkLabel.cs: turns out that LinkLabels are only Selectable if
-	they have 1 or more links.  this fixes the crash gert reported.
-
-2007-01-11  Andreia Gaita  <avidigal at novell.com>
-
-	* ContainerControl.cs: Remove ContainerSelected flag, not needed
-	anymore.
-
-	* Control.cs (Controls.Add): Check if control to be added to the collection
-	is a top level control, and throw an ArgumentException if it is.
-	Remove ContainerSelectedFlag, not needed anymore.
-
-	* XplaUIWin32.cs (SetTopMost): Add flag SWP_NOACTIVATE so that setting the
-	top most control doesn't activate the form. This fixes a problem in the
-	MessageBox, where the default button wouldn't get focus because the form
-	was activated before being Loaded - when the Owner is set, SetTopMost is
-	called, and it would activate it.
-
-2007-01-11  Jonathan Pobst  <jpobst at novell.com>
-
-	* Button.cs: When clicked and setting the parent form's DialogResult,
-	use FindForm instead of Parent, since parent could be a container
-	control and not the Form.  Fixes bug #80495.
-
-2007-01-10  Chris Toshok  <toshok at ximian.com>
-
-	* Form.cs: move the call to SendControlFocus into the same
-	is_loaded check.
-
-2007-01-10  Chris Toshok  <toshok at ximian.com>
-
-	* UpDownBase.cs (.ctor): remove the ActiveControl assignment here.
-	It breaks in the face of the new ActiveControl stuff, and should
-	be unnecessary.
-
-	* Form.cs (WndProc): in the WM_ACTIVATE case, we need to set the
-	activecontrol's focus if it's not already set, after we set
-	ActiveControl, but before we call OnActivated.  Re-fixes #79667
-	after the previous focus/active control fixes regressed it.
-
-	* Control.cs: reindent some code.
-	
-2007-01-10  Chris Toshok  <toshok at ximian.com>
-
-	* Splitter.cs: clearing some outstanding changes from my tree.
-	Replace all accesses (not writes) to the internal dock_style field
-	with the Dock property.
-
-2007-01-10  Chris Toshok  <toshok at ximian.com>
-
-	* Control.cs: make FireEnter, FireLeave, FireValidating, and
-	FireValidated virtual.
-
-	* Form.cs: override and don't chain up calls to FireEnter and
-	FireLeave.
-
-2007-01-10  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* ListView.cs: Add more text padding space when using
-	auto resize for columns (the previous value didn't work fine).
-
-	* ThemeWin32Classic.cs: Update text position inside columns,
-	to match the appeareance of .Net.
-
-	* ColumnHeader.cs: When using auto resize, only the Width should
-	depend on the sub items, not the Height. Also, set width after
-	auto resizing (the value of Width should never remain as -1 or -2).
-
-2007-01-10  Chris Toshok  <toshok at ximian.com>
-
-	* Application.cs: fix compilation errors when debug is enabled.
-
-2007-01-10  Chris Toshok  <toshok at ximian.com>
-
-	* ContainerControl.cs (set_ActiveControl): rework this a bit (and
-	add some nice ascii art pictures and explanation of the process).
-	(GetMostDeeplyNestedActiveControl): new utility function we need
-	because our ActiveControl can refer to a child container with its
-	own ActiveControl.
-
-	* Form.cs (OnActivated): remove the call to SelectActiveControl
-	from here, since you can override this method and not chain up,
-	and winforms still sets the active control.
-	(OnCreateControl): also remove the unnecessary SelectActiveControl
-	call from here.
-	(WndProc): it's actually called from the WM_ACTIVATE block, just
-	before calling OnActivated.
-
-	* Control.cs (Select (Control)): move the call to XplatUI.SetFocus
-	inside the else.  the ActiveControl setter will end up setting
-	focus on @control.  This keeps us from setting it again (and
-	generating an extra LostFocus/GotFocus pair).
-	(Select (bool, bool)): reindent.
-
-2007-01-10  Jonathan Pobst  <jpobst at novell.com>
-
-	* FlowLayoutPanel.cs, MenuStrip.cs, SplitContainer.cs, SplitterPanel.cs,
-	StatusStrip.cs, TableLayoutPanel.cs, TableLayoutStyleCollection.cs,
-	ToolStrip.cs, ToolStripComboBox.cs, ToolStripContainer.cs,
-	ToolStripContentPanel.cs, ToolStripControlHost.cs, ToolStripDropDown.cs,
-	ToolStripDropDownButton.cs, ToolStripDropDownItem.cs, ToolStripDropDownMenu.cs,
-	ToolStripItem.cs, ToolStripMenuItem.cs, ToolStripPanel.cs, ToolStripPanelRow.cs,
-	ToolStripSeparator.cs, ToolStripSplitButton.cs, ToolStripStatusLabel.cs
-	ToolStripTextBox.cs: Another wave of corcompare work.
-
-2007-01-09  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* ColumnHeader.cs: Implement 2.0 AutoResize method using
-	the Width property.
-
-	* ListView.cs: Implement 2.0 AutoResizeColumn and AutoResizeColumns
-	methods by callling Column.AutoResize method on columns.
-
-2007-01-09  Jonathan Pobst  <monkey at jpobst.com>
-
-	* Control.cs: Provide proper implementations of PreferredSize
-	and GetPreferredSize (2.0).
-
-2007-01-09  Jonathan Pobst  <monkey at jpobst.com>
-
-	* Form.cs: Remove one character (!) to make my previous OnClosing
-	stuff work for modal windows like MessageBox.
-
-2007-01-09  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* ListView.cs:
-	* ThemeWin32Classic.cs: Use ListView.GetReorderedColumn instead of
-	ListView.Columns to get the last displayed column. Fixes #80452.
-
-2007-01-09  Everaldo Canuto  <everaldo at simios.org>
-
-	* Label.cs, LinkLabel.cs: Source code identation fixes.
-
-2007-01-08  Everaldo Canuto  <everaldo at simios.org>
-
-	* ToolBarButton.cs: Remove InvalidateBorder and use Invalidate instead,
-	we dont need to invalidate only borders because when we invalidate four
-	border lines the invalidate's generates a complete redraw of button, 
-	because it now invalidate a complete rect some other redraws operations
-	are fixed. Fixes #80196.
-	
-	* Theme.cs, ThemeNice.cs, ThemeClearLooks.cs, ThemeWin32Classic.cs:
-	Remove ToolBarInvalidateEntireButton as it is not used.
-
-2007-01-08  Jonathan Pobst  <monkey at jpobst.com>
-	
-	* Form.cs: Make sure that both OnClosing and OnFormClosing are
-	called for 2.0 profile.
-	* CloseReason.cs: Make class internal for 1.1.
-
-2007-01-08  Jonathan Pobst  <monkey at jpobst.com>
-
-	* ToolStripManager.cs: Implement FindToolStrip functionality.
-	* ToolStrip.cs: Register and unregister with ToolStripManager.
-
-2007-01-07  Jonathan Pobst  <monkey at jpobst.com>
-
-	* Control.cs: This was messy.  2.0 moves much of ControlCollection
-	to ArrangedElementCollection.  Implemented this with as few #if's as 
-	possible (which is still too many).
-
-2007-01-07  Jonathan Pobst  <monkey at jpobst.com>
-
-	* Control.cs: Implement SizeFromClientSize() [2.0].
-
-2007-01-07  Everaldo Canuto  <everaldo at simios.org>
-
-	* Hwnd.cs: On GetClientRectangle add a new parameter border_static,
-	use Theme.BorderSize to calculate area instead of static value 1, 
-	by the way use new BorderStaticSize instead	Border3DSize when 
-	border_static is true. Fixes #79537.
-	
-	* XplatUIOSX.cs: Fix call to GetClientRectangle. 
-	
-	* ThemeWin32Classic.cs: On CPDrawBorder3D dont draw inner border when
-	it is not needed.
-
-2007-01-06  Everaldo Canuto  <everaldo at simios.org>
-
-	* Hwnd.cs: Gives more code legibility to GetWindowRectangle.
-
-2007-01-06  Everaldo Canuto  <everaldo at simios.org>
-
-	* Label.cs: Override CreateParams to use WS_EX_STATICEDGE instead of
-	WS_EX_CLIENTEDGE in ExStyles when BorderStyle is Fixed3D, it is
-	
-	* Hwnd.cs: 
-	- border_static field added, it will used to define when a control 
-	theres 3D border but it must be static (thin).
-	- In GetWindowRectangle use Theme.BorderSize to calculate area 
-	instead of static value 1, by the way use new BorderStaticSize instead
-	Border3DSize when border_static is true.
-
-	* XplatUIX11.cs, XplatUIOSX.cs: 
-	- When WS_EX_STATICEDGE ExStyle is set define border_static as true.
-	
-	* Theme.cs: BorderStaticSize field added.
-
-2007-01-05  Everaldo Canuto  <everaldo at simios.org>
-
-	* XplatUIX11.cs: Removed unused hwnd var in SetBorderStyle.
-
-2007-01-05  Everaldo Canuto  <everaldo at simios.org>
-
-	* Control.cs: Under InternalBorderStyle call RecreateHangle to 
-	mimic same behavior than win32 that set border only in CreateParams,
-	it fix problems under CreateParams overrides. Fix #79442 and partial
-	fix #79537.
-	
-	* XplatUIX11.cs: Dont set hwnd.border_style in SetBorderStyle instead
-	of thi control you must call recreate handle. 
-	
-	* XplatUIWin32.cs: Remove all SetBorderStyle code, for win32 we dont
-	need to do anything as RecreateHangle will take care about borders.
-
-2007-01-05  Mike Kestner  <mkestner at novell.com>
-
-	* ListView.cs: hack to eliminate Lost/Got focus notifications on
-	cycles between the ItemControl and parent.  Fixes #80388.
-
-2007-01-05  Gert Driesen  <drieseng at users.sourceforge.net>
-
-	* Control.cs: Lazy init layout engine. Do not directly use 
-	layout_engine since LayoutEngine may be overridden (on 2.0 profile).
-
-2007-01-05  Chris Toshok  <toshok at ximian.com>
-
-	* DataGrid.cs: don't forceably rebind columns in SetDataSource
-	unless our list manager has changed (i.e. unless we have reason to
-	believe our columns have changed).  Fixes #80422.
-	
-	also, disable the call do BindColumns in
-	OnListManagerMetaDataChanged.  this breaks this test in 2.0 (in
-	1.1 the event isn't raised in response to a column addition on a
-	table.)
-
-2007-01-05  Jonathan Pobst  <monkey at jpobst.com>
-
-	* Control.cs: Move LayoutEngine.Layout to the OnLayout method, so
-	that inheritors can not call it if they choose.  Fixes bug #80456.
-
-2007-01-05  Andreia Gaita  <avidigal at novell.com>
-
-	* XplatUIWin32.cs: Initialize MSG.refobject at 0 so it 
-	doesn't blow up with a null exception on marshalling.
-	
-2007-01-05  Jonathan Pobst  <monkey at jpobst.com>
-
-	* Control.cs: Implement several 2.0 protected properties and methods.
-	Ensure that all necessary events are being called when properties
-	are set.
-
-2007-01-05  Mike Kestner  <mkestner at novell.com>
-
-	* ListView.cs: implement PgUp/PgDn for Details view.  Also
-	fixes First/LastVisibleIndex to use the item_control.ClientRect 
-	instead of the parent control.  Fixes #80378.
-
-2006-01-05  Atsushi Enomoto  <atsushi at ximian.com>
-
-	* PageSetupDialog.cs : cosmetic refactoring; use RegionInfo to
-	  determine whether to use yard-pound or not (bug #78399).
-
-2006-01-04  Alexander Olk  <alex.olk at googlemail.com>
-
-	* FileDialog.cs: Sebastien fixed the libgdiplus png alpha
-	problems. So it is time to bring back the old popupbutton colors.
-
-2006-01-04  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* ColumnHeader.cs:
-	* ListView.cs: Implement 2.0 ColumnHeader.DisplayIndex
-	property by using the internal information of the
-	columns order in ListView.
-
-2007-01-04  Jonathan Pobst  <monkey at jpobst.com>
-
-	* CommonDialog.cs, Cursor.cs, ErrorProvider.cs, HelpProvider.cs:
-	Add 2.0 Tag properties.
-
-	* LinkArea.cs: Add 2.0 ToString method.
-
-2007-01-03  Chris Toshok  <toshok at ximian.com>
-
-	* DataGrid.cs: the Alt+0 handling was wrong, it should have been
-	Ctrl+0.  Fixes bug #80367.  Also, don't eat the Delete keypress
-	when we're editing, which fixes #80047.
-
-2007-01-03  Chris Toshok  <toshok at ximian.com>
-
-	* Form.cs: apply patch contributed by Dominik Seichter.  fixes
-	#80404.
-
-2007-01-03  Jonathan Pobst  <monkey at jpobst.com>
-
-	* MenuStrip.cs, ToolStripMenuItem.cs: Add MdiWindowListItem
-	property and implementation.
-
-	* Form.cs, MdiClient.cs, MdiWindowManager.cs: Add needed hooks
-	for MdiWindowListItem property.
-
-	* ToolStripDropDown.cs: Don't consider hidden menu items while
-	laying out the menu.
-
-2007-01-03  Andreia Gaita  <avidigal at novell.com>
-
-	* SendKeys.cs: window handle is not needed in win32, so just
-	get the active window for X after parsing keys and don't use
-	it when building the message; it is passed by parameter to the 
-	Xplat method and used there to build the message instead. Also,
-	wait for events to be processed on SendWait, as opposed to Send,
-	which doesn't wait :) Playing with threads and Send() completely 
-	hangs on ms.net, only SendWait() works.
-	
-	XplatUIX11.cs
-	X11Display.cs: Check for valid window handle.
-
-2007-01-03  Jackson Harper  <jackson at ximian.com>
-
-	* TextControl.cs: Need to prevent wrap calculations when replacing
-	text (this was there before i removed it accidently).
-	- Don't update the cursor during the positioning, just set it to
-	selection_start at the end of the operaion.
-
-2007-01-03  Rolf Bjarne Kvinge  <RKvinge at novell.com>
-
-	* Control.cs:
-	* NotifyIcon.cs: corcompare work, no more X's in 1.1 class status.
-	
-2007-01-03  Rolf Bjarne Kvinge  <RKvinge at novell.com>
-
-	* MonthCalendar.cs: Added Click and DoubleClick events again,
-	but this time they only hide Control's Click and DoubleClick.
-	
-2007-01-03  Gert Driesen  <drieseng at users.sourceforge.net>
-
-	* Theme.cs: Re-enabled DefaultFont change. Use const to refer to
-	System.Drawing assembly. Spaces to tabs. Removed extra tabs.
-
-2007-01-02  Jackson Harper  <jackson at ximian.com>
-
-	* TextBoxBase.cs: We move the caret with the split now, so we
-	don't need to explicitly move the caret after splitting.  This
-	fixes the caret bumping down an extra line on Enter.
-
-2007-01-02  Miguel de Icaza  <miguel at novell.com>
-
-	* ContainerControl.cs: Add AutoValidateChanged event (for PDN
-	2.72). 
-
-	* ScrollableControl.cs: Add Scroll event.
-
-2007-01-02  Mike Kestner  <mkestner at novell.com>
-
-	* ListView.cs: one more try with help from georgegiolfan at yahoo.com 
-	to fix all hdr height padding codepaths.  Fixes #80207.
-
-2007-01-02  Chris Toshok  <toshok at ximian.com>
-
-	* StatusBar.cs (.ctor): remove the Anchor setting, as it's just
-	setting it to the Control defaults anyway, and it being after the
-	Dock set was screwing up layout.
-	(set_Dock): don't short circuit out of setting base.Dock.  Also,
-	no need to call UpdateStatusBar here, as it'll be re-layed out if
-	it needs to be.
-
-2007-01-02  Mike Kestner  <mkestner at novell.com>
-
-	* ListView.cs: patch from georgegiolfan at yahoo.com to add padding
-	to header height for width == -1. Fixes the rest of #80207.
-
-2007-01-02  Mike Kestner  <mkestner at novell.com>
-
-	* ListView.cs: rework the mouse event forwarding everaldo added
-	to translate the coordinates to the parent control not
-	raise the parent events until after we've done our work. Hover
-	needs more work, in the case where HoverSelection is on, because
-	the item control receives more than one MouseHover per Enter
-	event, so we need to ensure only the "first" hover gets forwarded.
-	Opening a minor bug for that.
-
-2007-01-02  Gert Driesen  <drieseng at users.sourceforge.net>
-
-	* CheckedListBox.cs: Fixed SelectionMode to match MS.
-	* ListControl.cs: Implemented AllowSelection property. Removed extra
-	tabs.
-	* ListBox.cs: Implemented AllowSelection property.
-
-2007-01-02  Everaldo Canuto  <everaldo at simios.org>
-
-	* MenuItem.cs: In MdiWindowClickHandler uses sender instead of
-	SelectedItem, it prevent for errors when you must disable item
-	before perform click. Fixes #80409.
-
-2007-01-02  Everaldo Canuto  <everaldo at simios.org>
-
-	* MenuAPI.cs: Prevent second level and beyond submenus to close
-	until first level when move out side of popup.
-	
-2007-01-02  Everaldo Canuto  <everaldo at simios.org>
-
-	* MenuAPI.cs:
-	- Down submenu positin in three pixels.
-	- Closes sub menu when mouse leaves from menu. Fixes #80402.
-
-2007-01-02  Everaldo Canuto  <everaldo at simios.org>
-
-	* ThemeWin32Classic.cs:
-	- Fix popup menu size adding one pixel on the top.
-	- Down menu item border from two to one to mimic Win32.
-	- Some source identation fixes. 
-
-2007-01-01  Everaldo Canuto  <everaldo at simios.org>
-
-	* ThemeWin32Classic.cs: Use float numbers to calculate size and
-	position of menu arrows, it fix wrong arrow size.
-
-2007-01-01  Everaldo Canuto  <everaldo at simios.org>
-
-	* ThemeWin32Classic.cs: Uses CPDrawBorder3D to draw menu borders
-	instead of line, it simplify draw operation and fix it using 3D
-	borders to mimic Win32.
-
-2007-01-01  Jonathan Pobst  <monkey at jpobst.com>
-
-	* StatusStrip.cs: Add implementation of the sizing grip.
-
-	* ToolStripRenderer.cs, ToolStripProfessionalRenderer.cs: Add
-	StatusStrip rendering.
-
-2006-12-31  Chris Toshok  <toshok at ximian.com>
-
-	* ToolBar.cs: don't assign to dock_style in the .ctor.  it doesn't
-	override the layout style (anchor/dock) of the control.  assign to
-	Dock instead.  Fixes bug #80416.
-
-	* ToolStrip.cs: same.
-
-2006-12-31  Andreia Gaita  <avidigal at novell.com>
-
-	* ContainerControl.cs: Use ContainerSelected flag to check if 
-	a Container is directly selected, or if Select is called on a 
-	non-container. If a container is directly selected, focus events 
-	should not be raised.
-	Apply #80411 patch to throw exception on set_ActiveControl if 
-	control is the same as the current one.
-	
-	* Control.cs: Use ContainerSelected flag (see above).
-	Add invalidation check to raise event but not invalidate if 
-	dimensions are 0.	
-	Apply #80411 patch.
-	
-
-2006-12-31  Everaldo Canuto  <everaldo at simios.org>
-
-	* MenuAPI.cs: After click, dont close popup menu when menu is
-	ContextMenu. Fixes #80399.
-
-2006-12-30  Chris Toshok  <toshok at ximian.com>
-
-	* ContainerControl.cs: make sure we throw the exception if the
-	container control doesn't contain the control we're setting
-	ActiveControl to.
-
-2006-12-30  Chris Toshok  <toshok at ximian.com>
-
-	* Control.cs (SetTopLevel): fix the exception raised by
-	SetTopLevel for child controls.
-	(set_Anchor): call UpdateDistances when setting the anchor type.
-	This fixes bug #80336.
-
-2006-12-29  Gert Driesen  <drieseng at users.sourceforge.net>
-
-	* Theme.cs: For now, revert back to 8pt font.
-
-2006-12-29  Everaldo Canuto  <everaldo at simios.org>
-
-	* MenuAPI.cs: Set popup as active when open a ContextMenu. 
-	Fixes #80395.
-
-2006-12-29  Chris Toshok  <toshok at ximian.com>
-
-	* Control.cs: reorder the code in OnResize to give the same event
-	ordering as MS.
-
-2006-12-29  Rolf Bjarne Kvinge  <RKvinge at novell.com>
-
-	* MdiClient.cs: Implemented MdiLayout for ArrangeIcons,
-	TileHorizontally and TileVertically.
-	
-2006-12-29  Alexander Olk  <alex.olk at googlemail.com>
-
-	* ColorDialog.cs, FileDialog.cs, FolderBrowserDialog.cs,
-	FontDialog.cs, Mime.cs, MimeIcon.cs, OpenFileDialog.cs,
-	SaveFileDialog.cs, ThemeClearlooks.cs, ThemeNics.cs:
-	Corrected copyright and email adress.
-
-2006-12-29  Gert Driesen  <drieseng at users.sourceforge.net>
-
-	* TreeNode.cs: On 2.0 profile, throw InvalidOperationException instead
-	of Exception in FullPath property if no TreeView is associated with
-	the TreeNode.
-
-2006-12-29  Gert Driesen  <drieseng at users.sourceforge.net>
-
-	* Theme.cs: Marked default_font as private, and initialize it in ctor
-	with MS Sans Sarif 8.25 on 1.0 profile, and SystemFonts.DefaultFont
-	on 2.0 profile.
-	* ThemeGtk.cs: Removed default_font intialization.
-	* ThemeWin32Classic.cs: Removed default_font initialization.
-
-2006-12-28  Chris Toshok  <toshok at ximian.com>
-
-	* Control.cs: fix a couple of place where we were creating handles
-	more aggressively than we should be.  Fixes ControlRefresh unit
-	tests.
-
-2006-12-28  Chris Toshok  <toshok at ximian.com>
-
-	* Control.cs: contrary to what the comment said, Control.Dock does
-	not supercede Control.Anchor - the last one you assign to decides
-	the layout behavior.  so we need to keep track of which was the
-	last set.  Also, fix some of the affected property arguments in
-	PerformLayout calls, and remove an redundant parent.PerformLayout
-	call in OnResized.
-
-	Add a VisibleInternal property, which returns is_visible.  We
-	can/should get rid of all the usage of this field elsewhere.
-
-2006-12-28  Rolf Bjarne Kvinge  <RKvinge at novell.com>
-	
-	* Control.cs: DoubleBuffered property reflects the OptimizedDoubleBuffer
-	control style, not DoubleBuffer. Added UseDoubleBuffering property
-	that indicates whether doublebuffering is enabled and supported.
-	(comment from and code based on Gert Driesen's patch in #80324).
-	Fixes #80324.
-
-2006-12-28  Rolf Bjarne Kvinge  <RKvinge at novell.com>
-	
-	* Control.cs: Fixed a NRE.
-
-2006-12-28  Rolf Bjarne Kvinge  <RKvinge at novell.com>
-
-	* TrackBar.cs: Fix SmallChange and LargeChange exceptions
-	for 2.0.
-
-2006-12-28  Rolf Bjarne Kvinge  <RKvinge at novell.com>
-
-	* Control.cs: Rewrote double buffering, now a seperate
-	class handles all the buffering, no Graphics is disposed of
-	until the painting is finished (earlier implementation 
-	would crash if the control was resized in the OnPaint, 
-	since it would cause the double buffer to be recreated
-	and the old one disposed), a separate Graphics is 
-	created for every paint (MS behaviour and anyways the state
-	of the Graphics would have to be saved and restored otherwise)
-	
-	* XplatUIDriver.cs: 
-	* XplatUIX11.cs:
-	* XplatUI.cs: Added and implemented GetOffscreenGraphics 
-	so that we can get the graphics for the back buffer without
-	having to create a new one and remove the offscreen_dc parameter
-	from CreateOffscreenDrawable and DestroyOffscreenDrawable.
-	
-2006-12-27  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* ListView.cs: Add key-related 2.0 methods for CheckedItemCollection.
-	Also make virtual all the key-related methods.
-
-	* ListViewItem.cs: Make virtual the key related methods for
-	ListViewSubItemCollection.
-
-2006-12-27  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* ListView.cs:
-	* ListViewItem.cs:
-	* ThemeWin32Classic.cs:
-	* Theme.cs: Initial support for Tile view in ListView,
-	as well as the implementation of the required bits for it (Item
-	and Subitem).
-
-2006-12-27  Gert Driesen  <drieseng at users.sourceforge.net>
-
-	* MonthCalendar.cs: On 2.0, throw ArgumentOutOfRangeException instead
-	of ArgumentException in MaxSelectionCount, MaxDate and MinDate.
-	Provide useful exception messages.
-
-2006-12-27  Rolf Bjarne Kvinge  <RKvinge at novell.com>
-
-	* TrackBar.cs: Remove a warning.
-	* MonthCalendar.cs: Moved back to using Capture to hide the calendar
-	when used by DateTimePicker, fixes #80287. This also requires that 
-	MonthCalendar implements it's own drawing for the yearly updown control,
-	otherwise the Capture tracking would be too complicated. Removed the Click 
-	and DoubleClick events (according to comments they were hiding the base class
-	event to prevent them from beeing fired - MSDN only says MonthCalendar doesn't
-	raise these events, not that they cannot be raised. It is possible to raise 
-	them by calling OnClick and OnDoubleClick). Added two internal fields in 
-	HitTestInfo in order to track give more tracking info needed by MonthCalendar.
-	* ThemeWin32Classic.cs: Implement drawing of MonthCalendar's updown part.
-	* DateTimePicker.cs: Removed handling of MonthCalendar's LostFocus
-	event, no longer needed.
-	
-2006-12-27  Gert Driesen  <drieseng at users.sourceforge.net>
-
-	* ScrollableControl.cs: In AutoScrollMinSize, only set AutoScroll to
-	true if new value differs from current value.
-
-2006-12-27  Gert Driesen  <drieseng at users.sourceforge.net>
-
-	* Control.cs: ControlCollection.Count must be public. Fixed build of
-	unit tests.
-
-2006-12-27  Gert Driesen  <drieseng at users.sourceforge.net>
-
-	* ListView.cs: Redraw when FullRowSelect is changed. Fixes bug #80379.
-
-2006-12-27  Gert Driesen  <drieseng at users.sourceforge.net>
-
-	* ComboBox.cs: Mergable=>MergableProperty. Fixes build.
-
-2006-12-26  Everaldo Canuto  <everaldo at simios.org>
-
-	* Control.cs: Invalidates control including when Width and Height is 
-	equal zero or is not visible, only Paint event must be care about 
-	this. Fixes #79913.
-
-2006-12-26  Chris Toshok  <toshok at ximian.com>
-
-	* CurrencyManager.cs, PropertyManager.cs, BindingManagerBase.cs:
-	more corcompare work.
-
-	* DataGridView.cs: fix compiler warning.
-
-	* ColumnHeader.cs: some corcompare work, and also take the
-	opportunity to make the internal fields private.
-
-	* ListView.cs: fix the fallout from the above field change.
-
-2006-12-26  Jonathan Pobst  <monkey at jpobst.com>
-
-	* ToolStripButton.cs, ToolStripComboBox.cs, ToolStripControlHost.cs,
-	ToolStripItem.cs, ToolStripProgressBar.cs, ToolStripSplitButton.cs,
-	ToolStripTextBox.cs: Fixes to events and corcompare.
-
-2006-12-26  Everaldo Canuto  <everaldo at simios.org>
-
-	* ListView.cs: Call owner.OnMousexx event to propagate events from
-	item to ListView. Fixes #80367.
-
-2006-12-26  Gert Driesen  <drieseng at users.sourceforge.net>
-
-	* ComboBox.cs: On 2.0, DropDownWidth throws ArgumentOutOfRangeException
-	if value is less than one. ItemHeight should not be set to a value
-	less than 1, and throw ArgumentOutOfRangeException on 2.0 profile. 
-	Removed extra tabs.
-
-2006-12-26  Jonathan Pobst  <monkey at jpobst.com>
-
-	* ToolStripMenuItem.cs: Add ShortcutDisplayString for Moma.
-	* ToolStripStatusLabel.cs: Add Spring for Moma.
-
-2006-12-26  Gert Driesen  <drieseng at users.sourceforge.net>
-
-	* DataGridView.cs: Fixed several NullReferenceException in On* methods.
-	Fixed code formatting. Removed debug code.
-	* DataGridViewTextBoxEditingControl.cs: Removed debug code.
-
-2006-12-26  Gert Driesen  <drieseng at users.sourceforge.net>
-
-	* DataGridView.cs: Fixed GridColor, DefaultSize, DefaultCellStyle,
-	RowHeadersDefaultStyle, RowHeadersWidth to match MS. Throw
-	ArgumentOutOfRangeException if ColumnCount is negative. In 
-	ColumnHeadersHeight, throw ArgumentOutOfRangeException if height is
-	less than 4 or higher than 32768.
-	* DataGridViewCellStyle.cs: Fixed default value for NullValue.
-	Fixed FormatProvider to return CurrentCulture unless explicitly set.
-	Fixed IsFormatProviderDefault to return true if FormatProvider has
-	not been explicitly set.
-
-2006-12-25  Chris Toshok  <toshok at ximian.com>
-
-	* Application.cs: add a couple of 2.0 events.
-
-2006-12-25  Chris Toshok  <toshok at ximian.com>
-
-	* Control.cs: fix compiler warning.
-
-	* AxHost.cs: corcompare fixes.
-
-	* ApplicationContext.cs: corcompare fixes.
-
-2006-12-25  Chris Toshok  <toshok at ximian.com>
-
-	* Control.cs: only update dist_right/dist_bottom if the
-	width/height is > 0.  this fixes anchored controls being resized
-	smaller until they disappear and then resized larger again.
-
-2006-12-25  Chris Toshok  <toshok at ximian.com>
-
-	* Control.cs: a couple of changes.  Remove dist_left and dist_top,
-	since they're nothing more than X/Left and Y/Top, respectively.
-
-	Also, move back to a per-control Bitmap/Graphics for
-	DeviceContext, since using the static Hwnd.bmp/bmp_g is bad in the
-	MT case.  Go with a tiny bitmap though, 1x1, instead of Width x
-	Height.
-
-2006-12-25  Miguel de Icaza  <miguel at novell.com>
-
-	* MessageBox.cs: Implemented overload that takes a new "bool
-	displayHelpButton" by adding a new internal field "show_help".
-	When clicked this will raise the HelpRequested on the owner or the
-	main form. 
-
-	From: 007dbe3ff0ca4729a4f5fcd1d8ab2a2e.txt
-	From: c935e12b95fe4dc1ae670e7f4dc5fd68.txt
-
-	* ListView.cs: Add support ColumnWidthChanged and
-	ColumnWidthChanging. 
-
-	Add support for ColumnReordered event.
-	(ReorderColumn): Add NET_2_0 specific support for cancelling the
-	reorder.
-
-	Very nice codebase!
-
-	* TextBoxBase.cs (GetLineFromCharIndex): Implement this method.
-
-	This is used by report f4ae0a88a0a244558aaadf017c9b9efe.
-
-2006-12-24  Chris Toshok  <toshok at ximian.com>
-
-	* GridTablesFactory.cs: 2.0 corcompare work.
-
-	* ToolStripContainer.cs: add "override" to
-	ContextMenuStripChanged, and remove the local event object.
-
-	* ToolStripDropDown.cs: same with a couple properties.
-
-	* ToolStripPanel.cs: same with AutoSizeChanged event.
-
-	* TextBoxBase.cs: add "override" to AutoSizeChanged.
-
-	* Form.cs: add the remaining 2.0 events, and do some corcompare
-	attribute work.
-
-	* DateTimePicker.cs: add "new" to padding.
-
-	* ButtonBase.cs: use Control's use_compatible_text_rendering.
-
-	* ToolStripContentPanel.cs: use base.AutoSizeChanged.
-
-	* DataGridView.cs: PaddingChanged is overridden.
-
-2006-12-24  Chris Toshok  <toshok at ximian.com>
-
-	* Control.cs: corecompare work here too.
-
-	* DataGridViewElement.cs, DataGridView.cs,
-	DataGridViewButtonCell.cs, DataGridViewRowCollection.cs,
-	DataGridViewImageColumn.cs, DataGridViewComboBoxColumn.cs,
-	DataGridViewImageCell.cs, DataGridViewCheckBoxCell.cs,
-	DataGridViewHeaderCell.cs, DataGridViewCell.cs: more corcompare
-	work.
-
-2006-12-24  Miguel de Icaza  <miguel at novell.com>
-
-	* Control.cs: Switched the error message on the console for a
-	todo.  A review of the code will have to cope with this anyways
-	(since its a large feature, it is in our radar) and it was
-	producing too much output when running PDN.
-
-	* ToolStripComboBox.cs: Set the text when the SelectedIndex
-	changes.  Applications depend on this (PDN 2.72)
-
-2006-12-23  Chris Toshok  <toshok at ximian.com>
-
-	* TableLayoutSettings.cs: finish up the corcompare work for this
-	class.
-
-2006-12-23  Chris Toshok  <toshok at ximian.com>
-
-	* Control.cs: make SetImplicitBounds internal, do some futzing
-	with LayoutEngine so that it's available in 1.1, and remove the
-	entire duplicated code mess from PerformLayout.  Use
-	System.Windows.Forms.Layout.DefaultLayout instead.
-
-	* LayoutEngine.cs: make this class internal in 1.1, public in 2.0.
-
-2006-12-23  Jonathan Pobst  <monkey at jpobst.com>
-
-	* Form.cs: Add MainMenuStrip property.
-
-2006-12-23  Jonathan Pobst  <monkey at jpobst.com>
-
-	* Control.cs: Add ContextMenuStrip property and implementation.
-	Fix ContextMenu implementation to show menu centered on control when
-	activated using the keyboard instead of showing at screen (0,0).
-
-	* ToolStripDropDown.cs: Fix needed overload of Show ().
-
-2006-12-23  Everaldo Canuto  <everaldo at simios.org>
-
-	* Menu.cs: Name property added for 2.0 profile.
-	
-2006-12-23  Everaldo Canuto  <everaldo at simios.org>
-
-	* Menu.cs: Update information about FindMenuItem, method to be
-	implemented soon.
-
-2006-12-23  Everaldo Canuto  <everaldo at simios.org>
-
-	* MenuAPI.cs: When deselect items deselect also selected subitems.
-	
-2006-12-23  Everaldo Canuto  <everaldo at simios.org>
-
-	* MenuAPI.cs: When hides menu set Wnd to null, it prevents
-	FindSubItemByCoord to found itens that is not active, also an
-	cheking added to FindSubItemByCoord to search for items only 
-	in visible popup windows. Fixes #80274.
-
-2006-12-22  Everaldo Canuto  <everaldo at simios.org>
-
-	* UserControl.cs: Remove MonoTodo and use InternalBorderStyle,
-	internal property, it be care about change ExStyle. 
-
-2006-12-22  Andreia Gaita  <avidigal at novell.com>
-
-	* ContainerControl.cs: set activeControl for parent forms up the 
-	tree when the new activecontrol is a container.
-	When validating the active control, if it is a container, also
-	raise up the validation for it's active control. Fixes #80280
-	
-	* Control.cs: Add internal property flag and check to prevent
-	Focus events from getting raised when Select() is called for
-	a ContainerControl. There are still too many focus events being
-	raised at the moment though.
-	Cleaned up the code a bit.
-
-2006-12-22  Rolf Bjarne Kvinge  <RKvinge at novell.com>
-
-	* Control.cs: Added all missing 2.0 events.and
-	fixed a couple of corcompare issues.
-	* TrackBar.cs: Implemented missing 2.0 bits.
-	* MonthCalendar.cs, 
-	* DateTimePicker.cs, 
-	* MdiClient.cs: Fixed some corcompare issues.
-
-2006-12-21  Jonathan Pobst  <monkey at jpobst.com>
-
-	* ContextMenuStrip.cs, FlowLayoutPanel.cs, SplitContainer.cs,
-	SplitterPanel.cs: corecompare work.
-
-2006-12-21  Jonathan Pobst  <monkey at jpobst.com>
-
-	* ToolStripContainer.cs, ToolStripDropDown.cs, StatusStrip.cs:
-	Clean up warnings for BackgroundImageChanged and PaddingChanged
-	events now that they are implemented in Control.cs.
-
-2006-12-21  Jonathan Pobst  <monkey at jpobst.com>
-
-	* Control.cs: Make sure layout_engine isn't null before using it (2.0).
-	
-	* TableLayoutControlCollection.cs, TableLayoutPanel.cs, TableLayoutCellPosition.cs,
-	TableLayoutSettings.cs, TableLayoutStyleCollection.cs: Initial implementation
-	of TableLayoutPanel and supporting cast.
-
-2006-12-21  Rolf Bjarne Kvinge  <RKvinge at novell.com>
-
-	* XplatUIWin32.cs: 
-	- GrabWindow now confines the mouse pointer to the confine window.
-	- Added Win32ClipCursor and Win32GetClipCursor.
-
-	* Control.cs: 
-	- Added CaptureWithConfine to be able to capture and confine 
-	mouse pointer.
-	
-	* InternalWindowManager.cs: 
-	- Call CaptureWithConfine instead of Capture if we're an
-	MdiChild (fixes #79982).
-
-2006-12-21  Chris Toshok  <toshok at ximian.com>
-
-	* DataGrid.cs: guard against the initial state of selection, where
-	selection_start == -1.  make sure we only select from index >= 0.
-	Fixes bug #80291.
-
-2006-12-21  Chris Toshok  <toshok at ximian.com>
-
-	* Control.cs: we don't need to be so draconian with
-	UpdateDistances, and we thusly don't need to call it before
-	calling PerformLayout in ResumeLayout.  Fixes bug #80289.
-
-2006-12-21  Daniel Nauck  <dna at mono-project.de>
-
-	* ComboBox.cs,
-	TextBox.cs: Implemented AutoComplete properties.
-
-2006-12-20  Chris Toshok  <toshok at ximian.com>
-
-	* DataGridView*.cs: some corecompare work.
-
-2006-12-20  Jackson Harper  <jackson at ximian.com>
-
-	* XplatUIX11.cs: We need to hide the caret when deleting it,
-	otherwise you get carets left lying around everywhere.
-	* TextBoxBase.cs: Kill then redraw the caret when scrolling.  This
-	prevents getting some weird half drawn caret tracers when
-	scrolling.
-	* TextControl.cs: Attempt to reduce the number of times we need to
-	recreate the caret.
-
-2006-12-20  Gert Driesen  <drieseng at users.sourceforge.net>
-
-	* MonthCalendar.cs: Fixed previous month button. Removed extra tabs.
-
-2006-12-19  Rolf Bjarne Kvinge  <RKvinge at novell.com>
-
-	* DateTimePicker.cs:
-	- Implemented missing 2.0 bits.
-	- Changed some default values to match MS.
-	
-2006-12-20  Jackson Harper  <jackson at ximian.com>
-
-	* TextBoxBase.cs: When changing the font across the document we
-	can't recalculate after changing each line, since that will cahnge
-	the line count.
-	- PreferredHeight is a little different than i thought.
-	- When backspacing, move the caret before we do the actual char
-	delete, because when that delete crosses a wrap boundary the
-	positional information will change.
-
-2006-12-19  Rolf Bjarne Kvinge  <RKvinge at novell.com>
-
-	* Control.cs: Added some missing 2.0 bits: 
-	BackgroundImageLayout, BackgroundImageLayoutChanged, 
-	OnPaddingChanged, MouseClick, MouseDoubleClick, PaddingChanged and 
-	add IBindableComponent and IDropTarget implementation.
-	
-	* MonthCalendar.cs: 
-	- Added all missing 2.0 features:
-	BackgroundImageLayout, RightToLeftLayout, 
-	OnHandleDestroyed, RightToLeftLayoutChanged, 
-	BackgroundImageLayoutChanged, MouseClick, MouseDoubleClick,
-	PaddingChanged.
-	- Rewrote all the BoldDate code, it was completely broken.
-	- Fixed all the tests (the tests can now be re-enabled, the
-	problems were not with the tests, but with the control, it was
-	mostly broken).
-	
-	* DateTimePicker.cs: Changed the location where the 
-	MonthCalendar is shown.
-	
-2006-12-19  Chris Toshok  <toshok at ximian.com>
-
-	* DataGridView.cs: add IDropTarget implementation.
-
-	* ToolStripPanel.cs: add IDropTarget implementation.
-
-2006-12-19  Jackson Harper  <jackson at ximian.com>
-
-	* TextControl.cs: soft now means something different than what it
-	used to mean, we want to move the caret regardless of whether or
-	not this break was soft (would we really have wanted the caret
-	to not move with the break in the old context?)
-	* TreeView.cs: Make sure we factor in the vert scrollbar when
-	calculating the horizontal scrollbar's maximum.
-
-2006-12-19  Andreia Gaita  <avidigal at novell.org>
-
-	* SendKeys.cs: Fix Send() behaviour, clear keys after sending,
-	check for keywords in alternate casing, close bug #80049.
-
-2006-12-19  Chris Toshok  <toshok at ximian.com>
-
-	* ToolStripItem.cs: add the implementation of the 4 IDropTarget
-	methods (which all do nothing).
-
-	* IDropTarget.cs: add the 4 missing methods.
-
-2006-12-19  Chris Toshok  <toshok at ximian.com>
-
-	* TableLayoutRowStyleCollection.cs: corcompare work.
-	
-	* TableLayoutSettings.cs: same.
-
-	* TableLayoutStyle.cs: same.
-
-	* TableLayoutColumnStyleCollection.cs: same.
-
-2006-12-19  Jonathan Pobst  <monkey at jpobst.com>
-
-	* ColumnStyle.cs, RowStyle.cs, TableLayoutStyle.cs: Plumbing for
-	TableLayoutPanel I've had in my local tree for way too long.
-
-2006-12-19  Miguel de Icaza  <miguel at novell.com>
-
-	* TableLayoutSettings.cs: Finish the public API (still needs all
-	the logic to update on changes). 
-
-	* TableLayoutPanelCellPosition.cs: new file.
-	
-	* TableLayoutRowStyleCollection.cs,
-	TableLayoutColumnStyleCollection, TableLayoutStyle.cs,
-	TableLayoutSettings.cs: Track the final 2.0 table api.
-
-2006-12-19  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* ColumnHeader.cs: Add Tag, Name, ImageKey, ImageIndex,
-	and Image List 2.0 members for ColummnHeader.
-	* ListView.cs: Add key-related 2.0 methods for
-	ColumnHeaderCollection.
-
-2006-12-19  Gert Driesen  <drieseng at users.sourceforge.net>
-
-	* ListViewItem.cs: Changed AddRange overloads to match MS: throw
-	ArgumentNullException if items argument is null. Ignore null item in
-	arrays. Removed extra tabs.
-
-2006-12-19  Gert Driesen  <drieseng at users.sourceforge.net>
-
-	* MonthCalendar.cs: Fixed InvalidCastException.
-
-2006-12-19  Jackson Harper  <jackson at ximian.com>
-
-	* TextControl.cs: Don't increment the position here.
-	- When calculating char positions only add in the line break size
-	for hard line breaks.
-
-2006-12-19  Andreia Gaita  <avidigal at novell.org>
-
-	* SendKeys.cs: Changed some things to match ms.net behaviour
-	when parsing shifted capital letters.
-	
-	* XplatUI.cs, XplatUIDriver.cs, XplatUIWin32, XplatUIOSX: 
-	Add window handle as parameter to SendInput. X11 needs the 
-	window handle, and the handle being passed	to it in the keys 
-	queue is the active control handle (which windows needs), not 
-	the window handle.
-	
-	XplatUIX11.cs, XplaUIX11-new.cs, X11Display: Implement SendInput 
-	to support SendKeys on X.	
-	
-	* X11Keyboard: Implement helper method to lookup a linux keycode
-	given the virtual keycode. Added table of keycode-2-virtualkey
-	values to support this.
-
-2006-12-19  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* ListView.cs: Add support for SelectedIndexCollection
-	and SelectedItemCollection 2.0 methods. Implement support
-	for ImageKey too.
-	* ListViewItem.cs: Add support for ListViewSubItemCollection
-	2.0 methods. Also, fix an incorrect behavior of AddRange method
-	(it shouldn't call Clear).
-	* ThemeWin32Classic.cs: Support for ListView.ImageKey 2.0 property.
-
-2006-12-19  Jackson Harper  <jackson at ximian.com>
-
-	* RichTextBox.cs: 
-	* TextBoxBase.cs: New args for FormatText
-	* TextControl.cs: Rewrote the main drawing method, this version
-	feels a little easier to understand and debug to me.  Hopefully it
-	does to others also
-	- Fix FormatText to OR in the new formating values.  Added
-	FormatSpecified param, basically this works in the same way as
-	BoundsSpecified in Control.
-	- Set the caret properties when the caret is positioned.
-	- When wrapping text make sure that we calculate the width of the
-	last character
-	- when calculating alignments we might have wrapped down to the
-	next line, so don't search for an individual tag, search for the
-	end of the line
-	- We need to invalidate the selection area when we replace the
-	selection.
-	
-2006-12-19  Daniel Nauck  <dna at mono-project.de>
-
-	* Application.cs: add Restart () 2.0 support
-
-2006-12-18  Everaldo Canuto  <everaldo at simios.org>
-
-	* MenuItem.cs: Invalidate menu item rectangle after change Enable
-	property. Fixes #80268.
-	
-2006-12-18  Everaldo Canuto  <everaldo at simios.org>
-
-	* MenuAPI.cs: Dont trigger select event when closes top menu
-	item. Fixes #80270.
-
-2006-12-18  Everaldo Canuto  <everaldo at simios.org>
-
-	* MenuAPI.cs: When you click on menuitem only trigger onselect
-	event for top menu itens. Fixes #80271.
-	
-2006-12-18  Rolf Bjarne Kvinge  <RKvinge at novell.com>
-
-	* MdiWindowManager.cs: Make IconicBounds depend on
-	the bottom of MdiClient, not the top (fixes #80267)
-	
-2006-12-18  Rolf Bjarne Kvinge  <RKvinge at novell.com>
-
-	* MdiClient.cs: Added missing 2.0 attribute
-
-2006-12-18  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* ListViewItem.cs: Add Name and Tag 2.0 properties, as well
-	as IndexOfKey, ContainsKey, RemoveByKey and indexer 2.0.
-
-2006-12-18  Everaldo Canuto  <everaldo at simios.org>
-
-	* MenuAPI.cs: Fix click when menuitem is not popup,
-	this regression was caused by last commit (#80272).
-
-2006-12-17  Everaldo Canuto  <everaldo at simios.org>
-
-	* MenuAPI.cs: When a non-toplevel menuitem is clicked dont
-	fire click event or close menu. Fixes #80272.
-
-2006-12-17  Daniel Nauck  <dna at mono-project.de>
-
-	* ListViewHitTestInfo.cs: add
-
-2006-12-17  Daniel Nauck  <dna at mono-project.de>
-
-	* ButtonBase.cs: Added FlatButtonAppearance 2.0 support.
-	* FlatButtonAppearance.cs: add
-	* DockingAttribute.cs: add
-
-2006-12-17  Chris Toshok  <toshok at ximian.com>
-
-	* DataGrid.cs: hook up MetaDataChanged event on the list manager,
-	and rebind our columns when it does - this way, if you make
-	changes to the DataTable (or set the Table attribute on a DataView
-	after setting it as the DataGrid's DataSource, the changes are
-	made visible.)  Fixes bug #80107.
-
-2006-12-17  Daniel Nauck  <dna at mono-project.de>
-
-	* ListViewGroup.cs: add internal Location property for layouting.
-	* Theme.cs: add abstract ListViewGroupHeight function.
-	* ThemeWin32Classic.cs: implement ListViewGroupHeight function.
-
-2006-12-16  Andreia Gaita  <avidigal at novell.com>
-
-	* TabControl.cs: Fixed checks for NET_2_0-specific exceptions.
-	Added reset of selected index to 0 when adding first tab page.
-	Fixes #80264
-	
-	* NumericUpDown.cs: Fix NET_2_0 check
-
-2006-12-16  Daniel Nauck  <dna at mono-project.de>
-
-	* ListViewGroup.cs: fixed DefaultValueAttribute value
-
-2006-12-16  Daniel Nauck  <dna at mono-project.de>
-
-	* AutoCompleteStringCollection.cs: add new AutoCompleteStringCollection 2.0 class
-
-2006-12-15  Miguel de Icaza  <miguel at novell.com>
-
-	* Button.cs, ComboBox.cs, ScrollBar.cs, UserControl.cs,
-	TextBoxBase.cs, ListView.cs, ContainerControl.cs,
-	ScrollableControl.cs: Add a handful of methods that are
-	overwritten in 2.0 
-
-2006-12-15  Chris Toshok  <toshok at ximian.com>
-
-	* XplatUIWin32.cs: initial implementation of the Reversible
-	drawing functions.  there are some problems.  DrawReversibleFrame
-	doesn't seem to work at all for Dashed FrameStyle, and in the
-	Thick case there are drawing errors at the corners (we probably
-	need to bind Rectangle instead of doing moveto/lineto's.)
-
-2006-12-16  Andreia Gaita  <avidigal at novell.com>
-	
-	* SendKeys.cs: Implemented. SendKeys uses a new method in XPlatUI, SendInput, 
-	to send blocks of key messages. Send accumulates keys to send with Flush, 
-	while SendWait sends all keys immediately.
-		
-	* XplaUI.cs, XplatUIDriver.cs, XplatUIOSX.cs, XplatUIWin32.cs, 
-	XplatUIX11.cs,	XplatUIX11-new.cs:
-	- Define SendInput and stubs for OSX and X11, implements Win32 with a call
-	to Win32 SendInput.
-	- Added INPUT support structures to XplatUIWin32 for Win32SendInput
-	
-	Tests: 	It seems ms.net is hooking the keyboard to implement this, so doing unit
-	testing for ms.net on this class is very tricky, as the tests run too fast 
-	to allow the hook to release, essentially freezing the keyboard and the 
-	test. So, barring a win32 miracle, they'll be commited in the ms-notworking	
-	category :p
-
-2006-12-16  Daniel Nauck  <dna at mono-project.de>
-
-	* Padding.cs: fixed serialization compability to MS ("_var" field names),
-			added missing attributes.
- 
-2006-12-15  Daniel Nauck  <dna at mono-project.de>
-
-	* ListViewGroup.cs: Added missing attributes.
-	* ListViewGroupCollection.cs: Added missing attributes.
-
-2006-12-15  Daniel Nauck  <dna at mono-project.de>
-
-	* ListViewItem.cs: fixed ListViewSubItem text property.
-
-2006-12-15  Rolf Bjarne Kvinge  <RKvinge at novell.com>
-	
-	* Control.cs: Added missing 2.0 attributes
-	
-2006-12-15  Rolf Bjarne Kvinge  <RKvinge at novell.com>
-	
-	* MdiClient.cs: Added missing 2.0 attribute.
-	* MonthCalendar.cs: Added some missing 2.0 attributes 
-	and properties.
-	
-2006-12-15  Daniel Nauck  <dna at mono-project.de>
-
-	* ListView.cs: implemented ListViewItemCollection Add 2.0 support.
-
-2006-12-15  Jonathan Pobst  <monkey at jpobst.com>
-
-	* MainMenu.cs: Add the new 2.0 constructor to help out people
-	using the MainMenu in VS2005.
-
-2006-12-15  Rolf Bjarne Kvinge  <RKvinge at novell.com>
-	
-	* MdiChildContext.cs: Removed it, no longer used.
-	* MdiClient.cs: Added missing 2.0 attributes.
-	
-2006-12-15  Rolf Bjarne Kvinge  <RKvinge at novell.com>
-	
-	* InternalWindowManager.cs: Fix a NullRef with previous 
-	changes for toolwindows.
-	
-2006-12-15  Rolf Bjarne Kvinge  <RKvinge at novell.com>
-
-	* Control.cs: 
-	- Added AfterTopMostControl to allow for certain controls 
-	to always stay on top when normal controls are brought to 
-	front.
-	
-	* XplatUIWin32.cs: 
-	- (DrawInversibleRectangle): Get window rectangle from Win32 
-	in stead of from control, since Win32 doesn't calculate
-	screen coords correctly from control's Location if it 
-	have docked siblings.
-	
-	* MdiWindowManager.cs:
-	- Correct the control menu popup location when clicked on
-	the maximized form icon. (fixes #80223.1)
-	- Don't show moving rectangle if mouse hasn't moved from
-	the original clicked point.
-	- Removed FormGotFocus handler (not used).
-	- Calculate the control buttons location from the main
-	window's size and not client size (fixes #79770).
-	- Form is now closed when the form icon is double-clicked
-	(fixes #79775).	
-	- Correct NCCalcSize numbers a little bit (fixes #80223.2)
-	
-	* InternalWindowManager.cs:
-	- Moved some MDI-only methods to MdiWindowManager.
-	- Removed unused properties and methods.
-	- Unified method naming for methods handling wm messages.
-	- Moved all message handling to seperate methods for
-	each message.
-	
-	* ThemeWin32Classic.cs:
-	- DrawManagedWindowDecorations now draws the title bar 
-	with a gradient brush.
-	- Add a CPDrawButtonInternal that allows us to specify
-	light, normal and dark colors for the buttons (control 
-	buttons for MDI children were drawn with the same light
-	color as the background, therefore loosing the 3D effect).
-	
-	* SizeGrip.cs:
-	- Add a CapturedControl property that is used to 
-	determine the control to resize (defaults to parent). 
-	Needed for MdiClient, since its SizeGrip's parent is
-	MdiClient, but the control to resize is the main form.
-	
-	* MdiClient.cs:
-	- Set SizeGrip's CapturedControl to the main form in order
-	to resize the main form and not the MdiClient.
-	- Override AfterTopMostControl to leave the scrollbars 
-	always on top.
-
-2006-12-15  Daniel Nauck  <dna at mono-project.de>
-
-	* ListView.cs: fixed ListViewItemCollection AddRange and
-			implemented ListViewItemCollection AddRange 2.0 support.
-
-2006-12-15  Daniel Nauck  <dna at mono-project.de>
-
-	* ListViewGroup.cs: Add.
-	* ListViewGroupCollection.cs: Add
-	* ListView.cs: Add ListViewGroup (Group) and ShowGroups 2.0 support.
-	* ListViewItem.cs: Add ListViewgroup (Group), ListViewGroups constructors and
-				stub for ImageKey 2.0 support.
-
-2006-12-14  Mike Kestner  <mkestner at novell.com>
-
-	* ListView.cs: add text padding to the autocalculation for columns
-	of width -2.  Fixes #80207.
- 
-2006-12-14  Mike Kestner  <mkestner at novell.com>
-
-	* ListView.cs: add some index guarding for partial row navigation 
-	logic.  Fixes #80250.
-
-2006-12-14  Mike Kestner  <mkestner at novell.com>
-
-	* ListView.cs: throw ArgumentExceptions when parented ListViewItems
-	are added or inserted to the collection.  Fixes #81099.
-
-2006-12-13  Everaldo Canuto  <everaldo at simios.org>
-
-	* MenuAPI.cs: Closes menu when right click out side of popup
-	it fix problem in ContextMenu and MainMenu. Fixes #80252.
-
-2006-12-13  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* ListViewItem.cs: Fix dumb error.
-
-	* ListView.cs: Add Find and ContainsKey methods in 
-	ListViewItemCollection, and also return true for IsReadOnly
-	and IsFixedSize (changes for 2.0). 
-
-2006-12-13  Gert Driesen  <drieseng at users.sourceforge.net>
-
-	* Control.cs: Allow Region to be set to null.
-
-2006-12-13  Rolf Bjarne Kvinge  <RKvinge at novell.com>
-
-	* MdiWindowManager.cs: Remove unused (commented out) code.
-	* Form.cs: When the MdiChild is maximized, the form needs 
-	WM_NCMOUSELEAVE, so request it.
-	* InternalWindowManager.cs: 
-	- Added tooltips to control buttons.
-	- Removed duplicated control button handling code.
-	- Removed unused (commented out) code.
-	
-2006-12-12  Everaldo Canuto  <everaldo at simios.org>
-
-	* MenuAPI.cs: Set cursor to default in popup menus, a XplatUI.SetCursor 
-	was used because we must set cursor without trigger ChangeCursor event
-	and without change Cursor control property. Fixes #79963.
-
-2006-12-12  Andreia Gaita  <avidigal at novell.com>
-	
-	* Control.cs: Check if Region setter value is null, and ignore
-
-2006-12-12  Jackson Harper  <jackson at ximian.com>
-
-	* TextControl.cs: We were almost always drawing one more line then
-	needed, since the GetLineByPixel will return the last line found
-	at that pixel. In most cases though, we were invalidating up to
-	the junction between two lines.
-	- Improve debug code.
-
-2006-12-12  Chris Toshok  <toshok at ximian.com>
-
-	* XplatUI.cs: add static DrawReversibleFrame, DrawReversibleLine,
-	and FillReversibleRectangle.
-
-	* XplatUIDriver.cs: add abstract DrawReversibleFrame, DrawReversibleLine,
-	and FillReversibleRectangle.
-
-	* XplatUIWin32.cs: add stubs which do nothing for
-	DrawReversibleFrame, DrawReversibleLine, and
-	FillReversibleRectangle.
-
-	* XplatUIOSX.cs: add stubs which raise NIE for
-	DrawReversibleFrame, DrawReversibleLine, and
-	FillReversibleRectangle.
-
-	* XplatUIX11.cs: add working implementation for
-	DrawReversibleFrame, DrawReversibleLine, and
-	FillReversibleRectangle.
-	
-	* ControlPaint.cs: implement DrawReversibleFrame,
-	DrawReversibleLine, and FillReversibleRectangle, by calling into
-	the appropriate XplatUI method.
-
-2006-12-11  Rolf Bjarne Kvinge  <RKvinge at novell.com>
-
-	* Form.cs: Make MdiClient have the focus even if it's
-	not selectable, since it should receive WM_KEY* and WM_MOUSE 
-	messages. Fixes #79907.
-	
-2006-12-11  Rolf Bjarne Kvinge  <RKvinge at novell.com>
-
-	* Hwnd.cs: Save the CreateParams.ExStyle so that it can be
-	queried after the window is created.
-	
-	* XplatUIX11.cs: Added SendParentNotify to implement 
-	WM_PARENTNOTIFY logic. Fixes #79965.
-	
-	* Control.cs: Added MakeParam.
-	
-2006-12-11  Rolf Bjarne Kvinge  <RKvinge at novell.com>
-
-	* MdiClient.cs: Resume Layout before setting window
-	states (fixes #80201).
-
-2006-12-11  Rolf Bjarne Kvinge  <RKvinge at novell.com>
-
-	* MenuAPI.cs: Deselect a menu item after performing
-	the click (fixes #80197).
-
-2006-12-11  Jackson Harper  <jackson at ximian.com>
-
-	* TextBoxBase.cs: We need to cap this value, since Maximum -
-	ViewPortHeight can be less than zero.
-	- Only do selection with the left mouse button.
-	* TextBox.cs: Don't tell the world that we have a context menu.
-	* Control.cs: New method so that we can control whether or not the
-	context menu is visible outside MWF.
-
-2006-12-11  Everaldo Canuto  <everaldo at simios.org>
-
-	* ToolBarButton.cs: Fix text positon. 
-
-2006-12-11  Miguel de Icaza  <miguel at novell.com>
-
-	* ProgressBar.cs (MarqueeAnimationSpeed): Add stub.
-
-	* Control.cs (DoubleBuffered): Add implementation.
-
-	* Application.cs (OpenForms): Add.
-
-2006-12-11  Jonathan Pobst  <monkey at jpobst.com>
-
-	* Form.cs: Use opacity instead of Opactiy to determine if we need
-	to set the WS_EX_LAYERED bit.  [Fixes bug #80185]
-
-2006-12-11  Jonathan Pobst  <monkey at jpobst.com>
-
-	* Control.cs: Fix NRE if Control.Site was set to null.
-
-2006-12-11  Chris Toshok  <toshok at ximian.com>
-
-	* Control.cs: ControlCollection.Remove should return if the arg is
-	null, and ControlCollection.SetChildIndex should raise a ANE.
-
-2006-12-11  Gert Driesen  <drieseng at users.sourceforge.net>
-
-	* Control.cs: Verify value set for Dock property. Code formatting
-	updates.
-
-2006-12-11  Jackson Harper  <jackson at ximian.com>
-
-	* TextControl.cs: Draw the caret and the selection when a flag is
-	set on the owner.
-	* TextBoxBase.cs: We want to draw the caret and the selection for
-	TextBox but not for TextBoxBase.
-	- If the window is resized and scrolling is no longer needed (the
-	whole doc is visible) set the scroll position to zero.
-	- The default SelectWord (the one TextBox uses) should move the
-	caret to the end of the word.
-	- SelectAll moves the caret to the end of the selection.
-	* TextBox.cs: We don't selectall on focus, we just do it when the
-	control is created.
-	
-2006-12-11  Mike Kestner  <mkestner at novell.com>
-
-	* ComboBox.cs: stub in a 2.0 override for ProcessKeyEventArgs.
-
-2006-12-11  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* ListView.cs: Add Insert, IndexOfKey, RemoveByKey and indexer 
-	2.0 support.
-	* ListViewItem.cs: Add Name 2.0 property.
-
-2006-12-11  Andreia Gaita  <avidigal at novell.com>
-
-	* TabControl.cs: Set visibility on selected or default tab 
-	when tabcontrol handle is created, so that it's contents
-	actually show up (duh). Fixes #80193
-	Don't redraw the control if there is no handle created, as
-	the selected index might be completely invalid. Added some tests
-	to check for this.
-
-2006-12-11  Everaldo Canuto  <everaldo at simios.org>
-
-	* ToolBar.cs: Uses maximun width and height of all buttons as 
-	button rectangle when ButtonSize specified, it looks strange but
-	is what happens in Win32. Fixes #80189.
-
-2006-12-11  Jackson Harper  <jackson at ximian.com>
-
-	* TextControl.cs: Need to track undo levels ourself, since
-	compound actions will mess them up.
-
-2006-12-10  Andreia Gaita  <avidigal at novell.com>
-
-	* TabControl.cs: Raise SelectedIndexChanged for 1.1 if the
-	SelectedIndex value is changed (even if it's not valid).
-	Reset SelectedIndex to 0 when the handle is created and if
-	the current index is invalid.
-	Fixes SelectdeIndex unit tests and #80128
-
-2006-12-08  Chris Toshok  <toshok at ximian.com>
-
-	* DataGrid.cs (set_CurrentCell): because EnsureCellVisibility
-	calls EndEdit, it needs to be called before we set current_cell to
-	its new value.  Otherwise, we end up committing the value in the
-	textbox to the new cell as well.  Fixes bug #80160.
-
-2006-12-08  Chris Toshok  <toshok at ximian.com>
-
-	* Form.cs (set_CancelButton): if the button's DialogResult is
-	None, set it to Cancel.  Fixes bug 80180.
-
-2006-12-08  Jackson Harper  <jackson at ximian.com>
-
-	* TextBoxBase.cs: Ugh, ClientSize can be 0,0 sometimes, so we need
-	to watch ourselves when setting the canvas size and setting the
-	scrollbar values.
-
-2006-12-08  Chris Toshok  <toshok at ximian.com>
-
-	* DataGrid.cs: comment out the two MakeTransparent calls for the
-	time being so people using trunk (and not 1.2.2) on windows can
-	actually use the datagrid.  This deals with bug #80151.
-
-2006-12-08  Jonathan Pobst  <monkey at jpobst.com>
-
-	* ThemeWin32Classic.cs: Change ButtonBase_DrawImage to use the
-	Graphics.DrawImage (image, int, int, int, int) overload instead
-	of Graphics.DrawImage (image, int, int).  GDI+ can't figure out
-	the dpi difference and was blurring images it drew.
-	[Fixes bug #79960]
-
-2006-12-08  Chris Toshok  <toshok at ximian.com>
-
-	* ThemeWin32Classic.cs (DataGridPaintRows): handle case where
-	rowcnt is 0 (such as with an empty datasource), and make sure we
-	initialize not_usedarea.Y to cells.Y, so we don't draw over the
-	other areas (caption, parent row, etc, etc).  Fixes bug #80095.
-
-2006-12-08  Chris Toshok  <toshok at ximian.com>
-
-	* DataGridColumnStyle.cs (SetDataGrid): don't try to access a null
-	grid.
-
-2006-12-08  Chris Toshok  <toshok at ximian.com>
-
-	[ Fixes bug #80167 ]
-	
-	* ThemeWin32Classic.cs: don't draw the image if the button's flat
-	style is FlatStyle.System.
-
-	* ButtonBase, ThemeClearlooks.cs, ThemeGtk.cs, ThemeNice.cs: make
-	ButtonBase.flat_style private, and switch uses of it to the public
-	property.
-	
-2006-12-08  Chris Toshok  <toshok at ximian.com>
-
-	[ Fixes bug #80121 ]
-	
-	* ThemeWin32Classic.cs: center the caption text in the datagrid
-	when we draw it.
-
-	* DataGrid.cs: lessen the amount we add to the caption height from
-	6 to 2.  6 was making it huge.
-
-2006-12-08  Andreia Gaita  <avidigal at novell.com>
-
-	* UpDownBase: Handle MouseWheel call directly instead of capturing
-	the inner textbox's OnMouseWheel. Fixes #80166
-
-2006-12-08  Jackson Harper  <jackson at ximian.com>
-
-	* TextControl.cs: We need to invalidate the textbox when we empty
-	it (how had this not been discovered before?)
-
-2006-12-08  Jackson Harper  <jackson at ximian.com>
-
-	* TextBoxBase.cs: Reworked the mouse down code so I could get it
-	to behave like MS, we now ignore the eventargs.Click and just
-	track state ourself, which we were already doing anyways.
-	- Constrain the double click handler to the double click size.
-	
-2006-12-08  Chris Toshok  <toshok at ximian.com>
-
-	* DataGrid.cs: the mousewheel code shouldn't try to scroll in a
-	direction if that scrollbar isn't shown.  fixes bug #80158.
-
-2006-12-08  Andreia Gaita  <avidigal at novell.com>
-
-	* NumericUpDown.cs: Update value on getter. Fixes #79950
-
-2006-12-08  Chris Toshok  <toshok at ximian.com>
-
-	* MenuItem.cs: add back in the event cloning code.  I didn't know
-	how to do it in the face of the EventHandlerList work i'd done
-	last week.  Fixes bug #80183.
-
-2006-12-08  Jonathan Pobst  <monkey at jpobst.com>
-
-	* Control.cs: Add an invalidate to the BackgroundImage setter.
-	[Fixes 80184]
-
-2006-12-07  Jonathan Pobst  <monkey at jpobst.com>
-
-	* ToolStrip*: Add some small properties reported by MoMA, fix event
-	firing and default properties based off of unit tests, and add some
-	attributes based off of the class status page.
-
-2006-12-07  Jackson Harper  <jackson at ximian.com>
-
-	* TextBoxBase.cs: Take HideSelection into account when determining
-	whether or not to show the selection.
-	* RichTextBox.cs: After inserting the RTF into the document move
-	the cursor to the beginning of the document.
-
-2006-12-07  Jonathan Pobst  <monkey at jpobst.com>
-
-	* Control.cs: Remove static ArrayList "controls" which maintained
-	a reference to every control created.
-	* Application.cs: Create a static FormCollection to maintain a reference
-	to every form created.  Use it in places that formerly enumerated through
-	the controls one looking for forms.
-	* Form.cs: Add and remove self from above FormCollection.
-
-2006-12-07  Alexander Olk  <alex.olk at googlemail.com>
-
-	* MimeIcon.cs: gdk_pixbuf_save_to_buffer is part of libgdk-pixbuf,
-	  not libgdk (though it makes me wonder why I didn't have any
-	  problems)
-
-2006-12-07  Chris Toshok  <toshok at ximian.com>
-
-	[ you had to know this was coming after that last commit...]
-	
-	* XplatUIX11.cs: implement the 3 Offscreen functions in terms of
-	XPixmaps (CreateOffscreenDrawable maps to XCreatePixmap,
-	DestroyOffscreenDrawable to FreePixmap, and BlitFromOffscreen to
-	XCopyArea).
-
-2006-12-07  Chris Toshok  <toshok at ximian.com>
-
-	* XplatUI.cs: add 3 calls (CreateOffscreenDrawable,
-	DestroyOffscreenDrawable, and BlitFromOffscreen) that encompass
-	all the behavior we need for double buffering.
-
-	* XplatUIDriver.cs: implement the 3 double buffer methods using a
-	client side Bitmap, just like the old Control-based double buffer
-	code did.  The methods are virtual, so each XplatUI driver
-	subclass can replace the implementation to use a faster, platform
-	specific approach.
-
-	* Control.cs: make use of the 3 Offscreen XplatUI calls in the
-	double buffer code, and clean things up a bit in the process.
-
-2006-12-06  Chris Toshok  <toshok at ximian.com>
-
-	* Control.cs: reindent WndProc.
-
-2006-12-06  Chris Toshok  <toshok at ximian.com>
-
-	[ I wanna be like BenM when I grow up ]
-	
-	* Hwnd.cs: create a single static Graphics object on the static
-	Bitmap we create.  use this for our text measurements.
-
-	* Control.cs (DeviceContext): stop using the backbuffer's dc_mem.
-	This was causing us to allocate a backbuffer for every control,
-	even when it wasn't flagged as double buffered.  Instead use the
-	single graphics instance.  This might have implications for
-	multithreaded applications.  If we run into problems we can switch
-	to creating 1 Graphics per control, on the static Hwnd bitmap.
-
-	this change nets us a 7M savings in private dirty mappings when
-	running FormsTest.exe.
-
-2006-12-06  Chris Toshok  <toshok at ximian.com>
-
-	* ListView.cs: the BackgroundImage override is just to set
-	attributes.  chain up to base.BackgroundImage.
-
-	* RichTextBox.cs: same.
-
-	* ToolBar.cs: same, but we need to also redraw the toolbar when it
-	changes, so instead a handler for BackgroundImageChanged.
-	
-	* Control.cs: make background_image private.
-
-2006-12-06  Chris Toshok  <toshok at ximian.com>
-
-	* ScrollBar.cs: change the assignment of cursor to Cursor.  not
-	sure we even need this assignment, but roll with it for now.
-
-	* Control.cs: make the cursor field private.
-
-2006-12-06  Chris Toshok  <toshok at ximian.com>
-
-	* Form.cs: we don't need to explicitly set ImeMode to
-	ImeMode.NoControl - that's a natural fallout of Control.ImeMode's
-	behavior in the face of ImeMode.Inherit.
-
-	* ButtonBase.cs: change DefaultImeMode to ImeMode.Disable, and
-	change the ctor's assignment to use ImeMode instead of ime_mode.
-
-	* Control.cs (get_ImeMode): don't assume DefaultImeMode ==
-	ImeModeInherit.  Only check for the parent's imemode (and return
-	NoControl if there is no parent) if ime_Mode == ImeMode.Inherit.
-	This fixes the button unit test, which sets both ImeMode and
-	DefaultImeMode to ImeMode.Disable.
-
-	also make the ime_mode field private.
-
-2006-12-06  Chris Toshok  <toshok at ximian.com>
-
-	* Control.cs: make control_style private.
-
-	* TextBoxBase.cs: fix the HandleClick override.  it was explicitly
-	setting the styles to true, then setting them to false instead of
-	reverting to their previous values.
-
-	also, call SetStyle on the scrollbars instead of using
-	control_style directly.
-
-2006-12-06  Jonathan Pobst  <monkey at jpobst.com>
-
-	* FormCollection.cs: Implement. [2.0]
-
-2006-12-06  Chris Toshok  <toshok at ximian.com>
-
-	* Control.cs: make tab_stop private.
-
-	* Label.cs: set TabStop, not tab_stop.  reformat some event
-	add/remove methods to make them more compact.
-
-2006-12-06  Chris Toshok  <toshok at ximian.com>
-
-	* RadioButton.cs: fix TabStop handling.
-
-2006-12-06  Chris Toshok  <toshok at ximian.com>
-
-	* TextBox.cs: remove the explicit assignments to has_focus.
-	Control does that.
-
-	* ButtonBase.cs: remove the assignment to has_focus.  Control will
-	manage that.
-	
-2006-12-06  Chris Toshok  <toshok at ximian.com>
-
-	* ButtonBase.cs: remove all uses of is_enabled from this code.
-	it's always true when any of the code containing the checks is
-	executed.
-
-2006-12-06  Chris Toshok  <toshok at ximian.com>
-
-	* ImageList.cs: reinstate the ShouldSerialize*/Reset* methods,
-	with different semantics (some are present in both 1.1 and 2.0
-	profiles) so that we match MS's behavior in our unit tests.
-
-2006-12-06  Jackson Harper  <jackson at ximian.com>
-
-	* TextControl.cs: Make this operation undoable.
-	* TextBoxBase.cs: Factor the border width into the preferred
-	height.
-	- implement Modified as per the spec.
-
-2006-12-06  Chris Toshok  <toshok at ximian.com>
-
-	* Timer.cs, Control.cs, Menu.cs: make control_tag private.
-
-2006-12-06  Chris Toshok  <toshok at ximian.com>
-
-	* Control.cs: make right_to_left and context_menu fields private.
-
-2006-12-06  Chris Toshok  <toshok at ximian.com>
-
-	* AccessibleObject.cs, Control.cs, XplatUIX11GTK.cs,
-	XplatUIX11.cs, Form.cs, RadioButton.cs, ScrollableControl.cs: make
-	Control.child_controls private.  switch all uses over to
-	Control.Controls.
-
-2006-12-06  Chris Toshok  <toshok at ximian.com>
-
-	* System.Windows.Forms/GroupBox.cs,
-	System.Windows.Forms/AccessibleObject.cs,
-	System.Windows.Forms/ErrorProvider.cs,
-	System.Windows.Forms/Control.cs,
-	System.Windows.Forms/UpDownBase.cs,
-	System.Windows.Forms/ScrollBar.cs,
-	System.Windows.Forms/DateTimePicker.cs,
-	System.Windows.Forms/Form.cs, System.Windows.Forms/Label.cs,
-	System.Windows.Forms/ToolTip.cs,
-	System.Windows.Forms/RadioButton.cs,
-	System.Windows.Forms/LinkLabel.cs,
-	System.Windows.Forms/Splitter.cs,
-	System.Windows.Forms/TextBoxBase.cs,
-	System.Windows.Forms/ToolStripTextBox.cs,
-	System.Windows.Forms/ContainerControl.cs,
-	System.Windows.Forms/ThemeWin32Classic.cs,
-	System.Windows.Forms/SizeGrip.cs,
-	System.Windows.Forms/ToolStripDropDown.cs,
-	System.Windows.Forms/ScrollableControl.cs: Make Control.parent
-	private.  switch all uses over to Control.Parent.
-
-2006-12-06  Chris Toshok  <toshok at ximian.com>
-
-	* RichTextBox.cs: don't assign to has_focus in GotFocus/LostFocus.
-	Control does this before calling emitting these events.
-
-	* TabControl.cs: same.
-
-	* ThemeWin32Classic.cs: use Control.ClientRectangle instead of
-	Control.client_rect.
-
-	* ButtonBase.cs: use the ClientSize property instead of the
-	client_size field.
-
-	* ScrollableControl.cs: same.
-
-	* Control.cs: another pass at making properties private.  also,
-	move the initialization of tab_stop to the ctor.
-
-2006-12-05  Andreia Gaita <avidigal at novell.com>
-
-	* TabControl.cs: Let the selected index be set freely if the 
-	control handle is not yet created.
-
-2006-12-05  Jonathan Pobst  <monkey at jpobst.com>
-
-	* Control.cs: Revert dist_top, dist_right, and dist_bottom to 
-	internal until I can rewrite DefaultLayout.
-	* ToolStrip.cs: Fix build error and some general cleaning.
-	* ToolStripControlHost.cs, SplitterPanel.cs, DataGridView.cs:
-	Fix build errors caused by making some of Control's fields private.
-
-2006-12-05  Jackson Harper  <jackson at ximian.com>
-
-	* TextControl.cs: Redo Insert a little so that it use IndexOf
-	instead of Split, this prevents it from messing up on things like
-	\n\n\n. Also more effecient since the split array doesn't need to
-	be created.
-	* TextBoxBase.cs: AppendText doesnt handle multiline and non
-	multiline text differently, this is the first of many fixes that
-	will make multiline/non-multiline the same thing as far as the
-	TextBoxBase is concerned.
-	- Don't split the text and insert lines, this can lose some line
-	endings (like is the last line a soft or hard break). Instead use
-	the new Insert.
-	- Fix an off by one when combining all the lines in the Text
-	getter.
-	- Remove separate multiline handling from the Text getter/setter.
-
-2006-12-05  Chris Toshok  <toshok at ximian.com>
-
-	* ButtonBase.cs: a few changes:
-
-	- don't reinitialize internal Control fields in the ctor when they
-	have the same values as Control sets them.
-
-	- don't set has_focus in OnGotFocus/OnLostFocus.  Control does
-	this before calling those methods.
-
-	- we don't need to call Refresh for anything.  use Invalidate
-	instead.
-
-	- OnEnabledChanged doesn't need to redraw at all - Control.cs
-	calls Refresh in its OnEnabledChanged.
-	
-	- several of the events we were registered for in the ctor to
-	redraw ourselves already include calls to Invalidate in the
-	property setters that raise the events.  remove the extra
-	invalidation.
-
-	- reformat a switch statement that was 83274658 columns wide.
-	
-2006-12-05  Mike Kestner  <mkestner at novell.com>
-
-	* ComboBox.cs: fix a unit test regression from a TextBox
-	SelectionLength return of -1 when there's no selection.  
-
-2006-12-05  Chris Toshok  <toshok at ximian.com>
-
-	* Control.cs, Button.cs, ThemeGtk.cs, Form.cs, ListView.cs,
-	ThemeWin32Classic.cs, SizeGrip.cs, ToolBar.cs: first pass at
-	cleaning up some of the internal Control fields being used by
-	subclasses.
-
-2006-12-05  Mike Kestner  <mkestner at novell.com>
-
-	* ComboBox.cs: fix some Simple mode regressions.  Set Visible on the
-	listbox after AddImplicit calls since it defaults to hidden. Add a 
-	hack to preserve requested heights across DropDownStyle changes.
-
-2006-12-05  Jonathan Pobst  <monkey at jpobst.com>
-
-	* PropertyGrid.cs: Hide FindFirstItem method from public API.
-
-2006-12-05  Chris Toshok  <toshok at ximian.com>
-
-	* DataGridView.cs: fix compiler warnings.
-
-	* PrintControllerWithStatusDialog.cs: same.
-
-	* ToolBar.cs: same.
-
-	* FolderBrowserDialog.cs: same.
-
-	* Splitter.cs: same.
-
-	* DataGridViewComboBoxCell.cs: same.
-
-	* XplatUIWin32.cs: same.
-
-	* PictureBox.cs: same.
-
-	* Win32DnD.cs: same.
-
-	* PageSetupDialog.cs: same.
-
-	* FileDialog.cs: same.
-
-	* PrintDialog.cs: same.
-
-	* DataGridTextBoxColumn.cs: same.
-
-	* DrawTreeNodeEventArgs.cs: same (and fix corcompare)
-
-2006-12-05  Chris Toshok  <toshok at ximian.com>
-
-	* TextBox.cs, CheckedListBox.cs, MonthCalendar.cs, Menu.cs,
-	MainMenu.cs, ListView.cs, LabelEditTextBox.cs, ToolBar.cs: more
-	System.ComponentModel.EventHandlerList work.
-
-2006-12-05  Jonathan Chambers  <joncham at gmail.com>
-
-	* DrawTreeNodeEventArgs.cs: Added.
-
-2006-12-05  Rolf Bjarne Kvinge  <RKvinge at novell.com>
-	
-	* InternalWindowManager.cs: Remove an unused field.
-	
-2006-12-05  Rolf Bjarne Kvinge  <RKvinge at novell.com>
-
-	* InternalWindowManager.cs:
-	- Save the point where the title bar is clicked.
-	
-	* MdiWindowManager.cs:
-	- Only allow moving of the window as long as the 
-	clicked point on the title bar does not get out of
-	MdiClient's rectangle. Fixes #79982.
-	
-	* MdiClient.cs:
-	- Added Horizontal/VerticalScrollbarVisible.
-	- Simplified the scrollbar sizing algorithm.
-	- Cache the difference in scrolled value in
-	H/VBarValueChanged and move the calculation out
-	of the for loop.
-
-2006-12-05  Rolf Bjarne Kvinge  <RKvinge at novell.com>
-
-	* Control.cs: Make the Console.WriteLine in WndProc 
-	write more info.
-
-2006-12-05  Chris Toshok  <toshok at ximian.com>
-
-	* ToolStripManager.cs, ToolStripButton.cs,
-	ToolStripContentPanel.cs, ToolStripComboBox.cs, ToolStrip.cs,
-	ToolStripMenuItem.cs, ToolStripItem.cs, ToolStripControlHost.cs,
-	ToolStripSplitButton.cs, ToolStripSeparator.cs,
-	ToolStripRenderer.cs, ToolStripDropDownItem.cs,
-	ToolStripProgressBar.cs, ToolStripContainer.cs,
-	ToolStripTextBox.cs, ToolStripPanel.cs, ToolStripDropDown.cs: move
-	to using System.ComponentModel.EventHandlerList.
-
-2006-12-04  Chris Toshok  <toshok at ximian.com>
-
-	* LinkLabel.cs: fix up compiler warnings.
-
-	* TableLayoutSettings.cs: same.
-
-	* TreeView.cs: same.
-
-	* ToolBar.cs: same.
-
-	* TabControl.cs: same.
-
-	* RichTextBox.cs: same.
-
-	* ListViewItem.cs: same.
-
-	* PropertyGrid.cs: same.
-
-	* DataGridViewRowPostPaintEventArgs.cs: corcompare fix.
-
-	* ToolTip.cs same.
-
-	* TextRenderer.cs: fix up compiler warnings.
-
-	* Label.cs: same.
-
-	* Form.cs: corcompare fixes.
-
-	* PictureBox.cs: fix up compiler warnings.
-
-	* ImageListStreamer.cs: same.
-
-	* TrackBar.cs: corcompare fix.
-
-	* Control.cs: fix up compiler warnings.
-
-	* SplitterPanel.cs: same.
-
-	* NumericTextBox.cs: same.
-
-	* ImageList.cs: same.
-
-	* StatusStrip.cs: same.
-
-	* ProgressBar.cs: corcompare fix.
-
-	* ToolStripButton.cs: fix up compiler warnings.
-
-	* ToolStripStatusLabel.cs: same.
-
-	* ToolStripSplitButton.cs: same.
-
-	* ToolStripSeparator.cs: same.
-
-	* ToolStripProgressBar.cs: same.
-
-	* ToolStripDropDownMenu.cs: same
-
-	* ToolStripDropDown.cs: same.
-
-	* ToolStripDropDownButton.cs: same.
-
-	* ToolStrip.cs: same.
-
-	* ToolStripControlHost.cs: same.
-
-	* ToolStripContentPanel.cs: same.
-
-	* ToolStripDropDown.cs: same.
-
-	* ToolStripContainer.cs: same.
-
-	* ToolStripPanel.cs: same, and add "new" where we need it to work
-	with the new ArrangedElementCollection.
-
-	* ToolStripItemCollection.cs: add "new" where we need it to work
-	with the new ArrangedElementCollection.
-
-2006-12-04  Andreia Gaita <avidigal at novell.com>
-
-	* TabControl.cs: Fix default tab selection to after TabControl
-	gets focus and not before. Fixes #80128
-
-2006-12-04  Chris Toshok  <toshok at ximian.com>
-
-	* DataGridTableStyle.cs: remove the gross calling of
-	datagrid.Refresh from here.  It's a broken idea and it doesn't
-	work anyway.
-
-	* DataGrid.cs: instead, just register/unregister from the
-	DataGridTableStyle events in CurrentTableStyle.  we play it
-	conservatively and EndEdit + CalcAreasAndInvalidate on any event,
-	even though some would most likely not require it.  Fixes bug
-	#80115 (and one portion of #80117 as a side effect).
-
-2006-12-04  Chris Toshok  <toshok at ximian.com>
-
-	* DataGrid.cs (set_CaptionVisible): EndEdit before doing the work
-	so the textbox (if any) goes away.  Fixes bug #80117.
-
-2006-12-04  Chris Toshok  <toshok at ximian.com>
-
-	* DataGridColumnStyle.cs: set the column's readonly property
-	initially based on the property descriptor's IsReadOnly.  Fixes
-	bug #80044.
-
-2006-12-04  Chris Toshok  <toshok at ximian.com>
-
-	* ComboBox.cs: wrap the dropdown style changing work in
-	SuspendLayout/ResumeLayout.  Fixes bug #79968.
-
-2006-12-04  Jackson Harper  <jackson at ximian.com>
-
-	* TextBoxBase.cs: Fix off by one, since these are one-based.
-	* TextBox.cs: Select all the text when we get focus.  The TextBox
-	does this but the RTB does not.
-
-2006-12-04  Chris Toshok  <toshok at ximian.com>
-
-	* DataGridTextBoxColumn.cs: remove some spew.
-
-	* DataGridColumnStyle.cs (SetColumnValueAtRow): this seems right
-	but some part of me is saying "it shouldn't be here.."  At any
-	rate, it fixes bug #80046.  Call IEditableObject.EndEdit after
-	setting the value.
-
-2006-12-04  Chris Toshok  <toshok at ximian.com>
-
-	* DataGridColumnStyle.cs (SetDataGrid): call CheckValidDataSource
-	to reassign the propertydescriptor.
-
-2006-12-04  Jackson Harper  <jackson at ximian.com>
-
-	* TextBoxBase.cs:
-	* TextControl.cs: Remove some unused variables.  Maybe this will
-	patch things up between mike and I.
-	- don't split lines less then one char wide, if the viewport is
-	that small text won't be visible anyways.
-	
-2006-12-04  Jackson Harper  <jackson at ximian.com>
-
-	* TextBoxBase.cs: Default selection length is -1, need to do some
-	more testing on windows to see when this is used for the property.
-	- Redid the Lines [] property to that we properly remove soft line
-	breaks
-	- added support for preserving carriage returns
-	-  CanUndo is not a variable like 'is undo enabled' it just returns
-	true if there is undo operations available.
-	- AppendText doesn't need to grab the last tag itself anymore,
-	this happens automatically when we move the cursor.
-	* TextControl.cs: Add CompoundActions to the undo class. This
-	allows combining the other operations into one big option.  ie a
-	paste will combine { delete old, insert new, move cursor }
-	- Add InsertString undo operation
-	- New method for deleting multiline text
-	- Add carriage returns to lines. So we can preserve carriage
-	returns when text is 'roundtripped'
-
-2006-12-04  Chris Toshok  <toshok at ximian.com>
-
-	* DataGrid.cs (CalcCellsArea): cells_area.Width/Height are at a
-	minimum 0.  Fixes the scrollbar exception in bug #80136.
-
-2006-12-04  Rolf Bjarne Kvinge  <RKvinge at novell.com>
-
-	* MdiClient.cs: 
-	* MdiWindowManager: Removed unused fields and methods.
-	
-2006-12-04  Rolf Bjarne Kvinge  <RKvinge at novell.com>
-	
-	* StatusBar.cs: Update all panels when a AutoSize=Contents
-	panel needs updating.
-	
-	* StatusBarPanel.cs: Remove twidth and only use initialize.
-	Fixes #80031.
-		
-2006-12-04  Rolf Bjarne Kvinge  <RKvinge at novell.com>
-
-	* Form.cs: When a form's MdiParent is set add it directly
-	on top of the z-order in stead of relying on MdiClient's
-	ActivateChild to do it. Fixes #80135.
-	
-	* MdiClient.cs: 
-	- Remove original_order, mdi_child_list is already doing
-	the same thing.
-	- Create mdi_child_list on construction in
-	stead of first use (avoids a few null checks).
-
-	* MenuItem.cs: Use an already existing list of mdi children
-	to get the correct order of children and remove the other
-	redundant list.
-
-2006-12-04  Chris Toshok  <toshok at ximian.com>
-
-	* PropertyGridView.cs: cached_splitter_location is only used in
-	!DOUBLEBUFFER code.
-
-	* PropertyGrid.cs: implement the ComComponentNameChanged event
-	using Events, hoping that would fix the warning.  Looks like a
-	compiler bug instead (#80144).
-
-	* PropertyManager.cs: remove unused method.
-
-2006-11-04  Everaldo Canuto  <everaldo at simios.org>
-
-	* ThemeWin32Classic.cs: Dont draw arrow when menuitem on menubar, 
-	include parentesis to fix expression evaluation. Fixes #79634.
-
-2006-11-02  Everaldo Canuto  <everaldo at simios.org>
-	
-	* MenuAPI.cs:
-	- Changes to fix behavior in Menu control, some reported in #80097
-	and other detected during behavior refactory like a select event
-	problems.
-	- Remove unneded "if's" conditions.
-	- Created an internal to flag when popup is active in control, we need 
-	it because in .NET you can have menu active but without popup active
-	when you active menu using popup without visible items.
-	- Mimic win32 behavior for Select and Popup events.  
-	- Dont open popup menu when you dont have visible subitems.
-	- Do nothing when click on disabled menu item.
-	- Some small changes to follow the coding style guidelines.
-	- Unselect menu only when another control gives focus. Fixes #80097.
-	- Remove unused code.
-	
-	* MenuItem.cs: internal VisibleItems method to check if menu
-	theres visible subitems, it will be usefull to fix some 
-	behavior in Menu control.
-	
-2006-11-01  Everaldo Canuto  <everaldo at simios.org>
-	
-	* Timer.cs: Tag property for 2.0 profile.
-	
-2006-12-01  Chris Toshok  <toshok at ximian.com>
-
-	[ after removing all warning suppressions, this cleans up over 100 warnings. ]
-	
-	* Win32DnD.cs: comment out some unused fields.
-
-	* XplatUIWin32.cs: comment out some unused pinvokes, and remove
-	some unused properties/methods.
-
-	* XplatUIX11.cs: fix MousePosition so we override the base class's
-	property instead of conflicting with it.
-
-	* PictureBox.cs: comment out some unused fields
-
-	* OSXStructs.cs: make some struct fields public.
-
-	* XplatUIOSX.cs: comment out some unused pinvokes, and fix
-	MousePosition so we override the base class's property instead of
-	conflicting with it.
-
-	* X11Dnd.cs: comment out some unused fields
-
-	* X11DesktopColors.cs: fix some struct field visibility to quiet
-	the compiler.
-
-	* X11Dnd.cs: remove some debug code.
-
-	* ThemeClearlooks.cs: comment out unused field.
-
-	* ThemeNice.cs: mark some methods as overriding ThemeWin32Classic as needed.
-
-	* ThemeGtk.cs: comment out some unused pinvokes.
-
-	* Timer.cs: remove some unused fields.
-
-	* ThemeClearlooks.cs: comment out unused field.
-
-	* UpDownBase.cs: comment out unused field.
-
-	* DataObject.cs: comment out unused field.
-
-	* DataGridBoolColumn.cs: reomve unused field.
-
-	* DataGrid.cs: remove unused field.
-
-	* Cursor.cs: remove old ToBitmap code.
-
-	* ControlPaint.cs: remove unused method.
-
-	* ScrollBar.cs: remove unused fields.
-
-	* ComboBox.cs: remove unused field, and chain up to
-	AccessibleObject ctor.
-
-	* ListBox.cs: remove unused field.
-
-	* ButtonBase.cs: wrap a couple fields in NET_2_0.
-
-	* GridEntry.cs: remove unused fields.
-
-	* Binding.cs: remove unused fields.
-
-	* AxHost.cs: remove unused method.
-
-	* ContainerControl.cs: remove unused field.
-
-	* ScrollableControl.cs: remove unused fields.
-
-2006-12-01  Chris Toshok  <toshok at ximian.com>
-
-	* XplatUI.cs, XplatUIWin32.cs, XplatUIGTK.cs: nuke
-	the Where/WhereString stuff.  it's easy enough to CWL
-	Environment.StackTrace.
-
-	* XplatUIX11.cs: same, but also fix up a lot of mcs warnings about
-	unused private fields.
-
-2006-12-01  Jackson Harper  <jackson at ximian.com>
-
-	* TextControl.cs: Do not update the view while inserting multiline
-	text. If we update the view we might wrap lines, before entering
-	the new lines, which causes the new line insertion calculations to
-	be totally fubared.
-	- Remove an old TODO
-	- Make debug output a little nicer
-	
-2006-12-01  Chris Toshok  <toshok at ximian.com>
-
-	* ToolBar.cs: revert the ImeMode fix here and add an XXX comment.
-
-2006-12-01  Chris Toshok  <toshok at ximian.com>
-
-	[ fix the majority of the CS0108 warnings we've been suppressing ]
-	
-	* TreeView.cs: mark BackgroundImageChanged as 'new'.
-
-	* ToolBar.cs: ImeMode just passes stuff to Control.  Rename Layout
-	to "LayoutToolBar" to quiet mcs.
-	
-	* TabControl.cs: mark our ControlCollection class as 'new'.
-
-	* TextBoxBase.cs: mark some events as 'new'.
-
-	* Splitter.cs: TabStop is 'new'.
-
-	* ControlBindingsCollection.cs: mark a few methods as new since
-	they change the visibility from protected to public.
-
-	* RadioButton.cs: DoubleClick -> base class, and remove unused
-	HaveDoubleClick.
-
-	* MonthCalendar.cs: ImeMode property -> base class, and mark many
-	events as new.
-
-	* NumericUpDown.cs: TextChanged -> base class.
-
-	* CheckedListBox.cs: mark our ObjectCollection class as new to
-	quiet mcs.
-
-	* FolderBrowserDialog.cs: make HelpRequest event new and have it
-	muck with the base class.
-
-	* StatusBar.cs: fix some mcs warnings about Update being the same
-	name as a base class method.
-
-	* RichTextBox.cs: mark some events as new, and make them do things
-	to the base class impl.
-
-	* UserControl.cs: mark TextChanged as new, and have it manipulate
-	base.TextChanged.
-
-	* UpDownBase.cs: mark some things new.
-
-	* CheckBox.cs: mark DoubleClick "new", and add some text about
-	what we need to look at.
-
-	* Panel.cs: make the events "new", and manipulate the base
-	version.  these are just here for attributes.
-
-	* AccessibleObject.cs: make owner private.
-
-	* Control.cs: deal with AccessibleObject.owner being private.
-	cache our own copy if we need it.
-
-	* Button.cs: add "new" to the DoubleClickEvent.
-
-	* ListBox.cs: no need to track our own has_focus here.  let
-	Control.has_focus do it for us.  Also some other work to clear up
-	warnings about not overriding base class methods of the same name.
-	
-	* ComboBox.cs: clear up some warnings about not override base
-	class methods of the same name.
-
-2006-12-01  Chris Toshok  <toshok at ximian.com>
-
-	* Form.cs: flag a few things as "new" to quiet some of the mcs
-	warnings.
-
-	* AxHost.cs: same.
-
-	* PrintPreviewDialog.cs: same.
-
-	* DataGridView.cs: fix a ton of corcompare warnings.  not all, but
-	now DGV isn't so horrible on the class status page.  also, move
-	all events to using System.ComponentModel.EventHandlerList.  my
-	wrists hurt.
-
-2006-12-01  Rolf Bjarne Kvinge  <RKvinge at novell.com>
-
-	* MdiWindowManager.cs:
-	- Set form to active mdi child if shown,
-	and update the active mdi child to the next 
-	remaining child in the z-order if the form is hidden.
-
-	* Form.cs: 
-	- Track if the form has been visible and if its 
-	visibility is beeing changed, so that the MdiClient
-	can properly decide the ActiveMdiChild. The MdiClient 
-	cannot track this since the form can change visibility 
-	before MdiClient is created.
-
-	* MdiClient.cs:
-	- Don't activate anything of the parent form is changing
-	its visibility.
-	- Rework ActiveMdiChild to only return visible mdi 
-	children and take into account several other corner 
-	cases.
-
-2006-12-01  Chris Toshok  <toshok at ximian.com>
-
-	* IBindableComponent.cs: new 2.0 interface.
-
-2006-12-01  Gert Driesen  <drieseng at users.sourceforge.net>
-
-	* DataGrid.cs: Font for caption area is bold by default.
-
-2006-12-01  Everaldo Canuto  <everaldo at simios.org>
-
-	* Menu.cs: Tag property for 2.0.
-	
-2006-11-01  Everaldo Canuto  <everaldo at simios.org>
-
-	* ThemeWin32Classic.cs: Adjust menu separator drawing. 
-	
-2006-12-01  Chris Toshok  <toshok at ximian.com>
-
-	* TreeView.cs: doh, the Begin* events should be
-	TreeViewCancelEventHandler.
-
-2006-12-01  Chris Toshok  <toshok at ximian.com>
-
-	* Form.cs: Form.ControlCollection already stores off the
-	form_owner field.  don't access the base class's internal "owner"
-	field.
-
-	* Control.cs: make all the fields in Control.ControlCollection
-	private.  there's no need for any internal fields here.
-
-2006-12-01  Chris Toshok  <toshok at ximian.com>
-
-	* DataGrid.cs: call SetDataSource instead of CalcGridAreas in
-	OnHandleCreated.  Fixes bug #80109.
-
-2006-12-01  Chris Toshok  <toshok at ximian.com>
-
-	* Button.cs, PropertyGridTextBox.cs, ComboBox.cs,
-	SplitContainer.cs, Control.cs, StatusStrip.cs,
-	DataGridTableStyle.cs, MenuItem.cs, DomainUpDown.cs, ImageList.cs,
-	NumericTextBox.cs, NumericUpDown.cs, Panel.cs, CommonDialog.cs,
-	DataGrid.cs, ScrollBar.cs, TrackBar.cs, PictureBox.cs,
-	DateTimePicker.cs, StatusBar.cs, Form.cs, PrintPreviewDialog.cs,
-	Label.cs, UserControl.cs, CheckBox.cs, RadioButton.cs,
-	LinkLabel.cs, ListControl.cs, PropertyGrid.cs, Splitter.cs,
-	MenuStrip.cs, FolderBrowserDialog.cs, NotifyIcon.cs,
-	TextBoxBase.cs, ListView.cs, DataGridBoolColumn.cs,
-	PrintPreviewControl.cs, RichTextBox.cs, ListBox.cs, TabControl.cs,
-	DataGridColumnStyle.cs, ContextMenu.cs, TreeView.cs:
-
-	do most of the work to convert our code over to use
-	System.ComponentModel.Component.Events for
-	adding/removing/dispatching events.
-
-
-2006-11-30  Jonathan Pobst  <monkey at jpobst.com>
-
-	* DataGridView.cs: Fix an ArgumentNullException reported 
-	twice today in IRC.
-
-2006-11-30  Mike Kestner  <mkestner at novell.com>
-
-	* ComboBox.cs: fix the scrollbar mouse event forwarding in the 
-	grabbed listbox.  Fixes #80036 and #80101.
-
-2006-11-30  Rolf Bjarne Kvinge <RKvinge at novell.com>
-
-	* Message.cs: Changed ToString() to match MS.
-	
-2006-11-30  Jackson Harper  <jackson at ximian.com>
-
-	* TextBoxBase.cs: You can still change the selected text on a read
-	only textbox.
-	* TextControl.cs: Lower magic number for wrap calculations. This
-	lets text get closer to the right (far) edge.
-
-2006-11-30  Jonathan Pobst  <monkey at jpobst.com>
-
-	* Control.cs: Tweak 2.0 layout properties.
-	* Form.cs: Switch ToolStripMenuTracker hooks to ToolStripManager.
-	* TextRenderer.cs: Add a new overload.
-	* ToolStrip*: Huge amount of changes and new features.
-
-2006-11-30  Mike Kestner  <mkestner at novell.com>
-
-	* ComboBox.cs: fixes for LargeChange and Maximum to get the 
-	scroll range correct.  Fixes #79994.
-
-2006-11-30  Rolf Bjarne Kvinge <RKvinge at novell.com>
-
-	* MdiWindowManager.cs: Update main form's text when
-	a form is closed. (fixes #80038)
-	
-2006-11-30  Everaldo Canuto  <everaldo at simios.org>
-
-	* ToolBar.cs:
-	- Fix an regression in ButtonSize.
-	- Get ImeMode default value change to "Disable".
-	- Get ShowTooltips default value change to true, default value is 
-	"false" but after make a test in .NET we get "true" result as default.
-	
-2006-11-29  Jonathan Pobst  <monkey at jpobst.com>
-
-	* ToolStripDropDown.cs: Fix for SupportsTransparency change.
-
-2006-11-29  Chris Toshok  <toshok at ximian.com>
-
-	* XplatUIWin32.cs (GetWindowTransparency): check return value of
-	GetLayeredWindowAttributes.  if it's 0, return 1.0, as
-	SetWindowTransparency hasn't been called.
-
-2006-11-29  Chris Toshok  <toshok at ximian.com>
-
-	* Form.cs (set_TransparencyKey): only call SetWindowTransparency
-	if it's supported.
-	(set_AllowTransparency): reorder things a little so that the
-	WS_EX_LAYERED style is removed properly.
-
-2006-11-29  Chris Toshok  <toshok at ximian.com>
-
-	[ totally cosmetic eye-candy feature, fixes bug #80089 ]
-	
-	* Form.cs: only call the XplatUI transparency method (get/set) if
-	SupportsTransparency says it's supported. Otherwise fallback to
-	doing nothing (in the set case) or returning the instance field we
-	cache (in the get case).
-
-	* XplatUIStructs.cs: add TransparencySupport flag enum.
-	
-	* XplatUIDriver.cs: add abstract GetWindowTransparency, and track
-	change to SupportsTransparency.
-
-	* XplatUIOSX.cs: stub out GetWindowTransparency, and return
-	TransparencySupport.None from SupportsTransparency.
-
-	* XplatUIX11.cs: Stub out GetWindowTransparency, and return
-	TransparencySupport.Set from SupportsTransparency.
-
-	* XplatUIWin32.cs: implement GetWindowTransparency calling
-	GetLayeredWindowAttributes, and implement SupportsTransparency by
-	checking whether or not both
-	GetWindowTransparency/SetWindowTransparency are available
-	entrypoints.  We need to do this since SetWindowTransparency is
-	available as of win2k, but GetWindowTransparency requires winxp.
-	yay win32 api.
-
-	* XplatUI.cs: Add GetWindowTransparency, and change
-	SupportsTransparency to allow for either/both Get/Set.
-
-2006-11-29  Chris Toshok  <toshok at ximian.com>
-
-	* DataGrid.cs: keep from going into an infinite loop redrawing a
-	datagrid that has no datasource.  Fixes bug #80033.
-
-2006-11-29  Chris Toshok  <toshok at ximian.com>
-
-	* MenuItem.cs: fix the NRE when we assign text (and therefore call
-	Invalidate) before the mainmenu has been assigned to a control.
-
-2006-11-29  Chris Toshok  <toshok at ximian.com>
-
-	* DataGrid.cs: detect when we should be double the double click
-	row/column autosize stuff, although that codepath has yet to be
-	written.  part of the work for bug #79891.
-
-2006-11-29  Chris Toshok  <toshok at ximian.com>
-
-	* Binding.cs (SetControl): fix unit test.
-
-2006-11-29  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* PageSetupDialog.cs: Validate the margins and set them in
-	PageSettings. 
-	* NumericTextBox.cs: New class to mimic the behavior of the
-	textboxes used in the printing dialogs.
-
-2006-11-29  Andreia Gaita  <avidigal at novell.com>
-	
-	* Form.cs: Revert previous change (remove call UpdateBounds
-	from form constructor), because it messes with the handle creation
-	order, and that one needs lots and lots of love.
-	* PrintPreviewDialog.cs: Revert change to CreateHandle (add check
-	for valid printer and throw InvalidPrinterException if document
-	is set but printer not valid), adding a MonoTODO. Once 
-	handle creation is done properly, we can put this back in.
-
-2006-11-28  Everaldo Canuto  <everaldo at simios.org>
-
-	* MenuItem.cs: Create a invalidate method for menu item, to be
-	calling from set text, it make text changes to imadiate update
-	on screen. Fixes #80013. 
-	
-2006-11-28  Everaldo Canuto  <everaldo at simios.org>
-
-	* ToolBar.cs: Fixes and simplify toolbar button layout, it 
-	fixes bug #80070 and some other problem on toolbar buttons
-	layout.
-
-2006-11-28  Everaldo Canuto  <everaldo at simios.org>
-
-	* ThemeWin32Classic.cs: Paint toolbar toggle button background 
-	with dotted brush.	Fixes #79564
-	
-2006-11-28  Andreia Gaita  <avidigal at novell.com>
-
-	* Form.cs: Removed call to UpdateBounds on Form
-	constructor, it was causing a call to CreateHandle
-	before it was supposed to.
-	* PrintControllerWithStatusDialog: Applied patch
-	by Chris Toshok to hide controller when there are
-	no printers available.
-	PrintDialog.cs: initialize printer settings to 
-	null - correct DefaultValues test #5
-	* PrintPreviewControl.cs: Move PrintController
-	initialization to GeneratePreview
-	* PrintPreviewDialog.cs: 
-	- Remove Preview generation	from Document_set(). It is 
-	called on OnPaint
-	- Throw InvalidPrinterException on CreateHandle if
-	a Document is set but there are no printers or 
-	printer is not valid.
-	* ThemeWin32Classic: don't paint PrintPreviewControl
-	if there is nothing to paint	
-
-2006-11-28  Miguel de Icaza  <miguel at novell.com>
-
-	* Form.cs: Add another popular method.
-
-	* TabPage.cs: ditto.
-
-2006-11-28  Rolf Bjarne Kvinge  <RKvinge at novell.com>
-
-	* MenuItem.cs: Fixed a warning.
-	* InternalWindowManager: Fixed a warning.
-
-2006-11-28  Rolf Bjarne Kvinge  <RKvinge at novell.com>
-
-	* MenuItem.cs:
-	- When cloning a menu also clone MdiList and clone the 
-	  window menu items properly (as the forms and menuitems
-	  are kept in an internal hashtable, these need updating 
-	  as well)
-	- Rewrote the window menu code, menu items are added in the
-	  order the forms were added to their parent, and they are
-	  updated every time the window menu is shown (before the
-	  list was only generated once, in the current order of the
-	  forms, and would never be updated). A checkmark is shown
-	  next to the item corresponding to the active mdi child.
-
-2006-11-28  Rolf Bjarne Kvinge  <RKvinge at novell.com>
-
-	* XplatUIStructs.cs: 
-	- Added WM_NCMOUSEHOVER and WM_NCMOUSELEAVE.
-	
-	* XplatUIWin32.cs: 
-	- Added TME_NONCLIENT to TMEFlags.
-	- Handles WM_NCMOUSEMOVE in GetMessage to 
-	  generate WM_NCMOUSEHOVER and WM_NCMOUSELEAVE messages.
-
-	* MdiWindowManager:
-	- Now merges mdi child menu to parent menu when maximized.
-	- Recalculate NC areas of both mdi child and mdi parent. 
-	  Fixes #79757 (4).
-	  on window state and size changes.Fixes #79844 (3).
-	- Handle WM_NCCALCSIZE to properly calculate borders.
-
-	* Form.cs:
-	- Add/remove to the mdi containers list of mdi children 
-	  in the order they are added.
-	- Pass on WM_NCLBUTTONUP, WM_NCMOUSEMOVE and WM_NCMOUSELEAVE 
-	  to the maximized mdi child.
-	
-	* InternalWindowManager.cs:
-	- Only execute a click on the control buttons on the mouse up,
-	  not on the mouse down. Show the state of the button 
-	  (was only showing Normal state, never Pressed state). The
-	  pressed button now follows the mouse (if you click the Close 
-	  button and move the mouse over the Maximize button, the 
-	  Maximize button will be shown as pressed). Since Win32 does
-	  not generate WM_NCLBUTTONUP if you release the button outside
-	  of the nc area, we need to handle WM_NCMOUSELEAVE and treat
-	  it as a mouse up.
-	
-	* ThemeWin32Classic.cs:
-	- Draw a missing border around mdi child forms. Fixes #79844 (2).
-
-	* MdiClient.cs:
-	- Added a list of forms which contains the order the forms are
-	  added to the mdi parent.
-	- Handle WM_NCPAINT to properly draw a 3D border. Fixes #79844 (2).
-	- Handle WM_NCCALCSIZE to properly calculate the 3D border.
-	- If the active form changes set the scrollbars to the top
-	  of the Z order, otherwise the form could hide them.
-	- Scrollbars are now sized according to ClientSize, not 
-	  to Size, and they take into account the other scrollbar
-	  to determine maximum.
-	
-2006-11-28  Rolf Bjarne Kvinge <RKvinge at novell.com>
-	
-	* XplatUI.cs:
-	* XplatUIDriver.cs:
-	* XplatUIX11.cs:
-	* XplatUIWin32.cs:
-	* XplatUIOSX.cs:
-	- Added RequestAdditionalWM_NCMessages for windows to 
-	  opt in for WM_NCMOUSELEAVE and WM_NCMOUSEHOVER.
-	  Currently only implemented in XplatUIWin32.
-
-2006-11-27  Chris Toshok  <toshok at ximian.com>
-
-	* Hwnd.cs: only add the hwnd to the windows hash in
-	set_WholeWindow and set_ClientWindow if whole_window/client_window
-	are not IntPtr.Zero.  also, remove the unused SetObjectWindow.
-
-2006-11-27  Mike Kestner  <mkestner at novell.com>
-
-	* ComboBox.cs: remove redundant OnDropDown call.  It is called
-	from the ComboListBox.ShowWindow code. Fixes #79969.
-
-2006-11-27  Chris Toshok  <toshok at ximian.com>
-
-	* Hwnd.cs: remove the setters for ExposePending and
-	NCExposePending - noone uses them.
-
-2006-11-27  Jackson Harper  <jackson at ximian.com>
-
-	* TextControl.cs: new param for ReplaceSelection which determines
-	whether we select the new selection, or set the cursor to the end
-	of the new selection.
-	* TextBoxBase.cs: Use new param for ReplaceSelection.  When
-	pasting, select the new text.
-	* RichTextBox.cs: Use new param for ReplaceSelection.
-
-2006-11-27  Jackson Harper  <jackson at ximian.com>
-
-	* TextBoxBase.cs: Set the selection to the caret after the caret
-	is moved, otherwise they get out of sync.
-
-2006-11-26  Everaldo Canuto  <everaldo at simios.org>
-
-	* ToolBar.cs: Fixe size of ToolBar when AutoSize is false,
-	it fixes #80015
-
-2006-11-26  Everaldo Canuto  <everaldo at simios.org>
-
-	* ThemeWin32Classic.cs: 
-	- Fix toolbar drop down arrow position.
-	- Fix drop down appearance when ToolBar.Appearance is normal,
-	it fixes #80018.
-	
-2006-11-26  Gert Driesen  <drieseng at users.sourceforge.net>
-
-	* ProgressBar.cs: GetStyle fixes for 2.0 profile.
-	* Control.cs: Same.
-	* UpDownBase.cs: Same.
-	* ButtonBase.cs: Same.
-	* ScrollBar.cs: Same.
-	* TrackBar.cs: Same.
-	* PictureBox.cs: Same.
-	* UserControl.cs: Same.
-	* Label.cs: Same.
-	* ListControl.cs: Same.
-	* TextBoxBase.cs: Same.
-	* ListView.cs: Same.
-	* RichTextBox.cs: Same.
-	* TreeView.cs: Same.
-
-2006-11-25  Jordi Mas i Hernandez <jordimash at gmail.com>
-
-	* PrintDialog.cs:
-	- Text label for where 
-	- Text label comment was not shown
-
-2006-11-23  Everaldo Canuto  <everaldo at simios.org>
-
-	* ThemeWin32Classic.cs: Fix toolbar drop down arrow size.
-
-2006-11-23  Rolf Bjarne Kvinge  <RKvinge at novell.com> 
-
-	* InternalWindowManager.cs: 
-	- Handle WM_PARENTNOTIFY to activate the form
-	if any child control is clicked.
-	- The form is only sizable if not minimized.
-
-	* MdiWindowManager.cs:
-	- Save the IconicBounds if the form is moved.
-	- Rework SetWindowState, now the window bounds 
-	are stored only if the old window state is Normal.
-	
-	* MdiClient.cs:
-	- In SetWindowStates store the old window state if 
-	the window is maximized and restore window state if
-	the window looses focus.
-	- Don't handle any scrollbar value changes if 
-	initializing the scroll bars. Fixes #79771.
-	- Reworked ArrangeIconicWindows. Current algorithm
-	tests bounds agains all other minimized windows, if
-	any intersections create new bounds (going left to 
-	right, bottom to top) and then test again. When 
-	successful the bounds are saved and never computed
-	again. Fixes #79774.
-
-2006-11-23  Rolf Bjarne Kvinge  <RKvinge at novell.com> 
-
-	* InternalWindowManager.cs: Added HandleTitleBarUp.
-
-2006-11-23  Gert Driesen  <drieseng at users.sourceforge.net>
-
-	* NumericUpDown.cs: In .NET 1.1, user entered text is still
-        hexadecimal in ParseUserEdit.
-
-	
-2006-11-23  Rolf Bjarne Kvinge  <RKvinge at novell.com> 
-
-	* MdiWindowManager.cs: 
-	- Handle a click on the form's icon to show the 
-	system menu (when maximized). Fixes #79775.
-	- Change the existing click handler for the form's
-	icon when not maximized to show on MouseUp.
-	Fixes #79776.
-
-	* Form.cs: In OnResize only layout the mdi child's
-	parent if it actually has a parent. Might not if
-	the window is closing.
-
-
-2006-11-23  Gert Driesen  <drieseng at users.sourceforge.net>
-
-	* MdiClient.cs: Ignore active MDI client for text of parent, if
-	child has no text set.
-
-2006-11-23  Gert Driesen  <drieseng at users.sourceforge.net>
-
-	* ToolBar.cs: Fixed ToString to match MS.
-
-2006-11-22  Andreia Gaita  <avidigal at novell.com>
-
-	* NumericUpDown: 
-	- Fix DecimalPlaces, Hexadecimal and ThousandsSeparator to 
-	update inner values on set. Fixes #79966.
-	- Override OnLostFocus to update value on NET 2. Fixes #79950.
-	- Fix hexadecimal parsing.
-	
-	* UpDownBase: Override OnGotFocus and OnLostFocus to notify 
-	parent. Fixes #79957
-
-2006-11-22  Rolf Bjarne Kvinge  <RKvinge at novell.com>
-
-	* Control.cs: After calling SetWindowsPos in SetBoundsCore 
-	the actual size has to be queried, since if height /
-	width is negative Win32 changes it to 0. 
-	Fixes #79999 on Windows.
-	
-	* XplatUIX11.cs: Set height / width to 0 if negative
-	in SetWindowPos. Fixes #79999 on Linux.
-	
-2006-11-22  Everaldo Canuto  <everaldo at simios.org>
-
-	* ThemeWin32Classic.cs: Fix text redenring when button is
-	pressed.
-
-2006-11-22  Everaldo Canuto  <everaldo at simios.org>
-
-	* MenuAPI.cs: Fixes behavior when menu is opened by kerboard
-	and later navigate by mouse. Fixes #79528.
-
-2006-11-21  Everaldo Canuto  <everaldo at simios.org>
-
-	* ToolBar.cs: Set default value for TabStop to false in
-	constructor, it fixes remaining behavior of bug #79863.
-
-2006-11-21  Rolf Bjarne Kvinge  <RKvinge at novell.com>
-
-	* MdiWindowManager.cs:
-	* InternalWindowManager.cs:
-	- Moved a few methods specific to Mdi from 
-	InternalWindowManager to MdiWindowManager.
-	Fixes #79996.
-	
-2006-11-21  Chris Toshok  <toshok at ximian.com>
-
-	* XplatUIOSX.cs: stub out InvalidateNC.
-
-	* XplatUIWin32.cs: implement InvalidateNC using the call I found
-	at http://www.dotnet247.com/247reference/msgs/58/292037.aspx.
-
-	* XplatUIX11.cs: rename InvalidateWholeWindow to InvalidateNC.
-
-	* XplatUIDriver.cs: add InvalidateNC abstract method.
-
-	* XplatUI.cs: add InvalidateNC.
-
-2006-11-21  Everaldo Canuto  <everaldo at simios.org>
-
-	* ToolBar.cs: Invalidate complete button area when pressed status 
-	was changed.
-	* ToolButton.cs: Fix InvalidateBorder for DropDown buttons.
-	* ThemeWin32Classic.cs: Increase vertical and horizontal position 
-	by 1 when button is pressed.
-
-2006-11-20  Everaldo Canuto  <everaldo at simios.org>
-
-	* ToolButton.cs: Invalidate middle of DropDown button when
-	ToolBar theres DropDownArrows.
-	* ThemeWin32Classic.cs: Change position of DropDown arrow and
-	fix DropDown drawing operations.
-
-2006-11-20  Chris Toshok  <toshok at ximian.com>
-
-	* NativeWindow.cs: fix the formatting of functions ('{' on the
-	following line), and enable the thread exception dialog.
-
-	* Application.cs: remove the duplicate exception catching from
-	here.
-
-2006-11-20  Everaldo Canuto  <everaldo at simios.org>
-
-	* Toolbar.cs: Triggers button click event when click on icon
-	of dropdown ToolBarButton. Fixes #79912.
-	
-2006-11-20  Rolf Bjarne Kvinge  <RKvinge at novell.com>
-
-	* Theme.cs:
-	* ThemeWin32Classic.cs:
-	- Added a property WindowBorderFont to enable themeing
-	  of mdi child windows' Text.
-	  
-2006-11-20  Rolf Bjarne Kvinge  <RKvinge at novell.com>
-
-	* InternalWindowManager.cs:
-	* Form.cs:
-	* MdiClient.cs:
-	* MdiWindowManager.cs: 
-	- If mdi child is maximized, set mdi parent's
-	  text to "Parent - [Child]". Fixes #79770.
-	- If there is any maximized mdi child windows, only the active 
-	  window (and any new windows) is maximized, the rest are normal.
-	- On a WindowState change only save mdi child's window bounds 
-	  if the old window state was normal. Fixes #79774.
-	- The scroll bars are now calculated on hopefully all
-	  necessary events. Fixed #79771 / #79844->6 / #79906.
-	- MdiClient.SizeScrollBars() now takes into account docked 
-	  controls in the parent when calculating available space.
-	- InternalWindowManager now always repaints the entire title
-	  area. Fixes #79844->1/4/5.
-	- Added RequestNCRecalc on mdi child windowstate changes.
-	  Fixes #79772.
-
-2006-11-20  Mike Kestner  <mkestner at novell.com>
-
-	* ComboBox.cs: setup LargeChange on the scrollbar. Invoke FireMouseUp
-	in the MouseUp handler of the listbox and move the return handling
-	code to FireMouseUp to avoid scrolling on ups.  Fixes #79952.
-
-2006-11-20  Everaldo Canuto  <everaldo at simios.org>
-
-	* Toolbar.cs: Ignore right mouse clicks in toolbar. Fixes #79855. 
-
-2006-11-17  Alexander Olk  <alex.olk at googlemail.com>
-
-	* MimeIcon.cs: Seems that DllImports that were fine in 1.2 are not
-	  working in 1.2.x anymore. So, updated.
-
-2006-11-19  Gert Driesen  <drieseng at users.sourceforge.net>
-
-	* NumericUpDown.cs: Use NegativeSign, NumberDecimalSeparator and
-	NumberGroupSeparator of current culture instead of assuming en-US.
-	Fixed bug #79967.
-
-2006-11-17  Mike Kestner  <mkestner at novell.com>
-
-	* Control.cs: Add the concept of implicit bounds setting so that
-	dock/undock round trips preserve explicitly set size/locations.
-	Fixes #79313.
-
-2006-11-17  Alexander Olk  <alex.olk at googlemail.com>
-
-	* FileDialog.cs: Trim all filters, otherwise DirInfo.GetFiles
-	  can't handle those filters. (Fixes bug #79961)
-
-2006-11-17  Chris Toshok  <toshok at ximian.com>
-
-	[ fixes the exit/crashes associated with #79835.  it's clearly
-	suboptimal though, we need to figure out a better way to solve
-	this. ]
-	
-	* PrintPreviewControl.cs: deal with the new invalid printer
-	exceptions.
-
-	* PageSetupDialog.cs: if the printer is invalid, pop up a dialog
-	and return false (so CommonDialog.ShowDialog doesn't actually show
-	the form.)
-
-	* PrintDialog.cs: enable/disable the Ok button depending on
-	whether or not the printer is valid.
-
-	* CommonDialog.cs (ShowDialog): only actually show the form if
-	RunDialog returns true.
-
-2006-11-17  Jackson Harper  <jackson at ximian.com>
-
-	* TextControl.cs: When soft splitting a line, mark it as a soft
-	split line. Also carry over the current line break to the next
-	line.
-
-2006-11-17  Chris Toshok  <toshok at ximian.com>
-
-	* XplatUIX11.cs: when scrolling a window with an invalid area, we
-	only want to shift the part of the invalid area that overlaps the
-	area we're scrolling.  we also don't want to clear the invalid
-	area unless the invalid area was entirely contained within the
-	scrolling area.
-
-2006-11-16  Chris Toshok  <toshok at ximian.com>
-
-	* XplatUIX11.cs: remove the handling of the TimerEvent stuff, and
-	also make sure to free the memory returned by XGetWindowProperty
-	in GetText().
-
-	* X11Structs.cs: remove the TimerEvent stuff, it's unused.
-
-2006-11-16  Chris Toshok  <toshok at ximian.com>
-
-	* XplatUI.cs: add a new super secret way to get at the totally
-	unsupported X11 backend.
-
-2006-11-16  Gert Driesen  <drieseng at users.sourceforge.net>
-
-	* NumericUpDown.cs: Allow lowercase letters when in hex-mode.
-
-2006-11-16  Jackson Harper  <jackson at ximian.com>
-
-	* TreeView.cs: Allow more explicit setting of top node position
-	for scrollbars. Slower algo, but more accurate.
-	- CollapseAll should maintain the current top node.
-	* TextBoxBase.cs: When positioning the caret, use the line, pos
-	method, since the x, y method does not grab the correct tag, and
-	the caret height never gets set correctly. (Maybe I should just do
-	away with the caret having its own height, and always use the
-	carets current tag for height).
-
-2006-11-16  Jonathan Pobst  <monkey at jpobst.com
-
-	[Fixes 79778, 79923]
-
-	* XplatUIWin32.cs: Don't allow a parent to be set to IntPtr.Zero.
-	Parent to the FosterParent instead.
-
-2006-11-16  Jackson Harper  <jackson at ximian.com>
-
-	* TreeView.cs: Need to recalc the topnode when we expand or
-	collapse. The scrolling methods can't handle this on their own,
-	since they use differences between the last scroll position, and
-	those difference get completely messed up since we are expanding
-	nodes.  This problem should probably be fixed in the scrolling
-	methods, so they can figure out exactly where they are, but this
-	will slow things down a little.
-	* ThemeWin32Classic.cs: Special case for groupboxes with empty
-	strings, makes nunit-gui look a lot nicer.
-
-2006-11-16  Chris Toshok  <toshok at ximian.com>
-
-	* XplatUIX11.cs: nasty, nasty, nasty changes required because of
-	the broken multithreaded event handling we have in here.  File
-	this entry under "Why we should move to the new X11 backend".
-
-	Any thread can make it into UpdateMessageQueue, which gets events
-	from the X socket - some of which could belong to hwnds being
-	managed by a different thread.  We can also have multiple threads
-	in UpdateMessageQueue at the same time, with each one reading from
-	the X socket.  This leads to many problems, with the following
-	solutions:
-
-	We can't use hwnd.Queue.Enqueue anywhere in here and must use
-	EnqueueLocked.
-
-	The MotionNotify compression we do can't work across threads
-	(without locking the entire queue, perhaps) since we call
-	hwnd.Queue.Peek, so we just punt and don't compress motion events
-	unless the owning thread is the one which got the X event.
-
-	ConfigureNotify is another fun one, since it modifies the hwnd's
-	bounds and then enqueues the event.  We add a lock to Hwnd which
-	is held when setting configure_pending to true (and enqueuing the
-	event).
-
-	There is a race wrt the wake socket.  we need to make sure that
-	only 1 thread is waiting on that socket, or else a thread could
-	sleep waiting for data that never comes.  It's difficult (but not
-	impossible) to make happen, because it seems to require something
-	like the following:
-
-	    1. Thread 1 polls on wake_receive
-	
-	    2. poll returns saying there's data to be read on
-	       wake_receive.
-	
-	    3. Thread 2 polls on wake_receive and immediately returns
-	       saying there's data to be read.
-
-	    4. Thread 2 reads the wakeup byte from wake_receive
-
-	    5. Thread 1 attempts to read the wakeup byte from
-	       wake_receive.
-
-	    6. Thread 2 exits (due to a form closing, perhaps).
-
-	    7. Thread 1 blocks forever.
-	
-	Fun, eh?
-
-	Fixing the Expose handling isn't done yet, and the races inherent
-	in that piece of code are responsible for the drawing mistakes you
-	see when generating expose events in a MT app (like NPlot).  This
-	one is the likely to be the hardest to bandaid, and it doesn't
-	appear to cause anything but drawing problems.  The other issues
-	caused apps to exit or hang.
-
-	* XEventQueue.cs: output some spew when Dequeue/Enqueue/Peek are
-	called from a different thread than the one that should be calling
-	these functions.
-
-	* Hwnd.cs: add some locks to be used by the XplatUIX11 code.
-
-2006-11-15  Chris Toshok  <toshok at ximian.com>
-
-	* Application.cs: null out the context's MainForm when we exit
-	RunLoop.  Fixes a newly checked in unit test as well as the last
-	ODE from bug #79933.
-
-2006-11-15  Chris Toshok  <toshok at ximian.com>
-
-	* Form.cs (set_Owner): allow a null value so we can clear the
-	form's owner.
-	(Dispose): set all our owned_form's Owner properties to null, and
-	clear the owned_forms collection.
-	(WM_CLOSE): clean up this a little bit.. still not right though.
-
-	* ApplicationContext.cs: OnMainFormClosed should only call
-	ExitThreadCore if the main form isn't recreating.  Fixes unit
-	test.
-
-2006-11-15  Jonathan Pobst  <monkey at jpobst.com>
-
-	[Fixes 78346]
-
-	* ComboBox.cs: Set the Hwnd.no_activate flag for the ComboListBox.
-
-2006-11-15  Jonathan Pobst  <monkey at jpobst.com>
-
-	[Fixes 79433]
-
-	* Hwnd.cs: Add a flag to show a window, but not activate it, to 
-	keep popup window types from stealing focus from the main form
-	on Windows.
-
-	* XPlatUIWin32.cs: Use SW_SHOWNOACTIVATE if above field is true.
-
-	* MenuAPI.cs: Set above flag to true.
-
-2006-11-15  Chris Toshok  <toshok at ximian.com>
-
-	* XplatUIX11.cs: mimic win32 behavior on BUTTONUP events, where
-	the button being released is not in wParam.
-
-2006-11-15  Jonathan Pobst  <monkey at jpobst.com>
-
-	* Form.cs: Add the released button to MouseEventArgs.Button
-	for the OnMouseUp call to the MenuTracker.  Fixes menu clicking
-	on Win32.
-
-2006-11-15  Chris Toshok  <toshok at ximian.com>
-
-	* XplatUIX11.cs: add (untested) a _NET_WM_NAME implementation of
-	GetText().  untested because it's unused in our implementation.
-	Control.Text always caches the text, even if
-	ControlStyles.CacheText is not set.
-
-	fixes bug #79939.
-
-2006-11-15  Chris Toshok  <toshok at ximian.com>
-
-	[ fixes #79933 ]
-	
-	* Form.cs: in Close() don't do anything after we send the WM_CLOSE
-	message.  no hiding, no disposing.
-
-	in the WM_CLOSE handler, hide the form if it's modal.
-
-2006-11-15  Chris Toshok  <toshok at ximian.com>
-
-	* XplatUIX11.cs: use AddExpose instead of sending a message.
-	fixes textbox border drawing.
-
-2006-11-15  Chris Toshok  <toshok at ximian.com>
-
-	* PropertyGridView.cs: keep from crashing on mouse move/down when
-	the property grid is empty.
-
-2006-11-14  Jackson Harper  <jackson at ximian.com>
-
-	* TextControl.cs: Make PageUp and PageDown more like the MS
-	versions.
-	* TextBoxBase.cs: When we set the text property position the
-	cursor at the beginning of the document.
-
-2006-11-14  Rolf Bjarne Kvinge  <RKvinge at novell.com>
-
-	* Form.cs: if a mdi child's WindowState has changed
-	before it's creation, it would display wrong control
-	buttons.
-	
-2006-11-14  Alexander Olk  <alex.olk at googlemail.com>
-
-	* TreeView.cs: De-uglify TreeView checkbox checkmarks.
-	  (Fixes bug #79927)
-
-2006-11-14  Rolf Bjarne Kvinge <RKvinge at novell.com> 
-
-	* XplatUIX11.cs: send a WM_NCPAINT on WM_NCCALCSIZE so that 
-	the window gets to paint its borders even if the window is
-	getting	smaller.
-	
-	* Form.cs: on a WM_NCPAINT invalidate the entire menu, 
-	otherwise the old control buttons would still be painted 
-	if the window gets bigger.
-	
-	* PaintEventArgs.cs: add an internal method so that the clip 
-	rectangle can be changed.
-	
-2006-11-13  Chris Toshok  <toshok at ximian.com>
-
-	[ fixes bug #79745 ]
-	
-	* NotifyIcon.cs: lots of cleanup.
-
-	* X11Structs.cs: add an enum for XEMBED messages.
-
-	* XplatUIX11.cs: reindent one of the giant switch statements, it
-	was taking up an additional tab stop, and this file is already way
-	too wide for my laptop's screen.
-
-	Also, add handling for the XEmbed EMBEDDED_NOTIFY message.  When
-	we get it, resize the hwnd to the WMNormalHints max_width/height.
-
-2006-11-13  Jackson Harper  <jackson at ximian.com>
-
-	* TextBoxBase.cs: Compute the value changes for the mouse wheel
-	teh simple way.
-
-2006-11-13  Chris Toshok  <toshok at ximian.com>
-
-	* XplatUIX11.cs, XplatUIStructs.cs: kind of a gross fix for
-	#79898.  force a reference to the Region to stick around so the
-	unmanaged object isn't collected (rendering our handle in the MSG
-	stale).
-
-2006-11-13  Chris Toshok  <toshok at ximian.com>
-
-	* XplatUIX11.cs: fix #79917 for window managers which support
-
-	using XStoreName on the raw utf8, and we need to convert to
-	COMPOUND_TEXT if it's non-latin1.
-
-2006-11-13  Chris Toshok  <toshok at ximian.com>
-
-	* Form.cs (set_DialogResult): we need to set closing to false if
-	we're setting our result to None.  fixes bug #79908.
-
-2006-11-13  Jackson Harper  <jackson at ximian.com>
-
-	* TextControl.cs: When formatting text, compute the adjusted tag
-	lengths correctly, using FindTag for the end tag instead of trying
-	to figure it out outselves.
-	* TreeNode.cs: Use ActualItemHeight, which is the actual height of
-	the item, ItemHeight doesn't work, because trees with large
-	imagelists use those for their height
-	* TreeView.cs: ActualItemHeight factors in the image height
-	- compute left edge of checkboxes correctly
-	- when expanding/collapsing move the bottom down one pixel, so we
-	aren't moving part of the node
-
-2006-11-13  Rolf Bjarne Kvinge  <RKvinge at novell.com>
-
-	* XplatUIX11.cs: The PaintEventArgs is also added to the drawing
-	stack in PaintEventStart so that it won't get disposed by the gc
-	before reaching PaintEventEnd.
-
-2006-11-13  Jackson Harper  <jackson at ximian.com>
-
-	* TextBoxBase.cs: Don't select the word if we are on a line with
-	no text.
-	- We don't need to position the caret on mouse up, since the mouse
-	move handler should be doing this
-	- When double clicking a blank line, the caret is advanced to the
-	next line.
-
-2006-11-13  Gert Driesen  <drieseng at users.sourceforge.net>
-
-	* TreeNodeCollection.cs: Avoid duplicating indexer code.
-
-2006-11-12  Gert Driesen  <drieseng at users.sourceforge.net>
-
-	* ColorDialog.cs: Reset size of dialog between calls to ShowDialog.
-	Fixes part of bug #79910.
-
-2006-11-11  Alexander Olk  <alex.olk at googlemail.com>
-
-	* ColorDialog.cs: Fix a NRE when adding a color to custom colors
-	  (bug #79903). Some minor string updates to match ms.
-
-2006-11-10  Alexander Olk  <alex.olk at googlemail.com>
-
-	* FileDialog.cs: Don't add an extension if the filename
-	  already ends with that extension.
-
-2006-11-10  Jackson Harper  <jackson at ximian.com>
-
-	* TreeView.cs: Use the currently highlighted node for the
-	BeforeSelect event.
-	* TextBoxBase.cs: There is no need to expand selection on
-	MouseMove.
-	- CanUndo means 'is there any undo operations', not 'is undo
-	allowed on this textcontrol. Fixed ClearUndo unit test.
-
-2006-11-10  Andreia Gaita  <shana.ufie at gmail.com>
-
-	* Button.cs: only perform click when button is Selectable (so as 
-	not to activate default buttons when they're disabled)
-	
-	* Control.cs: Rewrite of the SelectNextControl and related 
-	methods. HandleClick now selects next control if the current one
-	is being disabled.
-	
-	* Form.cs: OnActivated selects next active control only if Load 
-	has already occurred. If Load hasn't run, there's no point in 
-	selecting here, Load might change the state of controls.
-	
-	* FocusTest.cs: Tests marked as working again for these fixes
-
-2006-11-10  Chris Toshok  <toshok at ximian.com>
-
-	* XplatUIX11.cs: a couple of fixes.
-
-	- use XInternAtoms with almost all the atoms we need to register,
-	instead of many, many calls to XInternAtom.  should help a bit on
-	startup time, at the expense of making the code look a little
-	worse.
-
-	- fall back to setting TransientFor on TOOLWINDOW's if their hwnd
-	isn't reparented (which seems to be a clue that we're running fon
-	compiz) and they have an Owner form.  This fixes the tool windows
-	in paint.net when running under compiz.
-
-	- when setting the opacity of a window, support both the case
-	where the window has been reparented and also when it hasn't been.
-	Since compiz/beryl doesn't seem to reparent windows, and these are
-	the only window managers which support translucency, I'm not sure
-	why we need the hwnd.reparented case at all.. but leave it in.
-	now we get translucent windows in paint.net under compiz/beryl.
-
-2006-11-10  Alexander Olk  <alex.olk at googlemail.com>
-
-	* FileDialog.cs: Always return the value for FilterIndex that
-	  was set. Internally convert it to values that make sense.
-
-2006-11-10  Everaldo Canuto  <everaldo at simios.org>
-	
-	* ThemeWin32Classic.cs: Fix drowp down arrow borders.
-
-2006-11-10  Everaldo Canuto  <everaldo at simios.org>
-
-	* Toolbar.cs: Change default value of DropDownArrows to true, the 
-	signature still using false to make it compatible with MS but the 
-	initial value is true. Fixes #79855.
-
-2006-11-10  Alexander Olk  <alex.olk at googlemail.com>
-
-	* MimeIcon.cs: Don't throw an exception on windows. Mime stuff is
-	  only available on Linux.
-
-2006-11-09  Everaldo Canuto  <everaldo at simios.org>
-
-	* Toolbar.cs, ToolBarButton.cs: Fix wrong separator size and
-	reduce number of calls to redraw method during toolbar creation.
-
-2006-11-09  Mike Kestner  <mkestner at novell.com>
-
-	* ListView.cs : raise SelectedIndexChanged when an item is selected
-	programmatically via the Item.Selected property.  Gert's nice 
-	ListViewSelectedIndexChanged test fixture now runs clean.
-
-2006-11-09  Mike Kestner  <mkestner at novell.com>
-
-	* ListView.cs : raise SelectedIndexChanged when a selected item is
-	removed from the item collection using Remove or RemoveAt.
-
-2006-11-09  Mike Kestner  <mkestner at novell.com>
-
-	* ListView.cs : raise SelectedIndexChanged once per selected item
-	for compat with MS.  Fixes #79849+.
-
-2006-11-09  Chris Toshok  <toshok at ximian.com>
-
-	* TabControl.cs: initialize row_count to 0, and set it to 1 when
-	we need to (if we have any tab pages).  Fixes unit test.
-
-2006-11-09  Chris Toshok  <toshok at ximian.com>
-
-	* Label.cs (CalcPreferredWidth): if Text == "", our preferred
-	width is 0, not 3.  Fixes a unit test.
-
-2006-11-09  Mike Kestner  <mkestner at novell.com>
-
-	* ListView.cs : use Implicit scrollbars so that focus isn't 
-	stolen from the listview when they are clicked. Fixes #79850.
-
-2006-11-09  Chris Toshok  <toshok at ximian.com>
-
-	* PropertyGridView.cs (OnPaint): only call DrawGridItems if we
-	have a root item.  Fixes #79879.
-
-2006-11-09  Alexander Olk  <alex.olk at googlemail.com>
-
-	* FileDialog.cs:
-	  - Fix ToString ()
-	  - An ArgumentException is now thrown if a wrong filter
-	    is applied (matches ms). The previous filter doesn't change
-	    anymore if an exception is thrown.
-	  - Changing the FileName property also affects FileNames
-	* ColorDialog.cs: The length of the CustomColors array is always
-	  16. It doesn't matter if we use a smaller array or null to update
-	  or change the custom colors property.
-	* FolderBrowserDialog.cs: Throw an InvalidEnumArgumentException if
-	  for RootFolder if we get a undefined value.
-
-2006-11-09  Rolf Bjarne Kvinge  <RKvinge at novell.com>
-
-	* StatusBarPanel.cs: 
-	- Width is set to MinWidth if Width is smaller than
-	MinWidth. Fixes #79842.
-	- MinWidth now always overrides Width (MSDN says MinWidth
-	is set to Width when AutoSize = None, but they do not 
-	behave like that).
-	- Style has now the the correct default value.
-	
-2006-11-09  Rolf Bjarne Kvinge  <RKvinge at novell.com>
- 
- 	* TrackBar.cs: 
- 	- The control is completely invalidated on 
- 	Got/LostFocus to draw the focus rectangle correctly.
- 	- When AutoSize then height is always 45 (width for 
- 	vertical controls).
- 	
- 	* ThemeWin32Classic.cs: The TrackBar thumb is now centered
- 	on the mouse when moved and it doesn't move when grabbed
- 	until the mouse moves as well. Also fixed some wrong 
- 	calculations when clicking on the thumb (control thought
- 	click was outside of thumb and didn't grab it).
- 	Fixes some of the issues in #79718.
-
-2006-11-08  Everaldo Canuto  <everaldo at simios.org>
-
-	* Toolbar.cs: Prevent disabled button to highlight. Fixes #79868.
-
-2006-11-08  Chris Toshok  <toshok at ximian.com>
-
-	* PropertyGridView.cs: only call ToggleValue if the item is not
-	readonly.
-
-2006-11-08  Jackson Harper  <jackson at ximian.com>
-
-	* TextBoxBase.cs: The RichTextBox and textbox have very different
-	word selection methods.  Implement the textbox's simple word
-	selection here, and let the RichTextBox override and provide it's
-	own.
-	- Don't do extra selection on mouseup
-	* RichTextBox.cs: Use the documents word selection algorithm, I
-	think ideally, this function will be pulled into the
-	RichTextBox.cs code someday.
-
-2006-11-08  Chris Toshok  <toshok at ximian.com>
-
-	* RootGridEntry.cs: new class to represent GridItemType.Root.
-
-	* CategoryGridEntry.cs: reformat, and add boilerplate.
-	
-	* GridEntry.cs: remove the UIParent stuff - turns out .Parent
-	returns the UI parent anyway, and we need special handling to
-	implement the GetTarget method in the face of it.  Also, implement
-	Select().
-
-	* PropertyGrid.cs, PropertyGridView.cs: a number of fixes.  create
-	a root grid item, and use that instead of PropertyGrid.grid_items.
-	Also, make use of TypeConverters (and add limitted support for
-	ICustomTypeDescriptors) when initially populating the grid.
-	Arrays now show up more or less properly.
-
-2006-11-08  Chris Toshok  <toshok at ximian.com>
-
-	* Application.cs: set the modal dialog to non modal after we close
-	it.  Fixes bug #79866.
-
-2006-11-08  Jackson Harper  <jackson at ximian.com>
-
-	* TextControl.cs: When combining lines carry over the line end
-	style from the end line.
-	- Invalidate the selected area when setting it, if it is visible.
-	* TextBoxBase.cs: Only rich text box can do full line selects.
-	- Make sure to set the cursor position when there is a click,
-	otherwise two clicks in separate areas could cause a large chunk
-	to be selected.
-
-2006-11-07  Everaldo Canuto  <everaldo at simios.org>
-
-	* Toolbar.cs: Release flat button borders when Toolbar lost focus. 
-	Fixes #79863.
-
-2006-11-07  Everaldo Canuto  <everaldo at simios.org>
-
-	* Toolbar.cs: Prevent toolbar to open more than one tooltip at same
-	time. Remove tooltips when ToolButton click events.  Fixes #79856.
-
-2006-11-07  Everaldo Canuto  <everaldo at simios.org>
-
-	* MenuAPI.cs: Ignore right click for menu actions and fixes
-	menu border when clicked.  Fixes #79846.
-
-2006-11-07  Everaldo Canuto  <everaldo at simios.org>
-
-	* XplatUIX11.cs, XplatUIX11.cs: Fix MouseRelease to only release
-	MouseState after create wParam for message, this fixes mouse button 
-	equal none in mouse up events.
-	
-2006-11-07  Andreia Gaita  <shana.ufie at gmail.com>
-
-	* Control.cs : Focus() now calls Select to set the Container's
-	Active Control and to give it focus. To avoid infinite recursion
-	(because ActiveControl also calls Focus at one point), a check 
-	is made in Focus with the help of a new internal variable
-	is_focusing.
-
-2006-11-07  Mike Kestner  <mkestner at novell.com>
-
-	* ListView.cs : raise OnSelectedIndexChanged in CreateHandle
-	if there's a selection.  Fixes #79849.
-
-2006-11-07  Gert Driesen  <drieseng at users.sourceforge.net>
-
-	* PropertyGrid.cs: Avoid fixed height of help description label.
-	Fixes part of bug #79829.
-
-2006-11-07  Chris Toshok  <toshok at ximian.com>
-
-	* XplatUIX11.cs: fix #79790 again, by using the
-	_NET_WM_STATE_SKIP_TASKBAR atom to implement Form.ShowInTaskbar.
-
-2006-11-07  Everaldo Canuto  <everaldo at simios.org>
-
-	* ToolBar.cs: Fix left click checking.
-
-2006-11-07  Chris Toshok  <toshok at ximian.com>
-
-	* ProgressBar.cs: fix a typo in ToString().  fixes a unit test.
-
-2006-11-07  Chris Toshok  <toshok at ximian.com>
-
-	* RelatedPropertyManager.cs: set property_name in our ctor.  fixes
-	PropertyManager unit tests.
-
-	* PropertyManager.cs: make property_name internal.
-
-2006-11-07  Chris Toshok  <toshok at ximian.com>
-
-	* ButtonBase.cs: initialize base.ime_mode to ImeMode.Disable to
-	pass a unit test.  Also, don't set image_index to anything in
-	response to setting the ImageList property.
-
-2006-11-07  Everaldo Canuto  <everaldo at simios.org>
-
-	* ToolBar.cs: Ignore click events when mouse button is not a
-	left button, only accepts other button for dropdown menus.  
-	Fixes #79854.
-
-2006-11-07  Chris Toshok  <toshok at ximian.com>
-
-	* DataGrid.cs: make the back and parent row buttons a little less
-	ugly.
-
-2006-11-07  Jackson Harper  <jackson at ximian.com>
-
-	* TextBoxBase.cs: When converting to Text don't put line breaks in
-	for soft line breaks.
-	* TextControl.cs: There is an initial "fake" line in the document,
-	this is now a soft break line, so that an extra line feed doesn't
-	get added to the end of documents.
-
-2006-11-07  Chris Toshok  <toshok at ximian.com>
-
-	[ fix bug #79778 ]
-	
-	* CurrencyManager.cs: if the list is readonly, don't bother
-	checking if IBindingList.AllowNew is true.
-
-	* ThemeWin32Classic.cs (DataGridPaintParentRow): make this work
-	for non-DataRowView datasources..  or rather, make it not crash.
-	(DataGridPaintRelationRow): make sure we limit the row painting to
-	the area not covered by the row header, and make our cell width at
-	least large enough to cover the relation area.  This allows grids
-	that have relations but no rows to render correctly.
-	(DataGridPaintRowContents): same type of changes here.
-	(SetDataSource): move back to always calling
-	CalcAreasAndInvalidate.  this fixes a crash/drawing problem when
-	navigating back through relations.
-	(HitTest): handle the case where we have no cells but have
-	relations.  Right now we generate a hit in cell 0 of whatever the
-	row is, not sure if this is strictly correct, but it works for our
-	purposes.
-	
-	* DataGrid.cs (EndEdit, CancelEdit): if we have no columns, don't
-	bother doing anything.
-
-2006-11-07  Jonathan Pobst  <monkey at jpobst.com>
-
-	* StatusStrip.cs, ToolStripStatusLabel.cs: By request, an
-	early version of StatusStrip.  Not responsible for eaten
-	application or firstborn children.
-
-2006-11-06  Chris Toshok  <toshok at ximian.com>
-
-	* TabControl.cs: in OnGotFocusInternal/OnLostFocusInternal don't
-	call GetTabRect with a -1 index.  Fixes #79847.
-
-2006-11-06  Jackson Harper  <jackson at ximian.com>
-
-	* TreeNodeCollection.cs: Update scrollbars after clearing.
-
-2006-11-06  Chris Toshok  <toshok at ximian.com>
-
-	* NumericUpDown.cs: fix the ToString method for some unit test
-	love.
-
-2006-11-06  Chris Toshok  <toshok at ximian.com>
-
-	* PropertyGrid.cs:
-	- set the initial SelectedGridItem if we can.
-
-	- Exclude non-mergable properties only if we're merging > 1
-	object.  Merging 1 object isn't really merging, obviously.
-
-	- Handle PropertySort.NoSort just like Alphabetical, which is
-	wrong of course, but at least gets things on the screen.
-	
-	* PropertyGridView.cs:
-	- Add method "FindFirstItem" which finds the first property grid
-	item, so we can select it by default.
-
-	- make use of GridEntry.CanResetValue.
-
-	- Don't call RedrawBelowItemOnExpansion here anymore, the
-	individual GridEntry's will do that.
-
-	- Remove the ITypeDescriptorContextImpl internal class.
-	
-	* GridEntry.cs:
-	- this class needs to implement ITypeDescriptorContext, as it's
-	what MS's PropertyDescriptorGridEntry does, which means we can
-	remove the ITypeDescriptorContextImpl internal class from
-	PropertyGrid.cs.  This fixes the crashing portion of bug #79829.
-
-	- keep a reference to our PropertyGridView, and move the call to
-	RedrawBelowItemOnExpansion here from PGV.  This means
-	programmaticly setting Expanded actually does something visible.
-
-	- add a CanResetValue() function which takes into account our
-	possibly multiple "selected_objects" in the merged case.  Shifting
-	PropertyGridView to use this method fixes another unreported
-	crasher found running the test for #79829.
-
-	- when Top or Bounds is updated, make sure the PropertyGridTextBox
-	is updated to reflect this.
-
-	* CategoryGridEntry.cs: the ctor takes the PGV now.
-	
-2006-11-06  Jackson Harper  <jackson at ximian.com>
-
-	* TextControl.cs: These are 1 based.
-	* TextBoxBase.cs: When setting the selected text, don't change the
-	selected text tags, this is done by ReplaceText, just position the
-	cursor at the end of the new text.
-
-2006-11-06  Alexander Olk  <alex.olk at googlemail.com>
-
-	* ListView.cs: Allow label edit only when, when LabelEdit is
-	  set to true.
-
-2006-11-06  Jackson Harper  <jackson at ximian.com>
-
-	* TextControl.cs: If a suitable wrapping position isn't found,
-	just wrap right in the middle of a word.
-
-2006-11-06  Alexander Olk  <alex.olk at googlemail.com>
-
-	* ListView.cs, ListViewItem.cs: Implement LabelEdit. Fixes
-	  bug #79820.
-
-2006-11-06  Jackson Harper  <jackson at ximian.com>
-
-	* TreeView.cs: Can't use the VisibleCount property when setting
-	scrollbar heights, because this doesn't take into account whether
-	or not the horz scrollbar just came visible.
-
-2006-11-05  Everaldo Canuto  <everaldo at simios.org>
-
-	* MenuAPI.cs: Deactivate menu on mouse up when menus it is already
-	activated.  Fixes #79369, #79832.
-
-2006-11-05  Alexander Olk  <alex.olk at googlemail.com>
-
-	* FileDialog.cs: *sigh* Because of recent runtime changes (r67043) I
-	  had to remove support for links that point to a directory. FileInfo
-	  returns no usefull information (means, the directory they point to)
-	  for such links. Replaced some empty string ("") with String.Empty.
-
-2006-11-04  Gert Driesen  <drieseng at users.sourceforge.net>
-
-	* TreeNodeCollection.cs: To match MS, in 1.0 profile throw 
-	NullReferenceException when attempting to remove node that is not in
-	collection. Throw NullReferenceException when null is passed to 
-	Remove.	Allow first element of the collection to be removed. Fixes
-	bug #79831.  In GetEnumerator ().Current return null if positioned 
-	before the first element of the collection. In GetEnumerator ().Reset,
-	position before first element of the collection.
-
-2006-11-04  Gert Driesen  <drieseng at users.sourceforge.net>
-
-	* PropertyGrid.cs: To match MS, remove default title and description
-	for panel. Fixed tooltips for Categorized and Alphabetic toolbar
-	buttons.
-
-2006-11-04  Chris Toshok  <toshok at ximian.com>
-
-	* Theme.cs: add a Clamp method, just for kicks.
-
-	* ThemeWin32Classic.cs: clamp all color components to [0..255].
-
-2006-11-04  Chris Toshok  <toshok at ximian.com>
-
-	* Form.cs: if the form isn't visible, Close() does nothing.
-
-2006-11-03  Chris Toshok  <toshok at ximian.com>
-
-	* Form.cs (Close): if the form is modal, don't Dispose of it, only
-	Hide it.
-	(WndProc): don't Dispose after handling the WM_CLOSE message.
-
-	* Application.cs (RunLoop): toplevels is a list of Forms, so treat
-	them as such, instead of using casts from Control to Form.  Also,
-	don't Dispose of the modal dialog when we fall out of the loop -
-	Close() it instead.
-
-	fixes bug #79813.
-
-2006-11-03  Chris Toshok  <toshok at ximian.com>
-
-	* Control.cs (Dispose): only go through the dispose thing if we're
-	@disposing, and we haven't already been disposed.  Fixes bug
-	#79814.
-
-	* Form.cs: no reason to call "base.Dispose()" here instead of
-	"Dispose()".
-
-2006-11-03  Mike Kestner  <mkestner at novell.com>
-
-	* ComboBox.cs : use ToString instead of casts in AddItem for
-	sorting functionality.  Fixes #79812.
-
-2006-11-03  Chris Toshok  <toshok at ximian.com>
-
-	* Application.cs: pave the way for actually using the thread
-	exception dialog.  it's ifdefed out at the moment.
-
-2006-11-03  Chris Toshok  <toshok at ximian.com>
-
-	* ThreadExceptionDialog.cs: until we get a better layout, actually
-	hide the details textbox and label when we shouldn't see them.
-
-2006-11-03  Jackson Harper  <jackson at ximian.com>
-
-	* TextBoxBase.cs: Don't bail from the scrollbar calcs for non
-	multiline textboxes anymore.  This method also determines the
-	width/height of a textboxes canvas area.
-	- Sorta a revert of the last patch.  For multiline just position
-	the controls, then bail.  This way the scrollbar width won't be
-	altered.
-
-2006-11-03  Everaldo Canuto  <everaldo at simios.org>
-
-	* ThemeWin32Classic.cs: Dont paint inner lines of 3D border when
-	it dont need.  Fixes #79537.
-
-2006-11-02  Jackson Harper  <jackson at ximian.com>
-
-	* X11Dnd.cs: We always allow copy, since XDND implies Copy.  Also
-	send the status after firing the DndOver event.
-
-2006-11-02  Rolf Bjarne Kvinge  <RKvinge at novell.com>
-
-	* TrackBar.cs: Now orientation only switches height / width if
-	the control's handle is created (Win32 does it like this). Also 
-	fixed a typo in ToString() for a test to pass, changed the 
-	exception thrown in set_LargeChange and set_SmallChange to 
-	match Win32 behaviour, and added TrackBar tests to the unit 
-	tests.
-
-2006-11-02  Chris Toshok  <toshok at ximian.com>
-
-	* XplatUIX11.cs: the atom we want is _NET_WM_STATE_SKIP_TASKBAR,
-	not _NET_WM_STATE_NO_TASKBAR.
-
-2006-11-02  Jackson Harper  <jackson at ximian.com>
-
-	* TextControl.cs: Increment count by one, since in the update view
-	count - 1 is used.
-
-2006-11-02  Jackson Harper  <jackson at ximian.com>
-
-	* TextBoxBase.cs: Use client rectangle not bounds for checking if
-	the mouse is in the client rectangle (duh).
-
-2006-11-02  Rolf Bjarne Kvinge  <RKvinge at novell.com>
-	
-	* TrackBar.cs: Fixed trackbar jumping around when clicking
-	on it - the trackbar was not detecting correctly at which
-	side of the thumb the click was done. (fixes #79718)
-
-2006-11-02  Everaldo Canuto  <everaldo at simios.org>
-
-	* ListBox.cs: scroll visible area when change SelectedIndex to
-	a non visible area.  Fixes #79481.
-
-2006-11-01  Jackson Harper  <jackson at ximian.com>
-
-	* TextControl.cs: When replacing the selection move the selection
-	start/end/anchor to the end of the new text.
-
-2006-11-01  Jackson Harper  <jackson at ximian.com>
-
-	* XplatUIWin32.cs: When setting the parent change the controls
-	visibility to it's visibility flag, not to it's old parents
-	visibility (.Visible walks the parent chain).
-
-2006-11-01  Chris Toshok  <toshok at ximian.com>
-
-	* XplatUIX11.cs: revert the #79790 fix, as the simple.
-	XSetTransientForHint fix breaks paint .net's tool windows.  more
-	work needed for that one.
-
-2006-11-01  Chris Toshok  <toshok at ximian.com>
-
-	* ScrollBar.cs: throw ArgumentException instead of Exception in
-	LargeChange/SmallChange setters.  fixes unit tests.
-
-2006-10-31	Andreia Gaita <shana.ufie at gmail.com>
-
-	* ContainerControl.cs: reverted rev.67183 (which was itself
-	a reversion of rev.66853... eh).
-	
-	* Control.cs: Fixes Reflector hang by changing Focus() call
-	to what it was before rev.66643 (calling Select() here sets 
-	ActiveControl, which in some situations calls back Focus and 
-	eventually does a stack overflow). Temp fix.	
-	Changes to GetNextControl() to not look for children to select when
-	parent cannot be selectable (so it looks for siblings instead)	
-	
-2006-10-31  Mike Kestner  <mkestner at novell.com>
-
-	* CheckedListBox.cs : off by one error in returned index from
-	ObjectCollection.Add.  Fixes #79758.
-
-2006-10-31  Chris Toshok  <toshok at ximian.com>
-
-	* UpDownBase.cs: remove the OnGotFocusInternal/OnLostFocusInternal
-	calls for the textbox/spinner, to keep from recursing to the point
-	where we crash.  Fixes #79760.
-
-2006-10-31  Chris Toshok  <toshok at ximian.com>
-
-	* ListControl.cs (set_SelectedValue): don't throw exceptions on
-	null/"" value, just return.  matches ms's behavior and fixes some
-	failing tests.
-
-2006-10-31  Chris Toshok  <toshok at ximian.com>
-
-	* Control.cs (set_Capture): make a logic a little easier to
-	follow.
-
-	* XplatUIX11.cs (CleanupCachedWindows): zero out the Grab window
-	if it's being destroyed.  A necessary fix surely, but a bandaid
-	also, to fix the stuck capture problem in bug #78413.
-
-2006-10-31  Chris Toshok  <toshok at ximian.com>
-
-	* XplatUIX11.cs: fix a couple of compiler warnings, and follow the
-	convention of clearing hwnd.ClientRect when we set the
-	width/height (so it'll be recalculated by Hwnd).
-
-2006-10-31	Andreia Gaita <shana.ufie at gmail.com>
-
-	* ContainerControl.cs: reversed Contains check from
-	ActiveControl due to hanging problems. This fix
-	partly regresses #79667 (button does not have
-	initial focus), so this might be a symptom for 
-	a larger parenting problem (set_ActiveControl
-	is being called but the child control does
-	not have the parent set yet?)	
-	
-2006-10-31  Mike Kestner  <mkestner at novell.com>
-
-	* MenuAPI.cs : fix keynav when menu is click activated.
-
-2006-10-31  Jonathan Pobst  <monkey at jpobst.com>
-
-	* ToolStrip*: Version 0.2.
-
-	* MenuStrip.cs: Version 0.1.
-
-	* Form.cs: Add a 2.0 MenuStrip tracker like the 1.1 Menu one.
-
-2006-10-30  Chris Toshok  <toshok at ximian.com>
-
-	[ fixes the oversized notify icon issue in bug #79745 ]
-	
-	* NotifyIcon.cs: scale the icon down to the size we're given by
-	the XplatUI layer (this would be faster if we did it once instead
-	of whenever we paint..)  Also, remove the WM_NCPAINT handling,
-	since it's never invoked.
-
-	* XplatUIX11.cs: the gnome and kde systrays use icons that are 24
-	pixels high by default, so let's hardcode our systray icon to that
-	size.  The SYSTEM_TRAY protocol should really have a way for
-	client apps to query for the correct icon size.. but oh well.  A
-	couple of patches to deal with the screwy client_window ==
-	whole_window notifyicon stuff (we don't want to PerformNCCalc, for
-	instance, and also make sure we don't XSelectInput twice).
-
-2006-10-30  Chris Toshok  <toshok at ximian.com>
-
-	* Control.cs: ugh, the unit test fix (CH11, yesterday) breaks when
-	recreating forms.  Control recreation is the bane of my existence.
-	Fix it in a way that keeps everyone happy.
-
-2006-10-30  Chris Toshok  <toshok at ximian.com>
-
-	* XplatUIX11.cs: use StructureNotifyMask on all whole_windows, not
-	just non-CHILD ones.  otherwise sometimes scrollbars end up with
-	client_windows not being resized to the proper size (ReportBuilder
-	shows this extremely well).
-
-2006-10-30  Chris Toshok  <toshok at ximian.com>
-
-	* XplatUIX11.cs (SetWMStyles): reinstate the XSetTransientForHint
-	for non-WS_EX_APPWINDOW windows.  This is what keeps them from
-	showing up in the gnome taskbar.  Fixes bug #79790.
-
-2006-10-30  Chris Toshok  <toshok at ximian.com>
-
-	* ApplicationContext.cs: guard against a NRE.
-
-	* Application.cs: null out the old MainForm for the context, so we
-	don't try to use it again once it's disposed.  Fixes bug #79783.
-
-2006-10-30  Chris Toshok  <toshok at ximian.com>
-
-	* DataGrid.cs (set_DataSource, set_DataMember): if we have a
-	BindingContext, set the data source directly, otherwise do the
-	lazy approach - the actual ListManager will be created when we get
-	a BindingContext. Fixes bug #79700.
-
-2006-10-30  Jonathan Pobst  <monkey at jpobst.com>
-
-	* XplatUI.cs, XplatUIDriver.cs, XplatUIWin32.cs, XplatUIOSX.cs,
-	  XplatUIX11.cs: Remove old 2 parameter SetVisible.
-
-	* Control.cs: Use the new 3 parameter SetVisible with activate = true.
-
-2006-10-30  Jonathan Pobst  <monkey at jpobst.com>
-
-	* XplatUI.cs, XplatUIDriver.cs, XplatUIWin32.cs: Add an overload
-	of SetVisible that allows a window to be shown, but not activated.
-	This is needed on Windows for MenuStrip, and can probably be used
-	with MainMenu and ComboBox to fix the focus stealing issues on
-	Windows.
-
-	* XplatUIOSX.cs, XplatUIX11.cs: Not needed, call existing SetVisible.
-
-2006-10-30  Alexander Olk  <alex.olk at googlemail.com>
-
-	* PictureBox.cs: Fix the output of the ToString method.
-
-2006-10-29  Chris Toshok  <toshok at ximian.com>
-
-	* Control.cs (get_TopLevelControl): fix bug #79781.
-
-2006-10-29  Chris Toshok  <toshok at ximian.com>
-
-	* ListControl.cs (set_DataSource): throw Exception here, not
-	ArgumentException, to match MS behavior.
-
-2006-10-29  Chris Toshok  <toshok at ximian.com>
-
-	* Form.cs: remove the try-catch's around calls to GetWindowState.
-	We can just check the return value.
-
-	* XplatUIX11.cs: don't throw exceptions from GetWindowState.
-	Instead return -1.
-
-	* XplatUI.cs: Add note about additional return value for
-	GetWindowState.
-
-2006-10-29  Chris Toshok  <toshok at ximian.com>
-
-	* Control.cs (CreateHandle): when we create our handle, we also
-	create the handles of our child controls.  Fixes one of the
-	Control unit tests (CH11).
-
-2006-10-28  Alexander Olk  <alex.olk at googlemail.com>
-
-	* MimeIcon.cs: If a gnome icon doesn't exist add a default icon.
-
-2006-10-28  Alexander Olk  <alex.olk at googlemail.com>
-
-	* ThemeClearlooks.cs: A little speedup.
-
-2006-10-27  Chris Toshok  <toshok at ximian.com>
-
-	* Control.cs: implement Control.FromChildHandle in a way that
-	matches the docs (and fixes the failed test.)
-
-2006-10-27  Chris Toshok  <toshok at ximian.com>
-
-	* DataGridTableStyle.cs: reproduce buggy MS behavior (with
-	comments).
-
-	* DataGrid.cs: implement ResetForeColor such that the tests
-	succeed.
-	
-2006-10-27  Chris Toshok  <toshok at ximian.com>
-
-	* ToolBarButton.cs: setting text/tooltiptext to null results in it
-	being set to "".  Fixes bug #79759.
-
-2006-10-27  Jackson Harper  <jackson at ximian.com>
-
-	* TextControl.cs: We need to clear the entire selection area when
-	setting the start, otherwise multiline selections are still
-	visible.
-
-2006-10-26  Chris Toshok  <toshok at ximian.com>
-
-	* PropertyGridView.cs: 
-
-	- ifdef all the code specific to the double
-	buffer case, and provide some alternatives in the non-doublebuffer
-	code, which makes heavy use of XplatUI.ScrollWindow to move things
-	around without having to invalidate (and cause flicker).  There
-	are still some drawing problems in the non-doublebuffered case, so
-	DOUBLEBUFFER is defined by default.
-
-	- Fix the way dropdowns are handled.  now we explicitly watch for
-	the events which might cause the dropdown to close, and break out
-	of the nested event loop there.  This gets rid of all Capture
-	code, at the expense of the Msg special casing.  Seems to work,
-	though, and fixes bug #79743.
-
-2006-10-27  Rolf Bjarne Kvinge <RKvinge at novell.com>
-	* Control.cs: SetIsRecreating now recreates implicitly added
-	child controls as well. Finally fixes #79629. The flag passed to 
-	SetIsRecreating has also been removed since it wasn't used.
-	
-2006-10-26  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* PageSetupDialog.cs: Clean some code, fix some bits, 
-	add some checks, and add a printer sub-dialog.
-
-2006-10-26  Chris Toshok  <toshok at ximian.com>
-
-	* PropertyGrid.cs: make set_SelectedObject call
-	set_SelectedObjects, and move the duplicate logic to the
-	SelectedObjects setter.  Also, raise SelectedObjectsChanged.
-
-	* PropertyGridView.cs: hide the textbox when we get a
-	SelectedObjectsChanged event.
-
-	Fixes bug #79748.
-
-2006-10-26  Chris Toshok  <toshok at ximian.com>
-
-	* PropertyGridView.cs: deal with the type converter not supporting
-	GetStandardValues() or GetStandardValues() returning null, which
-	is does in the default case.  Fixes #79742.
-
-2006-10-25  Andreia Gaita <shana.ufie at gmail.com>
-
-	* CheckedListBox.cs: nunit no longer crashes when selecting 
-	Project/Edit menu option
-	
-2006-10-25  Andreia Gaita <shana.ufie at gmail.com>
-
-	* MenuAPI.cs: prevent ExecFocusedItem from blowing up if there
-	is no menu selected. fixes #79739
-
-2006-10-25  Chris Toshok  <toshok at ximian.com>
-
-	* PropertyGridView.cs: factor out the splitter invalidation code
-	into the SplitterPercent setter, and for kicks implement the
-	Ctrl-Left/Ctrl-Right handling that moves the splitter by a small
-	amount in either direction.
-
-2006-10-25  Chris Toshok  <toshok at ximian.com>
-
-	* PropertyGridView.cs: do some cleanup of the brush used to draw
-	text - read only fields should be grayed out.  not sure how to do
-	this with the textbox, though.  but the textbox's should also be
-	readonly now at least.  Also, hide/show the textbox when resizing
-	the control.
-	
-	* CursorConverter.cs: use System.Reflection when getting the
-	properties of Cursors, as TypeDescriptor.GetProperties isn't
-	returning static properties.
-
-2006-10-25  Chris Toshok  <toshok at ximian.com>
-
-	* PropertyGridView.cs: factor out the up/down handling, and reuse
-	it for page up/down.  also add End/Home support.
-
-2006-10-25  Chris Toshok  <toshok at ximian.com>
-
-	* PropertyGridView.cs:
-
-	- ensure the selected grid item is visible in the scrolled area,
-	fixes bug #79572.
-
-	- fix Keys.Down handling when you're on the last item in the
-	propertygrid.
-
-2006-10-25  Mike Kestner  <mkestner at novell.com>
-
-	* MenuAPI.cs : set the ActiveTracker for MainMenu non-popup 
-	clicks too.  Fixes #79725.
-
-2006-10-24  Chris Toshok  <toshok at ximian.com>
-
-	* PropertyGrid.cs: use property.Converter instead of
-	TypeDescriptor.GetConverter(property.PropertyType), so we catch
-	TypeConverters declared on the property as well as on the
-	PropertyType.  Fixes bug #79678.
-
-2006-10-24  Alexander Olk  <alex.olk at googlemail.com>
-
-	* MimeIcon.cs, Mime.cs:
-	  Fallback to the default platform handler if no shared mime info
-	  stuff exists (fixes #79693).
-
-2006-10-20 Andreia Gaita <shana.ufie at gmail.com>
-	* ContainerControl.cs: Incorrect contains check in ActiveControl 
-	from previous fix (duh).
-
-2006-10-20  Chris Toshok  <toshok at ximian.com>
-
-	* PropertyGridView.cs: the dropdown should be MIN(number of items
-	in list, 15).  Fixes #79551.
-
-2006-10-20 Andreia Gaita <shana.ufie at gmail.com>
-	Fixes #79384, #79394, #79652, #79667
-	* Application.cs: 
-	
-	- Modal windows are now destroyed in the proper order for windows
-	
-	* ContainerControl.cs:
-	
-	- ActiveControl setter has more conditions on when to return:
-		- if we're reselecting the active control, but it actually
-		didn't have focus (window hidden or some such), it runs
-		- if the active control being selected doesn't actually 
-		exist in the container, it returns
-	
-	* Form.cs
-	
-	- The ShowDialog now gets the current form as the owner when
-	invoking without parameters, and correctly activates the owner 
-	when returning
-	
-	* MessageBox.cs
-	
-	- MessageBox now catches the Escape key to exit
-
-2006-10-20  Chris Toshok  <toshok at ximian.com>
-
-	* PropertyGridView.cs: fix a number of issues (bug #78565, and
-	most of bug #79676):
-
-	- you can navigate around the property grid with the arrow keys.
-
-	- the dropdown is sized properly when the pg has a vertical
-	scrollbar.
-
-	- fix the indentation for subentries, and properly select the
-	entire label rect.
-
-	- fix the gray bar's drawing (only draw it to the last element,
-	not for the height of the control.  Also make sure we draw that
-	last horizontal grid line.
-
-	- use the same mechanism the datagrid uses wrt the editing textbox
-	when scrolling/resizing/etc.  Namely, we hide it first, do the
-	operation, then show it again (if it's still visible).
-	
-	- aggressively remove a lot of unnecessary refreshes (and also
-	calls to Invalidate(). call more limited variants, and only redraw
-	what we need.)
-	
-	* PropertyGrid.cs:
-
-	- when we're populating the merged collection, fill in the UI
-	parent with either the passed in item, or the category item we
-	create.
-
-	- remove the Refresh call from the BorderHelpControl.OnSizeChanged.
-
-	* GridItem.cs: drop some fully qualified names.
-	
-	* GridEntry.cs: add a "UIParent", which is basically the parent
-	treenode.
-
-	* GridItemCollection.cs: add an IndexOf method.
-
-2006-10-20  Mike Kestner  <mkestner at novell.com>
-
-	* MainMenu.cs : go back to Draw in OnMenuChanged.  Until we get
-	a working win32 NC invalidation mechanism, we can't invalidate
-	menus.  [Fixes #79705]
-
-2006-10-20  Mike Kestner  <mkestner at novell.com>
-
-	* ListBox.cs : don't update the VScrollbar if the list is empty,
-	just hide it.  [Fixes #79692]
-
-2006-10-20  Jackson Harper  <jackson at ximian.com>
-
-	* RichTextBox.cs: Handle some special chars better, and don't skip
-	the entire group when we encounter a special char that we don't
-	handle correctly.
-
-2006-10-18  Chris Toshok  <toshok at ximian.com>
-
-	* PropertyGridView.cs: address a number of issues from bug #79676,
-	mostly of the cosmetic variety.
-
-	- The highlight rectangle for indented items not extends all the
-	way to the left.
-
-	- Indented items aren't indented so much.
-
-	- the dropdown is properly sized width-wise if the pg has a
-	vertical scrollbar.
-
-2006-10-18  Chris Toshok  <toshok at ximian.com>
-
-	* XplatUIX11.cs (SystrayAdd): a rather convoluted change, but the
-	systray stuff is rather convoluted to begin with.
-
-	systray icons are a single window for some reason (that I haven't
-	figured out yet), and for them, client_window == whole_window.
-	Given the way the tests are structured elsewhere to determine
-	which paints are pending (client vs. nc), that situation will
-	always yield PAINT, not NCPAINT.  So, if we have a pending
-	nc_expose and no pending expose, remove the hwnd from the paint
-	queue, and also set nc_expose_pending to false, to keep us from
-	blocking further expose's adding the hwnd to the paint queue.
-
-	phew.  like i said, a rather convoluted change.  Fixes the
-	notifyicon repaint issues in bug #79645.
-
-2006-10-18  Chris Toshok  <toshok at ximian.com>
-
-	* Form.cs: when getting the backcolor of the form, don't get
-	base.BackColor, as this allows parents to influence the background
-	color.  This breaks mdi forms.  Instead, if the background_color
-	is empty, return the default.
-
-2006-10-18  Chris Toshok  <toshok at ximian.com>
-
-	* XplatUIX11.cs: change some debug ifdefs, and return XGetParent
-	to being private instead of internal static.
-
-	* Control.cs: remove all the stupid ParentWaitingOnRecreation
-	crap, it wasn't working for more deeply nested controls anyway,
-	and we already have the is_recreating flag - use that instead.
-	Before calling DestroyHandle in RecreateHandle, recurse through
-	the control tree setting it to true.  this returns the recreate
-	code to much of its original simplicity, while now guaranteeing we
-	actually recreate everything we're supposed to.  This change gets
-	fyireporting actually showing mdi children.
-
-2006-10-17  Chris Toshok  <toshok at ximian.com>
-
-	* Form.cs: remove some debug spew, and collapse some duplicate
-	code at the end of SetClientSizeCore.
-
-	* XplatUIX11.cs: 
-	- add some more debug spew here too wrt Destroy handling.
-	- don't call hwnd.Dispose in DestroyWindow, it's effectively done
-	in Control's handling of WM_DESTROY.
-	- Remove the handling of zombie window DestroyNotifies from the
-	event loop - we don't need it.  Now the only DestroyNotifies we
-	actually handle are ones generated by X.
-	- When sending _NET_ACTIVE_WINDOW, the first param should be 1, to
-	match gtk's (functioning) handling of this. This keep metacity
-	from leaving droppings in the form of wm borders with no window
-	contents all over the place.
-
-	* Control.cs:
-	- add a bunch of debug spew wrt control recreation.
-	- fix a bug where we weren't tracking Visible properly on
-	recreated hwnds.
-	- fixed the WM_PAINT double buffer handling to support re-entrant
-	calls (yes, i know it's gross, but it's happening to us).
-
-2006-10-17  Rolf Bjarne Kvinge  <rolfkvinge at ya.com>
-	* ThemeWin32Classic.cs: changed drawing of selected days
-	to make them look better.
-
-2006-10-16  Chris Toshok  <toshok at ximian.com>
-
-	* Hwnd.cs: replace the user_data/client_dc/non_client_dc with
-	drawing_stack.  Nuke the ClientDC/NonClientDC properties.
-
-	* XplatUIX11.cs: move away from using hwnd.client_dc and
-	hwnd.non_client_dc and on to a stack of dc's (and in window's
-	case, PAINTSTRUCT's), so we can deal with nested Paint calls
-	without puking or not disposing of Graphics objects.
-
-	* XplatUIOSX.cs: same.
-
-	* XplatUIWin32.cs: same.
-
-2006-10-03  Alexander Olk  <alex.olk at googlemail.com>
-
-	* FileDialog.cs: Don't call on_directory_changed inside
-	  OnSelectedIndexChanged (it changes the SelectedIndex too).
-	  Instead move it to OnSelectionChangeCommitted.
-
-2006-10-13  Chris Toshok  <toshok at ximian.com>
-
-	* XplatUIX11.cs: more Destroy work.  the current code does the
-	following things, in order:
-
-	1. Enumerates all handles of all controls at or below the one
-	being destroyed, in pre-order.  As it is doing this, it marks the
-	handles as zombie and clears all references to them.
-	
-	2. calls XDestroyWindow on the window passed in.
-
-	3. SendMessage's WM_DESTROY to all he handles in the accumulated
-	list.
-
-2006-10-13  Chris Toshok  <toshok at ximian.com>
-
-	* XplatUIX11.cs: set hwnd.zombie to true before calling
-	SendMessage (WM_DESTROY).  this keeps us from marking the new
-	window a zombie, and also keeps us from calling sendmessage at
-	all.
-
-2006-10-13  Jackson Harper  <jackson at ximian.com>
-
-	* TextControl.cs: Do not show the caret and selection at the same
-	time.  Reduces ugliness by 35%.
-
-2006-10-13  Chris Toshok  <toshok at ximian.com>
-
-	* XplatUIX11.cs (SendWMDestroyMessages): set the hwnd to be a
-	zombie after we do the recursive call, so we actually do call
-	SendMessage on the children controls.
-	(GetMessage): if we find a pending paint event for a zombie hwnd,
-	remove the hwnd from the paint queue, or else it will always be
-	there (and we'll effectively loop infinitely)
-
-2006-10-13  Mike Kestner  <mkestner at novell.com>
-
-	* MenuItem.cs : add Selected format under keynav too.
-	Fixes #79528.
-
-2006-10-13  Gert Driesen  <drieseng at users.sourceforge.net>
-
-	* PropertyGrid.cs: Fixed some NRE's and small difference between our
-	implementation and that of MS.
-
-2006-10-13  Chris Toshok  <toshok at ximian.com>
-
-	* Control.cs (OnInvalidated) only futz with the invalid_region if
-	the control is double buffered.  this fixes the apparent hang in
-	the ListView unit tests.  Someone needs to make the
-	BeginEndUpdateTest not call OnInvalidated 15004 times, though..
-
-2006-10-13  Chris Toshok  <toshok at ximian.com>
-
-	* PropertyGridView.cs:
-
-	- do a little refactoring so that only one place calls
-	dropdown_form.Hide, and that is CloseDropDown.  make everywhere
-	else call that.  Also make it Refresh, since there are redraw bugs
-	otherwise (we should take a look at that...)
-
-	- do a little more refactoring work to share the body of code
-	involved with the drop down.  it was duplicated in the code
-	dealing with the listbox handling and in the code dealing with the
-	UITypeEditors.
-
-	- add a Capture to the dropdown form's control once it's
-	displayed, and add a MouseDown handler that checks to make sure
-	the position is inside the control.  If it's not, close the
-	dropdown.  This fixes #78190.
-
-	- in SetPropertyValueFromUITypeEditor, only call SetPropertyValue
-	if the value is different than the initial value.
-	
-2006-10-13  Andreia Gaita  <shana.ufie at gmail.com>
-
-	* Control.cs: see #78650
-	- Fixed GetNextControl for several cases:
-		- Changed FindFlatForward to return 
-		correct sibling control when more than one
-		control has same TabIndex as the currently 
-		focused one.
-		- Changed FindFlatBackward to loop children
-		from last to first and apply same logic as in
-		FindFlatForward
-		- Changed FindControlForward to search for
-		children when control is not a container
-		but has children, or search for siblings if
-		control is a container...
-		- Changed FindControlBackward	to continue
-		searching for child controls when hitting 
-		Panel-like parents
-		
-	- Fixed Focus method to update ActiveControl
-	(FocusTest.FocusSetsActive failure)
-	
-	* TabControl.cs:
-	- Focus rectangle now refreshes when gaining
-	or losing focus
-	- Removed grab for Tab key on IsInputKey that 
-	was keeping tab navigation from working (#78650)
-
-2006-10-13  Chris Toshok  <toshok at ximian.com>
-
-	* PropertyGridView.cs:
-	- Rewrite SetPropertyValue to loop over SelectedGridItem's
-	SelectedObjects.
-
-	- Deal with GridItem.Value == null a few places.
-
-	* PropertyGrid.cs: 
-	- replace the PopulateGridItemCollection with a pair of methods
-	which compute the intersection of all the properties in the
-	SelectedObjects array.  Fixes #79615.
-
-	- Throw ArgumentException from set_SelectedObjects if there's a
-	null in the array.
-
-	- Add GetTarget method which can be used to traverse up the
-	GridItem.Parent chain.  It depends on the assumption that
-	selected_objects for different GridEntries are always in the same
-	order (a safe assumption).  Use this method and loop over all the
-	selected objects in the entry when calling RemoveValueChanged and
-	AddValueChanged.
-	
-	* GridEntry.cs: Make this handle multiple selected objects.
-	.Value returns null if not all the selected objects share the same
-	value.
-
-2006-10-12  Jonathan Pobst  <monkey at jpobst.com>
-	* ToolStrip.cs, ToolStripButton.cs, ToolStripComboBox.cs,
-	  ToolStripControlHost.cs, ToolStripItem.cs, ToolStripLabel.cs,
-	  ToolStripProfessionalRenderer.cs, ToolStripProgressBar.cs,
-	  ToolStripSeparator.cs, ToolStripSplitStackLayout.cs,
-	  ToolStripTextBox.cs: Add accessibility, fix attributes/API and
-	add additional functionality.
-
-2006-10-12  Mike Kestner  <mkestner at novell.com>
-
-	* ErrorProvider.cs : new ToolTipWindow ctor sig.
-	* HelpProvider.cs : new ToolTipWindow ctor sig.
-	* ToolTip.cs : remove ToolTip param from Window sig since it is
-	not used.
-	* ToolBar.cs : add tooltip support.  Fixes #79565.
-
-2006-10-12  Rolf Bjarne Kvinge  <rolfkvinge at ya.com>
-
-	* ComboBox.cs: move the events in set_SelectedIndex to 
-	after the call to HighlightIndex in order to avoid 
-	possible recursion and subsequent problems with the call
-	to HighlightIndex and include a range check in 
-	set_HighlightIndex. Fixes #79588
-	
-2006-10-12  Rolf Bjarne Kvinge  <rolfkvinge at ya.com>
-
-	* MonthCalendar.cs: When FirstDayOfWeek is default set firstday 
-	to ui thread's settings instead of sunday. 
-	* ThemeWin32Classic.cs: Localize the day string. Fixes #79563
-
-2006-10-12  Rolf Bjarne Kvinge  <rolfkvinge at ya.com>
-
-	* DateTimePicker.cs
-	* MonthCalendar.cs
-	* ThemeWin32Classic.cs: rewrote DateTimePicker to fix bug #78364
-	and implement missing functionality (selecting different parts 
-	of the date and edit them individually with the keyboard).
-	
-2006-10-11  Chris Toshok  <toshok at ximian.com>
-
-	* Control.cs (OnInvalidated): fix NRE relating to last change.
-
-2006-10-11  Chris Toshok  <toshok at ximian.com>
-
-	* XplatUIX11.cs (SetWMStyles): make sure we include the MAXIMIZED
-	atoms in _NET_WM_STATE here if the window is maximized.  We need
-	to do this because we're *replacing* the existing _NET_WM_STATE
-	property, so those atoms will be lost otherwise, and any further
-	call to GetWindowState will return Normal for a window which is
-	actually maximized.  Fixes #79338.
-
-2006-10-11  Jackson Harper  <jackson at ximian.com>
-
-	* TextControl.cs: Special case for setting selection end to
-	selection start, we basically kill the anchor.
-	- some todo comments.
-
-2006-10-11  Chris Toshok  <toshok at ximian.com>
-
-	* Control.cs: switch to using an "invalid_region" to track which
-	parts of the image buffer need updating.  This is more code than
-	the simple fix from r66532.  That version just attempted to always
-	fill the entire buffer on redraw, which turns out to be
-	inefficient when invalidating small rectangles.  This version
-	simply adds the invalid rectangle to the invalid region.  When we
-	get any WM_PAINT message we see if it can be filled using the
-	image buffer, and if it can't (if the paint event's clip rectangle
-	is visible in the invalid region) we first fill the image buffer.
-	So, the image buffer is still a cache, we just fill it lazily.
-
-	* PaintEventArgs.cs: remove the SetClipRectangle method, we don't
-	need it any longer.
-
-2006-10-11  Chris Toshok  <toshok at ximian.com>
-
-	* XplatUIX11.cs (SetWindowPos): we need to update both position as
-	well as size after calling XMoveResizeWindow.  This keeps us from
-	ignoring future SetWindowPos calls.  Fixes the disappearing
-	DateTimePicker in the ToolBarDockExample from bug #72499.
-
-2006-10-11  Chris Toshok  <toshok at ximian.com>
-
-	* TextBoxBase.cs: reorder things a bit when it comes to
-	resizing-causing-recalculation.  we were recalculating the
-	document when our position was changed, which shouldn't happen.
-	We only care about size changes.  Clear up some more redundant
-	recalculation calls while I'm at it.  This makes the toolbar dock
-	example snappy when you're just dragging toolbars around (since it
-	causes a relayout whenever you move one.)
-
-2006-10-11  Chris Toshok  <toshok at ximian.com>
-
-	* ToolBarButton.cs (get_Rectangle): this only returns
-	Rectangle.Empty if Visible == false, or Parent == null.
-	Parent.Visible doesn't matter.
-
-2006-10-10  Chris Toshok  <toshok at ximian.com>
-
-	* Control.cs, PaintEventArgs.cs: "internal set { .. }" isn't loved
-	by .net 1.1, so switch to an internal method instead.
-
-2006-10-10  Chris Toshok  <toshok at ximian.com>
-
-	* Control.cs (WM_PAINT): when a control is double buffered we draw
-	initially to the ImageBuffer and then copy from there.  But when a
-	parent control which has child controls is double buffered, the
-	initial drawing doesn't encompass the entire ClientRectangle of
-	the parent control, so we end up with uninitialized bits (this is
-	easily seen by dragging the top toolbar in
-	wf-apps/ToolBarDockExample to the right, quickly).  The fix is to
-	manually set the ClipRectangle of the paint_event (only the one we
-	use to populate the ImageBuffer) to ClientRectangle.  Fixes more
-	of the nastiness in bug #72499.
-
-	* PaintEventArgs.cs: Add an internal setter for ClipRectangle,
-	which we use in Control.cs's WM_PAINT handling.
-
-2006-10-10  Jackson Harper  <jackson at ximian.com>
-
-	* TextBoxBase.cs: Finish off the autoscrolling stuff.
-
-2006-10-10  Chris Toshok  <toshok at ximian.com>
-
-	* Cursor.cs: Apply a slightly different patch to the one suggested
-	in #79609.
-
-2006-10-10  Jackson Harper  <jackson at ximian.com>
-
-	* MenuItem.cs: Make sure to put the mdi child in the hashtable,
-	not the parent form.
-	* TextControl.cs: use difference in old line count vs new count to
-	calculate how many lines were added, this takes into account soft
-	line breaks properly.
-
-2006-10-10  Chris Toshok  <toshok at ximian.com>
-
-	* LinkLabel.cs: don't call MeasureCharacterRanges against a
-	rectangle located at 0,0 and the size of the text.  Use
-	ClientRectangle instead.  This fixes rendering of non-left aligned
-	link labels.
-
-2006-10-10  Jackson Harper  <jackson at ximian.com>
-
-	* TextBoxBase.cs: When we set the selection start position the
-	caret.
-	* TextControl.cs: Need to update the caret when we decrement it to
-	zero.
-	- Make sure that the selection_visible flag gets reset to false if
-	the selection isn't visible.  Before this you could get it set to
-	visible by changing the selection start, then changing the end to
-	equal the start.
-
-2006-10-09  Jackson Harper  <jackson at ximian.com>
-
-	* TreeView.cs: Don't update scrollbars when we aren't visible.
-	* TreeNodeCollection.cs: Only need to update scrollbars if being
-	added to an expanded visible node or the root node.
-
-2006-10-09  Chris Toshok  <toshok at ximian.com>
-
-	* XplatUIX11.cs (SendMessage): fix NRE.
-
-2006-10-09  Jackson Harper  <jackson at ximian.com>
-
-	* TextBoxBase.cs: Implement horizontal autoscrolling.
-	* TextControl.cs: Add a movement types that allows moving forward
-	and backwards without wrapping.
-
-2006-10-09  Mike Kestner  <mkestner at novell.com>
-
-	* ListViewItem.cs : layout changes for wrapped LargeIcon labels
-	with focus "expansion" of labels.  Fixes #79532 and then some.
-	* ThemeWin32Classic.cs : add LineLimit to ListView label format
-	when wrapping.
-
-2006-10-09  Jackson Harper  <jackson at ximian.com>
-
-	* TextBoxBase.cs: Set the default max values to MaxValue since
-	we use the scrollbar for autoscrolling and the default value is
-	100.  If we don't do this the caret won't keep up with typing
-	after about 18 characters.
-	* TextControl.cs: Make sure the selection is offset by the
-	viewport x.  This fixes selection when using auto scrolling.
-
-2006-10-07  Andreia Gaita <shana.ufie at gmail.com>
-	
-	* Form.cs: The active control should be selected after the 
-	OnLoad so that any child control initialization that affects
-	the selection is done. Fixes #79406
-
-2006-10-06  Chris Toshok  <toshok at ximian.com>
-
-	* XplatUIX11.cs: This is perhaps a dangerous change, but it seems
-	to have no evil effects.
-
-	- Stop selecting StructureNotifyMask on non-toplevel windows.
-
-	  The only way children should be resized is by using the SWF api,
-	  and we already send WM_WINDOWPOSCHANGED messages in those cases.
-	  Toplevel windows can be interacted with via the window manager,
-	  and so we keep the input mask there.
-
-	  The other event StructureNotifyMask gives us (that we care
-	  about) is DestroyNotify.  The code is already structured such
-	  that it assumes we won't be getting a DestroyNotify event for
-	  the window we pass to XDestroyWindow (which is what
-	  StructureNotifyMask is supposed to guarantee.)  So, that code
-	  shouldn't be affected by this either.
-
-	- Stop selecting VisibilityChangeMask altogether.
-
-	  We weren't doing anything with the resulting events anyway.
-	
-	This vastly reduces the number of X requests and events we see
-	when resizing/laying out a large ui.
-
-2006-10-06  Chris Toshok  <toshok at ximian.com>
-
-	* ScrollableControl.cs (DisplayRectangle): we need to take into
-	account the DockPadding regardless of whether or not auto_scroll
-	== true.  rework this slightly to this effect, and fix bug #79606,
-	and part of #72499 (you can now see the drag handles and drag
-	toolbars around).
-
-2006-10-06  Gert Driesen  <drieseng at users.souceforge.net>
-
-	* ListViewItem.cs: Collections of selected and checked items are now
-	dynamically rebuilt. Whenever an item is (un)checked or (de)selected
-	we mark the collection "dirty".
-	* ListView.cs: Marked collections readonly. Modified UpdateSelection
-	to only clear SelectedItems when a new item is selected and MultiSelect
-	is enabled. CheckedItems and SelectedItems now subscribe to Changed
-	event of ListViewItemCollection, and mark its list dirty whenever
-	that event is fire. This allows us to return selected/checked items 
-	in the same order as they are in the Items collection. This matches
-	the MS behavior.
-
-2006-10-06  Chris Toshok  <toshok at ximian.com>
-
-	* NotifyIcon.cs (HandleMouseUp): only show the context menu on
-	right mouse clicks.  Fixes bug #79593.
-
-2006-10-06  Chris Toshok  <toshok at ximian.com>
-
-	* Splitter.cs: doh, fix splitters that don't want to cancel the
-	movement when you drag them.  Also, impose the limits on the
-	values we send to the SplitterMovingEvent.  Fixes #79598.
-
-2006-10-06  Jackson Harper  <jackson at ximian.com>
-
-	* TextBoxBase.cs: Ignore whether or not the scrollbar is enabled,
-	since we use this for auto scrolling also.
-
-2006-10-05  Chris Toshok  <toshok at ximian.com>
-
-	* DataGridBoolColumn.cs: Nuke the code from ConcedeFocus.  I'm
-	beginning to think that most datagrid column types don't need this
-	method.  Fixes bug #79392.
-
-2006-10-05  Chris Toshok  <toshok at ximian.com>
-
-	* DataGrid.cs: move back to a more lazy scheme for creating the
-	CurrencyManager, so we aren't updating it every time you set
-	either DataSource or DataMember.  Also, don't call
-	RecreateDataGridRows if the currency manager hasn't changed.
-
-2006-10-05  Chris Toshok  <toshok at ximian.com>
-
-	* ComboBox.cs: by the time the OnSelectionChangeCommitted event is
-	emitted, SelectedIndex should already be updated.  Fixes bug
-	#78929.
-
-2006-10-05  Jonathan Pobst  <monkey at jpobst.com>
-
-	* ToolStripComboBox.cs, ToolStripControlHost.cs, ToolStripProgressBar,
-	  ToolStripTextBox.cs: Initial commit.
-	* ToolStripItem.cs: Fixes for OnLayout, BackColor, Parent.
-
-2006-10-05  Jackson Harper  <jackson at ximian.com>
-
-	* TabControl.cs: We need to invalidate the tab control area when
-	new ones are added (duh).
-
-2006-10-03  Chris Toshok  <toshok at ximian.com>
-
-	* Form.cs (ProcessDialogKey): if the focused control is in this
-	form and is a button, call its PerformClick method here.  Fixes
-	#79534.
-
-2006-10-04  Jackson Harper  <jackson at ximian.com>
-
-	* TabPage.cs: Ignore setting of Visible, and add an internal
-	method for setting the controls visibility.  TabPage's Visible
-	property is a little strange on MS, this seems to make us
-	compatible, and fixes cases where people set all the tab pages to
-	visible.
-	* TabControl.cs: Use the new internal setting on tab pages
-	visibility.
-
-2006-10-03  Mike Kestner  <mkestner at novell.com>
-
-	* ComboBox.cs : raise Click on ComboTextBox clicks. Fixes #79555.
-
-2006-10-03  Mike Kestner  <mkestner at novell.com>
-
-	* ListView.cs : use is_visible instead of Visible to check if 
-	scrollbars should be placed/sized.  Also some max_wrap_width
-	love for LargeIcon view.  [Fixes #79533]
-
-2006-10-03  Atsushi Enomoto  <atsushi at ximian.com>
-
-	* TextControl.cs :
-	  Make set_TextAlign() do actually update the align. Fixed #78403.
-
-2006-10-03  Chris Toshok  <toshok at ximian.com>
-
-	* DataGrid.cs: fix a crash when switching datasources if the
-	vertical scrollbar is at someplace other than Value = 0.  Also,
-	reduce the number of recalculation passes we do in SetDataSource
-	from 2 to 1.
-
-2006-10-03  Jackson Harper  <jackson at ximian.com>
-
-	* TextBoxBase.cs: Move the if value the same bail check up, we
-	don't want to empty the document if it is already empty, this
-	seems to severly mess up the caret.  TODO: I should probably fix
-	the empty statement to update teh caret somehow.
-
-2006-10-03  Chris Toshok  <toshok at ximian.com>
-
-	* ThemeWin32Classic.cs, DataGrid.cs: some changes so that the
-	incredibly hacky Windows.Forms FAQ autosize rows entry (it uses
-	reflection, an internal row type, properties on said type, etc.)
-	will work with our datagrid.  Fixes #79531.
-
-2006-10-03  Alexander Olk  <alex.olk at googlemail.com>
-
-	* FileDialog.cs: Don't crash if a path is not accessible
-	  (System.UnauthorizedAccessException). Fixes #79569.
-	* MimeIcon.cs: Workaround for a Uri bug. Unix paths/files can have
-	  a ':' too. Return unknown icon for those paths/files.
-
-2006-10-03  Sebastien Pouliot  <sebastien at ximian.com>
-
-	* ToolTip.cs: Fix rare, but possible, NRE on MouseEnter when 
-	GetContainerControl returns null.
-
-2006-10-02  Chris Toshok  <toshok at ximian.com>
-
-	* XplatUIX11.cs (GetWindowState): use hwnd.client_window in the
-	call to XGetWindowAttributes instead of "handle".  fixes an X
-	error using notifyicon after the NotifyIconWindow to Form base
-	class switch.
-
-2006-10-02  Chris Toshok  <toshok at ximian.com>
-
-	* XplatUIX11.cs (QueryPointer): new function, encapsulating the
-	server grab and looping we need to do to get down to the most
-	deeply nested child window.
-	(SetCursorPos): use QueryPointer instead of GetCursorPos, and call
-	QueryPointer again after the WarpPointer so we can generate a
-	proper (fake) MotionNotify event to be enqueued in the destination
-	window's queue.
-	(GetCursorPos): call QueryPointer.
-
-	Fixes #79556.
-
-2006-10-02  Jackson Harper  <jackson at ximian.com>
-
-	* NotifyIcon.cs: Derive the notify icon from a form, so things
-	like FindForm work on it.
-	- Swallow the WM_CONTEXTMENU message, since that is generated on
-	mouse down, and context menu is a mouse up kinda guy.  I believe
-	the correct fix here is probably to make the notify icon entirely
-	NC area, but this seems to work fine for anyone not manipulating
-	WndProc.
-
-2006-10-02  Jonathan Pobst  <monkey at jpobst.com>
-
-	* ToolStrip.cs, ToolStripButton.cs, ToolStripItem.cs,
-	  ToolStripItemCollection.cs, ToolStripLabel.cs,
-	  ToolStripProfessionalRenderer.cs, ToolStripRenderer.cs,
-	  ToolStripSeparator.cs, ToolStripSplitStackLayout.cs:
-	  Initial implementation.
-	* TextRenderer.cs: Provide padding to MeasureText.
-
-2006-10-02  Sebastien Pouliot  <sebastien at ximian.com>
-
-	* ButtonBase.cs: Fix CreateAccessibilityInstance to return an instance
-	of ButtonBaseAccessibleObject. Fix bug #79552.
-
-2006-10-02  Jackson Harper  <jackson at ximian.com>
-
-	* MdiWindowManager.cs: When maximizing use the containers client
-	rect, not it's bounds, so nc area is accounted correctly.
-	- Use the parent form's size for the menu position, since the
-	client isn't always the full form size.
-
-2006-10-01  Chris Toshok  <toshok at ximian.com>
-
-	* ScrollableControl.cs: make sure neither right_edge or
-	bottom_edge are < 0, since they're used as LargeChange for the
-	horiz/vert scrollbars respectively.  Fixes #79539.
-
-2006-10-01  Chris Toshok  <toshok at ximian.com>
-
-	* NotifyIcon.cs: add NotifyIconWindow.InternalRecreateHandle, so
-	the xplatuix11 code can cause us to destroy/recreate our handle.
-
-	* XplatUIX11.cs
-	(SystrayAdd):
-	- this code can be invoked many times for the same Hwnd.  Make
-	  sure we only destroy the client window once (the first time this
-	  method is called).  This fixes bug #79544.
-	- Remove the call to the improperly bound XSync.  why we had two
-	  bindings to this, I will never know, but this call resulted in
-	  events being discarded from the queue(!).
-	- correct a misunderstanding of _XEMBED_INFO - the second atom is
-	  not our current state but the state we wish to be in.  So, 0 if
-	  we don't want to be mapped.  Change it to 1.
-	(SystrayRemove): The XEMBED spec makes mention of the fact that
-	gtk doesn't support the reparent of client windows away from the
-	embedder.  Looking at gtksocket-x11.c seems to agree with this.
-	The only avenue we have for removing systray icons is to destroy
-	them.  We don't want the handle to go away for good, though, so
-	call InternalRecreateHandle on the NotifyIconWindow.  Fixes
-	#79545.
-	
-2006-10-01  Chris Toshok  <toshok at ximian.com>
-
-	* Form.cs (WndProc): inline the native_enabled variable usage into
-	the cases in which it's used.  Fixes #79536.
-
-2006-09-29  Mike Kestner  <mkestner at novell.com>
-
-	* ListView.cs : toggle the selection state for ctrl clicks in 
-	multiselect mode. [Fixes #79417]
-
-2006-09-29  Mike Kestner  <mkestner at novell.com>
-
-	* ListView.cs : kill CanMultiSelect and refactor the selection
-	code to support multiselection in the absence of mod keys. Steal
-	arrow/home/end keys by overriding InternalPreProcessMessage to
-	restore regressed keynav behavior.
-	[Fixes #79416]
-
-2006-09-29  Jackson Harper  <jackson at ximian.com>
-
-	* MdiClient.cs: Repaint the titlebars when the active window is
-	changed.
-
-2006-09-29  Chris Toshok  <toshok at ximian.com>
-
-	* Application.cs: when entering a runloop with a modal, make sure
-	the hwnd is enabled.  Fixes #79480.
-
-2006-09-29  Chris Toshok  <toshok at ximian.com>
-
-	* DataGrid.cs (CurrentCell): if we try to navigate to the add row
-	when ListManager.CanAddRows == false, bump us back one.
-
-	* DataGridColumnStyle.cs (ParentReadOnly): remove the
-	listmanager.CanAddRows check.  This makes ArrayLists uneditable
-	using a datagrid, which is not right.
-	(SetColumnValueAtRow): call IEditable.BeginEdit if source[rowNum]
-	is an IEditable, but call property_descriptor.SetValue regardless.
-	fixes #79435.
-
-2006-09-29  Chris Toshok  <toshok at ximian.com>
-
-	* DataGridBoolColumn.cs: we need to test equality in the face of
-	possible null values (as is the case with the default NullValue).
-	This patch keeps us from crashing in that case.
-
-2006-09-29  Jackson Harper  <jackson at ximian.com>
-
-	* TreeNodeCollection.cs: Don't do a recalculate/updatescrollbars
-	here, since it will get called for every node collection in the
-	tree. This is now done in the treeview once the sorting is
-	finished.
-	* TreeView.cs: Recalculate the visible order, and update the
-	scrollbars after sorting, set the top nope to the root so that the
-	recalc actually works.
-
-2006-09-29  Chris Toshok  <toshok at ximian.com>
-
-	* LinkLabel.cs: more handling of the default link collection in
-	the face of LinkArea manipulation.  The default link collection
-	contains 1 element (start=0,length=-1).  If the user sets LinkArea
-	to anything and the links collection is the default, clear it.
-	Then only add the link if its nonempty.  Fixes #79518.
-
-2006-09-29  Chris Toshok  <toshok at ximian.com>
-
-	* LinkLabel.cs (CreatePiecesFromText): calculate the length of a
-	piece correctly when we hit a '\n'.  Fixes #79517.
-
-2006-09-29  Chris Toshok  <toshok at ximian.com>
-
-	* MimeIcon.cs, ThemeGtk.cs, X11DesktopColors.cs, XplatUIX11GTK.cs:
-	change the binding of gdk_init_check to take two IntPtr's, and
-	pass IntPtr.Zero for both of them.  Fixes #79520.
-
-2006-09-29  Mike Kestner  <mkestner at novell.com>
-
-	* ComboBox.cs : raise TextChanged on ComboTextBox.TextChanged.
-	[Fixes #78779]
-
-2006-09-28  Jackson Harper  <jackson at ximian.com>
-
-	* XplatUIX11.cs: When translating NC messages make sure we go from
-	whole window to screen, not client window to screen.
-	* MdiClient.cs: Remove the calls to PaintWindowDecorations, this
-	method doesn't exist
-	- Skip over controls that aren't forms when arranging.
-
-2006-09-28  Jackson Harper  <jackson at ximian.com>
-
-	* XplatUIWin32.cs: Clip the rect to the parent window.
-	* XplatUIStructs.cs: Add clipping modes struct.
-	* InternalWindowManager.cs: New private method that factors title
-	bar heights in when calculating the pos of an NC mouse message.
-	- Use SendMessage to force a paint when the form's size is changed
-	instead of painting the decorations immediately.
-	- Don't let the NC button click messages get to DefWndProc,
-	because they will attempt to handle windowing themself, and this
-	messes up z-order (it will put them in front of the scrollbars).
-	* XplatUIX11.cs: Make sure that we don't reset window managers if
-	we already have one (ie the window is an MDI window).
-
-2006-09-28  Chris Toshok  <toshok at ximian.com>
-
-	* MainMenu.cs: fix #79405 by way of a disgusting hack.  all the
-	menu code really needs going over.
-
-2006-09-27  Chris Toshok  <toshok at ximian.com>
-
-	* XplatUIX11.cs (SetWMStyles): more metacity wonderment.  turns
-	out metacity ignores the MAXIMIZE_HORZ/VERT messages unless the
-	window is maximizable.  So, we need to make sure that even if we
-	clear the border/wm frame of those functions, they're still
-	available (basically, we remove the decoration without removing
-	the function).  Half the fix for #79338.
-
-2006-09-27  Chris Toshok  <toshok at ximian.com>
-
-	* DataGrid.cs (ProcessGridKey): implement Shift-Tab handling.
-	Fixes bug #79515.
-
-2006-09-27  Chris Toshok  <toshok at ximian.com>
-
-	* Splitter.cs: reorder things a bit so that we don't actually
-	draw/move the splitter until after calling OnSplitterMoving.  This
-	lets users cancel/disallow the movement by explicitly setting
-	event.SplitX/SplitY.  Fixes #79372.
-
-2006-09-27  Jackson Harper  <jackson at ximian.com>
-
-	* XplatUIX11.cs: Don't hide the caret when it is being destroyed,
-	because it is most likely on a window being destroyed, and that
-	will give us an X11 error.
-
-2006-09-27  Chris Toshok  <toshok at ximian.com>
-
-	* PropertyGridView.cs: half of the fix for #78190.  Clicking on
-	the dropdown button now toggles between showing and hiding the
-	dropdown.  Also, get rid of dropdown_form_showing and just use
-	dropdown_form.Visible.  We still don't do a grab, but I'll leave
-	that part to someone who has handled Capture-fu before.
-
-2006-09-27  Chris Toshok  <toshok at ximian.com>
-
-	* DataGrid.cs: return false if alt isn't pressed when '0' is
-	pressed.  this keeps the '0' key from being swallowed, and fixes
-	bug #79350.
-
-2006-09-27  Chris Toshok  <toshok at ximian.com>
-
-	* ComboBox.cs: use Invalidate when scrolling the dropdown list.
-	Calling Refresh (in response to a scrollbar event) screws up the
-	scrollbar painting.  Fixes bug #78923.
-
-2006-09-27  Chris Toshok  <toshok at ximian.com>
-
-	* Theme.cs (SystemResPool): make the "if hashtable[key] == null
-	then insert into hashtable" blocks threadsafe.
-
-2006-09-27  Chris Toshok  <toshok at ximian.com>
-
-	* MessageBox.cs (CreateParams): the styles should be |'ed with our
-	baseclass's, since otherwise the
-	ControlBox/MinimizeBox/MaximizeBox assignments above have no
-	effect.  This gets the close button back in messageboxes.
-
-2006-09-27  Chris Toshok  <toshok at ximian.com>
-
-	* XplatUIX11.cs: make StyleSet and ExStyleSet check == with the
-	flag, not just != 0.  this makes flags that are actually multiple
-	bits (like WS_CAPTION) work.  fixes bug #79508.
-
-2006-09-27  Jordi Mas i Hernandez <jordimash at gmail.com>
-
-	* PageSetupDialog.cs: add support for getting and settings the 
-	paper size, source and orientation.
-
-2006-09-26  Chris Toshok  <toshok at ximian.com>
-
-	* XplatUIX11.cs (SetWMStyles): turns out when SYSMENU is not set
-	and caption == "", we need to remove the resize handles as well as
-	the title bar.
-
-	* Control.cs (set_Text): turns out that setting Text on a form
-	should change the WM styles on the window, since if ControlBox ==
-	false, the only way to get a window border is to have a non-""
-	Text property.  check winforms/forms/text.cs for an example.  so,
-	call both XplatUI.SetWindowStyle and XplatUI.Text here to properly
-	update both window styles and title.  This fixes a lot of dialogs
-	(including the preferences dialog in MonoCalendar.)
-
-2006-09-26  Chris Toshok  <toshok at ximian.com>
-
-	* XplatUIWin32.cs (SetParent): if parent == IntPtr.Zero (and the
-	control isn't a Form), call Win32ShowWindow to hide the window,
-	but don't update the control Visible property.  When we reparent
-	back to a parent control, call SetVisible in order for the
-	window's visibility to be reinstated.
-
-	* XplatUIX11.cs (SetParent): if hwnd.parent == null, reparent to
-	the FosterParent.
-
-	* Control.cs (ControlCollection.Remove): remove that value.Hide()
-	call for good, since it breaks MonoCalendar (and other things I'm
-	sure.) Also, set all_controls to null *after* the owner calls,
-	which end up regenerating it.
-	(ChangeParent): allow new_parent to be == null, passing
-	IntPtr.Zero down to XplatUI.
-
-	this fixes #79294 the right way.
-
-2006-09-26  Mike Kestner  <mkestner at novell.com>
-
-	* GridEntry.cs : internal SetParent method.
-	* PropertyGrid.cs : attach to property changed on the proper
-	target if we have a hierarchical grid with subobjects. Setup
-	GridItem.Parent for hierarchical items.
-	* PropertyGridView.cs : Set value on the correct target for
-	hierarchical grids. [Fixes #78903]
-
-2006-09-26  Chris Toshok  <toshok at ximian.com>
-
-	* Control.cs (ChildNeedsRecreating): this should return true if
-	either we're being recreated and the child is in our list, or our
-	parent is waiting for our recreation.
-
-2006-09-26  Chris Toshok  <toshok at ximian.com>
-
-	* Control.cs (ControlCollection.Remove): reinstate the
-	value.Hide() call as suggested in bug #79294.
-
-2006-09-26  Sebastien Pouliot  <sebastien at ximian.com>
-
-	* XplatUIX11.cs: Fixed SetCursorPos to move the cursor to screen
-	coordinates (versus a relative move).
-
-2006-09-26  Chris Toshok  <toshok at ximian.com>
-
-	* Control.cs: rework child recreation a little bit.  It turns out
-	that we race between the DestroyNotify the WM_DESTROY message.  If
-	the parent gets its DestroyNotify before the child gets the
-	WM_DESTROY message, the child ends up not recreating (since the
-	parent finishes its recreation on DestroyNotify, and the child
-	checks ParentIsRecreating.)
-
-	So, instead we store off a list of all the child controls which
-	need to be recreated when the parent control starts to recreate
-	itself.  Then, when child controls get their WM_DESTROY message we
-	check to see if they're in the parent's pending recreation list,
-	and if so, we recreate.  This removes all dependency on ordering
-	from the code and fixes the initial MonoCalendar upgrade dialog.
-	
-2006-09-26  Jackson Harper  <jackson at ximian.com>
-
-	* TextControl.cs: Use the Line to get the length of the line,
-	since soft line breaks can change the end line.
-
-2006-09-26  Chris Toshok  <toshok at ximian.com>
-
-	* Control.cs (ControlCollection.AddImplicit): don't add the
-	control again if it's already in one of our lists.  This keeps us
-	from adding controls over and over again for comboboxes when their
-	handle gets recreated (as the combobox adds implicit controls in
-	OnHandleCreated).  Fixes the X11 errors in bug #79480.
-
-2006-09-26  Jackson Harper  <jackson at ximian.com>
-
-	* TextControl.cs: When deleting characters make sure that any
-	orphaned zero lengthed tags get deleted.
-	- Fix ToString for zero lengthed tags.
-
-2006-09-25  Jackson Harper  <jackson at ximian.com>
-
-	* TextControl.cs: When getting a tag at the location there can be
-	multiple tags at the same spot, these are 0-lengthed tags that
-	appear when extra formatting has been stuck in a location.  We
-	need to pull out the last of these 0 lengthed tags.
-
-2006-09-25  Jackson Harper  <jackson at ximian.com>
-
-	* TextControl.cs: Fix print out in debug method.
-	* TextBoxBase.cs: When text is set bail if we are setting to the
-	previous value.
-	
-2006-09-24  Alexander Olk  <alex.olk at googlemail.com>
-
-	* FontDialog.cs: Fixed the up/down arrow keys issue from bug #79478.
-	  It is now possible to change the selected index in a FontXXXListBox
-	  with the up and down arrow keys from the FontXXXTextBoxes.
-	  Also, send the FontXXXTextBox mouse wheel event to the corresponding
-	  FontXXXListBoxes to match ms.
-
-2006-09-22  Sebastien Pouliot  <sebastien at ximian.com>
-
-	* SystemInformation.cs: Return a clone of the theme's MenuFont because
-	anyone can dispose it, anytime. All other properties returns enums, 
-	structs or basic types so they don't need such tricks.
-
-2006-09-22  Jackson Harper  <jackson at ximian.com>
-
-	* XplatUI.cs:
-	* XplatUIWin32.cs:
-	* Clipboard.cs:
-	* DataFormats.cs:
-	* XplatUIOSX.cs:
-	* XplatUIDriver.cs: Update interface to add a primary selection
-	flag, so the driver can use the primary selection buffer if
-	needed.
-	* XplatUIX11.cs: Allow the clipboard to retrieve from PRIMARY.
-
-	* RichTextBox.cs: We need to supply the data object to paste now
-	(so we can choose to supply CLIPBOARD or PRIMARY).
-	* TextBoxBase.cs: Supply data object to paste (see above).
-	- Middle click uses the primary selection data object.
-	
-2006-09-21  Chris Toshok  <toshok at ximian.com>
-
-	* XplatUIX11.cs: first little cleanup of the StyleSet (...) block
-	of SetWMStyles.  It's still a rat's nest and is largely
-	order-dependent which I dislike immensely.  This also fixes the X
-	button disappearing from toplevel forms.
-
-2006-09-21  Mike Kestner <mkestner at novell.com>
-
-	* ListBox.cs: move Jordi's click/dblclick raising code to the
-	mouse up handler.
-
-2006-09-21  Jordi Mas i Hernandez <jordimash at gmail.com>
-
-	* ListBox.cs: Fixes 79450
-
-2006-09-21  Mike Kestner <mkestner at novell.com>
-
-	* TreeView.cs: guard against disposed conditions in UpdateScrollbars
-	to deal with people updating the TreeNodeCollection after the tree
-	is disposed.  "Fixes" 79330.
-
-2006-09-20  Jackson Harper <jackson at ximian.com>
-
-	* TextControl.cs: Push the cursor record onto the undo stack
-	before the delete action. This fixes 78651.
-
-2006-09-20  Jonathan Chambers  <joncham at gmail.com>
-
-	* PropertyGridView.cs: Remove WindowStyles.WS_VISIBLE from
-	CreateParams. Fixes 79329.
-
-2006-09-19  Chris Toshok  <toshok at ximian.com>
-
-	* XplatUIX11.cs: a couple of blanket code massage passes to clean
-	things up a bit.  First, get rid of the NetAtoms array (and the NA
-	enum), and just embed the atoms as static fields.  Also, add a
-	couple of functions (StyleSet and ExStyleSet) to clean up all the
-	bitmask testing of styles.
-
-	* X11Structs.cs: remove the NA enum, not needed anymore.
-	
-2006-09-19  Chris Toshok  <toshok at ximian.com>
-
-	* XplatUIX11.cs: apply Alexander's tool window fix for bug #79245
-	(mapping them to _NET_WM_WINDOW_TYPE_UTILITY).  and add a little
-	added cleanup to get MessageBox titles appearing again, which were
-	broken by my earlier fix for caption-less/ControlBox-less windows.
-
-2006-09-18  Jonathan Pobst <monkey at jpobst.com>
-
-	* ToolStripArrowRenderEventArgs.cs, ToolStripArrowRenderEventHandler.cs,
-	  ToolStripContentPanelRenderEventArgs.cs, ToolStripContentPanelRenderEventHandler.cs,
-	  ToolStripGripRenderEventArgs.cs, ToolStripGripRenderEventHandler.cs,
-	  ToolStripItemClickedEventArgs.cs, ToolStripItemClickedEventHandler.cs,
-	  ToolStripItemEventArgs.cs, ToolStripItemEventHandler.cs,
-	  ToolStripItemImageRenderEventArgs.cs, ToolStripItemImageRenderEventHandler.cs,
-	  ToolStripItemRenderEventArgs.cs, ToolStripItemRenderEventHandler.cs,
-	  ToolStripItemTextRenderEventArgs.cs, ToolStripItemTextRenderEventHandler.cs,
-	  ToolStripPanelRenderEventArgs.cs, ToolStripPanelRenderEventHandler.cs,
-	  ToolStripRenderEventArgs.cs, ToolStripRenderEventHandler.cs,
-	  ToolStripSeparatorRenderEventArgs.cs, ToolStripSeparatorRenderEventHandler.cs:
-	    Inital import.
-	* ToolStripPanel.cs, ToolStripContentPanel.cs, ToolStripSeparator.cs,
-	  ToolStripButton.cs: Stubs needed for above.
-	* ToolStrip.cs, ToolStripItem.cs: Stub a few variables/properties for above.
-
-2006-09-15  Chris Toshok  <toshok at ximian.com>
-
-	* XplatUIX11.cs:
-	- make the MessageQueues hashtable Synchronized.
-	
-	- SendMessage: if the Hwnd is owned by a different thread, use the
-	AsyncMethod stuff to dispatch the SendMessage on the hwnd's
-	thread.  Fixes bug #79201.
-
-2006-09-15  Chris Toshok  <toshok at ximian.com>
-
-	* XplatUIX11.cs (SetWMStyles): rework the #79368 fix slightly.  If
-	ControlBox == false, we disallow maximize/minimize/close.  If the
-	form Caption is "" we also disallow move (and get rid of the Title
-	decoration).  Unfortunately, regardless of how things are set,
-	we're stuck with the Title and WM menu.
-
-2006-09-15  Chris Toshok  <toshok at ximian.com>
-
-	* Application.cs: add locking around the static message_filters
-	ArrayList, part of #79196.
-
-2006-09-15  Chris Toshok  <toshok at ximian.com>
-
-	* XplatUIX11.cs (SetWMStyles): if Form.Text == "" and
-	Form.ControlBox == false, the window has no titlebar nor resize
-	handles.  fixes bug #79368.
-
-2006-09-15  Chris Toshok  <toshok at ximian.com>
-
-	* TextBoxBase.cs: in CalculateScrollBars make sure LargeChange is
-	>= 0.  Fixes bug #79370.
-
-2006-09-15  Jonathan Pobst <monkey at jpobst.com>
-	* FlowLayoutPanel.cs, FlowLayoutSettings.cs: Initial commit.
-	* Control.cs:
-   	    Add properties: LayoutEngine, Margin, DefaultMargin.
-   	    Add method: GetPreferredSize.
-   	    Move layout logic from PerformLayout to layout engines. 
-
-2006-09-13  Chris Toshok  <toshok at ximian.com>
-
-	* XplatUIX11.cs: more destroy work.  Jackson pointed out that my
-	fix for #79326 broke #78718, so this change addresses that.
-
-	- in SendWMDestroyMessages remove the call to
-	CleanupCachedWindows, since we might be recreating the control and
-	need to maintain the references to right Hwnd handles.  Also, set
-	the zombie flag to true for each of the children in the hierarchy
-	instead of calling hwnd.Dispose.  This will cause GetMessage to
-	ignore all events for the window except for DestroyNotify.
-
-	- In GetMessage, ignore messages except for DestroyNotify for
-	zombie hwnds.
-	
-	* Control.cs: revert the is_recreating fix from the last
-	ChangeLog.  It's definitely "right", but it breaks switching from
-	an MDI form to a non-MDI form.  Will need to revisit that.
-
-	* Hwnd.cs: add a zombie flag, which means "the
-	client_window/whole_window handles are invalid, but we're waiting
-	for the DestroyNotify event to come in for them".  Set the flag to
-	false explicitly if setting WholeWindow/ClientWindow, and also
-	when Disposing.
-	
-2006-09-13  Chris Toshok  <toshok at ximian.com>
-
-	* XplatUIX11.cs: rework window destruction slightly.
-
-	- when destroying the windows associated with a control, we don't
-	need 2 separate XDestroyWindow calls.  Just the one for the
-	whole_window (or for client_window if whole_window is somehow
-	IntPtr.Zero -- can this happen?) is enough.
-
-	- reworked SendWMDestroyMessages slightly, so we always dispose
-	the child control hwnd's after sending the messages.
-	
-	- refactored out the ActiveWindow/FocusWindow/Caret clearing from
-	the two places it was used (one was even using hwnd.Handle and the
-	other hwnd.client_window.  ugh), adding another call in
-	SendWMDestroyMessages.  We need this new call because now the
-	DestroyNotify events in the queue will be ignored for the child
-	controls (as their hwnd's were disposed, and the window id's
-	removed from the hashtable in SendWMDestroyMessages.) fun, eh?
-
-	- this fixes bug #79326.
-
-2006-09-13  Chris Toshok  <toshok at ximian.com>
-
-	* Control.cs: don't always set is_recreating to false at the end
-	of RecreateHandle, since sometimes we're not done (and won't be
-	until WndProc handles the WM_DESTROY message).  Also, set
-	is_recreating to false in the WM_DESTROY handling code.  Part of
-	the fix for bug #79326.
-
-2006-09-13  Miguel de Icaza  <miguel at novell.com>
-
-	* X11DesktopColors.cs: Start the droppage of debugging messages.
-
-	* FileDialog.cs: Store the configuration file in ~/.mono/mwf_config
-
-2006-09-13  Jonathan Pobst <monkey at jpobst.com>
-
-	* SplitContainer.cs, SplitterPanel.cs: Initial implementation [2.0].
-
-2006-09-12  Chris Toshok  <toshok at ximian.com>
-
-	* DataGrid.cs (get_ListManager): if the list_manager is null, try
-	to create it using SetDataSource.  Fixes bug #79151.
-
-2006-09-11  Chris Toshok  <toshok at ximian.com>
-
-	* XEventQueue.cs: add a DispatchIdle property.
-
-	* XplatUIX11.cs (UpdateMessageQueue): only emit the Idle event if
-	either the queue is null, or the queue has DispatchIdle set to
-	true.
-	(DoEvents): set queue.DispatchIdle to false around the
-	peek/translate/dispatch message loop in this method.  This keeps
-	Application.Doevents from emitting idle events.  Part of the fix
-	for #78823.
-
-2006-09-11  Chris Toshok  <toshok at ximian.com>
-
-	* DataGrid.cs (set_DataSource): make this work for both the
-	winforms/datagrid test and ReportBuilder.  It seems as though when
-	we've created a ListManager (or maybe it's if we have a
-	BindingContext?), when we set the DataSource it clears the
-	DataMember to "".  otherwise we reuse the datamember.  Fixes bug
-	#79333.
-
-2006-09-11  Chris Toshok  <toshok at ximian.com>
-
-	* XplatUIX11.cs: deal with queue being null, which happens in all
-	the Clipboard functions.  Fixes one of the two problems mentioned
-	in #78612.
-
-2006-09-11  Chris Toshok  <toshok at ximian.com>
-
-	* MenuAPI.cs: rework OnMouseUp a bit so that releasing the mouse
-	button on various spots (including outside the menu) works closer
-	to MS, and doesn't crash.  Fixes #79343.
-
-2006-09-11  Gert Driesen  <drieseng at users.sourceforge.net>
-
-	* ListView.cs: Do not initialize item_sorter in init. To match MS,
-	return null for ListViewItemSorter if View is SmallIcon or LargeIcon
-	and the internal comparer is set. When a new ListViewItemSorter is set,
-	sort the items. Use Enum.IsDefined to verify whether a valid SortOrder
-	was specified. No further processing is necessary if SortOrder is set
-	to it's current value. If Sorting is modified to None, and View is
-	neither SmallIcon nor LargeIcon then: on 2.0 profile set item_sorter
-	(either custom or our internal ItemComparer) to null, on 1.0 profile
-	only set item_sorter to null if its our internal IComparer. If Sorting
-	is modified to Ascending or Descending, then use our internal IComparer
-	if none is set, and if the current IComparer is our internal one then:
-	on 2.0 profile always replace it with one for new Sorting, and on 1.0
-	profile only use new Sorting if view is not SmallIcon or LargeIcon. Use
-	Enum.IsDefined to verify whether a valid View value is specified in
-	its setter. Automatically sort listview items when listview is
-	created. In Sort, do nothing if ListView is not yet created, or if
-	no item_sorter is set (no Sorting was set, Sorting was explicitly set
-	to None or ListViewItemSorter was set to null). Added Sort overload
-	taking a bool to indicate whether the ListView should be redrawn when
-	items are sorted (we use this in ListViewItemCollection to avoid double
-	redraws). Modified our internal IComparer to take the sort order into
-	account. In Add and AddRange methods of ListViewItemCollection, also
-	call Sort if Sorting is None (necessary for SmallIcon and LargeIcon
-	view), but use overload with noredraw option to avoid double redraw.
-	On 2.0 profile, throw NotSupportedException when setting CheckBoxes to
-	true when View is Tile, and do the same when attempting to set View to
-	Tile when CheckBoxes is true. Avoid maintaining separate ArrayLists
-	for selected/checked indices, as it involves overhead when sorting is
-	done while these collections are not used all that often. Instead
-	we'll build the indices on demand. Modified IList implementation of
-	CheckedIndexCollection to use public methods if object is int.
-	Modified CheckedListViewItemCollection to hide checked items if
-	ListView.CheckBoxes is false. Removed LAMESPEC remark in 
-	ListViewItemCollection as the .NET SDK docs have been fixed. Modified
-	IList implementation in SelectedIndexCollection to use public methods
-	if object is int. Modified SelectedListViewItemCollection to hide
-	selected items if listview is not yet created.
-	* ListViewItem.cs: CheckedIndices list no longer needs to be
-	maintained separately (see ListView changes). Also clone font, fixes
-	test failure.
-
-2006-09-11  Mike Kestner  <mkestner at novell.com>
-
-	* ComboBox.cs: if we are updating the contents of the currently
-	selected index, refresh the control or the textbox selection.
-	[Fixes #79066]
-
-2006-09-11  Mike Kestner  <mkestner at novell.com>
-
-	* ComboBox.cs (UpdateBounds): use SetBounds not SetBoundsCore since 
-	the 'specified' logic has been moved there.  This seems like a bug 
-	in Control.cs, since our current SetBoundsCore completely ignores 
-	the specified parameter.  Peter's commit seems to indicate that is 
-	the way the MS control implementation works.  [Fixes #79325]
-
-2006-09-10  Jonathan Chambers  <joncham at gmail.com>
-
-	* XplatUI.cs: Set default_class_name to be composed
-	of current domain id. This allows MWF to be loaded in multiple
-	domains on Win32.
-
-2006-09-09  Miguel de Icaza  <miguel at novell.com>
-
-	* X11Keyboard.cs: If we are unable to obtain the input method, do
-	not call CreateXic to create the input context.   Should fix
-	#78944/79276.
-
-2006-09-08  Alexander Olk  <alex.olk at googlemail.com>
-
-	* MimeIcon.cs: Rewrote major parts. Dropped KDE support for now.
-	  Simplified gnome support by adding more pinvokes to get the
-	  icon for a file or mime type.
-
-2006-09-08  Jackson Harper  <jackson at ximian.com>
-
-	* MenuAPI.cs: Deslect popup context menu items before closing the
-	window, so that you don't see the previously selected item
-	selected when you reopen the menu.
-	* TextControl.cs: Update the cursor position even if we don't have
-	focus.  This fixes typing in things like the ComboBox.  I'm not
-	totally sure we should always set the visibility if we don't have
-	focus, but couldn't find any corner cases where the cursor showed
-	up when it shouldn't.
-
-2006-09-08  Chris Toshok  <toshok at ximian.com>
-
-	* X11Keyboard.cs: In UpdateKeyState vkey can be any integer, but
-	our arrays are length 256.  & 0xff before indexing.  Fixes the
-	crash in bug #78077.
-	
-2006-09-08  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* ThemeWin32Classic.cs: 
-	* DateTimePicker.cs: Draw check box if DateTimePicker.ShowCheckBox
-	is true. Handle that check box too.
-
-2006-09-07  Chris Toshok  <toshok at ximian.com>
-
-	* MenuAPI.cs: move the PerformClick call to OnMouseUp.  Fixes bug
-	79244.
-
-2006-09-07  Chris Toshok  <toshok at ximian.com>
-
-	* Control.cs: in set_BackColor only do the work if
-	background_color != value.
-
-	* XplatUIX11.cs: move the clearing of invalid areas (both client
-	and nc) to the same block of code where we set (nc_)expose_pending
-	to false.  That is, move it from PaintEventEnd to PaintEventStart,
-	so things that cause invalidates from within OnPaint will trigger
-	another call to OnPaint.  Fixes bug #79262.
-
-2006-09-07  Alexander Olk  <alex.olk at googlemail.com>
-
-	* Theme.cs: Use correct icon for UIIcon.PlacesPersonal
-	* FileDialog.cs: Fix typo
-
-2006-09-07  Jackson Harper  <jackson at ximian.com>
-
-	* ThemeWin32Classic.cs:  oops, forgot to commit.  Draw the images
-	for tab pages if they have any.
-
-2006-09-06  Mike Kestner  <mkestner at novell.com>
-
-	* Splitter.cs: use the "current" rect when finishing drag handle
-	to avoid an artifact demonstrated by resedit.exe.  [Fixes #79251]
-
-2006-09-06  Mike Kestner  <mkestner at novell.com>
-
-	* Splitter.cs: draw the drag handle at X or Y instead of 0 to deal
-	support offset splitters. [Fixes #79298]
-
-2006-09-06  Alexander Olk  <alex.olk at googlemail.com>
-
-	* Mime.cs: Fixed a bug that could override the global mime type
-	  result.
-
-2006-09-05  Jackson Harper  <jackson at ximian.com>
-
-	* TabControl.cs: Better calculation method for setting the slider
-	pos. Prevents crashes on really wide tabs.
-	- Draw Image on tab pages if an image list is used.
-
-2006-09-02  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* MonthCalendar.cs: When Font changes, the Size should be
-	updated to fit the new font's space requirements.
-
-2006-09-02  Alexander Olk  <alex.olk at googlemail.com>
-
-	* ListBox.cs: If the items are cleared with Items.Clear set
-	  top_index to 0.
-
-2006-09-01  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* MonthCalendar.cs: Handle arrow keys as input keys. Also
-	fire DateChanged event instead of DateSelected event when
-	the date was changed by keyboard interaction.
-
-2006-09-01  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* DateTimePicker.cs: Handle DateChanged for the associated
-	month_calendar control, and set month_calendar.Font from 
-	OnFontChanged method, as well as resize the height of the
-	control when needed. Make PreferredHeight proportional.
-
-2006-09-01  Chris Toshok  <toshok at ximian.com>
-
-	* DataGrid.cs: grr, stop overthinking the DataMember/DataSource
-	properties.
-
-	* BindingContext.cs (HashKey.GetHashCode): use ^ instead of +.
-
-2006-09-01  Peter Dennis Bartok  <pbartok at novell.com> 
-
-	* FileDialog.cs: Set ClientSize instead of window size, to allow space
-	  for decorations (Fixes #79219)
-
-2006-09-01  Mike Kestner  <mkestner at novell.com>
-
-	* ComboBox.cs: first stab at sorting plus some selection handling
-	fixes to bring us more in line with MS behavior.  Also switches back
-	to index based selection.  Alternative patches for index-based 
-	selection were provided by Jackson Harper, Carlos Alberto Cortez, 
-	and latency at gmx.de on bug 78848.  I assume they were similar to this
-	code I've had simmering in my tree forever.
-	[Fixes #78848]
-
-2006-09-01  Chris Toshok  <toshok at ximian.com>
-
-	* CurrencyManager.cs (ListChangedHandler): in the ItemAdded case,
-	when setting list position guard against ending up with a -1 index
-	(the other part of the fix for #78812).  Should probably make sure
-	we don't need the analogous fix in the ItemDeleted case.
-
-	* DataGrid.cs:
-	- in SetDataSource, work around the fact that the way
-	OnBindingContextChanged is invoked will cause us to re-enter this
-	method.  I'll remove the hack once I investigate
-	OnBindingContextChanged.
-
-	- fix the logic in set_DataSource and set_DataMember (basically
-	what to do if the other of the two is null.)
-	
-	- in OnListManagerItemChanged, we need to take into account the
-	edit row when deciding whether or not to call RecreateDataGridRows
-	(part of the fix for #78812).
-
-2006-09-01  Jackson Harper  <jackson at ximian.com>
-
-	* Splitter.cs: Don't do anything if there is no control to affect
-	(prevents us from crashing in weird tet cases).
-	* TreeView.cs: Bounding box for the mouse movement reverting
-	focus/selection back to previously selected node.  This matches
-	MS, and makes the tree a lot more useable.
-	* GroupBox.cs: Instead of drawing over the lines of the groupbox,
-	use clipping so they are not drawn.  This fixes when the control
-	is set to have a transparent background, or if it was over an
-	image.
-
-2006-09-01  Alexander Olk  <alex.olk at googlemail.com>
-
-	* MimeIcon.cs: Improved handling for reading default icons when
-	  using gnome (2.16 made it necessary). Check and read svg icons
-	  first, then 48x48 and then 32x32 icons.
-
-2006-08-31  Chris Toshok  <toshok at ximian.com>
-
-	* DataGridTextBoxColumn.cs: only hide the textbox if it's still
-	visible.
-
-	* DataGridTextBox.cs: Pass Tab's up to the datagrid by calling
-	ProcessKeyPreview.  Fixes part of #77806.
-
-	* DataGrid.cs: big patch.
-
-	- revert the queueing up of DataSource/DataMember if inside
-	BeginInit/EndInit calls.  That's not the way the datagrid achieves
-	its delayed databinding.  Instead, call SetDataSource in
-	OnBindingContextChanged.  This mimic's MS's behavior, and fixes
-	#78811.
-
-	- Also, it wasn't mentioned in #78811, but the test case exhibits
-	behavior that was lacking in our datagrid implementation - Columns
-	that have mapping names that don't exist in the datasource's
-	properties aren't shown.  Yuck.  To fix this I added the bound
-	field to the column style, and basically any calculation to figure
-	out anything about columns uses a loop to find the bound columns.
-	still need to investigate if I can cache an array of the bound
-	columns or if the indices must be the same.
-
-	- When setting CurrentCell, we no longer abort if the cell being
-	edited was in the add row.  This fixes the other part of #77806.
-
-	- The new code also fixes #78807.
-	
-	* ThemeWin32Classic.cs: perpetrate the same disgusting
-	column.bound field hack, and only render bound fields.
-
-2006-08-31  Chris Toshok  <toshok at ximian.com>
-
-	* DataGridColumnStyle.cs: add bound field.  this field is true if
-	the datasource has a property corresponding to the mapping name.
-
-	* DataGridTableStyle.cs: set the bound field on the column styles
-	depending on whether or not we have a column for that property.
-
-2006-08-31  Peter Dennis Bartok  <pbartok at novell.com> 
-
-	* Splitter.cs (SetBoundsCore): Don't ignore width/height of the 
-	  splitter control (fixes #79228)
-
-2006-08-31  Chris Toshok  <toshok at ximian.com>
-
-	* DataGridColumnStyle.cs: we need to delay the assignment of
-	property descriptor until the last possible moment due to the lazy
-	databinding stuff in the datagrid.  Also, fix the exceptions
-	thrown by CheckValidDataSource to match MS.
-
-2006-08-31  Jackson Harper  <jackson at ximian.com>
-
-	* Form.cs: When activated select the active control, if there is
-	no active control, we select the first control.
-	* XplatUIX11.cs: If there is no focus control when we get a
-	FocusIn event, find the toplevel form and activate it.  This
-	occurs when you popup a window, it becomes the focus window, then
-	you close that window, giving focus back to the main window.
-
-2006-08-21  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* MonthCalendar.cs: 
-	* ThemeWin32Classic.cs: Cache Font in bold style, as well
-	as StringFormat with Center alignments in MonthCalendar,
-	instead of creating new ones when drawing the control. 
-	Also, draw the month name in bold style.
-
-2006-08-30  Peter Dennis Bartok  <pbartok at novell.com> 
-
-	* Control.cs:
-	  - PerformLayout(): It would seem MS performs the fill even if the 
-	    control is not visible (part of #79218 fix)
-	  - ResetBackColor(): Use the setter to reset the color, to allow
-	    overriders to catch the change.
-	* Form.cs:
-	  - .ctor: Call UpdateBounds to adjust client rectangle (part of #79218 fix)
-	  - CreateHandle(): dito (part of $79218 fix)
-	  - Don't set an icon if we have a dialog
-	* ScrollableControl.cs:
-	  - set_AutoScrollMinSize: Setting the property enables AutoScroll (#79218)
-	  - ScrollIntoView(): No need to scroll if control is already visible
-	    (resolves fixme and fixes #79218)
-
-2006-08-30  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* MonthCalendar.cs: Change proportions in SingleMonthSize
-	to match the aspect of the original control.
-
-2006-08-29  Alexander Olk  <alex.olk at googlemail.com>
-
-	* XplatUIX11.cs: Fix for a metacity/X problem where windows don't
-	  get updated when they get maximized.
-
-2006-08-29  Peter Dennis Bartok  <pbartok at novell.com> 
-
-	* XplatUIX11.cs: Handle windows with no border (Fixes part of #79160)
-
-2006-08-29  Chris Toshok  <toshok at ximian.com>
-
-	* XplatUIX11.cs: when destroying the FocusWindow, send KILLFOCUS.
-
-2006-08-29  Jackson Harper  <jackson at ximian.com>
-
-	* TreeView.cs: Need to track selected node and highlighted node,
-	they aren't always the same thing, when the mouse is down on a
-	node it is hilighted, but not selected yet.
-	- Do the HideSelection stuff right
-	- Need to focus on rbutton mouse down. And redraw selection when
-	right click is mouse upped.
-
-2006-08-29  Mike Kestner  <mkestner at novell.com>
-
-	* ThemeWin32Classic.cs: draw selections for columns in FullRowSelect
-	when SubItems.Count < Columns.Count.  [Fixes #79167]
-
-2006-08-28  Peter Dennis Bartok  <pbartok at novell.com> 
-
-	* TextControl.cs (FindCursor): Fix math error (Fixes #78402)
-
-2006-08-28  Peter Dennis Bartok  <pbartok at novell.com>
-
-	* XplatUIX11.cs: Preempt the roundtrip for getting the location back
-	  from X. Only send based on ConfigureNotify if we don't have the
-	  correct location in hwnd (if the window manager moved us)
-
-2006-08-28  Mike Kestner  <mkestner at novell.com>
-
-	* ListView.cs: remove a TODO. 
-	* ThemeWin32Classic.cs: implement HideSelection support for ListView.
-	[Fixes ListView part of #79166]
-
-2006-08-28  Mike Kestner  <mkestner at novell.com>
-
-	* ListView.cs: move wheel handler to parent since it is focused
-	instead of the item_control now.  [Fixes #79177]
-
-2006-08-28  Mike Kestner  <mkestner at novell.com>
-
-	* ThemeWin32Classic.cs: only highlight subitems in fullrowselect
-	when the control is focused. [Fixes #79171]
-
-2006-08-28  Mike Kestner  <mkestner at novell.com>
-
-	* ListView.cs: size the item and header controls for empty and
-	unscrollable views.
-	* ThemeWin32Classic.cs: draw disabled backgrounds.
-	[Fixes #79187]
-
-2006-08-28  Chris Toshok  <toshok at ximian.com>
-
-	* Form.cs: remove unused "active_form" static field.
-
-	* Hwnd.cs: lock around accesses to static windows collection.
-
-	* Application.cs: lock threads in Exit ().
-
-2006-08-28  Chris Toshok  <toshok at ximian.com>
-
-	* NativeWindow.cs: lock around accesses to window_collection.
-	
-2006-08-28  Chris Toshok  <toshok at ximian.com>
-
-	* Control.cs: err, fix this the right way, by locking on controls
-	when using it.  not by making it synchronized.
-
-2006-08-28  Chris Toshok  <toshok at ximian.com>
-
-	* Control.cs: make the static "controls" field synchronized, as it
-	gets updated from multiple threads.
-
-2006-08-27  Peter Dennis Bartok  <pbartok at novell.com>
-
-	* XplatUIX11.cs: PostQuitMessage is thread-specific not app-specific.
-	  Prevent other threads from exiting when calling thread sets quit state.
-	* XEventQueue.cs: Added PostQuitState property
-
-2006-08-27  Chris Toshok  <toshok at ximian.com>
-
-	* AsyncMethodData.cs: add a slot for the window handle.
-
-	* XplatUIX11.cs (SendAsyncMethod): send the event to the right
-	window (the destination control's window, not the foster window).
-
-	* Control.cs (BeginInvokeInternal): store the window's handle in
-	the AsyncMethodData.
-	
-
-2006-08-27  Peter Dennis Bartok  <pbartok at novell.com>
-
-	* XplatUIX11.cs:
-	  - PostQuitMessage: Removed resetting S.D display handle, we might have
-	    another loop started after calling PostQuitMessage (Fixes #79119)
-	  - Created destructor to reset S.D handle
-
-2006-08-27  Peter Dennis Bartok  <pbartok at novell.com> 
-
-	* XplatUIX11.cs (SetCursor): Issue flush after setting the cursor (#79168)
-
-2006-08-23  Peter Dennis Bartok  <pbartok at novell.com>
-
-	* TextControl.cs (Insert): Update the caret position even if we don't
-	  have a handle yet, just don't call the driver in that case.
-	* TextBoxBase.cs (set_SelectedText): Set the Start and End selection
-	  to the end of the new selection text (Fixes #79184)
-
-2006-08-23  Peter Dennis Bartok  <pbartok at novell.com> 
-
-	* Form.cs (Activate): Only activate if the handle is created)
-	* Control.c:
-	  - Mark window as invisible when it's disposed
-	  - Check if window handle is created when setting window visible, 
-	    instead of relying just on the is_created variable
-	  - Check if object is disposed when creating the control (Fixes #79155)
-
-2006-08-23  Peter Dennis Bartok  <pbartok at novell.com>
-
-	* ScrollableWindow.cs (ScrollWindow): Don't actually perform layouting
-	  when allowing layout again. Otherwise we re-generate the anchoring 
-	  distance to the border again and actually alter what the user wanted
-	  This is ugly, it'd be better if we used DisplayRectangle instead of
-	  ClientRectangle for Control.UpdateDistances, but that causes us to
-	  have other problems (initial anchoring positons would be wrong)
-	  (Fixes #78835)
-
-2006-08-23  Peter Dennis Bartok  <pbartok at novell.com> 
-
-	* Control.cs:
-	  - The size and location setters shouldn't go directly to 
-	    SetBoundsCore, but to SetBounds, which triggers layout on the
-	    parent, then calls SetBoundsCore. (Related to fix for #78835)
-	  - SetBounds: Moved actual location update code into this function
-	    from SetBoundsCore, to match MS. Added call to PerformLayout if
-	    we have a parent (to trigger resizing of anchored parents if the 
-	    child size has changed (see testcase for #78835) 
-	* ListBox.cs, Form.cs: Call SetBounds instead of SetBoundsCore to match 
-	  new control code
-	* ScrollableControl.cs (CalculateCanvasSize): Use shortcut variable
-
-2006-08-23  Peter Dennis Bartok  <pbartok at novell.com>
-
-	* XplatUIX11.cs: Don't reset the DisplayHandle that's stored in
-	  System.Drawing when a toplevel window gets closed; there might
-	  be other toplevel windows belonging to the same app (Fixes #78052)
-
-2006-08-26  Alexander Olk  <alex.olk at googlemail.com>
-
-	* FileDialog.cs: After reading FileDialog settings from mwf_config
-	  use Desktop prefix only if a real folder doesn't exist anymore.
-	* FontDialog.cs: Added char sets.
-	  It is now possible to select the font, size or style with the
-	  textboxes.
-
-2006-08-25  Kornél Pál  <kornelpal at gmail.com>
-
-	* PrintPreviewDialog.cs: Use assembly name constants.
-
-2006-08-23  Peter Dennis Bartok  <pbartok at novell.com>
-
-	* XplatUIWin32.cs (ScrollWindow): Use clipping rectangle arg (prevents
-	  scrollbar from whacking it's buttons)
-
-2006-08-24  Chris Toshok  <toshok at ximian.com>
-
-	* ScrollableControl.cs: fix #78271.  There's a lot of misc stuff
-	in this patch (aggregating setting Left/Top/Width/Height to
-	setting Bounds on the scrollbars), but the crux of the fix is in
-	Recalculate, where we scroll by the remaining scroll_position if
-	we're hiding a scrollbar.  The 2*$5 reward in the comment is
-	serious.
-
-2006-08-24  Jackson Harper  <jackson at ximian.com>
-
-	* MdiClient.cs:
-	* MdiWindowManager.cs: If the form is made a non-mdi window we
-	need to remove the form closed event so that closing forms works
-	correctly.
-
-2006-08-24  Jackson Harper  <jackson at ximian.com>
-
-	* Control.cs: Make IsRecreating internal so that the driver can
-	check it
-	- Temporarily remove the Hide when controls are removed, its
-	making a whole bunch of things not work because visibility isn't
-	getting reset elsewhere correctly
-	* Form.cs: Need to do a full handle recreation when the mdi parent
-	is set.
-	* XplatUIX11.cs: If we are recreating handles don't dispose the
-	HWNDs.  What was happening is the handles were being recreated in
-	SendWMDestroyMessages, but then flow continued on in that method
-	and destroyed the new handles.
-
-2006-08-23  Jackson Harper  <jackson at ximian.com>
-
-	* Form.cs: MdiClient is always at the back of the bus
-	* Control.cs: When the order of items in the collection is changed
-	we need to reset the all_controls array
-	- do the same sorta setup thats done when adding a control when a
-	control is set on the collection.
-
-2006-08-23  Peter Dennis Bartok  <pbartok at novell.com>
-
-	* TextBoxBase.cs (get_Text): Return an empty array if our document
-	  is empty (fixes #79052)
-
-2006-08-23  Peter Dennis Bartok  <pbartok at novell.com> 
-
-	* Control.cs: We should call IsInputChar on only on WM_CHAR but not
-	  on WM_SYSCHAR messages (fixes #79053)
-
-2006-08-23  Chris Toshok  <toshok at ximian.com>
-
-	* DataGrid.cs: fix flickering when scrolling vertically.
-
-2006-08-23  Chris Toshok  <toshok at ximian.com>
-
-	* DataGrid.cs (EndEdit): only invalidate the row header when we
-	need to.
-
-2006-08-23  Chris Toshok  <toshok at ximian.com>
-
-	* ThemeWin32Classic.cs: fix the clip munging of the datagrid paint
-	methods.  fixes the flicker when scrolling around.
-
-2006-08-23  Peter Dennis Bartok  <pbartok at novell.com> 
-
-	* FileDialog.cs: Making sure the control is created before we get a 
-	  chance to use it with BeginInvoke (Fixes #79096)
-
-2006-08-23  Chris Toshok  <toshok at ximian.com>
-
-	* ThemeWin32Classic.cs (DataGridPaintRows): calculate the proper
-	width to use when painting the rows.
-
-2006-08-23  Peter Dennis Bartok  <pbartok at novell.com> 
-
-	* TextBoxBase.cs:
-	  - Throw ArgumentException if a negative value is passed to SelectionLength
-	  - Update the selection end if start is moved. end needs to be always
-	    after start. (Fixes #79095)
-	  - Track selection length; MS keeps the selection length even if start
-	    is changed; reset on all other operations affection selection
-
-2006-08-22  Jackson Harper  <jackson at ximian.com>
-
-	* TreeView.cs: Make sure both scrollbars get displayed and sized
-	correctly when the other bar is visible.
-	- Use the original clip rectangle for checking if the area between
-	the two scrollbars is visible, not the viewport adjusted clipping
-	rectangle.
-
-2006-08-22  Jackson Harper  <jackson at ximian.com>
-
-	* Binding.cs: We don't use IsBinding because it requires the
-	control to be created, which really shouldn't be necessary just to
-	set a property on the control.
-
-2006-08-21  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* ComboBox.cs: Some CB.ObjectCollection methods must throw
-	ArgumentNullReferenceException when the argument is null.
-
-2006-08-21  Jackson Harper  <jackson at ximian.com>
-
-	* Timer.cs: Track the thread that the timer is started in (NOT
-	CREATED), this way messages for it will only be triggered on its
-	queue.
-	* XEventQueue.cs: Track the timers here, this makes timers per
-	thread, like MS.
-	* XplatUIX11.cs: The timers are moved to the XEventQueue.
-
-2006-08-19  Chris Toshok  <toshok at ximian.com>
-
-	* XplatUIX11.cs: after further communication with pdb, we get the
-	best of both worlds.  SetZOrder working for un-Mapped windows, and
-	no X errors for un-mapped windows.
-
-2006-08-19  Chris Toshok  <toshok at ximian.com>
-
-	* XplatUIX11.cs (SetZOrder): remove the if (!hwnd.mapped) check,
-	as it was causing pdn toolbars to not have the correct stacking.
-
-2006-08-18  Mike Kestner  <mkestner at novell.com> 
-
-	* ListView.cs : guard against negative ClientArea.Width in scrollbar
-	calculation.  Not sure why control should ever be setting a negative
-	width though.  Fixes #78931.
-
-2006-08-18  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* ComboBox.cs: Throw ArgumentNullException when adding/modifyng
-	null items in ObjectCollection class.
-	* ListBox.cs.: Likewise.
-
-2006-08-18  Atsushi Enomoto  <atsushi at ximian.com>
-
-	* ThemeNice.cs, ThemeClearlooks.cs : remove RadioButton_DrawFocus()
-	  as the base method in ThemeWin32Classic should work fine.
-	  Fixed bug #78607.
-
-2006-08-18  Jackson Harper  <jackson at ximian.com>
-
-	* Binding.cs: When validating if the value entered doesn't convert
-	properly reset to the old value.
-	* RadioButton.cs: Don't fire click when we get focus.
-
-2006-08-18  Jackson Harper  <jackson at ximian.com>
-
-	* FileDialog.cs: Paint the selection on the directory combobox the
-	same way as on MS. 
-
-2006-08-17  Jackson Harper  <jackson at ximian.com>
-
-	* ErrorProvider.cs: Don't allow the error control to be selected.
-	* Control.cs: Don't send the SetFocus messages, the control
-	activation will do this, and if we do it blindly here validation
-	does not work.
-
-2006-08-17  Jackson Harper  <jackson at ximian.com>
-
-	* Control.cs:
-	* ContainerControl.cs: Make validation events fire in the correct
-	order.  TODO: For some reason the first validation event is not
-	getting fired.
-
-2006-08-17  Mike Kestner  <mkestner at novell.com> 
-
-	* ComboBox.cs : some null guarding for ComboListBox.Scroll.
-
-2006-08-17  Mike Kestner  <mkestner at novell.com> 
-
-	* ComboBox.cs : implement scroll wheel support for popped-down
-	state. Fixes #78945. 
-
-2006-08-17  Jackson Harper  <jackson at ximian.com>
-
-	* TreeView.cs: Specify treeview actions (old patch that didn't get
-	committed for some reason).
-	- Don't let the mouse wheel scroll us too far.  Just want to make
-	the bottom node visible, not scroll it all the ways to the top.
-
-2006-08-17  Jackson Harper  <jackson at ximian.com>
-
-	* XplatUIX11.cs: Mouse wheel events go to the focused window.
-
-2006-08-17  Mike Kestner  <mkestner at novell.com> 
-
-	* ComboBox.cs : don't do mouseover selection in simple mode.
-
-2006-08-16  Jackson Harper  <jackson at ximian.com>
-
-	* Form.cs: Fire the closing events for all the mdi child windows
-	when a window is closed.  If the cancel args are set to true, the
-	main window still gets the event fired, but it doesn't not close.
-	* MdiWindowManager.cs: Do this closing cleanup in a Closed
-	handler, instead of when the button is clicked, so cancelling the
-	close works correctly.
-	* ComboBox.cs: Send the mouse down to the scrollbar.
-
-2006-08-16  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* ListBox.cs: When passing 'null' to SelectedItem,
-	set SelectedIndex to -1, to unselect items. This is the
-	observed behaviour in .Net.
-
-2006-08-16  Peter Dennis Bartok  <pbartok at novell.com> 
-
-	* TextBoxBase.cs: Overriding HandleClick to get clicks in spite of
-	  MS flags saying there won't be any. (fixes #78800)
-	* Control.cs (HandleClick): Made virtual
-
-2006-08-16  Atsushi Enomoto  <atsushi at ximian.com>
-
-	* PageSetupDialog.cs : use Yard-Pound units only in en-GB and en-US
-	  cultures. Fixed bug #78399.
-
-2006-08-16  Jackson Harper  <jackson at ximian.com>
-
-	* Form.cs: Use the MdiClients MdiChildren property to access
-	MdiChildren instead of creating the array from the child controls.
-	* MdiClient.cs: Maintain a separate array of the mdi children, so
-	that insertion order is maintained when the Z-order is changed.
-
-2006-08-16  Mike Kestner  <mkestner at novell.com> 
-
-	* ListView.cs : add an ItemComparer and default to it for sorting.
-	Fixes #79076, but sorting needs a complete overhaul to be compat with
-	MS.
-
-2006-08-15  Peter Dennis Bartok  <pbartok at novell.com> 
-
-	* XplatUIX11.cs (SetZOrder): Fix debugging leftover (fixes #79080)
-
-2006-08-15  Peter Dennis Bartok  <pbartok at novell.com>
-
-	* Hwnd.cs (Mapped): Properly traverse the tree
-
-2006-08-15  Chris Toshok  <toshok at ximian.com>
-
-	* Binding.cs: fix PullData/SetPropertyValue.  We don't want to
-	pass manager.Current.GetType() to ParseData.  It has to be the
-	property type.  So, hold off doing the ParseData until we're in
-	SetPropertyValue where we know the type.  This fixes the crash in
-	#78821 but the textbox is still empty.
-
-2006-08-15  Chris Toshok  <toshok at ximian.com>
-
-	* DataGrid.cs:
-	- when we're scrolling, only call Edit() again if the
-	current cell is still unobscured. Fixes bug #78927.
-	- when handling mousedown on a cell, ensure the cell is visible
-	before calling Edit.
-	- remove the properties from DataGridRow, and remove the
-	DataGridParentRow class altogether.
-	
-
-2006-08-15  Peter Dennis Bartok  <pbartok at novell.com>
-
-	* TextBoxBase.cs (set_Text): Don't use base.Text, instead just
-	  fire OnTextChanged by ourselves. There's no point calling base,
-	  we don't set the base value anywhere else. Fixes #78773.
-
-2006-08-15  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* ListBox.cs: Call CollectionChanged when modifying
-	an item from Items indexer, to update the actual items
-	in the list box.
-
-2006-08-15  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* PrintDialog.cs: Small fixes for focus and a pair of checks,
-	to match .Net behaviour.
-
-2006-08-15  Peter Dennis Bartok  <pbartok at novell.com>
-
-	* XplatUIX11.cs (SetZOrder): Handle raising toplevel windows
-
-2006-08-15  Peter Dennis Bartok  <pbartok at novell.com> 
-
-	* Control.cs: Handle BringToFront for toplevel windows (Fixes #78737)
-
-2006-08-15  Peter Dennis Bartok  <pbartok at novell.com>
-
-	* MessageBox.cs: Prevent potential NRE exception.
-	* TextBoxBase.cs: AutoSize only applies if MultiLine is false. Fixes #78889
-
-2006-08-14  Peter Dennis Bartok  <pbartok at novell.com>
-
-	* MessageBox.cs: Calculate the owner of a messagebox, also make
-	  it topmost. Fixes #78753
-
-2006-08-14  Chris Toshok  <toshok at ximian.com>
-
-	* XplatUIX11.cs: A couple of fixes so that metacity will let us
-	programmatically move windows.  first, set the PPosition hint as
-	well as the USPosition hint.  Second include some code from pdb
-	that sets the window type to NORMAL when we set the transient for
-	hint.  This is because, in the absence of a window type, metacity
-	thinks any window with TransientFor set is a dialog, and refuses
-	to let us move it programmatically.  fascists.
-
-2006-08-14  Peter Dennis Bartok  <pbartok at novell.com>
-
-	* XplatUIX11.cs: When setting normal hints, take into consideration
-	  an different hints previously set so we don't delete them (fixes #78866)
-
-2006-08-12  Chris Toshok  <toshok at ximian.com>
-
-	* ToolBarButton.cs: make Layout return a boolean, if something to
-	do with the button's layout changed.
-
-	* ToolBar.cs:
-	- add another parameter to Redraw, @force, which all existing
-	  calls set to true.
-	- make the Layout function return a boolean which is true if the
-	  layout has actually changed.  Redraw now uses this (and @force)
-	  to determine when to invalidate.  At present the only place
-	  where @force can be false is the call from OnResize, when
-	  background_image == null.  So, resizing a toolbar when the
-	  layout doesn't change results in no drawing.
-
-2006-08-12  Chris Toshok  <toshok at ximian.com>
-
-	* ThemeWin32Classic.cs: fix the bottom right corner painting.  had
-	the VScrollBar and HScrollbar reversed.  oops.
-
-	* DataGrid.cs: fix the logic that assigns sizes to the implicit
-	scrollbars.  we were assigning them twice (once in
-	Calc{Horiz,Vertical}Scrollbar, and once in CalcGridAreas),
-	therefore causing two scrollbar resizes (and redraws?) to happen
-	per grid resize.
-
-2006-08-12  Chris Toshok  <toshok at ximian.com>
-
-	* ToolBarButton.cs: redraw the entire button if the theme tells us
-	to.
-
-	* Theme.cs: add ToolBarInvalidateEntireButton.
-
-	* ThemeWin32Classic.cs: we don't need to redraw the entire toolbar
-	buttons, just the border.
-
-	* ThemeNice.cs: redraw the entire toolbar button since we need to
-	draw the highlight image.
-
-	* ThemeClearlooks.cs: the rounded corners of toolbar buttons mean
-	we need to redraw the entire button (not just the border).
-
-2006-08-11  Peter Dennis Bartok  <pbartok at novell.com>
-
-	* TextBoxBase.cs (CalculateScrollbars): Set the proper thumb size
-	  for vertical bars. Fixes the mismatches shown by #78513
-
-2006-08-11  Alexander Olk  <alex.olk at googlemail.com>
-
-	* FileDialog.cs: If a saved/remembered path doesn't exist
-	  anymore, fall back to "Desktop".
-
-2006-08-11  Peter Dennis Bartok  <pbartok at novell.com>
-
-	* Form.cs (CreateParams): Don't use Parent.Handle unless we have a
-	  parent. It's apparently legal to not have one
-	* XplatUIX11.cs:
-	  - SetZOrder: Don't try to set Z-Order on an unmapped window
-	  - CreateWindow: 0,0 are legal coordinates for a window. don't move
-	    it unless the coordinates are negative
-
-2006-08-10  Mike Kestner  <mkestner at novell.com>
-
-	* ListControl.cs: allow null for DataSource.  Clear DisplayMember
-	when setting to null per msdn docs.  Fixes #78854.
-
-2006-08-10  Chris Toshok  <toshok at ximian.com>
-
-	* Menu.cs, MainMenu.cs, MenuAPI.cs: get rid of most of the
-	flickering by setting a clip rectangle on the Graphics when we
-	need to redraw just a particular menuitem.  Also, rename "OnClick"
-	to "OnMouseDown" to reflect what it actually is.
-	
-	* Form.cs: track the OnMouseDown change.
-
-2006-08-10  Peter Dennis Bartok  <pbartok at novell.com>
-
-	* CommonDialog.cs: Properly inherit the CreateParams from the form
-	  and only change what we need. Fixes #78865
-
-2006-08-10  Chris Toshok  <toshok at ximian.com>
-
-	* ToolBar.cs, ToolBarButton.cs: fix the redraw-on-highlight
-	flickering in flat mode (and most of the flickering in general) by
-	only invalidating the button border (and not the entire rectangle)
-	when the state changes.  A couple of cases still flicker:
-	ToggleButtons, and the dropdown arrow case when the user mouse
-	ups.
-
-2006-08-10  Alexander Olk  <alex.olk at googlemail.com>
-
-	* X11Keyboard.cs: Fixed handling of the Del key on the cursorblock
-	  for german keyboards. Numlock state shouldn't affect the behaviour
-	  of the Del key. Fixes bug #78291.
-
-2006-08-10  Chris Toshok  <toshok at ximian.com>
-
-	* ListControl.cs: remove the items.Clear line from BindDataItems,
-	as this is the first thing done by both subclasses in their
-	SetItemsCore overrides.  Also, add a ItemChanged handler, and when
-	passed -1, refresh the list.  This gets databinding working when
-	the datasource is set on the list before the datasource is
-	populated (as in wf-apps/ReportBuilder.)
-
-	* ComboBox.cs: remove the argument to BindDataItems.  This call
-	should really go away, and be initiated by the ListControl code.
-
-	* ListBox.cs: same.
-
-2006-08-09  Peter Dennis Bartok  <pbartok at novell.com>
-
-	* TextControl.cs (Document.ctor): Initialize caret so we don't crash
-	  if no data is in the document when the control is displayed
-
-2006-08-09  Peter Dennis Bartok  <pbartok at novell.com> 
-
-	* TextBoxBase.cs: Don't try moving the caret if we don't have a window
-	  yes (fixes #78806)
-	* TextControl.cs: 
-	  - PositionCaret: Allow positioning of caret but don't call methods 
-	    requiring a handle if the window isn't created yet
-	  - CharIndexToLineTag: Fix ending loop early error. Lines is 1 based
-	  - owner_HandleCreated: Don't position the caret, just update it's 
-	    location. User might have already set a different position
-
-2006-08-09  Peter Dennis Bartok  <pbartok at novell.com>
-
-	* XplatUIWin32.cs: Don't use the desktop as basis for foster-parented
-	  windows. Screws up the returned coordinates for child windows. 
-	  Fixes #78825. I'm hoping this doesn't break something, since the
-	  code was explicitly put in 8 months ago, but no bug was attached.
-	  Menus still seem to work properly.
-
-2006-08-08  Chris Toshok  <toshok at ximian.com>
-
-	* DataGrid.cs: make BeginInit/EndInit actually do what they're
-	supposed to do - delay data binding until the EndInit call.  Also,
-	make the table style collection's CollectionChangeAction.Refresh
-	work properly.
-
-	* GridTableStylesCollection.cs: raise a CollectionChangeEvent
-	(with action = Refresh) when a consituent table's MappingName is
-	changed.
-
-2006-08-08  Chris Toshok  <toshok at ximian.com>
-
-	* ToolBarButton.cs: in set_Text, call Parent.Redraw, not
-	Invalidate, since changing the text can change the size of the all
-	toolbar buttons.
-
-2006-08-08  Peter Dennis Bartok  <pbartok at novell.com>
-
-	* Form.cs (AddOwnedForm): Still need to add the form to our listif
-	  we don't have it yet
-
-2006-08-08  Chris Toshok  <toshok at ximian.com>
-
-	* PrintControllerWithStatusDialog.cs: don't .Close() the status
-	dialog, as this causes X errors later on, since we actually
-	destroy the window.  Instead, .Hide() it.
-
-2006-08-08  Peter Dennis Bartok  <pbartok at novell.com>
-
-	* ComboBox.cs: Added focus reflection for popup window
-	* XplatUIX11.cs: 
-	  - Removed transient setting for non-app windows for now, not sure it
-	    was needed
-	  - Fixed logic checking if we have captions when deciding 
-	    override_redirect, WS_CAPTION is two bits and a 0 check was not
-	    sufficient
-	  - Removed the WINDOW_TYPE stuff, it was unneeded and making things
-	    complicated
-	* Form.cs: 
-	  - AddOwnedForm: Don't just add the form to the list, call the property
-	    to ensure the driver is informed about the ownership as well
-	  - CreateHandle: Set the TopMost status in the driver if we have an owner
-	* XplatUI.cs: Fixed debug statement
-
-2006-08-08  Jonathan Pobst <monkey at jpobst.com>
-	* ButtonRenderer.cs, CheckBoxRenderer.cs, ComboBoxRenderer.cs
-	  GroupBoxRenderer.cs, ProgressBarRenderer.cs, RadioButtonRenderer.cs,
-  	  ScrollBarRenderer.cs, TabRenderer.cs, TextBoxRenderer.cs, 
-	  TrackBarRenderer.cs: Make constructor private.
-	* ProfessionalColors.cs, ProfessionalColorTable.cs: Fix misnamed properties.
-	* ProfessionalColorTable.cs: Make properties virtual.
-
-2006-08-06  Duncan Mak  <duncan at novell.com>
-
-	* NumericUpDown.cs (Value): Don't call OnValueChanged if the value
-	is not changing.
-
-2006-08-04  Jonathan Pobst <monkey at jpobst.com>
-	* ButtonRenderer.cs, CheckBoxRenderer.cs, ComboBoxRenderer.cs
-	  GroupBoxRenderer.cs, ProfessionalColors.cs, ProfessionalColorTable.cs,
-	  ProgressBarRenderer.cs, RadioButtonRenderer.cs, ScrollBarRenderer.cs,
-	  TabRenderer.cs, TextBoxRenderer.cs, TextRenderer.cs, TrackBarRenderer.cs:
-	  Initial import of new 2.0 classes.
-
-2006-08-04  Jonathan Pobst <monkey at jpobst.com>
-	* Application.cs: Add 2.0 VisualStyles properties.
-
-2006-08-04  Jonathan Pobst <monkey at jpobst.com>
-	* XplatUI.cs, XplatUIDriver.cs, XplatUIOSX.cs, XplatUIWin32.cs,
-	  XplatUIX11.cs: Create property to allow access to existing private
-	  variable "themes_enabled"
-
-2006-08-04 Gonzalo Paniagua Javier <gonzalo at ximian.com>
-
-	* ImageListStreamer.cs: generate the MemoryStreams with the exact BMP
-	file size, as otherwise our class libraries fail using windows. Fixes
-	bug #78759.
-
-2006-08-04  Jackson Harper  <jackson at ximian.com>
-
-	* Form.cs:
-	* XplatUIX11.cs: Move the toolwindow window manager creation into
-	the X11 driver, this way on win32 we can let windows create/handle
-	the toolwindows.
-
-2006-08-04  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* PrintDialog.cs: Remove some redundant checks, add some others,
-	clean some code, and move the focus to the text boxes when the
-	values are incorrect.
-
-2006-08-04  Alexander Olk  <alex.olk at googlemail.com>
-
-	* FontDialog.cs: Remove Form.MinimumSize. It's not needed.
-
-2006-08-03  Alexander Olk  <alex.olk at googlemail.com>
-
-	* NumericUpDown.cs: Setting the Minimum and Maximum is now
-	  handled correctly. Fixes bug #79001.
-
-2006-08-03  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* PrintDialog.cs: The "Copies" numeric up down must have
-	set the Minimum property to 1; only if the value is bigger
-	than 1, activate "Collate" check box. This is the behaviour of .Net.
-	Also modify the Document elements only if it is not null.
-
-2006-08-03  Jackson Harper  <jackson at ximian.com>
-
-	* TreeNodeCollection.cs: Fix copyto to use the correct nodes
-	length. (We have a larger array then actual node count).
-		
-2006-08-03  Jackson Harper  <jackson at ximian.com>
-
-	* ComboBox.cs: Don't show selection by default.
-	- The SelectAll isn't needed here, since the focus code should do
-	that
-	- DDL style lists to manual selection drawing, so when they
-	get/lose focus they have to invalidate.
-
-2006-08-03  Peter Dennis Bartok  <pbartok at novell.com>
-
-	* TextBoxBase.cs: Don't always show all selections by default.
-
-2006-08-03  Jonathan Pobst  <monkey at jpobst.com>
-	* ControlUpdateMode.cs, DataSourceUpdateMode.cs,
-	  HelpNavigator.cs, WebBrowserEncryptionLevel.cs:
-	  Fixed various typos.
-
-2006-08-03  Alexander Olk  <alex.olk at googlemail.com>
-
-	* Control.cs: Removing the controls in a ControlCollection with
-	  Clear now hides the controls as expected. Fixes bug #78804. 
-
-2006-08-03  Jackson Harper  <jackson at ximian.com>
-
-	* Control.cs: Revert previous focus patch, it breaks reflector.
-
-2006-08-03  Jackson Harper  <jackson at ximian.com>
-
-	* ComboBox.cs: Cleanup selection and focus with the combobox.
-	This also eliminates some duplicated keyboard code, since now
-	everything is handled by the main class.
-	- Make list selection work on mouse up instead of down, to match
-	MS.
-
-2006-08-02  Jackson Harper  <jackson at ximian.com>
-
-	* Control.cs: Setting focus needs to go through the whole
-	selection mechanism.
-
-2006-08-02  Chris Toshok  <toshok at ximian.com>
-
-	* PrintPreviewDialog.cs: change MinimumSize to use
-	base.MinimumSize so it works.
-
-2006-08-02  Peter Dennis Bartok  <pbartok at novell.com>
-
-	* TextControl.cs:
-	  - UpdateCaret: Added sanity check in case caret isn't defined yet
-	  - Line.Delete: Now updating selection and caret markers if we're
-	    transfering a node (Properly fixes #78323)
-	  - SetSelectionEnd: Added sanity check
-	* TextBoxBase.cs: Removed broken attempt to fix #78323
-
-2006-08-01  Chris Toshok  <toshok at ximian.com>
-
-	* PrintPreviewDialog.cs: the CancelEventArgs stuff surrounding the
-	Close() call is handled in Form, not here.
-
-2006-08-01  Chris Toshok  <toshok at ximian.com>
-
-	* Theme.cs, ThemeWin32Classic.cs: fix the PrintPreviewControl
-	layout/rendering.
-
-	* PrintPreviewDialog.cs: add scrollbars, and add an image cache
-	for sizes < 100% zoom.  The code now aggressively attempts to keep
-	from calling document.Print (), and tries not to use the scaling
-	g.DrawImage whenever possible (it still does if you scale to >
-	100%, since usually that involves huge images).
-
-	* PrintPreviewControl.cs: hook up the close button.
-
-2006-08-01  Jonathan Pobst  <monkey at jpobst.com>
-	* ColumnClickEventHandler.cs, DrawItemEventHandler.cs,
-	  ItemChangedEventHandler.cs, ItemCheckEventHandler.cs,
-	  ItemDragEventHandler.cs, LabelEditEventHandler.cs,
-	  LinkClickedEventHandler.cs, LinkLabelLinkClickedEventHandler.cs,
-	  MeasureItemEventHandler.cs, MethodInvoker.cs, PaintEventHandler.cs,
-	  PropertyTabChangedEventHandler.cs, PropertyValueChangedEventHandler.cs,
-	  SelectedGridItemChangedEventHandler.cs, ToolBarButtonClickEventHandler.cs:
-	  Removed [Serializable] for 2.0 Event Handlers.
-
-2006-07-31  Jackson Harper  <jackson at ximian.com>
-
-	* TextBoxBase.cs: Make ShowSelection invalidate when changed.
-	* TextControl.cs: Uncomment out the body of this method.
-
-2006-07-31  Alexander Olk  <alex.olk at googlemail.com>
-
-	* XplatUIX11.cs: Use the correct cursor shapes for arrow and default
-	  standard cursors.
-
-2006-07-31  Peter Dennis Bartok  <pbartok at novell.com>
-
-	* TextBoxBase.cs: Added internal property ShowSelection to allow controls
-	  that embed TextBox and need selections visible even if textbox is not
-	  focused to enforce that behaviour.
-	* TextControl.cs (Draw): Use ShowSelection instead of has_focus to determine
-	  selection drawing
-
-2006-07-31  Peter Dennis Bartok  <pbartok at novell.com>
-
-	* TextControl.cs:
-	  - Added new SetSelectionStart/SetSelectionEnd overloads
-	  - Fixed viewport width assignment to be accurate
-	  - Adjusted alignment line shift calculations to allow cursor on right
-	    aligned lines to be always visible at the right border (like MS)
-	* TextBoxBase.cs:
-	  - SetBoundsCore: Re-adjust caret location after resize (Fixes #78323)
-	  - TextBoxBase_SizeChanged: recalculating canvas on size changes
-	  - CalculateScrollBars: Use ViewPort size instead of window size, to
-	    properly consider space occupied by the border and scrollbars 
-	    (Fixes #78661)
-	  - hscroll_ValueChanged, vscroll_ValueChanged: Fixed scroll 
-	    calculations; no longer leaves artifacts
-	  - CaretMoved: Adjusted window scrolling to match MS and fixed several
-	    calculation bugs (Still missing right/center align calculations)
-
-2006-07-31  Peter Dennis Bartok  <pbartok at novell.com> 
-
-	* XPlatUIWin32.cs: Made ScrollRectEx a bit more flexible, and removed
-	  use of both scroll rect and clip rect, as they do the same.
-
-2006-07-31  Peter Dennis Bartok  <pbartok at novell.com>
-
-	* Control.cs (WM_CHAR WndProc): 2.0 profile allows changing the key 
-	  in the event handler (fixes #78912)
-
-2006-07-31  Chris Toshok  <toshok at ximian.com>
-
-	* ThemeWin32Classic.cs: use grid.RowsCount here instead of
-	grid.ListManager.Count, since grid.ListManager might be null.
-	This of course begs the question "why are we drawing rows for a
-	grid with no list manager (and therefor no rows)?"  Fixes the
-	crash in bug #78929.
-
-2006-07-31  Chris Toshok  <toshok at ximian.com>
-
-	* RelatedPropertyManager.cs: Don't always chain up to the parent
-	ctor.  instead, call SetDataSource if the parent's position is !=
-	-1.  Fixes the crash in #78822.
-
-2006-07-31  Chris Toshok  <toshok at ximian.com>
-
-	* DataGrid.cs (get_ListManager): use field instead of property
-	accessors for datasource and datamember.
-	(RowsCount): make internal again.
-	(OnMouseDown): end edits before resizing columns/rows.
-	(OnMouseUp): restart edits after resizing columns/rows.
-
-2006-07-30  Peter Dennis Bartok  <pbartok at novell.com>
-
-	* XplatUIX11.cs: Default cursor cannot be 0 or it will not get set.
-	  This fixes the situation where the last set cursor is displayed
-	  whenever the mouse is over scrollbars.
-
-2006-07-30  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* PrintDialog.cs: Fix the behaviour of PrinterSettings and
-	Document properties, as well as initial values.
-
-2006-07-29  Peter Dennis Bartok  <pbartok at novell.com>
-
-	* XplatUIWin32.cs (SetBorderStyle): Setting both border
-	  and ClientEdge results in a 3-pixel border, which is
-	  wrong.
-
-2006-07-28  Jackson Harper  <jackson at ximian.com>
-
-	* TreeNodeCollection.cs: Fix the clear method.
-	- Fix the Shrink also
-
-2006-07-27  Jackson Harper  <jackson at ximian.com>
-
-	* TreeView.cs: Make sure the visible order is computed when we
-	attempt to size the scrollbars (for trees that mess with the
-	scrolling when they shouldn't.
-	- Make sure to give the scrollbars valid values.
-
-2006-07-26  Peter Dennis Bartok  <pbartok at novell.com> 
-
-	* XplatUIX11.cs: Move motion compression code to where it
-	  has less performance impact
-
-2006-07-26  Jackson Harper  <jackson at ximian.com>
-
-	* UpDownBase.cs: When the control is selected make the child
-	controls non selectable, so that a click on them won't do a
-	focus/unfocus cycle.
-	- Don't give focus to the text box when the spinner is selected.
-	* XEventQueue.cs: Peek on both the x11 queue and the lock queue.
-
-2006-07-26  Chris Toshok  <toshok at ximian.com>
-
-	* ThemeWin32Classic.cs: add print preview rendering.  I'm not
-	satisfied with this solution.  If the bitmaps are small, we should
-	just cache them in the PrintPreviewDialog and draw them here.
-	Also, the layout is broken for the 2-up and 3-up cases.
-
-	* Theme.cs: add PrintPReviewControlPaint.
-
-	* PrintPreviewDialog.cs: first pass implementation.
-
-	* PrintPreviewControl.cs: first pass implementation.  No
-	scrollbars yet.
-
-	* PrintDialog.cs: only validate fields if that particular portion
-	of the UI is enabled.  Also, set the document's controller to a
-	PrintControllerWithStatusDialog wrapping the document's print
-	controller.
-
-	* PrintControllerWithStatusDialog.cs: if we're printing to a file,
-	bring up a SaveFileDialog (i hope we don't want to match the
-	behavior of the crappy windows file entry) and set the
-	PrinterSettings.PrintFileName accordingly.
-
-2006-07-26  Jackson Harper  <jackson at ximian.com>
-
-	* ContainerControl.cs: Add a field that disables auto selecting
-	the next control in a container when the container is activated.
-	* UpDownBase.cs: Don't select the text box when the up down is
-	selected.
-
-2006-07-26  Peter Dennis Bartok  <pbartok at novell.com> 
-
-	* XEventQueue.cs: Added methods for peeking (used for compression
-	  of successive events)
-	* XplatUIX11.cs (GetMessage): We're now compressing consecutive
-	  mouse move events (fixes #78732)
-
-2006-07-25  Jackson Harper  <jackson at ximian.com>
-
-	* UpDownBase.cs: Use an internal class for the textbox so that we
-	can control focus.  the updown control should always have focus,
-	if either the text area or the buttons are clicked.
-	- Send the key messages to the textbox, since it never actually
-	has focus
-	- Activate and decativate the textbox caret.
-
-2006-07-24  Jackson Harper  <jackson at ximian.com>
-
-	* Control.cs: Use the directed select when selecting a control,
-	this way the container controls override will get called and the
-	whole ActiveControl chain will get triggered.  TODO: probably need
-	to make sure this gets done everywhere instead of the old
-	Select(Control).
-	* ContainerControl.cs: Implement the directed Select method to
-	find and activate the correct child control.	
-	
-2006-07-22  Mike Kestner  <mkestner at novell.com>
-
-	* Form.cs: use Control.MousePosition for NCLBUTTONDOWN in the menu
-	menu handling code so that clicks without a grab work too.
-	[Fixes #78914]
-
-2006-07-22  Alexander Olk  <alex.olk at googlemail.com>
-
-	* FileDialog.cs: Enable the BackButton when dirstack has one element.
-	  Added some small optimizations.
-
-2006-07-21  Matt Hargett  <matt at use.net>
-
-	* Control.cs: Implemented 2.0 MinimumSize/MaximumSize properties
-
-2006-07-21  Peter Dennis Bartok  <pbartok at novell.com> 
-
-	* Control.cs (GetNextControl): Fixes to make all of Jackson's unit 
-	  tests pass and match MS in some strange border cases.
-
-2006-07-21  Chris Toshok  <toshok at ximian.com>
-
-	* ThemeWin32Classic.cs: handle drawing of the relation links and
-	parent row buttons.
-
-	* Theme.cs: change args to DataGridPaintParentRow.
-
-	* DataGrid.cs: Don't use controls for the relation links and
-	parent buttons, so we have to handle all their interactions in
-	MouseMove, MouseDown, MouseUp, etc.  Also, store a lot more stuff
-	when we're navigating through child tables, so we can reinstate
-	selection, expanded state, current cell, etc.
-
-2006-07-20  Chris Toshok  <toshok at ximian.com>
-
-	* ToolBar.cs: When we redraw a button, for whatever reason,
-	there's no reason to redraw the entire toolbar.  Also, don't call
-	Control.Refresh from within Redraw, as it's much heavier than
-	Invalidate (which is really what we want).
-
-2006-07-20  Chris Toshok  <toshok at ximian.com>
-
-	* DataGrid.cs, CurrencyManager.cs, DataGridColumnStyle.cs,
-	DataGridTextBoxColumn.cs, DataGridTextBox.cs,
-	ThemeWin32Classic.cs, ListControl.cs: After staring at stack
-	traces from within a debug IBindingList datasource
-	(in mono/winforms/datagrid) for *days*, I've finally gotten things
-	to work in a similar fashion.
-
-2006-07-20  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* ListBox.cs: Don't call Sort () when setting 
-	the Sorted property to false (avoid an unnecessary sort).
-
-2006-07-20  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* ListControl.cs: DataSource should throw an ArgumentException
-	instead of a normal exception when the argument is not of the 
-	correct type.
-
-2006-07-20  Mike Kestner  <mkestner at novell.com>
-
-	* Control.cs: add InternalPreProcessMessage to allow us to steal
-	key events before MWF gets its paws on them.  Adapted from a
-	suggestion by eno.
-	* ToolBar.cs: add GotLostFocus handing for flat toolbars, with 
-	up/down/left/right navigation. Override the new internal control
-	method to steal the events since they never make it to WndProc.
-	* ToolBarButton.cs: don't worry about pushed when setting hilight
-	since the drawing code prefers pushed to hilight. Invalidate on 
-	Hilight changes. Fixes #78547 and #78525.
-
-2006-07-20  Peter Dennis Bartok  <pbartok at novell.com> 
-
-	* ScrollableControl.cs: Consider AutoScrollMinSize when calculating
-	  the canvas size. Fixes #78868
-
-2006-07-20  Peter Dennis Bartok  <pbartok at novell.com>
-
-	* Splitter.cs: Track requested split position until first layout
-	  is performed. Fixes #78871
-
-2006-07-20  Peter Dennis Bartok  <pbartok at novell.com> 
-
-	* Application.cs: Removed code that forces 1.x for the version
-	  number if the version started with 0. Not sure why that code was
-	  there and I couldn't find any bugs that indicated we needed it.
-	  Fixes #78869
-
-2006-07-20  Alexander Olk  <alex.olk at googlemail.com>
-
-	* ThemeWin32Classic.cs: Don't throw a NotImplementedException in
-	  ResetDefaults(), just write some output to the console until it's
-	  implemented. Fixes bug #78907 for now. Eliminated two warnings.
-
-2006-07-19  Jonathan Chambers  <joncham at gmail.com>
-
-	* PropertyGridView.cs: set StartPosition of drop down forms
-	so they appear in correct initial spot.  Fixes #78190.
-
-2006-07-19  Mike Kestner  <mkestner at novell.com>
-
-	* ThemeWin32Classic.cs: use parent background color when drawing
-	flat toolbars.  Restructure the conditionals to make sure non-flat
-	non-Divider toolbars are filled too.  Fixes #78837.
-
-2006-07-19  Mike Kestner  <mkestner at novell.com>
-
-	* ListBox.cs: Sort on collection changes even if the handle
-	isn't created yet.  Fixes #78813.
-
-2006-07-18  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* ListControl.cs: DisplayMember should never be null,
-	and now we assign String.Empty when null is passed to it (this
-	is the .Net way).
-
-2006-07-17  Mike Kestner  <mkestner at novell.com>
-
-	* ListViewItem.cs: restructure Font and subitem Font handling 
-	to hold a specific font and refer back to owner on null.
-	Fixes #78761.
-
-2006-07-17  Mike Kestner  <mkestner at novell.com>
-
-	* ToolBar.cs: bandaid for side-effect of previous patch which was
-	discarding explicit heights for non-AutoSize toolbars.  Need to
-	extend my format tester to deal with AutoSize=false. Fixes #78864.
-
-2006-07-15  Jackson Harper  <jackson at ximian.com>
-
-	* LabelEditTextBox.cs:
-	* TreeView.cs: Use a new LabelEdit class for node editing, this
-	class automatically 'closes' itself when it gets the enter key or
-	loses focus.
-	- Use the client rectangle when setting the trees scrollbars, so
-	border style is taken into account.
-	
-2006-07-14  Jackson Harper  <jackson at ximian.com>
-
-	* TreeNode.cs:
-	* TreeView.cs: Make the editing work similar to MSs, firing the
-	events correctly and ending edits correctly.
-
-2006-07-14  Mike Kestner  <mkestner at novell.com>
-
-	* ToolBarButton.cs:
-	* ToolBar.cs: layout restructuring and redraw enhancements to support
-	formatting changes gracefully, like setting TextAlign, ImageList, 
-	ButtonSize, and Appearance.  Handles explicit button sizing quirks
-	of the MS controls.  Things like flat toolbars ignoring button size
-	but becoming constant sized at the largest button's size.  Normal
-	toolbars with an image set cannot be shrunk smaller than the image,
-	but text can be clipped/ignored.
-	* ThemeWin32Classic.cs: don't draw text if text_rect height or width
-	is zero.  Seems like DrawString should be smart enough to not put
-	anything on screen though. Also trim labels and ellipsize at the char
-	boundary, not word.
-	Fixes #78711 and #78483.
-
-2006-07-14  Alexander Olk  <alex.olk at googlemail.com>
-
-	* FolderBrowserDialog.cs: Disable "New Folder" button and
-	  "New Folder" contextmenu menuitem if a folder like "My Computer"
-	  is selected.
-
-2006-07-14  Alexander Olk  <alex.olk at googlemail.com>
-
-	* FileDialog.cs: Don't create a new folder in "MyComputer" folder.
-	* FolderBrowserDialog.cs:
-	  - Use MWFConfig to store and read size and position settings
-	  - Added code to create a new folder (button or context menu).
-	    Use TreeView labeledit to change the name of the new folder.
-
-2006-07-14  Jackson Harper  <jackson at ximian.com>
-
-	* TreeView.cs: Raise the OnAfterLabelEdit event correctly.  Also,
-	when the tree is scrolled we end editing.
-
-2006-07-14  Alexander Olk  <alex.olk at googlemail.com>
-
-	* ThemeWin32Classic.cs: Fixed position of CPDrawScrollButton Up and
-	  Down arrows
-
-2006-07-14  Jonathan Pobst  <monkey at ipobst.com> 
-
-	WebBrowserProgressChangedEventHandler.cs, BindingCompleteEventArgs.cs,
-	BindingCompleteEventHandler.cs, BindingManagerDataErrorEventArgs.cs,
-	BindingManagerDataErrorEventHandler.cs, CacheVirtualItemsEventArgs.cs,
-	CacheVirtualItemsEventHandler.cs, ColumnReorderedEventArgs.cs,
-	ColumnReorderedEventHandler.cs, ColumnWidthChangedEventArgs.cs,
-	ColumnWidthChangedEventHandler.cs, ColumnWidthChangingEventArgs.cs,
-	ColumnWidthChangingEventHandler.cs, FormClosedEventArgs.cs,
-	FormClosedEventHandler.cs, FormClosingEventArgs.cs,
-	FormClosingEventHandler.cs, ItemCheckedEventArgs.cs,
-	ItemCheckedEventHandler.cs, ListControlConvertEventArgs.cs,
-	ListControlConvertEventHandler.cs, ListViewItemMouseHoverEventArgs.cs,
-	ListViewItemMouseHoverEventHandler.cs, ListViewItemSelectionChangedEventArgs.cs,
-	ListViewItemSelectionChangedEventHandler.cs,
-	ListViewVirtualItemsSelectionRangeChangedEventArgs.cs,
-	ListViewVirtualItemsSelectionRangeChangedEventHandler.cs,
-	MaskInputRejectedEventArgs.cs, MaskInputRejectedEventHandler.cs,
-	PopupEventArgs.cs, PopupEventHandler.cs, PreviewKeyDownEventArgs.cs,
-	PreviewKeyDownEventHandler.cs, RetrieveVirtualItemEventArgs.cs,
-	RetrieveVirtualItemEventHandler.cs, SearchForVirtualItemEventArgs.cs,
-	SearchForVirtualItemEventHandler.cs, SplitterCancelEventArgs.cs,
-	SplitterCancelEventHandler.cs, TabControlCancelEventArgs.cs, 
-	TabControlCancelEventHandler.cs, TabControlEventArgs.cs, 
-	TabControlEventHandler.cs, TableLayoutCellPaintEventArgs.cs,
-	TableLayoutCellPaintEventHandler.cs, ToolStripDropDownClosedEventArgs.cs,
-	ToolStripDropDownClosedEventHandler.cs, ToolStripDropDownClosingEventArgs.cs,
-	ToolStripDropDownClosingEventHandler.cs, TreeNodeMouseClickEventArgs.cs,
-	TreeNodeMouseClickEventHandler.cs, TreeNodeMouseHoverEventArgs.cs,
-	TreeNodeMouseHoverEventHandler.cs, TypeValidationEventArgs.cs,
-	TypeValidationEventHandler.cs, WebBrowserDocumentCompletedEventArgs.cs,
-	WebBrowserDocumentCompletedEventHandler.cs, WebBrowserNavigatedEventArgs.cs,
-	WebBrowserNavigatedEventHandler.cs, WebBrowserNavigatingEventArgs.cs,
-	WebBrowserNavigatingEventHandler.cs, 
-	WebBrowserProgressChangedEventArgs.cs: New 2.0 Event Handlers
-
-2006-07-14  Jonathan Pobst  <monkey at ipobst.com>
-
-	MergeAction.cs, PowerLineStatus.cs, PowerState.cs, PreProcessControlState.cs,
-	RichTextBoxLanguageOptions.cs, ScreenOrientation.cs, ScrollOrientation.cs,
-	SearchDirectionHint.cs, SystemParameter.cs, TabControlAction.cs,
-	TableLayoutPanelCellBorderStyle.cs, TextDataFormat.cs, TextImageRelation.cs,
-	ToolStripDropDownCloseReason.cs, ToolStripDropDownDirection.cs,
-	ToolStripGripDisplayStyle.cs, ToolStripGripStyle.cs,
-	ToolStripItemAlignment.cs, ToolStripItemDisplayStyle.cs,
-	ToolStripItemImageScaling.cs, ToolStripItemOverflow.cs,
-	ToolStripItemPlacement.cs, ToolStripLayoutStyle.cs,
-	ToolStripManagerRenderMode.cs, ToolStripRenderMode.cs,
-	ToolStripStatusLabelBorderSides.cs, ToolStripTextDirection.cs,
-	ToolTipIcon.cs, TreeNodeStates.cs, TreeViewDrawMode.cs,
-	TreeViewHitTestLocations.cs, UnhandledExceptionMode.cs, ValidationConstraints.cs,
-	WebBrowserEncryptionLevel.cs, WebBrowserReadyState.cs, WebBrowserRefreshOption.cs,
-	ArrowDirection.cs, AutoCompleteMode.cs, AutoCompleteSource.cs, AutoSizeMode.cs,
-	AutoValidate.cs, BatteryChargeStatus.cs, BindingCompleteContext.cs,
-	BindingCompleteState.cs, CloseReason.cs, ColumnHeaderAutoResizeStyle.cs,
-	ControlUpdateMode.cs, DataSourceUpdateMode.cs, DockingBehavior.cs,
-	FixedPanel.cs, FlowDirection.cs, GetChildAtPointSkip.cs,
-	HtmlElementInsertionOrientation.cs, InsertKeyMode.cs, ListViewHitTestLocations.cs,
-	ListViewItemStates.cs, MaskFormat.cs: Added
-
-2006-07-13  Jonathan Chambers  <joncham at gmail.com>
-
-	* PropertyGridView.cs: Fix keyboard navigation of drop down.
-	Patch from eno for bug 78558.
-	
-2006-07-13  Jackson Harper  <jackson at ximian.com>
-
-	* TreeView.cs: When an edit is finished make sure that the
-	selected node is visible.
-	- When setting the top/bottom use the scrollbars is_visible, so
-	everything will be set correctly even if the tree isn't visible
-	yet.
-
-2006-07-13  Jackson Harper  <jackson at ximian.com>
-
-	* ComboBox.cs: Revert the item->index part of my previous patch.
-	* TreeView.cs: Use LostFocus instead of Leave for detecting when
-	the edit box has lost focus (duh).
-	- Just make the edit box not visible when we get return, that will
-	take the focus, which will call EndEdit
-	* TreeNode.cs When we start editing, notify the treeview.
-
-2006-07-12  Jackson Harper  <jackson at ximian.com>
-
-	* ComboBox.cs: Clear out old items before setting the item list.
-	This prevents databound controls from having their items added
-	twice.
-	- Switch the combobox to use indices whereever possible instead of
-	using Item's.  This allows usto navigate through lists that have
-	more then one item with the same string value (ie a, b, b, a).
-	- Scroll the listboxes scrollbar when a non visible item is
-	highlighted
-	- Allow keypress to cycle through all the possible values. For
-	example if you have b1, b2, b3 and hold down the B key all the
-	values will be cycled through.
-	
-2006-07-12  Jackson Harper  <jackson at ximian.com>
-
-	* TextBoxBase.cs:
-	* ListView.cs: Don't need to override SETFOCUS anymore, we can do
-	this using the internal methods.
-	* Control.cs: Add OnGotFocusInternal.  A new method that allows
-	controls to "override" OnGotFocus and change focus behavior if
-	needed.
-	- Same thing for LostFocus
-	* ComboBox.cs: Pass off focus to the text control properly.
-
-2006-07-12  Alexander Olk  <alex.olk at googlemail.com>
-
-	* FileDialog.cs: Added GetFoldersOnly to MWFVFS
-	* FolderBrowserDialog.cs: Almost a complete rewrite.
-	  - Better support for Environment.Specialfolders
-	  - Added support for MWFVFS
-	  - Made setting SelectedPath work
-
-2006-07-12  Jackson Harper  <jackson at ximian.com>
-
-	* Control.cs: Optimze getting all the controls.
-
-2006-07-11  Jackson Harper  <jackson at ximian.com>
-
-	* ContainerControl.cs: Override SETFOCUS in the container control,
-	so that it is not selected on mouse click.
-
-2006-07-11  Peter Dennis Bartok  <pbartok at novell.com> 
-
-	* LinkLabel.cs: Hack to handle Shift-Tabbing to the linklabel. 
-	  Hopefully we will have a better way once all of focus is complete.
-
-2006-07-11  Peter Dennis Bartok  <pbartok at novell.com>
-
-	* ThemeWin32Classic.cs: Commented out some debug code and fixed
-	  a compile error with csc.
-
-2006-07-11  Jackson Harper  <jackson at ximian.com>
-
-	* Control.cs: When hiding a control only select the next control
-	if the current control was focused.
-	- Don't handle enter/leave when setting/killing focus, this is
-	done by the container control.
-	- Remove is_selected, it's not needed anymore.
-	- Add utility methods for selecting a child control, and for
-	firing the Enter/Leave events.
-	* ContainerControl.cs: When a control is activated fire the
-	enter/leave events.
-	- Don't wrap when processing the tab key, so that focus can be
-	moved outside of the container.
-	- Use the correct active control
-
-2006-07-11  Jackson Harper  <jackson at ximian.com>
-
-	* ComboBox.cs: Remove some debug code that was blinding me.
-	* UpDownBase.cs: These controls actually aren't implicit, they are
-	visible to the user.
-
-2006-07-10  Chris Toshok  <toshok at ximian.com>
-
-	* DataGrid.cs: move back to the is_adding boolean field.  god i
-	hate this is_editing/is_adding/is_changing stuff.
-
-2006-07-10  Chris Toshok  <toshok at ximian.com>
-
-	* DataGridTableStyle.cs: just check if the property type is bool.
-	if it is, use DataGridBoolColumn, otherwise DataGridTextBoxColumn.
-	Don't use CanRenderType.
-
-	* DataGridTextBoxColumn.cs: set the value to DBNull.Value, not "",
-	if our text == NullText.  Remove CanRenderType.
-
-	* DataGridBoolColumn.cs: nuke CanRenderType.
-
-	* DataGrid.cs: reenable some code to end the current edit inside
-	of set_CurrentCell.  This fixes the other 1.1.16 regression.
-	Also, remove rowhdrs_maxheight and just use rowhdrs_area.Height.
-	Also, remove the visible_row_count arg from CalcRowHeaders, since
-	we don't need to worry about the actual height of the area.
-
-2006-07-10  Chris Toshok  <toshok at ximian.com>
-
-	* DataGridTextBoxColumn.cs: if when we Commit we're in navigate
-	mode, just return.
-
-	* DataGridTextBox.cs: change "isedit" to "isnavigating" to reflect
-	the real sense of the IsInEditOrNavigateMode property (true =
-	navigate, false = edit).  Also, update OnKeyPress to reflect this.
-
-	* DataGridTableStyle.cs (CreateColumnsForTable): even if the
-	column style exists, we still need to set its property descriptor
-	to match up with our list manager.
-
-2006-07-10  Chris Toshok  <toshok at ximian.com>
-
-	* ThemeWin32Classic.cs: implement the new row/header painting
-	approach.  The parent row painting will likely go away and
-	replaced with label controls, but the rest seems to work ok (and
-	efficiently).
-
-	* Theme.cs: change the way we draw datagrid rows.  we don't draw
-	the row headers as a block now.  Instead we draw them in the
-	normal draw-row loop.  Add some calls for drawing parent rows and
-	relation rows.
-
-	* DataGridTableStyle.cs: add tons of ArgumentExceptions if this is
-	a default table style.  Set the defaults from ThemeEngine.Current,
-	not SystemColors.  Fix lots of misc issues with property setters.
-
-	* DataGrid.cs: move loads of style information out of this class
-	as it's being duplicated with DataGridTableStyle.  keep track of a
-	special DataGridTableStyle for the properties we used to mirror
-	here.  Switch all the style properties to access this table style
-	instead of instance fields of this class.  Also add a internal
-	class to represent parent rows (more needs to be stored here, like
-	the selection state from the parent table, as well as the
-	expansion state.)  Also, for datasources with relations, do the
-	right thing for collapse/expand, and add support for the
-	navigation/parent row buttons.
-
-	Lastly, fix the crash in the 1.1.16 build.
-
-	* GridTableStylesCollection.cs: make the explicit interface
-	implementations call the class's methods as opposed to duplicating
-	them.
-
-	* DataGridTextBoxColumn.cs: set the x/y offset of the textfield to
-	0 so the text doesn't jump around when we move the cursor.
-
-2006-07-10  Jackson Harper  <jackson at ximian.com>
-
-	* TextBoxBase.cs:
-	* ListBox.cs: Match MS's ToString (this makes debugging focus
-	stuff infinitely easier).
-
-2006-07-10  Jackson Harper  <jackson at ximian.com>
-
-	* Control.cs (SelectNextControl): When checking the control's
-	parent use this instead of ctrl.parent so that null can be passed
-	to SelectNextControl. (I have unit tests for this).
-	- Remove unused var.
-
-2006-07-10  Chris Toshok  <toshok at ximian.com>
-
-	* CurrencyManager.cs: correct one regression, the removal of the
-	finalType field.  Also, add a MonoTODO on CanAddRows, implement
-	Refresh() correctly, and fix some event emission in
-	ListChangedHandler.
-
-2006-07-07  Alexander Olk  <alex.olk at googlemail.com>
-
-	* FileDialog.cs: Don't use brackets for new folders if they exist
-	  under *nix. Instead use -(number of existing folders +1).
-
-2006-07-07  Alexander Olk  <alex.olk at googlemail.com>
-
-	* FileDialog.cs:
-	  - Fixed really nasty bug #78771
-	  - Don't block the whole GUI when reading directories with a lot of
-	    entries. Use an other thread instead and call BeginInvoke to
-	    update the ListView in MWFFileView
-
-2006-07-07  Chris Toshok  <toshok at ximian.com>
-
-	* Control.cs (Dispose): release any Capture when disposing.
-
-2006-07-07  Chris Toshok  <toshok at ximian.com>
-
-	* LinkLabel.cs (Select): if we chain up to the parent, set
-	focused_index to -1 so we'll search for the first available link
-	the next time the user tabs into us.  Also, if the direction is
-	backward and focused_index == -1, start the search from the last
-	element.
-
-2006-07-07  Chris Toshok  <toshok at ximian.com>
-
-	* LinkLabel.cs (CreatePiecesFromText): if the link's range piece
-	is beyond the end of the text, don't do anything.
-	(CreateLinkPieces): set our ControlStyles.Selectable based on
-	whether or not we have any links.
-	(Link.Invalidate): use a loop instead of foreach.
-	(Link.set_Start): null out owner.sorted_links so it'll be
-	recreated by CreateLinkPieces.
-
-2006-07-06  Chris Toshok  <toshok at ximian.com>
-
-	* LinkLabel.cs: revert the SetStyle change.
-
-2006-07-06  Chris Toshok  <toshok at ximian.com>
-
-	* LinkLabel.cs (.ctor): SetStyle Selectable to true.
-	(OnEnableChanged): s/Refresh/Invalidate
-	(OnGotFocus): if we have a focused index already, refocus it (so
-	if we mouse out/in to the window it'll focus the right link).
-	(OnKeyDown): move the tab handling out of here.
-	(OnLostFocus): don't set focused_index to -1, so we can refocus it
-	when we lose focus.
-	(OnMouseDown): don't Capture here - Control handles it.  Also,
-	focus the active link.
-	(OnMouseUp): don't deal with Capture.
-	(OnPaintBackgroundInternal): remove.
-	(OnTextAlignChanged): CreateLinkPieces before calling the
-	superclass's method.
-	(OnTextChanged): call CreateLinkPieces before calling superclass's
-	method.
-	(ProcessDialogKey): handle Tab here, and call Select(bool,bool) to
-	move around.
-	(Select): implement this, moving the selection between different
-	links, and call parent.SelectNextControl if we don't have another
-	link to focus in the given direction.
-	(CreateLinkPieces): call Invalidate instead of Refresh.
-	
-2006-07-06  Chris Toshok  <toshok at ximian.com>
-
-	* ThemeWin32Classic.cs: DrawLinkLabel changes to accomodate the
-	new LinkLabel internals.
-
-	* LinkLabel.cs: fairly major rewrite.  get rid of all the loops
-	over pieces looking for active/focused/etc links.  also, deal with
-	runs of text (and links) with embedded \n's in them, and use
-	MeasureCharacterRanges instead of MeasureString to figure out the
-	regions text occupies.  Lastly, do the usual s/Refresh/Invalidate
-	two-step.
-
-2006-07-04  Jackson Harper  <jackson at ximian.com>
-
-	* XplatUIX11.cs: Enable key auto repeat. If the user doesn't have
-	XKB or key auto repeat, do it manually.  Without key auto repeat,
-	when a key is held down we get key press, key release, key press,
-	key release, ... with auto repeat we get key press, key press, key
-	press ..., and then a release when the key is actually released.
-
-2006-07-03  Jackson Harper  <jackson at ximian.com>
-
-	* TabControl.cs:
-	* ThemeWin32Classic.cs: Tabs do not obey normal background color
-	rules, they are always control color regardless of the background
-	color.
-
-2006-07-02  Alexander Olk  <alex.olk at googlemail.com>
-
-	* FileDialog.cs: Added internal class MWFConfig.
-	  Removed Registry support and replaced it with support for the new
-	  MWFConfig class. See MWFConfig comments for more information.
-
-2006-06-30  Alexander Olk  <alex.olk at googlemail.com>
-
-	* ThemeWin32Classic.cs: Added RadioButton and CheckBox focus
-	  rectangle. Added some patches from eno from bug #78490 and fixed
-	  the arrow position for small up and down CPDrawScrollButtons.
-
-2006-06-30  Jackson Harper  <jackson at ximian.com>
-
-	* InternalWindowManager.cs: Remove some debug code.
-	* Form.cs: When an MdiParent is set to null, the window is
-	"detatched" and becomes a normal window.
-	* MdiClient.cs: Don't bring the new child form to the front until
-	it is activated (setting it as active does this), this makes the
-	previously active forms titlebar get redrawn as inactive.
-
-2006-06-29  Peter Dennis Bartok  <pbartok at novell.com>
-
-	* PrintDialog.cs: Labels need a tab index too, otherwise they overlap
-	  with later controls
-
-2006-06-29  Mike Kestner  <mkestner at novell.com>
-
-	* MenuAPI.cs: handle arrow keys in keynav state. Go active on down
-	arrow in keynav state.  Fixes #78682.
-
-2006-06-28  Atsushi Enomoto  <atsushi at ximian.com>
-
-	* PrintDialog.cs: Reorder, relayout, remove extra code, set tab 
-	  order (fixes #78393)
-
-2006-06-28  Jonathan Pobst  <monkey at ipobst.com>
-
-	* AccessibleRole.cs, AccessibleStates.cs, AnchorStyles.cs, 
-	  ArrangeDirection.cs, ArrangeStartingPosition.cs, ColorDepth.cs,
-	  ControlStyles.cs, DataGridViewImageCellLayout.cs, DrawMode.cs,
-	  FormBorderStyle.cs, FormStartPosition.cs, FormWindowState.cs,
-	  GridItemType.cs, HelpNavigator.cs, ImeMode.cs, ItemActivation.cs,
-	  ItemBoundsPortion.cs, Keys.cs, ListViewAlignment.cs, 
-	  PictureBoxSizeMode.cs, PropertySort.cs, SelectionMode.cs,
-	  Shortcut.cs, SizeGripStyle.cs, SortOrder.cs, StructFormat.cs,
-	  TextFormatFlags.cs, ToolBarAppearance.cs, ToolBarButtonStyle.cs,
-	  ToolBarTextAlign.cs, View.cs: 2.0 Changes to existing 1.x
-	  enumerations (FlagsAttribute, SerializableAttribute, added/removed
-	  values)
-
-2006-06-28  Mike Kestner  <mkestner at novell.com>
-
-	* ComboBox.cs: implement scroll wheel support. Fixes #78360.
-
-2006-06-28  Atsushi Enomoto  <atsushi at ximian.com>
-
-	* PropertyGrid.cs,
-	  PropertyGridTextBox.cs : explicitly set BackColor to differentiate
-	  item lines from other area (It also makes BackColor consistent and
-	  compatible with .NET). Fixed bug #78564.
-
-2006-06-28  Jonathan Chambers  <jonathan.chambers at ansys.com>
-
-	* PropertyGrid.cs: refresh toolbar when PropertySort is set.
-	Patch from Eno for #78555.
-
-2006-06-27  Chris Toshok  <toshok at ximian.com>
-
-	* ThemeWin32Classic.cs: s/grid.grid_drawing/grid
-
-	* DataGridColumnStyle.cs: same.
-
-	* DataGrid.cs: Roll DataGridDrawingLogic.cs into this file.
-	
-	* DataGridDrawingLogic.cs: nuke.
-
-2006-06-27  Chris Toshok  <toshok at ximian.com>
-
-	* DataGridTableStyle.cs: clean up the constructors, and build the
-	list of child relations for this table.  I have no idea if this is
-	where we should be doing it (it probably isn't), but since we're
-	already iterating over the properties..
-
-	* DataGrid.cs: add row resizing.  for now we add a DataGridRow
-	struct and array for keeping track of row information, similar to
-	what's shown in a hack on
-	http://www.syncfusion.com/FAQ/WindowsForms/FAQ_c44c.aspx.
-
-	* Theme.cs: be consistent about the naming of DataGrid methods,
-	prefering ColumnWidths and RowHeights over columnsWidths and
-	RowsHeights.
-
-	* ThemeWin32Classic.cs: same, and also add support for variable
-	sized rows (and the +/- expansion icons for related rows).
-
-2006-06-27  Peter Dennis Bartok  <pbartok at novell.com>
-
-	* TextBoxBase.cs: Applied Eno's patch from #78660
-
-2006-06-27  Peter Dennis Bartok  <pbartok at novell.com> 
-
-	* Form.cs (ScaleCore): We don't want to scale our form if it's
-	  state is minimized or maximized, but we still need to scale our
-	  child windows. Also, added try/finally block to ensure layout
-	  gets reset (Fixes #78697)
-
-2006-06-27  Peter Dennis Bartok  <pbartok at novell.com>
-
-	* Control.cs: Added 2.0 Scale(SizeF) method (Fixes 78700)
-
-2006-06-27  Peter Dennis Bartok  <pbartok at novell.com> 
-
-	* Form.cs: Fixed c+p error and added check to resize form if minimum
-	  size is bigger than current size (Fixes #78709)
-
-2006-06-26  Peter Dennis Bartok  <pbartok at novell.com> 
-
-	* ThemeEngine.cs (..ctor): Properly use ToLower() (Fixes #78704)
-
-2006-06-26  Mike Kestner  <mkestner at novell.com>
-
-	* ComboBox.cs: only do Keypress handling in the combo when there  
-	are items in the collection. Fixes #78710.
-
-2006-06-26  Chris Toshok  <toshok at ximian.com>
-
-	* Binding.cs: make this work bi-directionally.  also, clear up
-	other mixups between Push/Pull Data (e.g. we're supposed to pull
-	data when validating).
-
-	* BindingManagerBase.cs: trim some fully qualified collection
-	types.
-
-	* PropertyManager.cs (get_IsSuspended): oops, fix this check.
-
-2006-06-23  Chris Toshok  <toshok at ximian.com>
-
-	* PropertyManager.cs: It appears (according to the unit tests)
-	that PropertyManager doesn't use
-	PropertyDescriptor.AddValueChanged to track propery value changes
-	in its datasource, but uses the same scheme as Binding, where it
-	looks for a <Property>Changed event and binds to it.
-
-	Also, according to the docs, IsSuspended always returns false for
-	a property manager with a non-null datasource.
-
-2006-06-22  Peter Dennis Bartok  <pbartok at novell.com> 
-
-	* Form.cs: (ShowDialog): If we're returning a forced cancel we still
-	  need to update the actual DialogResult. (Fixes #78613)
-
-2006-06-22  Peter Dennis Bartok  <pbartok at novell.com>
-
-	* Form.cs (ShowDialog): Release any captures before running the
-	  new message pump (fixes #78680)
-
-2006-06-22  Mike Kestner  <mkestner at novell.com>
-
-	* ListView.cs: Layout column widths properly in details mode even 
-	if HeaderStyle.None is set.  Fixes #78691.
-
-2006-06-21  Peter Dennis Bartok  <pbartok at novell.com>
-
-	* FileDialog.cs: Fixed taborder to match MS. Fixes #77873 partially.
-
-2006-06-21  Peter Dennis Bartok  <pbartok at novell.com> 
-
-	* Control.cs (ContainsFocus): Using new driver method to get focused
-	  window, instead of trying to use internal tracking var, which can
-	  recursion issues (Fixes #78685)
-	* XplatUI.cs, XplatUIDriver.cs, XplatUIX11.cs, XplatUIOSX.cs, 
-	  XplatUIWin32.cs: Added GetFocus method to return focused window
-
-2006-06-21 Gonzalo Paniagua Javier <gonzalo at ximian.com>
-
-	* ColorDialog.cs: when the mouse button is pressed inside the color
-	matrix, don't let the cursor move out of it until the button is
-	released, which is the behavior on windows. Changed 'colours' by
-	'colors' to use the same word consistently.
-
-2006-06-21  Chris Toshok  <toshok at ximian.com>
-
-	* DataGrid.cs: add in some basic navigation stuff (navigating to a
-	child relation and back, using a stack).  Also, remove
-	GetDataSource and the code that calls it - it's not needed.  Also,
-	track CurrencyManager.ListName's removal.
-
-2006-06-21  Chris Toshok  <toshok at ximian.com>
-
-	* CurrencyManager.cs: push some of the original type checking from
-	BindingContext.CreateBindingManager to here, and remove some of
-	the finalType stuff.  Need more tests to make sure I've got the
-	ListName part right, and we might need more in SetDataSource.
-
-	* PropertyManager.cs: add a ctor that takes just the datasource,
-	and no property name.  Make SetDataSource work with a null
-	property_name, and make Current return the data_source if the
-	property descriptor is null.  this makes 'string foo = "hi";
-	BindingContext[foo].Current' return "hi" as it should.
-
-	* RelatedCurrencyManager.cs: make this code more generic - there's
-	no reason the parent manager has to be CurrencyManager, and
-	there's no reason to pass the DataRelation.  It suffices to use a
-	BindingManagerBase and PropetyDescriptor.
-
-	* RelatedPropertyManager.cs: make a similar change here.
-	
-	* BindingContext.cs: make CreateBindingManager the beautiful, tiny
-	flower I knew it could be.
-
-2006-06-20  Chris Toshok  <toshok at ximian.com>
-
-	* PropertyManager.cs: the PropertyChangedHandler is invoked when
-	data in the source has changed and we need to update the control,
-	so s/PullData/PushData.
-
-	* CurrencyManager.cs: Refresh is meant to update the control from
-	data in the datasource.  So, s/PullData/PushData.
-
-	* BindingContext.cs: add more ugliness (we weren't handling the
-	case where data_source = DataTable and data_member = column_name).
-
-	* Binding.cs: fix PushData/PullData mixup.  Both are interpreted
-	from the perspective of the datasource.  PullData pulls from the
-	control, PushData pushes to the control.
-
-2006-06-20  Chris Toshok  <toshok at ximian.com>
-
-	* BindingContext.cs: rewrite the CreateBindingManager code to
-	handle navigation paths more or less properly.  This could
-	definitely stand some more work, in particular to push the
-	recursion up to the toplevel.  But that relies on fixes in other
-	places (System.Data comes to mind).
-
-	Also, move to a flat hashtable (and encode the twolevel nature of
-	the dictionary into the hash key).  This lets us implement the
-	IEnumerable.GetEnumerator method.
-
-	* RelatedCurrencyManager.cs: new class.  Update our view based on
-	our relation and our parent CurrencyManager's position.
-
-	* CurrencyManager.cs: split out some logic from the ctor into
-	SetView, so it can be called from the new RelatedCurrencyManager
-	subclass.
-
-	* RelatedPropertyManager.cs: new class.  Update our datasource
-	based on the position of our parent CurrencyManager.
-
-	* PropertyManager.cs: split out some logic from the ctor into
-	SetDataSource, so it can be called from the new RelatedDataSource
-	subclass.  Also, make the Current getter return the value
-	of the PropertyDescriptor, not the data_source.
-
-	* Binding.cs: no need to duplicate the string splitting code here.
-
-2006-06-19  Peter Dennis Bartok  <pbartok at novell.com> 
-
-	* Control.cs:
-	  - set_Enabled: OnEnabledChanged is not called if the inherited state 
-	    of the control is not altered, even though  we might be changing the
-	    internal state of the control (#78458)
-	  - set_Enabled: (Re)Moved the enabling/disabling of the window to 
-	    OnEnabledChanged, to allow easy altering of any child window state
-	  - OnEnabledChanged: Added code to enable/disable driver window state
-	  - OnParentEnabledChanged: Instead of firing the event, call 
-	    OnEnabledChanged, which will fire the event and also a) set driver
-	    window state and pass the enabled state to any grandchildren (#78458)
-
-2006-06-19  Jackson Harper  <jackson at ximian.com>
-
-	* InternalWindowManager.cs: We don't set the cursor explicitly
-	thats done via the response to NCHITTESTs.
-	- Don't need to adjust for titlebar heights anymore, the
-	coordinates are coming in the correct coordinates now (see peters
-	last patch).
-
-
-2006-06-19  Peter Dennis Bartok  <pbartok at novell.com> 
-
-	* XplatUIX11.cs (GetMessage): WM_NCxBUTTONx messages were wrongly
-	  being translated relative to whole window, instead of client window.
-	  That caused broken offsets on mouseclick (and caused gas for our
-	  InternalWindowManager)
-
-2006-06-15  Peter Dennis Bartok  <pbartok at novell.com> 
-
-	* TextControl.cs:
-	  - MoveCaret: Implemented PgUp, PgDown, CtrlPgUp and CtrlPgDown
-	  - Undo(): Added replay of cursor move on DeleteChars action; added
-	    calling Undo() again if a recorded cursor move is invalid (to
-	    ensure that some action is performed on Undo)
-	* TextBoxBase.cs (ProcessKey): Added handling of PgUp and PgDown (#78482)
-
-2006-06-16  Jackson Harper  <jackson at ximian.com>
-
-	* MdiClient.cs: Instead of just sizing maximized windows when
-	there is a resize we also have to adjust the Y of minimized
-	windows, so they stay pinned to the bottom of the mdi container.
-	- Eliminate separate tracking of the active control, we can just
-	get this from the controls collection.
-	- Paint the decorations for the newly activated titlebar so we get
-	a pretty blue bar.
-	* InternalWindowManager.cs:
-	* ThemeWin32Classic.cs: Minimized windows get all three buttons
-	even if they are a tool window.
-	
-2006-06-15  Peter Dennis Bartok  <pbartok at novell.com> 
-
-	* TextControl.cs (Undo): Handle non-existent cursor locations in the
-	  undo buffer, these can happen when text was deleted and the cursor
-	  was recorded first. Since we will also have a recorded cursor
-	  after the delete this is not an issue. (Fixes #78651)
-
-2006-06-14  Peter Dennis Bartok  <pbartok at novell.com> 
-
-	* AccessibleObject.cs: Remove dependence on Control.is_selected;
-	  instead properly track control states internally (allows us to
-	  remove is_selected from Control)
-
-2006-06-14 Gonzalo Paniagua Javier <gonzalo at ximian.com>
-
-	* ImageListStreamer.cs: correctly generate the 1bpp mask for images
-	whose width is not a multiple of 8.
-
-2006-06-13  Jackson Harper  <jackson at ximian.com>
-
-	* MdiClient.cs:  Only maximize the next child if the current one
-	is maximized.
-
-2006-06-13  Chris Toshok  <toshok at ximian.com>
-
-	* DataGridColumnStyle.cs: Invalidate the column when HeaderText is
-	modified.  Also, guard against grid or grid_drawing being null in
-	Invalidate.
-
-	* DataGrid.cs: Reformat tons of getters/setters.  In the
-	DataMember setter, just call SetNewDataSource instead of
-	duplicating some of its functionality.  In SetNewDataSource, don't
-	check ListManager for null, since the property getter creates the
-	object if needed.
-
-	* DataGridTableStyle.cs: don't set TableStyle or call
-	SetDataGridInternal on the column here, it's done in
-	GridColumnStylesCollection.Add.
-
-	* GridColumnStylesCollection.cs: fix all the explicit interface
-	implementations to just call our methods.  Nuke AddInternal() and
-	move the body of it to Add().  Also, add a call to
-	column.SetDataGridInternal to Add().
-
-	* DataGridTextBoxColumn.cs (.ctors): call this() instead of
-	base()+duplicate code.  Also, use the Format property instead of
-	format to generate an Invalidate ala MS.  Lastly, create the
-	textbox here, unconditionally.
-	(set_Format): call Invalidate.
-	(get_TextBox): no need to call EnsureTextBox.
-	(Commit): remove the message box.
-	(Edit) remove the call to EnsureTextBox.
-	(EndEdit): call HideEditBox instead of ReleaseHostedControl.
-	(EnterNullValue): no need to check textbox for null.
-	(HideEditBox): no need to check textbox for null.
-	(SetDataGridInColumn): add the textbox to the grid's controls.
-	(EnsureTextBox): nuke.
-	
-2006-06-13  Jackson Harper  <jackson at ximian.com>
-
-	* MdiWindowManager.cs: Hook up to the maximized menus paint event
-	and redraw the buttons when needed. Unhook when the window is
-	unmaximized.
-	* MainMenu.cs: Add an internal Paint event, the mdi window manager
-	needs this so that it can redraw its buttons when the menu is
-	repainted.
-	* InternalWindowManager.cs:
-	* Form.cs: The method order has changed for DrawMaximizedButtons,
-	so that it can be a PaintEventHandler.
-	
-2006-06-13  Jackson Harper  <jackson at ximian.com>
-
-	* MdiClient.cs: When we close a maximized mdi window, the next mdi
-	window is activated and maximized, even if it wasn't before.
-	- When  a new window is activated repaint the decorations of the
-	old one, so that it no longer has the Active "look" (the blue
-	titlebar).
-	* InternalWindowManager.cs: Open up CreateButtons to base classes
-	so they can recreate the buttons on state changes.
-	- If a window is maximized give it all three buttons
-	* MdiWindowManager.cs: Create the titlebar buttons when the state
-	is changed, this is needed because a toolwindow will not have all
-	three buttons until it is maximized.
-
-2006-06-13  Atsushi Enomoto  <atsushi at ximian.com>
-
-	* ProgressBar.cs : PerformStep() shouldn't exceed Maximum.
-	  Fixed bug #78609.
-
-2006-06-12  Jackson Harper  <jackson at ximian.com>
-
-	* KeysConverter.cs: Make sure we handle the Ctrl special case
-	if its the only key.
-	
-2006-06-12  Jackson Harper  <jackson at ximian.com>
-
-	* Theme.cs: Add a method to get the size of a managed window
-	toolbar button.
-	* InternalWindowManager.cs: Remove the ButtonSize property, this
-	should be retrieved from the theme.
-	* MdiWindowManager.cs: Get the button size from the theme
-	* ThemeWin32Classic.cs: Make the method to get the managed window
-	titlebar button size public.
-	- Handle the different button sizes of maximized toolwindows
-	(should match any maximized window).
-	- Get the titlebar height from the theme, not the WM (which gets
-	it from the theme).
-
-2006-06-12  Jackson Harper  <jackson at ximian.com>
-
-	* InternalWindowManager.cs: Handle NC Double Clicks, passing the
-	event down to the mdi window manager.
-	- Expose some extra stuff to base classes
-	- Make sure to end the Capture on an NC Mouse up, so that we can
-	get double clicks properly, and the sizing doens't stick.
-	- When doing PointToClient contain it in the workable desktop
-	area, this prevents windows from changing size when the cursor is
-	pulled outside of the working area while sizing.
-	* MdiWindowManager.cs: When we get a double click maximize the
-	window.
-	- Reset the cursor after handling mode changes.
-
-2006-06-12  Peter Dennis Bartok  <pbartok at novell.com> 
-
-	* XplatUIX11.cs (WorkingArea): Read the actual workarea for the 
-	  current desktop, instead of just assuming a 0, 0 origin. This
-	  is needed for our internal window manager, to know the top
-	  margin of the desktop
-
-2006-06-12  Chris Toshok  <toshok at ximian.com>
-
-	* DataGrid.cs (set_CurrentCell): concede focus as we move around.
-	we need this to get rid of the selected background in the bool
-	column.
-	(CancelEditing): move the ConcedeFocus call to above the Abort
-	call.  Also, set is_changing to false and invalidate the row
-	header if we were changing before.
-	(ProcessKeyPreviewInternal): remove, since noone outside this
-	class calls it anymore.  Roll the code into ProcessKeyPreview.
-	(EndEdit): remove the internal version.
-	(InvalidateCurrentRowHeader): make private.
-
-	* DataGridBoolColumn.cs: simplify this class a bunch.  remove the
-	Keys.Escape handling (and with it the last call to
-	DataGrid.EndEdit from outside the class.)
-
-
-2006-06-12  Chris Toshok  <toshok at ximian.com>
-
-	* DataGridTextBox.cs (.ctor): isedit defaults to false.
-	(OnKeyPress): set isedit to true.
-	(ProcessKeyMessage): remove Keys.Enter handling from here.  it's
-	already handled by the grid.
-
-	* DataGrid.cs (set_CurrentCell): more work here.  it's still not
-	right.  ugh.
-	(set_DataSource): SetDataSource always returns true, so stop
-	putting it in an if statement.
-	(EndEdit): get rid of some {}'s
-	(ProcessGridKey): return true in case Keys.Escape.
-	(ProcessKeyPreviewInternal): only handle KEYDOWN messages.
-	(ConnectListManagerEvents,DisconnectListManagerEvents): connect to
-	PositionChanged, stopped connecting to CurrentChanged.
-	(GetDataSource): simplify this a bunch.
-	(SetDataSource): change return type from bool to void.
-	(OnListManagerPositionChanged): rename OnListManagerCurrentChanged
-	to this, and make sure we don't set ListManager.Position inside
-	set_CurrentCell.
-	(OnListManagerItemChanged): if we're passed an actual index,
-	redraw that row.
-
-	* CurrencyManager.cs (set_Position): don't call PullData here.
-
-2006-06-09  Jackson Harper  <jackson at ximian.com>
-
-	* TreeNode.cs:  Recalculate the visible order before doing the
-	Expand/Collapse Below calls, because those calls generate an
-	expose.
-	- Reduce calls to the TreeView property, which is mildly expensive
-	by using a local var.
-	* Form.cs: Layout the MDI child windows when creating the parent
-	form.
-	- Don't use the internal constructor anymore
-	* MdiClient.cs: use the parent form width/height (if available)
-	when laying out the child windows, we do this because the
-	mdiclient isn't docked yet when the initial layout is done.
-	- Don't need an internal constructor anymore.
-
-2006-06-08 Gonzalo Paniagua Javier <gonzalo at ximian.com>
-
-	* FileDialog.cs: handle access errors when trying to create a folder
-	or changing to a directory. No need to initialize out parameters.
-
-2006-06-08  Alexander Olk  <alex.olk at googlemail.com>
-
-	* FileDialog.cs: Append a number when creating a new folder if the
-	  folder already exists (use parenthesis instead of square brackets)
-
-2006-06-08  Alexander Olk  <alex.olk at googlemail.com>
-
-	* FileDialog.cs:
-	  - Disabled registry support for windows and added better registry
-	    error checking for other systems (need to investigate why it
-	    works perfectly on my system)
-	  - If a folder already exist show an error MessageBox instead of
-	    trying to create an indexed name.
-	  - Fixed a non intentional typo.
-
-2006-06-08 Gonzalo Paniagua Javier <gonzalo at ximian.com>
-
-	* FileDialog.cs: (SetFileName) don't crash if CurrentRealFolder is null.
-
-2006-06-08  Alexander Olk  <alex.olk at googlemail.com>
-
-	* FileDialog.cs: When creating a new folder don't crash if the
-	  folder already exists.
-
-2006-06-08  Alexander Olk  <alex.olk at googlemail.com>
-
-	* FileDialog.cs: Allmost a complete rewrite.
-	  - added a "virtual" file system that handles the differences
-	    between unix and windows file systems (especially the directory
-	    structure). Moved most of the directory and file handling code
-	    into the vfs.
-	    Added vfs classes: MWFVFS, FileSystem, WinFileSystem,
-	    UnixFileSystem and FSEntry.
-	  - Recently used folder/directory, size, location and used file names
-	    (file name ComboBox) are now stored in the registry and get read
-	    before the dialog shows up (fixes part 6 of bug #78446).
-	  - Creation of new folders/directories is now possible (context menu
-	    or ToolBar). Added TextEntryDialog for this that fills in the gap
-	    until ListView.LabelEdit works.
-	  - Fixed cursor handling (bug #78527) and focus handling for
-	    PopupButtonPanel
-	  - Various "Search in" ComboBox enhancements. The content of the
-	    dropdown listbox now almost matches ms.
-	  - Changed the behaviour when the user switches to SpecialFolder
-	    Recent to show the ListView in View.Details.
-	  - Beside using the ToolBar to change the View property of the
-	    file ListView it is now possible to use the context menu too.
-
-2006-06-08  Alexander Olk  <alex.olk at googlemail.com>
-
-	* ComboBox.cs: Don't create a new ObjectCollection when an item
-	  gets inserted. Just insert the item in the existing object_items
-	  ArrayList.
-
-2006-06-08  Jackson Harper  <jackson at ximian.com>
-
-	* OpenTreeNodeEnumerator.cs: Fix to use the Parent property, so
-	that the treeview and root node checks are done also, this fixes a
-	regression i caused in the unit tests.
-
-2006-06-07  Wade Berrier <wberrier at novell.com> 
-
-	* RichTextBox.cs: More ISO8859-1 -> unicode
-
-2006-06-07  Mike Kestner  <mkestner at novell.com>
-
-	* ComboBox.cs : use items to hold highlight/selection so that
-	collection insertions don't require synchronization.
-
-2006-06-07  Jackson Harper  <jackson at ximian.com>
-
-	* InternalWindowManager.cs: Simplify (and FIX) the window sizing
-	routine.  We now always keep the sized edge at the cursor instead
-	of computing movement and adjusting rects.  There is one buglet
-	with this method though when the cursor is moved over area that
-	the window can not expand too (such as the toolbars on the desktop).
-
-2006-06-07 Gonzalo Paniagua Javier <gonzalo at ximian.com>
-
-	* XplatUIX11.cs: (IsEnabled,IsVisible) the window handler can be null
-	here. Fixes crash on startup in AlbumSurfer.
-
-2006-06-07  Peter Dennis Bartok  <pbartok at novell.com> 
-
-	* RichTextBox.cs: Replaced embedded ISO8859-1 chars with proper unicode
-	  values
-
-2006-06-07 Gonzalo Paniagua Javier <gonzalo at ximian.com>
-
-	* XplatUIX11.cs: call XPending and XNextEvent inside the same lock()
-	statement to avoid calling XNextEvent which will block if another thread
-	took the event that we were expecting. Fixes bug #78605.
-
-2006-06-07  Mike Kestner  <mkestner at novell.com>
-
-	* ListView.cs : isolated checkbox clicking from the selection logic.
-	Toggle check state on item doubleclicks.  Really fixes #78454 part2.
-
-2006-06-06  Carlos Alberto Cortez <calberto.cortez at gmail.com>
-
-	* Form.cs: Check that the value passed to Form.DialogResult
-	is a valid enum value.
-
-2006-06-06 Gonzalo Paniagua Javier <gonzalo at ximian.com>
-
-	* FileDialog.cs: disable the up button when in 'Recently Used' or 'My
-	Computer'. Clicking it in the network view goes to 'My Computer'.
-	Added CIFS filesystem type. Display the mount point of filesystems.
-	Avoid duplicate mount points (happens for me with CIFS);
-
-2006-06-06  Jackson Harper  <jackson at ximian.com>
-
-	* InternalWindowManager.cs: Draw the maximized windows buttons
-	when resizing.
-
-2006-06-06 Gonzalo Paniagua Javier <gonzalo at ximian.com>
-
-	* Form.cs: when running a modal dialog, ignore WM_CLOSE requests for
-	all other dialogs. Fixes bug #78585.
-
-2006-06-06  Mike Kestner  <mkestner at novell.com>
-
-	* CheckedListBox.cs : apply CheckOnClick behavior to unchecking too.
-	Only invalidate checkbox on checkstate changes to avoid flicker.
-	* ListBox.cs : avoid unselect/select when clicking selected item.
-	avoid reselection flicker for already multiselected items.
-	Fixes #78382.
-
-2006-06-06  Jackson Harper  <jackson at ximian.com>
-
-	* MdiWindowManager.cs: When the window is closed do an NCRecalc on
-	the parent form so that the menu is removed if needed.
-
-2006-06-06  Mike Kestner  <mkestner at novell.com>
-
-	* ListBox.cs : add ScrollWindow call to UpdateTopItem.  fix
-	Prev/Next/PrevPage/NextPage/Home/End index calculation.  Fixes #78559.
-
-2006-06-06  Mike Kestner  <mkestner at novell.com>
-
-	* CheckedListBox.cs : rebuild check collection on Add.  Fixes #78426.
-
-
-2006-06-06  Jackson Harper  <jackson at ximian.com>
-
-	* Control.cs: Use the property (instead of the field) to get the
-	default cursor so it is	instantiated correctly.
-	* InternalWindowManager.cs: The OS doesn't give us an NCPAINT with
-	resizes so we need to manually repaint the window decorations here.
-	- Set the titlebar button locations as soon as they are created,
-	otherwise they are not set correctly on win32.
-	
-2006-06-06  Chris Toshok  <toshok at ximian.com>
-
-	* CurrencyManager.cs (set_Position): call PullData before
-	OnCurrentChanged.
-	(AddNew): after calling IBindingList.AddNew, update our
-	listposition, and call OnCurrentChanged/OnPositionChanged (without
-	calling PullData).
-	(OnCurrentChanged): remove the call to PullData from here.
-	(OnItemChanged): remove the call to PushData from here.
-	(OnPositionChanged): change the test from == null to != null to
-	match the other methods.
-	(ListChangedHandler): the grossest part of the patch.  Implement
-	this such that it passes the unit tests in CurrencyManagerTest and
-	the output more or less matches that of MS's implementation.
- 
-2006-06-06  Mike Kestner  <mkestner at novell.com>
-
-	* ListView.cs : only update check state on single click.
-	* ThemeWin32Classic.cs : fix focus drawing for details view without
-	fullrowselect.  Fixes #78454.
-	* XplatUIX11.cs : fix for double click emission.
-
-2006-06-05  Jonathan Chambers  <jonathan.chambers at ansys.com>
-
-	* PropertyGridView.cs : Applied Atsushi's patch to fix
-	font dialog bug  (#78197).
-
-2006-06-05  Jackson Harper  <jackson at ximian.com>
-
-	* TreeNode.cs: Compute the next node for expanding/collapsing
-	correctly. We now factor in nodes without a NextNode
-	correctly. (Fixes somes cases in nunit-gui).
-	* InternalWindowManager.cs: Set the bounds when updating the
-	virtual position of a tool window.
-	
-2006-06-05  Chris Toshok  <toshok at ximian.com>
-
-	* DataGrid.cs: rename cached_currencymgr to list_manager.
-	(set_CurrentCell): move SetCurrentCell code here, and clean it up
-	some.
-	(CurrentRow, CurrentColumn): single accessors so we can make the
-	cursor movement code a lot easier to understand.
-	(CurrentRowIndex): implement this in terms of CurrentRow.
-	(BeginEdit): clean this up a bit.
-	(CancelEditing): sort out the is_editing/is_changing/is_adding
-	stuff a little.
-	(EndEdit): minor changes.
-	(OnKeyDown): add a comment about a (most likely) unnecessary
-	check.
-	(OnMouseDown): cancel editing when we click on a row header.  And
-	use the CurrentRow setter, not CurrentCell.
-	(ProcessDialogKey): directly call ProcessGridKey.
-	(UpdateSelectionAfterCursorMove): factor out this common block of
-	code (it's used everywhere that we move the cursor by updating row
-	or column).
-	(ProcessGridKey): pretty substantial overhaul.  Use the
-	CurrentRow/CurrentColumn properties to make the code a lot more
-	readable.  Only use the CurrentCell property when we have to
-	modify both row and column at once.  Tab behavior is still broken,
-	and Delete is untested.
-	(Select): if we have no selected rows, set selection_start to
-	@row.
-	(EditCurrentCell): rename EditCell this.  It was only ever invoked
-	with CurrentCell as the arg, so drop the arg and rename it.
-
-	* DataGridColumnStyle.cs: clean up the constructors a little, and
-	drop CommonConstructor().
-
-	* DataGridTextBox.cs (.ctor): set accepts_return to true so we
-	actually get notified when the user hits it.
-	(ProcessKeyMessage): *substantially* simplify this method.
-	There's no reason (that I can see) for the textbox to be making
-	calls into the datagrid at all.  Remove all of them but the ones
-	for Enter handling.  those will take some more work.
-
-	* DataGridTextBoxColumn.cs (ConcedeFocus): implement this by
-	calling HideEditBox.
-	(HideEditBox): if we have an active textbox, render it invisible
-	without causing a re-layout of the datagrid.
-
-2006-06-05  Mike Kestner  <mkestner at novell.com>
-
-	* ListView.cs : fix NRE crasher when focuseditem is cleared by
-	collection changes by resetting it to Items[0].  Fixes #78587.
-
-2006-06-05 Gonzalo Paniagua Javier <gonzalo at ximian.com>
-
-	* MessageBox.cs: if the height of the text is larger than the icon_size,
-	use that. Fixes bug #78575.
-
-2006-06-05  Jackson Harper  <jackson at ximian.com>
-
-	* TreeView.cs: Fix line drawing when scrolling.  To do this each
-	node is basically responsible for drawing its entire horizontal
-	area.  When drawing a node it draws its parent node lines if
-	needed.
-	- Adjust the clip area to the viewport rectangle
-	- Fix Left/Right key handling to match MS. (It expand/collapses
-	and moves to parents/first child but does not move selection to
-	sibling nodes).
-	- Fix SetTop to work with new bound calculation code
-	- When scrollbars are no longer needed we need to reset scrolling
-	vars and recalculate the visible order so the redraw is correct
-	* TreeNode.cs: We can't expand/collapse nodes with no children.
-
-2006-06-03  John Luke  <john.luke at gmail.com> 
-
-	* X11DesktopColors.cs: dllimport the exact gtk and gdk versions
-	so the colors work without dev packages
-	
-2006-06-02  Peter Dennis Bartok  <pbartok at novell.com> 
-
-	* Control.cs 
-	  - Select: Implemented to just use activate. Seems to match MS 
-	    behaviour closest. Documented to only do actual control walking 
-	    based on it's parameters if in a container control so I moved 
-	    the code there.
-	  - Removed selection check logic from our internal Select() method
-	* ContainerControl.cs:
-	  - Select: Moved selection logic from Control here, since MS documents
-	    that containers obey the bool arguments. No longer calling base
-
-2006-06-02  Jackson Harper  <jackson at ximian.com>
-
-	* TreeView.cs: If the selected node isn't changed when we get
-	focus update the previously selected node so that we see the
-	selection box.
-
-2006-06-02  Mike Kestner  <mkestner at novell.com>
-
-	* ComboBox.cs: restructure grab and general mouse event handling.
-	Make the composite control raise mouse events like it was a single
-	control for leaves/enters/motion/up/down events.  fix dropdown list
-	coordinate mangling and refactor it into the scrollbar subclass to
-	reduce code duplication.  Fixes #78282 #78361 and #78457.
-
-2006-06-02  Mike Kestner  <mkestner at novell.com>
-
-	* ScrollBar.cs: remove Capture setting/clearing, as it happens
-	automatically in the Control.WndProc.
-
-2006-06-01 Gonzalo Paniagua Javier <gonzalo at ximian.com>
-
-	* FileDialog.cs: fix crash when running SharpChess, which sets the
-	FilterIndex to 2 with only one Filter.
-
-2006-06-01 Gonzalo Paniagua Javier <gonzalo at ximian.com>
-
-	* ToolBar.cs: add SizeSpecified property.
-	* ToolBarButton.cs: when the ButtonSize is calculated by the container,
-	try to figure out our real size, otherwise fallback to what the
-	container says.
-
-2006-06-01  Peter Dennis Bartok  <pbartok at novell.com> 
-
-	* XplatUIX11.cs (DefWndProc): WM_MOUSEWHEEL needs to be passed up
-	* Control.cs (WndProc): MS always calls the DefWndProc to pass
-	  up the event
-
-2006-06-01  Mike Kestner  <mkestner at novell.com>
-
-	* ListView.cs: revamp the focus management in ListView.  It still
-	causes churn of LostFocus/GotFocus emissions on clicks, but it's
-	better than not handling focus at all.  Will revisit when pdb feels
-	the general focus handling is solid.  Fixes #78526.
-
-2006-06-01  Jackson Harper  <jackson at ximian.com>
-
-	* TreeView.cs: Set the default border style in the constructor.
-	- Move painting to use OnPaintInternal instead of capturing
-	WM_PAINT, this is the correct way of doing things
-	- UpdateBelow shouldn't invalidate the scrollbar area
-	- Cap the top on update below in case the node was above the top
-	of the viewport rectangle.
-	- ExpandBelow and Collapse below need to obey Begin/End Update.
-	* TreeNode.cs: Make is_expanded internal so the treenode
-	collection can change it without firing the whole event chain.
-	* TreeNodeCollection.cs: When clearing all the child nodes make
-	sure to recalc the visible order.
-	- Improve algo for remove the top node
-
-2006-06-01  Peter Dennis Bartok  <pbartok at novell.com> 
-
-	* XplatUIX11.cs (SetFocus): Make sure we can handle re-entrancy due to
-	  SendMessage directly calling window procedures, which in turn might
-	  call SetFocus()
-
-2006-06-01  Peter Dennis Bartok  <pbartok at novell.com>
-
-	* Control.cs: Don't handle WM_SETFOCUS if the same window already
-	  has focus (works around X11 sending a FocusIn after our SetFocus)
-	* XplatUIX11.cs: Send KILLFOCUS before setting SETFOCUS on new window
-
-2006-06-01  Alexander Olk  <alex.olk at googlemail.com>
-
-	* Mime.cs: Fix for the NET_2_0 build.
-	  NameValueCollection needs StringComparer now.
-
-2006-05-31  Chris Toshok  <toshok at ximian.com>
-
-	* DataGridDrawingLogic.cs (FromPixelToColumn): modify this to also
-	return (via an out parameter) the starting X of the column.
-	(UpdateVisibleColumn): track change to FromPixelToColumn.
-	(HitTest): add a ColumnResize case here.
-	(DrawResizeLine): new function, probably poorly named.
-
-	* DataGrid.cs (.ctor): get rid of cached_currencymgr_events.  We
-	only need to keep one reference.
-	(set_ListManager): same.
-	(OnMouseDown): call HitTest instead of grid_drawing.HitTest.
-	Also, add support for HitTestType.ColumnResize.
-	(OnMouseMove): add column resize behavior here, and change the
-	cursor to the correct one as we move around the datagrid.
-	(OnMouseUp): terminate the column resize if we're resizing.
-	(ProcessGridKey): from the MS docs, Alt-0 enters the null value
-	for the current cell.
-	(ConnectListManagerEvents): use cached_currencymgr.
-	(DisconnectListManagerEvents): fill this in, using
-	cached_currencymgr.
-	(SetCurrentCell): remove cached_currencymgr_events handling.
-	(SetDataMember): only call DisconnectListManagerEvents if
-	cached_currencymgr is != null.
-	(SetDataSource): same.
-	(OnListManagerCurrentChanged): cached_currencymgr_events ->
-	cached_currencymgr.
-
-2006-05-31  Jackson Harper  <jackson at ximian.com>
-
-	* BindingManagerBase.cs: Remove somedebug code that creeped into
-	SVN.
-	* TreeNode.cs: We get the indent level dynamically right now, so
-	don't track it as a member.
-	* TreeNodeCollection.cs: Make sure all nodes added to the list
-	have parents, treeviews/topnodes setup properly.
-	- Don't attempt to track indent level.
-
-2006-05-30  Jackson Harper  <jackson at ximian.com>
-
-	* BindingContext.cs: Create the currency manager tables here.
-	This allows us to more easily create null tables (when bad data
-	members are used), and more easily create related currency
-	managers.
-	* CurrencyManager.cs: All the table creation stuff is done by the
-	binding context now.
-	- Current should throw an exception if listposition is -1.
-	- CancelCurrentEdit/EndCurrentEdit, do nothing if the list hasn't
-	been bound yet.
-
-2006-05-30  Mike Kestner  <mkestner at novell.com>
-
-	* ListView.cs: allow reexpansion of zero-width column headers.
-	Fixes #78528.
-
-2006-05-28  Chris Toshok  <toshok at ximian.com>
-
-	* CurrencyManager.cs (get_Current): after the late binding
-	listposition = -1 fix, we need to guard against it here and return
-	null, otherwise we raise an exception (which is swallowed
-	elsewhere, and breaks datagrid databinding.)
-
-2006-05-26  Peter Dennis Bartok  <pbartok at novell.com>
-
-	* MenuAPI.cs (ProcessMenuKey): We can legally get msg types other
-	  than WM_SYSKEY, don't throw if get something unexpected (#78507)
-
-2006-05-26  Jackson Harper  <jackson at ximian.com>
-
-	* ControlPaint.cs:
-	* ThemeWin32Classic.cs: For color comparisons just use the ARGB
-	values, it's faster and it's all we care about (we don't care if
-	the names aren't equal).
-	* KeyboardLayouts.cs: Eliminate some dead code.
-	- Lazy init things
-	* X11Keyboard.cs: Lazy init keyboard detection.
-	- Cleanup access modifiers a little.
-
-2006-05-26  Peter Dennis Bartok  <pbartok at novell.com>
-
-	* XplatUIX11.cs: Once again, attempting to get layout just right.
-
-2006-05-26  Peter Dennis Bartok  <pbartok at novell.com> 
-
-	* LinkLabel.cs (CreateLinkPieces): Use MeasureString to calculate
-	  the sizes of each link section, that will result in sizes that
-	  match DrawString's layout (Fixes #78391)
-
-2006-05-27  Alexander Olk  <alex.olk at googlemail.com>
-
-	* FileDialog.cs: If AddExtension property is true autocomplete the
-	  extensions in SaveFileDialog correctly. Fixes bug #78453.
-	  Set MyNetwork and MyComputer to "C:\" for windows. This should
-	  fix part 8 of bug #78446 for now.
-
-2006-05-26  Chris Toshok  <toshok at ximian.com>
-
-	* DataGrid.cs (ColumnStartedEditing): fill these in.  for now just
-	invalidate the current row header if we need to, but presumably
-	we'll invalidate the row corrsponding to the bounds or
-	editingControl.
-	(GridHScrolled): switch back to this method, as it's part of the
-	public api.  *sigh*.
-	(GridVScrolled): same.
-	(OnMouseWheel): hack up something that more or less works.  Call
-	GridHScrolled/GridVScrolled directly, instead of duplicating much
-	of their code here.
-	(EnsureCellVisibility): reinstate a bunch of this code, since we
-	can't just set the scrollbar Value and expect to do all the work
-	in the ValueChanged handler.  Also, Call Update() after scrolling
-	in one direction so the other XplatX11.ScrollWindow call has the
-	proper stuff in the proper places.
-	(EditCell): set is_editing to true before calling .Edit.
-
-	* DataGridTextBox.cs (set_IsInEditOrNavigateMode): just set it,
-	don't bother comparing first.
-	(OnKeyPress): call grid.ColumnStartedEditing before calling
-	base.OnKeyPress.  this will set is_changing and invalidate the row
-	header if necessary.
-	(ProcessKeyMessage): for WM_CHAR messages, call
-	ProcessKeyEventArgs directly.  swallow anything other than WM_CHAR
-	and WM_KEYDOWN.
-	
-	* DataGridBoolColumn.cs (Edit): don't set is_editing to true here.
-	it's done in the DataGrid.
-	(NextState): call grid.ColumnStartedEditing, which takes care of
-	invalidating the row header (and setting is_changing).
-
-	* DataGridTextBoxColumn.cs (Edit): don't set is_editing to true
-	here.  it's done in the DataGrid.
-
-2006-05-25 Gonzalo Paniagua Javier <gonzalo at ximian.com>
-
-	* Control.cs: allow changing the cursor when the mouse position is
-	out of bounds but Capture is set.
-	* LinkLabel.cs: handle the case when the mouse button is pressed on the
-	linklabel but released somewhere else.
-
-2006-05-25  Jackson Harper  <jackson at ximian.com>
-
-	* TreeView.cs: When we get focus if there is no selected node make
-	it the top node
-	- Remove some uneeded setup code from Draw.
-	* TreeNodeCollection.cs: If the tree doesn't have a top node when
-	a new node is inserted make the new node the top.
-	* XplatUIX11.cs:
-	* Timer.cs: Use Utc time so that no local time zone stuff needs to
-	be used (should be faster).
-	
-2006-05-25  Chris Toshok  <toshok at ximian.com>
-
-	* DataGrid.cs (EnsureCellVisibility): remove some code to fix a
-	problem with the last commit.
-
-2006-05-25  Chris Toshok  <toshok at ximian.com>
-
-	* DataGridTextBoxColumn.cs (ReleaseHostedControl): turns out we do
-	need the invalidate call here, while scrolling right-to-left via
-	the left arrow key (i.e. moving the editing cell while scrolling).
-
-	* DataGrid.cs (.ctor): remove the initialization of
-	ctrl_pressed/shift_pressed.  We no longer track them using key
-	up/down handlers, but by using Control.ModifierKeys.  Also, switch
-	to using ValueChanged handlers on the scrollbars instead of
-	Scrolled event handlers.  This simplifies a bunch of the scrolling
-	code.
-	(GridHValueChanged): rename from GridHScrolled, and change it to
-	work with the new event args.
-	(GridVValueChanged): same.
-	(OnMouseDown): initialize ctrl_pressed/shift_pressed here.
-	(OnMouseWheel): actually scroll the datagrid.  Don't change the
-	selected cell.
-	(ProcessGridKey): correct all the keyboard navigation stuff I
-	could find.  Ctrl up/down/left/right/home/end work now.
-	(EnsureCellVisibility): correct method name spelling.  Also,
-	simplify this a touch by not explicitly calling the
-	ScrollToRow/ScrollToColumnInPixels methods.  We just set the
-	scrollbar value.
-	(OnKeyUpDG): no need for this method now.
-	
-2006-05-25 Gonzalo Paniagua Javier <gonzalo at ximian.com>
-
-	* LinkLabel.cs: display the OverrideCursor when hovering the label.
-	Fixes bug #78392.
-
-2006-05-25  Chris Toshok  <toshok at ximian.com>
-
-	* ThemeWin32Classic.cs: fix datagrid clipping problems caused by
-	r61019.
-
-2006-05-25  Peter Dennis Bartok  <pbartok at novell.com> 
-
-	* Application.cs: Moved setting of is_modal and closing to before
-	  we create the control, to allow the event handlers called as a
-	  result of creation affect closing. Also removed Gonzalo's previous
-	  change to setting DialogResult, the behaviour has been moved to 
-	  Form.ShowDialog()
-	* Form.cs: 
-	  - ShowDialog(): Removed explicit creation of the form, let RunLoop
-	    handle it instead
-	  - ShowDialog(): If no dialog result is set, we need to return Cancel
-	  - WM_CLOSE: Fire Closing/Closed events, and reset dialog result if
-	    the close is cancelled
-
-2006-05-25  Jackson Harper  <jackson at ximian.com>
-
-	* StatusBar.cs: We only need to update the sizes of the other
-	panels when we have auto size contents.  Also we are only updating
-	the contents of the panel, not the borders, so compensate for the
-	border width (TODO: get this width from the theme somehow).
-	* TreeView.cs: Scrollable is true by default
-	- Use invalidate instead of refresh where needed
-	- Factor the scrollable value into scrollbar updating
-	- Update the scrollbars if the Scrollable property is altered
-	- Update the selected node if its ImageIndex is changed
-	- Handle null nodes in UpdateNode (mainly so we don't have to
-	check if selected is null when updating it
-	- Fix VisibleCount to use the ViewportRectangle so that scrollbars
-	are factored into the visible count
-	- Use VisibleCount for clarity in the code
-	- When the font is changed we need to recurse through all the
-	nodes and invalidate their sizes
-	
-2006-05-25 Gonzalo Paniagua Javier <gonzalo at ximian.com>
-
-	* Application.cs: set the DialogResult to fixed when the main form is
-	hidden or destroyed while being modal.
-
-2006-05-25  Miguel de Icaza  <miguel at novell.com>
-
-	* Theme.cs: Use Tangoified messagebox icons. 
-
-	(GetSizedResourceImage): Also cope with width = 0 and do not
-	trigger a warning in that case (0 means "give me your icon from
-	the resouce, no special size needed).
-
-2006-05-25  Peter Dennis Bartok  <pbartok at novell.com> 
-
-	* Application.cs: Leave runloop if the the main modal form is 
-	  hidden (fixes #78484)
-
-2006-05-25  Atsushi Enomoto  <atsushi at ximian.com>
-
-	* BindingContext.cs : reject null datasource in Contains() and
-	  Item[].
-	* CurrencyManager.cs : check data_member validity when data_source
-	  is dataset. When it is late binding, the initial position is -1.
-
-2006-05-24  Jackson Harper  <jackson at ximian.com>
-
-	* TreeNodeCollection.cs: Dont't recalculate the visible order on
-	inserted nodes that aren't visible.  This changes the
-	max_visible_order which confuses scrollbar settings.
-	- Use the enumerator to get the prev node instead of duplicating
-	code.
-	* TreeView.cs: Use new method for setting scrollbar values
-	- Don't set the bounds every time the scrollbar is updated
-	- When updating below the root node use an invalidate instead of a
-	refresh to prevent the child controls (scrollbars) from being
-	refreshed. (UpdateBelow still needs to be reworked anyways).
-	- Reenable SetBottom now that visible orders are set correctly,
-	added some debug code incase we ever get bad values there again.
-	- Set the scrollbar max to 2 less then the max value, this
-	compensates for the max value being one above the node count, and
-	for scrollbars adding one extra "notch".
-	- When drawing image nodes if there is an imagelist we draw the
-	first image in the list if the supplied image index is out of the
-	image list's bounds.
-	
-2006-05-24  Peter Dennis Bartok  <pbartok at novell.com> 
-
-	* XplatUIX11.cs: Don't blindly cache hwnd.ClientRect, reset it when 
-	  we receive a size change from the WM (Fixes #78503)
-
-2006-05-24  Peter Dennis Bartok  <pbartok at novell.com>
-
-	* XplatUIWin32.cs, XplatUIX11.cs: Refresh when setting the Clip 
-	  rectangle (Fixes #78501)
-
-2006-05-24  Peter Dennis Bartok  <pbartok at novell.com> 
-
-	* ButtonBase.cs: 
-	  - Fixed MouseUp, MouseDown and MouseMove to treat mouseevent.Button 
-	    as a bitfield.
-	  - Fixed MouseMove to no longer switch pressed state unless the left
-	    mouse button is pressed. Atsushi provided the original patch (#78485)
-	  
-2006-05-24  Jackson Harper  <jackson at ximian.com>
-
-	* ScrollBar.cs: New internal methods that allow us to change a
-	couple values on the scrollbar (the most common case is maximum
-	and large change) without getting multiple invalidates.
-
-2006-05-24  Chris Toshok  <toshok at ximian.com>
-
-	* DataGridBoolColumn.cs (Abort): revert back to the saved setting.
-	(Edit): save off the original state in oldState, and set
-	grid.is_editing to true.
-	(OnKeyDown): abort editing if escape is pressed.  also, call
-	NextState if space is pressed.
-	(OnMouseDown): call NextState.
-	(NextState): factor out shared code from OnKeyDown and OnMouseDown
-	here.  Also, only invalidate the row header once (on the initial
-	is_changing switch) to save on redraws.
-
-2006-05-24  Chris Toshok  <toshok at ximian.com>
-
-	* DataGridTextBoxColumn.cs (Commit): only call SetColumnValueAtRow
-	if the value in the cell is different than it was before.  This
-	keeps us from triggering a layout when we move around a datarid
-	with a highlighted cell.
-	(Edit): suspend layout when creating/positining the text box, and
-	resume passing false so we don't ever actually re-layout.
-	(ReleaseHostedControl): same.
-	(EnsureTextBox): reformat slightly, and set WordWrap to false.
-
-	* DataGridTextBox.cs (ProcessKeyMessage): it's not true that all
-	control-key sequences should go to the datagrid - remove that
-	lock.  Also, modify the conditions under which we move between
-	cells when moving the cursor within a cell, and remove the "this"
-	and "base" from field accesses.  We weren't even consistent, given
-	they all were in the base class.
-
-2006-05-24  Atsushi Enomoto  <atsushi at ximian.com>
-
-	* Binding.cs : (.ctor)
-	  An obvious NRE fix for BindingTest.CtorNullTest().
-
-2006-05-23  Chris Toshok  <toshok at ximian.com>
-
-	* TextBoxBase.cs (get_Text): don't add a trailing newline, add
-	them between lines.  This fixes some quirks editing cells in the
-	datagrid.
-
-2006-05-23  Jackson Harper  <jackson at ximian.com>
-
-	* TreeView.cs: Use begin/end update when doing expand/collapse all
-	so that we don't get flicker on the scrollbar.
-
-2006-05-23  Jackson Harper  <jackson at ximian.com>
-
-	* TreeNode.cs: Bounds are computed 'on the fly' now.  This allows
-	treenode calculations to be independant of the painting code. To
-	do this nodes track a visible order which is calculated by the
-	treeview.
-	- Call new methods for expanding/collapsing nodes.  These methods
-	use scrollwindow so we don't have to update everything below the
-	node.
-	* TreeView.cs: Refactored drawing and scrolling code.  We don't
-	need to update nodes when drawing anymore or calculate scrollbar
-	stuff.
-	- Added new methods for expanding/collapsing nodes. These methods
-	use ScrollWindow so as to not have to redraw all the nodes below.
-	* TreeNodeCollection.cs: Recalc visible order and scrollbars when
-	we add/remove nodes or sort.
-	- Handle removing the selected and the top node properly.
-
-2006-05-23  Chris Toshok  <toshok at ximian.com>
-
-	* DataGridTextBoxColumn.cs (Edit): set grid.is_editing to true.
-	maybe this should actually happen in the datagrid code?
-	(EndEdit): no need to invalidate anything, given that
-	ReleaseHostedControl causes the datagrid to relayout, which
-	invalidates everything anyway.
-
-	* DataGrid.cs (set_CurrentCell): remove duplicate check (it's also
-	in SetCurrentCell).
-	(set_SelectionBackColor): call InvalidateSelection instead of
-	Refresh.
-	(set_SelectionForeColor): same.
-	(BeginEdit): Flesh this out a bit.
-	(CancelEditing): only do any of this if we're editing/adding.
-	(EndEdit): same.
-	(OnMouseDown): there's no need to cancel editing here, it's done
-	in SetCurrentCell.
-	(SetCurrentCell): only invalidate the current row header if it's a
-	different row than the new one.
-	(ShiftSelection): fix this to work like MS does.
-	(ResetSelection): factor out the invalidation of selected_rows to
-	InvalidateSelection.
-	(SetDataSource): cancel any editing that's going on.
-
-	* DataGridColumnStyle.cs
-	(IDataGridColumnStyleEditingNotificationService.ColumnStartedEditing):
-	call the non-interface version.
-
-	* ThemeWin32Classic.cs (DataGridPaintColumsHdrs): intersect the
-	header rectangle with the clip rectangle so we don't redraw the
-	entire header for just a small area.  Gets rid of the last flicker
-	when horizontally scrolling.
-	(DataGridPaintRow): same.
-
-2006-05-23  Mike Kestner  <mkestner at novell.com>
-
-	* ListViewItem.cs: remove size for line hack from LargeIcon layout.
-	* ThemeWin32Classic.cs: don't draw line.  it's really the top of a
-	poorly placed checkbox on the MS control.  Fixes Alex's unfiled
-	Critical bug report.
-
-2006-05-23  Peter Dennis Bartok  <pbartok at novell.com> 
-
-	* PictureBox.cs: Fixed broken ControlStyles. Unit test no longer fails,
-	  and this fixes #78493
-
-2006-05-23  Miguel de Icaza  <miguel at novell.com>
-
-	* Theme.cs (GetSizedResourceImage): Scale images if the proper
-	size is not found.  
-	
-	* FileDialog.cs: Do not change the background for the side bar as
-	it wont work nicely with the theme, and also reduces the artifacts
-	in rendering the icons (which I want to fix too).
-
-	* MimeIcon.cs (ResourceImageLoader): Load images from assembly
-	resources, not resgen resources. 
-
-	(PlatformDefaultHandler): Pull images using the new API.
-
-2006-05-23  Peter Dennis Bartok  <pbartok at novell.com> 
-
-	* Hwnd.cs (Dispose): Remove any pending exposures. XEventQueue holds
-	  a reference to the hwnd and will not remove it unless there are
-	  no pending exposures (fixes #78341)
-	* XplatUI.cs: Improved debug
-
-2006-05-23  Atsushi Enomoto  <atsushi at ximian.com>
-
-	* MenuAPI.cs : don't handle OnClick event when it was not the left
-	  button. Fixed bug #78487.
-
-2006-05-23  Mike Kestner  <mkestner at novell.com>
-
-	* MenuAPI.cs: fix placement of submenus for multi-row menu bars, and
-	prefer submenus to the top menu for item lookup, to avoid popping down
-	top-row items.
-
-2006-05-23  Alexander Olk  <alex.olk at googlemail.com>
-
-	* ThemeWin32Classic.cs: Rewrote CPCPDrawScrollButton to drop
-	  Graphics.FillRectangle as the visual results are really bad (even
-	  on win). We now draw perfect arrows (and perfect shadows when the
-	  scrollbar is disabled). Simplified CPDrawGrid. CPDrawGrid now uses
-	  Pen.DashPattern to draw the dots of each line.
-
-2006-05-22  Alexander Olk  <alex.olk at googlemail.com>
-
-	* FileDialog.cs: Update the filename combobox when navigating through
-	  the ListView with the cursor keys. Fixes part 7 of bug #78446.
-
-2006-05-22  Mike Kestner  <mkestner at novell.com>
-
-	* ListView.cs: raise SelectedIndexChanged on keyboard selection.
-	Fixes #78463.
-
-2006-05-22  Mike Kestner  <mkestner at novell.com>
-
-	* ComboBox.cs: Refresh in EndUpdate to pick up all the dropped Paint
-	requests. Fix a misspelled parameter and a copy paste exception error
-	in Select.
-
-2006-05-22  Peter Dennis Bartok  <pbartok at novell.com> 
-
-	* ThemeWin32Classic.cs: Changed DefaultFont emSize from 8.25 to 8
-	  to get the same width/height (5/13) on X11 as the default font has on
-	  win32. This means that our DefaultFont emSize is smaller than the 
-	  the MS SWF equivalent (even thought the width/height stays the same)
-
-2006-05-20  Jackson Harper  <jackson at ximian.com>
-
-	* MdiClient.cs:
-	* MdiWindowManager.cs:
-	* InternalWindowManager.cs: Make sure to use the border width from
-	the theme.
-
-2006-05-20  Jordi Mas i Hernandez <jordimash at gmail.com>
-
-	* PrintDialog.cs: Implements printer details
-
-2006-05-19  Alexander Olk  <alex.olk at googlemail.com>
-
-	* FileDialog.cs: Added focus handling for PopupButtonPanel.
-	  Fixes part 1 and 2 of bug #78446
-
-2006-05-19  Peter Dennis Bartok  <pbartok at novell.com> 
-
-	* XplatUIX11.cs (SetWindowPos): Recalculate client area size on resizes
-	  instead of sticking to the first ever calculated value
-
-2006-05-19  Mike Kestner  <mkestner at novell.com>
-
-	* ComboBox.cs: fix mouse motion selection to use MousePosition and
-	PointToClient, since Capture is set. Fixes #78344.
-
-2006-05-19  Mike Kestner  <mkestner at novell.com>
-
-	* ListView.cs: match MS behavior in Details view where items are not
-	drawn if Columns.Count == 0. 
-	* ThemeWin32Classic.cs: only highlight ListView selection if focused.
-	Use a separate pen to draw the check, since changing the width affects
-	the box as well.  Fixes #78454.
-
-2006-05-18  Miguel de Icaza  <miguel at novell.com>
-
-	* ListView.cs: ArgumentOutOfRangeException, single versions of the
-	exception should throw the name of the invalid argument.
-
-	* FileDialog.cs (OnClickOpenSaveButton): Avoid crash in open if
-	there are no files listed. 
-
-2006-05-18  Jackson Harper  <jackson at ximian.com>
-
-	* ThemeWin32Classic.cs: Don't use endcaps, they mess the drawing
-	up.
-
-2006-05-18  Peter Dennis Bartok  <pbartok at novell.com> 
-
-	* Control.cs: Brought back our old UpdateZOrder method as a private
-	  function and switched our calls from UpdateZOrder to the new one.
-	  This fixes the Paint.Net canvas disappearing bug.
-
-2006-05-18  Jackson Harper  <jackson at ximian.com>
-
-	* Theme.cs:
-	* ThemeWin32Classic.cs:
-	* InternalWindowManager.cs: Move the drawing into the theme,
-	expose everything the theme should need from the window manager.
-
-2006-05-18  Peter Dennis Bartok  <pbartok at novell.com>
-
-	* XplatUIX11.cs (DefWndProc): WM_SETCURSOR: Assign the return value 
-	  from the call to NativeWindow to avoid walking up the parent chain
-	  further than needed (speeds up setting cursors and avoids setting
-	  the wrong cursor if a parent has another cursor defined)
-	* Cursor.cs: When loading an icon as cursor, MS uses the center of
-	  the icon as hotspot, not what's contained as hotspot in the icon
-	  file. This fixes the perceived drawing offset seen with Paint.Net
-	
-2006-05-18  Peter Dennis Bartok  <pbartok at novell.com> 
-
-	* XplatUIX11.cs: 
-	  - Store the calculated rectangle in Hwnd object and use it when 
-	    setting the client size
-	  - Force Toolwindows to always be type Dock, to ensure they're on top
-
-2006-05-18  Mike Kestner  <mkestner at novell.com>
-
-	* ComboBox.cs: first pass at ComboBox rework.  Layout is more
-	consistent with MS positioning.  IntegralHeight, ItemHeight, Sizing.
-	Correctly initialize textcontrol and ListBox on DropDownStyle changes. 
-	Substantial refactoring to remove confusing nested classes. Coding
-	standard and Get+Set->property refactorings.  Shift to index based
-	highlighting in ComboListBox instead of constantly using IndexOf and
-	Items[]. Add invalidations on resize for DropDownList to fix ugliness
-	in FileDialog growth.  Draw borders manually since Simple mode needs
-	to look like two independent controls.  Make listbox border
-	conditional to DropDownStyle.  Improved OwnerDraw support.
-
-2006-05-18  Sebastien Pouliot  <sebastien at ximian.com>
-
-	* PaintEventArgs.cs: For 2.0, check for a null Graphics in the .ctor. 
-	Don't set the disposed graphics to null, so we can throw the "right"
-	exception if the graphics is reused later (added a flag to avoid 
-	double disposing). Some behaviours are different under 2.0 and are
-	filled under bug #78448.
-
-2006-05-18  Peter Dennis Bartok  <pbartok at novell.com>
-
-	* Control.cs: When double-buffering is enabled, we need to reset
-	  our graphics context between paint calls. Otherwise, any 
-	  transformations and other alterations on the context will 
-	  become cumulative (#77734)
-
-2006-05-18  Mike Kestner  <mkestner at novell.com>
-
-	* ListView.cs: do focused item selection like MS on clicks. 
-	Rework focus handling for ItemControl so LostFocus invalidates as
-	well.
-	* ThemeWin32Classic.cs: only draw focus rectangle for ListViewItems if
-	the ListView ItemControl has focus.
-
-2006-05-17  Peter Dennis Bartok  <pbartok at novell.com>
-
-	* XplatUIX11.cs: If client_window ends up being width or height zero
-	  due to border settings, move it off window inside whole_window (#78433)
-
-2006-05-17  Alexander Olk  <alex.olk at googlemail.com>
-
-	* Mime.cs: Shrink the mime file cache correctly.
-
-2006-05-17  Alexander Olk  <alex.olk at googlemail.com>
-
-	* ThemeWin32Classic.cs: Readded button focus drawing code. (#78429)
-
-2006-05-16  Peter Dennis Bartok  <pbartok at novell.com>
-
-	* XplatUIX11.cs (AddExpose): More sanity checks
-
-2006-05-16  Peter Dennis Bartok  <pbartok at novell.com> 
-
-	* XplatUIX11.cs:
-	  - AddExpose: Don't add expose ranges outside the size of our
-	    window
-	  - Cast opacity values to Int32 to avoid crashes with certain
-	    values
-	  - Added disabled code paths that protect against illegal cross-
-	    thread painting (Developers.exe)
-
-2006-05-16  Peter Dennis Bartok  <pbartok at novell.com>
-
-	* ProgressBar.cs: Invalidate the control when it's resized
-	  since block size is based on control size. (#78388)
-
-2006-05-16  Miguel de Icaza  <miguel at novell.com>
-
-	* DataGrid.cs (SetDataBinding): per the discussion on irc, instead
-	of setting the incoming argument to the "reset" value, we set the
-	this.datamember to string.empty (before we were invalidating the
-	incoming data).   
-
-	Fixes 78420
-
-2006-05-16  Peter Dennis Bartok  <pbartok at novell.com> 
-
-	* Form.cs: Only apply transparency settings after the form
-	  is created. (Fixes #77800)
-
-2006-05-16  Peter Dennis Bartok  <pbartok at novell.com>
-
-	* ApplicationContext.cs: Grab the HandleDestroyed event so
-	  we know when to fire OnMainFormClosed 
-
-2006-05-16  Peter Dennis Bartok  <pbartok at novell.com> 
-
-	* Application.cs: Introduced sub-class to allow tracking of
-	  threads and centralized triggering of the event mess for
-	  ThreadExit, AppExit, etc..  (#76156)
-
-2006-05-16  Alexander Olk  <alex.olk at googlemail.com>
-
-	* MimeIcon.cs:
-	  - Do not return a null icon index value for a mime subclass.
-	    Instead try the main mime type class too.
-	  - Seems that some newer distributions don't have a link to some
-	    gnome default icons anymore. So check the default gnome dir too.
-	  
-
-2006-05-16  Jackson Harper  <jackson at ximian.com>
-
-	* MdiClient.cs: Don't paint the parent background image if we have
-	our own background image.
-
-2006-05-16  Peter Dennis Bartok  <pbartok at novell.com> 
-
-	* Control.cs:
-	  - PerformLayout: Do not shrink space filled by DockStyle.Fill
-	    controls, all filled controls are supposed to overlap (#78080)
-	  - UpdateZOrder is supposed to update the control's z-order in the
-	    parent's z-order chain. Fixed to behave like that
-	  - BringToFront: Removed obsolete code
-	  - SendToBack: Simplyfied
-	  - SetChildIndex: Trigger layout calculations when Z-order changes
-	    since layout is done by z-order
-
-2006-05-16  Chris Toshok  <toshok at ximian.com>
-
-	[ fixes bug #78410 ]
-	* DataGrid.cs (set_AlternatingBackColor): use
-	grid_drawing.InvalidateCells instead of Refresh().
-	(set_BackColor): call grid_drawing.InvalidateCells.
-	(set_BackgroundColor): use Invalidate instead of Refresh.
-
-	* DataGridDrawingLogic.cs (InvalidateCells): new function, just
-	invalidate the cell area.
-
-2006-05-15  Chris Toshok  <toshok at ximian.com>
-
-	[ fixes bug #78011 ]
-	* ThemeWin32Classic.cs (DataGridPaintRows): pass the clip argument
-	on to DataGridPaintRow.
-	(DataGridPaintRow): take a clip argument, and only draw the cells
-	which intersect it.  same with the not_usedarea.
-
-	* Theme.cs (DataGridPaintRow) add @clip parameter.
-
-	* DataGrid.cs (ScrollToColumnInPixels): simplify, use
-	XplatUI.ScrollWindow.
-	(ScrollToRow): same.
-
-	* DataGridDrawingLogic.cs (UpdateVisibleColumn): fix corner case
-	with last column which was causing a gray swath to appear with the
-	XplatUI.ScrollWindow code.
-
-2006-05-15  Chris Toshok  <toshok at ximian.com>
-
-	* ListBox.cs (HorizontalScrollEvent): in the non-multicolumn case,
-	use XplatUI.ScrollWindow.
-	(VerticalScrollEvent): use XplatUI.ScrollWindow.
-
-2006-05-15  Peter Dennis Bartok  <pbartok at novell.com> 
-
-	* TextBoxBase.cs: Added handling of middle-button paste for X11. (#78375)
-
-2006-05-15  Peter Dennis Bartok  <pbartok at novell.com>
-
-	* Cursors.cs: For X11, read NWSE and NESW cursors from our resource
-	  file since there are no equivalent X11 cursors
-
-2006-05-15  Atsushi Enomoto  <atsushi at ximian.com>
-
-	* MonthCalendar.cs : DateTimePicker should reflect selected date
-	  on mouse*up*, not mouse*down*. Fixed originally reported part of
-	  bug #76474.
-
-2006-05-15  Atsushi Enomoto  <atsushi at ximian.com>
-
-	* TabControl.cs : When argument index is equal or more than tab
-	  count, just ignore. Fixed bug #78395.
-
-2006-05-15  Peter Dennis Bartok  <pbartok at novell.com>
-
-	* Control.cs: Dispose all child controls when control is diposed (#78394)
-
-2006-05-14  Alexander Olk  <alex.olk at googlemail.com>
-
-	* ColorDialog.cs: Finally it is possible to select the color with
-	  the text boxes
-
-2006-05-14  Alexander Olk  <alex.olk at googlemail.com>
-
-	* PrintDialog.cs: Fix typo
-
-2006-05-14  Alexander Olk  <alex.olk at googlemail.com>
-
-	* PrintDialog.cs: PrintDialog is not resizable
-	* ThemeWin32Classic.cs: Draw non links in LinkLabel with the correct
-	  color. Made some ToolBar drawing methods protected virtual.
-
-2006-05-13  Jordi Mas i Hernandez <jordimash at gmail.com>
-
-	* PrintDialog.cs: Implementation of the PrintDialog
-
-2006-05-12  Chris Toshok  <toshok at ximian.com>
-
-	* ScrollBar.cs (set_Value): don't use Dirty/Invalidate to move the
-	thumb, instead use MoveThumb.  This has the side effect of making
-	most of the other thumb moving machinery use MoveThumb as well.
-	(OnHandleCreated): pass false for @dirty to UpdateThumbPos, as we
-	need to actually invalidate the rectangle where the new thumb will
-	go.
-	(MoveThumb): use XplatUI.ScrollWindow to move the thumb around.
-	We force an Update() after, so it's not as fast as it could be,
-	but at least there's zero flicker and no droppings.
-	(OnMouseMoveSB): in the thumb dragging case, use MoveThumb.
-	(UpdateThumbPos): add another argument (dirty), which says whether
-	or not to calculate/add dirty regions which we later invalidate.
-	For cases where we know we're going to use MoveThumb, we pass
-	false for this.  Otherwise, pass true.
-
-2006-05-12  Jackson Harper  <jackson at ximian.com>
-
-	* ThemeWin32Class.cs: Fixes for alignment and icon rendering in
-	the status bar.
-	
-2006-05-12  Peter Dennis Bartok  <pbartok at novell.com>
-
-	* XplatUI.cs, XplatUIDriver.cs, XplatUIOSX.cs: Added new SetClipRegion
-	  and GetClipRegion methods and UserClipWontExposeParent property.
-	* XplatUIWin32.cs: Implemented SetClipRegion/GetClipRegion methods,
-	  overriding UserClipWontExposeParent property, setting to false, since
-	  Win32 handles the required expose messages to draw our clipped parent
-	  areas internally
-	* XplatUIX11.cs: Implemented SetClipRegion and GetClipRegion; updated
-	  PaintEventStart to set the user clip region if set.
-	* Control.cs: 
-	  - Now internally tracking the Region for the control since we need to
-	    store it if the handle is not yet created and only set it when it
-	    becomes created. Before setting the region forced handle creation
-	  - Added code to draw the parents underneath a user-clipped region
-	* Hwnd.cs: Added UserClip property
-
-2006-05-12  Chris Toshok  <toshok at ximian.com>
-
-	* ScrollBar.cs (set_LargeChange): Refresh() -> InvalidateDirty()
-	(set_Maximum): same.
-	(set_Minimum): same.
-	(set_SmallChange): same.
-	(OnMouseUpSB): remove the call to refresh when releasing the
-	thumb.  We shouldn't need it.
-	
-2006-05-12  Miguel de Icaza  <miguel at novell.com>
-
-	* StatusBar.cs (UpdatePanel): If the panel being refreshes has the
-	AutoSize set to None, we do not need to relayout everything, we
-	just need to invalidate the current region.
-
-	(Draw): Do not draw the entire ClientArea, just redraw the
-	clip area being passed.
-
-	* MdiClient.cs: Make MdiClient constructor with the Form argument
-	internal. 
-
-2006-05-12  Jackson Harper  <jackson at ximian.com>
-
-	* ThemeWin32Classic.cs (DrawToolBar): Flat toolbars get their
-	parents background image,  but strangely not their own.
-	- (DrawStatusBarPanel): Take into account horizontal alignment
-	when drawing the strings and icons.
-
-2006-05-12  Mike Kestner  <mkestner at novell.com>
-
-	* ListBox.cs: avoid invalidations for focus when the collection is
-	empty. 
-
-2006-05-12  Chris Toshok  <toshok at ximian.com>
-
-	* ScrollBar.cs (OnMouseMoveSB): when dragging the thumb, don't
-	invalidate the entire thumb area.  Call InvalidateDirty which
-	limits the redraw to the thumb itself and surrounding pixels.
-
-	* XplatUIX11.cs (ScrollWindow): optimize copying.
-	
-2006-05-12  Chris Toshok  <toshok at ximian.com>
-
-	* DataGridDrawingLogic.cs: make CalcGridAreas non-reentrant.
-	Figure out the positioning/layout in a single pass instead of
-	multiple recursive invocations.  Speeds up the initial display of
-	the data grid.  Also, make many things private that were
-	originally public but unused outside this class.
-
-2006-05-11  Jackson Harper  <jackson at ximian.com>
-
-	* MdiClient.cs: Improved layout code.
-
-2006-05-11  Jonathan Chambers  <jonathan.chambers at ansys.com>
-
-	* PropertyGrid.cs : Only check GetPropertiesSupported for properties,
-	  not SelectedObject.
-
-2006-05-11  Chris Toshok  <toshok at ximian.com>
-
-	* Hwnd.cs (Invalid): don't start off with Rectangle.Empty, as
-	union of that will always be {0,0,width,height}.
-
-2006-05-11  Jackson Harper  <jackson at ximian.com>
-
-	* Form.cs: Match MS's DefaultSize for forms (they must have
-	changed the size in sp2).
-
-2006-05-11  Atsushi Enomoto  <atsushi at ximian.com>
-
-	* TextBoxBase.cs : implement CTRL+A (select all). Fixed bug #78368.
-
-2006-05-11  Atsushi Enomoto  <atsushi at ximian.com>
-
-	* TextControl.cs : Fixed bug #78109. This incorrect position
-	  comparison caused crash on automatic line split.
-	* TextBoxBase.cs : reduce duplicate code.
-
-2006-05-10  Jackson Harper  <jackson at ximian.com>
-
-	* MdiClient.cs: Active form is only sent to the back when using
-	the Next form functionality, when a form is clicked the current
-	active shouldn't be sent to the back.
-	- Layout the mdi windows when the container is first made visible.
-	* Form.cs: Give the MdiClient a ref to the containing form when we
-	create it.
-	
-2006-05-10  Atsushi Enomoto  <atsushi at ximian.com>
-
-	* LinkLabel.cs : link_font could be uninitialized, so populate one
-	  before actual use. Fixed bug #78340.
-
-2006-05-10  Atsushi Enomoto  <atsushi at ximian.com>
-
-	* XplatUIX11.cs : clipboard format native value is IntPtr.
-	  Fixed bug #78283.
-
-2006-05-10  Peter Dennis Bartok  <pbartok at novell.com>
-
-	* Control.cs: 
-	  - Instead of showing context menus directly we send WM_CONTEXTMENU, 
-	    which is passed up the parent chain by DefWndProc
-	  - We now handle WM_CONTEXTMENU to display any menu, or pass it 
-	    to DefWndProc (#77956)
-	* XplatUIX11.cs: Added handling of WM_CONTEXTMENU (pass up) to DefWndProc
-
-2006-05-10  Jackson Harper  <jackson at ximian.com>
-
-	* MdiClient.cs: We need to remove the controls from the mdi
-	collection, when we close the window.
-	* MdiWindowManager.cs: Special handling of closing mdi windows.
-	* InternalWindowManager.cs: Make the close method virtual so the
-	mdi window manager can handle it specially.
-
-2006-05-10  Jordi Mas i Hernandez <jordimash at gmail.com>
-
-	* DataGrid.cs:
-	  - Recalculate grid when the data source has changed
-	  - Matches styles provided by user from all data sources types
-	* DataGridTableStyle.cs: For columns that provided by the user set the
-	with the preferred value is there was unassigned.
-	* CurrencyManager.cs: throw OnItemChanged event
-
-2006-05-10  Peter Dennis Bartok  <pbartok at novell.com> 
-
-	* PictureBox.cs: Don't animate until handle is created. Start animation
-	  when handle is created.
-
-2006-05-10  Peter Dennis Bartok  <pbartok at novell.com>
-
-	* XplatUIX11.cs, Hwnd.cs: Adopted Mike's patch from #77979 to match
-	  current codebase.
-	* XEventQueue.cs: We don't need to provide the extra info
-
-2006-05-10  Jackson Harper  <jackson at ximian.com>
-
-	* MdiClient.cs: If the mdi clients parent form has a background
-	image set, we draw that background image for the mdi area's
-	background.
-
-2006-05-10  Peter Dennis Bartok  <pbartok at novell.com>
-
-	* TextBoxBase.cs: Set IBeam cursor (#78347)
-
-2006-05-10  Mike Kestner  <mkestner at novell.com>
-
-	* ToolBar.cs: fix some text padding issues with ButtonSize
-	calculation. Update the default size to match MS documentation.
-	* ToolBarButton.cs: use ToolBar.ButtonSize for layout of unspecified
-	button size. Fixes #78296.
-
-2006-05-10  Mike Kestner  <mkestner at novell.com>
-
-	* ListBox.cs: use is_visible for scrollbar positioning in case the
-	control isn't on screen yet.  Fix off by one with Right vs Width
-	usage.  Update Scrollbars in SetBoundsCore. Fixes #78188 and #78258.
-	
-2006-05-10  Jackson Harper  <jackson at ximian.com>
-
-	* X11Dnd.cs: Drop to a control with another control on top of it.
-	* ToolBar.cs: Work on a copy of the buttons list, so that it can
-	be modified in click handlers. TODO: Look for similar problems in
-	other controls.
-
-2006-05-09  Jackson Harper  <jackson at ximian.com>
-
-	* Form.cs: Window managers need the old window state when setting
-	window state now.
-	* InternalWindowManager.cs: Allow the base mdi window manager to
-	handle more of the MDI only stuff (like maximize buttons).
-	* MdiWindowManager.cs: Fix some snafus in changing the window
-	state.  Add all the menu functionality, for both popup and
-	maximized menus.
-	* MdiClient.cs: When a new form is selected the currently
-	activated form is sent to the back, this matches MS.
-	- Implement a new method to activate the next mdi child window.
-
-2006-05-08  Peter Dennis Bartok  <pbartok at novell.com>
-
-	* Control.cs: 
-	  - Added new InternalCapture method to allow controls to prevent
-	    the capture behaviour on the click handlers
-	  - Switched to use InternalCapture
-	* ComboBox.cs:
-	  - Using InternalCapture to prevent mouse captures from being released
-	    on mouse button release (Fixes #78100)
-	* XplatUIX11.cs (DeriveStyles): Now checks caption state and only
-	  returns Form borders if a caption is present. (Fixes #78310)
-
-2006-05-08  Peter Dennis Bartok  <pbartok at novell.com> 
-
-	* TreeNode.cs: Changed serialization .ctor to not require every field
-	  to be present. (#78265)
-	* OwnerDrawPropertyBag.cs: Added serialization .ctor
-
-2006-05-05  Alexander Olk  <alex.olk at googlemail.com>
-
-	* MimeIcon.cs: for is faster than foreach for strings.
-
-2006-05-05  Mike Kestner  <mkestner at novell.com>
-
-	* CheckedListBox.cs: update check handling code to not use selected.
-	* ListBox.cs: rewrite of mouse selection handling to correspond to MS
-	behavior for visual feedback, motion response, shift/ctrl handling,
-	and properly deal with all 4 selection modes. Updates to bounds
-	handling logic.  Add scroll wheel support. [Fixes #77842]
-
-2006-05-05  Peter Dennis Bartok  <pbartok at novell.com> 
-
-	* ListView.cs:
-	  - Moved adding of Implicit controls into .ctor. That way, subsequent
-	    creation of the controls will not cause them to think they are 
-	    toplevel windows (fixes #78200 header problem)
-	  - Added 2.0 ShowGroups and UseCompatibleStateImageBehaviour
-	  - Switched visibility setting of header control to use internal field
-	    to avoid triggering handle creation
-	  - Now checking if handle is created before causing a refresh when items
-	    are added (This makes us now match handle creation time with MS)
-	* Splitter.cs: Removed loading of private splitter cursor, switched to
-	  Cursors version now that that is loading the right ones
-	* Cursors.cs: Load proper splitter cursors from resources
-	* Cursor.cs: Added second method of loading resource cursors for the 
-	  VS.Net users amongst us
-
-2006-05-05  Mike Kestner  <mkestner at novell.com>
-
-	* ListView.cs: give header_control a minimum size based on the
-	ListView size.
-
-2006-05-05  Peter Dennis Bartok  <pbartok at novell.com> 
-
-	* XplatUIX11.cs: WS_EX_TOPMOST requires window to be on top. A dock
-	  window seems to do that with metacity, so set that type. (#78120)
-
-2006-05-05  Mike Kestner  <mkestner at novell.com>
-
-	* ListViewItem.cs: fix Details mode checkbox layout bug.
-	* ThemeWin32Classic.cs: draw a ListView column header for unused space
-	at the end of the header, if it exists. [Fixes for #78200]
-
-2006-05-04  Jackson Harper  <jackson at ximian.com>
-
-	* MdiClient.cs: Add a helper property to get the container form.
-	* MdiWindowManager.cs: We have to make sure to use the menu origin
-	when drawing the icons and buttons, this fixes maximized window
-	icons/buttons on win32.
-	* InternalWindowManager.cs: Reset the restore captions when a
-	window goes from Maximized to Minimized and vice versa. Move the
-	DrawMaximizedButtons into the MdiWindowManager source, tool
-	windows can't be maximized. NOTE: This could use a little
-	refactoring if time ever permits.
-	
-2006-05-03  Jonathan Chambers  <jonathan.chambers at ansys.com>
-
-	* TextBox.cs: Add MWFCategoryAttributes
-	* TextBoxBase.cs: Add MWFCategoryAttributes
-	* Form.cs: Add MWFCategoryAttributes
-
-2006-05-03  Jonathan Chambers  <jonathan.chambers at ansys.com>
-
-	* Control.cs: Add MWFCategoryAttributes
-	* ScrollableControl.cs: Add MWFCategoryAttributes
-
-2006-05-03  Alexander Olk  <alex.olk at googlemail.com>
-
-	* ThemeWin32Classic.cs: Draw the ToolBar top border only if
-	  Divider is true. Fix a little glitch in PropertyToolBar
-	  drawing code
-
-2006-05-02  Peter Dennis Bartok  <pbartok at novell.com> 
-
-	* Control.cs:
-	  - Dispose: Call base.Dispose, this causes the disposed event
-	    to be fired (and probably other, more important stuff)
-	  - SetVisibleCore: Set is_visible to true after creating the
-	    window so that the window still gets created invisible (if
-	    WM_VISIBLE isn't set). That will cause the ShowWindow afterwards
-	    to generate a WM_ACTIVE message
-	* Form.cs: Call Dispose when we want to destroy the window, instead of
-	  just destroying the handle (Dispose will do that for us)
-	* XplatUIX11.cs:
-	  - RootWindow also needs a queue, so we can properly process the
-	    property change events from RootWindow (like Activate)
-	  - Generatic synthetic WM_ACTIVE message when the active window is
-	    being destroyed
-
-2006-05-01  Peter Dennis Bartok  <pbartok at novell.com> 
-
-	* LinkLabel.cs: Trigger a recalc of our label dimensions when
-	  bounds are changed
-
-2006-05-01  Peter Dennis Bartok  <pbartok at novell.com>
-
-	* ThemeWin32Classic.cs (ButtonBase_DrawImage): Use the proper image
-	  for determining width and height (image might not be assigned if
-	  we're drawing an imagelist)
-
-2006-05-01  Peter Dennis Bartok  <pbartok at novell.com> 
-
-	* XplatUI.cs, XplatUIDriver.cs: Added MenuHeight property
-	* XplatUIWin32.cs: Overriding new MenuHeight property, retrieving
-	  height from system
-	* Theme.cs: No longer returns hardcoded menu height, instead calls
-	  new driver method
-	* Form.cs (OnLoad): Scaling happens before triggering Load events 
-	  on MS (# 78257)
-
-2006-05-01  Mike Kestner  <mkestner at novell.com>
-
-	* MenuItem.cs: fix NRE for text == null.  Fixes #78250.
-
-2006-04-30  Peter Dennis Bartok  <pbartok at novell.com> 
-
-	* TextBoxBase.cs: Removed Fixme
-	* RichTextBox.cs (set_RTF): Invalidate document after update (#78247)
-
-2006-04-30  Peter Dennis Bartok  <pbartok at novell.com>
-
-	* XplatUIX11.cs:
-	  - ScrollWindow: We were passing hwnd.ClientRectangle which returns
-	    the rectangle relative to the parent, considering borders. We
-	    don't really want that.
-	  - ScrollWindow: Fixed warning to be more understandable
-	* TextBoxBase.cs: Fixed ScrollWindow calculations to consider our
-	  scrollbars and scroll only the visible area
-	* RichTextBox.cs: Removed debug output
-
-2006-04-29  Peter Dennis Bartok  <pbartok at novell.com>
-
-	* NumericUpDown.cs (Text): Just use base
-	* UpDownBase.cs: Ensure txtView is created before using it
-
-2006-04-29  Peter Dennis Bartok  <pbartok at novell.com> 
-
-	* XplatUIX11.cs (SetWindowTransparency): Casting opacity to int before
-	  casting to IntPtr to avoid 64bit overflow errors
-
-2006-04-29  Peter Dennis Bartok  <pbartok at novell.com>
-
-	* Control.cs:
-	  - AllowDrop: Don't force handle creation.
-	  - CreateHandle: Added call to tell driver if we're allowed to drop
-
-2006-04-27  Alexander Olk  <alex.olk at googlemail.com>
-
-	* FileDialog.cs: Remember the last directory not only for the
-	  current instance but also for new FileDialog instances.
-
-2006-04-29  Peter Dennis Bartok  <pbartok at novell.com> 
-	
-	* XplatUIX11.cs: Forgot to set the queue on the foster parent. That
-	  broke sending async messages
-
-2006-04-29  Peter Dennis Bartok  <pbartok at novell.com>
-
-	* XplatUIX11.cs:
-	  - ScrollWindow: Fixed method. We finally generate expose events again
-	    for scrolled areas. This was causing 'garbage' when scrolling
-	    textbox and other controls that used ScrollWindow
-	  - Switched from using the regular queue for paint events to the MS 
-	    model of 'generating' paint events when the queue is empty.
-	    We use the new XQueueEvent.Paint subclass to store which windows
-	    need painting.
-	  - AddExpose now takes the x/y/width/height of the exposed area
-	    and inserts the window into the paint queue if not already there
-	  - InvalidateWholeWindow: Switched to use new AddExpose method
-	  - UpdateMessageQueue: Added which queue to monitor for paint events
-	  - DefWndProc: Added default handler for WM_PAINT and WM_NCPAINT in
-	    the unlikely case nothing above handles it. We reset the expose
-	    pending states to get them off the queue.
-	  - GetMessage: Now pulls a paint event if no other events are in the
-	    queue
-	  - Invalidate: Switched to new AddExpose method
-	  - PeekMessage: Updated to understand pending paint events
-	  - UpdateWindow: Fixed logic bug. We were only updating if the window
-	    didn't need updating. Also switched to sending WM_PAINT directly,
-	    like MS does.
-	* XEventQueue.cs: Added Paint queue support. Allows enqueue/dequeue
-	  and random access Remove(). The random access is needed to handle
-	  UpdateWindow() where a WM_PAINT is sent directly without accessing
-	  the queue.
-	* ScrollBar.cs: Added Update() calls to cause immediate updates to
-	  allow for better feedback when scrolling. Scrollbars are small and
-	  the immediate update should make it 'feel' more responsive without
-	  slowing things down. ScrollBar still needs it's invaliate logic
-	  updated to not always invalidate the whole bar on certain changes.
-
-2006-04-28 Gonzalo Paniagua Javier <gonzalo at ximian.com>
-
-	* Control.cs:
-	(BackColor): if the control does not support a transparent background,
-	return the default backcolor when the parent backcolor is transparent.
-
-2006-04-28  Peter Dennis Bartok  <pbartok at novell.com>
-
-	* Application.cs: Updated to new StartLoop/GetMessage API
-	* RichTextBox.cs: Provide some output on RTF parsing errors
-	* XplatUI.cs, XplatUIDriver.cs, XplatUIOSX.cs, XplatUIWin32.cs: Added
-	  new queue_id argument to GetMessage and PeekMessage to allow faster
-	  handling of per-thread queues in drivers.
-	* Hwnd.cs: Added Queue tracking and property
-	* MenuAPI.cs: Updated to new StartLoop/GetMessage API
-	* XEventQueue.cs: Added thread trackingA
-	* PropertyGridView.cs: Updated to new StartLoop/GetMessage API
-	* XplatUIX11.cs:
-	  - Implemented new per-thread queue
-	  - GetMessage: Fixed return/break behaviour on several cases. We were
-	    returning stale messages in some cases, instead of just processing
-	    the next message
-
-2006-04-27  Jonathan Chambers  <jonathan.chambers at ansys.com>
-
-	* PropertyGrid.cs: Call GetPropertiesSupported on TypeConverter.
-
-2006-04-27  Peter Dennis Bartok  <pbartok at novell.com>
-
-	* ThemeWin32Classic.cs (DrawToolBar): Refactored, simplified the logic,
-	  fixed off-by-one comparisons between Width/Height and Right/Bottom.
-
-2006-04-27  Jonathan Chambers  <jonathan.chambers at ansys.com>
-
-	* PropertyGridView.cs: Fix drop down width.
-
-2006-04-27  Alexander Olk  <alex.olk at googlemail.com>
-
-	* ThemeWin32Classic.cs: Peter thinks that three additional lines are
-	  a mess in DrawToolBar, so I removed one of them.
-
-2006-04-27  Alexander Olk  <alex.olk at googlemail.com>
-
-	* ThemeWin32Classic.cs: Draw the ToolBar border lines only if
-	  needed (clip). Otherwise we get artifacts.
-
-2006-04-26  Peter Dennis Bartok  <pbartok at novell.com>
-
-	* FixedSizeTextBox.cs: Added constructor to allow specifying which
-	  dimension is fixed
-	* UpDownBase.cs: Set the spinner control to be fixed height vertical,
-	  and switched FixedSizeTextBox to only be fixed vertical (#78116)
-	* Form.cs: Not applying the 'MS 0.08 fudge factor' for a given dimension
-	  if it matches the scale base font (avoids unneeded scaling)
-
-2006-04-26  Alexander Olk  <alex.olk at googlemail.com>
-
-	* X11DesktopColors.cs: One gtk_init_check should be enough
-
-2006-04-26  Peter Dennis Bartok  <pbartok at novell.com> 
-
-	* TextBoxBase.cs: Moved Backspace handling into WM_CHAR block to
-	  match MS behaviour
-
-2006-04-26  Peter Dennis Bartok  <pbartok at novell.com>
-
-	* TextBoxBase.cs: 
-	  - Generate OnTextChanged for Backspace even if we're only deleting
-	    the current selection
-	  - When setting the Text property, only select all text if the
-	    control does not have focus when it is being set. Otherwise
-	    just place the cursor at the beginning of the control
-
-2006-04-26  Alexander Olk  <alex.olk at googlemail.com>
-
-	* ThemeWin32Classic.cs: ToolBars get drawn with two lines at the top.
-	  Added a little helper to draw PropertyGrid ToolBar with a different
-	  border and a different BackColor.
-	* PropertyGrid.cs: Some background parts didn't get painted with the
-	  correct background color. Added a class that helps us to draw the
-	  correct border for PropertyGridView and a class that helps us to
-	  draw ToolBars with a different backcolor
-	* PropertyGridView.cs: Draw PlusMinus with the correct colors.
-
-2006-04-25  Jonathan Chambers  <jonathan.chambers at ansys.com>
-
-	* PropertyGrid.cs: Bug 78196, font size, and splitter location.
-	* PropertyGridView.cs: Bug 78196, font size, and splitter location.
-
-2006-04-25  Peter Dennis Bartok  <pbartok at novell.com> 
-
-	* XplatUIWin32.cs (DIBtoImage): ORing instead of ANDing the alpha
-	  into the palette entries. Also, since we're working on a copy
-	  we needed to copy the palette back onto the bitmap.
-	* Cursor.cs: Same fix as XplatUIWin32.cs.
-
-2006-04-25  Peter Dennis Bartok  <pbartok at novell.com>
-
-	* ImageListStreamer.cs: Need to read the var (or we're off)
-
-2006-04-25  Peter Dennis Bartok  <pbartok at novell.com> 
-
-	* TextControl.cs, ComboBox.cs, CommonDialog.cs, Theme.cs, 
-	  XplatUIWin32.cs, RichTextBox.cs, ImageListStreamer.cs,
-	  TextBoxBase.cs: Unused var fixes
-	* AxHost.cs: Small 2.0 fix
-	* XplatUIX11.cs: Switched to IntPtr from int for XA_CARDINAL atoms 
-	  as it seems that is what at least Metacity expects. This will make
-	  icons show up on 64bit platforms. We still have some 64bit size
-	  issues, though, since the startup app window size still won't match.
-
-2006-04-25  Mike Kestner  <mkestner at novell.com>
-
-	* *.cs: cleanup newly reported exception var unused warnings.
-
-2006-04-25  Alexander Olk  <alex.olk at googlemail.com>
-
-	* ThemeWin32Classic.cs: Button image alignment now matches exactly
-	  ms
-
-2006-04-25  Alexander Olk  <alex.olk at googlemail.com>
-
-	* ThemeWin32Classic.cs: Fixed drawing code for buttons with an
-	  image. The image position is always the same, no matter if the
-	  button is pressed or not.
-
-2006-04-25  Alexander Olk  <alex.olk at googlemail.com>
-
-	* FileDialog.cs: SaveFileDialog shouldn't rely on a MWFFileView
-	  selection and set the correct filename for SaveFileDialog.
-	  Patch by Emery Conrad.
-
-2006-04-24  Mike Kestner  <mkestner at novell.com>
-
-	* ListView.cs (LastVisibleIndex): when in List mode of Alignment.Left,
-	check for item.X outside the ClientRect instead of item.Y. Fixes
-	#78151.
-
-2006-04-21 Gonzalo Paniagua Javier <gonzalo at ximian.com>
-
-	* ImageListStreamer.cs: some images store a wrong grow factor, so don't
-	trust that value blindly and do some sanity check. Fixes bug #77814.
-
-2006-04-21 Gonzalo Paniagua Javier <gonzalo at ximian.com>
-
-	* ImageListStreamer.cs: save the mask as a 1bpp image.
-
-2006-04-21  Mike Kestner  <mkestner at novell.com>
-
-	* CheckedListBox.cs: maintain CheckStatus here. Use DrawItemState to
-	pass Checked and Indeterminate to the Theme Engine. Improve
-	encapsulation with ListBox.
-	* ListBox.cs: Keep a StringFormat instead of calculating it every item
-	draw. Kill ListBoxItem. Refactor away the ListBoxInfo and ListBoxItem
-	nested types.  Move all CheckState functionality to CheckedListBox.
-	Make IntegralHeight work like MS.  Rewrite of Layout engine.  Fix
-	OwnerDrawVariable layout/rendering.  Fix multicolumn rendering.  Fix
-	ScrollAlwaysVisible handling. Refactor "selected" collections to use a
-	single base list. Fix scrollbar sizing and placement to mirror MS.
-	* Theme.cs: remove CheckedListBoxCheckRectangle. It wasn't really
-	used.
-	* ThemeWin32Classic.cs: implement Indeterminate CheckState rendering
-	for CheckedListBox by using new DrawItemState info.  Center the
-	checkboxes on the items. Use new StringFormat property.
-
-2006-04-18  Jackson Harper  <jackson at ximian.com>
-
-	* Form.cs: MdiChildren don't do default locations the same way as
-	regular forms.  This prevents a crash when trying to position the
-	mdi windows.
-
-2006-04-17  Jonathan Chambers  <jonathan.chambers at ansys.com>
-
-	* PropertyGridTextBox.cs: Formatting, copyright
-	* PropertiesTab.cs: Formatting
-	* PropertyGrid.cs: Formatting
-	* PropertyGridView.cs: Formatting, fix drop down, enabled double 
-	  click toggling of values
-	  
-2006-04-17  Peter Dennis Bartok  <pbartok at novell.com> 
-
-	* KeyPressEventArgs: Added 2.0 only setter for KeyChar
-	* Control.cs (.ctor): verify_thread_handle is static, don't reset
-	  every time a control is created
-	* Application.cs: Removed obsolete EnableRTLMirroring method
-
-2006-04-18  Gert Driesen  <drieseng at users.sourceforge.net>
-
-	* TabControl.cs: Avoid ArgumentOutOfRangeException when setting
-	SelectedIndex to -1. Fixes bug #78121.
-
-2006-04-17  Jackson Harper  <jackson at ximian.com>
-
-	* Binding.cs: Handle null values for Current and BindingContext.
-	This occurs when binding is a little delayed.
-	* CurrencyManager.cs: return null for Current when there are no
-	items in the list.
-	- Hookup to the listchanged event on the DataView and update
-	bindings when the list is changed.  This fixes late binding of
-	controls.
-
-2006-04-17  Jackson Harper  <jackson at ximian.com>
-
-	* X11Dnd.cs:
-	* XplatUIX11.cs: Drops should not create a mousedown. Patch by Tim
-	Ringenbach.
-
-2006-04-15  Alexander Olk  <alex.olk at googlemail.com>
-
-	* ThemeWin32Classic.cs: Draw disabled combo button in the correct
-	  place
-	* ComboBox.cs: If the combobox is disabled call CPDrawComboButton
-	  with the correct ButtonState
-
-2006-04-14  Peter Dennis Bartok  <pbartok at novell.com>
-
-	* XplatUIX11.cs: Improved distinguishing between window types to
-	  tell the WM a type closer to what the app wants (Fixes #78107)
-
-2006-04-14  Alexander Olk  <alex.olk at googlemail.com>
-
-	* ThemeWin32Classic.cs: Fixed drawing of ContainerGrabHandle and
-	  GrabHandle
-
-2006-04-14  Alexander Olk  <alex.olk at googlemail.com>
-
-	* ThemeWin32Classic.cs: Fixed size grip drawing and updated StatusBar
-	  drawing code to reflect the size grip changes
-
-2006-04-13 Gonzalo Paniagua Javier <gonzalo at ximian.com>
-
-	* ImageListStreamer.cs: fix handling of the mask that follows the main
-	bitmap when deserializing and serialize it properly. The generated mask
-	should better be a 1bpp image, but I'll do that later.
-
-2006-04-13  Alexander Olk  <alex.olk at googlemail.com>
-
-	* FileDialog.cs: Show something in the DirComboBox on *nix if the
-	  path doesn't fit into some of our Current.Places
-
-2006-04-13  Jackson Harper  <jackson at ximian.com>
-
-	* ComboBox.cs: Use borders instead of drawing our own decorations,
-	try to obey correct rules for heights.
-	* Theme.cs:
-	* ThemeNice.cs:
-	* ThemeClearLooks.cs:
-	* ThemeWin32Classic.cs: Remove combobox decoration drawing code,
-	this is now handled by borders.
-	- Remove unused DrawListBoxDecorationSize method.
-	
-2006-04-13  Mike Kestner  <mkestner at novell.com>
-
-	* MenuAPI.cs: null guarding for the disbled click check fixes crash
-	reported by Alex.
-
-2006-04-13  Alexander Olk  <alex.olk at googlemail.com>
-
-	* ThemeWin32Classic.cs: 
-	  - Fixed CPDrawStringDisabled
-	  - Corrected drawing of disabled menu items
-	  - Fixed drawing of disabled radio buttons (bug #78095)
-	  - Draw check in a disabled CheckBox with color ControlDark 
-
-2006-04-12  Peter Dennis Bartok  <pbartok at novell.com>
-
-	* Form.cs: Use the provided width when calculating the menu size;
-	  when being maximized we get WM_NCCALCSIZE before WM_WINDOWPOSCHANGED
-	  and ClientSize.Width won't be updated yet
-	* Application.cs: Use Visible instead of Show() to make form visible,
-	  this way we create the handle later and menusize is considered
-
-2006-04-12  Mike Kestner  <mkestner at novell.com>
-
-	* MenuAPI.cs: ignore clicks on disabled menu items. Thanks to Alex for
-	reporting.
-
-2006-04-12  Peter Dennis Bartok  <pbartok at novell.com>
-
-	* TextBox.cs: Implemented context menu
-
-2006-04-12  Mike Kestner  <mkestner at novell.com>
-
-	* ListView.cs: implement box selection. fixes #77838.
-	* ThemeWin32Classic.cs: draw box select rect, remove a ResetClip.
-
-2006-04-12  Peter Dennis Bartok  <pbartok at novell.com> 
-
-	* XplatUIX11.cs: Added setting of window type when transient window
-	  is created (metacity would move it otherwise)
-	* X11Structs.cs: Added WINDOW_TYPE atoms
-	* LinkLabel.cs: Override OnPaintBackgroundInternal and draw the
-	  background (the control is Opaque but still wants transparent
-	  backgrounds)
-
-2006-04-12  Peter Dennis Bartok  <pbartok at novell.com>
-
-	* Control.cs: Added OnPaintBackgroundInternal to allow controls
-	  that set Opaque but don't mean it (like all ButtonBase-derived
-	  controls) to still draw their background
-	* ButtonBase.cs: Override OnPaintBackgroundInternal and draw
-	  the background
-
-2006-04-12  Peter Dennis Bartok  <pbartok at novell.com> 
-
-	* Control.cs (PaintControlBackground): Set the graphics object
-	  on our PaintEvent to null to prevent it from being disposed
-	  when the PaintEvent gets disposed
-
-2006-04-12  Alexander Olk  <alex.olk at googlemail.com>
-
-	* ThemeWin32Classic.cs: Use even more SystemBrushes and SystemPens
-	* ThemeNice.cs, ThemeClearlooks.cs: fix typo
-
-2006-04-12  Peter Dennis Bartok  <pbartok at novell.com>
-
-	* Control.cs: 
-	  - Added transparency check to BackColor property. Transparent
-	    backgrounds are only allowed if the control styles permit it
-	  - Added recursive painting of parent control background and
-	    foreground if a control with a transparent backcolor is drawn
-	    (Thanks to Tim Ringenback for providing his 'hack' as a base
-	     for this patch) Fixes #77985 and #78026.
-	  - Added Opaque style check before calling OnPaintBackground, no
-	    need to draw the background if the control is opaque
-	  - Removed ControlAccessibleObject owner variable (inherited from
-	    base, no need to define again)
-	  - Added some documentation links explaining the drawing events
-	    and styles
-
-2006-04-11  Peter Dennis Bartok  <pbartok at novell.com> 
-
-	* Splitter.cs (CalculateSplitPosition): Corrected the bad assumption
-	  that the affected control is the located at the left border of our
-	  parent (Fixes #77936)
-
-2006-04-11  Peter Dennis Bartok  <pbartok at novell.com>
-
-	* TextBoxBase.cs: When rendering disabled or readonly controls,
-	  draw the background with 'Control' instead of 'Window' color as
-	  long as the user hasn't specifically set a color
-
-2006-04-11  Peter Dennis Bartok  <pbartok at novell.com> 
-
-	* TextBoxBase.cs: Don't try to shortcut by checking against base.Text
-	  since that won't be updated if the user types text (only if it's
-	  programatically set)
-
-2006-04-11  Peter Dennis Bartok  <pbartok at novell.com>
-
-	* ScrollableControl.cs: Calculate DisplayRect dynamically, so that
-	  layout changes do to app-triggered resizes will have the proper
-	  display rectangle for layout
-
-2006-04-11  Alexander Olk  <alex.olk at googlemail.com>
-
-	* ThemeWin32Classic.cs:
-	  - Make use of the SystemBrushes and SystemPens wherever possible
-	  - Corrected some highlight colors
-	  - Corrected RadioButton and CheckBox FlatStyle.Flat and Popup
-	    drawing
-	* Theme.cs: Added Empty field to CPColor struct
-
-2006-04-11  Peter Dennis Bartok  <pbartok at novell.com>
-
-	* ScrollabeControl.cs: We need to consider whether or not a scrollbar
-	  is displayed when calculating the display rectangle. Thanks to Mike
-	  for teaching me the err of my ways.
-
-2006-04-10  Peter Dennis Bartok  <pbartok at novell.com>
-
-	* ScrollableControl.cs:
-	  - Rewrote DisplayRectangle code, now returning the proper x/y coords 
-	    (instead of 0,0) and we now return the real width/height instead of
-	    just the clientrectangle, adjusted for padding. The rectangle is
-	    now cached and created by the new CalculateDisplayRectangle method.
-	  - Created new CalculateDisplayRectange method, which basically does
-	    what get_DisplayRectangle() did originally, but now using the 
-	    right edge instead of DisplayRectangle to determine the size of
-	    our scrollbars
-	  - get_Canvas(): Fixed it to properly calculate canvas for 
-	    right/bottom controls which seem to be placed to the right/bottom
-	    of any controls that have a fixed location
-	  - Removed TODO that's taken care of
-	  - Removed NotImplementeds and attempted to implement AdjustFormScrollBars
-	    and SetDisplayRectLocation according to new MSDN2 docs
-	  - Added call to PerformLayout in OnVisibleChanged, MS causes a layout
-	    event when that is called, this is added for compatibility
-	  - ScrollControlIntoView(): Implemented.
-	  - Switched scrollbars to be implicit, they shouldn't be selectable
-	* ContainerControl: Now that ScrollControlIntoView is implemented, we 
-	  call it when the active control is set/changed
-	* ScrollBar.cs: Added support for generating Win32 scrollbar messages
-	* ImplicitHScrollBar.cs, ImplicitVScrollBar.cs: Now setting new base
-	  implicit_control variable (used for native Win32 message generation)
-	* XplatUI.cs, XplatUIDriver.cs, XplatUIWin32.cs: Added new 
-	  HorizontalScrollBarHeight and VerticalScrollBarWidth properties
-	* ThemeWin32Classic.cs: Now calling the driver for the scrollbar sizes
-	* XplatUIStructs.cs: Added ScrollBarCommands enum
-
-2006-04-10  Jackson Harper  <jackson at ximian.com>
-
-	* ButtonBase.cs:
-	* CheckedListBox.cs:
-	* ComboBox.cs:
-	* DataGrid.cs:
-	* DataGridView.cs:
-	* Form.cs:
-	* GroupBox.cs:
-	* ListBox.cs:
-	* PrintPreviewControl.cs:
-	* ProgressBar.cs:
-	* PropertyGrid.cs:
-	* Splitter.cs:
-	* StatusBar.cs:
-	* TrackBar.cs:
-	* UpDownBase.cs: Fixup base event overrides.
-	
-2006-04-06  Mike Kestner  <mkestner at novell.com>
-
-	* ScrollBar.cs: fix "new event" declarations (#76509) and bounds check
-	all user-initiated value changes to min <= value <= max-thumbsz+1.
-	(set_Value): check for vert/horiz when calculating new thumb position.
-	(LargeIncrement): bounds check to stop pos at max - thumb_size + 1
-	like MS does.
-	(OnMouseMoveSB): refactor the thumb dragging code and refine
-	invalidation logic to reduce flicker.
-	(SetEndPosition): bounds check to stop pos at max - thumb_size + 1
-	(SmallIncrement): bounds check to stop pos at max - thumb_size + 1
-	(UpdateThumbPosition): small code readability cleanup
-
-2006-04-10  Alexander Olk  <alex.olk at googlemail.com>
-
-	* ThemeNice.cs: Small UI polishing. Draw borders a little bit
-	  different
-
-2006-04-08  Alexander Olk  <alex.olk at googlemail.com>
-
-	* ThemeNice.cs: Use a better graphics effect when a button is pressed
-
-2006-04-08  Alexander Olk  <alex.olk at googlemail.com>
-
-	* Theme.cs: Added GetDashPen and GetSizedPen to SystemResPool
-	* ThemeWin32Classic.cs: Make use of the new SystemResPool methods.
-	  This dramatically reduces the number of Pen.Dispose calls. 
-	  Where possible call ResPool methods only once instead of calling it
-	  over and over again (for example for the same color).
-
-2006-04-06  Mike Kestner  <mkestner at novell.com>
-
-	* TabControl.cs: fix for SelectedIndex updating on TabPage removals.
-	Also remove an unused private field on the collection. Fixes #77972.
-
-2006-04-06  Alexander Olk  <alex.olk at googlemail.com>
-
-	* ThemeNice.cs: Added ToolBar drawing code
-
-2006-04-06  Mike Kestner  <mkestner at novell.com>
-
-	* Form.cs (ShowDialog): MS allows IWin32Window param to be a non-form.
-	I'm assuming that means we need to look up the toplevel for the
-	provided control. Fixes the crash trace in #77911 but exposes another
-	crash in some strange reflection usage in NDocGui.
-
-2006-04-06  Alexander Olk  <alex.olk at googlemail.com>
-
-	* ThemeNice.cs: Gave it a little silver touch and added Images
-	  method
-	* FontDialog.cs: FontDialog is not resizable
-	* FileDialg.cs: Added SizeGripStyle.Show
-
-2006-04-05  Jackson Harper  <jackson at ximian.com>
-
-	* KeyboardLayouts.cs: Remove warning.
-
-2006-04-05  Jackson Harper  <jackson at ximian.com>
-
-	* Control.cs: Enable OnPaintInternal so we can use it for drawing
-	all of our controls instead of Paint +=.
-	* ListBox.cs:
-	* ListView.cs:
-	* MenuAPI.cs:
-	* MessageBox.cs:
-	* NotifyIcon.cs:
-	* ProgressBar.cs:
-	* ScrollBar.cs:
-	* Splitter.cs:
-	* StatusBar.cs:
-	* TabControl.cs:
-	* TextBoxBase.cs:
-	* ToolBar.cs:
-	* TrackBar.cs:
-	* UpDownBase.cs:
-	* ComboBox.cs: Remove handling of WM_PAINT and WM_ERASEBKGND and
-	use OnPaintInternal. Remove Width/Height and Visible checks in
-	paint handler, this is done at a higher level now.
-	* GroupBox.cs: Don't need to handle WM_ERASEBKGND anymore.
-	* PaintEventArgs.cs: Add a handled flag so controls that don't
-	want anymore painting after OnPaintInternal can make sure OnPaint
-	isn't called.
-
-2006-04-05  Mike Kestner  <mkestner at novell.com>
-
-	* Form.cs: fix the menu WndProc hacks to respect the native enabled
-	state of the form, so that we don't process events when Modal dialogs
-	are up. Fixes #77922.
-
-2006-04-05  Alexander Olk  <alex.olk at googlemail.com>
-
-	* Mime.cs: Default for range length is 1 not 0. If set to 0 no match
-	  checking is done.
-
-2006-04-05  Mike Kestner  <mkestner at novell.com>
-
-	* XplatUIX11.cs: fix typo in the EX_APPWINDOW transient patch.
-
-2006-04-05  Mike Kestner  <mkestner at novell.com>
-
-	* ListView.cs (HeaderMouseMove): null guarding for the over column
-	when setting up the drag_to_index.  Fixes #78015.
-
-2006-04-04  Peter Dennis Bartok  <pbartok at novell.com>
-
-	* XplatUIX11.cs: If WS_EX_APPWINDOW isn't set we don't want to show up
-	  in the taskbar. Transient windows seem to accomplish that.
-
-2006-04-04  Peter Dennis Bartok  <pbartok at novell.com> 
-
-	* Form.cs:
-	  - Re-enabled CreateParams.X/Y code for FormStartPosition
-	  - Added code for manual placement when creating the Control
-	  - Incomplete patch to treat MDI forms differently when
-	    setting the ClientSizeCore. (Still need to figure out handling
-	    x/y coords there)
-	* XplatUIX11.cs:
-	  - When we're explicitly setting the X/Y position of a non-Child
-	    window, let the WM know. Metacity really wants this.
-
-2006-04-04  Alexander Olk  <alex.olk at googlemail.com>
-
-	* ThemeNice.cs: Added CPDrawButton
-
-2006-04-04  Alexander Olk  <alex.olk at googlemail.com>
-
-	* ThemeNice.cs: Changed the color for focused buttons and activated
-	  the arrows for small scroll buttons.
-
-2006-04-04  Alexander Olk  <alex.olk at googlemail.com>
-
-	* ThemeWin32Classic.cs: Removed DrawFlatStyleButton, not needed
-	  anymore. Changed some method modifiers to protected (virtual)
-	* ThemeClearlooks.cs: Updated to reflect the ThemeWin32Classic
-	  changes
-	* ThemeNice.cs: Updated to reflect the ThemeWin32Classic changes.
-	  Updated drawing of menus, buttons and progressbars; added
-	  CPDrawBorder3D 
-
-2006-04-03 Gonzalo Paniagua Javier <gonzalo at ximian.com>
-
-	* ImageListStreamer.cs: implemented serialization/deserialization
-	of the images.
-
-2006-04-03  Alexander Olk  <alex.olk at googlemail.com>
-
-	* ThemeWin32Classic.cs:
-	  - Removed all the DrawFrameControl stuff; CPDrawButton,
-	    CPDrawCheckBox and CPDrawRadioButton are now handled directly
-	    inside the methods
-	  - Updated and corrected the drawing code of CPDrawButton,
-	    CPDrawCheckBox and CPDrawRadioButton to better match ms
-	  - Updated theme checkbox and radiobutton code to use the CP*
-	    methods
-
-2006-03-31  Peter Dennis Bartok  <pbartok at novell.com> 
-
-	* XplatUIX11.cs: Enable clipping again now that the libgdiplus
-	  bug is fixed
-
-2006-03-31  Jackson Harper  <jackson at ximian.com>
-
-	* XplatUIX11.cs: Somehow we get SETCURSORS for bad windows
-	sometimes.
-	* UpDownBase.cs: Don't CreateGraphics manually, use a
-	Refresh. Ideally we would invalidate the correct areas here.
-
-2006-03-31  Peter Dennis Bartok  <pbartok at novell.com> 
-
-	* XplatUIX11.cs: 
-	  - We now track the mapping state of windows. If a window (or 
-	    one of it's parents) is not mapped we no longer permit
-	    WM_PAINT messages to be generated since we'd otherwise get 
-	    lots of BadMatch X errors. Jackson did all the work figuring
-	    out the problem.
-	  - Destroying the caret if the window it's contained in is 
-	    destroyed. Can't use regular DestroyCaret method since it
-	    might fall into a drawing function (trying to remove the
-	    caret) and with that generate new BadMatch errors. Again,
-	    Jackson tracked this down.
-	  - Changed DestroyChildWindows to SendWMDestroyMessages, we now
-	    make sure we send the messages to all windows. (The old code
-	    would send the WM_DESTROY to the window, and then all child
-	    windows would be 'gone' because the WM_DESTROY handle lookup
-	    would no longer find the destroyed window)
-	* Hwnd.cs: Added Mapping property to track mapping state of hwnd
-	* X11Structs.cs: Added WindowType enum for MapWindow/UnmapWindow
-
-2006-03-31  Jackson Harper  <jackson at ximian.com>
-
-	* ScrollableControl.cs: Dont recalc if we are not visible.
-
-2006-03-31  Mike Kestner  <mkestner at novell.com>
-
-	* Control.cs (SetVisibleCore): move the CreateControl call up ahead of
-	the visibility branch.
-
-2006-03-31  Jackson Harper  <jackson at ximian.com>
-
-	* ScrollBar.cs: Cap values when incrementing/decrementing.
-
-2006-03-31  Mike Kestner  <mkestner at novell.com>
-
-	* MenuAPI.cs: setup menu.tracker for popup/context menus.
-	* ToolTip.cs: guard against timer expirations with no active control.
-	Not sure why it happened.
-
-2006-03-31  Mike Kestner  <mkestner at novell.com>
-
-	* ThemeWin32Classic.cs: add some horizontal padding space for the tip
-	text.
-	* ToolTip.cs: Position the tooltip based on where the cursor is at
-	popup time, not at MouseEnter time.  Add a Down state so that we don't
-	redisplay tips without a Leave. Use faked XplatUI.GetCursorInfo for
-	positioning offset. Lookup DisplaySize at positioning time, since it
-	can theoretically change during invocation.
-	* XplatUIWin32.cs: fake GetCursorInfo until pdb can do it properly.
-	* XplatUIX11.cs: fake GetCursorInfo until pdb can do it properly.
-
-2006-03-31  Alexander Olk  <alex.olk at googlemail.com>
-
-	* ThemeWin32Classic.cs: Use CPDrawBorder3D to draw a GroupBox.
-	  Fixes behaviour when the Text property of the box is String.Empty
-
-2006-03-31  Peter Dennis Bartok  <pbartok at novell.com>
-
-	* XplatUIX11.cs: Only send mouseleave for our client windows, not
-	  for the whole window (otherwise we get WM_MOUSE_LEAVE twice for
-	  a window)
-
-2006-03-31  Alexander Olk  <alex.olk at googlemail.com>
-
-	* FileDialog.cs: Visual enhancement for the popup buttons in 
-	  PopupButtonPanel
-
-2006-03-31  Alexander Olk  <alex.olk at googlemail.com>
-
-	* ColorDialog.cs, FontDialog.cs: Make use of the updated 3D border
-	  code
-
-2006-03-30  Alexander Olk  <alex.olk at googlemail.com>
-
-	* ThemeWin32Classic.cs: Updated MainMenu drawing of selected and
-	  highlighted menu items to match ms
-
-2006-03-30  Peter Dennis Bartok  <pbartok at novell.com> 
-
-	* XplatUIX11.cs: Don't set a clip rectangle unless it's not empty
-
-2006-03-30  Mike Kestner  <mkestner at novell.com>
-
-	* Menu.cs (SelectedItem): use new MenuItem.Selected prop.
-	* MenuAPI.cs: use new MenuItem.Selected prop. redraw MainMenu when we
-	go active to account for HotLight to Selected transition.
-	* MenuItem.cs: add internal Selected prop. Fill out the Status
-	property by calculating it from item info. Add HotLight,
-	NoAccelerator, Checked, Grayed, and Disabled flags where appropriate.
-
-2006-03-30  Mike Kestner  <mkestner at novell.com>
-
-	* MenuItem.cs: only emit DrawItem and MeasureItem for OwnerDraw.
-
-2006-03-29  Jackson Harper  <jackson at ximian.com>
-
-	* Form.cs: Implement TODO.
-
-2006-03-29  Peter Dennis Bartok  <pbartok at novell.com> 
-
-	* PrintPreviewDialog.cs: Implemented missing methods and events; still
-	  missing proper dialog setup in the constructor
-
-2006-03-29  Peter Dennis Bartok  <pbartok at novell.com>
-
-	* ProgressBar.cs: Added 2.0 Style property that apps seem to use
-	* Control.cs:
-	  - Implemented CheckForIllegalCrossThreadCalls, removed TODO
-	  - Fixed ResetBindings and removed TODO
-	  - Added check for cross-thread calls to get_Handle()
-	  - Added Marshaller attribute for set_Font to satisfy class status
-	* FontDialog.cs: Removed TODOs that seemed implemented
-	* UpDownBase.cs: Removed unneeded TODO and Fixme
-	* MessageBox.cs: Implemented support for Default button and removed TODO
-	* FileDialog.cs: Removed obsolete TODO
-	* DomainUpDown.cs: Removed obsolete TODO
-	* ButtonBase.cs: Removed obsolete TODO
-	* XplatUIWin32.cs: Removed obsolete TODO
-	* Form.cs:
-	  - Removed obsolete TODO
-	  - Calling CheckAcceptButton when the acceptbutton is changed to allow
-	    internal status updates
-	  - Making sure the active control is selected when the control is created
-	* CurrencyManager.cs: Removed obsolete TODO
-
-2006-03-29  Mike Kestner  <mkestner at novell.com>
-
-	* *.cs: fix remaining corcompare issues for 1.1 API with the exception
-	of PrintPreviewDialog and RichTextBox.
-
-2006-03-29  Alexander Olk  <alex.olk at googlemail.com>
-
-	* Theme.cs: Added a little helper to SystemResPool to get the Dark,
-	  DarkDark, Light and LightLight colors for a specific color
-	* ThemeWin32Classic.cs:
-	  - Use Button drawing code to draw RadioButtons and CheckBoxes with
-	    Appearance = Button 
-	  - Make use of the new ResPool helper CPColor
-	  - Draw ProgressBar and StatusBar with correct 3D borders
-
-2006-03-29  Alexander Olk  <alex.olk at googlemail.com>
-
-	* ColorDialog.cs: Return selected color. Fixes bug #77940.
-
-2006-03-28  Mike Kestner  <mkestner at novell.com>
-
-	* ListView.cs: fix Icon layout to plan for scrollbar widths when
-	calculating col/row counts.
-
-2006-03-28  Mike Kestner  <mkestner at novell.com>
-
-	* ColumnHeader.cs:
-	* ListView.cs:
-	* ListViewItem.cs:
-	* Menu.cs: 
-	switch to explicit interface method implementation for some methods
-	corcompare identifies as inconsistent with MS.
-
-2006-03-28  Mike Kestner  <mkestner at novell.com>
-
-	* MainMenu.cs: 
-	* Menu.cs:
-	add a few missing methods from the class status output.
-
-2006-03-28  Alexander Olk  <alex.olk at googlemail.com>
-
-	* ControlPaint.cs: Fixed ControlPaint.Light method. Results are now
-	  correct.
-
-2006-03-28  Mike Kestner  <mkestner at novell.com>
-
-	* MenuAPI.cs: Deactivate on MainMenu item click. Fixes #77917.
-
-2006-03-27  Mike Kestner  <mkestner at novell.com>
-
-	* ThemeWin32Classic.cs: Switch flat toolbars to use RaisedInner for
-	the Hilight state to adapt to Alex's CPDrawBorder3D changes.
-
-2006-03-27  Alexander Olk  <alex.olk at googlemail.com>
-
-	* ThemeWin32Classic.cs: Rewrote Button drawing code to match ms.
-
-2006-03-25  Alexander Olk  <alex.olk at googlemail.com>
-
-	* ThemeWin32Classic.cs:
-	  - GroupBox: Inserted a little gap between the text and the lines
-	    on the right side
-	  - Made the code in CPDrawBorder3D more readable
-	  - Corrected the drawing location of the up and down arrows in 
-	    CPDrawScrollButton
-
-2006-03-25  Alexander Olk  <alex.olk at googlemail.com>
-
-	* ControlPaint.cs: Corrected line widths in DrawBorder for
-	  ButtonBorderStyle Inset and Outset
-
-2006-03-25  Alexander Olk  <alex.olk at googlemail.com>
-
-	* ThemeWin32Classic.cs:
-	  - Rewrote the totally broken CPDrawBorder3D method. That was
-	    one of the main problems for the terrific ThemeWin32Classic
-	    look
-	  - Updated and corrected Button drawing
-	  - Correct the dimensions of the SizeGrip to match ms ones
-	  - Removed a small drawing glitch in DrawComboBoxEditDecorations
-	* XplatUIX11.cs: Draw borders with BorderStyle = Fixed3D with
-	  Border3DStyle.Sunken to match ms.
-
-2006-03-25  Alexander Olk  <alex.olk at googlemail.com>
-
-	* ThemeWin32Classic.cs:	First small part of the "de-uglify
-	  ThemeWin32Classic" effort, SizeGrip
-
-2006-03-24  Jackson Harper  <jackson at ximian.com>
-
-	* XplatUIX11.cs: Give a max idle time of one second, this matches
-	MS and forces an Idle event every second when there are no other
-	events in the queue.
-
-2006-03-24  Mike Kestner  <mkestner at novell.com>
-
-	* ListView.cs: Handle (Large|Small)ImageList == null more robustly.
-	* ListView.Item.cs: fix layout issues with null image lists and images
-	smaller than checkbox size.
-	* ThemeWin32Classic.cs: Draw a 12 pixel line in ListView LargeIcon
-	mode like MS does.  It's weird, but consistent.  ;-)
-	Fixes #77890.
-
-2006-03-24  Mike Kestner  <mkestner at novell.com>
-
-	* ListView.cs: Scroll wheel support for the item control.  Fixes
-	#77839.
-
-2006-03-23  Jackson Harper  <jackson at ximian.com>
-
-	* ScrollableControl.cs: Special case negative sized areas, not
-	zero.
-	* MonthCalendar.cs: Save the rect of the clicked date so we can
-	use it for invalidation.
-	- Try to cut down on the number of invalidates
-	- Invalidate the rect the mouse is over and was over when moving
-	the mouse, so we get the focus box following the cursor.
-
-2006-03-23  Mike Kestner  <mkestner at novell.com>
-
-	* ThemeWin32Classic.cs: fix FullRowSelect selection background and
-	focus rectangle drawing. Fixes #77835.
-
-2006-03-23  Mike Kestner  <mkestner at novell.com>
-
-	* XplatUIX11.cs: rework the fix for #77828 by changing the order of
-	the if and else if and reverting back to the original == check on the
-	None conditional.
-
-2006-03-23  Alexander Olk  <alex.olk at googlemail.com>
-
-	* FontDialog.cs: Update the example panel if the selected index of
-	  the fontListBox changes.
-
-2006-03-23  Alexander Olk  <alex.olk at googlemail.com>
-
-	* FileDialog.cs: Make FileDialog remember which directory it was in
-	  last in the same execution.
-
-2006-03-22  Mike Kestner  <mkestner at novell.com>
-
-	* FileDialog.cs: make the DropDownMenu on the toolbar display
-	RadioChecks since they are mutually exclusive and that's what MS does.
-
-2006-03-22  Mike Kestner  <mkestner at novell.com>
-
-	* Theme.cs: add Color param to CPDrawMenuGlyph.
-	* ThemeWin32Classic.cs: do color specific menu glyph rendering so that
-	checks and radio marks and arrows are visible on highlighted items.
-	* ControlPaint.cs: update to use new Theme signature.
-
-2006-03-22  Mike Kestner  <mkestner at novell.com>
-
-	* MenuAPI.cs: only process Enter and arrow keypresses if the tracker
-	is active. Fixes #77870.
-
-2006-03-22  Alexander Olk  <alex.olk at googlemail.com>
-
-	* FileDialog.cs: Corrected TabIndex order and set fileNameComboBox
-	  to be focused/selected after startup
-
-2006-03-22  Alexander Olk  <alex.olk at googlemail.com>
-
-	* ColorDialog.cs: 
-	  - Corrected behaviour of Color, AllowFullOpen, FullOpen,
-	    CustomColors and ShowHelp properties
-	  - Some internal rewrites to get better results when using the
-	    ColorMatrix
-
-2006-03-22  Mike Kestner  <mkestner at novell.com>
-
-	* ListView.cs: hook into Peter's new ResetMouseHover capability to fix
-	HoverSelection.  Fixes #77836.
-
-2006-03-22  Mike Kestner  <mkestner at novell.com>
-
-	* FileDialog.cs: bugfixes for the toolbar.  Use PushButtons instead of
-	ToggleButtons.  (De)Sensitize the Back button around a stack count of
-	1, not 0.  Update ButtonSize based on a pixel count of the win32
-	control.  Adjust the toolbar size/location for new button size.
-
-2006-03-22  Jackson Harper  <jackson at ximian.com>
-
-	* XplatUIX11.cs: Don't handle configurenotifys if PostQuitState is
-	true.
-	* ScrollBar.cs: When doing increments and decrements we need to
-	set the Value property so that ValueChanged gets raised. A
-	possible optimization here would be to make an internal SetValue
-	that doesn't invalidate immediately.
-	* ToolTip.cs: Tooltips get added to their container (when
-	supplied) so they get disposed when the container is disposed.
-	- Don't create tooltips for String.Empty. This prevents all these
-	little 2-3 pixel windows from showing up when running nunit-gui
-	and driving me mad.
-	* Form.cs: Don't set topmost when setting the owner if the handles
-	haven't been created yet.  The topmost set will happen when the
-	handles are created.
-
-2006-03-22  Peter Dennis Bartok  <pbartok at novell.com> 
-
-	* XplatUIX11.cs:
-	  - DeriveWindowStyles: Fixed typo in borderstyle generation (#77828)
-	  - SetVisible: Sending WINDOWPOSCHANGED for all controls when made 
-	    visible (to allow them to recalculate their sizes)
-
-2006-03-21  Mike Kestner  <mkestner at novell.com>
-
-	* ThemeWin32Classic.cs: major refactoring of the ToolBar rendering
-	methods. Removed a ton of redundant code.  Still not really happy with
-	the border rendering, but I think that's mainly because of the
-	ControlDarkDark being black instead of a dark grey. Depending on how 
-	close we want to be, we might want to revisit those color choices.
-	Among the new features added during the refactor were DropDownArrow
-	pressed rendering, Disabled image rendering.  Proper flat appearance
-	boundary rendering.  Removed the Divider and Wrapping dividers since I
-	can't figure out any combination of themes and conditions to make the
-	MS control draw a horizontal line on a toolbar despite what the
-	Divider property docs indicate.
-	* ToolBar.cs: rewrite the layout engine. Fixes numerous flicker
-	conditions and incorrect layout.  Updated to coding standard.
-	* ToolBarButton.cs: refactored layout and positioning code from
-	ToolBar to here.  Invalidate wherever possible instead of forcing
-	redraws of the whole toolbar. 
-	(Known remaining issues: explicit ButtonSize smaller than provided
-	images.)
-
-2006-03-21  Mike Kestner  <mkestner at novell.com>
-
-	* ContextMenu.cs (Show): use the position parameter instead of just
-	showing at the MousePosition.
-
-2006-03-21  Jackson Harper  <jackson at ximian.com>
-
-	* TabControl.cs: Remove the call to ProcessKeyEventArgs and let
-	control handle this.
-	* TreeNodeCollection.cs: If we are clearing the root node we need
-	to reset top_node so calcs can still happen.
-	* ThemeWin32Classic.cs: This is a Flags so we need to check
-	properly.
-	
-2006-03-21  Jackson Harper  <jackson at ximian.com>
-
-	* DataGrid.cs: Create columns when the binding context has been
-	changed.
-	* X11Structs.cs: Keysyms are uints.
-	- Add size to fix build.
-
-2006-03-21  Peter Dennis Bartok  <pbartok at novell.com> 
-
-	* XplatUI.cs, XplatUIDriver.cs, XplatUIX11.cs, XplatUIWin32.cs, 
-	  XplatUIOSX.cs: 
-	  - Added ResetMouseHover method to allow controls to retrigger
-	    hovering if they need it more than once
-	  - Implemented MouseHoverTime and MouseHoverSize properties
-	* Timer.cs: Start() must reset the interval
-	* SystemInformation.cs: Added 2.0 MouseHoverTime and MouseHoverSize
-	  properties
-
-2006-03-21  Jackson Harper  <jackson at ximian.com>
-
-	* X11Keyboard.cs: improved layout detection. Move the nonchar
-	tables into this file.
-	* KeyboardLayouts.cs: Move the tables into resource files.
-
-2006-03-21  Mike Kestner  <mkestner at novell.com>
-
-	* ListView.cs: use OnItemActivated to raise events. Fixes #77834.
-
-2006-03-21  Alexander Olk  <alex.olk at googlemail.com>
-
-	* Mime.cs: Various speed optimizations. Looking up mime types
-	  is now 2 times faster than before
-
-2006-03-17  Peter Dennis Bartok  <pbartok at novell.com> 
-
-	* CreateParams.cs: Added internal menu field
-	* Control.cs: 
-	  - Switched call order for UpdateBounds; now we always call
-	    the one that also takes ClientSize, and we're calculating the 
-	    client size via driver method in the others. The previous
-	    method of tracking client size by difference wasn't working
-	    for forms where even the starting client size wouldn't match
-	    the overall form size (due to borders) (Part of fix for #77729)
-	  - CreateParams(): Do not use parent.Handle unless the handle is
-	    already created. Causes havoc with Nexxia and throws off our
-	    creation of controls
-	* XplatUIX11.cs:
-	  - Created new PerformNCCalc method to trigger WM_NCCALCSIZE message
-	  - Switched handling of ConfigureNotify over to new PerformNCCalc 
-	    method (consolidates code)
-	  - Changed RequestNCRecalc to use new PerformNCCalc method
-	  - Added calls to RequestNCRecalc when menus and borders are changed
-	    to allow app to set NC size. (Part of fix for #77729) This matches
-	    when MS send a WM_NCRECALC on Win32 windows.
-	  - Now sending WM_WINDOWPOSCHANGED when toplevel for is made visible
-	    (Part of fix for #77729). This matches what MS does, they also
-	    send that message when the form is made visible.
-	  - XException.GetMessage: Improved usability of X errors by including
-	    a translation of the window into Hwnd and Control class
-	  - Improved debug info for window creation, reparenting and destruction
-	  - Created helper method WindowIsMapped() [Currently not used]
-	* XplatUIWin32.cs: Added ToString() debug helper to RECT structure
-	* Form.cs:
-	  - CreateParams: Now setting our menu on the new internal menu field
-	  - SetClientSizeCore: Now passing cp.menu instead of ActiveMenu to
-	    avoid calculating the same property twice
-	* Hwnd.cs:
-	  - Improved usability of ToString() for debugging purposes
-	  - GetWindowRectangle(): Now uses proper CalcMenuBarSize method to
-	    determine the height of the menu, instead of just the font. This
-	    required to also create a graphics context and to keep a bmp 
-	    around (for performance reasons)
-
-2006-03-17  Peter Dennis Bartok  <pbartok at novell.com>
-
-	* MenuAPI.cs: Added OnMouseUp method
-	* Form.cs:
-	  - Now remembering the requested client size, avoids size errors
-	  - WndProc: Now handling WM_xBUTTONUP and passing it to MenuTracker
-	    instead of base if the menu is active. This is required due to
-	    control now capturing and releasing on down/up and it would
-	    prematurely release our menu capture
-
-2006-03-17  Jackson Harper  <jackson at ximian.com>
-
-	* KeyboardLayouts.cs: Add the czech layouts.
-
-2006-03-16  Jackson Harper  <jackson at ximian.com>
-
-	* Control.cs: Use the viewport space when sizing not the controls
-	client size, so things like ScrollableControl that effect the
-	viewport size (when scrollbars are added) are computed correctly.
-	* BindingContext.cs: Cleanup to use the DataSourceEntrys instead
-	of ManagerEntrys.
-	- Handle creating BindingManagers for null data sources.
-	* DataGrid.cs: Bind the cached_currencymgr_events to the real data
-	source, otherwise when rows are added they are added to the 'fake'
-	datasource and we will crash when trying to set the position in
-	those rows.
-	- Use Implicit scrollbars on the datagrid so they arent
-	selectable.
-	
-2006-03-16  Jackson Harper  <jackson at ximian.com>
-
-	* Binding.cs:
-	* InternalWindowManager.cs:
-	* MdiWindowManager.cs:
-	* X11Keyboard.cs: I really want Mike to love me again (fix
-	compiler warnings).
-
-2006-03-16  Peter Dennis Bartok  <pbartok at novell.com>
-
-	* DataGrid.cs:
-	  - OnMouseDown: Switch to editing mode when clicking on the cell
-	                 even if we're clicking on the cell that's currently 
-	                 selected
-	  - ProcessGridKey: Left/Right now wrap like MS.Net does
-	  - ProcessGridKey: Tab now knows to add a new row when tab is
-	                    pressed in the cell of the last column of the 
-	                    last row
-	  - ProcessGridKey: Enter now adds another row  if pressed in the last
-	                    row and selectes the new row, same column cell
-	  - ProcessGridKey: Home/End navigate columns, not rows, like 
-	                    originally implemented
-	  - Broke ProcessKeyPreview code out into an extra Internal method
-	    so it can be called from the edit code
-	* DataGridTextBox.cs (ProcessKeyMessage):
-	  - Switched to accept Tab keypresses
-	  - Added F2 handling to allow jumping to the end of the edited cell
-	  - Added logic to allow moving caret left/right inside edited cell
-	    and making the edited cell jump when the caret hits cell borders
-	  - Tab and Enter are now passed to the datagrid after being handled
-	* TextBoxBase.cs:
-	  - Removed capture code now that Control handles it
-	  - set_SelectionStart now ensures caret is visible
-
-2006-03-16  Jackson Harper  <jackson at ximian.com>
-
-	* TrackBar.cs: Debackwards the increment/decrement for handling
-	mouse clicks on the bar with vertical trackbars.
-	* ThemeWin32Classic.cs: Draw vertical trackbars with 0 at the
-	bottom to match MS.
-
-2006-03-16  Mike Kestner  <mkestner at novell.com>
-
-	* ListView.cs: make shift/ctrl keyboard and mouse selection 
-	consistent with the MS control. Fix a bug in
-	SelectedListViewItemCollection.Clear that was pissing me off for the
-	better part of a day because the collection was being altered
-	underneath us as we walked the list.
-
-2006-03-16  Peter Dennis Bartok  <pbartok at novell.com> 
-
-	* Control.cs: Not sure how we could miss this so long, but it seems
-	  that MS.Net has Capture set all the way from before calling 
-	  OnMouseDown through sending the mouse events until after
-	  OnMouseUp. This will fix DataGrid's selection being set to end
-	  at the location of the MouseUp.
-
-2006-03-15  Jackson Harper  <jackson at ximian.com>
-
-	* BindingContext.cs: Check the binding after its added so that it
-	  can initialize the binding managers and hookup to events.
-	* Binding.cs: Data members seem to sometimes include rows/cols in
-	  the format Row.Column we now take this into account.
-	  - Hookup to the position changed event so we can update the
-	  control when the position has changed in the data set.
-	* CurrencyManager.cs: Take into account the row/col naming
-	  convention when creating dataset tables.
-	* BindingContext.cs: Using a newer better way of storing
-	  datasource/datamember pairs.  Hopefully this better matches MS for
-          looking up binding managers.
-
-
-2006-03-15  Jackson Harper  <jackson at ximian.com>
-
-	* BindingContext.cs: The currency manager needs the data member
-	name, if the member is a data set we use the name to find the
-	correct table.
-	* CurrencyManager.cs: When creating the list prefer an IList over
-	an IListSource.
-	- Attempt to create a DataTable from a DataSet (TODO: might need
-	some better error checking here, although MS doesn't seem to have much)
-	- If we have a DataTable create a view and use it as our list.
-
-2006-03-15  Mike Kestner  <mkestner at novell.com>
-
-	* ListView.cs: keep a matrix of the icon mode layout to facilitate
-	keyboard navigation. Support Up/Down/Left/Right selection correctly
-	for all 4 View modes.
-	* ListViewItem.cs: add internal row/col fields for icon layouts.
-
-2006-03-15  Jackson Harper  <jackson at ximian.com>
-
-	* TabControl.cs: Redraw the tabs when we resize so their newly
-	calculated sizes are drawn on screen.
-	* X11Keyboard.cs: Begginnings of XIM support.  We also now support
-	composite characters.
-	* XplatUIX11.cs: Keyboard driver needs to know about focus changes
-	- filter events so that composite characters can be created
-	patches by peter
-	* X11Structs.cs: Add XIMProperties enum.
-
-2006-03-14  Peter Dennis Bartok  <pbartok at novell.com> 
-
-	* Control.cs (BringToFront, SendToBack): Don't use window or handle
-	  unless it's created
-
-2006-03-14  Peter Dennis Bartok  <pbartok at novell.com>
-
-	* Control.cs (PerformLayout): We don't need to consider visiblity
-	  for anchoring, only for docking. This fixes 'whacky' alignment
-	  in listbox and other controls that use implicit scrollbars after
-	  the previous PerformLayout patch
-	* ListBox.cs: Switched to use implicit scrollbars
-	  
-2006-03-14  Mike Kestner  <mkestner at novell.com>
-
-	* ToolBar.cs: 
-	* VScrollBar.cs:
-	- chain up the "new event" overrides to base and use
-	OnEvent to raise them.  Part of fix for bug #76509.
-
-2006-03-14  Alexander Olk  <alex.olk at googlemail.com>
-
-	* FileDialog.cs: Do not select an item in the parent directory
-	  on backspace
-
-2006-03-14  Peter Dennis Bartok  <pbartok at novell.com> 
-
-	* Control.cs (PerformLayout): It would seem that we considered
-	  invisible windows for our layout. Not quite the right thing
-	  to do. Now we don't any longer, thereby fixing bug #76889.
-
-2006-03-14  Peter Dennis Bartok  <pbartok at novell.com>
-
-	* Control.cs (CanFocus): I goofed. A control can have focus 
-	  even though it's not selectable. Made it match MS docs.
-
-2006-03-13  Peter Dennis Bartok  <pbartok at novell.com>
-
-	* ControlPaint.cs (DrawBorder3D): DrawBorder3D does not fill the
-	  center by default (fixes #76895)
-	* ThemeWin32Classic.cs, ThemeNice.cs, ThemeClearlooks.cs: Replaced 
-	  all uses of Border3DSides.All with the explicit ORd together
-	  Left|Right|Top|Bottom because I assume that nobody was aware 
-	  that All also implies a center fill. Most places I checked had
-	  a fill right above.
-	* ProgressBarStyle.cs: Added
-
-2006-03-13  Mike Kestner  <mkestner at novell.com>
-
-	* ListView.cs: fix breakage in drag shadow header positioning 
-	from Peter's csc compilation fix.
-
-2006-03-13  Mike Kestner  <mkestner at novell.com>
-
-	* ListView.cs: fix NRE produced by backspacing twice in a focused
-	FileDialog.
-
-2006-03-13  Mike Kestner  <mkestner at novell.com>
-
-	* ListView.cs: proxy Key(Down|Up) from ItemControl to ListView.
-
-2006-03-13  Peter Dennis Bartok  <pbartok at novell.com>
-
-	* Hwnd.cs: Added fixed_size field to track windows whose size cannot
-	  be changed
-	* XplatUIX11.cs: Now setting fixed_size on hwnd and if set, re-setting
-	  the allowed size before making programmatic size changes
-
-2006-03-13  Peter Dennis Bartok  <pbartok at novell.com> 
-
-	* XplatUIX11.cs: Don't call XSetWMNormalHints if no flags are 
-	  set, metacity is broken and will still use the emty sizes in 
-	  the struct. (Fix for #77089)
-
-2006-03-13  Peter Dennis Bartok  <pbartok at novell.com>
-
-	* XplatUIStructs.cs: Split WindowStyles into WindowStyles and 
-	  WindowExStyles and marked both enums as Flags
-	* Form.cs, ComboBox.cs, ToolTip.cs, Control.cs, PropertyGridView.cs,
-	  NotifyIcon.cs, MenuAPI.cs, XplatUIOSX.cs, MonthCalendar.cs: Updated
-	  to match WindowStyles split
-	* XplatUIX11.cs:
-	  - SetWMStyles: Added cehck to not apply WM attributes to Child windows
-	  - Updated to match WindowStyles split
-	* XplatUIWin32.cs:
-	  - Fixed FosterParent creation, was using ExStyle on the Style field
-	    (This should help with Popup focus issues)
-	  - Updated to match WindowStyles split
-
-2006-03-13  Jackson Harper  <jackson at ximian.com>
-
-	* MdiWindowManager.cs: Use the system menu height. Fixes some
-	strange sizing issues.
-
-2006-03-12  Peter Dennis Bartok  <pbartok at novell.com>
-
-	* RichTextBox.cs: Need to scroll to caret after text is inserted (#77672)
-	* TextBoxBase.cs:
-	  - Scroll to caret after inserting text (#77672)
-	  - Make scroll range one pixel higher, fixes off-by-one error (and
-	    makes underlines visible on the last line)
-
-2006-03-12  Peter Dennis Bartok  <pbartok at novell.com> 
-
-	* XplatUIX11.cs: Added call to new Keyboard.ResetKeyState to prevent
-	  the keyboard state from being stuck with keys in 'pressed' state when
-	  focus is switched away via keyboard
-	* X11Keyboard.cs: Added new ResetKeyState method to allow drivers to
-	  reset the keyboard if no X11 KeyUp events are expected to come
-	* X11Structs.cs: Switched type of Visible to bool to match driver
-
-2006-03-12  Peter Dennis Bartok  <pbartok at novell.com>
-
-	* TextControl.cs:
-	  - Switched caret to be just 1 pixel wide, matches MS and looks less
-	    clunky
-	  - Moved caret display 1 pixel down from the top of the control
-	    to improve view
-	  - InsertCharAtCharet: Update the selection start if moving the caret
-	    (fixes bug #77696; based on patch suggested by kazuki at panicode.com)
-	  - No longer always creating the caret when the caret methods are
-	    called. Only the actual ShowCaret/HideCaret will do that now
-	  - Only setting caret visible if the owner control has focus
-	  - UpdateView: Added invalidation-shortcut logic for center and right 
-	    aligned text. Previously we'd update all according to the left
-	    logic which caused drawing errors. Also fixed height of invalidated
-	    areas, now properly invalidating the whole area (was off-by-one)
-	  - owner_HandleCreated: Always generate the document when the
-	    handle is created; this ensures that 
-	* TextBoxBase.cs:
-	  - Fixed situation where caret would disappear under the right
-	    window border, also improved scrolling behaviour on left-
-	    aligned textboxes
-	  - Fixed right-aligned textboxes to have a border to the
-	    right instead of the caret being under the right border
-	* XplatUIX11.cs:
-	  - Switched from 'nested' to simple visible/not visible tracking 
-	    for caret (part of fix for #77671)
-	  - No longer passing through translated FocusIn/FocusOut messages
-	    since we were notifying too often and the wrong windows. Instead
-	    we just notify our focussed window of receiving or loosing focus
-	* XplatUIWin32.cs: Switched from 'nested' show/hide 
-	  counting for caret to simple visible yes/no behaviour (part of 
-	  fix for #77671)
-
-2006-03-11  Alexander Olk  <alex.olk at googlemail.com>
-
-	* Mime.cs: Remove debug code...
-
-2006-03-11  Alexander Olk  <alex.olk at googlemail.com>
-
-	* MimeGenerated.cs: Removed
-	* Mime.cs: Mime now reads the mime data (magic, globs, aliases
-	  and subclasses) from /usr/(local/)share/mime and
-	  $HOME/.local/share/mime.
-
-2006-03-10  Jackson Harper  <jackson at ximian.com>
-
-	* MdiWindowManager.cs: Recalc the NC area when a window is
-	maximized/restored so that the menu area is drawn on forms that
-	don't have a menu.
-
-2006-03-10  Peter Dennis Bartok  <pbartok at novell.com>
-
-	* XplatUI.cs, XplatUIDriver.cs, XplatUIOSX.cs, XplatUIWin32.cs,
-	  XplatUIX11.cs: Added RequestNCRecalc method to driver to allow
-	  us to force a WM_NCCALCRESIZE message being sent. This is needed
-	  for MDI maximizing.
-
-2006-03-10  Jackson Harper  <jackson at ximian.com>
-
-	* Form.cs: We need to use the ActiveMenu when calculating menu
-	height.
-	- Fix nullref when the window manager hasn't been created yet.
-	* Control.cs: Fix nullref when we try to bring a control to the
-	front that has no parent.
-	* MdiWindowManager.cs: Use the MaximizedMenu for calculating
-	height.
-	- Add a dummy item to the maximized menu so it always has the
-	correct height. Otherwise when there are no menus we don't get our
-	icon and buttons.
-	
-
-2006-03-10  Jackson Harper  <jackson at ximian.com>
-
-	* MenuAPI.cs: Make this available elsewhere. I need it in some MDI
-	stuff.
-	* Form.cs: Make the window_state internal so the window managers
-	can track it.
-	- When an MDI child is maximized let its window manager create the
-	main menu (so it can add its icon).
-	- Notify the window managers of state changes
-	- Let the window manager paint its buttons and handle button
-	clicks on the menu when it is maximized.
-	* InternalWindowManager.cs: Move the prev_bounds into the mdi
-	window manager, since tool windows don't use it, only mdi windows.
-	- Tell the main form that we don't want it to handle NCPAINT
-	itself to avoid extra painting.
-	- Handle clicks on a maximized windows menu.
-	- Handle window state changes
-	- Handle minimize/maximize clicks correctly by setting the window state.
-	* MdiWindowManager.cs: Add an icon menu that (the menu you get
-	when clicking on the forms icon).
-	- New method to create a forms maximized menu. This is its normal
-	menu + an icon.
-	- Handle window state changes.
-	- Handle sizing of maximized windows.  Maximized windows are just
-	drawn bigger then the parent visible area. All controls are still
-	there, they are just outside the visible area (this matches windows).
-	* MdiClient.cs: No scrollbars when a child window is maximized.
-	- Let the children windows figure out how big they should be when
-	sizing maximized windows.
-	- Implement a version of ArrangeIconicWindows somewhat similar to
-	Windows version.  There are some little differences, but I don't
-	think any app will rely on the layout of minimized mdi windows.
-
-2006-03-10  Peter Dennis Bartok  <pbartok at novell.com>
-
-	* Padding.cs: Several fixes to allow compiling with csc 2.0
-
-2006-03-09  Jackson Harper  <jackson at ximian.com>
-
-	* Menu.cs:
-	* MenuItem.cs: Cheap hack so we can add items to the list without
-	the events being raised.  This allows adding mdi items during
-	drawing. TODO: Should probably find a better time to add the items.
-
-2006-03-10  Peter Dennis Bartok  <pbartok at novell.com>
-
-	* ThemeWin32Classic.cs:
-	  - CheckBox_DrawText: Added logic to not wrap if not enough space
-	    is available (Fix for bug #77727)
-	  - RadioButton_DrawText: Added logic not to wrap if not enough
-	    space is available (Fix for bug #77727). Also removed some
-	    duplicate code, DrawString always drawing the regular text
-	    before hitting the if statement.
-
-2006-03-10  Peter Dennis Bartok  <pbartok at novell.com> 
-
-	* XplatUIX11.cs: Handle an unmapped window state in SetWindowState
-
-2006-03-10  Peter Dennis Bartok  <pbartok at novell.com>
-
-	* PictureBox.cs: Implemented ISupportInitialize interface (fixes #77726)
-	* ContainerControl.cs: Partial implementation of some 2.0 scaling
-	  methods. Moved the new 2.0 properties into alphabetical order with
-	  other properties and added MonoTODO tags
-
-2006-03-09  Peter Dennis Bartok  <pbartok at novell.com> 
-
-	* AutoScaleMode.cs: Added. Fix build.
-
-2006-03-09  Peter Dennis Bartok  <pbartok at novell.com>
-
-	* XplatUI.cs, XplatUIDriver.cs, XplatUIX11.cs, XplatUIWin32.cs, 
-	  XplatUIOSX.cs: Removed HWnd argument from CalcuateClientRect, not used
-	  and was requiring premature handle creation for calls from above
-	* Form.cs, Control.cs: Removed handle arguments from calls to
-	  CalculateClientRect()
-
-2006-03-09  Peter Dennis Bartok  <pbartok at novell.com> 
-
-	* ListView.cs (HeaderMouseMove): Fix csc compilation. 
-	  drag_column.column_rect is MarshalByRef and can't be used that way
-
-2006-03-09  Peter Dennis Bartok  <pbartok at novell.com>
-
-	* AxHost.cs: Added deserialization constructor for 
-	  AxHost+State (fixes 77743)
-
-2006-03-09  Mike Kestner  <mkestner at novell.com>
-
-	* ListView.cs: 
-	- Added column drag reordering for details view.
-	- fixed behavior when mouse is dragged off column and
-	AllowColumnReorder is false.
-	* ColumnHeader.cs: clone the format too in Clone.
-	* Theme.cs: add DrawListViewHeaderDragDetails method.
-	* ThemeWin32Classic.cs:
-	- impl new method for drawing drag column shadows and targets.
-	- support column offset for details mode in DrawListViewItem.
-
-2006-03-09  Peter Dennis Bartok  <pbartok at novell.com>
-
-	* TextControl.cs: Reset the char_count when the document is cleared
-	  (Fixes bug reported on mono-winforms mailing list)
-
-2006-03-09  Peter Dennis Bartok  <pbartok at novell.com> 
-
-	* TextBoxBase.cs: Honor the Handled state of KeyPress events. Instead
-	  of calling base we simply process the key ourselves, since both
-	  DefWindowProc and the handled method would set m.Result. 
-	  (Fixes #77732)
-
-2006-03-09  Peter Dennis Bartok  <pbartok at novell.com>
-
-	* Form.cs(ScaleCore): No longer calling base.ScaleCore since that
-	  method also moves the window; instead implemented a copy of
-	  Control.ScaleCore (Part of fix for #77456)
-	* TextBoxBase.cs: 
-	  - Created new CreateGraphicsInternal method to allow providing
-	    a graphics context when no handle is created without triggering
-	    handle creation. (Part of fix for #77456)
-	  - Replaced use of Control.CreateGraphics with CreateGraphicsInternal
-	* TextControl.cs: 
-	  - Switched Constructor to require TextBoxBase instead of Control (to
-	    allow uncast access to CreateGraphicsInternal)
-	  - Safeguarded use of owner.Handle property. No longer accessing it
-	    unless the handle is already created.
-	  - Replaced use of Control.CreateGraphics with CreateGraphicsInternal
-	  - Now triggering a recalc when owning control becomes visible
-	* TextBox.cs, RichTextBox.cs: Switched to use new internal 
-	  TextBoxBase.CreateGraphicsInternal() method to avoid triggering
-	  premature handle creation (Part of fix for #77456)
-	* Control.cs:
-	  - We now only destroy our double-buffering buffers when the
-	    control is resized or disposed, but not when visibility
-	    changes. (The code even re-created them twice every time)
-	  - Now requiring a redraw of the buffer on visibility changes
-	    (fixes bug 77654 part 2)
-	  - Not passing OnParentVisibleChanged up unless the control
-	    is visible
-	  - CanFocus: Fixed to match MS documentation
-	  - Focus: Fixed to return actual focus state and to check if
-	    setting focus is legal before setting it
-
-2006-03-08  Peter Dennis Bartok  <pbartok at novell.com>
-
-	* ThemeWin32Classic.cs: TabPages cannot have focus. Determine
-	  when to draw focus rectangle by looking at parent focus and
-	  selected state instead. This fixes TabPages on Linux sometimes
-	  having none or multiple focus rectangles.
-	* XplatUIX11.cs (SetFocus): 
-	  - Don't set the focus if the same window already has focus
-	  - Use SendMessage instead of PostMessage (like it's Win32
-	    equivalent) and send the WM_SETFOCUS before the WM_KILLFOCUS
-	    to match MS behaviour
-	* TabControl.cs(SelectedIndex): Don't set Focus on TabPage, TabPages
-	  are not selectable.
-
-2006-03-07  Jackson Harper  <jackson at ximian.com>
-
-	* PictureBox.cs: Revert line I accidently committed last week.
-
-2006-03-07  Peter Dennis Bartok  <pbartok at novell.com>
-
-	* Control.cs: 
-	  - Added new IsRecreating and ParentIsRecreating properties to
-	    allow testing if RecreateHandle has been called on ourselves
-	    or one of our parents
-	  - WndProc(WM_DESTROY): If our control handle is being recreated
-	    we immediately need to create the handle when receiving the
-	    destroy, that way our child windows find a valid parent handle
-	    when they themselves are being recreated upon WM_DESTROY receipt
-	    (fix for bug #77654 part 1)
-	* XplatUIX11.cs:
-	  - DestroyWindow: WM_DESTROY must be sent to our own window before
-	    notifying any child windows. MS documents that child windows
-	    are still valid when WM_DESTROY is received. (Control now relies on
-	    this behaviour)
-	  - Added some fine-grain debug options
-
-2006-03-06  Jackson Harper  <jackson at ximian.com>
-
-	* MdiClient.cs: Redid scrolling logic a bit to create a virtual
-	box and base calculations off this.
-	* MdiChildContext.cs:
-	* MdiWindowManager.cs: Don't need to ensure scrollbars here
-	anymore.
-	
-2006-03-06  Peter Dennis Bartok  <pbartok at novell.com>
-
-	* Splitter.cs: In situations where the affected control is added
-	  to the parent's control list after the splitter, we would not
-	  populate affected. Now we try populating it on mousedown, if
-	  it's not already set, and force it to be re-set whenever our
-	  parent changes.
-
-2006-03-03  Matt Hargett  <matt at use.net>
-
-	* Control.cs: implement Control.Padding
-	* Padding.cs: -Padding.All returns -1 when constructing with the
-	implicit default ctor
-	-Padding.ToString() matches MS.NET
-	* ContainerControl.cs: implement
-	ContainerControl.AutoScaleDimensions
-	* ListControl.cs: implement ListControl.FormattingEnabled
-	* TextBox.cs: Implemented TextBox.UseSystemPasswordChar.
-	* ButtonBase.cs:
-	* TabPage.cs: Implement UseVisualStyleBackColor.
-	* PictureBox.cs: Implement PictureBox.InitialImage.
-
-2006-03-03  Mike Kestner  <mkestner at novell.com>
-
-	* ListView.cs: Refactor into HeaderControl and ItemControl. Fix new
-	event declarations to proxy to base event.
-	* ListViewItem.cs: update to use ItemControl.
-	* Theme.cs: make DrawListViewHeader. s/DrawListView/DrawListViewItems.
-	* ThemeWin32Classic.cs: update to new ListView theme API and fix
-	column header label rendering for 0 width columns.
-
-2006-03-03  Peter Dennis Bartok  <pbartok at novell.com>
-
-	* Control.cs (ControlCollection.SetChildIndex): Avoid using a call
-	  that causes the control to be created. Fixes #77476.
-
-2006-03-02  Jackson Harper  <jackson at ximian.com>
-
-	* Hwnd.cs: Clear the nc pending when clearing the NC area, not the
-	expose_pending.
-
-2006-03-02  Peter Dennis Bartok  <pbartok at novell.com>
-
-	* Control.cs: Implemented 2.0 feature where OnClick has MouseEventArgs
-	  passed in for the EventArgs (fixes #77690)
-
-2006-03-01  Jackson Harper  <jackson at ximian.com>
-
-	* ScrollBar.cs: Refresh afterbeing resized.
-
-2006-02-28  Mike Kestner  <mkestner at novell.com>
-
-	* MenuAPI.cs: Call PerformPopup internal method to emit Popup.
-	Clean up a tracker compile warning.
-	* MenuItem.cs: add internal PerformPopup method.
-	[Fixes #77457]
-
-2006-02-28  Peter Dennis Bartok  <pbartok at novell.com> 
-
-	* TextBoxBase.cs (set_Text): Recalculate the document (causing an
-	  implicit expose) when the text is set to null
-
-2006-02-28  Peter Dennis Bartok  <pbartok at novell.com>
-
-	* RichTextBox.cs (FlushText): When newline is true, we always
-	  need to split the line, even if no text is on it and we may
-	  never eat newlines. (Fixes #77669)
-
-2006-02-28  Mike Kestner  <mkestner at novell.com>
-
-	* ListView.cs: Add UpdateSelection internal method. Remove SelectItem 
-	and set Selected instead.
-	* ListViewItem.cs: Call owner.UpdateSelection to manipulate the 
-	collections.
-
-2006-02-28  Peter Dennis Bartok  <pbartok at novell.com> 
-
-	* ComboBox.cs: Allow setting SelectedIndex to -1. Fixes #77665
-
-2006-02-28  Alexander Olk  <alex.olk at googlemail.com>
-
-	* FontDialog.cs:
-	  - Got rid of the panel. All controls are now directly added to
-	    the dialog form
-	  - It is now possible to set a font with the Font property
-	  - MinSize and MaxSize property do now what they should
-	  - ShowApply, ShowHelp, ShowColor, ShowEffects likewise
-	  - Searching and selecting a font with the font textbox works now,
-	    the same applies to the style and size textbox
-	  - Draw the correct 3D border in the example panel
-	  - Fixed a little mem leak (unused fonts didn't get disposed)
-	  - Many other internal updates/rewrites...
-	  - Fix typo
-
-2006-02-27  Peter Dennis Bartok  <pbartok at novell.com> 
-
-	* TextControl.cs: 
-	  - InsertRTFFromStream: Added 'number of characters inserted' argument
-	  - set_SelectedRTF: Now using the number of characters to calculate
-	    the new location for the selection and cursor (x/y cannot be used
-	    due to potentially already wrapped text)
-
-2006-02-27  Peter Dennis Bartok  <pbartok at novell.com>
-
-	* TextControl.cs: Added property and implemented means to allow 
-	  disabling recalculation of a document (can be used to speed up
-	  multiple inserts and is needed to make RTF inserts predictable, see
-	  bug #77659)
-	* RichTextBox.cs: Using the new NoRecalc property of Document to
-	  keep x/y insert locations predictable. Also makes it faster inserting
-	  large chunks of RTF
-
-2006-02-27  Peter Dennis Bartok  <pbartok at novell.com> 
-
-	* Control.cs: Separated special WM_SYSKEYUP keyboard handling. That way
-	  it's easier for a child control to handle the other messages without
-	  having to duplicate the special functionality
-	* TextBoxBase.cs
-	  - WndProc: Removed calling base handler for WM_KEYDOWN and added 
-	    code to handle processing the key ourselves, in order to get 
-	    access to the result of KeyEventArgs.Handled. We now only call 
-	    ProcessKey if they key hasn't been handled already. Fixes #77526.
-	  - set_Text: If null or empty string is given, just clear the 
-	    document. Fixes part of #77526
-
-2006-02-27  Jackson Harper  <jackson at ximian.com>
-
-	* SizeGrip.cs: Paint the background color before painting the grip
-	so things look right.
-	* MdiClient.cs: Add the sizegrip when both scrollbars are used.
-
-2006-02-27  Mike Kestner  <mkestner at novell.com>
-
-	* ListView.cs:
-	  - Restructure layout and invalidation model to remove a ton of
-	  flicker from the control and speed up performance in general.
-	  - Add manual column resize, flickers like crazy, but I already have
-	  some ideas on how I'll fix that. (#76822)
-	  - Merge the three Icon-based views into a single layout method.
-	  - Move item selection interaction logic from the item since 
-	  interaction with the collections is more appropriate to the view.
-	  - Deselection on non-item clicks.
-	* ListViewItem.cs:
-	  - Encapsulate most of the layout. Add some internal props to trigger
-	  layout.  Move to a model where Items invalidate themselves instead
-	  of just invalidating the whole control every time something changes.
-	  - Invalidate on Text/Caption changes.
-	  - switch to an offset based layout model to avoid having to absolute
-	  position every element on item moves.
-	  - correct checkbox layout to conform to MS layout.
-	* ThemeWin32Classic.cs:
-	  - refactor some column header drawing code.
-	  - fix string justification for column headers (#76821)
-	  - make SmallIcon labels top justified for compat with MS impl.
-	* ThemeClearlooks.cs:
-	  - adjust to new ListViewItem internal checkbox bounds api.
-
-2006-02-27  Jackson Harper  <jackson at ximian.com>
-
-	* Control.cs:  Change where implicit controls fall in the zorder.
-	They are now on top of all children.
-	- Synced AddImplicit code with Add
-	- Removed unused enumerator.
-	* SizeGrip.cs: Remove the TODO as its been TODONE.
-
-2006-02-26  Peter Dennis Bartok  <pbartok at novell.com> 
-
-	* TextControl.cs(Insert): Combine the last lines unless the insertion
-	  string ends with \n\n, otherwise we leave one line too many (Fixes
-	  something I noticed with the testapp for #77526; the bug itself was
-	  already fixed in the previous checkin)
-
-2006-02-26  Peter Dennis Bartok  <pbartok at novell.com>
-
-	* RichTextBox.cs:
-	  - SelectionColor and SelectionFont methods no longer set absolute
-	    styles. Instead, the keep font or color respectively (This 
-	    resolves a long-standing FIXME in the code)
-	  - When flushing RTF text, the insert code now considers text trailing
-	    behind the insertion point (Fixes the bug where when replacing
-	    the selected text via SelectedRTF the remainder of the line behind 
-	    the selection would stay on the first insertion line)
-	* TextBoxBase.cs:
-	  - AppendText now updates the selection points after inserting text
-	  - AppendText now ensures that the last tag (sometimes 0-length) of
-	    the document is used for the style information (Fixes part of 
-	    bug #77220)
-	* TextControl.cs:
-	  - Created new FontDefiniton class to allow describing partial style
-	    changes
-	  - StreamLine() now takes a lines argument, to allow it to decide
-	    whether an encountered zero-length tag is the last in the document
-	    (which must be kept to not loose the font/color contained in it,
-	    for later appends)
-	  - Created Combine() and Split() methods for Marker structs, to 
-	    support marker updates due to reformatted documents (soft line
-	    wraps)
-	  - Implemented Document.CaretTag setter
-	  - Fixed MoveCaret(CtrlEnd) handling, now moves to the last character
-	    of the last line (Not the cause, but also exposed by bug #77220)
-	  - Added LineTag argument to InsertString method, to allow callers
-	    to force a certain tag to be used (required to force use of the
-	    trailing zero-length tag of a document)
-	  - Now updating markers in Combine(), to avoid stale tag markers
-	  - Added some method descriptions to aid maintenance
-	  - Implemented new FormatText concept, allowing additive/subtractive
-	    formatting by only specifying the components that are to be 
-	    changed. This was needed for resolving the RTB.SelectedColor/
-	    RTB.SelectedFont fixmes
-	  - Added Break() support method to allow breaking up linetags (used
-	    for partial formatting)
-	  - Added GenerateTextFormat() method. It is used for partial 
-	    formatting and allows to generate a full font/color from given
-	    attributes and an existing tag.
-
-2006-02-26  Jackson Harper  <jackson at ximian.com>
-
-	* XplatUIX11.cs:  Use the correct caption height.
-	- Translate hittest coordinates to screen coords to match MS.
-	* XplatUIWin32.cs: When we create MDI windows we need to reset
-	some of the style flags, so we get a nice blank window, and can
-	draw all the decorations ourselves.
-	- Set a clipping rectangle on the non client paint event, the
-	window manager drawing code needs one.
-	* Form.cs: The window manager needs to know when the window state
-	has been updated.
-	* Hwnd.cs: The window manager stuff now does a proper NCCALC so we
-	don't need to factor in border and title sizes in these
-	methods. TODO: Remove the args and fix the call points.
-	* InternalWindowManager.cs: Handle NCHITTEST and NCCALCAREA
-	properly.
-	- Let the driver set the cursors.
-	- Improve active window handling
-	- Correct sizes for title bars and buttons.
-	- Match MS drawing better
-	* MdiWindowManager.cs: We don't need to handle border style
-	updates specially anymore.
-	- Check for scrollbars when windows are done moving
-	- Handle Active properly.
-	* MimeIcon.cs: Don't crash when we can't load the GNOME stuff
-	correctly. I am spewing the exception though, so we don't hide the
-	bugs.
-	
-2006-02-26  Pedro Martinez Julia  <pedromj at gmail.com>
-
-	* DataGridViewRowPostPaintEventArgs.cs,
-	  DataGridViewCellPaintingEventArgs.cs,
-	  DataGridViewRowCollection.cs,
-	  DataGridViewRowPrePaintEventArgs.cs,
-	  DataGridViewCell.cs: Clear a few warnings and implement a few
-	  exceptions that should be thrown.
-
-2006-02-22  Peter Dennis Bartok  <pbartok at novell.com>
-
-	* ScrollBar.cs (ctor): Explicitly set a cursor to avoid
-	  'inheriting' our parent's (non-default) cursor. (Part of
-	   the fix for #77479)
-
-2006-02-22  Peter Dennis Bartok  <pbartok at novell.com> 
-
-	* XplatUIX11.cs: Fixed cast to make csc happy
-
-2006-02-22  Peter Dennis Bartok  <pbartok at novell.com>
-
-	* Control.cs (WndProc): Only handle WM_SETCURSOR messages if
-	  it's for the client area (part of fix for #77479 and needed
-	  for MDI window cursor handling)
-	* XplatUIX11.cs
-	  - DefWindowProc: Now handles the WM_SETCURSOR messages, setting
-	    the appropriate default cursors and also passing the message
-	    up the parent chain 
-	  - GetMessage: Now generating WM_NCHITTEST and WM_SETCURSOR even
-	    for non-client areas
-
-2006-02-15  Jackson Harper  <jackson at ximian.com>
-
-	* XplatUIWin32.cs: Since we fake MDI dont tell Windows that this
-	is a real MDI window
-
-2006-02-14  Alexander Olk  <alex.olk at googlemail.com>
-
-	* X11DesktopColors.cs: Instead of checking the desktop session
-	  string for "KDE" check if it starts with "KDE"
-
-2006-02-10  Jackson Harper  <jackson at ximian.com>
-
-	* XplatUIX11.cs: These should be unsigned (fixes crash on 32 bit
-	systems).
-
-2006-02-10  Alexander Olk  <ale