soc.2009.penguin.visualstudio: 10b3f93d: Contains a visual studio solution that c...

wade at soc.pidgin.im wade at soc.pidgin.im
Sun Aug 2 09:46:33 EDT 2009


-----------------------------------------------------------------
Revision: 10b3f93df6357cf0329e0bcb06af1c25c9624228
Ancestor: bf38b103d6725932646c88b1d818e113d15e834e
Author: wade at soc.pidgin.im
Date: 2009-08-02T13:42:50
Branch: im.pidgin.soc.2009.penguin.visualstudio
URL: http://d.pidgin.im/viewmtn/revision/info/10b3f93df6357cf0329e0bcb06af1c25c9624228

Deleted entries:
        libpurple/wrapper libpurple/wrapper/Account.cs
        libpurple/wrapper/Accountopt.cs libpurple/wrapper/Blist.cs
        libpurple/wrapper/Buddyicon.cs
        libpurple/wrapper/Certificate.cs libpurple/wrapper/Cipher.cs
        libpurple/wrapper/Circbuffer.cs libpurple/wrapper/Cmds.cs
        libpurple/wrapper/Config.cs libpurple/wrapper/Connection.cs
        libpurple/wrapper/Conversation.cs libpurple/wrapper/Core.cs
        libpurple/wrapper/Debug.cs libpurple/wrapper/Desktopitem.cs
        libpurple/wrapper/Dnsquery.cs libpurple/wrapper/Dnssrv.cs
        libpurple/wrapper/Eventloop.cs libpurple/wrapper/Ft.cs
        libpurple/wrapper/Idle.cs libpurple/wrapper/Imgstore.cs
        libpurple/wrapper/Log.cs libpurple/wrapper/Media.cs
        libpurple/wrapper/Mediamanager.cs libpurple/wrapper/Mime.cs
        libpurple/wrapper/NatPmp.cs libpurple/wrapper/Network.cs
        libpurple/wrapper/Notify.cs libpurple/wrapper/Ntlm.cs
        libpurple/wrapper/Plugin.cs libpurple/wrapper/Pluginpref.cs
        libpurple/wrapper/Pounce.cs libpurple/wrapper/Prefs.cs
        libpurple/wrapper/Privacy.cs libpurple/wrapper/Proxy.cs
        libpurple/wrapper/Prpl.cs libpurple/wrapper/PurpleAccount.cs
        libpurple/wrapper/PurpleAccountUiOps.cs
        libpurple/wrapper/PurpleAttentionType.cs
        libpurple/wrapper/PurpleBlistNode.cs
        libpurple/wrapper/PurpleBlistUiOps.cs
        libpurple/wrapper/PurpleBuddy.cs
        libpurple/wrapper/PurpleBuddyIconSpec.cs
        libpurple/wrapper/PurpleBuddyList.cs
        libpurple/wrapper/PurpleCertificate.cs
        libpurple/wrapper/PurpleCertificatePool.cs
        libpurple/wrapper/PurpleCertificateScheme.cs
        libpurple/wrapper/PurpleCertificateVerificationRequest.cs
        libpurple/wrapper/PurpleCertificateVerifier.cs
        libpurple/wrapper/PurpleChat.cs
        libpurple/wrapper/PurpleCipherOps.cs
        libpurple/wrapper/PurpleCircBuffer.cs
        libpurple/wrapper/PurpleClient.cs
        libpurple/wrapper/PurpleConnection.cs
        libpurple/wrapper/PurpleContact.cs
        libpurple/wrapper/PurpleConvChat.cs
        libpurple/wrapper/PurpleConvChatBuddy.cs
        libpurple/wrapper/PurpleConvIm.cs
        libpurple/wrapper/PurpleConvMessage.cs
        libpurple/wrapper/PurpleConversation.cs
        libpurple/wrapper/PurpleConversationUiOps.cs
        libpurple/wrapper/PurpleEventLoopUiOps.cs
        libpurple/wrapper/PurpleGroup.cs
        libpurple/wrapper/PurpleKeyValuePair.cs
        libpurple/wrapper/PurpleLog.cs
        libpurple/wrapper/PurpleLogCommonLoggerData.cs
        libpurple/wrapper/PurpleLogLogger.cs
        libpurple/wrapper/PurpleLogSet.cs
        libpurple/wrapper/PurpleMenuAction.cs
        libpurple/wrapper/PurplePlugin.cs
        libpurple/wrapper/PurplePluginAction.cs
        libpurple/wrapper/PurplePluginInfo.cs
        libpurple/wrapper/PurplePluginLoaderInfo.cs
        libpurple/wrapper/PurplePluginProtocolInfo.cs
        libpurple/wrapper/PurplePluginUiInfo.cs
        libpurple/wrapper/PurplePounce.cs
        libpurple/wrapper/PurpleRequestField.cs
        libpurple/wrapper/PurpleRoomlist.cs
        libpurple/wrapper/PurpleRoomlistField.cs
        libpurple/wrapper/PurpleRoomlistRoom.cs
        libpurple/wrapper/PurpleRoomlistUiOps.cs
        libpurple/wrapper/PurpleSoundTheme.cs
        libpurple/wrapper/PurpleSoundThemeClass.cs
        libpurple/wrapper/PurpleSoundThemeLoader.cs
        libpurple/wrapper/PurpleSoundThemeLoaderClass.cs
        libpurple/wrapper/PurpleSoundUiOps.cs
        libpurple/wrapper/PurpleSrvResponse.cs
        libpurple/wrapper/PurpleSslConnection.cs
        libpurple/wrapper/PurpleStunNatDiscovery.cs
        libpurple/wrapper/PurpleTheme.cs
        libpurple/wrapper/PurpleThemeClass.cs
        libpurple/wrapper/PurpleThemeLoader.cs
        libpurple/wrapper/PurpleThemeLoaderClass.cs
        libpurple/wrapper/PurpleThemeManager.cs
        libpurple/wrapper/PurpleThemeManagerClass.cs
        libpurple/wrapper/PurpleWhiteboard.cs
        libpurple/wrapper/PurpleWhiteboardPrplOps.cs
        libpurple/wrapper/PurpleWhiteboardUiOps.cs
        libpurple/wrapper/PurpleWrapper.csproj
        libpurple/wrapper/PurpleXfer.cs libpurple/wrapper/Request.cs
        libpurple/wrapper/Roomlist.cs
        libpurple/wrapper/Savedstatuses.cs
        libpurple/wrapper/Server.cs libpurple/wrapper/Signals.cs
        libpurple/wrapper/Smiley.cs libpurple/wrapper/Sound.cs
        libpurple/wrapper/SoundTheme.cs
        libpurple/wrapper/SoundThemeLoader.cs
        libpurple/wrapper/Sslconn.cs libpurple/wrapper/Status.cs
        libpurple/wrapper/Stringref.cs libpurple/wrapper/Stun.cs
        libpurple/wrapper/Theme.cs libpurple/wrapper/ThemeLoader.cs
        libpurple/wrapper/ThemeManager.cs
        libpurple/wrapper/UnmanagedWrapper.cs
        libpurple/wrapper/Upnp.cs libpurple/wrapper/Util.cs
        libpurple/wrapper/Value.cs libpurple/wrapper/Version.cs
        libpurple/wrapper/Whiteboard.cs
        libpurple/wrapper/XMLNodeClass.cs
        libpurple/wrapper/generator
        libpurple/wrapper/generator/CArgument.cs
        libpurple/wrapper/generator/CEnum.cs
        libpurple/wrapper/generator/CFile.cs
        libpurple/wrapper/generator/CFunction.cs
        libpurple/wrapper/generator/CNamed.cs
        libpurple/wrapper/generator/CStruct.cs
        libpurple/wrapper/generator/CTyped.cs
        libpurple/wrapper/generator/Logger.cs
        libpurple/wrapper/generator/Program.cs
        libpurple/wrapper/generator/Scripts.csproj
        libpurple/wrapper/generator/UnableToCreateWrapperException.cs
        libpurple/wrapper/generator/WrapperGenerator.cs
        libpurple/wrapper/proto_chat_entry.cs
        libpurple/wrapper/xmlnode.cs
Added files:
        libpurple/win32/vs9/libpurple.vcproj
        libpurple/wrapper/Account.cs libpurple/wrapper/Accountopt.cs
        libpurple/wrapper/Blist.cs libpurple/wrapper/Buddyicon.cs
        libpurple/wrapper/Certificate.cs libpurple/wrapper/Cipher.cs
        libpurple/wrapper/Circbuffer.cs libpurple/wrapper/Cmds.cs
        libpurple/wrapper/Config.cs libpurple/wrapper/Connection.cs
        libpurple/wrapper/Conversation.cs libpurple/wrapper/Core.cs
        libpurple/wrapper/Debug.cs libpurple/wrapper/Desktopitem.cs
        libpurple/wrapper/Dnsquery.cs libpurple/wrapper/Dnssrv.cs
        libpurple/wrapper/Eventloop.cs libpurple/wrapper/Ft.cs
        libpurple/wrapper/Idle.cs libpurple/wrapper/Imgstore.cs
        libpurple/wrapper/Log.cs libpurple/wrapper/Media.cs
        libpurple/wrapper/Mediamanager.cs libpurple/wrapper/Mime.cs
        libpurple/wrapper/NatPmp.cs libpurple/wrapper/Network.cs
        libpurple/wrapper/Notify.cs libpurple/wrapper/Ntlm.cs
        libpurple/wrapper/Plugin.cs libpurple/wrapper/Pluginpref.cs
        libpurple/wrapper/Pounce.cs libpurple/wrapper/Prefs.cs
        libpurple/wrapper/Privacy.cs libpurple/wrapper/Proxy.cs
        libpurple/wrapper/Prpl.cs libpurple/wrapper/PurpleAccount.cs
        libpurple/wrapper/PurpleAccountUiOps.cs
        libpurple/wrapper/PurpleAttentionType.cs
        libpurple/wrapper/PurpleBlistNode.cs
        libpurple/wrapper/PurpleBlistUiOps.cs
        libpurple/wrapper/PurpleBuddy.cs
        libpurple/wrapper/PurpleBuddyIconSpec.cs
        libpurple/wrapper/PurpleBuddyList.cs
        libpurple/wrapper/PurpleCertificate.cs
        libpurple/wrapper/PurpleCertificatePool.cs
        libpurple/wrapper/PurpleCertificateScheme.cs
        libpurple/wrapper/PurpleCertificateVerificationRequest.cs
        libpurple/wrapper/PurpleCertificateVerifier.cs
        libpurple/wrapper/PurpleChat.cs
        libpurple/wrapper/PurpleCipherOps.cs
        libpurple/wrapper/PurpleCircBuffer.cs
        libpurple/wrapper/PurpleClient.cs
        libpurple/wrapper/PurpleConnection.cs
        libpurple/wrapper/PurpleContact.cs
        libpurple/wrapper/PurpleConvChat.cs
        libpurple/wrapper/PurpleConvChatBuddy.cs
        libpurple/wrapper/PurpleConvIm.cs
        libpurple/wrapper/PurpleConvMessage.cs
        libpurple/wrapper/PurpleConversation.cs
        libpurple/wrapper/PurpleConversationUiOps.cs
        libpurple/wrapper/PurpleEventLoopUiOps.cs
        libpurple/wrapper/PurpleGroup.cs
        libpurple/wrapper/PurpleKeyValuePair.cs
        libpurple/wrapper/PurpleLog.cs
        libpurple/wrapper/PurpleLogCommonLoggerData.cs
        libpurple/wrapper/PurpleLogLogger.cs
        libpurple/wrapper/PurpleLogSet.cs
        libpurple/wrapper/PurpleMenuAction.cs
        libpurple/wrapper/PurplePlugin.cs
        libpurple/wrapper/PurplePluginAction.cs
        libpurple/wrapper/PurplePluginInfo.cs
        libpurple/wrapper/PurplePluginLoaderInfo.cs
        libpurple/wrapper/PurplePluginProtocolInfo.cs
        libpurple/wrapper/PurplePluginUiInfo.cs
        libpurple/wrapper/PurplePounce.cs
        libpurple/wrapper/PurpleRequestField.cs
        libpurple/wrapper/PurpleRoomlist.cs
        libpurple/wrapper/PurpleRoomlistField.cs
        libpurple/wrapper/PurpleRoomlistRoom.cs
        libpurple/wrapper/PurpleRoomlistUiOps.cs
        libpurple/wrapper/PurpleSoundTheme.cs
        libpurple/wrapper/PurpleSoundThemeClass.cs
        libpurple/wrapper/PurpleSoundThemeLoader.cs
        libpurple/wrapper/PurpleSoundThemeLoaderClass.cs
        libpurple/wrapper/PurpleSoundUiOps.cs
        libpurple/wrapper/PurpleSrvResponse.cs
        libpurple/wrapper/PurpleSslConnection.cs
        libpurple/wrapper/PurpleStunNatDiscovery.cs
        libpurple/wrapper/PurpleTheme.cs
        libpurple/wrapper/PurpleThemeClass.cs
        libpurple/wrapper/PurpleThemeLoader.cs
        libpurple/wrapper/PurpleThemeLoaderClass.cs
        libpurple/wrapper/PurpleThemeManager.cs
        libpurple/wrapper/PurpleThemeManagerClass.cs
        libpurple/wrapper/PurpleWhiteboard.cs
        libpurple/wrapper/PurpleWhiteboardPrplOps.cs
        libpurple/wrapper/PurpleWhiteboardUiOps.cs
        libpurple/wrapper/PurpleWrapper.csproj
        libpurple/wrapper/PurpleXfer.cs libpurple/wrapper/Request.cs
        libpurple/wrapper/Roomlist.cs
        libpurple/wrapper/Savedstatuses.cs
        libpurple/wrapper/Server.cs libpurple/wrapper/Signals.cs
        libpurple/wrapper/Smiley.cs libpurple/wrapper/Sound.cs
        libpurple/wrapper/SoundTheme.cs
        libpurple/wrapper/SoundThemeLoader.cs
        libpurple/wrapper/Sslconn.cs libpurple/wrapper/Status.cs
        libpurple/wrapper/Stringref.cs libpurple/wrapper/Stun.cs
        libpurple/wrapper/Theme.cs libpurple/wrapper/ThemeLoader.cs
        libpurple/wrapper/ThemeManager.cs
        libpurple/wrapper/UnmanagedWrapper.cs
        libpurple/wrapper/Upnp.cs libpurple/wrapper/Util.cs
        libpurple/wrapper/Value.cs libpurple/wrapper/Version.cs
        libpurple/wrapper/Whiteboard.cs
        libpurple/wrapper/XMLNodeClass.cs
        libpurple/wrapper/generator/CArgument.cs
        libpurple/wrapper/generator/CFunction.cs
        libpurple/wrapper/generator/CNamed.cs
        libpurple/wrapper/generator/CTyped.cs
        libpurple/wrapper/generator/Logger.cs
        libpurple/wrapper/generator/Program.cs
        libpurple/wrapper/generator/Properties/AssemblyInfo.cs
        libpurple/wrapper/generator/PurpleTranslations.cs
        libpurple/wrapper/generator/Scripts.csproj
        libpurple/wrapper/generator/Scripts.sln
        libpurple/wrapper/generator/Scripts.suo
        libpurple/wrapper/generator/WrapperGenerator.cs
        libpurple/wrapper/proto_chat_entry.cs
        libpurple/wrapper/xmlnode.cs penguin/GLib/README.txt
        penguin/Penguin/Penguin.csproj penguin/Penguin/Program.cs
        penguin/Penguin/Properties/AssemblyInfo.cs
        penguin/Penguin/Properties/Resources.Designer.cs
        penguin/Penguin/Properties/Resources.resx
        penguin/Penguin/Properties/Settings.Designer.cs
        penguin/Penguin/Properties/Settings.settings
        penguin/Penguin/WelcomeForm.Designer.cs
        penguin/Penguin/WelcomeForm.cs penguin/Penguin.sln
        penguin/README.txt
Added directories:
        libpurple/win32/vs9 libpurple/wrapper
        libpurple/wrapper/generator
        libpurple/wrapper/generator/Properties penguin penguin/GLib
        penguin/Penguin penguin/Penguin/Properties
Modified files:
        libpurple/config.h
Modified attrs:
        libpurple/wrapper/generator/Scripts.suo

ChangeLog: 

Contains a visual studio solution that completely, natively compiles libpurple in Visual Studio. However, it currently does not link libxml2 correctly. There is a working version locally with modified libxml2 source, but the goal is to have a build with a clean or nearly clean copy of the libxml2 source.


-------------- next part --------------
============================================================
--- libpurple/win32/vs9/libpurple.vcproj	83822b240c47011e2d2be43ca39ff2105eb58396
+++ libpurple/win32/vs9/libpurple.vcproj	83822b240c47011e2d2be43ca39ff2105eb58396
@@ -0,0 +1,461 @@
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+	ProjectType="Visual C++"
+	Version="9.00"
+	Name="libpurple"
+	ProjectGUID="{9F347485-0492-4473-B597-0444687EEE3F}"
+	RootNamespace="libpurple"
+	AssemblyReferenceSearchPaths="&quot;..\..\..\penguin\libxml&quot;"
+	TargetFrameworkVersion="196613"
+	>
+	<Platforms>
+		<Platform
+			Name="Win32"
+		/>
+	</Platforms>
+	<ToolFiles>
+	</ToolFiles>
+	<Configurations>
+		<Configuration
+			Name="Debug|Win32"
+			ConfigurationType="2"
+			InheritedPropertySheets="$(SolutionDir)vsprops\$(ConfigurationName)-$(PlatformName).vsprops"
+			CharacterSet="2"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				Optimization="0"
+				AdditionalIncludeDirectories="&quot;$(IntDir)\..\..\include\glib-2.0&quot;;&quot;$(IntDir)\..\..\lib\glib-2.0\include&quot;;&quot;$(ProjectDir)..\..&quot;;&quot;$(ProjectDir)..\..\win32&quot;;&quot;$(SolutionDir)&quot;"
+				PreprocessorDefinitions="HAVE_CONFIG_H"
+				MinimalRebuild="true"
+				BasicRuntimeChecks="3"
+				RuntimeLibrary="3"
+				WarningLevel="3"
+				DebugInformationFormat="4"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalDependencies="Ws2_32.lib"
+				OutputFile="$(OutDir)\bin\$(ProjectName).dll"
+				ModuleDefinitionFile=""
+				GenerateDebugInformation="true"
+				TargetMachine="1"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+		<Configuration
+			Name="Release|Win32"
+			OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+			IntermediateDirectory="$(ConfigurationName)"
+			ConfigurationType="1"
+			CharacterSet="2"
+			WholeProgramOptimization="1"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				Optimization="2"
+				EnableIntrinsicFunctions="true"
+				RuntimeLibrary="2"
+				EnableFunctionLevelLinking="true"
+				WarningLevel="3"
+				DebugInformationFormat="3"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				GenerateDebugInformation="true"
+				OptimizeReferences="2"
+				EnableCOMDATFolding="2"
+				TargetMachine="1"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+	</Configurations>
+	<References>
+		<ProjectReference
+			ReferencedProjectIdentifier="{12BCA020-EABF-429E-876A-A476BC9C10C0}"
+			CopyLocal="false"
+			RelativePathToProject=".\GLib\glib\win32\oa\libglib.vcproj"
+		/>
+		<ProjectReference
+			ReferencedProjectIdentifier="{4214047C-F5C1-40B3-8369-5DCED8C32770}"
+			CopyLocal="false"
+			RelativePathToProject=".\GLib\glib\win32\oa\libgmodule.vcproj"
+		/>
+		<ProjectReference
+			ReferencedProjectIdentifier="{C8AFB8C3-FFFD-460F-BC13-9AC25D7B117C}"
+			CopyLocal="false"
+			RelativePathToProject=".\GLib\glib\win32\oa\libgthread.vcproj"
+		/>
+		<ProjectReference
+			ReferencedProjectIdentifier="{F172EFFC-E30F-4593-809E-DB2024B1E753}"
+			CopyLocal="false"
+			RelativePathToProject=".\GLib\glib\win32\oa\libgobject.vcproj"
+		/>
+	</References>
+	<Files>
+		<Filter
+			Name="Source Files"
+			Filter="cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx"
+			UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"
+			>
+			<File
+				RelativePath="..\..\account.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\accountopt.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\blist.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\buddyicon.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\certificate.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\cipher.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\circbuffer.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\cmds.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\connection.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\conversation.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\core.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\debug.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\dnsquery.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\dnssrv.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\eventloop.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\ft.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\idle.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\imgstore.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\log.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\media.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\mediamanager.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\mime.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\nat-pmp.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\network.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\notify.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\ntlm.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\plugin.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\pluginpref.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\pounce.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\prefs.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\privacy.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\proxy.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\prpl.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\request.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\roomlist.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\savedstatuses.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\server.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\signals.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\smiley.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\sound-theme-loader.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\sound-theme.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\sound.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\sslconn.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\status.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\stringref.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\stun.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\theme-loader.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\theme-manager.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\theme.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\upnp.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\util.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\value.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\version.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\whiteboard.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\xmlnode.c"
+				>
+			</File>
+			<Filter
+				Name="win32"
+				>
+				<File
+					RelativePath="..\..\win32\giowin32.c"
+					>
+				</File>
+				<File
+					RelativePath="..\..\win32\libc_interface.c"
+					>
+				</File>
+				<File
+					RelativePath="..\..\win32\win32dep.c"
+					>
+				</File>
+			</Filter>
+		</Filter>
+		<Filter
+			Name="Header Files"
+			Filter="h;hpp;hxx;hm;inl;inc;xsd"
+			UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}"
+			>
+			<Filter
+				Name="win32"
+				>
+				<File
+					RelativePath="..\..\win32\libc_interface.h"
+					>
+				</File>
+				<File
+					RelativePath="..\..\win32\libc_internal.h"
+					>
+				</File>
+				<File
+					RelativePath="..\..\win32\win32dep.h"
+					>
+				</File>
+				<File
+					RelativePath="..\..\win32\wpurpleerror.h"
+					>
+				</File>
+			</Filter>
+		</Filter>
+		<Filter
+			Name="Resource Files"
+			Filter="rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav"
+			UniqueIdentifier="{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}"
+			>
+		</Filter>
+	</Files>
+	<Globals>
+	</Globals>
+</VisualStudioProject>
============================================================
--- libpurple/wrapper/Account.cs	0d38f3dc4287fa2798aad73f495689ff39c32730
+++ libpurple/wrapper/Account.cs	0d38f3dc4287fa2798aad73f495689ff39c32730
@@ -0,0 +1,1088 @@
+/* PurpleWrapper - A .NET (CLR) wrapper for libpurple
+ *
+ * Purple is the legal property of its developers, whose names are too numerous
+ * to list here.  Please refer to the COPYRIGHT file distributed with this
+ * source distribution.
+ *
+ * This program 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.
+ *
+ * This program 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 this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02111-1301  USA
+ */
+
+/*
+ * This file was auto-generated from the libpurple header files to provide a
+ * clean interface between .NET/CLR and the unmanaged C library libpurple.
+ *
+ * This is the second major commit of the code.
+ * Next things:
+ *  - A few of the .h files have anonymous parameter names (eg: void cat(int, int).
+ *    This program will need to assign these parameters names.
+ *  - Function pointers inside structs aren't translated correctly into C#.
+ *  - Two places there are specific-length arrays (eg: char hostname[256]). The parser
+ *    does not detect them as an array.
+ */
+
+using System;
+using System.Collections.Generic;
+using System.Runtime.InteropServices;
+
+namespace PurpleWrapper
+{
+
+	/*
+	 * File: account.h
+	 */
+	public class Account
+	{
+		public enum PurpleAccountRequestType
+		{
+			PURPLE_ACCOUNT_REQUEST_AUTHORIZATION = 0
+		};
+
+		public delegate bool PurpleFilterAccountFunc(IntPtr account);
+		public delegate void PurpleAccountRequestAuthorizationCb(IntPtr _PurpleWrapper_arg0);
+		public delegate void PurpleAccountRegistrationCb(IntPtr account, bool succeeded, IntPtr user_data);
+		public delegate void PurpleAccountUnregistrationCb(IntPtr account, bool succeeded, IntPtr user_data);
+
+		/*
+		 * Function Name: purple_account_new
+		 * Function Type: PurpleAccount *
+		 * Function RawType: PurpleAccount
+		 * Function Category: PointerToKnownStruct
+		 */
+		/*
+		 * PurpleAccount * purple_account_new(char * username, char * protocol_id)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern IntPtr purple_account_new(string username, string protocol_id);
+
+		public static PurpleAccount New(string username, string protocol_id)
+		{
+			return new PurpleAccount(purple_account_new(username, protocol_id));
+		}
+
+		/*
+		 * Function Name: purple_account_destroy
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_account_destroy(PurpleAccount * account)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_account_destroy(IntPtr account);
+
+		public static void Destroy(PurpleAccount account)
+		{
+			purple_account_destroy(account.Reference);
+		}
+
+		/*
+		 * Function Name: purple_account_connect
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_account_connect(PurpleAccount * account)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_account_connect(IntPtr account);
+
+		public static void Connect(PurpleAccount account)
+		{
+			purple_account_connect(account.Reference);
+		}
+
+		/*
+		 * Function Name: purple_account_set_register_callback
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_account_set_register_callback(PurpleAccount * account, PurpleAccountRegistrationCb cb, void * user_data)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_account_set_register_callback(IntPtr account, IntPtr cb, IntPtr user_data);
+
+		public static void SetRegisterCallback(PurpleAccount account, Account.PurpleAccountRegistrationCb cb, IntPtr user_data)
+		{
+			/* Unable to process cb, a KnownFunctionPointer. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_account_register
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_account_register(PurpleAccount * account)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_account_register(IntPtr account);
+
+		public static void Register(PurpleAccount account)
+		{
+			purple_account_register(account.Reference);
+		}
+
+		/*
+		 * Function Name: purple_account_unregister
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_account_unregister(PurpleAccount * account, PurpleAccountUnregistrationCb cb, void * user_data)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_account_unregister(IntPtr account, IntPtr cb, IntPtr user_data);
+
+		public static void Unregister(PurpleAccount account, Account.PurpleAccountUnregistrationCb cb, IntPtr user_data)
+		{
+			/* Unable to process cb, a KnownFunctionPointer. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_account_disconnect
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_account_disconnect(PurpleAccount * account)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_account_disconnect(IntPtr account);
+
+		public static void Disconnect(PurpleAccount account)
+		{
+			purple_account_disconnect(account.Reference);
+		}
+
+		/*
+		 * Function Name: purple_account_request_close_with_account
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_account_request_close_with_account(PurpleAccount * account)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_account_request_close_with_account(IntPtr account);
+
+		public static void RequestCloseWithAccount(PurpleAccount account)
+		{
+			purple_account_request_close_with_account(account.Reference);
+		}
+
+		/*
+		 * Function Name: purple_account_request_close
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_account_request_close(void * ui_handle)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_account_request_close(IntPtr ui_handle);
+
+		public static void RequestClose(IntPtr ui_handle)
+		{
+			purple_account_request_close(ui_handle);
+		}
+
+		/*
+		 * Function Name: purple_account_request_change_password
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_account_request_change_password(PurpleAccount * account)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_account_request_change_password(IntPtr account);
+
+		public static void RequestChangePassword(PurpleAccount account)
+		{
+			purple_account_request_change_password(account.Reference);
+		}
+
+		/*
+		 * Function Name: purple_account_request_change_user_info
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_account_request_change_user_info(PurpleAccount * account)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_account_request_change_user_info(IntPtr account);
+
+		public static void RequestChangeUserInfo(PurpleAccount account)
+		{
+			purple_account_request_change_user_info(account.Reference);
+		}
+
+		/*
+		 * Function Name: purple_account_set_username
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_account_set_username(PurpleAccount * account, char * username)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_account_set_username(IntPtr account, string username);
+
+		public static void SetUsername(PurpleAccount account, string username)
+		{
+			purple_account_set_username(account.Reference, username);
+		}
+
+		/*
+		 * Function Name: purple_account_set_password
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_account_set_password(PurpleAccount * account, char * password)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_account_set_password(IntPtr account, string password);
+
+		public static void SetPassword(PurpleAccount account, string password)
+		{
+			purple_account_set_password(account.Reference, password);
+		}
+
+		/*
+		 * Function Name: purple_account_set_alias
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_account_set_alias(PurpleAccount * account, char * alias)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_account_set_alias(IntPtr account, string alias);
+
+		public static void SetAlias(PurpleAccount account, string alias)
+		{
+			purple_account_set_alias(account.Reference, alias);
+		}
+
+		/*
+		 * Function Name: purple_account_set_user_info
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_account_set_user_info(PurpleAccount * account, char * user_info)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_account_set_user_info(IntPtr account, string user_info);
+
+		public static void SetUserInfo(PurpleAccount account, string user_info)
+		{
+			purple_account_set_user_info(account.Reference, user_info);
+		}
+
+		/*
+		 * Function Name: purple_account_set_buddy_icon_path
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_account_set_buddy_icon_path(PurpleAccount * account, char * path)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_account_set_buddy_icon_path(IntPtr account, string path);
+
+		public static void SetBuddyIconPath(PurpleAccount account, string path)
+		{
+			purple_account_set_buddy_icon_path(account.Reference, path);
+		}
+
+		/*
+		 * Function Name: purple_account_set_connection
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_account_set_connection(PurpleAccount * account, PurpleConnection * gc)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_account_set_connection(IntPtr account, IntPtr gc);
+
+		public static void SetConnection(PurpleAccount account, PurpleConnection gc)
+		{
+			purple_account_set_connection(account.Reference, gc.Reference);
+		}
+
+		/*
+		 * Function Name: purple_account_set_remember_password
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_account_set_remember_password(PurpleAccount * account, gboolean value)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_account_set_remember_password(IntPtr account, bool value);
+
+		public static void SetRememberPassword(PurpleAccount account, bool value)
+		{
+			purple_account_set_remember_password(account.Reference, value);
+		}
+
+		/*
+		 * Function Name: purple_account_set_check_mail
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_account_set_check_mail(PurpleAccount * account, gboolean value)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_account_set_check_mail(IntPtr account, bool value);
+
+		public static void SetCheckMail(PurpleAccount account, bool value)
+		{
+			purple_account_set_check_mail(account.Reference, value);
+		}
+
+		/*
+		 * Function Name: purple_account_set_proxy_info
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_account_set_proxy_info(PurpleAccount * account, PurpleProxyInfo * info)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_account_set_proxy_info(IntPtr account, IntPtr info);
+
+		public static void SetProxyInfo(PurpleAccount account, /* Resolved as PointerToUnknownStruct to PurpleProxyInfo */ IntPtr info)
+		{
+			/* Unable to process info, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_account_set_status_types
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_account_set_status_types(PurpleAccount * account, GList * status_types)
+		 * 
+		 * Could not generate a wrapper for purple_account_set_status_types in file "account.h".
+		 * Message: Unable to provide a type for GList as no function information was provided in code.
+		 */
+
+		/*
+		 * Function Name: purple_account_clear_settings
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_account_clear_settings(PurpleAccount * account)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_account_clear_settings(IntPtr account);
+
+		public static void ClearSettings(PurpleAccount account)
+		{
+			purple_account_clear_settings(account.Reference);
+		}
+
+		/*
+		 * Function Name: purple_account_set_int
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_account_set_int(PurpleAccount * account, char * name, int value)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_account_set_int(IntPtr account, string name, int value);
+
+		public static void SetInt(PurpleAccount account, string name, int value)
+		{
+			purple_account_set_int(account.Reference, name, value);
+		}
+
+		/*
+		 * Function Name: purple_account_is_connected
+		 * Function Type: gboolean
+		 * Function RawType: gboolean
+		 * Function Category: Native
+		 */
+		/*
+		 * gboolean purple_account_is_connected(PurpleAccount * account)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern bool purple_account_is_connected(IntPtr account);
+
+		public static bool IsConnected(PurpleAccount account)
+		{
+			return purple_account_is_connected(account.Reference);
+		}
+
+		/*
+		 * Function Name: purple_account_is_connecting
+		 * Function Type: gboolean
+		 * Function RawType: gboolean
+		 * Function Category: Native
+		 */
+		/*
+		 * gboolean purple_account_is_connecting(PurpleAccount * account)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern bool purple_account_is_connecting(IntPtr account);
+
+		public static bool IsConnecting(PurpleAccount account)
+		{
+			return purple_account_is_connecting(account.Reference);
+		}
+
+		/*
+		 * Function Name: purple_account_is_disconnected
+		 * Function Type: gboolean
+		 * Function RawType: gboolean
+		 * Function Category: Native
+		 */
+		/*
+		 * gboolean purple_account_is_disconnected(PurpleAccount * account)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern bool purple_account_is_disconnected(IntPtr account);
+
+		public static bool IsDisconnected(PurpleAccount account)
+		{
+			return purple_account_is_disconnected(account.Reference);
+		}
+
+		/*
+		 * Function Name: purple_account_get_username
+		 * Function Type: char *
+		 * Function RawType: char
+		 * Function Category: Native
+		 */
+		/*
+		 * char * purple_account_get_username(PurpleAccount * account)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern string purple_account_get_username(IntPtr account);
+
+		public static string GetUsername(PurpleAccount account)
+		{
+			return purple_account_get_username(account.Reference);
+		}
+
+		/*
+		 * Function Name: purple_account_get_password
+		 * Function Type: char *
+		 * Function RawType: char
+		 * Function Category: Native
+		 */
+		/*
+		 * char * purple_account_get_password(PurpleAccount * account)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern string purple_account_get_password(IntPtr account);
+
+		public static string GetPassword(PurpleAccount account)
+		{
+			return purple_account_get_password(account.Reference);
+		}
+
+		/*
+		 * Function Name: purple_account_get_alias
+		 * Function Type: char *
+		 * Function RawType: char
+		 * Function Category: Native
+		 */
+		/*
+		 * char * purple_account_get_alias(PurpleAccount * account)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern string purple_account_get_alias(IntPtr account);
+
+		public static string GetAlias(PurpleAccount account)
+		{
+			return purple_account_get_alias(account.Reference);
+		}
+
+		/*
+		 * Function Name: purple_account_get_user_info
+		 * Function Type: char *
+		 * Function RawType: char
+		 * Function Category: Native
+		 */
+		/*
+		 * char * purple_account_get_user_info(PurpleAccount * account)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern string purple_account_get_user_info(IntPtr account);
+
+		public static string GetUserInfo(PurpleAccount account)
+		{
+			return purple_account_get_user_info(account.Reference);
+		}
+
+		/*
+		 * Function Name: purple_account_get_buddy_icon_path
+		 * Function Type: char *
+		 * Function RawType: char
+		 * Function Category: Native
+		 */
+		/*
+		 * char * purple_account_get_buddy_icon_path(PurpleAccount * account)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern string purple_account_get_buddy_icon_path(IntPtr account);
+
+		public static string GetBuddyIconPath(PurpleAccount account)
+		{
+			return purple_account_get_buddy_icon_path(account.Reference);
+		}
+
+		/*
+		 * Function Name: purple_account_get_protocol_id
+		 * Function Type: char *
+		 * Function RawType: char
+		 * Function Category: Native
+		 */
+		/*
+		 * char * purple_account_get_protocol_id(PurpleAccount * account)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern string purple_account_get_protocol_id(IntPtr account);
+
+		public static string GetProtocolId(PurpleAccount account)
+		{
+			return purple_account_get_protocol_id(account.Reference);
+		}
+
+		/*
+		 * Function Name: purple_account_get_protocol_name
+		 * Function Type: char *
+		 * Function RawType: char
+		 * Function Category: Native
+		 */
+		/*
+		 * char * purple_account_get_protocol_name(PurpleAccount * account)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern string purple_account_get_protocol_name(IntPtr account);
+
+		public static string GetProtocolName(PurpleAccount account)
+		{
+			return purple_account_get_protocol_name(account.Reference);
+		}
+
+		/*
+		 * Function Name: purple_account_get_connection
+		 * Function Type: PurpleConnection *
+		 * Function RawType: PurpleConnection
+		 * Function Category: PointerToKnownStruct
+		 */
+		/*
+		 * PurpleConnection * purple_account_get_connection(PurpleAccount * account)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern IntPtr purple_account_get_connection(IntPtr account);
+
+		public static PurpleConnection GetConnection(PurpleAccount account)
+		{
+			return new PurpleConnection(purple_account_get_connection(account.Reference));
+		}
+
+		/*
+		 * Function Name: purple_account_get_remember_password
+		 * Function Type: gboolean
+		 * Function RawType: gboolean
+		 * Function Category: Native
+		 */
+		/*
+		 * gboolean purple_account_get_remember_password(PurpleAccount * account)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern bool purple_account_get_remember_password(IntPtr account);
+
+		public static bool GetRememberPassword(PurpleAccount account)
+		{
+			return purple_account_get_remember_password(account.Reference);
+		}
+
+		/*
+		 * Function Name: purple_account_get_check_mail
+		 * Function Type: gboolean
+		 * Function RawType: gboolean
+		 * Function Category: Native
+		 */
+		/*
+		 * gboolean purple_account_get_check_mail(PurpleAccount * account)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern bool purple_account_get_check_mail(IntPtr account);
+
+		public static bool GetCheckMail(PurpleAccount account)
+		{
+			return purple_account_get_check_mail(account.Reference);
+		}
+
+		/*
+		 * Function Name: purple_account_get_proxy_info
+		 * Function Type: PurpleProxyInfo *
+		 * Function RawType: PurpleProxyInfo
+		 * Function Category: PointerToUnknownStruct
+		 */
+		/*
+		 * PurpleProxyInfo * purple_account_get_proxy_info(PurpleAccount * account)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern IntPtr purple_account_get_proxy_info(IntPtr account);
+
+		public static /* Resolved as PointerToUnknownStruct to PurpleProxyInfo */ IntPtr GetProxyInfo(PurpleAccount account)
+		{
+			/* Unable to process the return value of purple_account_get_proxy_info, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_account_get_active_status
+		 * Function Type: PurpleStatus *
+		 * Function RawType: PurpleStatus
+		 * Function Category: PointerToUnknownStruct
+		 */
+		/*
+		 * PurpleStatus * purple_account_get_active_status(PurpleAccount * account)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern IntPtr purple_account_get_active_status(IntPtr account);
+
+		public static /* Resolved as PointerToUnknownStruct to PurpleStatus */ IntPtr GetActiveStatus(PurpleAccount account)
+		{
+			/* Unable to process the return value of purple_account_get_active_status, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_account_get_presence
+		 * Function Type: PurplePresence *
+		 * Function RawType: PurplePresence
+		 * Function Category: PointerToUnknownStruct
+		 */
+		/*
+		 * PurplePresence * purple_account_get_presence(PurpleAccount * account)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern IntPtr purple_account_get_presence(IntPtr account);
+
+		public static /* Resolved as PointerToUnknownStruct to PurplePresence */ IntPtr GetPresence(PurpleAccount account)
+		{
+			/* Unable to process the return value of purple_account_get_presence, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_account_get_status_types
+		 * Function Type: GList *
+		 * Function RawType: GList
+		 * Function Category: PointerToGList
+		 */
+		/*
+		 * GList * purple_account_get_status_types(PurpleAccount * account)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern IntPtr purple_account_get_status_types(IntPtr account);
+
+		public static IList<string> GetStatusTypes(PurpleAccount account)
+		{
+			/* Unable to process the return value of purple_account_get_status_types, a PointerToGList. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_account_get_log
+		 * Function Type: PurpleLog *
+		 * Function RawType: PurpleLog
+		 * Function Category: PointerToKnownStruct
+		 */
+		/*
+		 * PurpleLog * purple_account_get_log(PurpleAccount * account, gboolean create)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern IntPtr purple_account_get_log(IntPtr account, bool create);
+
+		public static PurpleLog GetLog(PurpleAccount account, bool create)
+		{
+			return new PurpleLog(purple_account_get_log(account.Reference, create));
+		}
+
+		/*
+		 * Function Name: purple_account_destroy_log
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_account_destroy_log(PurpleAccount * account)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_account_destroy_log(IntPtr account);
+
+		public static void DestroyLog(PurpleAccount account)
+		{
+			purple_account_destroy_log(account.Reference);
+		}
+
+		/*
+		 * Function Name: purple_account_add_buddy
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_account_add_buddy(PurpleAccount * account, PurpleBuddy * buddy)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_account_add_buddy(IntPtr account, IntPtr buddy);
+
+		public static void AddBuddy(PurpleAccount account, PurpleBuddy buddy)
+		{
+			purple_account_add_buddy(account.Reference, buddy.Reference);
+		}
+
+		/*
+		 * Function Name: purple_account_add_buddies
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_account_add_buddies(PurpleAccount * account, GList * buddies)
+		 * 
+		 * Could not generate a wrapper for purple_account_add_buddies in file "account.h".
+		 * Message: Unable to provide a type for GList as no function information was provided in code.
+		 */
+
+		/*
+		 * Function Name: purple_account_remove_group
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_account_remove_group(PurpleAccount * account, PurpleGroup * group)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_account_remove_group(IntPtr account, IntPtr group);
+
+		public static void RemoveGroup(PurpleAccount account, PurpleGroup group)
+		{
+			purple_account_remove_group(account.Reference, group.Reference);
+		}
+
+		/*
+		 * Function Name: purple_account_supports_offline_message
+		 * Function Type: gboolean
+		 * Function RawType: gboolean
+		 * Function Category: Native
+		 */
+		/*
+		 * gboolean purple_account_supports_offline_message(PurpleAccount * account, PurpleBuddy * buddy)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern bool purple_account_supports_offline_message(IntPtr account, IntPtr buddy);
+
+		public static bool SupportsOfflineMessage(PurpleAccount account, PurpleBuddy buddy)
+		{
+			return purple_account_supports_offline_message(account.Reference, buddy.Reference);
+		}
+
+		/*
+		 * Function Name: purple_account_get_current_error
+		 * Function Type: PurpleConnectionErrorInfo *
+		 * Function RawType: PurpleConnectionErrorInfo
+		 * Function Category: PointerToUnknownStruct
+		 */
+		/*
+		 * PurpleConnectionErrorInfo * purple_account_get_current_error(PurpleAccount * account)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern IntPtr purple_account_get_current_error(IntPtr account);
+
+		public static /* Resolved as PointerToUnknownStruct to PurpleConnectionErrorInfo */ IntPtr GetCurrentError(PurpleAccount account)
+		{
+			/* Unable to process the return value of purple_account_get_current_error, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_account_clear_current_error
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_account_clear_current_error(PurpleAccount * account)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_account_clear_current_error(IntPtr account);
+
+		public static void ClearCurrentError(PurpleAccount account)
+		{
+			purple_account_clear_current_error(account.Reference);
+		}
+
+		/*
+		 * Function Name: purple_accounts_add
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_accounts_add(PurpleAccount * account)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_accounts_add(IntPtr account);
+
+		public static void AccountsAdd(PurpleAccount account)
+		{
+			purple_accounts_add(account.Reference);
+		}
+
+		/*
+		 * Function Name: purple_accounts_remove
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_accounts_remove(PurpleAccount * account)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_accounts_remove(IntPtr account);
+
+		public static void AccountsRemove(PurpleAccount account)
+		{
+			purple_accounts_remove(account.Reference);
+		}
+
+		/*
+		 * Function Name: purple_accounts_delete
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_accounts_delete(PurpleAccount * account)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_accounts_delete(IntPtr account);
+
+		public static void AccountsDelete(PurpleAccount account)
+		{
+			purple_accounts_delete(account.Reference);
+		}
+
+		/*
+		 * Function Name: purple_accounts_reorder
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_accounts_reorder(PurpleAccount * account, gint new_index)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_accounts_reorder(IntPtr account, int new_index);
+
+		public static void AccountsReorder(PurpleAccount account, int new_index)
+		{
+			purple_accounts_reorder(account.Reference, new_index);
+		}
+
+		/*
+		 * Function Name: purple_accounts_get_all
+		 * Function Type: GList *
+		 * Function RawType: GList
+		 * Function Category: PointerToGList
+		 */
+		/*
+		 * GList * purple_accounts_get_all()
+		 * 
+		 * Could not generate a wrapper for purple_accounts_get_all in file "account.h".
+		 * Message: Unknown inner-type of argument 0 of purple_accounts_get_all
+		 */
+
+		/*
+		 * Function Name: purple_accounts_get_all_active
+		 * Function Type: GList *
+		 * Function RawType: GList
+		 * Function Category: PointerToGList
+		 */
+		/*
+		 * GList * purple_accounts_get_all_active()
+		 * 
+		 * Could not generate a wrapper for purple_accounts_get_all_active in file "account.h".
+		 * Message: Unknown inner-type of argument 0 of purple_accounts_get_all_active
+		 */
+
+		/*
+		 * Function Name: purple_accounts_find
+		 * Function Type: PurpleAccount *
+		 * Function RawType: PurpleAccount
+		 * Function Category: PointerToKnownStruct
+		 */
+		/*
+		 * PurpleAccount * purple_accounts_find(char * name, char * protocol)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern IntPtr purple_accounts_find(string name, string protocol);
+
+		public static PurpleAccount AccountsFind(string name, string protocol)
+		{
+			return new PurpleAccount(purple_accounts_find(name, protocol));
+		}
+
+		/*
+		 * Function Name: purple_accounts_restore_current_statuses
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_accounts_restore_current_statuses()
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_accounts_restore_current_statuses();
+
+		public static void AccountsRestoreCurrentStatuses()
+		{
+			purple_accounts_restore_current_statuses();
+		}
+
+		/*
+		 * Function Name: purple_accounts_set_ui_ops
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_accounts_set_ui_ops(PurpleAccountUiOps * ops)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_accounts_set_ui_ops(IntPtr ops);
+
+		public static void AccountsSetUiOps(PurpleAccountUiOps ops)
+		{
+			purple_accounts_set_ui_ops(ops.Reference);
+		}
+
+		/*
+		 * Function Name: purple_accounts_get_ui_ops
+		 * Function Type: PurpleAccountUiOps *
+		 * Function RawType: PurpleAccountUiOps
+		 * Function Category: PointerToKnownStruct
+		 */
+		/*
+		 * PurpleAccountUiOps * purple_accounts_get_ui_ops()
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern IntPtr purple_accounts_get_ui_ops();
+
+		public static PurpleAccountUiOps AccountsGetUiOps()
+		{
+			return new PurpleAccountUiOps(purple_accounts_get_ui_ops());
+		}
+
+		/*
+		 * Function Name: purple_accounts_get_handle
+		 * Function Type: void *
+		 * Function RawType: void
+		 * Function Category: VoidPointer
+		 */
+		/*
+		 * void * purple_accounts_get_handle()
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern IntPtr purple_accounts_get_handle();
+
+		public static IntPtr AccountsGetHandle()
+		{
+			return purple_accounts_get_handle();
+		}
+
+		/*
+		 * Function Name: purple_accounts_init
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_accounts_init()
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_accounts_init();
+
+		public static void AccountsInit()
+		{
+			purple_accounts_init();
+		}
+
+		/*
+		 * Function Name: purple_accounts_uninit
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_accounts_uninit()
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_accounts_uninit();
+
+		public static void AccountsUninit()
+		{
+			purple_accounts_uninit();
+		}
+
+	}
+}
+
============================================================
--- libpurple/wrapper/Accountopt.cs	20f2d43ab0bbfa51c1eda5dcd17e4e55145246cb
+++ libpurple/wrapper/Accountopt.cs	20f2d43ab0bbfa51c1eda5dcd17e4e55145246cb
@@ -0,0 +1,310 @@
+/* PurpleWrapper - A .NET (CLR) wrapper for libpurple
+ *
+ * Purple is the legal property of its developers, whose names are too numerous
+ * to list here.  Please refer to the COPYRIGHT file distributed with this
+ * source distribution.
+ *
+ * This program 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.
+ *
+ * This program 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 this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02111-1301  USA
+ */
+
+/*
+ * This file was auto-generated from the libpurple header files to provide a
+ * clean interface between .NET/CLR and the unmanaged C library libpurple.
+ *
+ * This is the second major commit of the code.
+ * Next things:
+ *  - A few of the .h files have anonymous parameter names (eg: void cat(int, int).
+ *    This program will need to assign these parameters names.
+ *  - Function pointers inside structs aren't translated correctly into C#.
+ *  - Two places there are specific-length arrays (eg: char hostname[256]). The parser
+ *    does not detect them as an array.
+ */
+
+using System;
+using System.Collections.Generic;
+using System.Runtime.InteropServices;
+
+namespace PurpleWrapper
+{
+
+	/*
+	 * File: accountopt.h
+	 */
+	public class Accountopt
+	{
+
+		/*
+		 * Function Name: purple_account_option_destroy
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_account_option_destroy(PurpleAccountOption * option)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_account_option_destroy(IntPtr option);
+
+		public static void AccountOptionDestroy(/* Resolved as PointerToUnknownStruct to PurpleAccountOption */ IntPtr option)
+		{
+			/* Unable to process option, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_account_option_set_masked
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_account_option_set_masked(PurpleAccountOption * option, gboolean masked)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_account_option_set_masked(IntPtr option, bool masked);
+
+		public static void AccountOptionSetMasked(/* Resolved as PointerToUnknownStruct to PurpleAccountOption */ IntPtr option, bool masked)
+		{
+			/* Unable to process option, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_account_option_set_list
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_account_option_set_list(PurpleAccountOption * option, GList * values)
+		 * 
+		 * Could not generate a wrapper for purple_account_option_set_list in file "accountopt.h".
+		 * Message: Unable to provide a type for GList as no function information was provided in code.
+		 */
+
+		/*
+		 * Function Name: purple_account_option_get_type
+		 * Function Type: PurplePrefType
+		 * Function RawType: PurplePrefType
+		 * Function Category: KnownEnum
+		 */
+		/*
+		 * PurplePrefType purple_account_option_get_type(PurpleAccountOption * option)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern Prefs.PurplePrefType purple_account_option_get_type(IntPtr option);
+
+		public static Prefs.PurplePrefType AccountOptionGetType(/* Resolved as PointerToUnknownStruct to PurpleAccountOption */ IntPtr option)
+		{
+			/* Unable to process option, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_account_option_get_text
+		 * Function Type: char *
+		 * Function RawType: char
+		 * Function Category: Native
+		 */
+		/*
+		 * char * purple_account_option_get_text(PurpleAccountOption * option)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern string purple_account_option_get_text(IntPtr option);
+
+		public static string AccountOptionGetText(/* Resolved as PointerToUnknownStruct to PurpleAccountOption */ IntPtr option)
+		{
+			/* Unable to process option, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_account_option_get_setting
+		 * Function Type: char *
+		 * Function RawType: char
+		 * Function Category: Native
+		 */
+		/*
+		 * char * purple_account_option_get_setting(PurpleAccountOption * option)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern string purple_account_option_get_setting(IntPtr option);
+
+		public static string AccountOptionGetSetting(/* Resolved as PointerToUnknownStruct to PurpleAccountOption */ IntPtr option)
+		{
+			/* Unable to process option, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_account_option_get_default_bool
+		 * Function Type: gboolean
+		 * Function RawType: gboolean
+		 * Function Category: Native
+		 */
+		/*
+		 * gboolean purple_account_option_get_default_bool(PurpleAccountOption * option)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern bool purple_account_option_get_default_bool(IntPtr option);
+
+		public static bool AccountOptionGetDefaultBool(/* Resolved as PointerToUnknownStruct to PurpleAccountOption */ IntPtr option)
+		{
+			/* Unable to process option, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_account_option_get_default_int
+		 * Function Type: int
+		 * Function RawType: int
+		 * Function Category: Native
+		 */
+		/*
+		 * int purple_account_option_get_default_int(PurpleAccountOption * option)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern int purple_account_option_get_default_int(IntPtr option);
+
+		public static int AccountOptionGetDefaultInt(/* Resolved as PointerToUnknownStruct to PurpleAccountOption */ IntPtr option)
+		{
+			/* Unable to process option, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_account_option_get_masked
+		 * Function Type: gboolean
+		 * Function RawType: gboolean
+		 * Function Category: Native
+		 */
+		/*
+		 * gboolean purple_account_option_get_masked(PurpleAccountOption * option)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern bool purple_account_option_get_masked(IntPtr option);
+
+		public static bool AccountOptionGetMasked(/* Resolved as PointerToUnknownStruct to PurpleAccountOption */ IntPtr option)
+		{
+			/* Unable to process option, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_account_option_get_list
+		 * Function Type: GList *
+		 * Function RawType: GList
+		 * Function Category: PointerToGList
+		 */
+		/*
+		 * GList * purple_account_option_get_list(PurpleAccountOption * option)
+		 * 
+		 * Could not generate a wrapper for purple_account_option_get_list in file "accountopt.h".
+		 * Message: Unknown inner-type of argument 0 of purple_account_option_get_list
+		 */
+
+		/*
+		 * Function Name: purple_account_user_split_destroy
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_account_user_split_destroy(PurpleAccountUserSplit * split)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_account_user_split_destroy(IntPtr split);
+
+		public static void AccountUserSplitDestroy(/* Resolved as PointerToUnknownStruct to PurpleAccountUserSplit */ IntPtr split)
+		{
+			/* Unable to process split, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_account_user_split_get_text
+		 * Function Type: char *
+		 * Function RawType: char
+		 * Function Category: Native
+		 */
+		/*
+		 * char * purple_account_user_split_get_text(PurpleAccountUserSplit * split)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern string purple_account_user_split_get_text(IntPtr split);
+
+		public static string AccountUserSplitGetText(/* Resolved as PointerToUnknownStruct to PurpleAccountUserSplit */ IntPtr split)
+		{
+			/* Unable to process split, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_account_user_split_get_separator
+		 * Function Type: char
+		 * Function RawType: char
+		 * Function Category: Native
+		 */
+		/*
+		 * char purple_account_user_split_get_separator(PurpleAccountUserSplit * split)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern char purple_account_user_split_get_separator(IntPtr split);
+
+		public static char AccountUserSplitGetSeparator(/* Resolved as PointerToUnknownStruct to PurpleAccountUserSplit */ IntPtr split)
+		{
+			/* Unable to process split, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_account_user_split_get_reverse
+		 * Function Type: gboolean
+		 * Function RawType: gboolean
+		 * Function Category: Native
+		 */
+		/*
+		 * gboolean purple_account_user_split_get_reverse(PurpleAccountUserSplit * split)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern bool purple_account_user_split_get_reverse(IntPtr split);
+
+		public static bool AccountUserSplitGetReverse(/* Resolved as PointerToUnknownStruct to PurpleAccountUserSplit */ IntPtr split)
+		{
+			/* Unable to process split, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_account_user_split_set_reverse
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_account_user_split_set_reverse(PurpleAccountUserSplit * split, gboolean reverse)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_account_user_split_set_reverse(IntPtr split, bool reverse);
+
+		public static void AccountUserSplitSetReverse(/* Resolved as PointerToUnknownStruct to PurpleAccountUserSplit */ IntPtr split, bool reverse)
+		{
+			/* Unable to process split, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+	}
+}
+
============================================================
--- libpurple/wrapper/Blist.cs	e9937a087f1403d6864f4da4c13f2b11b5a7f46c
+++ libpurple/wrapper/Blist.cs	e9937a087f1403d6864f4da4c13f2b11b5a7f46c
@@ -0,0 +1,1679 @@
+/* PurpleWrapper - A .NET (CLR) wrapper for libpurple
+ *
+ * Purple is the legal property of its developers, whose names are too numerous
+ * to list here.  Please refer to the COPYRIGHT file distributed with this
+ * source distribution.
+ *
+ * This program 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.
+ *
+ * This program 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 this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02111-1301  USA
+ */
+
+/*
+ * This file was auto-generated from the libpurple header files to provide a
+ * clean interface between .NET/CLR and the unmanaged C library libpurple.
+ *
+ * This is the second major commit of the code.
+ * Next things:
+ *  - A few of the .h files have anonymous parameter names (eg: void cat(int, int).
+ *    This program will need to assign these parameters names.
+ *  - Function pointers inside structs aren't translated correctly into C#.
+ *  - Two places there are specific-length arrays (eg: char hostname[256]). The parser
+ *    does not detect them as an array.
+ */
+
+using System;
+using System.Collections.Generic;
+using System.Runtime.InteropServices;
+
+namespace PurpleWrapper
+{
+
+	/*
+	 * File: blist.h
+	 */
+	public class Blist
+	{
+		public enum PurpleBlistNodeType
+		{
+			PURPLE_BLIST_GROUP_NODE,
+			PURPLE_BLIST_CONTACT_NODE,
+			PURPLE_BLIST_BUDDY_NODE,
+			PURPLE_BLIST_CHAT_NODE,
+			PURPLE_BLIST_OTHER_NODE
+		};
+
+		public enum PurpleBlistNodeFlags
+		{
+			PURPLE_BLIST_NODE_FLAG_NO_SAVE = 1 << 0
+		};
+
+
+		/*
+		 * Function Name: purple_blist_new
+		 * Function Type: PurpleBuddyList *
+		 * Function RawType: PurpleBuddyList
+		 * Function Category: PointerToKnownStruct
+		 */
+		/*
+		 * PurpleBuddyList * purple_blist_new()
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern IntPtr purple_blist_new();
+
+		public static PurpleBuddyList New()
+		{
+			return new PurpleBuddyList(purple_blist_new());
+		}
+
+		/*
+		 * Function Name: purple_set_blist
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_set_blist(PurpleBuddyList * blist)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_set_blist(IntPtr blist);
+
+		public static void SetBlist(PurpleBuddyList blist)
+		{
+			purple_set_blist(blist.Reference);
+		}
+
+		/*
+		 * Function Name: purple_get_blist
+		 * Function Type: PurpleBuddyList *
+		 * Function RawType: PurpleBuddyList
+		 * Function Category: PointerToKnownStruct
+		 */
+		/*
+		 * PurpleBuddyList * purple_get_blist()
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern IntPtr purple_get_blist();
+
+		public static PurpleBuddyList GetBlist()
+		{
+			return new PurpleBuddyList(purple_get_blist());
+		}
+
+		/*
+		 * Function Name: purple_blist_get_root
+		 * Function Type: PurpleBlistNode *
+		 * Function RawType: PurpleBlistNode
+		 * Function Category: PointerToKnownStruct
+		 */
+		/*
+		 * PurpleBlistNode * purple_blist_get_root()
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern IntPtr purple_blist_get_root();
+
+		public static PurpleBlistNode GetRoot()
+		{
+			return new PurpleBlistNode(purple_blist_get_root());
+		}
+
+		/*
+		 * Function Name: purple_blist_get_buddies
+		 * Function Type: GSList *
+		 * Function RawType: GSList
+		 * Function Category: PointerToGSList
+		 */
+		/*
+		 * GSList * purple_blist_get_buddies()
+		 * 
+		 * Could not generate a wrapper for purple_blist_get_buddies in file "blist.h".
+		 * Message: Unknown inner-type of argument 0 of purple_blist_get_buddies
+		 */
+
+		/*
+		 * Function Name: purple_blist_get_ui_data
+		 * Function Type: gpointer
+		 * Function RawType: gpointer
+		 * Function Category: VoidPointer
+		 */
+		/*
+		 * gpointer purple_blist_get_ui_data()
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern IntPtr purple_blist_get_ui_data();
+
+		public static IntPtr GetUiData()
+		{
+			return purple_blist_get_ui_data();
+		}
+
+		/*
+		 * Function Name: purple_blist_set_ui_data
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_blist_set_ui_data(gpointer ui_data)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_blist_set_ui_data(IntPtr ui_data);
+
+		public static void SetUiData(IntPtr ui_data)
+		{
+			purple_blist_set_ui_data(ui_data);
+		}
+
+		/*
+		 * Function Name: purple_blist_node_next
+		 * Function Type: PurpleBlistNode *
+		 * Function RawType: PurpleBlistNode
+		 * Function Category: PointerToKnownStruct
+		 */
+		/*
+		 * PurpleBlistNode * purple_blist_node_next(PurpleBlistNode * node, gboolean offline)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern IntPtr purple_blist_node_next(IntPtr node, bool offline);
+
+		public static PurpleBlistNode NodeNext(PurpleBlistNode node, bool offline)
+		{
+			return new PurpleBlistNode(purple_blist_node_next(node.Reference, offline));
+		}
+
+		/*
+		 * Function Name: purple_blist_node_get_parent
+		 * Function Type: PurpleBlistNode *
+		 * Function RawType: PurpleBlistNode
+		 * Function Category: PointerToKnownStruct
+		 */
+		/*
+		 * PurpleBlistNode * purple_blist_node_get_parent(PurpleBlistNode * node)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern IntPtr purple_blist_node_get_parent(IntPtr node);
+
+		public static PurpleBlistNode NodeGetParent(PurpleBlistNode node)
+		{
+			return new PurpleBlistNode(purple_blist_node_get_parent(node.Reference));
+		}
+
+		/*
+		 * Function Name: purple_blist_node_get_first_child
+		 * Function Type: PurpleBlistNode *
+		 * Function RawType: PurpleBlistNode
+		 * Function Category: PointerToKnownStruct
+		 */
+		/*
+		 * PurpleBlistNode * purple_blist_node_get_first_child(PurpleBlistNode * node)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern IntPtr purple_blist_node_get_first_child(IntPtr node);
+
+		public static PurpleBlistNode NodeGetFirstChild(PurpleBlistNode node)
+		{
+			return new PurpleBlistNode(purple_blist_node_get_first_child(node.Reference));
+		}
+
+		/*
+		 * Function Name: purple_blist_node_get_sibling_next
+		 * Function Type: PurpleBlistNode *
+		 * Function RawType: PurpleBlistNode
+		 * Function Category: PointerToKnownStruct
+		 */
+		/*
+		 * PurpleBlistNode * purple_blist_node_get_sibling_next(PurpleBlistNode * node)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern IntPtr purple_blist_node_get_sibling_next(IntPtr node);
+
+		public static PurpleBlistNode NodeGetSiblingNext(PurpleBlistNode node)
+		{
+			return new PurpleBlistNode(purple_blist_node_get_sibling_next(node.Reference));
+		}
+
+		/*
+		 * Function Name: purple_blist_node_get_sibling_prev
+		 * Function Type: PurpleBlistNode *
+		 * Function RawType: PurpleBlistNode
+		 * Function Category: PointerToKnownStruct
+		 */
+		/*
+		 * PurpleBlistNode * purple_blist_node_get_sibling_prev(PurpleBlistNode * node)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern IntPtr purple_blist_node_get_sibling_prev(IntPtr node);
+
+		public static PurpleBlistNode NodeGetSiblingPrev(PurpleBlistNode node)
+		{
+			return new PurpleBlistNode(purple_blist_node_get_sibling_prev(node.Reference));
+		}
+
+		/*
+		 * Function Name: purple_blist_node_get_ui_data
+		 * Function Type: gpointer
+		 * Function RawType: gpointer
+		 * Function Category: VoidPointer
+		 */
+		/*
+		 * gpointer purple_blist_node_get_ui_data(PurpleBlistNode * node)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern IntPtr purple_blist_node_get_ui_data(IntPtr node);
+
+		public static IntPtr NodeGetUiData(PurpleBlistNode node)
+		{
+			return purple_blist_node_get_ui_data(node.Reference);
+		}
+
+		/*
+		 * Function Name: purple_blist_node_set_ui_data
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_blist_node_set_ui_data(PurpleBlistNode * node, gpointer ui_data)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_blist_node_set_ui_data(IntPtr node, IntPtr ui_data);
+
+		public static void NodeSetUiData(PurpleBlistNode node, IntPtr ui_data)
+		{
+			purple_blist_node_set_ui_data(node.Reference, ui_data);
+		}
+
+		/*
+		 * Function Name: purple_blist_show
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_blist_show()
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_blist_show();
+
+		public static void Show()
+		{
+			purple_blist_show();
+		}
+
+		/*
+		 * Function Name: purple_blist_destroy
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_blist_destroy()
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_blist_destroy();
+
+		public static void Destroy()
+		{
+			purple_blist_destroy();
+		}
+
+		/*
+		 * Function Name: purple_blist_set_visible
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_blist_set_visible(gboolean show)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_blist_set_visible(bool show);
+
+		public static void SetVisible(bool show)
+		{
+			purple_blist_set_visible(show);
+		}
+
+		/*
+		 * Function Name: purple_blist_update_buddy_status
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_blist_update_buddy_status(PurpleBuddy * buddy, PurpleStatus * old_status)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_blist_update_buddy_status(IntPtr buddy, IntPtr old_status);
+
+		public static void UpdateBuddyStatus(PurpleBuddy buddy, /* Resolved as PointerToUnknownStruct to PurpleStatus */ IntPtr old_status)
+		{
+			/* Unable to process old_status, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_blist_update_node_icon
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_blist_update_node_icon(PurpleBlistNode * node)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_blist_update_node_icon(IntPtr node);
+
+		public static void UpdateNodeIcon(PurpleBlistNode node)
+		{
+			purple_blist_update_node_icon(node.Reference);
+		}
+
+		/*
+		 * Function Name: purple_blist_update_buddy_icon
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_blist_update_buddy_icon(PurpleBuddy * buddy)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_blist_update_buddy_icon(IntPtr buddy);
+
+		public static void UpdateBuddyIcon(PurpleBuddy buddy)
+		{
+			purple_blist_update_buddy_icon(buddy.Reference);
+		}
+
+		/*
+		 * Function Name: purple_blist_rename_buddy
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_blist_rename_buddy(PurpleBuddy * buddy, char * name)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_blist_rename_buddy(IntPtr buddy, string name);
+
+		public static void RenameBuddy(PurpleBuddy buddy, string name)
+		{
+			purple_blist_rename_buddy(buddy.Reference, name);
+		}
+
+		/*
+		 * Function Name: purple_blist_alias_contact
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_blist_alias_contact(PurpleContact * contact, char * alias)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_blist_alias_contact(IntPtr contact, string alias);
+
+		public static void AliasContact(PurpleContact contact, string alias)
+		{
+			purple_blist_alias_contact(contact.Reference, alias);
+		}
+
+		/*
+		 * Function Name: purple_blist_alias_buddy
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_blist_alias_buddy(PurpleBuddy * buddy, char * alias)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_blist_alias_buddy(IntPtr buddy, string alias);
+
+		public static void AliasBuddy(PurpleBuddy buddy, string alias)
+		{
+			purple_blist_alias_buddy(buddy.Reference, alias);
+		}
+
+		/*
+		 * Function Name: purple_blist_server_alias_buddy
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_blist_server_alias_buddy(PurpleBuddy * buddy, char * alias)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_blist_server_alias_buddy(IntPtr buddy, string alias);
+
+		public static void ServerAliasBuddy(PurpleBuddy buddy, string alias)
+		{
+			purple_blist_server_alias_buddy(buddy.Reference, alias);
+		}
+
+		/*
+		 * Function Name: purple_blist_alias_chat
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_blist_alias_chat(PurpleChat * chat, char * alias)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_blist_alias_chat(IntPtr chat, string alias);
+
+		public static void AliasChat(PurpleChat chat, string alias)
+		{
+			purple_blist_alias_chat(chat.Reference, alias);
+		}
+
+		/*
+		 * Function Name: purple_blist_rename_group
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_blist_rename_group(PurpleGroup * group, char * name)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_blist_rename_group(IntPtr group, string name);
+
+		public static void RenameGroup(PurpleGroup group, string name)
+		{
+			purple_blist_rename_group(group.Reference, name);
+		}
+
+		/*
+		 * Function Name: purple_chat_new
+		 * Function Type: PurpleChat *
+		 * Function RawType: PurpleChat
+		 * Function Category: PointerToKnownStruct
+		 */
+		/*
+		 * PurpleChat * purple_chat_new(PurpleAccount * account, char * alias, GHashTable * components)
+		 * 
+		 * Could not generate a wrapper for purple_chat_new in file "blist.h".
+		 * Message: Unable to provide a type for HashTable as no function information was provided in code.
+		 */
+
+		/*
+		 * Function Name: purple_chat_destroy
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_chat_destroy(PurpleChat * chat)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_chat_destroy(IntPtr chat);
+
+		public static void ChatDestroy(PurpleChat chat)
+		{
+			purple_chat_destroy(chat.Reference);
+		}
+
+		/*
+		 * Function Name: purple_blist_add_chat
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_blist_add_chat(PurpleChat * chat, PurpleGroup * group, PurpleBlistNode * node)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_blist_add_chat(IntPtr chat, IntPtr group, IntPtr node);
+
+		public static void AddChat(PurpleChat chat, PurpleGroup group, PurpleBlistNode node)
+		{
+			purple_blist_add_chat(chat.Reference, group.Reference, node.Reference);
+		}
+
+		/*
+		 * Function Name: purple_buddy_new
+		 * Function Type: PurpleBuddy *
+		 * Function RawType: PurpleBuddy
+		 * Function Category: PointerToKnownStruct
+		 */
+		/*
+		 * PurpleBuddy * purple_buddy_new(PurpleAccount * account, char * name, char * alias)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern IntPtr purple_buddy_new(IntPtr account, string name, string alias);
+
+		public static PurpleBuddy BuddyNew(PurpleAccount account, string name, string alias)
+		{
+			return new PurpleBuddy(purple_buddy_new(account.Reference, name, alias));
+		}
+
+		/*
+		 * Function Name: purple_buddy_destroy
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_buddy_destroy(PurpleBuddy * buddy)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_buddy_destroy(IntPtr buddy);
+
+		public static void BuddyDestroy(PurpleBuddy buddy)
+		{
+			purple_buddy_destroy(buddy.Reference);
+		}
+
+		/*
+		 * Function Name: purple_buddy_set_icon
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_buddy_set_icon(PurpleBuddy * buddy, PurpleBuddyIcon * icon)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_buddy_set_icon(IntPtr buddy, IntPtr icon);
+
+		public static void BuddySetIcon(PurpleBuddy buddy, /* Resolved as PointerToUnknownStruct to PurpleBuddyIcon */ IntPtr icon)
+		{
+			/* Unable to process icon, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_buddy_get_account
+		 * Function Type: PurpleAccount *
+		 * Function RawType: PurpleAccount
+		 * Function Category: PointerToKnownStruct
+		 */
+		/*
+		 * PurpleAccount * purple_buddy_get_account(PurpleBuddy * buddy)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern IntPtr purple_buddy_get_account(IntPtr buddy);
+
+		public static PurpleAccount BuddyGetAccount(PurpleBuddy buddy)
+		{
+			return new PurpleAccount(purple_buddy_get_account(buddy.Reference));
+		}
+
+		/*
+		 * Function Name: purple_buddy_get_name
+		 * Function Type: char *
+		 * Function RawType: char
+		 * Function Category: Native
+		 */
+		/*
+		 * char * purple_buddy_get_name(PurpleBuddy * buddy)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern string purple_buddy_get_name(IntPtr buddy);
+
+		public static string BuddyGetName(PurpleBuddy buddy)
+		{
+			return purple_buddy_get_name(buddy.Reference);
+		}
+
+		/*
+		 * Function Name: purple_buddy_get_icon
+		 * Function Type: PurpleBuddyIcon *
+		 * Function RawType: PurpleBuddyIcon
+		 * Function Category: PointerToUnknownStruct
+		 */
+		/*
+		 * PurpleBuddyIcon * purple_buddy_get_icon(PurpleBuddy * buddy)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern IntPtr purple_buddy_get_icon(IntPtr buddy);
+
+		public static /* Resolved as PointerToUnknownStruct to PurpleBuddyIcon */ IntPtr BuddyGetIcon(PurpleBuddy buddy)
+		{
+			/* Unable to process the return value of purple_buddy_get_icon, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_buddy_get_protocol_data
+		 * Function Type: gpointer
+		 * Function RawType: gpointer
+		 * Function Category: VoidPointer
+		 */
+		/*
+		 * gpointer purple_buddy_get_protocol_data(PurpleBuddy * buddy)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern IntPtr purple_buddy_get_protocol_data(IntPtr buddy);
+
+		public static IntPtr BuddyGetProtocolData(PurpleBuddy buddy)
+		{
+			return purple_buddy_get_protocol_data(buddy.Reference);
+		}
+
+		/*
+		 * Function Name: purple_buddy_set_protocol_data
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_buddy_set_protocol_data(PurpleBuddy * buddy, gpointer data)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_buddy_set_protocol_data(IntPtr buddy, IntPtr data);
+
+		public static void BuddySetProtocolData(PurpleBuddy buddy, IntPtr data)
+		{
+			purple_buddy_set_protocol_data(buddy.Reference, data);
+		}
+
+		/*
+		 * Function Name: purple_buddy_get_contact
+		 * Function Type: PurpleContact *
+		 * Function RawType: PurpleContact
+		 * Function Category: PointerToKnownStruct
+		 */
+		/*
+		 * PurpleContact * purple_buddy_get_contact(PurpleBuddy * buddy)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern IntPtr purple_buddy_get_contact(IntPtr buddy);
+
+		public static PurpleContact BuddyGetContact(PurpleBuddy buddy)
+		{
+			return new PurpleContact(purple_buddy_get_contact(buddy.Reference));
+		}
+
+		/*
+		 * Function Name: purple_buddy_get_presence
+		 * Function Type: PurplePresence *
+		 * Function RawType: PurplePresence
+		 * Function Category: PointerToUnknownStruct
+		 */
+		/*
+		 * PurplePresence * purple_buddy_get_presence(PurpleBuddy * buddy)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern IntPtr purple_buddy_get_presence(IntPtr buddy);
+
+		public static /* Resolved as PointerToUnknownStruct to PurplePresence */ IntPtr BuddyGetPresence(PurpleBuddy buddy)
+		{
+			/* Unable to process the return value of purple_buddy_get_presence, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_blist_add_buddy
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_blist_add_buddy(PurpleBuddy * buddy, PurpleContact * contact, PurpleGroup * group, PurpleBlistNode * node)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_blist_add_buddy(IntPtr buddy, IntPtr contact, IntPtr group, IntPtr node);
+
+		public static void AddBuddy(PurpleBuddy buddy, PurpleContact contact, PurpleGroup group, PurpleBlistNode node)
+		{
+			purple_blist_add_buddy(buddy.Reference, contact.Reference, group.Reference, node.Reference);
+		}
+
+		/*
+		 * Function Name: purple_group_new
+		 * Function Type: PurpleGroup *
+		 * Function RawType: PurpleGroup
+		 * Function Category: PointerToKnownStruct
+		 */
+		/*
+		 * PurpleGroup * purple_group_new(char * name)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern IntPtr purple_group_new(string name);
+
+		public static PurpleGroup GroupNew(string name)
+		{
+			return new PurpleGroup(purple_group_new(name));
+		}
+
+		/*
+		 * Function Name: purple_group_destroy
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_group_destroy(PurpleGroup * group)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_group_destroy(IntPtr group);
+
+		public static void GroupDestroy(PurpleGroup group)
+		{
+			purple_group_destroy(group.Reference);
+		}
+
+		/*
+		 * Function Name: purple_blist_add_group
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_blist_add_group(PurpleGroup * group, PurpleBlistNode * node)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_blist_add_group(IntPtr group, IntPtr node);
+
+		public static void AddGroup(PurpleGroup group, PurpleBlistNode node)
+		{
+			purple_blist_add_group(group.Reference, node.Reference);
+		}
+
+		/*
+		 * Function Name: purple_contact_new
+		 * Function Type: PurpleContact *
+		 * Function RawType: PurpleContact
+		 * Function Category: PointerToKnownStruct
+		 */
+		/*
+		 * PurpleContact * purple_contact_new()
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern IntPtr purple_contact_new();
+
+		public static PurpleContact ContactNew()
+		{
+			return new PurpleContact(purple_contact_new());
+		}
+
+		/*
+		 * Function Name: purple_contact_destroy
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_contact_destroy(PurpleContact * contact)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_contact_destroy(IntPtr contact);
+
+		public static void ContactDestroy(PurpleContact contact)
+		{
+			purple_contact_destroy(contact.Reference);
+		}
+
+		/*
+		 * Function Name: purple_blist_add_contact
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_blist_add_contact(PurpleContact * contact, PurpleGroup * group, PurpleBlistNode * node)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_blist_add_contact(IntPtr contact, IntPtr group, IntPtr node);
+
+		public static void AddContact(PurpleContact contact, PurpleGroup group, PurpleBlistNode node)
+		{
+			purple_blist_add_contact(contact.Reference, group.Reference, node.Reference);
+		}
+
+		/*
+		 * Function Name: purple_blist_merge_contact
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_blist_merge_contact(PurpleContact * source, PurpleBlistNode * node)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_blist_merge_contact(IntPtr source, IntPtr node);
+
+		public static void MergeContact(PurpleContact source, PurpleBlistNode node)
+		{
+			purple_blist_merge_contact(source.Reference, node.Reference);
+		}
+
+		/*
+		 * Function Name: purple_contact_get_priority_buddy
+		 * Function Type: PurpleBuddy *
+		 * Function RawType: PurpleBuddy
+		 * Function Category: PointerToKnownStruct
+		 */
+		/*
+		 * PurpleBuddy * purple_contact_get_priority_buddy(PurpleContact * contact)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern IntPtr purple_contact_get_priority_buddy(IntPtr contact);
+
+		public static PurpleBuddy ContactGetPriorityBuddy(PurpleContact contact)
+		{
+			return new PurpleBuddy(purple_contact_get_priority_buddy(contact.Reference));
+		}
+
+		/*
+		 * Function Name: purple_contact_set_alias
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_contact_set_alias(PurpleContact * contact, char * alias)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_contact_set_alias(IntPtr contact, string alias);
+
+		public static void ContactSetAlias(PurpleContact contact, string alias)
+		{
+			purple_contact_set_alias(contact.Reference, alias);
+		}
+
+		/*
+		 * Function Name: purple_contact_get_alias
+		 * Function Type: char *
+		 * Function RawType: char
+		 * Function Category: Native
+		 */
+		/*
+		 * char * purple_contact_get_alias(PurpleContact * contact)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern string purple_contact_get_alias(IntPtr contact);
+
+		public static string ContactGetAlias(PurpleContact contact)
+		{
+			return purple_contact_get_alias(contact.Reference);
+		}
+
+		/*
+		 * Function Name: purple_contact_on_account
+		 * Function Type: gboolean
+		 * Function RawType: gboolean
+		 * Function Category: Native
+		 */
+		/*
+		 * gboolean purple_contact_on_account(PurpleContact * contact, PurpleAccount * account)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern bool purple_contact_on_account(IntPtr contact, IntPtr account);
+
+		public static bool ContactOnAccount(PurpleContact contact, PurpleAccount account)
+		{
+			return purple_contact_on_account(contact.Reference, account.Reference);
+		}
+
+		/*
+		 * Function Name: purple_contact_invalidate_priority_buddy
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_contact_invalidate_priority_buddy(PurpleContact * contact)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_contact_invalidate_priority_buddy(IntPtr contact);
+
+		public static void ContactInvalidatePriorityBuddy(PurpleContact contact)
+		{
+			purple_contact_invalidate_priority_buddy(contact.Reference);
+		}
+
+		/*
+		 * Function Name: purple_blist_remove_buddy
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_blist_remove_buddy(PurpleBuddy * buddy)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_blist_remove_buddy(IntPtr buddy);
+
+		public static void RemoveBuddy(PurpleBuddy buddy)
+		{
+			purple_blist_remove_buddy(buddy.Reference);
+		}
+
+		/*
+		 * Function Name: purple_blist_remove_contact
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_blist_remove_contact(PurpleContact * contact)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_blist_remove_contact(IntPtr contact);
+
+		public static void RemoveContact(PurpleContact contact)
+		{
+			purple_blist_remove_contact(contact.Reference);
+		}
+
+		/*
+		 * Function Name: purple_blist_remove_chat
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_blist_remove_chat(PurpleChat * chat)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_blist_remove_chat(IntPtr chat);
+
+		public static void RemoveChat(PurpleChat chat)
+		{
+			purple_blist_remove_chat(chat.Reference);
+		}
+
+		/*
+		 * Function Name: purple_blist_remove_group
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_blist_remove_group(PurpleGroup * group)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_blist_remove_group(IntPtr group);
+
+		public static void RemoveGroup(PurpleGroup group)
+		{
+			purple_blist_remove_group(group.Reference);
+		}
+
+		/*
+		 * Function Name: purple_buddy_get_alias_only
+		 * Function Type: char *
+		 * Function RawType: char
+		 * Function Category: Native
+		 */
+		/*
+		 * char * purple_buddy_get_alias_only(PurpleBuddy * buddy)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern string purple_buddy_get_alias_only(IntPtr buddy);
+
+		public static string BuddyGetAliasOnly(PurpleBuddy buddy)
+		{
+			return purple_buddy_get_alias_only(buddy.Reference);
+		}
+
+		/*
+		 * Function Name: purple_buddy_get_server_alias
+		 * Function Type: char *
+		 * Function RawType: char
+		 * Function Category: Native
+		 */
+		/*
+		 * char * purple_buddy_get_server_alias(PurpleBuddy * buddy)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern string purple_buddy_get_server_alias(IntPtr buddy);
+
+		public static string BuddyGetServerAlias(PurpleBuddy buddy)
+		{
+			return purple_buddy_get_server_alias(buddy.Reference);
+		}
+
+		/*
+		 * Function Name: purple_buddy_get_contact_alias
+		 * Function Type: char *
+		 * Function RawType: char
+		 * Function Category: Native
+		 */
+		/*
+		 * char * purple_buddy_get_contact_alias(PurpleBuddy * buddy)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern string purple_buddy_get_contact_alias(IntPtr buddy);
+
+		public static string BuddyGetContactAlias(PurpleBuddy buddy)
+		{
+			return purple_buddy_get_contact_alias(buddy.Reference);
+		}
+
+		/*
+		 * Function Name: purple_buddy_get_local_alias
+		 * Function Type: char *
+		 * Function RawType: char
+		 * Function Category: Native
+		 */
+		/*
+		 * char * purple_buddy_get_local_alias(PurpleBuddy * buddy)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern string purple_buddy_get_local_alias(IntPtr buddy);
+
+		public static string BuddyGetLocalAlias(PurpleBuddy buddy)
+		{
+			return purple_buddy_get_local_alias(buddy.Reference);
+		}
+
+		/*
+		 * Function Name: purple_buddy_get_alias
+		 * Function Type: char *
+		 * Function RawType: char
+		 * Function Category: Native
+		 */
+		/*
+		 * char * purple_buddy_get_alias(PurpleBuddy * buddy)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern string purple_buddy_get_alias(IntPtr buddy);
+
+		public static string BuddyGetAlias(PurpleBuddy buddy)
+		{
+			return purple_buddy_get_alias(buddy.Reference);
+		}
+
+		/*
+		 * Function Name: purple_buddy_get_local_buddy_alias
+		 * Function Type: char *
+		 * Function RawType: char
+		 * Function Category: Native
+		 */
+		/*
+		 * char * purple_buddy_get_local_buddy_alias(PurpleBuddy * buddy)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern string purple_buddy_get_local_buddy_alias(IntPtr buddy);
+
+		public static string BuddyGetLocalBuddyAlias(PurpleBuddy buddy)
+		{
+			return purple_buddy_get_local_buddy_alias(buddy.Reference);
+		}
+
+		/*
+		 * Function Name: purple_chat_get_name
+		 * Function Type: char *
+		 * Function RawType: char
+		 * Function Category: Native
+		 */
+		/*
+		 * char * purple_chat_get_name(PurpleChat * chat)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern string purple_chat_get_name(IntPtr chat);
+
+		public static string ChatGetName(PurpleChat chat)
+		{
+			return purple_chat_get_name(chat.Reference);
+		}
+
+		/*
+		 * Function Name: purple_find_buddy
+		 * Function Type: PurpleBuddy *
+		 * Function RawType: PurpleBuddy
+		 * Function Category: PointerToKnownStruct
+		 */
+		/*
+		 * PurpleBuddy * purple_find_buddy(PurpleAccount * account, char * name)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern IntPtr purple_find_buddy(IntPtr account, string name);
+
+		public static PurpleBuddy FindBuddy(PurpleAccount account, string name)
+		{
+			return new PurpleBuddy(purple_find_buddy(account.Reference, name));
+		}
+
+		/*
+		 * Function Name: purple_find_buddies
+		 * Function Type: GSList *
+		 * Function RawType: GSList
+		 * Function Category: PointerToGSList
+		 */
+		/*
+		 * GSList * purple_find_buddies(PurpleAccount * account, char * name)
+		 * 
+		 * Could not generate a wrapper for purple_find_buddies in file "blist.h".
+		 * Message: Unknown inner-type of argument 0 of purple_find_buddies
+		 */
+
+		/*
+		 * Function Name: purple_find_group
+		 * Function Type: PurpleGroup *
+		 * Function RawType: PurpleGroup
+		 * Function Category: PointerToKnownStruct
+		 */
+		/*
+		 * PurpleGroup * purple_find_group(char * name)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern IntPtr purple_find_group(string name);
+
+		public static PurpleGroup FindGroup(string name)
+		{
+			return new PurpleGroup(purple_find_group(name));
+		}
+
+		/*
+		 * Function Name: purple_blist_find_chat
+		 * Function Type: PurpleChat *
+		 * Function RawType: PurpleChat
+		 * Function Category: PointerToKnownStruct
+		 */
+		/*
+		 * PurpleChat * purple_blist_find_chat(PurpleAccount * account, char * name)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern IntPtr purple_blist_find_chat(IntPtr account, string name);
+
+		public static PurpleChat FindChat(PurpleAccount account, string name)
+		{
+			return new PurpleChat(purple_blist_find_chat(account.Reference, name));
+		}
+
+		/*
+		 * Function Name: purple_chat_get_group
+		 * Function Type: PurpleGroup *
+		 * Function RawType: PurpleGroup
+		 * Function Category: PointerToKnownStruct
+		 */
+		/*
+		 * PurpleGroup * purple_chat_get_group(PurpleChat * chat)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern IntPtr purple_chat_get_group(IntPtr chat);
+
+		public static PurpleGroup ChatGetGroup(PurpleChat chat)
+		{
+			return new PurpleGroup(purple_chat_get_group(chat.Reference));
+		}
+
+		/*
+		 * Function Name: purple_chat_get_account
+		 * Function Type: PurpleAccount *
+		 * Function RawType: PurpleAccount
+		 * Function Category: PointerToKnownStruct
+		 */
+		/*
+		 * PurpleAccount * purple_chat_get_account(PurpleChat * chat)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern IntPtr purple_chat_get_account(IntPtr chat);
+
+		public static PurpleAccount ChatGetAccount(PurpleChat chat)
+		{
+			return new PurpleAccount(purple_chat_get_account(chat.Reference));
+		}
+
+		/*
+		 * Function Name: purple_chat_get_components
+		 * Function Type: GHashTable *
+		 * Function RawType: GHashTable
+		 * Function Category: PointerToGHashTable
+		 */
+		/*
+		 * GHashTable * purple_chat_get_components(PurpleChat * chat)
+		 * 
+		 * Could not generate a wrapper for purple_chat_get_components in file "blist.h".
+		 * Message: Unknown inner-type of argument 0 of purple_chat_get_components
+		 */
+
+		/*
+		 * Function Name: purple_buddy_get_group
+		 * Function Type: PurpleGroup *
+		 * Function RawType: PurpleGroup
+		 * Function Category: PointerToKnownStruct
+		 */
+		/*
+		 * PurpleGroup * purple_buddy_get_group(PurpleBuddy * buddy)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern IntPtr purple_buddy_get_group(IntPtr buddy);
+
+		public static PurpleGroup BuddyGetGroup(PurpleBuddy buddy)
+		{
+			return new PurpleGroup(purple_buddy_get_group(buddy.Reference));
+		}
+
+		/*
+		 * Function Name: purple_group_get_accounts
+		 * Function Type: GSList *
+		 * Function RawType: GSList
+		 * Function Category: PointerToGSList
+		 */
+		/*
+		 * GSList * purple_group_get_accounts(PurpleGroup * g)
+		 * 
+		 * Could not generate a wrapper for purple_group_get_accounts in file "blist.h".
+		 * Message: Unknown inner-type of argument 0 of purple_group_get_accounts
+		 */
+
+		/*
+		 * Function Name: purple_group_on_account
+		 * Function Type: gboolean
+		 * Function RawType: gboolean
+		 * Function Category: Native
+		 */
+		/*
+		 * gboolean purple_group_on_account(PurpleGroup * g, PurpleAccount * account)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern bool purple_group_on_account(IntPtr g, IntPtr account);
+
+		public static bool GroupOnAccount(PurpleGroup g, PurpleAccount account)
+		{
+			return purple_group_on_account(g.Reference, account.Reference);
+		}
+
+		/*
+		 * Function Name: purple_group_get_name
+		 * Function Type: char *
+		 * Function RawType: char
+		 * Function Category: Native
+		 */
+		/*
+		 * char * purple_group_get_name(PurpleGroup * group)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern string purple_group_get_name(IntPtr group);
+
+		public static string GroupGetName(PurpleGroup group)
+		{
+			return purple_group_get_name(group.Reference);
+		}
+
+		/*
+		 * Function Name: purple_blist_add_account
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_blist_add_account(PurpleAccount * account)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_blist_add_account(IntPtr account);
+
+		public static void AddAccount(PurpleAccount account)
+		{
+			purple_blist_add_account(account.Reference);
+		}
+
+		/*
+		 * Function Name: purple_blist_remove_account
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_blist_remove_account(PurpleAccount * account)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_blist_remove_account(IntPtr account);
+
+		public static void RemoveAccount(PurpleAccount account)
+		{
+			purple_blist_remove_account(account.Reference);
+		}
+
+		/*
+		 * Function Name: purple_blist_get_group_size
+		 * Function Type: int
+		 * Function RawType: int
+		 * Function Category: Native
+		 */
+		/*
+		 * int purple_blist_get_group_size(PurpleGroup * group, gboolean offline)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern int purple_blist_get_group_size(IntPtr group, bool offline);
+
+		public static int GetGroupSize(PurpleGroup group, bool offline)
+		{
+			return purple_blist_get_group_size(group.Reference, offline);
+		}
+
+		/*
+		 * Function Name: purple_blist_get_group_online_count
+		 * Function Type: int
+		 * Function RawType: int
+		 * Function Category: Native
+		 */
+		/*
+		 * int purple_blist_get_group_online_count(PurpleGroup * group)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern int purple_blist_get_group_online_count(IntPtr group);
+
+		public static int GetGroupOnlineCount(PurpleGroup group)
+		{
+			return purple_blist_get_group_online_count(group.Reference);
+		}
+
+		/*
+		 * Function Name: purple_blist_load
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_blist_load()
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_blist_load();
+
+		public static void Load()
+		{
+			purple_blist_load();
+		}
+
+		/*
+		 * Function Name: purple_blist_schedule_save
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_blist_schedule_save()
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_blist_schedule_save();
+
+		public static void ScheduleSave()
+		{
+			purple_blist_schedule_save();
+		}
+
+		/*
+		 * Function Name: purple_blist_request_add_group
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_blist_request_add_group()
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_blist_request_add_group();
+
+		public static void RequestAddGroup()
+		{
+			purple_blist_request_add_group();
+		}
+
+		/*
+		 * Function Name: purple_blist_node_set_bool
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_blist_node_set_bool(PurpleBlistNode * node, char * key, gboolean value)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_blist_node_set_bool(IntPtr node, string key, bool value);
+
+		public static void NodeSetBool(PurpleBlistNode node, string key, bool value)
+		{
+			purple_blist_node_set_bool(node.Reference, key, value);
+		}
+
+		/*
+		 * Function Name: purple_blist_node_get_bool
+		 * Function Type: gboolean
+		 * Function RawType: gboolean
+		 * Function Category: Native
+		 */
+		/*
+		 * gboolean purple_blist_node_get_bool(PurpleBlistNode * node, char * key)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern bool purple_blist_node_get_bool(IntPtr node, string key);
+
+		public static bool NodeGetBool(PurpleBlistNode node, string key)
+		{
+			return purple_blist_node_get_bool(node.Reference, key);
+		}
+
+		/*
+		 * Function Name: purple_blist_node_set_int
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_blist_node_set_int(PurpleBlistNode * node, char * key, int value)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_blist_node_set_int(IntPtr node, string key, int value);
+
+		public static void NodeSetInt(PurpleBlistNode node, string key, int value)
+		{
+			purple_blist_node_set_int(node.Reference, key, value);
+		}
+
+		/*
+		 * Function Name: purple_blist_node_get_int
+		 * Function Type: int
+		 * Function RawType: int
+		 * Function Category: Native
+		 */
+		/*
+		 * int purple_blist_node_get_int(PurpleBlistNode * node, char * key)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern int purple_blist_node_get_int(IntPtr node, string key);
+
+		public static int NodeGetInt(PurpleBlistNode node, string key)
+		{
+			return purple_blist_node_get_int(node.Reference, key);
+		}
+
+		/*
+		 * Function Name: purple_blist_node_get_string
+		 * Function Type: char *
+		 * Function RawType: char
+		 * Function Category: Native
+		 */
+		/*
+		 * char * purple_blist_node_get_string(PurpleBlistNode * node, char * key)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern string purple_blist_node_get_string(IntPtr node, string key);
+
+		public static string NodeGetString(PurpleBlistNode node, string key)
+		{
+			return purple_blist_node_get_string(node.Reference, key);
+		}
+
+		/*
+		 * Function Name: purple_blist_node_remove_setting
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_blist_node_remove_setting(PurpleBlistNode * node, char * key)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_blist_node_remove_setting(IntPtr node, string key);
+
+		public static void NodeRemoveSetting(PurpleBlistNode node, string key)
+		{
+			purple_blist_node_remove_setting(node.Reference, key);
+		}
+
+		/*
+		 * Function Name: purple_blist_node_set_flags
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_blist_node_set_flags(PurpleBlistNode * node, PurpleBlistNodeFlags flags)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_blist_node_set_flags(IntPtr node, Blist.PurpleBlistNodeFlags flags);
+
+		public static void NodeSetFlags(PurpleBlistNode node, Blist.PurpleBlistNodeFlags flags)
+		{
+			/* Unable to process flags, a KnownEnum. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_blist_node_get_flags
+		 * Function Type: PurpleBlistNodeFlags
+		 * Function RawType: PurpleBlistNodeFlags
+		 * Function Category: KnownEnum
+		 */
+		/*
+		 * PurpleBlistNodeFlags purple_blist_node_get_flags(PurpleBlistNode * node)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern Blist.PurpleBlistNodeFlags purple_blist_node_get_flags(IntPtr node);
+
+		public static Blist.PurpleBlistNodeFlags NodeGetFlags(PurpleBlistNode node)
+		{
+			/* Unable to process the return value of purple_blist_node_get_flags, a KnownEnum. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_blist_node_get_type
+		 * Function Type: PurpleBlistNodeType
+		 * Function RawType: PurpleBlistNodeType
+		 * Function Category: KnownEnum
+		 */
+		/*
+		 * PurpleBlistNodeType purple_blist_node_get_type(PurpleBlistNode * node)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern Blist.PurpleBlistNodeType purple_blist_node_get_type(IntPtr node);
+
+		public static Blist.PurpleBlistNodeType NodeGetType(PurpleBlistNode node)
+		{
+			/* Unable to process the return value of purple_blist_node_get_type, a KnownEnum. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_blist_node_get_extended_menu
+		 * Function Type: GList *
+		 * Function RawType: GList
+		 * Function Category: PointerToGList
+		 */
+		/*
+		 * GList * purple_blist_node_get_extended_menu(PurpleBlistNode * n)
+		 * 
+		 * Could not generate a wrapper for purple_blist_node_get_extended_menu in file "blist.h".
+		 * Message: Unknown inner-type of argument 0 of purple_blist_node_get_extended_menu
+		 */
+
+		/*
+		 * Function Name: purple_blist_set_ui_ops
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_blist_set_ui_ops(PurpleBlistUiOps * ops)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_blist_set_ui_ops(IntPtr ops);
+
+		public static void SetUiOps(PurpleBlistUiOps ops)
+		{
+			purple_blist_set_ui_ops(ops.Reference);
+		}
+
+		/*
+		 * Function Name: purple_blist_get_ui_ops
+		 * Function Type: PurpleBlistUiOps *
+		 * Function RawType: PurpleBlistUiOps
+		 * Function Category: PointerToKnownStruct
+		 */
+		/*
+		 * PurpleBlistUiOps * purple_blist_get_ui_ops()
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern IntPtr purple_blist_get_ui_ops();
+
+		public static PurpleBlistUiOps GetUiOps()
+		{
+			return new PurpleBlistUiOps(purple_blist_get_ui_ops());
+		}
+
+		/*
+		 * Function Name: purple_blist_get_handle
+		 * Function Type: void *
+		 * Function RawType: void
+		 * Function Category: VoidPointer
+		 */
+		/*
+		 * void * purple_blist_get_handle()
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern IntPtr purple_blist_get_handle();
+
+		public static IntPtr GetHandle()
+		{
+			return purple_blist_get_handle();
+		}
+
+		/*
+		 * Function Name: purple_blist_init
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_blist_init()
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_blist_init();
+
+		public static void Init()
+		{
+			purple_blist_init();
+		}
+
+		/*
+		 * Function Name: purple_blist_uninit
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_blist_uninit()
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_blist_uninit();
+
+		public static void Uninit()
+		{
+			purple_blist_uninit();
+		}
+
+	}
+}
+
============================================================
--- libpurple/wrapper/Buddyicon.cs	8cde02e2026db24e2de82e964541ac1be1e1fab7
+++ libpurple/wrapper/Buddyicon.cs	8cde02e2026db24e2de82e964541ac1be1e1fab7
@@ -0,0 +1,492 @@
+/* PurpleWrapper - A .NET (CLR) wrapper for libpurple
+ *
+ * Purple is the legal property of its developers, whose names are too numerous
+ * to list here.  Please refer to the COPYRIGHT file distributed with this
+ * source distribution.
+ *
+ * This program 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.
+ *
+ * This program 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 this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02111-1301  USA
+ */
+
+/*
+ * This file was auto-generated from the libpurple header files to provide a
+ * clean interface between .NET/CLR and the unmanaged C library libpurple.
+ *
+ * This is the second major commit of the code.
+ * Next things:
+ *  - A few of the .h files have anonymous parameter names (eg: void cat(int, int).
+ *    This program will need to assign these parameters names.
+ *  - Function pointers inside structs aren't translated correctly into C#.
+ *  - Two places there are specific-length arrays (eg: char hostname[256]). The parser
+ *    does not detect them as an array.
+ */
+
+using System;
+using System.Collections.Generic;
+using System.Runtime.InteropServices;
+
+namespace PurpleWrapper
+{
+
+	/*
+	 * File: buddyicon.h
+	 */
+	public class Buddyicon
+	{
+
+		/*
+		 * Function Name: purple_buddy_icon_ref
+		 * Function Type: PurpleBuddyIcon *
+		 * Function RawType: PurpleBuddyIcon
+		 * Function Category: PointerToUnknownStruct
+		 */
+		/*
+		 * PurpleBuddyIcon * purple_buddy_icon_ref(PurpleBuddyIcon * icon)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern IntPtr purple_buddy_icon_ref(IntPtr icon);
+
+		public static /* Resolved as PointerToUnknownStruct to PurpleBuddyIcon */ IntPtr BuddyIconRef(/* Resolved as PointerToUnknownStruct to PurpleBuddyIcon */ IntPtr icon)
+		{
+			/* Unable to process icon, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_buddy_icon_unref
+		 * Function Type: PurpleBuddyIcon *
+		 * Function RawType: PurpleBuddyIcon
+		 * Function Category: PointerToUnknownStruct
+		 */
+		/*
+		 * PurpleBuddyIcon * purple_buddy_icon_unref(PurpleBuddyIcon * icon)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern IntPtr purple_buddy_icon_unref(IntPtr icon);
+
+		public static /* Resolved as PointerToUnknownStruct to PurpleBuddyIcon */ IntPtr BuddyIconUnref(/* Resolved as PointerToUnknownStruct to PurpleBuddyIcon */ IntPtr icon)
+		{
+			/* Unable to process icon, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_buddy_icon_update
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_buddy_icon_update(PurpleBuddyIcon * icon)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_buddy_icon_update(IntPtr icon);
+
+		public static void BuddyIconUpdate(/* Resolved as PointerToUnknownStruct to PurpleBuddyIcon */ IntPtr icon)
+		{
+			/* Unable to process icon, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_buddy_icon_get_account
+		 * Function Type: PurpleAccount *
+		 * Function RawType: PurpleAccount
+		 * Function Category: PointerToKnownStruct
+		 */
+		/*
+		 * PurpleAccount * purple_buddy_icon_get_account(PurpleBuddyIcon * icon)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern IntPtr purple_buddy_icon_get_account(IntPtr icon);
+
+		public static PurpleAccount BuddyIconGetAccount(/* Resolved as PointerToUnknownStruct to PurpleBuddyIcon */ IntPtr icon)
+		{
+			/* Unable to process icon, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_buddy_icon_get_username
+		 * Function Type: char *
+		 * Function RawType: char
+		 * Function Category: Native
+		 */
+		/*
+		 * char * purple_buddy_icon_get_username(PurpleBuddyIcon * icon)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern string purple_buddy_icon_get_username(IntPtr icon);
+
+		public static string BuddyIconGetUsername(/* Resolved as PointerToUnknownStruct to PurpleBuddyIcon */ IntPtr icon)
+		{
+			/* Unable to process icon, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_buddy_icon_get_checksum
+		 * Function Type: char *
+		 * Function RawType: char
+		 * Function Category: Native
+		 */
+		/*
+		 * char * purple_buddy_icon_get_checksum(PurpleBuddyIcon * icon)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern string purple_buddy_icon_get_checksum(IntPtr icon);
+
+		public static string BuddyIconGetChecksum(/* Resolved as PointerToUnknownStruct to PurpleBuddyIcon */ IntPtr icon)
+		{
+			/* Unable to process icon, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_buddy_icon_get_data
+		 * Function Type: gconstpointer
+		 * Function RawType: gconstpointer
+		 * Function Category: VoidPointer
+		 */
+		/*
+		 * gconstpointer purple_buddy_icon_get_data(PurpleBuddyIcon * icon, size_t * len)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern IntPtr purple_buddy_icon_get_data(IntPtr icon, IntPtr len);
+
+		public static IntPtr BuddyIconGetData(/* Resolved as PointerToUnknownStruct to PurpleBuddyIcon */ IntPtr icon, /* Resolved as PointerToUnknownStruct to size_t */ IntPtr len)
+		{
+			/* Unable to process icon, a PointerToUnknownStruct. */
+			/* Unable to process len, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_buddy_icon_get_extension
+		 * Function Type: char *
+		 * Function RawType: char
+		 * Function Category: Native
+		 */
+		/*
+		 * char * purple_buddy_icon_get_extension(PurpleBuddyIcon * icon)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern string purple_buddy_icon_get_extension(IntPtr icon);
+
+		public static string BuddyIconGetExtension(/* Resolved as PointerToUnknownStruct to PurpleBuddyIcon */ IntPtr icon)
+		{
+			/* Unable to process icon, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_buddy_icon_get_full_path
+		 * Function Type: char *
+		 * Function RawType: char
+		 * Function Category: Native
+		 */
+		/*
+		 * char * purple_buddy_icon_get_full_path(PurpleBuddyIcon * icon)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern string purple_buddy_icon_get_full_path(IntPtr icon);
+
+		public static string BuddyIconGetFullPath(/* Resolved as PointerToUnknownStruct to PurpleBuddyIcon */ IntPtr icon)
+		{
+			/* Unable to process icon, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_buddy_icons_get_checksum_for_user
+		 * Function Type: char *
+		 * Function RawType: char
+		 * Function Category: Native
+		 */
+		/*
+		 * char * purple_buddy_icons_get_checksum_for_user(PurpleBuddy * buddy)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern string purple_buddy_icons_get_checksum_for_user(IntPtr buddy);
+
+		public static string BuddyIconsGetChecksumForUser(PurpleBuddy buddy)
+		{
+			return purple_buddy_icons_get_checksum_for_user(buddy.Reference);
+		}
+
+		/*
+		 * Function Name: purple_buddy_icons_find
+		 * Function Type: PurpleBuddyIcon *
+		 * Function RawType: PurpleBuddyIcon
+		 * Function Category: PointerToUnknownStruct
+		 */
+		/*
+		 * PurpleBuddyIcon * purple_buddy_icons_find(PurpleAccount * account, char * username)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern IntPtr purple_buddy_icons_find(IntPtr account, string username);
+
+		public static /* Resolved as PointerToUnknownStruct to PurpleBuddyIcon */ IntPtr BuddyIconsFind(PurpleAccount account, string username)
+		{
+			/* Unable to process the return value of purple_buddy_icons_find, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_buddy_icons_find_account_icon
+		 * Function Type: PurpleStoredImage *
+		 * Function RawType: PurpleStoredImage
+		 * Function Category: PointerToUnknownStruct
+		 */
+		/*
+		 * PurpleStoredImage * purple_buddy_icons_find_account_icon(PurpleAccount * account)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern IntPtr purple_buddy_icons_find_account_icon(IntPtr account);
+
+		public static /* Resolved as PointerToUnknownStruct to PurpleStoredImage */ IntPtr BuddyIconsFindAccountIcon(PurpleAccount account)
+		{
+			/* Unable to process the return value of purple_buddy_icons_find_account_icon, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_buddy_icons_get_account_icon_timestamp
+		 * Function Type: time_t
+		 * Function RawType: time_t
+		 * Function Category: DateTime
+		 */
+		/*
+		 * time_t purple_buddy_icons_get_account_icon_timestamp(PurpleAccount * account)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern ulong purple_buddy_icons_get_account_icon_timestamp(IntPtr account);
+
+		public static DateTime BuddyIconsGetAccountIconTimestamp(PurpleAccount account)
+		{
+			/* Unable to process the return value of purple_buddy_icons_get_account_icon_timestamp, a DateTime. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_buddy_icons_node_has_custom_icon
+		 * Function Type: gboolean
+		 * Function RawType: gboolean
+		 * Function Category: Native
+		 */
+		/*
+		 * gboolean purple_buddy_icons_node_has_custom_icon(PurpleBlistNode * node)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern bool purple_buddy_icons_node_has_custom_icon(IntPtr node);
+
+		public static bool BuddyIconsNodeHasCustomIcon(PurpleBlistNode node)
+		{
+			return purple_buddy_icons_node_has_custom_icon(node.Reference);
+		}
+
+		/*
+		 * Function Name: purple_buddy_icons_node_find_custom_icon
+		 * Function Type: PurpleStoredImage *
+		 * Function RawType: PurpleStoredImage
+		 * Function Category: PointerToUnknownStruct
+		 */
+		/*
+		 * PurpleStoredImage * purple_buddy_icons_node_find_custom_icon(PurpleBlistNode * node)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern IntPtr purple_buddy_icons_node_find_custom_icon(IntPtr node);
+
+		public static /* Resolved as PointerToUnknownStruct to PurpleStoredImage */ IntPtr BuddyIconsNodeFindCustomIcon(PurpleBlistNode node)
+		{
+			/* Unable to process the return value of purple_buddy_icons_node_find_custom_icon, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_buddy_icons_has_custom_icon
+		 * Function Type: gboolean
+		 * Function RawType: gboolean
+		 * Function Category: Native
+		 */
+		/*
+		 * gboolean purple_buddy_icons_has_custom_icon(PurpleContact * contact)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern bool purple_buddy_icons_has_custom_icon(IntPtr contact);
+
+		public static bool BuddyIconsHasCustomIcon(PurpleContact contact)
+		{
+			return purple_buddy_icons_has_custom_icon(contact.Reference);
+		}
+
+		/*
+		 * Function Name: purple_buddy_icons_find_custom_icon
+		 * Function Type: PurpleStoredImage *
+		 * Function RawType: PurpleStoredImage
+		 * Function Category: PointerToUnknownStruct
+		 */
+		/*
+		 * PurpleStoredImage * purple_buddy_icons_find_custom_icon(PurpleContact * contact)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern IntPtr purple_buddy_icons_find_custom_icon(IntPtr contact);
+
+		public static /* Resolved as PointerToUnknownStruct to PurpleStoredImage */ IntPtr BuddyIconsFindCustomIcon(PurpleContact contact)
+		{
+			/* Unable to process the return value of purple_buddy_icons_find_custom_icon, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_buddy_icons_set_caching
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_buddy_icons_set_caching(gboolean caching)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_buddy_icons_set_caching(bool caching);
+
+		public static void BuddyIconsSetCaching(bool caching)
+		{
+			purple_buddy_icons_set_caching(caching);
+		}
+
+		/*
+		 * Function Name: purple_buddy_icons_is_caching
+		 * Function Type: gboolean
+		 * Function RawType: gboolean
+		 * Function Category: Native
+		 */
+		/*
+		 * gboolean purple_buddy_icons_is_caching()
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern bool purple_buddy_icons_is_caching();
+
+		public static bool BuddyIconsIsCaching()
+		{
+			return purple_buddy_icons_is_caching();
+		}
+
+		/*
+		 * Function Name: purple_buddy_icons_set_cache_dir
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_buddy_icons_set_cache_dir(char * cache_dir)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_buddy_icons_set_cache_dir(string cache_dir);
+
+		public static void BuddyIconsSetCacheDir(string cache_dir)
+		{
+			purple_buddy_icons_set_cache_dir(cache_dir);
+		}
+
+		/*
+		 * Function Name: purple_buddy_icons_get_cache_dir
+		 * Function Type: char *
+		 * Function RawType: char
+		 * Function Category: Native
+		 */
+		/*
+		 * char * purple_buddy_icons_get_cache_dir()
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern string purple_buddy_icons_get_cache_dir();
+
+		public static string BuddyIconsGetCacheDir()
+		{
+			return purple_buddy_icons_get_cache_dir();
+		}
+
+		/*
+		 * Function Name: purple_buddy_icons_get_handle
+		 * Function Type: void *
+		 * Function RawType: void
+		 * Function Category: VoidPointer
+		 */
+		/*
+		 * void * purple_buddy_icons_get_handle()
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern IntPtr purple_buddy_icons_get_handle();
+
+		public static IntPtr BuddyIconsGetHandle()
+		{
+			return purple_buddy_icons_get_handle();
+		}
+
+		/*
+		 * Function Name: purple_buddy_icons_init
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_buddy_icons_init()
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_buddy_icons_init();
+
+		public static void BuddyIconsInit()
+		{
+			purple_buddy_icons_init();
+		}
+
+		/*
+		 * Function Name: purple_buddy_icons_uninit
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_buddy_icons_uninit()
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_buddy_icons_uninit();
+
+		public static void BuddyIconsUninit()
+		{
+			purple_buddy_icons_uninit();
+		}
+
+		/*
+		 * Function Name: purple_buddy_icon_get_scale_size
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_buddy_icon_get_scale_size(PurpleBuddyIconSpec * spec, int * width, int * height)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_buddy_icon_get_scale_size(IntPtr spec, IntPtr width, IntPtr height);
+
+		public static void BuddyIconGetScaleSize(PurpleBuddyIconSpec spec, /* Resolved as PointerToUnknownStruct to int */ IntPtr width, /* Resolved as PointerToUnknownStruct to int */ IntPtr height)
+		{
+			/* Unable to process width, a PointerToUnknownStruct. */
+			/* Unable to process height, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+	}
+}
+
============================================================
--- libpurple/wrapper/Certificate.cs	ba6b49b80f5f6ed7ce4bd89f3920f02cb1d92405
+++ libpurple/wrapper/Certificate.cs	ba6b49b80f5f6ed7ce4bd89f3920f02cb1d92405
@@ -0,0 +1,708 @@
+/* PurpleWrapper - A .NET (CLR) wrapper for libpurple
+ *
+ * Purple is the legal property of its developers, whose names are too numerous
+ * to list here.  Please refer to the COPYRIGHT file distributed with this
+ * source distribution.
+ *
+ * This program 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.
+ *
+ * This program 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 this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02111-1301  USA
+ */
+
+/*
+ * This file was auto-generated from the libpurple header files to provide a
+ * clean interface between .NET/CLR and the unmanaged C library libpurple.
+ *
+ * This is the second major commit of the code.
+ * Next things:
+ *  - A few of the .h files have anonymous parameter names (eg: void cat(int, int).
+ *    This program will need to assign these parameters names.
+ *  - Function pointers inside structs aren't translated correctly into C#.
+ *  - Two places there are specific-length arrays (eg: char hostname[256]). The parser
+ *    does not detect them as an array.
+ */
+
+using System;
+using System.Collections.Generic;
+using System.Runtime.InteropServices;
+
+namespace PurpleWrapper
+{
+
+	/*
+	 * File: certificate.h
+	 */
+	public class Certificate
+	{
+		public enum PurpleCertificateVerificationStatus
+		{
+			PURPLE_CERTIFICATE_INVALID = 0,
+			PURPLE_CERTIFICATE_VALID = 1
+		};
+
+		public delegate void PurpleCertificateVerifiedCallback(Certificate.PurpleCertificateVerificationStatus st, IntPtr userdata);
+
+		/*
+		 * Function Name: purple_certificate_copy
+		 * Function Type: PurpleCertificate *
+		 * Function RawType: PurpleCertificate
+		 * Function Category: PointerToKnownStruct
+		 */
+		/*
+		 * PurpleCertificate * purple_certificate_copy(PurpleCertificate * crt)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern IntPtr purple_certificate_copy(IntPtr crt);
+
+		public static PurpleCertificate Copy(PurpleCertificate crt)
+		{
+			return new PurpleCertificate(purple_certificate_copy(crt.Reference));
+		}
+
+		/*
+		 * Function Name: purple_certificate_copy_list
+		 * Function Type: GList *
+		 * Function RawType: GList
+		 * Function Category: PointerToGList
+		 */
+		/*
+		 * GList * purple_certificate_copy_list(GList * crt_list)
+		 * 
+		 * Could not generate a wrapper for purple_certificate_copy_list in file "certificate.h".
+		 * Message: Unknown inner-type of argument 0 of purple_certificate_copy_list
+		 */
+
+		/*
+		 * Function Name: purple_certificate_destroy
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_certificate_destroy(PurpleCertificate * crt)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_certificate_destroy(IntPtr crt);
+
+		public static void Destroy(PurpleCertificate crt)
+		{
+			purple_certificate_destroy(crt.Reference);
+		}
+
+		/*
+		 * Function Name: purple_certificate_destroy_list
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_certificate_destroy_list(GList * crt_list)
+		 * 
+		 * Could not generate a wrapper for purple_certificate_destroy_list in file "certificate.h".
+		 * Message: Unable to provide a type for GList as no function information was provided in code.
+		 */
+
+		/*
+		 * Function Name: purple_certificate_signed_by
+		 * Function Type: gboolean
+		 * Function RawType: gboolean
+		 * Function Category: Native
+		 */
+		/*
+		 * gboolean purple_certificate_signed_by(PurpleCertificate * crt, PurpleCertificate * issuer)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern bool purple_certificate_signed_by(IntPtr crt, IntPtr issuer);
+
+		public static bool SignedBy(PurpleCertificate crt, PurpleCertificate issuer)
+		{
+			return purple_certificate_signed_by(crt.Reference, issuer.Reference);
+		}
+
+		/*
+		 * Function Name: purple_certificate_check_signature_chain
+		 * Function Type: gboolean
+		 * Function RawType: gboolean
+		 * Function Category: Native
+		 */
+		/*
+		 * gboolean purple_certificate_check_signature_chain(GList * chain)
+		 * 
+		 * Could not generate a wrapper for purple_certificate_check_signature_chain in file "certificate.h".
+		 * Message: Unable to provide a type for GList as no function information was provided in code.
+		 */
+
+		/*
+		 * Function Name: purple_certificate_import
+		 * Function Type: PurpleCertificate *
+		 * Function RawType: PurpleCertificate
+		 * Function Category: PointerToKnownStruct
+		 */
+		/*
+		 * PurpleCertificate * purple_certificate_import(PurpleCertificateScheme * scheme, gchar * filename)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern IntPtr purple_certificate_import(IntPtr scheme, string filename);
+
+		public static PurpleCertificate Import(PurpleCertificateScheme scheme, string filename)
+		{
+			return new PurpleCertificate(purple_certificate_import(scheme.Reference, filename));
+		}
+
+		/*
+		 * Function Name: purple_certificate_export
+		 * Function Type: gboolean
+		 * Function RawType: gboolean
+		 * Function Category: Native
+		 */
+		/*
+		 * gboolean purple_certificate_export(gchar * filename, PurpleCertificate * crt)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern bool purple_certificate_export(string filename, IntPtr crt);
+
+		public static bool Export(string filename, PurpleCertificate crt)
+		{
+			return purple_certificate_export(filename, crt.Reference);
+		}
+
+		/*
+		 * Function Name: purple_certificate_get_fingerprint_sha1
+		 * Function Type: GByteArray *
+		 * Function RawType: GByteArray
+		 * Function Category: PointerToUnknownStruct
+		 */
+		/*
+		 * GByteArray * purple_certificate_get_fingerprint_sha1(PurpleCertificate * crt)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern IntPtr purple_certificate_get_fingerprint_sha1(IntPtr crt);
+
+		public static /* Resolved as PointerToUnknownStruct to GByteArray */ IntPtr GetFingerprintSha1(PurpleCertificate crt)
+		{
+			/* Unable to process the return value of purple_certificate_get_fingerprint_sha1, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_certificate_get_unique_id
+		 * Function Type: gchar *
+		 * Function RawType: gchar
+		 * Function Category: Native
+		 */
+		/*
+		 * gchar * purple_certificate_get_unique_id(PurpleCertificate * crt)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern string purple_certificate_get_unique_id(IntPtr crt);
+
+		public static string GetUniqueId(PurpleCertificate crt)
+		{
+			return purple_certificate_get_unique_id(crt.Reference);
+		}
+
+		/*
+		 * Function Name: purple_certificate_get_issuer_unique_id
+		 * Function Type: gchar *
+		 * Function RawType: gchar
+		 * Function Category: Native
+		 */
+		/*
+		 * gchar * purple_certificate_get_issuer_unique_id(PurpleCertificate * crt)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern string purple_certificate_get_issuer_unique_id(IntPtr crt);
+
+		public static string GetIssuerUniqueId(PurpleCertificate crt)
+		{
+			return purple_certificate_get_issuer_unique_id(crt.Reference);
+		}
+
+		/*
+		 * Function Name: purple_certificate_get_subject_name
+		 * Function Type: gchar *
+		 * Function RawType: gchar
+		 * Function Category: Native
+		 */
+		/*
+		 * gchar * purple_certificate_get_subject_name(PurpleCertificate * crt)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern string purple_certificate_get_subject_name(IntPtr crt);
+
+		public static string GetSubjectName(PurpleCertificate crt)
+		{
+			return purple_certificate_get_subject_name(crt.Reference);
+		}
+
+		/*
+		 * Function Name: purple_certificate_check_subject_name
+		 * Function Type: gboolean
+		 * Function RawType: gboolean
+		 * Function Category: Native
+		 */
+		/*
+		 * gboolean purple_certificate_check_subject_name(PurpleCertificate * crt, gchar * name)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern bool purple_certificate_check_subject_name(IntPtr crt, string name);
+
+		public static bool CheckSubjectName(PurpleCertificate crt, string name)
+		{
+			return purple_certificate_check_subject_name(crt.Reference, name);
+		}
+
+		/*
+		 * Function Name: purple_certificate_get_times
+		 * Function Type: gboolean
+		 * Function RawType: gboolean
+		 * Function Category: Native
+		 */
+		/*
+		 * gboolean purple_certificate_get_times(PurpleCertificate * crt, time_t * activation, time_t * expiration)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern bool purple_certificate_get_times(IntPtr crt, IntPtr activation, IntPtr expiration);
+
+		public static bool GetTimes(PurpleCertificate crt, /* Resolved as PointerToUnknownStruct to time_t */ IntPtr activation, /* Resolved as PointerToUnknownStruct to time_t */ IntPtr expiration)
+		{
+			/* Unable to process activation, a PointerToUnknownStruct. */
+			/* Unable to process expiration, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_certificate_pool_mkpath
+		 * Function Type: gchar *
+		 * Function RawType: gchar
+		 * Function Category: Native
+		 */
+		/*
+		 * gchar * purple_certificate_pool_mkpath(PurpleCertificatePool * pool, gchar * id)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern string purple_certificate_pool_mkpath(IntPtr pool, string id);
+
+		public static string PoolMkpath(PurpleCertificatePool pool, string id)
+		{
+			return purple_certificate_pool_mkpath(pool.Reference, id);
+		}
+
+		/*
+		 * Function Name: purple_certificate_pool_usable
+		 * Function Type: gboolean
+		 * Function RawType: gboolean
+		 * Function Category: Native
+		 */
+		/*
+		 * gboolean purple_certificate_pool_usable(PurpleCertificatePool * pool)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern bool purple_certificate_pool_usable(IntPtr pool);
+
+		public static bool PoolUsable(PurpleCertificatePool pool)
+		{
+			return purple_certificate_pool_usable(pool.Reference);
+		}
+
+		/*
+		 * Function Name: purple_certificate_pool_get_scheme
+		 * Function Type: PurpleCertificateScheme *
+		 * Function RawType: PurpleCertificateScheme
+		 * Function Category: PointerToKnownStruct
+		 */
+		/*
+		 * PurpleCertificateScheme * purple_certificate_pool_get_scheme(PurpleCertificatePool * pool)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern IntPtr purple_certificate_pool_get_scheme(IntPtr pool);
+
+		public static PurpleCertificateScheme PoolGetScheme(PurpleCertificatePool pool)
+		{
+			return new PurpleCertificateScheme(purple_certificate_pool_get_scheme(pool.Reference));
+		}
+
+		/*
+		 * Function Name: purple_certificate_pool_contains
+		 * Function Type: gboolean
+		 * Function RawType: gboolean
+		 * Function Category: Native
+		 */
+		/*
+		 * gboolean purple_certificate_pool_contains(PurpleCertificatePool * pool, gchar * id)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern bool purple_certificate_pool_contains(IntPtr pool, string id);
+
+		public static bool PoolContains(PurpleCertificatePool pool, string id)
+		{
+			return purple_certificate_pool_contains(pool.Reference, id);
+		}
+
+		/*
+		 * Function Name: purple_certificate_pool_retrieve
+		 * Function Type: PurpleCertificate *
+		 * Function RawType: PurpleCertificate
+		 * Function Category: PointerToKnownStruct
+		 */
+		/*
+		 * PurpleCertificate * purple_certificate_pool_retrieve(PurpleCertificatePool * pool, gchar * id)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern IntPtr purple_certificate_pool_retrieve(IntPtr pool, string id);
+
+		public static PurpleCertificate PoolRetrieve(PurpleCertificatePool pool, string id)
+		{
+			return new PurpleCertificate(purple_certificate_pool_retrieve(pool.Reference, id));
+		}
+
+		/*
+		 * Function Name: purple_certificate_pool_store
+		 * Function Type: gboolean
+		 * Function RawType: gboolean
+		 * Function Category: Native
+		 */
+		/*
+		 * gboolean purple_certificate_pool_store(PurpleCertificatePool * pool, gchar * id, PurpleCertificate * crt)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern bool purple_certificate_pool_store(IntPtr pool, string id, IntPtr crt);
+
+		public static bool PoolStore(PurpleCertificatePool pool, string id, PurpleCertificate crt)
+		{
+			return purple_certificate_pool_store(pool.Reference, id, crt.Reference);
+		}
+
+		/*
+		 * Function Name: purple_certificate_pool_delete
+		 * Function Type: gboolean
+		 * Function RawType: gboolean
+		 * Function Category: Native
+		 */
+		/*
+		 * gboolean purple_certificate_pool_delete(PurpleCertificatePool * pool, gchar * id)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern bool purple_certificate_pool_delete(IntPtr pool, string id);
+
+		public static bool PoolDelete(PurpleCertificatePool pool, string id)
+		{
+			return purple_certificate_pool_delete(pool.Reference, id);
+		}
+
+		/*
+		 * Function Name: purple_certificate_pool_get_idlist
+		 * Function Type: GList *
+		 * Function RawType: GList
+		 * Function Category: PointerToGList
+		 */
+		/*
+		 * GList * purple_certificate_pool_get_idlist(PurpleCertificatePool * pool)
+		 * 
+		 * Could not generate a wrapper for purple_certificate_pool_get_idlist in file "certificate.h".
+		 * Message: Unknown inner-type of argument 0 of purple_certificate_pool_get_idlist
+		 */
+
+		/*
+		 * Function Name: purple_certificate_pool_destroy_idlist
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_certificate_pool_destroy_idlist(GList * idlist)
+		 * 
+		 * Could not generate a wrapper for purple_certificate_pool_destroy_idlist in file "certificate.h".
+		 * Message: Unable to provide a type for GList as no function information was provided in code.
+		 */
+
+		/*
+		 * Function Name: purple_certificate_init
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_certificate_init()
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_certificate_init();
+
+		public static void Init()
+		{
+			purple_certificate_init();
+		}
+
+		/*
+		 * Function Name: purple_certificate_uninit
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_certificate_uninit()
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_certificate_uninit();
+
+		public static void Uninit()
+		{
+			purple_certificate_uninit();
+		}
+
+		/*
+		 * Function Name: purple_certificate_get_handle
+		 * Function Type: gpointer
+		 * Function RawType: gpointer
+		 * Function Category: VoidPointer
+		 */
+		/*
+		 * gpointer purple_certificate_get_handle()
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern IntPtr purple_certificate_get_handle();
+
+		public static IntPtr GetHandle()
+		{
+			return purple_certificate_get_handle();
+		}
+
+		/*
+		 * Function Name: purple_certificate_find_scheme
+		 * Function Type: PurpleCertificateScheme *
+		 * Function RawType: PurpleCertificateScheme
+		 * Function Category: PointerToKnownStruct
+		 */
+		/*
+		 * PurpleCertificateScheme * purple_certificate_find_scheme(gchar * name)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern IntPtr purple_certificate_find_scheme(string name);
+
+		public static PurpleCertificateScheme FindScheme(string name)
+		{
+			return new PurpleCertificateScheme(purple_certificate_find_scheme(name));
+		}
+
+		/*
+		 * Function Name: purple_certificate_get_schemes
+		 * Function Type: GList *
+		 * Function RawType: GList
+		 * Function Category: PointerToGList
+		 */
+		/*
+		 * GList * purple_certificate_get_schemes()
+		 * 
+		 * Could not generate a wrapper for purple_certificate_get_schemes in file "certificate.h".
+		 * Message: Unknown inner-type of argument 0 of purple_certificate_get_schemes
+		 */
+
+		/*
+		 * Function Name: purple_certificate_register_scheme
+		 * Function Type: gboolean
+		 * Function RawType: gboolean
+		 * Function Category: Native
+		 */
+		/*
+		 * gboolean purple_certificate_register_scheme(PurpleCertificateScheme * scheme)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern bool purple_certificate_register_scheme(IntPtr scheme);
+
+		public static bool RegisterScheme(PurpleCertificateScheme scheme)
+		{
+			return purple_certificate_register_scheme(scheme.Reference);
+		}
+
+		/*
+		 * Function Name: purple_certificate_unregister_scheme
+		 * Function Type: gboolean
+		 * Function RawType: gboolean
+		 * Function Category: Native
+		 */
+		/*
+		 * gboolean purple_certificate_unregister_scheme(PurpleCertificateScheme * scheme)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern bool purple_certificate_unregister_scheme(IntPtr scheme);
+
+		public static bool UnregisterScheme(PurpleCertificateScheme scheme)
+		{
+			return purple_certificate_unregister_scheme(scheme.Reference);
+		}
+
+		/*
+		 * Function Name: purple_certificate_find_verifier
+		 * Function Type: PurpleCertificateVerifier *
+		 * Function RawType: PurpleCertificateVerifier
+		 * Function Category: PointerToKnownStruct
+		 */
+		/*
+		 * PurpleCertificateVerifier * purple_certificate_find_verifier(gchar * scheme_name, gchar * ver_name)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern IntPtr purple_certificate_find_verifier(string scheme_name, string ver_name);
+
+		public static PurpleCertificateVerifier FindVerifier(string scheme_name, string ver_name)
+		{
+			return new PurpleCertificateVerifier(purple_certificate_find_verifier(scheme_name, ver_name));
+		}
+
+		/*
+		 * Function Name: purple_certificate_get_verifiers
+		 * Function Type: GList *
+		 * Function RawType: GList
+		 * Function Category: PointerToGList
+		 */
+		/*
+		 * GList * purple_certificate_get_verifiers()
+		 * 
+		 * Could not generate a wrapper for purple_certificate_get_verifiers in file "certificate.h".
+		 * Message: Unknown inner-type of argument 0 of purple_certificate_get_verifiers
+		 */
+
+		/*
+		 * Function Name: purple_certificate_register_verifier
+		 * Function Type: gboolean
+		 * Function RawType: gboolean
+		 * Function Category: Native
+		 */
+		/*
+		 * gboolean purple_certificate_register_verifier(PurpleCertificateVerifier * vr)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern bool purple_certificate_register_verifier(IntPtr vr);
+
+		public static bool RegisterVerifier(PurpleCertificateVerifier vr)
+		{
+			return purple_certificate_register_verifier(vr.Reference);
+		}
+
+		/*
+		 * Function Name: purple_certificate_unregister_verifier
+		 * Function Type: gboolean
+		 * Function RawType: gboolean
+		 * Function Category: Native
+		 */
+		/*
+		 * gboolean purple_certificate_unregister_verifier(PurpleCertificateVerifier * vr)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern bool purple_certificate_unregister_verifier(IntPtr vr);
+
+		public static bool UnregisterVerifier(PurpleCertificateVerifier vr)
+		{
+			return purple_certificate_unregister_verifier(vr.Reference);
+		}
+
+		/*
+		 * Function Name: purple_certificate_find_pool
+		 * Function Type: PurpleCertificatePool *
+		 * Function RawType: PurpleCertificatePool
+		 * Function Category: PointerToKnownStruct
+		 */
+		/*
+		 * PurpleCertificatePool * purple_certificate_find_pool(gchar * scheme_name, gchar * pool_name)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern IntPtr purple_certificate_find_pool(string scheme_name, string pool_name);
+
+		public static PurpleCertificatePool FindPool(string scheme_name, string pool_name)
+		{
+			return new PurpleCertificatePool(purple_certificate_find_pool(scheme_name, pool_name));
+		}
+
+		/*
+		 * Function Name: purple_certificate_get_pools
+		 * Function Type: GList *
+		 * Function RawType: GList
+		 * Function Category: PointerToGList
+		 */
+		/*
+		 * GList * purple_certificate_get_pools()
+		 * 
+		 * Could not generate a wrapper for purple_certificate_get_pools in file "certificate.h".
+		 * Message: Unknown inner-type of argument 0 of purple_certificate_get_pools
+		 */
+
+		/*
+		 * Function Name: purple_certificate_register_pool
+		 * Function Type: gboolean
+		 * Function RawType: gboolean
+		 * Function Category: Native
+		 */
+		/*
+		 * gboolean purple_certificate_register_pool(PurpleCertificatePool * pool)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern bool purple_certificate_register_pool(IntPtr pool);
+
+		public static bool RegisterPool(PurpleCertificatePool pool)
+		{
+			return purple_certificate_register_pool(pool.Reference);
+		}
+
+		/*
+		 * Function Name: purple_certificate_unregister_pool
+		 * Function Type: gboolean
+		 * Function RawType: gboolean
+		 * Function Category: Native
+		 */
+		/*
+		 * gboolean purple_certificate_unregister_pool(PurpleCertificatePool * pool)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern bool purple_certificate_unregister_pool(IntPtr pool);
+
+		public static bool UnregisterPool(PurpleCertificatePool pool)
+		{
+			return purple_certificate_unregister_pool(pool.Reference);
+		}
+
+		/*
+		 * Function Name: purple_certificate_display_x509
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_certificate_display_x509(PurpleCertificate * crt)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_certificate_display_x509(IntPtr crt);
+
+		public static void DisplayX509(PurpleCertificate crt)
+		{
+			purple_certificate_display_x509(crt.Reference);
+		}
+
+		/*
+		 * Function Name: purple_certificate_add_ca_search_path
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_certificate_add_ca_search_path(char * path)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_certificate_add_ca_search_path(string path);
+
+		public static void AddCaSearchPath(string path)
+		{
+			purple_certificate_add_ca_search_path(path);
+		}
+
+	}
+}
+
============================================================
--- libpurple/wrapper/Cipher.cs	4edc904a0224254c28500cfce282318811809e1b
+++ libpurple/wrapper/Cipher.cs	4edc904a0224254c28500cfce282318811809e1b
@@ -0,0 +1,563 @@
+/* PurpleWrapper - A .NET (CLR) wrapper for libpurple
+ *
+ * Purple is the legal property of its developers, whose names are too numerous
+ * to list here.  Please refer to the COPYRIGHT file distributed with this
+ * source distribution.
+ *
+ * This program 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.
+ *
+ * This program 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 this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02111-1301  USA
+ */
+
+/*
+ * This file was auto-generated from the libpurple header files to provide a
+ * clean interface between .NET/CLR and the unmanaged C library libpurple.
+ *
+ * This is the second major commit of the code.
+ * Next things:
+ *  - A few of the .h files have anonymous parameter names (eg: void cat(int, int).
+ *    This program will need to assign these parameters names.
+ *  - Function pointers inside structs aren't translated correctly into C#.
+ *  - Two places there are specific-length arrays (eg: char hostname[256]). The parser
+ *    does not detect them as an array.
+ */
+
+using System;
+using System.Collections.Generic;
+using System.Runtime.InteropServices;
+
+namespace PurpleWrapper
+{
+
+	/*
+	 * File: cipher.h
+	 */
+	public class Cipher
+	{
+		public enum PurpleCipherBatchMode
+		{
+			PURPLE_CIPHER_BATCH_MODE_ECB,
+			PURPLE_CIPHER_BATCH_MODE_CBC
+		};
+
+		public enum PurpleCipherCaps
+		{
+			PURPLE_CIPHER_CAPS_SET_OPT = 1 << 1,
+			PURPLE_CIPHER_CAPS_GET_OPT = 1 << 2,
+			PURPLE_CIPHER_CAPS_INIT = 1 << 3,
+			PURPLE_CIPHER_CAPS_RESET = 1 << 4,
+			PURPLE_CIPHER_CAPS_UNINIT = 1 << 5,
+			PURPLE_CIPHER_CAPS_SET_IV = 1 << 6,
+			PURPLE_CIPHER_CAPS_APPEND = 1 << 7,
+			PURPLE_CIPHER_CAPS_DIGEST = 1 << 8,
+			PURPLE_CIPHER_CAPS_ENCRYPT = 1 << 9,
+			PURPLE_CIPHER_CAPS_DECRYPT = 1 << 10,
+			PURPLE_CIPHER_CAPS_SET_SALT = 1 << 11,
+			PURPLE_CIPHER_CAPS_GET_SALT_SIZE = 1 << 12,
+			PURPLE_CIPHER_CAPS_SET_KEY = 1 << 13,
+			PURPLE_CIPHER_CAPS_GET_KEY_SIZE = 1 << 14,
+			PURPLE_CIPHER_CAPS_SET_BATCH_MODE = 1 << 15,
+			PURPLE_CIPHER_CAPS_GET_BATCH_MODE = 1 << 16,
+			PURPLE_CIPHER_CAPS_GET_BLOCK_SIZE = 1 << 17,
+			PURPLE_CIPHER_CAPS_SET_KEY_WITH_LEN = 1 << 18,
+			PURPLE_CIPHER_CAPS_UNKNOWN = 1 << 19
+		};
+
+
+		/*
+		 * Function Name: purple_cipher_get_name
+		 * Function Type: gchar *
+		 * Function RawType: gchar
+		 * Function Category: Native
+		 */
+		/*
+		 * gchar * purple_cipher_get_name(PurpleCipher * cipher)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern string purple_cipher_get_name(IntPtr cipher);
+
+		public static string GetName(/* Resolved as PointerToUnknownStruct to PurpleCipher */ IntPtr cipher)
+		{
+			/* Unable to process cipher, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_cipher_get_capabilities
+		 * Function Type: guint
+		 * Function RawType: guint
+		 * Function Category: Native
+		 */
+		/*
+		 * guint purple_cipher_get_capabilities(PurpleCipher * cipher)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern uint purple_cipher_get_capabilities(IntPtr cipher);
+
+		public static uint GetCapabilities(/* Resolved as PointerToUnknownStruct to PurpleCipher */ IntPtr cipher)
+		{
+			/* Unable to process cipher, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_ciphers_find_cipher
+		 * Function Type: PurpleCipher *
+		 * Function RawType: PurpleCipher
+		 * Function Category: PointerToUnknownStruct
+		 */
+		/*
+		 * PurpleCipher * purple_ciphers_find_cipher(gchar * name)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern IntPtr purple_ciphers_find_cipher(string name);
+
+		public static /* Resolved as PointerToUnknownStruct to PurpleCipher */ IntPtr CiphersFindCipher(string name)
+		{
+			/* Unable to process the return value of purple_ciphers_find_cipher, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_ciphers_register_cipher
+		 * Function Type: PurpleCipher *
+		 * Function RawType: PurpleCipher
+		 * Function Category: PointerToUnknownStruct
+		 */
+		/*
+		 * PurpleCipher * purple_ciphers_register_cipher(gchar * name, PurpleCipherOps * ops)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern IntPtr purple_ciphers_register_cipher(string name, IntPtr ops);
+
+		public static /* Resolved as PointerToUnknownStruct to PurpleCipher */ IntPtr CiphersRegisterCipher(string name, PurpleCipherOps ops)
+		{
+			/* Unable to process the return value of purple_ciphers_register_cipher, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_ciphers_unregister_cipher
+		 * Function Type: gboolean
+		 * Function RawType: gboolean
+		 * Function Category: Native
+		 */
+		/*
+		 * gboolean purple_ciphers_unregister_cipher(PurpleCipher * cipher)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern bool purple_ciphers_unregister_cipher(IntPtr cipher);
+
+		public static bool CiphersUnregisterCipher(/* Resolved as PointerToUnknownStruct to PurpleCipher */ IntPtr cipher)
+		{
+			/* Unable to process cipher, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_ciphers_get_ciphers
+		 * Function Type: GList *
+		 * Function RawType: GList
+		 * Function Category: PointerToGList
+		 */
+		/*
+		 * GList * purple_ciphers_get_ciphers()
+		 * 
+		 * Could not generate a wrapper for purple_ciphers_get_ciphers in file "cipher.h".
+		 * Message: Unknown inner-type of argument 0 of purple_ciphers_get_ciphers
+		 */
+
+		/*
+		 * Function Name: purple_ciphers_get_handle
+		 * Function Type: gpointer
+		 * Function RawType: gpointer
+		 * Function Category: VoidPointer
+		 */
+		/*
+		 * gpointer purple_ciphers_get_handle()
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern IntPtr purple_ciphers_get_handle();
+
+		public static IntPtr CiphersGetHandle()
+		{
+			return purple_ciphers_get_handle();
+		}
+
+		/*
+		 * Function Name: purple_ciphers_init
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_ciphers_init()
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_ciphers_init();
+
+		public static void CiphersInit()
+		{
+			purple_ciphers_init();
+		}
+
+		/*
+		 * Function Name: purple_ciphers_uninit
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_ciphers_uninit()
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_ciphers_uninit();
+
+		public static void CiphersUninit()
+		{
+			purple_ciphers_uninit();
+		}
+
+		/*
+		 * Function Name: purple_cipher_context_set_option
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_cipher_context_set_option(PurpleCipherContext * context, gchar * name, gpointer value)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_cipher_context_set_option(IntPtr context, string name, IntPtr value);
+
+		public static void ContextSetOption(/* Resolved as PointerToUnknownStruct to PurpleCipherContext */ IntPtr context, string name, IntPtr value)
+		{
+			/* Unable to process context, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_cipher_context_get_option
+		 * Function Type: gpointer
+		 * Function RawType: gpointer
+		 * Function Category: VoidPointer
+		 */
+		/*
+		 * gpointer purple_cipher_context_get_option(PurpleCipherContext * context, gchar * name)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern IntPtr purple_cipher_context_get_option(IntPtr context, string name);
+
+		public static IntPtr ContextGetOption(/* Resolved as PointerToUnknownStruct to PurpleCipherContext */ IntPtr context, string name)
+		{
+			/* Unable to process context, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_cipher_context_new
+		 * Function Type: PurpleCipherContext *
+		 * Function RawType: PurpleCipherContext
+		 * Function Category: PointerToUnknownStruct
+		 */
+		/*
+		 * PurpleCipherContext * purple_cipher_context_new(PurpleCipher * cipher, void * extra)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern IntPtr purple_cipher_context_new(IntPtr cipher, IntPtr extra);
+
+		public static /* Resolved as PointerToUnknownStruct to PurpleCipherContext */ IntPtr ContextNew(/* Resolved as PointerToUnknownStruct to PurpleCipher */ IntPtr cipher, IntPtr extra)
+		{
+			/* Unable to process cipher, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_cipher_context_new_by_name
+		 * Function Type: PurpleCipherContext *
+		 * Function RawType: PurpleCipherContext
+		 * Function Category: PointerToUnknownStruct
+		 */
+		/*
+		 * PurpleCipherContext * purple_cipher_context_new_by_name(gchar * name, void * extra)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern IntPtr purple_cipher_context_new_by_name(string name, IntPtr extra);
+
+		public static /* Resolved as PointerToUnknownStruct to PurpleCipherContext */ IntPtr ContextNewByName(string name, IntPtr extra)
+		{
+			/* Unable to process the return value of purple_cipher_context_new_by_name, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_cipher_context_reset
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_cipher_context_reset(PurpleCipherContext * context, gpointer extra)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_cipher_context_reset(IntPtr context, IntPtr extra);
+
+		public static void ContextReset(/* Resolved as PointerToUnknownStruct to PurpleCipherContext */ IntPtr context, IntPtr extra)
+		{
+			/* Unable to process context, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_cipher_context_destroy
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_cipher_context_destroy(PurpleCipherContext * context)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_cipher_context_destroy(IntPtr context);
+
+		public static void ContextDestroy(/* Resolved as PointerToUnknownStruct to PurpleCipherContext */ IntPtr context)
+		{
+			/* Unable to process context, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_cipher_context_set_iv
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_cipher_context_set_iv(PurpleCipherContext * context, guchar * iv, size_t len)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_cipher_context_set_iv(IntPtr context, IntPtr iv, ulong len);
+
+		public static void ContextSetIv(/* Resolved as PointerToUnknownStruct to PurpleCipherContext */ IntPtr context, /* Resolved as PointerToUnknownStruct to guchar */ IntPtr iv, ulong len)
+		{
+			/* Unable to process context, a PointerToUnknownStruct. */
+			/* Unable to process iv, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_cipher_context_append
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_cipher_context_append(PurpleCipherContext * context, guchar * data, size_t len)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_cipher_context_append(IntPtr context, IntPtr data, ulong len);
+
+		public static void ContextAppend(/* Resolved as PointerToUnknownStruct to PurpleCipherContext */ IntPtr context, /* Resolved as PointerToUnknownStruct to guchar */ IntPtr data, ulong len)
+		{
+			/* Unable to process context, a PointerToUnknownStruct. */
+			/* Unable to process data, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_cipher_context_set_salt
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_cipher_context_set_salt(PurpleCipherContext * context, guchar * salt)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_cipher_context_set_salt(IntPtr context, IntPtr salt);
+
+		public static void ContextSetSalt(/* Resolved as PointerToUnknownStruct to PurpleCipherContext */ IntPtr context, /* Resolved as PointerToUnknownStruct to guchar */ IntPtr salt)
+		{
+			/* Unable to process context, a PointerToUnknownStruct. */
+			/* Unable to process salt, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_cipher_context_get_salt_size
+		 * Function Type: size_t
+		 * Function RawType: size_t
+		 * Function Category: Native
+		 */
+		/*
+		 * size_t purple_cipher_context_get_salt_size(PurpleCipherContext * context)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern ulong purple_cipher_context_get_salt_size(IntPtr context);
+
+		public static ulong ContextGetSaltSize(/* Resolved as PointerToUnknownStruct to PurpleCipherContext */ IntPtr context)
+		{
+			/* Unable to process context, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_cipher_context_set_key
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_cipher_context_set_key(PurpleCipherContext * context, guchar * key)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_cipher_context_set_key(IntPtr context, IntPtr key);
+
+		public static void ContextSetKey(/* Resolved as PointerToUnknownStruct to PurpleCipherContext */ IntPtr context, /* Resolved as PointerToUnknownStruct to guchar */ IntPtr key)
+		{
+			/* Unable to process context, a PointerToUnknownStruct. */
+			/* Unable to process key, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_cipher_context_get_key_size
+		 * Function Type: size_t
+		 * Function RawType: size_t
+		 * Function Category: Native
+		 */
+		/*
+		 * size_t purple_cipher_context_get_key_size(PurpleCipherContext * context)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern ulong purple_cipher_context_get_key_size(IntPtr context);
+
+		public static ulong ContextGetKeySize(/* Resolved as PointerToUnknownStruct to PurpleCipherContext */ IntPtr context)
+		{
+			/* Unable to process context, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_cipher_context_set_batch_mode
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_cipher_context_set_batch_mode(PurpleCipherContext * context, PurpleCipherBatchMode mode)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_cipher_context_set_batch_mode(IntPtr context, Cipher.PurpleCipherBatchMode mode);
+
+		public static void ContextSetBatchMode(/* Resolved as PointerToUnknownStruct to PurpleCipherContext */ IntPtr context, Cipher.PurpleCipherBatchMode mode)
+		{
+			/* Unable to process context, a PointerToUnknownStruct. */
+			/* Unable to process mode, a KnownEnum. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_cipher_context_get_batch_mode
+		 * Function Type: PurpleCipherBatchMode
+		 * Function RawType: PurpleCipherBatchMode
+		 * Function Category: KnownEnum
+		 */
+		/*
+		 * PurpleCipherBatchMode purple_cipher_context_get_batch_mode(PurpleCipherContext * context)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern Cipher.PurpleCipherBatchMode purple_cipher_context_get_batch_mode(IntPtr context);
+
+		public static Cipher.PurpleCipherBatchMode ContextGetBatchMode(/* Resolved as PointerToUnknownStruct to PurpleCipherContext */ IntPtr context)
+		{
+			/* Unable to process context, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_cipher_context_get_block_size
+		 * Function Type: size_t
+		 * Function RawType: size_t
+		 * Function Category: Native
+		 */
+		/*
+		 * size_t purple_cipher_context_get_block_size(PurpleCipherContext * context)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern ulong purple_cipher_context_get_block_size(IntPtr context);
+
+		public static ulong ContextGetBlockSize(/* Resolved as PointerToUnknownStruct to PurpleCipherContext */ IntPtr context)
+		{
+			/* Unable to process context, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_cipher_context_set_key_with_len
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_cipher_context_set_key_with_len(PurpleCipherContext * context, guchar * key, size_t len)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_cipher_context_set_key_with_len(IntPtr context, IntPtr key, ulong len);
+
+		public static void ContextSetKeyWithLen(/* Resolved as PointerToUnknownStruct to PurpleCipherContext */ IntPtr context, /* Resolved as PointerToUnknownStruct to guchar */ IntPtr key, ulong len)
+		{
+			/* Unable to process context, a PointerToUnknownStruct. */
+			/* Unable to process key, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_cipher_context_set_data
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_cipher_context_set_data(PurpleCipherContext * context, gpointer data)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_cipher_context_set_data(IntPtr context, IntPtr data);
+
+		public static void ContextSetData(/* Resolved as PointerToUnknownStruct to PurpleCipherContext */ IntPtr context, IntPtr data)
+		{
+			/* Unable to process context, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_cipher_context_get_data
+		 * Function Type: gpointer
+		 * Function RawType: gpointer
+		 * Function Category: VoidPointer
+		 */
+		/*
+		 * gpointer purple_cipher_context_get_data(PurpleCipherContext * context)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern IntPtr purple_cipher_context_get_data(IntPtr context);
+
+		public static IntPtr ContextGetData(/* Resolved as PointerToUnknownStruct to PurpleCipherContext */ IntPtr context)
+		{
+			/* Unable to process context, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+	}
+}
+
============================================================
--- libpurple/wrapper/Circbuffer.cs	24520387f519397679c2e7e44b5fa8c948f340b4
+++ libpurple/wrapper/Circbuffer.cs	24520387f519397679c2e7e44b5fa8c948f340b4
@@ -0,0 +1,135 @@
+/* PurpleWrapper - A .NET (CLR) wrapper for libpurple
+ *
+ * Purple is the legal property of its developers, whose names are too numerous
+ * to list here.  Please refer to the COPYRIGHT file distributed with this
+ * source distribution.
+ *
+ * This program 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.
+ *
+ * This program 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 this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02111-1301  USA
+ */
+
+/*
+ * This file was auto-generated from the libpurple header files to provide a
+ * clean interface between .NET/CLR and the unmanaged C library libpurple.
+ *
+ * This is the second major commit of the code.
+ * Next things:
+ *  - A few of the .h files have anonymous parameter names (eg: void cat(int, int).
+ *    This program will need to assign these parameters names.
+ *  - Function pointers inside structs aren't translated correctly into C#.
+ *  - Two places there are specific-length arrays (eg: char hostname[256]). The parser
+ *    does not detect them as an array.
+ */
+
+using System;
+using System.Collections.Generic;
+using System.Runtime.InteropServices;
+
+namespace PurpleWrapper
+{
+
+	/*
+	 * File: circbuffer.h
+	 */
+	public class Circbuffer
+	{
+
+		/*
+		 * Function Name: purple_circ_buffer_new
+		 * Function Type: PurpleCircBuffer *
+		 * Function RawType: PurpleCircBuffer
+		 * Function Category: PointerToKnownStruct
+		 */
+		/*
+		 * PurpleCircBuffer * purple_circ_buffer_new(gsize growsize)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern IntPtr purple_circ_buffer_new(ulong growsize);
+
+		public static PurpleCircBuffer CircBufferNew(ulong growsize)
+		{
+			return new PurpleCircBuffer(purple_circ_buffer_new(growsize));
+		}
+
+		/*
+		 * Function Name: purple_circ_buffer_destroy
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_circ_buffer_destroy(PurpleCircBuffer * buf)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_circ_buffer_destroy(IntPtr buf);
+
+		public static void CircBufferDestroy(PurpleCircBuffer buf)
+		{
+			purple_circ_buffer_destroy(buf.Reference);
+		}
+
+		/*
+		 * Function Name: purple_circ_buffer_append
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_circ_buffer_append(PurpleCircBuffer * buf, gconstpointer src, gsize len)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_circ_buffer_append(IntPtr buf, IntPtr src, ulong len);
+
+		public static void CircBufferAppend(PurpleCircBuffer buf, IntPtr src, ulong len)
+		{
+			purple_circ_buffer_append(buf.Reference, src, len);
+		}
+
+		/*
+		 * Function Name: purple_circ_buffer_get_max_read
+		 * Function Type: gsize
+		 * Function RawType: gsize
+		 * Function Category: Native
+		 */
+		/*
+		 * gsize purple_circ_buffer_get_max_read(PurpleCircBuffer * buf)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern ulong purple_circ_buffer_get_max_read(IntPtr buf);
+
+		public static ulong CircBufferGetMaxRead(PurpleCircBuffer buf)
+		{
+			return purple_circ_buffer_get_max_read(buf.Reference);
+		}
+
+		/*
+		 * Function Name: purple_circ_buffer_mark_read
+		 * Function Type: gboolean
+		 * Function RawType: gboolean
+		 * Function Category: Native
+		 */
+		/*
+		 * gboolean purple_circ_buffer_mark_read(PurpleCircBuffer * buf, gsize len)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern bool purple_circ_buffer_mark_read(IntPtr buf, ulong len);
+
+		public static bool CircBufferMarkRead(PurpleCircBuffer buf, ulong len)
+		{
+			return purple_circ_buffer_mark_read(buf.Reference, len);
+		}
+
+	}
+}
+
============================================================
--- libpurple/wrapper/Cmds.cs	23568b8957912fd945161ee2d6c60f959e19e1cf
+++ libpurple/wrapper/Cmds.cs	23568b8957912fd945161ee2d6c60f959e19e1cf
@@ -0,0 +1,182 @@
+/* PurpleWrapper - A .NET (CLR) wrapper for libpurple
+ *
+ * Purple is the legal property of its developers, whose names are too numerous
+ * to list here.  Please refer to the COPYRIGHT file distributed with this
+ * source distribution.
+ *
+ * This program 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.
+ *
+ * This program 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 this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02111-1301  USA
+ */
+
+/*
+ * This file was auto-generated from the libpurple header files to provide a
+ * clean interface between .NET/CLR and the unmanaged C library libpurple.
+ *
+ * This is the second major commit of the code.
+ * Next things:
+ *  - A few of the .h files have anonymous parameter names (eg: void cat(int, int).
+ *    This program will need to assign these parameters names.
+ *  - Function pointers inside structs aren't translated correctly into C#.
+ *  - Two places there are specific-length arrays (eg: char hostname[256]). The parser
+ *    does not detect them as an array.
+ */
+
+using System;
+using System.Collections.Generic;
+using System.Runtime.InteropServices;
+
+namespace PurpleWrapper
+{
+
+	/*
+	 * File: cmds.h
+	 */
+	public class Cmds
+	{
+		public enum PurpleCmdStatus
+		{
+			PURPLE_CMD_STATUS_OK,
+			PURPLE_CMD_STATUS_FAILED,
+			PURPLE_CMD_STATUS_NOT_FOUND,
+			PURPLE_CMD_STATUS_WRONG_ARGS,
+			PURPLE_CMD_STATUS_WRONG_PRPL,
+			PURPLE_CMD_STATUS_WRONG_TYPE
+		};
+
+		public enum PurpleCmdRet
+		{
+			PURPLE_CMD_RET_OK,
+			PURPLE_CMD_RET_FAILED,
+			PURPLE_CMD_RET_CONTINUE
+		};
+
+		public enum PurpleCmdPriority
+		{
+			PURPLE_CMD_P_VERY_LOW = -1000,
+			PURPLE_CMD_P_LOW = 0,
+			PURPLE_CMD_P_DEFAULT = 1000,
+			PURPLE_CMD_P_PRPL = 2000,
+			PURPLE_CMD_P_PLUGIN = 3000,
+			PURPLE_CMD_P_ALIAS = 4000,
+			PURPLE_CMD_P_HIGH = 5000,
+			PURPLE_CMD_P_VERY_HIGH = 6000
+		};
+
+		public enum PurpleCmdFlag
+		{
+			PURPLE_CMD_FLAG_IM = 0x01,
+			PURPLE_CMD_FLAG_CHAT = 0x02,
+			PURPLE_CMD_FLAG_PRPL_ONLY = 0x04,
+			PURPLE_CMD_FLAG_ALLOW_WRONG_ARGS = 0x08
+		};
+
+		public delegate Cmds.PurpleCmdRet PurpleCmdFunc(IntPtr _PurpleWrapper_arg0, string cmd, IntPtr args, IntPtr error, IntPtr data);
+
+		/*
+		 * Function Name: purple_cmd_unregister
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_cmd_unregister(PurpleCmdId id)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_cmd_unregister(uint id);
+
+		public static void CmdUnregister(uint id)
+		{
+			purple_cmd_unregister(id);
+		}
+
+		/*
+		 * Function Name: purple_cmd_list
+		 * Function Type: GList *
+		 * Function RawType: GList
+		 * Function Category: PointerToGList
+		 */
+		/*
+		 * GList * purple_cmd_list(PurpleConversation * conv)
+		 * 
+		 * Could not generate a wrapper for purple_cmd_list in file "cmds.h".
+		 * Message: Unknown inner-type of argument 0 of purple_cmd_list
+		 */
+
+		/*
+		 * Function Name: purple_cmd_help
+		 * Function Type: GList *
+		 * Function RawType: GList
+		 * Function Category: PointerToGList
+		 */
+		/*
+		 * GList * purple_cmd_help(PurpleConversation * conv, gchar * cmd)
+		 * 
+		 * Could not generate a wrapper for purple_cmd_help in file "cmds.h".
+		 * Message: Unknown inner-type of argument 0 of purple_cmd_help
+		 */
+
+		/*
+		 * Function Name: purple_cmds_get_handle
+		 * Function Type: gpointer
+		 * Function RawType: gpointer
+		 * Function Category: VoidPointer
+		 */
+		/*
+		 * gpointer purple_cmds_get_handle()
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern IntPtr purple_cmds_get_handle();
+
+		public static IntPtr GetHandle()
+		{
+			return purple_cmds_get_handle();
+		}
+
+		/*
+		 * Function Name: purple_cmds_init
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_cmds_init()
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_cmds_init();
+
+		public static void Init()
+		{
+			purple_cmds_init();
+		}
+
+		/*
+		 * Function Name: purple_cmds_uninit
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_cmds_uninit()
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_cmds_uninit();
+
+		public static void Uninit()
+		{
+			purple_cmds_uninit();
+		}
+
+	}
+}
+
============================================================
--- libpurple/wrapper/Config.cs	8893673e392007a9ad1a26051bd945bcee99a762
+++ libpurple/wrapper/Config.cs	8893673e392007a9ad1a26051bd945bcee99a762
@@ -0,0 +1,67 @@
+/* PurpleWrapper - A .NET (CLR) wrapper for libpurple
+ *
+ * Purple is the legal property of its developers, whose names are too numerous
+ * to list here.  Please refer to the COPYRIGHT file distributed with this
+ * source distribution.
+ *
+ * This program 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.
+ *
+ * This program 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 this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02111-1301  USA
+ */
+
+/*
+ * This file was auto-generated from the libpurple header files to provide a
+ * clean interface between .NET/CLR and the unmanaged C library libpurple.
+ *
+ * This is the second major commit of the code.
+ * Next things:
+ *  - A few of the .h files have anonymous parameter names (eg: void cat(int, int).
+ *    This program will need to assign these parameters names.
+ *  - Function pointers inside structs aren't translated correctly into C#.
+ *  - Two places there are specific-length arrays (eg: char hostname[256]). The parser
+ *    does not detect them as an array.
+ */
+
+using System;
+using System.Collections.Generic;
+using System.Runtime.InteropServices;
+
+namespace PurpleWrapper
+{
+
+	/*
+	 * File: config.h
+	 */
+	public class Config
+	{
+
+		/*
+		 * Function Name: static_proto_init
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void static_proto_init()
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void static_proto_init();
+
+		public static void StaticProtoInit()
+		{
+			static_proto_init();
+		}
+
+	}
+}
+
============================================================
--- libpurple/wrapper/Connection.cs	fb8a70f60960e2109fa299cb5bfa94706222f514
+++ libpurple/wrapper/Connection.cs	fb8a70f60960e2109fa299cb5bfa94706222f514
@@ -0,0 +1,480 @@
+/* PurpleWrapper - A .NET (CLR) wrapper for libpurple
+ *
+ * Purple is the legal property of its developers, whose names are too numerous
+ * to list here.  Please refer to the COPYRIGHT file distributed with this
+ * source distribution.
+ *
+ * This program 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.
+ *
+ * This program 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 this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02111-1301  USA
+ */
+
+/*
+ * This file was auto-generated from the libpurple header files to provide a
+ * clean interface between .NET/CLR and the unmanaged C library libpurple.
+ *
+ * This is the second major commit of the code.
+ * Next things:
+ *  - A few of the .h files have anonymous parameter names (eg: void cat(int, int).
+ *    This program will need to assign these parameters names.
+ *  - Function pointers inside structs aren't translated correctly into C#.
+ *  - Two places there are specific-length arrays (eg: char hostname[256]). The parser
+ *    does not detect them as an array.
+ */
+
+using System;
+using System.Collections.Generic;
+using System.Runtime.InteropServices;
+
+namespace PurpleWrapper
+{
+
+	/*
+	 * File: connection.h
+	 */
+	public class Connection
+	{
+		public enum PurpleConnectionFlags
+		{
+			PURPLE_CONNECTION_HTML = 0x0001,
+			PURPLE_CONNECTION_NO_BGCOLOR = 0x0002,
+			PURPLE_CONNECTION_AUTO_RESP = 0x0004,
+			PURPLE_CONNECTION_FORMATTING_WBFO = 0x0008,
+			PURPLE_CONNECTION_NO_NEWLINES = 0x0010,
+			PURPLE_CONNECTION_NO_FONTSIZE = 0x0020,
+			PURPLE_CONNECTION_NO_URLDESC = 0x0040,
+			PURPLE_CONNECTION_NO_IMAGES = 0x0080,
+			PURPLE_CONNECTION_ALLOW_CUSTOM_SMILEY = 0x0100
+		};
+
+		public enum PurpleConnectionState
+		{
+			PURPLE_DISCONNECTED = 0,
+			PURPLE_CONNECTED,
+			PURPLE_CONNECTING
+		};
+
+		public enum PurpleConnectionError
+		{
+			PURPLE_CONNECTION_ERROR_NETWORK_ERROR = 0,
+			PURPLE_CONNECTION_ERROR_INVALID_USERNAME = 1,
+			PURPLE_CONNECTION_ERROR_AUTHENTICATION_FAILED = 2,
+			PURPLE_CONNECTION_ERROR_AUTHENTICATION_IMPOSSIBLE = 3,
+			PURPLE_CONNECTION_ERROR_NO_SSL_SUPPORT = 4,
+			PURPLE_CONNECTION_ERROR_ENCRYPTION_ERROR = 5,
+			PURPLE_CONNECTION_ERROR_NAME_IN_USE = 6,
+			PURPLE_CONNECTION_ERROR_INVALID_SETTINGS = 7,
+			PURPLE_CONNECTION_ERROR_CERT_NOT_PROVIDED = 8,
+			PURPLE_CONNECTION_ERROR_CERT_UNTRUSTED = 9,
+			PURPLE_CONNECTION_ERROR_CERT_EXPIRED = 10,
+			PURPLE_CONNECTION_ERROR_CERT_NOT_ACTIVATED = 11,
+			PURPLE_CONNECTION_ERROR_CERT_HOSTNAME_MISMATCH = 12,
+			PURPLE_CONNECTION_ERROR_CERT_FINGERPRINT_MISMATCH = 13,
+			PURPLE_CONNECTION_ERROR_CERT_SELF_SIGNED = 14,
+			PURPLE_CONNECTION_ERROR_CERT_OTHER_ERROR = 15,
+			PURPLE_CONNECTION_ERROR_OTHER_ERROR = 16
+		};
+
+
+		/*
+		 * Function Name: purple_connection_new_unregister
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_connection_new_unregister(PurpleAccount * account, char * password, PurpleAccountUnregistrationCb cb, void * user_data)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_connection_new_unregister(IntPtr account, string password, IntPtr cb, IntPtr user_data);
+
+		public static void NewUnregister(PurpleAccount account, string password, Account.PurpleAccountUnregistrationCb cb, IntPtr user_data)
+		{
+			/* Unable to process cb, a KnownFunctionPointer. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_connection_destroy
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_connection_destroy(PurpleConnection * gc)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_connection_destroy(IntPtr gc);
+
+		public static void Destroy(PurpleConnection gc)
+		{
+			purple_connection_destroy(gc.Reference);
+		}
+
+		/*
+		 * Function Name: purple_connection_set_state
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_connection_set_state(PurpleConnection * gc, PurpleConnectionState state)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_connection_set_state(IntPtr gc, Connection.PurpleConnectionState state);
+
+		public static void SetState(PurpleConnection gc, Connection.PurpleConnectionState state)
+		{
+			/* Unable to process state, a KnownEnum. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_connection_set_account
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_connection_set_account(PurpleConnection * gc, PurpleAccount * account)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_connection_set_account(IntPtr gc, IntPtr account);
+
+		public static void SetAccount(PurpleConnection gc, PurpleAccount account)
+		{
+			purple_connection_set_account(gc.Reference, account.Reference);
+		}
+
+		/*
+		 * Function Name: purple_connection_set_display_name
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_connection_set_display_name(PurpleConnection * gc, char * name)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_connection_set_display_name(IntPtr gc, string name);
+
+		public static void SetDisplayName(PurpleConnection gc, string name)
+		{
+			purple_connection_set_display_name(gc.Reference, name);
+		}
+
+		/*
+		 * Function Name: purple_connection_set_protocol_data
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_connection_set_protocol_data(PurpleConnection * connection, void * proto_data)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_connection_set_protocol_data(IntPtr connection, IntPtr proto_data);
+
+		public static void SetProtocolData(PurpleConnection connection, IntPtr proto_data)
+		{
+			purple_connection_set_protocol_data(connection.Reference, proto_data);
+		}
+
+		/*
+		 * Function Name: purple_connection_get_state
+		 * Function Type: PurpleConnectionState
+		 * Function RawType: PurpleConnectionState
+		 * Function Category: KnownEnum
+		 */
+		/*
+		 * PurpleConnectionState purple_connection_get_state(PurpleConnection * gc)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern Connection.PurpleConnectionState purple_connection_get_state(IntPtr gc);
+
+		public static Connection.PurpleConnectionState GetState(PurpleConnection gc)
+		{
+			/* Unable to process the return value of purple_connection_get_state, a KnownEnum. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_connection_get_account
+		 * Function Type: PurpleAccount *
+		 * Function RawType: PurpleAccount
+		 * Function Category: PointerToKnownStruct
+		 */
+		/*
+		 * PurpleAccount * purple_connection_get_account(PurpleConnection * gc)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern IntPtr purple_connection_get_account(IntPtr gc);
+
+		public static PurpleAccount GetAccount(PurpleConnection gc)
+		{
+			return new PurpleAccount(purple_connection_get_account(gc.Reference));
+		}
+
+		/*
+		 * Function Name: purple_connection_get_prpl
+		 * Function Type: PurplePlugin *
+		 * Function RawType: PurplePlugin
+		 * Function Category: PointerToKnownStruct
+		 */
+		/*
+		 * PurplePlugin * purple_connection_get_prpl(PurpleConnection * gc)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern IntPtr purple_connection_get_prpl(IntPtr gc);
+
+		public static PurplePlugin GetPrpl(PurpleConnection gc)
+		{
+			return new PurplePlugin(purple_connection_get_prpl(gc.Reference));
+		}
+
+		/*
+		 * Function Name: purple_connection_get_password
+		 * Function Type: char *
+		 * Function RawType: char
+		 * Function Category: Native
+		 */
+		/*
+		 * char * purple_connection_get_password(PurpleConnection * gc)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern string purple_connection_get_password(IntPtr gc);
+
+		public static string GetPassword(PurpleConnection gc)
+		{
+			return purple_connection_get_password(gc.Reference);
+		}
+
+		/*
+		 * Function Name: purple_connection_get_display_name
+		 * Function Type: char *
+		 * Function RawType: char
+		 * Function Category: Native
+		 */
+		/*
+		 * char * purple_connection_get_display_name(PurpleConnection * gc)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern string purple_connection_get_display_name(IntPtr gc);
+
+		public static string GetDisplayName(PurpleConnection gc)
+		{
+			return purple_connection_get_display_name(gc.Reference);
+		}
+
+		/*
+		 * Function Name: purple_connection_get_protocol_data
+		 * Function Type: void *
+		 * Function RawType: void
+		 * Function Category: VoidPointer
+		 */
+		/*
+		 * void * purple_connection_get_protocol_data(PurpleConnection * connection)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern IntPtr purple_connection_get_protocol_data(IntPtr connection);
+
+		public static IntPtr GetProtocolData(PurpleConnection connection)
+		{
+			return purple_connection_get_protocol_data(connection.Reference);
+		}
+
+		/*
+		 * Function Name: purple_connection_notice
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_connection_notice(PurpleConnection * gc, char * text)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_connection_notice(IntPtr gc, string text);
+
+		public static void Notice(PurpleConnection gc, string text)
+		{
+			purple_connection_notice(gc.Reference, text);
+		}
+
+		/*
+		 * Function Name: purple_connection_error
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_connection_error(PurpleConnection * gc, char * reason)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_connection_error(IntPtr gc, string reason);
+
+		public static void Error(PurpleConnection gc, string reason)
+		{
+			purple_connection_error(gc.Reference, reason);
+		}
+
+		/*
+		 * Function Name: purple_connection_error_is_fatal
+		 * Function Type: gboolean
+		 * Function RawType: gboolean
+		 * Function Category: Native
+		 */
+		/*
+		 * gboolean purple_connection_error_is_fatal(PurpleConnectionError reason)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern bool purple_connection_error_is_fatal(Connection.PurpleConnectionError reason);
+
+		public static bool ErrorIsFatal(Connection.PurpleConnectionError reason)
+		{
+			/* Unable to process reason, a KnownEnum. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_connections_disconnect_all
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_connections_disconnect_all()
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_connections_disconnect_all();
+
+		public static void ConnectionsDisconnectAll()
+		{
+			purple_connections_disconnect_all();
+		}
+
+		/*
+		 * Function Name: purple_connections_get_all
+		 * Function Type: GList *
+		 * Function RawType: GList
+		 * Function Category: PointerToGList
+		 */
+		/*
+		 * GList * purple_connections_get_all()
+		 * 
+		 * Could not generate a wrapper for purple_connections_get_all in file "connection.h".
+		 * Message: Unknown inner-type of argument 0 of purple_connections_get_all
+		 */
+
+		/*
+		 * Function Name: purple_connections_get_connecting
+		 * Function Type: GList *
+		 * Function RawType: GList
+		 * Function Category: PointerToGList
+		 */
+		/*
+		 * GList * purple_connections_get_connecting()
+		 * 
+		 * Could not generate a wrapper for purple_connections_get_connecting in file "connection.h".
+		 * Message: Unknown inner-type of argument 0 of purple_connections_get_connecting
+		 */
+
+		/*
+		 * Function Name: purple_connections_set_ui_ops
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_connections_set_ui_ops(PurpleConnectionUiOps * ops)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_connections_set_ui_ops(IntPtr ops);
+
+		public static void ConnectionsSetUiOps(/* Resolved as PointerToUnknownStruct to PurpleConnectionUiOps */ IntPtr ops)
+		{
+			/* Unable to process ops, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_connections_get_ui_ops
+		 * Function Type: PurpleConnectionUiOps *
+		 * Function RawType: PurpleConnectionUiOps
+		 * Function Category: PointerToUnknownStruct
+		 */
+		/*
+		 * PurpleConnectionUiOps * purple_connections_get_ui_ops()
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern IntPtr purple_connections_get_ui_ops();
+
+		public static /* Resolved as PointerToUnknownStruct to PurpleConnectionUiOps */ IntPtr ConnectionsGetUiOps()
+		{
+			/* Unable to process the return value of purple_connections_get_ui_ops, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_connections_init
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_connections_init()
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_connections_init();
+
+		public static void ConnectionsInit()
+		{
+			purple_connections_init();
+		}
+
+		/*
+		 * Function Name: purple_connections_uninit
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_connections_uninit()
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_connections_uninit();
+
+		public static void ConnectionsUninit()
+		{
+			purple_connections_uninit();
+		}
+
+		/*
+		 * Function Name: purple_connections_get_handle
+		 * Function Type: void *
+		 * Function RawType: void
+		 * Function Category: VoidPointer
+		 */
+		/*
+		 * void * purple_connections_get_handle()
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern IntPtr purple_connections_get_handle();
+
+		public static IntPtr ConnectionsGetHandle()
+		{
+			return purple_connections_get_handle();
+		}
+
+	}
+}
+
============================================================
--- libpurple/wrapper/Conversation.cs	ed841c0da93eb1f87303763312dd7689ddd58ce5
+++ libpurple/wrapper/Conversation.cs	ed841c0da93eb1f87303763312dd7689ddd58ce5
@@ -0,0 +1,1365 @@
+/* PurpleWrapper - A .NET (CLR) wrapper for libpurple
+ *
+ * Purple is the legal property of its developers, whose names are too numerous
+ * to list here.  Please refer to the COPYRIGHT file distributed with this
+ * source distribution.
+ *
+ * This program 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.
+ *
+ * This program 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 this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02111-1301  USA
+ */
+
+/*
+ * This file was auto-generated from the libpurple header files to provide a
+ * clean interface between .NET/CLR and the unmanaged C library libpurple.
+ *
+ * This is the second major commit of the code.
+ * Next things:
+ *  - A few of the .h files have anonymous parameter names (eg: void cat(int, int).
+ *    This program will need to assign these parameters names.
+ *  - Function pointers inside structs aren't translated correctly into C#.
+ *  - Two places there are specific-length arrays (eg: char hostname[256]). The parser
+ *    does not detect them as an array.
+ */
+
+using System;
+using System.Collections.Generic;
+using System.Runtime.InteropServices;
+
+namespace PurpleWrapper
+{
+
+	/*
+	 * File: conversation.h
+	 */
+	public class Conversation
+	{
+		public enum PurpleConversationType
+		{
+			PURPLE_CONV_TYPE_UNKNOWN = 0,
+			PURPLE_CONV_TYPE_IM,
+			PURPLE_CONV_TYPE_CHAT,
+			PURPLE_CONV_TYPE_MISC,
+			PURPLE_CONV_TYPE_ANY
+		};
+
+		public enum PurpleConvUpdateType
+		{
+			PURPLE_CONV_UPDATE_ADD = 0,
+			PURPLE_CONV_UPDATE_REMOVE,
+			PURPLE_CONV_UPDATE_ACCOUNT,
+			PURPLE_CONV_UPDATE_TYPING,
+			PURPLE_CONV_UPDATE_UNSEEN,
+			PURPLE_CONV_UPDATE_LOGGING,
+			PURPLE_CONV_UPDATE_TOPIC,
+			PURPLE_CONV_ACCOUNT_ONLINE,
+			PURPLE_CONV_ACCOUNT_OFFLINE,
+			PURPLE_CONV_UPDATE_AWAY,
+			PURPLE_CONV_UPDATE_ICON,
+			PURPLE_CONV_UPDATE_TITLE,
+			PURPLE_CONV_UPDATE_CHATLEFT,
+			PURPLE_CONV_UPDATE_FEATURES
+		};
+
+		public enum PurpleTypingState
+		{
+			PURPLE_NOT_TYPING = 0,
+			PURPLE_TYPING,
+			PURPLE_TYPED
+		};
+
+		public enum PurpleMessageFlags
+		{
+			PURPLE_MESSAGE_SEND = 0x0001,
+			PURPLE_MESSAGE_RECV = 0x0002,
+			PURPLE_MESSAGE_SYSTEM = 0x0004,
+			PURPLE_MESSAGE_AUTO_RESP = 0x0008,
+			PURPLE_MESSAGE_ACTIVE_ONLY = 0x0010,
+			PURPLE_MESSAGE_NICK = 0x0020,
+			PURPLE_MESSAGE_NO_LOG = 0x0040,
+			PURPLE_MESSAGE_WHISPER = 0x0080,
+			PURPLE_MESSAGE_ERROR = 0x0200,
+			PURPLE_MESSAGE_DELAYED = 0x0400,
+			PURPLE_MESSAGE_RAW = 0x0800,
+			PURPLE_MESSAGE_IMAGES = 0x1000,
+			PURPLE_MESSAGE_NOTIFY = 0x2000,
+			PURPLE_MESSAGE_NO_LINKIFY = 0x4000,
+			PURPLE_MESSAGE_INVISIBLE = 0x8000
+		};
+
+		public enum PurpleConvChatBuddyFlags
+		{
+			PURPLE_CBFLAGS_NONE = 0x0000,
+			PURPLE_CBFLAGS_VOICE = 0x0001,
+			PURPLE_CBFLAGS_HALFOP = 0x0002,
+			PURPLE_CBFLAGS_OP = 0x0004,
+			PURPLE_CBFLAGS_FOUNDER = 0x0008,
+			PURPLE_CBFLAGS_TYPING = 0x0010
+		};
+
+
+		/*
+		 * Function Name: purple_conversation_destroy
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_conversation_destroy(PurpleConversation * conv)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_conversation_destroy(IntPtr conv);
+
+		public static void Destroy(PurpleConversation conv)
+		{
+			purple_conversation_destroy(conv.Reference);
+		}
+
+		/*
+		 * Function Name: purple_conversation_present
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_conversation_present(PurpleConversation * conv)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_conversation_present(IntPtr conv);
+
+		public static void Present(PurpleConversation conv)
+		{
+			purple_conversation_present(conv.Reference);
+		}
+
+		/*
+		 * Function Name: purple_conversation_get_type
+		 * Function Type: PurpleConversationType
+		 * Function RawType: PurpleConversationType
+		 * Function Category: KnownEnum
+		 */
+		/*
+		 * PurpleConversationType purple_conversation_get_type(PurpleConversation * conv)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern Conversation.PurpleConversationType purple_conversation_get_type(IntPtr conv);
+
+		public static Conversation.PurpleConversationType GetType(PurpleConversation conv)
+		{
+			/* Unable to process the return value of purple_conversation_get_type, a KnownEnum. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_conversations_set_ui_ops
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_conversations_set_ui_ops(PurpleConversationUiOps * ops)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_conversations_set_ui_ops(IntPtr ops);
+
+		public static void ConversationsSetUiOps(PurpleConversationUiOps ops)
+		{
+			purple_conversations_set_ui_ops(ops.Reference);
+		}
+
+		/*
+		 * Function Name: purple_conversation_get_account
+		 * Function Type: PurpleAccount *
+		 * Function RawType: PurpleAccount
+		 * Function Category: PointerToKnownStruct
+		 */
+		/*
+		 * PurpleAccount * purple_conversation_get_account(PurpleConversation * conv)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern IntPtr purple_conversation_get_account(IntPtr conv);
+
+		public static PurpleAccount GetAccount(PurpleConversation conv)
+		{
+			return new PurpleAccount(purple_conversation_get_account(conv.Reference));
+		}
+
+		/*
+		 * Function Name: purple_conversation_get_gc
+		 * Function Type: PurpleConnection *
+		 * Function RawType: PurpleConnection
+		 * Function Category: PointerToKnownStruct
+		 */
+		/*
+		 * PurpleConnection * purple_conversation_get_gc(PurpleConversation * conv)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern IntPtr purple_conversation_get_gc(IntPtr conv);
+
+		public static PurpleConnection GetGc(PurpleConversation conv)
+		{
+			return new PurpleConnection(purple_conversation_get_gc(conv.Reference));
+		}
+
+		/*
+		 * Function Name: purple_conversation_set_title
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_conversation_set_title(PurpleConversation * conv, char * title)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_conversation_set_title(IntPtr conv, string title);
+
+		public static void SetTitle(PurpleConversation conv, string title)
+		{
+			purple_conversation_set_title(conv.Reference, title);
+		}
+
+		/*
+		 * Function Name: purple_conversation_get_title
+		 * Function Type: char *
+		 * Function RawType: char
+		 * Function Category: Native
+		 */
+		/*
+		 * char * purple_conversation_get_title(PurpleConversation * conv)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern string purple_conversation_get_title(IntPtr conv);
+
+		public static string GetTitle(PurpleConversation conv)
+		{
+			return purple_conversation_get_title(conv.Reference);
+		}
+
+		/*
+		 * Function Name: purple_conversation_autoset_title
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_conversation_autoset_title(PurpleConversation * conv)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_conversation_autoset_title(IntPtr conv);
+
+		public static void AutosetTitle(PurpleConversation conv)
+		{
+			purple_conversation_autoset_title(conv.Reference);
+		}
+
+		/*
+		 * Function Name: purple_conversation_set_name
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_conversation_set_name(PurpleConversation * conv, char * name)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_conversation_set_name(IntPtr conv, string name);
+
+		public static void SetName(PurpleConversation conv, string name)
+		{
+			purple_conversation_set_name(conv.Reference, name);
+		}
+
+		/*
+		 * Function Name: purple_conversation_get_name
+		 * Function Type: char *
+		 * Function RawType: char
+		 * Function Category: Native
+		 */
+		/*
+		 * char * purple_conversation_get_name(PurpleConversation * conv)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern string purple_conversation_get_name(IntPtr conv);
+
+		public static string GetName(PurpleConversation conv)
+		{
+			return purple_conversation_get_name(conv.Reference);
+		}
+
+		/*
+		 * Function Name: purple_conversation_set_logging
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_conversation_set_logging(PurpleConversation * conv, gboolean log)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_conversation_set_logging(IntPtr conv, bool log);
+
+		public static void SetLogging(PurpleConversation conv, bool log)
+		{
+			purple_conversation_set_logging(conv.Reference, log);
+		}
+
+		/*
+		 * Function Name: purple_conversation_is_logging
+		 * Function Type: gboolean
+		 * Function RawType: gboolean
+		 * Function Category: Native
+		 */
+		/*
+		 * gboolean purple_conversation_is_logging(PurpleConversation * conv)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern bool purple_conversation_is_logging(IntPtr conv);
+
+		public static bool IsLogging(PurpleConversation conv)
+		{
+			return purple_conversation_is_logging(conv.Reference);
+		}
+
+		/*
+		 * Function Name: purple_conversation_close_logs
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_conversation_close_logs(PurpleConversation * conv)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_conversation_close_logs(IntPtr conv);
+
+		public static void CloseLogs(PurpleConversation conv)
+		{
+			purple_conversation_close_logs(conv.Reference);
+		}
+
+		/*
+		 * Function Name: purple_conversation_get_im_data
+		 * Function Type: PurpleConvIm *
+		 * Function RawType: PurpleConvIm
+		 * Function Category: PointerToKnownStruct
+		 */
+		/*
+		 * PurpleConvIm * purple_conversation_get_im_data(PurpleConversation * conv)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern IntPtr purple_conversation_get_im_data(IntPtr conv);
+
+		public static PurpleConvIm GetImData(PurpleConversation conv)
+		{
+			return new PurpleConvIm(purple_conversation_get_im_data(conv.Reference));
+		}
+
+		/*
+		 * Function Name: purple_conversation_get_chat_data
+		 * Function Type: PurpleConvChat *
+		 * Function RawType: PurpleConvChat
+		 * Function Category: PointerToKnownStruct
+		 */
+		/*
+		 * PurpleConvChat * purple_conversation_get_chat_data(PurpleConversation * conv)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern IntPtr purple_conversation_get_chat_data(IntPtr conv);
+
+		public static PurpleConvChat GetChatData(PurpleConversation conv)
+		{
+			return new PurpleConvChat(purple_conversation_get_chat_data(conv.Reference));
+		}
+
+		/*
+		 * Function Name: purple_conversation_get_data
+		 * Function Type: gpointer
+		 * Function RawType: gpointer
+		 * Function Category: VoidPointer
+		 */
+		/*
+		 * gpointer purple_conversation_get_data(PurpleConversation * conv, char * key)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern IntPtr purple_conversation_get_data(IntPtr conv, string key);
+
+		public static IntPtr GetData(PurpleConversation conv, string key)
+		{
+			return purple_conversation_get_data(conv.Reference, key);
+		}
+
+		/*
+		 * Function Name: purple_get_conversations
+		 * Function Type: GList *
+		 * Function RawType: GList
+		 * Function Category: PointerToGList
+		 */
+		/*
+		 * GList * purple_get_conversations()
+		 * 
+		 * Could not generate a wrapper for purple_get_conversations in file "conversation.h".
+		 * Message: Unknown inner-type of argument 0 of purple_get_conversations
+		 */
+
+		/*
+		 * Function Name: purple_get_ims
+		 * Function Type: GList *
+		 * Function RawType: GList
+		 * Function Category: PointerToGList
+		 */
+		/*
+		 * GList * purple_get_ims()
+		 * 
+		 * Could not generate a wrapper for purple_get_ims in file "conversation.h".
+		 * Message: Unknown inner-type of argument 0 of purple_get_ims
+		 */
+
+		/*
+		 * Function Name: purple_get_chats
+		 * Function Type: GList *
+		 * Function RawType: GList
+		 * Function Category: PointerToGList
+		 */
+		/*
+		 * GList * purple_get_chats()
+		 * 
+		 * Could not generate a wrapper for purple_get_chats in file "conversation.h".
+		 * Message: Unknown inner-type of argument 0 of purple_get_chats
+		 */
+
+		/*
+		 * Function Name: purple_conversation_get_features
+		 * Function Type: PurpleConnectionFlags
+		 * Function RawType: PurpleConnectionFlags
+		 * Function Category: KnownEnum
+		 */
+		/*
+		 * PurpleConnectionFlags purple_conversation_get_features(PurpleConversation * conv)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern Connection.PurpleConnectionFlags purple_conversation_get_features(IntPtr conv);
+
+		public static Connection.PurpleConnectionFlags GetFeatures(PurpleConversation conv)
+		{
+			/* Unable to process the return value of purple_conversation_get_features, a KnownEnum. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_conversation_has_focus
+		 * Function Type: gboolean
+		 * Function RawType: gboolean
+		 * Function Category: Native
+		 */
+		/*
+		 * gboolean purple_conversation_has_focus(PurpleConversation * conv)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern bool purple_conversation_has_focus(IntPtr conv);
+
+		public static bool HasFocus(PurpleConversation conv)
+		{
+			return purple_conversation_has_focus(conv.Reference);
+		}
+
+		/*
+		 * Function Name: purple_conversation_update
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_conversation_update(PurpleConversation * conv, PurpleConvUpdateType type)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_conversation_update(IntPtr conv, Conversation.PurpleConvUpdateType type);
+
+		public static void Update(PurpleConversation conv, Conversation.PurpleConvUpdateType type)
+		{
+			/* Unable to process type, a KnownEnum. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_conversation_get_message_history
+		 * Function Type: GList *
+		 * Function RawType: GList
+		 * Function Category: PointerToGList
+		 */
+		/*
+		 * GList * purple_conversation_get_message_history(PurpleConversation * conv)
+		 * 
+		 * Could not generate a wrapper for purple_conversation_get_message_history in file "conversation.h".
+		 * Message: Unknown inner-type of argument 0 of purple_conversation_get_message_history
+		 */
+
+		/*
+		 * Function Name: purple_conversation_clear_message_history
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_conversation_clear_message_history(PurpleConversation * conv)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_conversation_clear_message_history(IntPtr conv);
+
+		public static void ClearMessageHistory(PurpleConversation conv)
+		{
+			purple_conversation_clear_message_history(conv.Reference);
+		}
+
+		/*
+		 * Function Name: purple_conversation_message_get_sender
+		 * Function Type: char *
+		 * Function RawType: char
+		 * Function Category: Native
+		 */
+		/*
+		 * char * purple_conversation_message_get_sender(PurpleConvMessage * msg)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern string purple_conversation_message_get_sender(IntPtr msg);
+
+		public static string MessageGetSender(PurpleConvMessage msg)
+		{
+			return purple_conversation_message_get_sender(msg.Reference);
+		}
+
+		/*
+		 * Function Name: purple_conversation_message_get_message
+		 * Function Type: char *
+		 * Function RawType: char
+		 * Function Category: Native
+		 */
+		/*
+		 * char * purple_conversation_message_get_message(PurpleConvMessage * msg)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern string purple_conversation_message_get_message(IntPtr msg);
+
+		public static string MessageGetMessage(PurpleConvMessage msg)
+		{
+			return purple_conversation_message_get_message(msg.Reference);
+		}
+
+		/*
+		 * Function Name: purple_conversation_message_get_flags
+		 * Function Type: PurpleMessageFlags
+		 * Function RawType: PurpleMessageFlags
+		 * Function Category: KnownEnum
+		 */
+		/*
+		 * PurpleMessageFlags purple_conversation_message_get_flags(PurpleConvMessage * msg)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern Conversation.PurpleMessageFlags purple_conversation_message_get_flags(IntPtr msg);
+
+		public static Conversation.PurpleMessageFlags MessageGetFlags(PurpleConvMessage msg)
+		{
+			/* Unable to process the return value of purple_conversation_message_get_flags, a KnownEnum. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_conversation_message_get_timestamp
+		 * Function Type: time_t
+		 * Function RawType: time_t
+		 * Function Category: DateTime
+		 */
+		/*
+		 * time_t purple_conversation_message_get_timestamp(PurpleConvMessage * msg)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern ulong purple_conversation_message_get_timestamp(IntPtr msg);
+
+		public static DateTime MessageGetTimestamp(PurpleConvMessage msg)
+		{
+			/* Unable to process the return value of purple_conversation_message_get_timestamp, a DateTime. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_conv_im_get_conversation
+		 * Function Type: PurpleConversation *
+		 * Function RawType: PurpleConversation
+		 * Function Category: PointerToKnownStruct
+		 */
+		/*
+		 * PurpleConversation * purple_conv_im_get_conversation(PurpleConvIm * im)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern IntPtr purple_conv_im_get_conversation(IntPtr im);
+
+		public static PurpleConversation ConvImGetConversation(PurpleConvIm im)
+		{
+			return new PurpleConversation(purple_conv_im_get_conversation(im.Reference));
+		}
+
+		/*
+		 * Function Name: purple_conv_im_set_icon
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_conv_im_set_icon(PurpleConvIm * im, PurpleBuddyIcon * icon)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_conv_im_set_icon(IntPtr im, IntPtr icon);
+
+		public static void ConvImSetIcon(PurpleConvIm im, /* Resolved as PointerToUnknownStruct to PurpleBuddyIcon */ IntPtr icon)
+		{
+			/* Unable to process icon, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_conv_im_get_icon
+		 * Function Type: PurpleBuddyIcon *
+		 * Function RawType: PurpleBuddyIcon
+		 * Function Category: PointerToUnknownStruct
+		 */
+		/*
+		 * PurpleBuddyIcon * purple_conv_im_get_icon(PurpleConvIm * im)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern IntPtr purple_conv_im_get_icon(IntPtr im);
+
+		public static /* Resolved as PointerToUnknownStruct to PurpleBuddyIcon */ IntPtr ConvImGetIcon(PurpleConvIm im)
+		{
+			/* Unable to process the return value of purple_conv_im_get_icon, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_conv_im_set_typing_state
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_conv_im_set_typing_state(PurpleConvIm * im, PurpleTypingState state)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_conv_im_set_typing_state(IntPtr im, Conversation.PurpleTypingState state);
+
+		public static void ConvImSetTypingState(PurpleConvIm im, Conversation.PurpleTypingState state)
+		{
+			/* Unable to process state, a KnownEnum. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_conv_im_get_typing_state
+		 * Function Type: PurpleTypingState
+		 * Function RawType: PurpleTypingState
+		 * Function Category: KnownEnum
+		 */
+		/*
+		 * PurpleTypingState purple_conv_im_get_typing_state(PurpleConvIm * im)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern Conversation.PurpleTypingState purple_conv_im_get_typing_state(IntPtr im);
+
+		public static Conversation.PurpleTypingState ConvImGetTypingState(PurpleConvIm im)
+		{
+			/* Unable to process the return value of purple_conv_im_get_typing_state, a KnownEnum. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_conv_im_start_typing_timeout
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_conv_im_start_typing_timeout(PurpleConvIm * im, int timeout)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_conv_im_start_typing_timeout(IntPtr im, int timeout);
+
+		public static void ConvImStartTypingTimeout(PurpleConvIm im, int timeout)
+		{
+			purple_conv_im_start_typing_timeout(im.Reference, timeout);
+		}
+
+		/*
+		 * Function Name: purple_conv_im_stop_typing_timeout
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_conv_im_stop_typing_timeout(PurpleConvIm * im)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_conv_im_stop_typing_timeout(IntPtr im);
+
+		public static void ConvImStopTypingTimeout(PurpleConvIm im)
+		{
+			purple_conv_im_stop_typing_timeout(im.Reference);
+		}
+
+		/*
+		 * Function Name: purple_conv_im_get_typing_timeout
+		 * Function Type: guint
+		 * Function RawType: guint
+		 * Function Category: Native
+		 */
+		/*
+		 * guint purple_conv_im_get_typing_timeout(PurpleConvIm * im)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern uint purple_conv_im_get_typing_timeout(IntPtr im);
+
+		public static uint ConvImGetTypingTimeout(PurpleConvIm im)
+		{
+			return purple_conv_im_get_typing_timeout(im.Reference);
+		}
+
+		/*
+		 * Function Name: purple_conv_im_set_type_again
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_conv_im_set_type_again(PurpleConvIm * im, unsigned int val)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_conv_im_set_type_again(IntPtr im, uint val);
+
+		public static void ConvImSetTypeAgain(PurpleConvIm im, uint val)
+		{
+			purple_conv_im_set_type_again(im.Reference, val);
+		}
+
+		/*
+		 * Function Name: purple_conv_im_get_type_again
+		 * Function Type: time_t
+		 * Function RawType: time_t
+		 * Function Category: DateTime
+		 */
+		/*
+		 * time_t purple_conv_im_get_type_again(PurpleConvIm * im)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern ulong purple_conv_im_get_type_again(IntPtr im);
+
+		public static DateTime ConvImGetTypeAgain(PurpleConvIm im)
+		{
+			/* Unable to process the return value of purple_conv_im_get_type_again, a DateTime. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_conv_im_start_send_typed_timeout
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_conv_im_start_send_typed_timeout(PurpleConvIm * im)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_conv_im_start_send_typed_timeout(IntPtr im);
+
+		public static void ConvImStartSendTypedTimeout(PurpleConvIm im)
+		{
+			purple_conv_im_start_send_typed_timeout(im.Reference);
+		}
+
+		/*
+		 * Function Name: purple_conv_im_stop_send_typed_timeout
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_conv_im_stop_send_typed_timeout(PurpleConvIm * im)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_conv_im_stop_send_typed_timeout(IntPtr im);
+
+		public static void ConvImStopSendTypedTimeout(PurpleConvIm im)
+		{
+			purple_conv_im_stop_send_typed_timeout(im.Reference);
+		}
+
+		/*
+		 * Function Name: purple_conv_im_get_send_typed_timeout
+		 * Function Type: guint
+		 * Function RawType: guint
+		 * Function Category: Native
+		 */
+		/*
+		 * guint purple_conv_im_get_send_typed_timeout(PurpleConvIm * im)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern uint purple_conv_im_get_send_typed_timeout(IntPtr im);
+
+		public static uint ConvImGetSendTypedTimeout(PurpleConvIm im)
+		{
+			return purple_conv_im_get_send_typed_timeout(im.Reference);
+		}
+
+		/*
+		 * Function Name: purple_conv_im_update_typing
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_conv_im_update_typing(PurpleConvIm * im)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_conv_im_update_typing(IntPtr im);
+
+		public static void ConvImUpdateTyping(PurpleConvIm im)
+		{
+			purple_conv_im_update_typing(im.Reference);
+		}
+
+		/*
+		 * Function Name: purple_conv_present_error
+		 * Function Type: gboolean
+		 * Function RawType: gboolean
+		 * Function Category: Native
+		 */
+		/*
+		 * gboolean purple_conv_present_error(char * who, PurpleAccount * account, char * what)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern bool purple_conv_present_error(string who, IntPtr account, string what);
+
+		public static bool ConvPresentError(string who, PurpleAccount account, string what)
+		{
+			return purple_conv_present_error(who, account.Reference, what);
+		}
+
+		/*
+		 * Function Name: purple_conv_im_send
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_conv_im_send(PurpleConvIm * im, char * message)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_conv_im_send(IntPtr im, string message);
+
+		public static void ConvImSend(PurpleConvIm im, string message)
+		{
+			purple_conv_im_send(im.Reference, message);
+		}
+
+		/*
+		 * Function Name: purple_conv_send_confirm
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_conv_send_confirm(PurpleConversation * conv, char * message)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_conv_send_confirm(IntPtr conv, string message);
+
+		public static void ConvSendConfirm(PurpleConversation conv, string message)
+		{
+			purple_conv_send_confirm(conv.Reference, message);
+		}
+
+		/*
+		 * Function Name: purple_conv_im_send_with_flags
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_conv_im_send_with_flags(PurpleConvIm * im, char * message, PurpleMessageFlags flags)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_conv_im_send_with_flags(IntPtr im, string message, Conversation.PurpleMessageFlags flags);
+
+		public static void ConvImSendWithFlags(PurpleConvIm im, string message, Conversation.PurpleMessageFlags flags)
+		{
+			/* Unable to process flags, a KnownEnum. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_conv_custom_smiley_close
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_conv_custom_smiley_close(PurpleConversation * conv, char * smile)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_conv_custom_smiley_close(IntPtr conv, string smile);
+
+		public static void ConvCustomSmileyClose(PurpleConversation conv, string smile)
+		{
+			purple_conv_custom_smiley_close(conv.Reference, smile);
+		}
+
+		/*
+		 * Function Name: purple_conv_chat_get_conversation
+		 * Function Type: PurpleConversation *
+		 * Function RawType: PurpleConversation
+		 * Function Category: PointerToKnownStruct
+		 */
+		/*
+		 * PurpleConversation * purple_conv_chat_get_conversation(PurpleConvChat * chat)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern IntPtr purple_conv_chat_get_conversation(IntPtr chat);
+
+		public static PurpleConversation ConvChatGetConversation(PurpleConvChat chat)
+		{
+			return new PurpleConversation(purple_conv_chat_get_conversation(chat.Reference));
+		}
+
+		/*
+		 * Function Name: purple_conv_chat_set_users
+		 * Function Type: GList *
+		 * Function RawType: GList
+		 * Function Category: PointerToGList
+		 */
+		/*
+		 * GList * purple_conv_chat_set_users(PurpleConvChat * chat, GList * users)
+		 * 
+		 * Could not generate a wrapper for purple_conv_chat_set_users in file "conversation.h".
+		 * Message: Unknown inner-type of argument 0 of purple_conv_chat_set_users
+		 */
+
+		/*
+		 * Function Name: purple_conv_chat_get_users
+		 * Function Type: GList *
+		 * Function RawType: GList
+		 * Function Category: PointerToGList
+		 */
+		/*
+		 * GList * purple_conv_chat_get_users(PurpleConvChat * chat)
+		 * 
+		 * Could not generate a wrapper for purple_conv_chat_get_users in file "conversation.h".
+		 * Message: Unknown inner-type of argument 0 of purple_conv_chat_get_users
+		 */
+
+		/*
+		 * Function Name: purple_conv_chat_ignore
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_conv_chat_ignore(PurpleConvChat * chat, char * name)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_conv_chat_ignore(IntPtr chat, string name);
+
+		public static void ConvChatIgnore(PurpleConvChat chat, string name)
+		{
+			purple_conv_chat_ignore(chat.Reference, name);
+		}
+
+		/*
+		 * Function Name: purple_conv_chat_unignore
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_conv_chat_unignore(PurpleConvChat * chat, char * name)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_conv_chat_unignore(IntPtr chat, string name);
+
+		public static void ConvChatUnignore(PurpleConvChat chat, string name)
+		{
+			purple_conv_chat_unignore(chat.Reference, name);
+		}
+
+		/*
+		 * Function Name: purple_conv_chat_set_ignored
+		 * Function Type: GList *
+		 * Function RawType: GList
+		 * Function Category: PointerToGList
+		 */
+		/*
+		 * GList * purple_conv_chat_set_ignored(PurpleConvChat * chat, GList * ignored)
+		 * 
+		 * Could not generate a wrapper for purple_conv_chat_set_ignored in file "conversation.h".
+		 * Message: Unknown inner-type of argument 0 of purple_conv_chat_set_ignored
+		 */
+
+		/*
+		 * Function Name: purple_conv_chat_get_ignored
+		 * Function Type: GList *
+		 * Function RawType: GList
+		 * Function Category: PointerToGList
+		 */
+		/*
+		 * GList * purple_conv_chat_get_ignored(PurpleConvChat * chat)
+		 * 
+		 * Could not generate a wrapper for purple_conv_chat_get_ignored in file "conversation.h".
+		 * Message: Unknown inner-type of argument 0 of purple_conv_chat_get_ignored
+		 */
+
+		/*
+		 * Function Name: purple_conv_chat_get_topic
+		 * Function Type: char *
+		 * Function RawType: char
+		 * Function Category: Native
+		 */
+		/*
+		 * char * purple_conv_chat_get_topic(PurpleConvChat * chat)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern string purple_conv_chat_get_topic(IntPtr chat);
+
+		public static string ConvChatGetTopic(PurpleConvChat chat)
+		{
+			return purple_conv_chat_get_topic(chat.Reference);
+		}
+
+		/*
+		 * Function Name: purple_conv_chat_set_id
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_conv_chat_set_id(PurpleConvChat * chat, int id)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_conv_chat_set_id(IntPtr chat, int id);
+
+		public static void ConvChatSetId(PurpleConvChat chat, int id)
+		{
+			purple_conv_chat_set_id(chat.Reference, id);
+		}
+
+		/*
+		 * Function Name: purple_conv_chat_get_id
+		 * Function Type: int
+		 * Function RawType: int
+		 * Function Category: Native
+		 */
+		/*
+		 * int purple_conv_chat_get_id(PurpleConvChat * chat)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern int purple_conv_chat_get_id(IntPtr chat);
+
+		public static int ConvChatGetId(PurpleConvChat chat)
+		{
+			return purple_conv_chat_get_id(chat.Reference);
+		}
+
+		/*
+		 * Function Name: purple_conv_chat_send
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_conv_chat_send(PurpleConvChat * chat, char * message)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_conv_chat_send(IntPtr chat, string message);
+
+		public static void ConvChatSend(PurpleConvChat chat, string message)
+		{
+			purple_conv_chat_send(chat.Reference, message);
+		}
+
+		/*
+		 * Function Name: purple_conv_chat_send_with_flags
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_conv_chat_send_with_flags(PurpleConvChat * chat, char * message, PurpleMessageFlags flags)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_conv_chat_send_with_flags(IntPtr chat, string message, Conversation.PurpleMessageFlags flags);
+
+		public static void ConvChatSendWithFlags(PurpleConvChat chat, string message, Conversation.PurpleMessageFlags flags)
+		{
+			/* Unable to process flags, a KnownEnum. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_conv_chat_find_user
+		 * Function Type: gboolean
+		 * Function RawType: gboolean
+		 * Function Category: Native
+		 */
+		/*
+		 * gboolean purple_conv_chat_find_user(PurpleConvChat * chat, char * user)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern bool purple_conv_chat_find_user(IntPtr chat, string user);
+
+		public static bool ConvChatFindUser(PurpleConvChat chat, string user)
+		{
+			return purple_conv_chat_find_user(chat.Reference, user);
+		}
+
+		/*
+		 * Function Name: purple_conv_chat_clear_users
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_conv_chat_clear_users(PurpleConvChat * chat)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_conv_chat_clear_users(IntPtr chat);
+
+		public static void ConvChatClearUsers(PurpleConvChat chat)
+		{
+			purple_conv_chat_clear_users(chat.Reference);
+		}
+
+		/*
+		 * Function Name: purple_conv_chat_set_nick
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_conv_chat_set_nick(PurpleConvChat * chat, char * nick)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_conv_chat_set_nick(IntPtr chat, string nick);
+
+		public static void ConvChatSetNick(PurpleConvChat chat, string nick)
+		{
+			purple_conv_chat_set_nick(chat.Reference, nick);
+		}
+
+		/*
+		 * Function Name: purple_conv_chat_get_nick
+		 * Function Type: char *
+		 * Function RawType: char
+		 * Function Category: Native
+		 */
+		/*
+		 * char * purple_conv_chat_get_nick(PurpleConvChat * chat)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern string purple_conv_chat_get_nick(IntPtr chat);
+
+		public static string ConvChatGetNick(PurpleConvChat chat)
+		{
+			return purple_conv_chat_get_nick(chat.Reference);
+		}
+
+		/*
+		 * Function Name: purple_find_chat
+		 * Function Type: PurpleConversation *
+		 * Function RawType: PurpleConversation
+		 * Function Category: PointerToKnownStruct
+		 */
+		/*
+		 * PurpleConversation * purple_find_chat(PurpleConnection * gc, int id)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern IntPtr purple_find_chat(IntPtr gc, int id);
+
+		public static PurpleConversation FindChat(PurpleConnection gc, int id)
+		{
+			return new PurpleConversation(purple_find_chat(gc.Reference, id));
+		}
+
+		/*
+		 * Function Name: purple_conv_chat_left
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_conv_chat_left(PurpleConvChat * chat)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_conv_chat_left(IntPtr chat);
+
+		public static void ConvChatLeft(PurpleConvChat chat)
+		{
+			purple_conv_chat_left(chat.Reference);
+		}
+
+		/*
+		 * Function Name: purple_conv_chat_has_left
+		 * Function Type: gboolean
+		 * Function RawType: gboolean
+		 * Function Category: Native
+		 */
+		/*
+		 * gboolean purple_conv_chat_has_left(PurpleConvChat * chat)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern bool purple_conv_chat_has_left(IntPtr chat);
+
+		public static bool ConvChatHasLeft(PurpleConvChat chat)
+		{
+			return purple_conv_chat_has_left(chat.Reference);
+		}
+
+		/*
+		 * Function Name: purple_conv_chat_cb_find
+		 * Function Type: PurpleConvChatBuddy *
+		 * Function RawType: PurpleConvChatBuddy
+		 * Function Category: PointerToKnownStruct
+		 */
+		/*
+		 * PurpleConvChatBuddy * purple_conv_chat_cb_find(PurpleConvChat * chat, char * name)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern IntPtr purple_conv_chat_cb_find(IntPtr chat, string name);
+
+		public static PurpleConvChatBuddy ConvChatCbFind(PurpleConvChat chat, string name)
+		{
+			return new PurpleConvChatBuddy(purple_conv_chat_cb_find(chat.Reference, name));
+		}
+
+		/*
+		 * Function Name: purple_conv_chat_cb_get_name
+		 * Function Type: char *
+		 * Function RawType: char
+		 * Function Category: Native
+		 */
+		/*
+		 * char * purple_conv_chat_cb_get_name(PurpleConvChatBuddy * cb)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern string purple_conv_chat_cb_get_name(IntPtr cb);
+
+		public static string ConvChatCbGetName(PurpleConvChatBuddy cb)
+		{
+			return purple_conv_chat_cb_get_name(cb.Reference);
+		}
+
+		/*
+		 * Function Name: purple_conv_chat_cb_destroy
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_conv_chat_cb_destroy(PurpleConvChatBuddy * cb)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_conv_chat_cb_destroy(IntPtr cb);
+
+		public static void ConvChatCbDestroy(PurpleConvChatBuddy cb)
+		{
+			purple_conv_chat_cb_destroy(cb.Reference);
+		}
+
+		/*
+		 * Function Name: purple_conversation_get_extended_menu
+		 * Function Type: GList *
+		 * Function RawType: GList
+		 * Function Category: PointerToGList
+		 */
+		/*
+		 * GList * purple_conversation_get_extended_menu(PurpleConversation * conv)
+		 * 
+		 * Could not generate a wrapper for purple_conversation_get_extended_menu in file "conversation.h".
+		 * Message: Unknown inner-type of argument 0 of purple_conversation_get_extended_menu
+		 */
+
+		/*
+		 * Function Name: purple_conversation_do_command
+		 * Function Type: gboolean
+		 * Function RawType: gboolean
+		 * Function Category: Native
+		 */
+		/*
+		 * gboolean purple_conversation_do_command(PurpleConversation * conv, gchar * cmdline, gchar * markup, gchar ** error)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern bool purple_conversation_do_command(IntPtr conv, string cmdline, string markup, IntPtr error);
+
+		public static bool DoCommand(PurpleConversation conv, string cmdline, string markup, /* Resolved as PointerToUnknownStruct to gchar */ IntPtr error)
+		{
+			/* Unable to process error, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_conversations_get_handle
+		 * Function Type: void *
+		 * Function RawType: void
+		 * Function Category: VoidPointer
+		 */
+		/*
+		 * void * purple_conversations_get_handle()
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern IntPtr purple_conversations_get_handle();
+
+		public static IntPtr ConversationsGetHandle()
+		{
+			return purple_conversations_get_handle();
+		}
+
+		/*
+		 * Function Name: purple_conversations_init
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_conversations_init()
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_conversations_init();
+
+		public static void ConversationsInit()
+		{
+			purple_conversations_init();
+		}
+
+		/*
+		 * Function Name: purple_conversations_uninit
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_conversations_uninit()
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_conversations_uninit();
+
+		public static void ConversationsUninit()
+		{
+			purple_conversations_uninit();
+		}
+
+	}
+}
+
============================================================
--- libpurple/wrapper/Core.cs	948e6ddd0e30eb98461a0bdfc2f3a8cf144f15bb
+++ libpurple/wrapper/Core.cs	948e6ddd0e30eb98461a0bdfc2f3a8cf144f15bb
@@ -0,0 +1,241 @@
+/* PurpleWrapper - A .NET (CLR) wrapper for libpurple
+ *
+ * Purple is the legal property of its developers, whose names are too numerous
+ * to list here.  Please refer to the COPYRIGHT file distributed with this
+ * source distribution.
+ *
+ * This program 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.
+ *
+ * This program 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 this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02111-1301  USA
+ */
+
+/*
+ * This file was auto-generated from the libpurple header files to provide a
+ * clean interface between .NET/CLR and the unmanaged C library libpurple.
+ *
+ * This is the second major commit of the code.
+ * Next things:
+ *  - A few of the .h files have anonymous parameter names (eg: void cat(int, int).
+ *    This program will need to assign these parameters names.
+ *  - Function pointers inside structs aren't translated correctly into C#.
+ *  - Two places there are specific-length arrays (eg: char hostname[256]). The parser
+ *    does not detect them as an array.
+ */
+
+using System;
+using System.Collections.Generic;
+using System.Runtime.InteropServices;
+
+namespace PurpleWrapper
+{
+
+	/*
+	 * File: core.h
+	 */
+	public class Core
+	{
+
+		/*
+		 * Function Name: purple_core_init
+		 * Function Type: gboolean
+		 * Function RawType: gboolean
+		 * Function Category: Native
+		 */
+		/*
+		 * gboolean purple_core_init(char * ui)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern bool purple_core_init(string ui);
+
+		public static bool Init(string ui)
+		{
+			return purple_core_init(ui);
+		}
+
+		/*
+		 * Function Name: purple_core_quit
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_core_quit()
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_core_quit();
+
+		public static void Quit()
+		{
+			purple_core_quit();
+		}
+
+		/*
+		 * Function Name: purple_core_quit_cb
+		 * Function Type: gboolean
+		 * Function RawType: gboolean
+		 * Function Category: Native
+		 */
+		/*
+		 * gboolean purple_core_quit_cb(gpointer unused)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern bool purple_core_quit_cb(IntPtr unused);
+
+		public static bool QuitCb(IntPtr unused)
+		{
+			return purple_core_quit_cb(unused);
+		}
+
+		/*
+		 * Function Name: purple_core_get_version
+		 * Function Type: char *
+		 * Function RawType: char
+		 * Function Category: Native
+		 */
+		/*
+		 * char * purple_core_get_version()
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern string purple_core_get_version();
+
+		public static string GetVersion()
+		{
+			return purple_core_get_version();
+		}
+
+		/*
+		 * Function Name: purple_core_get_ui
+		 * Function Type: char *
+		 * Function RawType: char
+		 * Function Category: Native
+		 */
+		/*
+		 * char * purple_core_get_ui()
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern string purple_core_get_ui();
+
+		public static string GetUi()
+		{
+			return purple_core_get_ui();
+		}
+
+		/*
+		 * Function Name: purple_get_core
+		 * Function Type: PurpleCore *
+		 * Function RawType: PurpleCore
+		 * Function Category: PointerToUnknownStruct
+		 */
+		/*
+		 * PurpleCore * purple_get_core()
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern IntPtr purple_get_core();
+
+		public static /* Resolved as PointerToUnknownStruct to PurpleCore */ IntPtr GetCore()
+		{
+			/* Unable to process the return value of purple_get_core, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_core_set_ui_ops
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_core_set_ui_ops(PurpleCoreUiOps * ops)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_core_set_ui_ops(IntPtr ops);
+
+		public static void SetUiOps(/* Resolved as PointerToUnknownStruct to PurpleCoreUiOps */ IntPtr ops)
+		{
+			/* Unable to process ops, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_core_get_ui_ops
+		 * Function Type: PurpleCoreUiOps *
+		 * Function RawType: PurpleCoreUiOps
+		 * Function Category: PointerToUnknownStruct
+		 */
+		/*
+		 * PurpleCoreUiOps * purple_core_get_ui_ops()
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern IntPtr purple_core_get_ui_ops();
+
+		public static /* Resolved as PointerToUnknownStruct to PurpleCoreUiOps */ IntPtr GetUiOps()
+		{
+			/* Unable to process the return value of purple_core_get_ui_ops, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_core_migrate
+		 * Function Type: gboolean
+		 * Function RawType: gboolean
+		 * Function Category: Native
+		 */
+		/*
+		 * gboolean purple_core_migrate()
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern bool purple_core_migrate();
+
+		public static bool Migrate()
+		{
+			return purple_core_migrate();
+		}
+
+		/*
+		 * Function Name: purple_core_ensure_single_instance
+		 * Function Type: gboolean
+		 * Function RawType: gboolean
+		 * Function Category: Native
+		 */
+		/*
+		 * gboolean purple_core_ensure_single_instance()
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern bool purple_core_ensure_single_instance();
+
+		public static bool EnsureSingleInstance()
+		{
+			return purple_core_ensure_single_instance();
+		}
+
+		/*
+		 * Function Name: purple_core_get_ui_info
+		 * Function Type: GHashTable*
+		 * Function RawType: GHashTable*
+		 * Function Category: PointerToUnknownStruct
+		 */
+		/*
+		 * GHashTable* purple_core_get_ui_info()
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern IntPtr purple_core_get_ui_info();
+
+		public static /* Resolved as PointerToUnknownStruct to GHashTable* */ IntPtr GetUiInfo()
+		{
+			/* Unable to process the return value of purple_core_get_ui_info, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+	}
+}
+
============================================================
--- libpurple/wrapper/Debug.cs	4b8257123cbd8b119fdcc10a47096ef67b54fc67
+++ libpurple/wrapper/Debug.cs	4b8257123cbd8b119fdcc10a47096ef67b54fc67
@@ -0,0 +1,147 @@
+/* PurpleWrapper - A .NET (CLR) wrapper for libpurple
+ *
+ * Purple is the legal property of its developers, whose names are too numerous
+ * to list here.  Please refer to the COPYRIGHT file distributed with this
+ * source distribution.
+ *
+ * This program 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.
+ *
+ * This program 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 this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02111-1301  USA
+ */
+
+/*
+ * This file was auto-generated from the libpurple header files to provide a
+ * clean interface between .NET/CLR and the unmanaged C library libpurple.
+ *
+ * This is the second major commit of the code.
+ * Next things:
+ *  - A few of the .h files have anonymous parameter names (eg: void cat(int, int).
+ *    This program will need to assign these parameters names.
+ *  - Function pointers inside structs aren't translated correctly into C#.
+ *  - Two places there are specific-length arrays (eg: char hostname[256]). The parser
+ *    does not detect them as an array.
+ */
+
+using System;
+using System.Collections.Generic;
+using System.Runtime.InteropServices;
+
+namespace PurpleWrapper
+{
+
+	/*
+	 * File: debug.h
+	 */
+	public class Debug
+	{
+		public enum PurpleDebugLevel
+		{
+			PURPLE_DEBUG_ALL = 0,
+			PURPLE_DEBUG_MISC,
+			PURPLE_DEBUG_INFO,
+			PURPLE_DEBUG_WARNING,
+			PURPLE_DEBUG_ERROR,
+			PURPLE_DEBUG_FATAL
+		};
+
+
+		/*
+		 * Function Name: purple_debug_set_enabled
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_debug_set_enabled(gboolean enabled)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_debug_set_enabled(bool enabled);
+
+		public static void SetEnabled(bool enabled)
+		{
+			purple_debug_set_enabled(enabled);
+		}
+
+		/*
+		 * Function Name: purple_debug_is_enabled
+		 * Function Type: gboolean
+		 * Function RawType: gboolean
+		 * Function Category: Native
+		 */
+		/*
+		 * gboolean purple_debug_is_enabled()
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern bool purple_debug_is_enabled();
+
+		public static bool IsEnabled()
+		{
+			return purple_debug_is_enabled();
+		}
+
+		/*
+		 * Function Name: purple_debug_set_ui_ops
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_debug_set_ui_ops(PurpleDebugUiOps * ops)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_debug_set_ui_ops(IntPtr ops);
+
+		public static void SetUiOps(/* Resolved as PointerToUnknownStruct to PurpleDebugUiOps */ IntPtr ops)
+		{
+			/* Unable to process ops, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_debug_get_ui_ops
+		 * Function Type: PurpleDebugUiOps *
+		 * Function RawType: PurpleDebugUiOps
+		 * Function Category: PointerToUnknownStruct
+		 */
+		/*
+		 * PurpleDebugUiOps * purple_debug_get_ui_ops()
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern IntPtr purple_debug_get_ui_ops();
+
+		public static /* Resolved as PointerToUnknownStruct to PurpleDebugUiOps */ IntPtr GetUiOps()
+		{
+			/* Unable to process the return value of purple_debug_get_ui_ops, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_debug_init
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_debug_init()
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_debug_init();
+
+		public static void Init()
+		{
+			purple_debug_init();
+		}
+
+	}
+}
+
============================================================
--- libpurple/wrapper/Desktopitem.cs	f9a5cc2a2dbd0084a4986a88322fa94a124384a5
+++ libpurple/wrapper/Desktopitem.cs	f9a5cc2a2dbd0084a4986a88322fa94a124384a5
@@ -0,0 +1,153 @@
+/* PurpleWrapper - A .NET (CLR) wrapper for libpurple
+ *
+ * Purple is the legal property of its developers, whose names are too numerous
+ * to list here.  Please refer to the COPYRIGHT file distributed with this
+ * source distribution.
+ *
+ * This program 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.
+ *
+ * This program 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 this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02111-1301  USA
+ */
+
+/*
+ * This file was auto-generated from the libpurple header files to provide a
+ * clean interface between .NET/CLR and the unmanaged C library libpurple.
+ *
+ * This is the second major commit of the code.
+ * Next things:
+ *  - A few of the .h files have anonymous parameter names (eg: void cat(int, int).
+ *    This program will need to assign these parameters names.
+ *  - Function pointers inside structs aren't translated correctly into C#.
+ *  - Two places there are specific-length arrays (eg: char hostname[256]). The parser
+ *    does not detect them as an array.
+ */
+
+using System;
+using System.Collections.Generic;
+using System.Runtime.InteropServices;
+
+namespace PurpleWrapper
+{
+
+	/*
+	 * File: desktopitem.h
+	 */
+	public class Desktopitem
+	{
+		public enum PurpleDesktopItemType
+		{
+			PURPLE_DESKTOP_ITEM_TYPE_NULL = 0,
+			PURPLE_DESKTOP_ITEM_TYPE_OTHER,
+			PURPLE_DESKTOP_ITEM_TYPE_APPLICATION,
+			PURPLE_DESKTOP_ITEM_TYPE_LINK,
+			PURPLE_DESKTOP_ITEM_TYPE_FSDEVICE,
+			PURPLE_DESKTOP_ITEM_TYPE_MIME_TYPE,
+			PURPLE_DESKTOP_ITEM_TYPE_DIRECTORY,
+			PURPLE_DESKTOP_ITEM_TYPE_SERVICE,
+			PURPLE_DESKTOP_ITEM_TYPE_SERVICE_TYPE
+		};
+
+
+		/*
+		 * Function Name: purple_desktop_item_get_type
+		 * Function Type: GType
+		 * Function RawType: GType
+		 * Function Category: GObjectObject
+		 */
+		/*
+		 * GType purple_desktop_item_get_type()
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern IntPtr purple_desktop_item_get_type();
+
+		public static /* libobject */ IntPtr DesktopItemGetType()
+		{
+			/* Unable to process the return value of purple_desktop_item_get_type, a GObjectObject. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_desktop_item_new_from_file
+		 * Function Type: PurpleDesktopItem *
+		 * Function RawType: PurpleDesktopItem
+		 * Function Category: PointerToUnknownStruct
+		 */
+		/*
+		 * PurpleDesktopItem * purple_desktop_item_new_from_file(char * filename)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern IntPtr purple_desktop_item_new_from_file(string filename);
+
+		public static /* Resolved as PointerToUnknownStruct to PurpleDesktopItem */ IntPtr DesktopItemNewFromFile(string filename)
+		{
+			/* Unable to process the return value of purple_desktop_item_new_from_file, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_desktop_item_get_entry_type
+		 * Function Type: PurpleDesktopItemType
+		 * Function RawType: PurpleDesktopItemType
+		 * Function Category: KnownEnum
+		 */
+		/*
+		 * PurpleDesktopItemType purple_desktop_item_get_entry_type(PurpleDesktopItem * item)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern Desktopitem.PurpleDesktopItemType purple_desktop_item_get_entry_type(IntPtr item);
+
+		public static Desktopitem.PurpleDesktopItemType DesktopItemGetEntryType(/* Resolved as PointerToUnknownStruct to PurpleDesktopItem */ IntPtr item)
+		{
+			/* Unable to process item, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_desktop_item_copy
+		 * Function Type: PurpleDesktopItem *
+		 * Function RawType: PurpleDesktopItem
+		 * Function Category: PointerToUnknownStruct
+		 */
+		/*
+		 * PurpleDesktopItem * purple_desktop_item_copy(PurpleDesktopItem * item)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern IntPtr purple_desktop_item_copy(IntPtr item);
+
+		public static /* Resolved as PointerToUnknownStruct to PurpleDesktopItem */ IntPtr DesktopItemCopy(/* Resolved as PointerToUnknownStruct to PurpleDesktopItem */ IntPtr item)
+		{
+			/* Unable to process item, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_desktop_item_unref
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_desktop_item_unref(PurpleDesktopItem * item)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_desktop_item_unref(IntPtr item);
+
+		public static void DesktopItemUnref(/* Resolved as PointerToUnknownStruct to PurpleDesktopItem */ IntPtr item)
+		{
+			/* Unable to process item, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+	}
+}
+
============================================================
--- libpurple/wrapper/Dnsquery.cs	c9186e2f23272635e0be6fe133f824bfee086ede
+++ libpurple/wrapper/Dnsquery.cs	c9186e2f23272635e0be6fe133f824bfee086ede
@@ -0,0 +1,195 @@
+/* PurpleWrapper - A .NET (CLR) wrapper for libpurple
+ *
+ * Purple is the legal property of its developers, whose names are too numerous
+ * to list here.  Please refer to the COPYRIGHT file distributed with this
+ * source distribution.
+ *
+ * This program 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.
+ *
+ * This program 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 this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02111-1301  USA
+ */
+
+/*
+ * This file was auto-generated from the libpurple header files to provide a
+ * clean interface between .NET/CLR and the unmanaged C library libpurple.
+ *
+ * This is the second major commit of the code.
+ * Next things:
+ *  - A few of the .h files have anonymous parameter names (eg: void cat(int, int).
+ *    This program will need to assign these parameters names.
+ *  - Function pointers inside structs aren't translated correctly into C#.
+ *  - Two places there are specific-length arrays (eg: char hostname[256]). The parser
+ *    does not detect them as an array.
+ */
+
+using System;
+using System.Collections.Generic;
+using System.Runtime.InteropServices;
+
+namespace PurpleWrapper
+{
+
+	/*
+	 * File: dnsquery.h
+	 */
+	public class Dnsquery
+	{
+		public delegate void PurpleDnsQueryConnectFunction(IntPtr hosts, IntPtr data, string error_message);
+		public delegate void PurpleDnsQueryResolvedCallback(IntPtr query_data, IntPtr hosts);
+		public delegate void PurpleDnsQueryFailedCallback(IntPtr query_data, string error_message);
+
+		/*
+		 * Function Name: purple_dnsquery_a
+		 * Function Type: PurpleDnsQueryData *
+		 * Function RawType: PurpleDnsQueryData
+		 * Function Category: PointerToUnknownStruct
+		 */
+		/*
+		 * PurpleDnsQueryData * purple_dnsquery_a(char * hostname, int port, PurpleDnsQueryConnectFunction callback, gpointer data)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern IntPtr purple_dnsquery_a(string hostname, int port, IntPtr callback, IntPtr data);
+
+		public static /* Resolved as PointerToUnknownStruct to PurpleDnsQueryData */ IntPtr A(string hostname, int port, Dnsquery.PurpleDnsQueryConnectFunction callback, IntPtr data)
+		{
+			/* Unable to process callback, a KnownFunctionPointer. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_dnsquery_destroy
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_dnsquery_destroy(PurpleDnsQueryData * query_data)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_dnsquery_destroy(IntPtr query_data);
+
+		public static void Destroy(/* Resolved as PointerToUnknownStruct to PurpleDnsQueryData */ IntPtr query_data)
+		{
+			/* Unable to process query_data, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_dnsquery_set_ui_ops
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_dnsquery_set_ui_ops(PurpleDnsQueryUiOps * ops)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_dnsquery_set_ui_ops(IntPtr ops);
+
+		public static void SetUiOps(/* Resolved as PointerToUnknownStruct to PurpleDnsQueryUiOps */ IntPtr ops)
+		{
+			/* Unable to process ops, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_dnsquery_get_ui_ops
+		 * Function Type: PurpleDnsQueryUiOps *
+		 * Function RawType: PurpleDnsQueryUiOps
+		 * Function Category: PointerToUnknownStruct
+		 */
+		/*
+		 * PurpleDnsQueryUiOps * purple_dnsquery_get_ui_ops()
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern IntPtr purple_dnsquery_get_ui_ops();
+
+		public static /* Resolved as PointerToUnknownStruct to PurpleDnsQueryUiOps */ IntPtr GetUiOps()
+		{
+			/* Unable to process the return value of purple_dnsquery_get_ui_ops, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_dnsquery_get_host
+		 * Function Type: char *
+		 * Function RawType: char
+		 * Function Category: Native
+		 */
+		/*
+		 * char * purple_dnsquery_get_host(PurpleDnsQueryData * query_data)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern string purple_dnsquery_get_host(IntPtr query_data);
+
+		public static string GetHost(/* Resolved as PointerToUnknownStruct to PurpleDnsQueryData */ IntPtr query_data)
+		{
+			/* Unable to process query_data, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_dnsquery_get_port
+		 * Function Type: unsigned short
+		 * Function RawType: short
+		 * Function Category: Native
+		 */
+		/*
+		 * unsigned short purple_dnsquery_get_port(PurpleDnsQueryData * query_data)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern ushort purple_dnsquery_get_port(IntPtr query_data);
+
+		public static ushort GetPort(/* Resolved as PointerToUnknownStruct to PurpleDnsQueryData */ IntPtr query_data)
+		{
+			/* Unable to process query_data, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_dnsquery_init
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_dnsquery_init()
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_dnsquery_init();
+
+		public static void Init()
+		{
+			purple_dnsquery_init();
+		}
+
+		/*
+		 * Function Name: purple_dnsquery_uninit
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_dnsquery_uninit()
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_dnsquery_uninit();
+
+		public static void Uninit()
+		{
+			purple_dnsquery_uninit();
+		}
+
+	}
+}
+
============================================================
--- libpurple/wrapper/Dnssrv.cs	c59bb8fbf8fc58be3aa973db86532fc092a63c0f
+++ libpurple/wrapper/Dnssrv.cs	c59bb8fbf8fc58be3aa973db86532fc092a63c0f
@@ -0,0 +1,160 @@
+/* PurpleWrapper - A .NET (CLR) wrapper for libpurple
+ *
+ * Purple is the legal property of its developers, whose names are too numerous
+ * to list here.  Please refer to the COPYRIGHT file distributed with this
+ * source distribution.
+ *
+ * This program 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.
+ *
+ * This program 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 this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02111-1301  USA
+ */
+
+/*
+ * This file was auto-generated from the libpurple header files to provide a
+ * clean interface between .NET/CLR and the unmanaged C library libpurple.
+ *
+ * This is the second major commit of the code.
+ * Next things:
+ *  - A few of the .h files have anonymous parameter names (eg: void cat(int, int).
+ *    This program will need to assign these parameters names.
+ *  - Function pointers inside structs aren't translated correctly into C#.
+ *  - Two places there are specific-length arrays (eg: char hostname[256]). The parser
+ *    does not detect them as an array.
+ */
+
+using System;
+using System.Collections.Generic;
+using System.Runtime.InteropServices;
+
+namespace PurpleWrapper
+{
+
+	/*
+	 * File: dnssrv.h
+	 */
+	public class Dnssrv
+	{
+		public delegate void PurpleSrvCallback(IntPtr resp, int results, IntPtr data);
+		public delegate void PurpleTxtCallback(IntPtr responses, IntPtr data);
+
+		/*
+		 * Function Name: purple_srv_resolve
+		 * Function Type: PurpleSrvQueryData *
+		 * Function RawType: PurpleSrvQueryData
+		 * Function Category: PointerToUnknownStruct
+		 */
+		/*
+		 * PurpleSrvQueryData * purple_srv_resolve(char * protocol, char * transport, char * domain, PurpleSrvCallback cb, gpointer extradata)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern IntPtr purple_srv_resolve(string protocol, string transport, string domain, IntPtr cb, IntPtr extradata);
+
+		public static /* Resolved as PointerToUnknownStruct to PurpleSrvQueryData */ IntPtr SrvResolve(string protocol, string transport, string domain, Dnssrv.PurpleSrvCallback cb, IntPtr extradata)
+		{
+			/* Unable to process cb, a KnownFunctionPointer. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_srv_cancel
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_srv_cancel(PurpleSrvQueryData * query_data)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_srv_cancel(IntPtr query_data);
+
+		public static void SrvCancel(/* Resolved as PointerToUnknownStruct to PurpleSrvQueryData */ IntPtr query_data)
+		{
+			/* Unable to process query_data, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_txt_resolve
+		 * Function Type: PurpleSrvQueryData *
+		 * Function RawType: PurpleSrvQueryData
+		 * Function Category: PointerToUnknownStruct
+		 */
+		/*
+		 * PurpleSrvQueryData * purple_txt_resolve(char * owner, char * domain, PurpleTxtCallback cb, gpointer extradata)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern IntPtr purple_txt_resolve(string owner, string domain, IntPtr cb, IntPtr extradata);
+
+		public static /* Resolved as PointerToUnknownStruct to PurpleSrvQueryData */ IntPtr TxtResolve(string owner, string domain, Dnssrv.PurpleTxtCallback cb, IntPtr extradata)
+		{
+			/* Unable to process cb, a KnownFunctionPointer. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_txt_cancel
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_txt_cancel(PurpleSrvQueryData * query_data)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_txt_cancel(IntPtr query_data);
+
+		public static void TxtCancel(/* Resolved as PointerToUnknownStruct to PurpleSrvQueryData */ IntPtr query_data)
+		{
+			/* Unable to process query_data, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_txt_response_get_content
+		 * Function Type: gchar *
+		 * Function RawType: gchar
+		 * Function Category: Native
+		 */
+		/*
+		 * gchar * purple_txt_response_get_content(PurpleTxtResponse * resp)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern string purple_txt_response_get_content(IntPtr resp);
+
+		public static string TxtResponseGetContent(/* Resolved as PointerToUnknownStruct to PurpleTxtResponse */ IntPtr resp)
+		{
+			/* Unable to process resp, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_txt_response_destroy
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_txt_response_destroy(PurpleTxtResponse * resp)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_txt_response_destroy(IntPtr resp);
+
+		public static void TxtResponseDestroy(/* Resolved as PointerToUnknownStruct to PurpleTxtResponse */ IntPtr resp)
+		{
+			/* Unable to process resp, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+	}
+}
+
============================================================
--- libpurple/wrapper/Eventloop.cs	f5750e76f742b83626b54d75d996af08b0ee85ba
+++ libpurple/wrapper/Eventloop.cs	f5750e76f742b83626b54d75d996af08b0ee85ba
@@ -0,0 +1,179 @@
+/* PurpleWrapper - A .NET (CLR) wrapper for libpurple
+ *
+ * Purple is the legal property of its developers, whose names are too numerous
+ * to list here.  Please refer to the COPYRIGHT file distributed with this
+ * source distribution.
+ *
+ * This program 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.
+ *
+ * This program 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 this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02111-1301  USA
+ */
+
+/*
+ * This file was auto-generated from the libpurple header files to provide a
+ * clean interface between .NET/CLR and the unmanaged C library libpurple.
+ *
+ * This is the second major commit of the code.
+ * Next things:
+ *  - A few of the .h files have anonymous parameter names (eg: void cat(int, int).
+ *    This program will need to assign these parameters names.
+ *  - Function pointers inside structs aren't translated correctly into C#.
+ *  - Two places there are specific-length arrays (eg: char hostname[256]). The parser
+ *    does not detect them as an array.
+ */
+
+using System;
+using System.Collections.Generic;
+using System.Runtime.InteropServices;
+
+namespace PurpleWrapper
+{
+
+	/*
+	 * File: eventloop.h
+	 */
+	public class Eventloop
+	{
+		public enum PurpleInputCondition
+		{
+			PURPLE_INPUT_READ = 1 << 0,
+			PURPLE_INPUT_WRITE = 1 << 1
+		};
+
+		public delegate void PurpleInputFunction(/* Unresolved: [Category: Unknown], [Name:  ] */ IntPtr _PurpleWrapper_arg0, /* Unresolved: [Category: Unknown], [Name:  ] */ IntPtr _PurpleWrapper_arg1, /* Unresolved: [Category: Unknown], [Name:  ] */ IntPtr _PurpleWrapper_arg2);
+
+		/*
+		 * Function Name: purple_timeout_add
+		 * Function Type: guint
+		 * Function RawType: guint
+		 * Function Category: Native
+		 */
+		/*
+		 * guint purple_timeout_add(guint interval, GSourceFunc function, gpointer data)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern uint purple_timeout_add(uint interval, IntPtr function, IntPtr data);
+
+		public static uint TimeoutAdd(uint interval, /* libobject */ IntPtr function, IntPtr data)
+		{
+			/* Unable to process function, a GObjectObject. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_timeout_add_seconds
+		 * Function Type: guint
+		 * Function RawType: guint
+		 * Function Category: Native
+		 */
+		/*
+		 * guint purple_timeout_add_seconds(guint interval, GSourceFunc function, gpointer data)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern uint purple_timeout_add_seconds(uint interval, IntPtr function, IntPtr data);
+
+		public static uint TimeoutAddSeconds(uint interval, /* libobject */ IntPtr function, IntPtr data)
+		{
+			/* Unable to process function, a GObjectObject. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_timeout_remove
+		 * Function Type: gboolean
+		 * Function RawType: gboolean
+		 * Function Category: Native
+		 */
+		/*
+		 * gboolean purple_timeout_remove(guint handle)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern bool purple_timeout_remove(uint handle);
+
+		public static bool TimeoutRemove(uint handle)
+		{
+			return purple_timeout_remove(handle);
+		}
+
+		/*
+		 * Function Name: purple_input_remove
+		 * Function Type: gboolean
+		 * Function RawType: gboolean
+		 * Function Category: Native
+		 */
+		/*
+		 * gboolean purple_input_remove(guint handle)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern bool purple_input_remove(uint handle);
+
+		public static bool InputRemove(uint handle)
+		{
+			return purple_input_remove(handle);
+		}
+
+		/*
+		 * Function Name: purple_input_get_error
+		 * Function Type: int
+		 * Function RawType: int
+		 * Function Category: Native
+		 */
+		/*
+		 * int purple_input_get_error(int fd, int * error)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern int purple_input_get_error(int fd, IntPtr error);
+
+		public static int InputGetError(int fd, /* Resolved as PointerToUnknownStruct to int */ IntPtr error)
+		{
+			/* Unable to process error, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_eventloop_set_ui_ops
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_eventloop_set_ui_ops(PurpleEventLoopUiOps * ops)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_eventloop_set_ui_ops(IntPtr ops);
+
+		public static void SetUiOps(PurpleEventLoopUiOps ops)
+		{
+			purple_eventloop_set_ui_ops(ops.Reference);
+		}
+
+		/*
+		 * Function Name: purple_eventloop_get_ui_ops
+		 * Function Type: PurpleEventLoopUiOps *
+		 * Function RawType: PurpleEventLoopUiOps
+		 * Function Category: PointerToKnownStruct
+		 */
+		/*
+		 * PurpleEventLoopUiOps * purple_eventloop_get_ui_ops()
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern IntPtr purple_eventloop_get_ui_ops();
+
+		public static PurpleEventLoopUiOps GetUiOps()
+		{
+			return new PurpleEventLoopUiOps(purple_eventloop_get_ui_ops());
+		}
+
+	}
+}
+
============================================================
--- libpurple/wrapper/Ft.cs	d26b0484f98878bb1afdc07340307d8d2decb390
+++ libpurple/wrapper/Ft.cs	d26b0484f98878bb1afdc07340307d8d2decb390
@@ -0,0 +1,822 @@
+/* PurpleWrapper - A .NET (CLR) wrapper for libpurple
+ *
+ * Purple is the legal property of its developers, whose names are too numerous
+ * to list here.  Please refer to the COPYRIGHT file distributed with this
+ * source distribution.
+ *
+ * This program 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.
+ *
+ * This program 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 this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02111-1301  USA
+ */
+
+/*
+ * This file was auto-generated from the libpurple header files to provide a
+ * clean interface between .NET/CLR and the unmanaged C library libpurple.
+ *
+ * This is the second major commit of the code.
+ * Next things:
+ *  - A few of the .h files have anonymous parameter names (eg: void cat(int, int).
+ *    This program will need to assign these parameters names.
+ *  - Function pointers inside structs aren't translated correctly into C#.
+ *  - Two places there are specific-length arrays (eg: char hostname[256]). The parser
+ *    does not detect them as an array.
+ */
+
+using System;
+using System.Collections.Generic;
+using System.Runtime.InteropServices;
+
+namespace PurpleWrapper
+{
+
+	/*
+	 * File: ft.h
+	 */
+	public class Ft
+	{
+		public enum PurpleXferType
+		{
+			PURPLE_XFER_UNKNOWN = 0,
+			PURPLE_XFER_SEND,
+			PURPLE_XFER_RECEIVE
+		};
+
+		public enum PurpleXferStatusType
+		{
+			PURPLE_XFER_STATUS_UNKNOWN = 0,
+			PURPLE_XFER_STATUS_NOT_STARTED,
+			PURPLE_XFER_STATUS_ACCEPTED,
+			PURPLE_XFER_STATUS_STARTED,
+			PURPLE_XFER_STATUS_DONE,
+			PURPLE_XFER_STATUS_CANCEL_LOCAL,
+			PURPLE_XFER_STATUS_CANCEL_REMOTE
+		};
+
+
+		/*
+		 * Function Name: purple_xfers_get_all
+		 * Function Type: GList *
+		 * Function RawType: GList
+		 * Function Category: PointerToGList
+		 */
+		/*
+		 * GList * purple_xfers_get_all()
+		 * 
+		 * Could not generate a wrapper for purple_xfers_get_all in file "ft.h".
+		 * Message: Unknown inner-type of argument 0 of purple_xfers_get_all
+		 */
+
+		/*
+		 * Function Name: purple_xfer_ref
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_xfer_ref(PurpleXfer * xfer)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_xfer_ref(IntPtr xfer);
+
+		public static void XferRef(PurpleXfer xfer)
+		{
+			purple_xfer_ref(xfer.Reference);
+		}
+
+		/*
+		 * Function Name: purple_xfer_unref
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_xfer_unref(PurpleXfer * xfer)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_xfer_unref(IntPtr xfer);
+
+		public static void XferUnref(PurpleXfer xfer)
+		{
+			purple_xfer_unref(xfer.Reference);
+		}
+
+		/*
+		 * Function Name: purple_xfer_request
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_xfer_request(PurpleXfer * xfer)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_xfer_request(IntPtr xfer);
+
+		public static void XferRequest(PurpleXfer xfer)
+		{
+			purple_xfer_request(xfer.Reference);
+		}
+
+		/*
+		 * Function Name: purple_xfer_request_accepted
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_xfer_request_accepted(PurpleXfer * xfer, char * filename)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_xfer_request_accepted(IntPtr xfer, string filename);
+
+		public static void XferRequestAccepted(PurpleXfer xfer, string filename)
+		{
+			purple_xfer_request_accepted(xfer.Reference, filename);
+		}
+
+		/*
+		 * Function Name: purple_xfer_request_denied
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_xfer_request_denied(PurpleXfer * xfer)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_xfer_request_denied(IntPtr xfer);
+
+		public static void XferRequestDenied(PurpleXfer xfer)
+		{
+			purple_xfer_request_denied(xfer.Reference);
+		}
+
+		/*
+		 * Function Name: purple_xfer_get_type
+		 * Function Type: PurpleXferType
+		 * Function RawType: PurpleXferType
+		 * Function Category: KnownEnum
+		 */
+		/*
+		 * PurpleXferType purple_xfer_get_type(PurpleXfer * xfer)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern Ft.PurpleXferType purple_xfer_get_type(IntPtr xfer);
+
+		public static Ft.PurpleXferType XferGetType(PurpleXfer xfer)
+		{
+			/* Unable to process the return value of purple_xfer_get_type, a KnownEnum. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_xfer_get_account
+		 * Function Type: PurpleAccount *
+		 * Function RawType: PurpleAccount
+		 * Function Category: PointerToKnownStruct
+		 */
+		/*
+		 * PurpleAccount * purple_xfer_get_account(PurpleXfer * xfer)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern IntPtr purple_xfer_get_account(IntPtr xfer);
+
+		public static PurpleAccount XferGetAccount(PurpleXfer xfer)
+		{
+			return new PurpleAccount(purple_xfer_get_account(xfer.Reference));
+		}
+
+		/*
+		 * Function Name: purple_xfer_get_remote_user
+		 * Function Type: char *
+		 * Function RawType: char
+		 * Function Category: Native
+		 */
+		/*
+		 * char * purple_xfer_get_remote_user(PurpleXfer * xfer)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern string purple_xfer_get_remote_user(IntPtr xfer);
+
+		public static string XferGetRemoteUser(PurpleXfer xfer)
+		{
+			return purple_xfer_get_remote_user(xfer.Reference);
+		}
+
+		/*
+		 * Function Name: purple_xfer_get_status
+		 * Function Type: PurpleXferStatusType
+		 * Function RawType: PurpleXferStatusType
+		 * Function Category: KnownEnum
+		 */
+		/*
+		 * PurpleXferStatusType purple_xfer_get_status(PurpleXfer * xfer)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern Ft.PurpleXferStatusType purple_xfer_get_status(IntPtr xfer);
+
+		public static Ft.PurpleXferStatusType XferGetStatus(PurpleXfer xfer)
+		{
+			/* Unable to process the return value of purple_xfer_get_status, a KnownEnum. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_xfer_is_canceled
+		 * Function Type: gboolean
+		 * Function RawType: gboolean
+		 * Function Category: Native
+		 */
+		/*
+		 * gboolean purple_xfer_is_canceled(PurpleXfer * xfer)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern bool purple_xfer_is_canceled(IntPtr xfer);
+
+		public static bool XferIsCanceled(PurpleXfer xfer)
+		{
+			return purple_xfer_is_canceled(xfer.Reference);
+		}
+
+		/*
+		 * Function Name: purple_xfer_is_completed
+		 * Function Type: gboolean
+		 * Function RawType: gboolean
+		 * Function Category: Native
+		 */
+		/*
+		 * gboolean purple_xfer_is_completed(PurpleXfer * xfer)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern bool purple_xfer_is_completed(IntPtr xfer);
+
+		public static bool XferIsCompleted(PurpleXfer xfer)
+		{
+			return purple_xfer_is_completed(xfer.Reference);
+		}
+
+		/*
+		 * Function Name: purple_xfer_get_filename
+		 * Function Type: char *
+		 * Function RawType: char
+		 * Function Category: Native
+		 */
+		/*
+		 * char * purple_xfer_get_filename(PurpleXfer * xfer)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern string purple_xfer_get_filename(IntPtr xfer);
+
+		public static string XferGetFilename(PurpleXfer xfer)
+		{
+			return purple_xfer_get_filename(xfer.Reference);
+		}
+
+		/*
+		 * Function Name: purple_xfer_get_local_filename
+		 * Function Type: char *
+		 * Function RawType: char
+		 * Function Category: Native
+		 */
+		/*
+		 * char * purple_xfer_get_local_filename(PurpleXfer * xfer)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern string purple_xfer_get_local_filename(IntPtr xfer);
+
+		public static string XferGetLocalFilename(PurpleXfer xfer)
+		{
+			return purple_xfer_get_local_filename(xfer.Reference);
+		}
+
+		/*
+		 * Function Name: purple_xfer_get_bytes_sent
+		 * Function Type: size_t
+		 * Function RawType: size_t
+		 * Function Category: Native
+		 */
+		/*
+		 * size_t purple_xfer_get_bytes_sent(PurpleXfer * xfer)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern ulong purple_xfer_get_bytes_sent(IntPtr xfer);
+
+		public static ulong XferGetBytesSent(PurpleXfer xfer)
+		{
+			return purple_xfer_get_bytes_sent(xfer.Reference);
+		}
+
+		/*
+		 * Function Name: purple_xfer_get_bytes_remaining
+		 * Function Type: size_t
+		 * Function RawType: size_t
+		 * Function Category: Native
+		 */
+		/*
+		 * size_t purple_xfer_get_bytes_remaining(PurpleXfer * xfer)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern ulong purple_xfer_get_bytes_remaining(IntPtr xfer);
+
+		public static ulong XferGetBytesRemaining(PurpleXfer xfer)
+		{
+			return purple_xfer_get_bytes_remaining(xfer.Reference);
+		}
+
+		/*
+		 * Function Name: purple_xfer_get_size
+		 * Function Type: size_t
+		 * Function RawType: size_t
+		 * Function Category: Native
+		 */
+		/*
+		 * size_t purple_xfer_get_size(PurpleXfer * xfer)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern ulong purple_xfer_get_size(IntPtr xfer);
+
+		public static ulong XferGetSize(PurpleXfer xfer)
+		{
+			return purple_xfer_get_size(xfer.Reference);
+		}
+
+		/*
+		 * Function Name: purple_xfer_get_progress
+		 * Function Type: double
+		 * Function RawType: double
+		 * Function Category: Native
+		 */
+		/*
+		 * double purple_xfer_get_progress(PurpleXfer * xfer)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern double purple_xfer_get_progress(IntPtr xfer);
+
+		public static double XferGetProgress(PurpleXfer xfer)
+		{
+			return purple_xfer_get_progress(xfer.Reference);
+		}
+
+		/*
+		 * Function Name: purple_xfer_get_local_port
+		 * Function Type: unsigned int
+		 * Function RawType: int
+		 * Function Category: Native
+		 */
+		/*
+		 * unsigned int purple_xfer_get_local_port(PurpleXfer * xfer)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern uint purple_xfer_get_local_port(IntPtr xfer);
+
+		public static uint XferGetLocalPort(PurpleXfer xfer)
+		{
+			return purple_xfer_get_local_port(xfer.Reference);
+		}
+
+		/*
+		 * Function Name: purple_xfer_get_remote_ip
+		 * Function Type: char *
+		 * Function RawType: char
+		 * Function Category: Native
+		 */
+		/*
+		 * char * purple_xfer_get_remote_ip(PurpleXfer * xfer)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern string purple_xfer_get_remote_ip(IntPtr xfer);
+
+		public static string XferGetRemoteIp(PurpleXfer xfer)
+		{
+			return purple_xfer_get_remote_ip(xfer.Reference);
+		}
+
+		/*
+		 * Function Name: purple_xfer_get_remote_port
+		 * Function Type: unsigned int
+		 * Function RawType: int
+		 * Function Category: Native
+		 */
+		/*
+		 * unsigned int purple_xfer_get_remote_port(PurpleXfer * xfer)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern uint purple_xfer_get_remote_port(IntPtr xfer);
+
+		public static uint XferGetRemotePort(PurpleXfer xfer)
+		{
+			return purple_xfer_get_remote_port(xfer.Reference);
+		}
+
+		/*
+		 * Function Name: purple_xfer_get_start_time
+		 * Function Type: time_t
+		 * Function RawType: time_t
+		 * Function Category: DateTime
+		 */
+		/*
+		 * time_t purple_xfer_get_start_time(PurpleXfer * xfer)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern ulong purple_xfer_get_start_time(IntPtr xfer);
+
+		public static DateTime XferGetStartTime(PurpleXfer xfer)
+		{
+			/* Unable to process the return value of purple_xfer_get_start_time, a DateTime. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_xfer_get_end_time
+		 * Function Type: time_t
+		 * Function RawType: time_t
+		 * Function Category: DateTime
+		 */
+		/*
+		 * time_t purple_xfer_get_end_time(PurpleXfer * xfer)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern ulong purple_xfer_get_end_time(IntPtr xfer);
+
+		public static DateTime XferGetEndTime(PurpleXfer xfer)
+		{
+			/* Unable to process the return value of purple_xfer_get_end_time, a DateTime. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_xfer_set_completed
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_xfer_set_completed(PurpleXfer * xfer, gboolean completed)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_xfer_set_completed(IntPtr xfer, bool completed);
+
+		public static void XferSetCompleted(PurpleXfer xfer, bool completed)
+		{
+			purple_xfer_set_completed(xfer.Reference, completed);
+		}
+
+		/*
+		 * Function Name: purple_xfer_set_message
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_xfer_set_message(PurpleXfer * xfer, char * message)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_xfer_set_message(IntPtr xfer, string message);
+
+		public static void XferSetMessage(PurpleXfer xfer, string message)
+		{
+			purple_xfer_set_message(xfer.Reference, message);
+		}
+
+		/*
+		 * Function Name: purple_xfer_set_filename
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_xfer_set_filename(PurpleXfer * xfer, char * filename)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_xfer_set_filename(IntPtr xfer, string filename);
+
+		public static void XferSetFilename(PurpleXfer xfer, string filename)
+		{
+			purple_xfer_set_filename(xfer.Reference, filename);
+		}
+
+		/*
+		 * Function Name: purple_xfer_set_local_filename
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_xfer_set_local_filename(PurpleXfer * xfer, char * filename)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_xfer_set_local_filename(IntPtr xfer, string filename);
+
+		public static void XferSetLocalFilename(PurpleXfer xfer, string filename)
+		{
+			purple_xfer_set_local_filename(xfer.Reference, filename);
+		}
+
+		/*
+		 * Function Name: purple_xfer_set_size
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_xfer_set_size(PurpleXfer * xfer, size_t size)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_xfer_set_size(IntPtr xfer, ulong size);
+
+		public static void XferSetSize(PurpleXfer xfer, ulong size)
+		{
+			purple_xfer_set_size(xfer.Reference, size);
+		}
+
+		/*
+		 * Function Name: purple_xfer_set_bytes_sent
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_xfer_set_bytes_sent(PurpleXfer * xfer, size_t bytes_sent)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_xfer_set_bytes_sent(IntPtr xfer, ulong bytes_sent);
+
+		public static void XferSetBytesSent(PurpleXfer xfer, ulong bytes_sent)
+		{
+			purple_xfer_set_bytes_sent(xfer.Reference, bytes_sent);
+		}
+
+		/*
+		 * Function Name: purple_xfer_get_ui_ops
+		 * Function Type: PurpleXferUiOps *
+		 * Function RawType: PurpleXferUiOps
+		 * Function Category: PointerToUnknownStruct
+		 */
+		/*
+		 * PurpleXferUiOps * purple_xfer_get_ui_ops(PurpleXfer * xfer)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern IntPtr purple_xfer_get_ui_ops(IntPtr xfer);
+
+		public static /* Resolved as PointerToUnknownStruct to PurpleXferUiOps */ IntPtr XferGetUiOps(PurpleXfer xfer)
+		{
+			/* Unable to process the return value of purple_xfer_get_ui_ops, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_xfer_read
+		 * Function Type: gssize
+		 * Function RawType: gssize
+		 * Function Category: Native
+		 */
+		/*
+		 * gssize purple_xfer_read(PurpleXfer * xfer, guchar ** buffer)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern long purple_xfer_read(IntPtr xfer, IntPtr buffer);
+
+		public static long XferRead(PurpleXfer xfer, /* Resolved as PointerToUnknownStruct to guchar */ IntPtr buffer)
+		{
+			/* Unable to process buffer, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_xfer_write
+		 * Function Type: gssize
+		 * Function RawType: gssize
+		 * Function Category: Native
+		 */
+		/*
+		 * gssize purple_xfer_write(PurpleXfer * xfer, guchar * buffer, gsize size)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern long purple_xfer_write(IntPtr xfer, IntPtr buffer, ulong size);
+
+		public static long XferWrite(PurpleXfer xfer, /* Resolved as PointerToUnknownStruct to guchar */ IntPtr buffer, ulong size)
+		{
+			/* Unable to process buffer, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_xfer_end
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_xfer_end(PurpleXfer * xfer)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_xfer_end(IntPtr xfer);
+
+		public static void XferEnd(PurpleXfer xfer)
+		{
+			purple_xfer_end(xfer.Reference);
+		}
+
+		/*
+		 * Function Name: purple_xfer_add
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_xfer_add(PurpleXfer * xfer)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_xfer_add(IntPtr xfer);
+
+		public static void XferAdd(PurpleXfer xfer)
+		{
+			purple_xfer_add(xfer.Reference);
+		}
+
+		/*
+		 * Function Name: purple_xfer_cancel_local
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_xfer_cancel_local(PurpleXfer * xfer)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_xfer_cancel_local(IntPtr xfer);
+
+		public static void XferCancelLocal(PurpleXfer xfer)
+		{
+			purple_xfer_cancel_local(xfer.Reference);
+		}
+
+		/*
+		 * Function Name: purple_xfer_cancel_remote
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_xfer_cancel_remote(PurpleXfer * xfer)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_xfer_cancel_remote(IntPtr xfer);
+
+		public static void XferCancelRemote(PurpleXfer xfer)
+		{
+			purple_xfer_cancel_remote(xfer.Reference);
+		}
+
+		/*
+		 * Function Name: purple_xfer_error
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_xfer_error(PurpleXferType type, PurpleAccount * account, char * who, char * msg)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_xfer_error(Ft.PurpleXferType type, IntPtr account, string who, string msg);
+
+		public static void XferError(Ft.PurpleXferType type, PurpleAccount account, string who, string msg)
+		{
+			/* Unable to process type, a KnownEnum. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_xfer_update_progress
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_xfer_update_progress(PurpleXfer * xfer)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_xfer_update_progress(IntPtr xfer);
+
+		public static void XferUpdateProgress(PurpleXfer xfer)
+		{
+			purple_xfer_update_progress(xfer.Reference);
+		}
+
+		/*
+		 * Function Name: purple_xfer_conversation_write
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_xfer_conversation_write(PurpleXfer * xfer, char * message, gboolean is_error)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_xfer_conversation_write(IntPtr xfer, string message, bool is_error);
+
+		public static void XferConversationWrite(PurpleXfer xfer, string message, bool is_error)
+		{
+			purple_xfer_conversation_write(xfer.Reference, message, is_error);
+		}
+
+		/*
+		 * Function Name: purple_xfers_get_handle
+		 * Function Type: void *
+		 * Function RawType: void
+		 * Function Category: VoidPointer
+		 */
+		/*
+		 * void * purple_xfers_get_handle()
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern IntPtr purple_xfers_get_handle();
+
+		public static IntPtr XfersGetHandle()
+		{
+			return purple_xfers_get_handle();
+		}
+
+		/*
+		 * Function Name: purple_xfers_init
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_xfers_init()
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_xfers_init();
+
+		public static void XfersInit()
+		{
+			purple_xfers_init();
+		}
+
+		/*
+		 * Function Name: purple_xfers_uninit
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_xfers_uninit()
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_xfers_uninit();
+
+		public static void XfersUninit()
+		{
+			purple_xfers_uninit();
+		}
+
+		/*
+		 * Function Name: purple_xfers_set_ui_ops
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_xfers_set_ui_ops(PurpleXferUiOps * ops)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_xfers_set_ui_ops(IntPtr ops);
+
+		public static void XfersSetUiOps(/* Resolved as PointerToUnknownStruct to PurpleXferUiOps */ IntPtr ops)
+		{
+			/* Unable to process ops, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_xfers_get_ui_ops
+		 * Function Type: PurpleXferUiOps *
+		 * Function RawType: PurpleXferUiOps
+		 * Function Category: PointerToUnknownStruct
+		 */
+		/*
+		 * PurpleXferUiOps * purple_xfers_get_ui_ops()
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern IntPtr purple_xfers_get_ui_ops();
+
+		public static /* Resolved as PointerToUnknownStruct to PurpleXferUiOps */ IntPtr XfersGetUiOps()
+		{
+			/* Unable to process the return value of purple_xfers_get_ui_ops, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+	}
+}
+
============================================================
--- libpurple/wrapper/Idle.cs	93dc3e0f19f2a89eb61c29871058d6e4b5a27bfe
+++ libpurple/wrapper/Idle.cs	93dc3e0f19f2a89eb61c29871058d6e4b5a27bfe
@@ -0,0 +1,155 @@
+/* PurpleWrapper - A .NET (CLR) wrapper for libpurple
+ *
+ * Purple is the legal property of its developers, whose names are too numerous
+ * to list here.  Please refer to the COPYRIGHT file distributed with this
+ * source distribution.
+ *
+ * This program 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.
+ *
+ * This program 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 this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02111-1301  USA
+ */
+
+/*
+ * This file was auto-generated from the libpurple header files to provide a
+ * clean interface between .NET/CLR and the unmanaged C library libpurple.
+ *
+ * This is the second major commit of the code.
+ * Next things:
+ *  - A few of the .h files have anonymous parameter names (eg: void cat(int, int).
+ *    This program will need to assign these parameters names.
+ *  - Function pointers inside structs aren't translated correctly into C#.
+ *  - Two places there are specific-length arrays (eg: char hostname[256]). The parser
+ *    does not detect them as an array.
+ */
+
+using System;
+using System.Collections.Generic;
+using System.Runtime.InteropServices;
+
+namespace PurpleWrapper
+{
+
+	/*
+	 * File: idle.h
+	 */
+	public class Idle
+	{
+
+		/*
+		 * Function Name: purple_idle_touch
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_idle_touch()
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_idle_touch();
+
+		public static void Touch()
+		{
+			purple_idle_touch();
+		}
+
+		/*
+		 * Function Name: purple_idle_set
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_idle_set(time_t time)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_idle_set(ulong time);
+
+		public static void Set(DateTime time)
+		{
+			ulong _PurpleWrapper_param0 = (ulong)(time - new DateTime(1970, 1, 1)).TotalSeconds;
+			purple_idle_set(_PurpleWrapper_param0);
+		}
+
+		/*
+		 * Function Name: purple_idle_set_ui_ops
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_idle_set_ui_ops(PurpleIdleUiOps * ops)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_idle_set_ui_ops(IntPtr ops);
+
+		public static void SetUiOps(/* Resolved as PointerToUnknownStruct to PurpleIdleUiOps */ IntPtr ops)
+		{
+			/* Unable to process ops, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_idle_get_ui_ops
+		 * Function Type: PurpleIdleUiOps *
+		 * Function RawType: PurpleIdleUiOps
+		 * Function Category: PointerToUnknownStruct
+		 */
+		/*
+		 * PurpleIdleUiOps * purple_idle_get_ui_ops()
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern IntPtr purple_idle_get_ui_ops();
+
+		public static /* Resolved as PointerToUnknownStruct to PurpleIdleUiOps */ IntPtr GetUiOps()
+		{
+			/* Unable to process the return value of purple_idle_get_ui_ops, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_idle_init
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_idle_init()
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_idle_init();
+
+		public static void Init()
+		{
+			purple_idle_init();
+		}
+
+		/*
+		 * Function Name: purple_idle_uninit
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_idle_uninit()
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_idle_uninit();
+
+		public static void Uninit()
+		{
+			purple_idle_uninit();
+		}
+
+	}
+}
+
============================================================
--- libpurple/wrapper/Imgstore.cs	b1afc7cf2aede378f09ae050e66aaf8be55eb8b9
+++ libpurple/wrapper/Imgstore.cs	b1afc7cf2aede378f09ae050e66aaf8be55eb8b9
@@ -0,0 +1,314 @@
+/* PurpleWrapper - A .NET (CLR) wrapper for libpurple
+ *
+ * Purple is the legal property of its developers, whose names are too numerous
+ * to list here.  Please refer to the COPYRIGHT file distributed with this
+ * source distribution.
+ *
+ * This program 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.
+ *
+ * This program 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 this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02111-1301  USA
+ */
+
+/*
+ * This file was auto-generated from the libpurple header files to provide a
+ * clean interface between .NET/CLR and the unmanaged C library libpurple.
+ *
+ * This is the second major commit of the code.
+ * Next things:
+ *  - A few of the .h files have anonymous parameter names (eg: void cat(int, int).
+ *    This program will need to assign these parameters names.
+ *  - Function pointers inside structs aren't translated correctly into C#.
+ *  - Two places there are specific-length arrays (eg: char hostname[256]). The parser
+ *    does not detect them as an array.
+ */
+
+using System;
+using System.Collections.Generic;
+using System.Runtime.InteropServices;
+
+namespace PurpleWrapper
+{
+
+	/*
+	 * File: imgstore.h
+	 */
+	public class Imgstore
+	{
+
+		/*
+		 * Function Name: purple_imgstore_add
+		 * Function Type: PurpleStoredImage *
+		 * Function RawType: PurpleStoredImage
+		 * Function Category: PointerToUnknownStruct
+		 */
+		/*
+		 * PurpleStoredImage * purple_imgstore_add(gpointer data, size_t size, char * filename)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern IntPtr purple_imgstore_add(IntPtr data, ulong size, string filename);
+
+		public static /* Resolved as PointerToUnknownStruct to PurpleStoredImage */ IntPtr Add(IntPtr data, ulong size, string filename)
+		{
+			/* Unable to process the return value of purple_imgstore_add, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_imgstore_new_from_file
+		 * Function Type: PurpleStoredImage *
+		 * Function RawType: PurpleStoredImage
+		 * Function Category: PointerToUnknownStruct
+		 */
+		/*
+		 * PurpleStoredImage * purple_imgstore_new_from_file(char * path)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern IntPtr purple_imgstore_new_from_file(string path);
+
+		public static /* Resolved as PointerToUnknownStruct to PurpleStoredImage */ IntPtr NewFromFile(string path)
+		{
+			/* Unable to process the return value of purple_imgstore_new_from_file, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_imgstore_add_with_id
+		 * Function Type: int
+		 * Function RawType: int
+		 * Function Category: Native
+		 */
+		/*
+		 * int purple_imgstore_add_with_id(gpointer data, size_t size, char * filename)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern int purple_imgstore_add_with_id(IntPtr data, ulong size, string filename);
+
+		public static int AddWithId(IntPtr data, ulong size, string filename)
+		{
+			return purple_imgstore_add_with_id(data, size, filename);
+		}
+
+		/*
+		 * Function Name: purple_imgstore_find_by_id
+		 * Function Type: PurpleStoredImage *
+		 * Function RawType: PurpleStoredImage
+		 * Function Category: PointerToUnknownStruct
+		 */
+		/*
+		 * PurpleStoredImage * purple_imgstore_find_by_id(int id)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern IntPtr purple_imgstore_find_by_id(int id);
+
+		public static /* Resolved as PointerToUnknownStruct to PurpleStoredImage */ IntPtr FindById(int id)
+		{
+			/* Unable to process the return value of purple_imgstore_find_by_id, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_imgstore_get_data
+		 * Function Type: gconstpointer
+		 * Function RawType: gconstpointer
+		 * Function Category: VoidPointer
+		 */
+		/*
+		 * gconstpointer purple_imgstore_get_data(PurpleStoredImage * img)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern IntPtr purple_imgstore_get_data(IntPtr img);
+
+		public static IntPtr GetData(/* Resolved as PointerToUnknownStruct to PurpleStoredImage */ IntPtr img)
+		{
+			/* Unable to process img, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_imgstore_get_size
+		 * Function Type: size_t
+		 * Function RawType: size_t
+		 * Function Category: Native
+		 */
+		/*
+		 * size_t purple_imgstore_get_size(PurpleStoredImage * img)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern ulong purple_imgstore_get_size(IntPtr img);
+
+		public static ulong GetSize(/* Resolved as PointerToUnknownStruct to PurpleStoredImage */ IntPtr img)
+		{
+			/* Unable to process img, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_imgstore_get_filename
+		 * Function Type: char *
+		 * Function RawType: char
+		 * Function Category: Native
+		 */
+		/*
+		 * char * purple_imgstore_get_filename(PurpleStoredImage * img)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern string purple_imgstore_get_filename(IntPtr img);
+
+		public static string GetFilename(/* Resolved as PointerToUnknownStruct to PurpleStoredImage */ IntPtr img)
+		{
+			/* Unable to process img, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_imgstore_get_extension
+		 * Function Type: char *
+		 * Function RawType: char
+		 * Function Category: Native
+		 */
+		/*
+		 * char * purple_imgstore_get_extension(PurpleStoredImage * img)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern string purple_imgstore_get_extension(IntPtr img);
+
+		public static string GetExtension(/* Resolved as PointerToUnknownStruct to PurpleStoredImage */ IntPtr img)
+		{
+			/* Unable to process img, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_imgstore_ref
+		 * Function Type: PurpleStoredImage *
+		 * Function RawType: PurpleStoredImage
+		 * Function Category: PointerToUnknownStruct
+		 */
+		/*
+		 * PurpleStoredImage * purple_imgstore_ref(PurpleStoredImage * img)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern IntPtr purple_imgstore_ref(IntPtr img);
+
+		public static /* Resolved as PointerToUnknownStruct to PurpleStoredImage */ IntPtr Ref(/* Resolved as PointerToUnknownStruct to PurpleStoredImage */ IntPtr img)
+		{
+			/* Unable to process img, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_imgstore_unref
+		 * Function Type: PurpleStoredImage *
+		 * Function RawType: PurpleStoredImage
+		 * Function Category: PointerToUnknownStruct
+		 */
+		/*
+		 * PurpleStoredImage * purple_imgstore_unref(PurpleStoredImage * img)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern IntPtr purple_imgstore_unref(IntPtr img);
+
+		public static /* Resolved as PointerToUnknownStruct to PurpleStoredImage */ IntPtr Unref(/* Resolved as PointerToUnknownStruct to PurpleStoredImage */ IntPtr img)
+		{
+			/* Unable to process img, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_imgstore_ref_by_id
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_imgstore_ref_by_id(int id)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_imgstore_ref_by_id(int id);
+
+		public static void RefById(int id)
+		{
+			purple_imgstore_ref_by_id(id);
+		}
+
+		/*
+		 * Function Name: purple_imgstore_unref_by_id
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_imgstore_unref_by_id(int id)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_imgstore_unref_by_id(int id);
+
+		public static void UnrefById(int id)
+		{
+			purple_imgstore_unref_by_id(id);
+		}
+
+		/*
+		 * Function Name: purple_imgstore_get_handle
+		 * Function Type: void *
+		 * Function RawType: void
+		 * Function Category: VoidPointer
+		 */
+		/*
+		 * void * purple_imgstore_get_handle()
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern IntPtr purple_imgstore_get_handle();
+
+		public static IntPtr GetHandle()
+		{
+			return purple_imgstore_get_handle();
+		}
+
+		/*
+		 * Function Name: purple_imgstore_init
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_imgstore_init()
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_imgstore_init();
+
+		public static void Init()
+		{
+			purple_imgstore_init();
+		}
+
+		/*
+		 * Function Name: purple_imgstore_uninit
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_imgstore_uninit()
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_imgstore_uninit();
+
+		public static void Uninit()
+		{
+			purple_imgstore_uninit();
+		}
+
+	}
+}
+
============================================================
--- libpurple/wrapper/Log.cs	930e955549ed2b0e8e9a3288c148164ef506cdb7
+++ libpurple/wrapper/Log.cs	930e955549ed2b0e8e9a3288c148164ef506cdb7
@@ -0,0 +1,510 @@
+/* PurpleWrapper - A .NET (CLR) wrapper for libpurple
+ *
+ * Purple is the legal property of its developers, whose names are too numerous
+ * to list here.  Please refer to the COPYRIGHT file distributed with this
+ * source distribution.
+ *
+ * This program 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.
+ *
+ * This program 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 this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02111-1301  USA
+ */
+
+/*
+ * This file was auto-generated from the libpurple header files to provide a
+ * clean interface between .NET/CLR and the unmanaged C library libpurple.
+ *
+ * This is the second major commit of the code.
+ * Next things:
+ *  - A few of the .h files have anonymous parameter names (eg: void cat(int, int).
+ *    This program will need to assign these parameters names.
+ *  - Function pointers inside structs aren't translated correctly into C#.
+ *  - Two places there are specific-length arrays (eg: char hostname[256]). The parser
+ *    does not detect them as an array.
+ */
+
+using System;
+using System.Collections.Generic;
+using System.Runtime.InteropServices;
+
+namespace PurpleWrapper
+{
+
+	/*
+	 * File: log.h
+	 */
+	public class Log
+	{
+		public enum PurpleLogType
+		{
+			PURPLE_LOG_IM,
+			PURPLE_LOG_CHAT,
+			PURPLE_LOG_SYSTEM
+		};
+
+		public enum PurpleLogReadFlags
+		{
+			PURPLE_LOG_READ_NO_NEWLINE = 1
+		};
+
+		public delegate void PurpleLogSetCallback(IntPtr sets, IntPtr set);
+
+		/*
+		 * Function Name: purple_log_free
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_log_free(PurpleLog * log)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_log_free(IntPtr log);
+
+		public static void Free(PurpleLog log)
+		{
+			purple_log_free(log.Reference);
+		}
+
+		/*
+		 * Function Name: purple_log_read
+		 * Function Type: char *
+		 * Function RawType: char
+		 * Function Category: Native
+		 */
+		/*
+		 * char * purple_log_read(PurpleLog * log, PurpleLogReadFlags * flags)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern string purple_log_read(IntPtr log, Log.PurpleLogReadFlags flags);
+
+		public static string Read(PurpleLog log, Log.PurpleLogReadFlags flags)
+		{
+			/* Unable to process flags, a KnownEnum. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_log_get_logs
+		 * Function Type: GList *
+		 * Function RawType: GList
+		 * Function Category: PointerToGList
+		 */
+		/*
+		 * GList * purple_log_get_logs(PurpleLogType type, char * name, PurpleAccount * account)
+		 * 
+		 * Could not generate a wrapper for purple_log_get_logs in file "log.h".
+		 * Message: Unknown inner-type of argument 0 of purple_log_get_logs
+		 */
+
+		/*
+		 * Function Name: purple_log_get_log_sets
+		 * Function Type: GHashTable *
+		 * Function RawType: GHashTable
+		 * Function Category: PointerToGHashTable
+		 */
+		/*
+		 * GHashTable * purple_log_get_log_sets()
+		 * 
+		 * Could not generate a wrapper for purple_log_get_log_sets in file "log.h".
+		 * Message: Unknown inner-type of argument 0 of purple_log_get_log_sets
+		 */
+
+		/*
+		 * Function Name: purple_log_get_system_logs
+		 * Function Type: GList *
+		 * Function RawType: GList
+		 * Function Category: PointerToGList
+		 */
+		/*
+		 * GList * purple_log_get_system_logs(PurpleAccount * account)
+		 * 
+		 * Could not generate a wrapper for purple_log_get_system_logs in file "log.h".
+		 * Message: Unknown inner-type of argument 0 of purple_log_get_system_logs
+		 */
+
+		/*
+		 * Function Name: purple_log_get_size
+		 * Function Type: int
+		 * Function RawType: int
+		 * Function Category: Native
+		 */
+		/*
+		 * int purple_log_get_size(PurpleLog * log)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern int purple_log_get_size(IntPtr log);
+
+		public static int GetSize(PurpleLog log)
+		{
+			return purple_log_get_size(log.Reference);
+		}
+
+		/*
+		 * Function Name: purple_log_get_total_size
+		 * Function Type: int
+		 * Function RawType: int
+		 * Function Category: Native
+		 */
+		/*
+		 * int purple_log_get_total_size(PurpleLogType type, char * name, PurpleAccount * account)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern int purple_log_get_total_size(Log.PurpleLogType type, string name, IntPtr account);
+
+		public static int GetTotalSize(Log.PurpleLogType type, string name, PurpleAccount account)
+		{
+			/* Unable to process type, a KnownEnum. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_log_get_activity_score
+		 * Function Type: int
+		 * Function RawType: int
+		 * Function Category: Native
+		 */
+		/*
+		 * int purple_log_get_activity_score(PurpleLogType type, char * name, PurpleAccount * account)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern int purple_log_get_activity_score(Log.PurpleLogType type, string name, IntPtr account);
+
+		public static int GetActivityScore(Log.PurpleLogType type, string name, PurpleAccount account)
+		{
+			/* Unable to process type, a KnownEnum. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_log_is_deletable
+		 * Function Type: gboolean
+		 * Function RawType: gboolean
+		 * Function Category: Native
+		 */
+		/*
+		 * gboolean purple_log_is_deletable(PurpleLog * log)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern bool purple_log_is_deletable(IntPtr log);
+
+		public static bool IsDeletable(PurpleLog log)
+		{
+			return purple_log_is_deletable(log.Reference);
+		}
+
+		/*
+		 * Function Name: purple_log_delete
+		 * Function Type: gboolean
+		 * Function RawType: gboolean
+		 * Function Category: Native
+		 */
+		/*
+		 * gboolean purple_log_delete(PurpleLog * log)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern bool purple_log_delete(IntPtr log);
+
+		public static bool Delete(PurpleLog log)
+		{
+			return purple_log_delete(log.Reference);
+		}
+
+		/*
+		 * Function Name: purple_log_get_log_dir
+		 * Function Type: char *
+		 * Function RawType: char
+		 * Function Category: Native
+		 */
+		/*
+		 * char * purple_log_get_log_dir(PurpleLogType type, char * name, PurpleAccount * account)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern string purple_log_get_log_dir(Log.PurpleLogType type, string name, IntPtr account);
+
+		public static string GetLogDir(Log.PurpleLogType type, string name, PurpleAccount account)
+		{
+			/* Unable to process type, a KnownEnum. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_log_compare
+		 * Function Type: gint
+		 * Function RawType: gint
+		 * Function Category: Native
+		 */
+		/*
+		 * gint purple_log_compare(gconstpointer y, gconstpointer z)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern int purple_log_compare(IntPtr y, IntPtr z);
+
+		public static int Compare(IntPtr y, IntPtr z)
+		{
+			return purple_log_compare(y, z);
+		}
+
+		/*
+		 * Function Name: purple_log_set_compare
+		 * Function Type: gint
+		 * Function RawType: gint
+		 * Function Category: Native
+		 */
+		/*
+		 * gint purple_log_set_compare(gconstpointer y, gconstpointer z)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern int purple_log_set_compare(IntPtr y, IntPtr z);
+
+		public static int SetCompare(IntPtr y, IntPtr z)
+		{
+			return purple_log_set_compare(y, z);
+		}
+
+		/*
+		 * Function Name: purple_log_set_free
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_log_set_free(PurpleLogSet * set)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_log_set_free(IntPtr set);
+
+		public static void SetFree(PurpleLogSet set)
+		{
+			purple_log_set_free(set.Reference);
+		}
+
+		/*
+		 * Function Name: purple_log_common_writer
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_log_common_writer(PurpleLog * log, char * ext)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_log_common_writer(IntPtr log, string ext);
+
+		public static void CommonWriter(PurpleLog log, string ext)
+		{
+			purple_log_common_writer(log.Reference, ext);
+		}
+
+		/*
+		 * Function Name: purple_log_common_sizer
+		 * Function Type: int
+		 * Function RawType: int
+		 * Function Category: Native
+		 */
+		/*
+		 * int purple_log_common_sizer(PurpleLog * log)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern int purple_log_common_sizer(IntPtr log);
+
+		public static int CommonSizer(PurpleLog log)
+		{
+			return purple_log_common_sizer(log.Reference);
+		}
+
+		/*
+		 * Function Name: purple_log_common_deleter
+		 * Function Type: gboolean
+		 * Function RawType: gboolean
+		 * Function Category: Native
+		 */
+		/*
+		 * gboolean purple_log_common_deleter(PurpleLog * log)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern bool purple_log_common_deleter(IntPtr log);
+
+		public static bool CommonDeleter(PurpleLog log)
+		{
+			return purple_log_common_deleter(log.Reference);
+		}
+
+		/*
+		 * Function Name: purple_log_common_is_deletable
+		 * Function Type: gboolean
+		 * Function RawType: gboolean
+		 * Function Category: Native
+		 */
+		/*
+		 * gboolean purple_log_common_is_deletable(PurpleLog * log)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern bool purple_log_common_is_deletable(IntPtr log);
+
+		public static bool CommonIsDeletable(PurpleLog log)
+		{
+			return purple_log_common_is_deletable(log.Reference);
+		}
+
+		/*
+		 * Function Name: purple_log_logger_free
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_log_logger_free(PurpleLogLogger * logger)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_log_logger_free(IntPtr logger);
+
+		public static void LoggerFree(PurpleLogLogger logger)
+		{
+			purple_log_logger_free(logger.Reference);
+		}
+
+		/*
+		 * Function Name: purple_log_logger_add
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_log_logger_add(PurpleLogLogger * logger)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_log_logger_add(IntPtr logger);
+
+		public static void LoggerAdd(PurpleLogLogger logger)
+		{
+			purple_log_logger_add(logger.Reference);
+		}
+
+		/*
+		 * Function Name: purple_log_logger_remove
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_log_logger_remove(PurpleLogLogger * logger)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_log_logger_remove(IntPtr logger);
+
+		public static void LoggerRemove(PurpleLogLogger logger)
+		{
+			purple_log_logger_remove(logger.Reference);
+		}
+
+		/*
+		 * Function Name: purple_log_logger_set
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_log_logger_set(PurpleLogLogger * logger)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_log_logger_set(IntPtr logger);
+
+		public static void LoggerSet(PurpleLogLogger logger)
+		{
+			purple_log_logger_set(logger.Reference);
+		}
+
+		/*
+		 * Function Name: purple_log_logger_get
+		 * Function Type: PurpleLogLogger *
+		 * Function RawType: PurpleLogLogger
+		 * Function Category: PointerToKnownStruct
+		 */
+		/*
+		 * PurpleLogLogger * purple_log_logger_get()
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern IntPtr purple_log_logger_get();
+
+		public static PurpleLogLogger LoggerGet()
+		{
+			return new PurpleLogLogger(purple_log_logger_get());
+		}
+
+		/*
+		 * Function Name: purple_log_logger_get_options
+		 * Function Type: GList *
+		 * Function RawType: GList
+		 * Function Category: PointerToGList
+		 */
+		/*
+		 * GList * purple_log_logger_get_options()
+		 * 
+		 * Could not generate a wrapper for purple_log_logger_get_options in file "log.h".
+		 * Message: Unknown inner-type of argument 0 of purple_log_logger_get_options
+		 */
+
+		/*
+		 * Function Name: purple_log_init
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_log_init()
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_log_init();
+
+		public static void Init()
+		{
+			purple_log_init();
+		}
+
+		/*
+		 * Function Name: purple_log_get_handle
+		 * Function Type: void *
+		 * Function RawType: void
+		 * Function Category: VoidPointer
+		 */
+		/*
+		 * void * purple_log_get_handle()
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern IntPtr purple_log_get_handle();
+
+		public static IntPtr GetHandle()
+		{
+			return purple_log_get_handle();
+		}
+
+		/*
+		 * Function Name: purple_log_uninit
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_log_uninit()
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_log_uninit();
+
+		public static void Uninit()
+		{
+			purple_log_uninit();
+		}
+
+	}
+}
+
============================================================
--- libpurple/wrapper/Media.cs	e2af2714fadc4bb277a70ef33dfac6839ac673ff
+++ libpurple/wrapper/Media.cs	e2af2714fadc4bb277a70ef33dfac6839ac673ff
@@ -0,0 +1,781 @@
+/* PurpleWrapper - A .NET (CLR) wrapper for libpurple
+ *
+ * Purple is the legal property of its developers, whose names are too numerous
+ * to list here.  Please refer to the COPYRIGHT file distributed with this
+ * source distribution.
+ *
+ * This program 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.
+ *
+ * This program 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 this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02111-1301  USA
+ */
+
+/*
+ * This file was auto-generated from the libpurple header files to provide a
+ * clean interface between .NET/CLR and the unmanaged C library libpurple.
+ *
+ * This is the second major commit of the code.
+ * Next things:
+ *  - A few of the .h files have anonymous parameter names (eg: void cat(int, int).
+ *    This program will need to assign these parameters names.
+ *  - Function pointers inside structs aren't translated correctly into C#.
+ *  - Two places there are specific-length arrays (eg: char hostname[256]). The parser
+ *    does not detect them as an array.
+ */
+
+using System;
+using System.Collections.Generic;
+using System.Runtime.InteropServices;
+
+namespace PurpleWrapper
+{
+
+	/*
+	 * File: media.h
+	 */
+	public class Media
+	{
+		public enum PurpleMediaCaps
+		{
+			PURPLE_MEDIA_CAPS_NONE = 0,
+			PURPLE_MEDIA_CAPS_AUDIO = 1,
+			PURPLE_MEDIA_CAPS_AUDIO_SINGLE_DIRECTION = 1 << 1,
+			PURPLE_MEDIA_CAPS_VIDEO = 1 << 2,
+			PURPLE_MEDIA_CAPS_VIDEO_SINGLE_DIRECTION = 1 << 3,
+			PURPLE_MEDIA_CAPS_AUDIO_VIDEO = 1 << 4,
+			PURPLE_MEDIA_CAPS_MODIFY_SESSION = 1 << 5,
+			PURPLE_MEDIA_CAPS_CHANGE_DIRECTION = 1 << 6
+		};
+
+		public enum PurpleMediaSessionType
+		{
+			PURPLE_MEDIA_NONE = 0,
+			PURPLE_MEDIA_RECV_AUDIO = 1 << 0,
+			PURPLE_MEDIA_SEND_AUDIO = 1 << 1,
+			PURPLE_MEDIA_RECV_VIDEO = 1 << 2,
+			PURPLE_MEDIA_SEND_VIDEO = 1 << 3,
+			PURPLE_MEDIA_AUDIO = PURPLE_MEDIA_RECV_AUDIO | PURPLE_MEDIA_SEND_AUDIO,
+			PURPLE_MEDIA_VIDEO = PURPLE_MEDIA_RECV_VIDEO | PURPLE_MEDIA_SEND_VIDEO
+		};
+
+		public enum PurpleMediaState
+		{
+			PURPLE_MEDIA_STATE_NEW = 0,
+			PURPLE_MEDIA_STATE_CONNECTED,
+			PURPLE_MEDIA_STATE_END
+		};
+
+		public enum PurpleMediaInfoType
+		{
+			PURPLE_MEDIA_INFO_HANGUP = 0,
+			PURPLE_MEDIA_INFO_ACCEPT,
+			PURPLE_MEDIA_INFO_REJECT,
+			PURPLE_MEDIA_INFO_MUTE,
+			PURPLE_MEDIA_INFO_UNMUTE,
+			PURPLE_MEDIA_INFO_HOLD,
+			PURPLE_MEDIA_INFO_UNHOLD
+		};
+
+		public enum PurpleMediaCandidateType
+		{
+			PURPLE_MEDIA_CANDIDATE_TYPE_HOST,
+			PURPLE_MEDIA_CANDIDATE_TYPE_SRFLX,
+			PURPLE_MEDIA_CANDIDATE_TYPE_PRFLX,
+			PURPLE_MEDIA_CANDIDATE_TYPE_RELAY,
+			PURPLE_MEDIA_CANDIDATE_TYPE_MULTICAST
+		};
+
+		public enum PurpleMediaComponentType
+		{
+			PURPLE_MEDIA_COMPONENT_NONE = 0,
+			PURPLE_MEDIA_COMPONENT_RTP = 1,
+			PURPLE_MEDIA_COMPONENT_RTCP = 2
+		};
+
+		public enum PurpleMediaNetworkProtocol
+		{
+			PURPLE_MEDIA_NETWORK_PROTOCOL_UDP,
+			PURPLE_MEDIA_NETWORK_PROTOCOL_TCP
+		};
+
+
+		/*
+		 * Function Name: purple_media_session_type_get_type
+		 * Function Type: GType
+		 * Function RawType: GType
+		 * Function Category: GObjectObject
+		 */
+		/*
+		 * GType purple_media_session_type_get_type()
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern IntPtr purple_media_session_type_get_type();
+
+		public static /* libobject */ IntPtr SessionTypeGetType()
+		{
+			/* Unable to process the return value of purple_media_session_type_get_type, a GObjectObject. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_media_candidate_type_get_type
+		 * Function Type: GType
+		 * Function RawType: GType
+		 * Function Category: GObjectObject
+		 */
+		/*
+		 * GType purple_media_candidate_type_get_type()
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern IntPtr purple_media_candidate_type_get_type();
+
+		public static /* libobject */ IntPtr CandidateTypeGetType()
+		{
+			/* Unable to process the return value of purple_media_candidate_type_get_type, a GObjectObject. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_media_network_protocol_get_type
+		 * Function Type: GType
+		 * Function RawType: GType
+		 * Function Category: GObjectObject
+		 */
+		/*
+		 * GType purple_media_network_protocol_get_type()
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern IntPtr purple_media_network_protocol_get_type();
+
+		public static /* libobject */ IntPtr NetworkProtocolGetType()
+		{
+			/* Unable to process the return value of purple_media_network_protocol_get_type, a GObjectObject. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_media_get_type
+		 * Function Type: GType
+		 * Function RawType: GType
+		 * Function Category: GObjectObject
+		 */
+		/*
+		 * GType purple_media_get_type()
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern IntPtr purple_media_get_type();
+
+		public static /* libobject */ IntPtr GetType()
+		{
+			/* Unable to process the return value of purple_media_get_type, a GObjectObject. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_media_state_changed_get_type
+		 * Function Type: GType
+		 * Function RawType: GType
+		 * Function Category: GObjectObject
+		 */
+		/*
+		 * GType purple_media_state_changed_get_type()
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern IntPtr purple_media_state_changed_get_type();
+
+		public static /* libobject */ IntPtr StateChangedGetType()
+		{
+			/* Unable to process the return value of purple_media_state_changed_get_type, a GObjectObject. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_media_info_type_get_type
+		 * Function Type: GType
+		 * Function RawType: GType
+		 * Function Category: GObjectObject
+		 */
+		/*
+		 * GType purple_media_info_type_get_type()
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern IntPtr purple_media_info_type_get_type();
+
+		public static /* libobject */ IntPtr InfoTypeGetType()
+		{
+			/* Unable to process the return value of purple_media_info_type_get_type, a GObjectObject. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_media_candidate_get_type
+		 * Function Type: GType
+		 * Function RawType: GType
+		 * Function Category: GObjectObject
+		 */
+		/*
+		 * GType purple_media_candidate_get_type()
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern IntPtr purple_media_candidate_get_type();
+
+		public static /* libobject */ IntPtr CandidateGetType()
+		{
+			/* Unable to process the return value of purple_media_candidate_get_type, a GObjectObject. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_media_candidate_list_copy
+		 * Function Type: GList *
+		 * Function RawType: GList
+		 * Function Category: PointerToGList
+		 */
+		/*
+		 * GList * purple_media_candidate_list_copy(GList * candidates)
+		 * 
+		 * Could not generate a wrapper for purple_media_candidate_list_copy in file "media.h".
+		 * Message: Unknown inner-type of argument 0 of purple_media_candidate_list_copy
+		 */
+
+		/*
+		 * Function Name: purple_media_candidate_list_free
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_media_candidate_list_free(GList * candidates)
+		 * 
+		 * Could not generate a wrapper for purple_media_candidate_list_free in file "media.h".
+		 * Message: Unable to provide a type for GList as no function information was provided in code.
+		 */
+
+		/*
+		 * Function Name: purple_media_candidate_get_foundation
+		 * Function Type: gchar *
+		 * Function RawType: gchar
+		 * Function Category: Native
+		 */
+		/*
+		 * gchar * purple_media_candidate_get_foundation(PurpleMediaCandidate * candidate)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern string purple_media_candidate_get_foundation(IntPtr candidate);
+
+		public static string CandidateGetFoundation(/* Resolved as PointerToUnknownStruct to PurpleMediaCandidate */ IntPtr candidate)
+		{
+			/* Unable to process candidate, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_media_candidate_get_component_id
+		 * Function Type: guint
+		 * Function RawType: guint
+		 * Function Category: Native
+		 */
+		/*
+		 * guint purple_media_candidate_get_component_id(PurpleMediaCandidate * candidate)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern uint purple_media_candidate_get_component_id(IntPtr candidate);
+
+		public static uint CandidateGetComponentId(/* Resolved as PointerToUnknownStruct to PurpleMediaCandidate */ IntPtr candidate)
+		{
+			/* Unable to process candidate, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_media_candidate_get_ip
+		 * Function Type: gchar *
+		 * Function RawType: gchar
+		 * Function Category: Native
+		 */
+		/*
+		 * gchar * purple_media_candidate_get_ip(PurpleMediaCandidate * candidate)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern string purple_media_candidate_get_ip(IntPtr candidate);
+
+		public static string CandidateGetIp(/* Resolved as PointerToUnknownStruct to PurpleMediaCandidate */ IntPtr candidate)
+		{
+			/* Unable to process candidate, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_media_candidate_get_port
+		 * Function Type: guint16
+		 * Function RawType: guint16
+		 * Function Category: Native
+		 */
+		/*
+		 * guint16 purple_media_candidate_get_port(PurpleMediaCandidate * candidate)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern ushort purple_media_candidate_get_port(IntPtr candidate);
+
+		public static ushort CandidateGetPort(/* Resolved as PointerToUnknownStruct to PurpleMediaCandidate */ IntPtr candidate)
+		{
+			/* Unable to process candidate, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_media_candidate_get_base_ip
+		 * Function Type: gchar *
+		 * Function RawType: gchar
+		 * Function Category: Native
+		 */
+		/*
+		 * gchar * purple_media_candidate_get_base_ip(PurpleMediaCandidate * candidate)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern string purple_media_candidate_get_base_ip(IntPtr candidate);
+
+		public static string CandidateGetBaseIp(/* Resolved as PointerToUnknownStruct to PurpleMediaCandidate */ IntPtr candidate)
+		{
+			/* Unable to process candidate, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_media_candidate_get_base_port
+		 * Function Type: guint16
+		 * Function RawType: guint16
+		 * Function Category: Native
+		 */
+		/*
+		 * guint16 purple_media_candidate_get_base_port(PurpleMediaCandidate * candidate)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern ushort purple_media_candidate_get_base_port(IntPtr candidate);
+
+		public static ushort CandidateGetBasePort(/* Resolved as PointerToUnknownStruct to PurpleMediaCandidate */ IntPtr candidate)
+		{
+			/* Unable to process candidate, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_media_candidate_get_priority
+		 * Function Type: guint32
+		 * Function RawType: guint32
+		 * Function Category: Native
+		 */
+		/*
+		 * guint32 purple_media_candidate_get_priority(PurpleMediaCandidate * candidate)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern uint purple_media_candidate_get_priority(IntPtr candidate);
+
+		public static uint CandidateGetPriority(/* Resolved as PointerToUnknownStruct to PurpleMediaCandidate */ IntPtr candidate)
+		{
+			/* Unable to process candidate, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_media_candidate_get_username
+		 * Function Type: gchar *
+		 * Function RawType: gchar
+		 * Function Category: Native
+		 */
+		/*
+		 * gchar * purple_media_candidate_get_username(PurpleMediaCandidate * candidate)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern string purple_media_candidate_get_username(IntPtr candidate);
+
+		public static string CandidateGetUsername(/* Resolved as PointerToUnknownStruct to PurpleMediaCandidate */ IntPtr candidate)
+		{
+			/* Unable to process candidate, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_media_candidate_get_password
+		 * Function Type: gchar *
+		 * Function RawType: gchar
+		 * Function Category: Native
+		 */
+		/*
+		 * gchar * purple_media_candidate_get_password(PurpleMediaCandidate * candidate)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern string purple_media_candidate_get_password(IntPtr candidate);
+
+		public static string CandidateGetPassword(/* Resolved as PointerToUnknownStruct to PurpleMediaCandidate */ IntPtr candidate)
+		{
+			/* Unable to process candidate, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_media_candidate_get_ttl
+		 * Function Type: guint
+		 * Function RawType: guint
+		 * Function Category: Native
+		 */
+		/*
+		 * guint purple_media_candidate_get_ttl(PurpleMediaCandidate * candidate)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern uint purple_media_candidate_get_ttl(IntPtr candidate);
+
+		public static uint CandidateGetTtl(/* Resolved as PointerToUnknownStruct to PurpleMediaCandidate */ IntPtr candidate)
+		{
+			/* Unable to process candidate, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_media_codec_get_type
+		 * Function Type: GType
+		 * Function RawType: GType
+		 * Function Category: GObjectObject
+		 */
+		/*
+		 * GType purple_media_codec_get_type()
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern IntPtr purple_media_codec_get_type();
+
+		public static /* libobject */ IntPtr CodecGetType()
+		{
+			/* Unable to process the return value of purple_media_codec_get_type, a GObjectObject. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_media_codec_get_id
+		 * Function Type: guint
+		 * Function RawType: guint
+		 * Function Category: Native
+		 */
+		/*
+		 * guint purple_media_codec_get_id(PurpleMediaCodec * codec)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern uint purple_media_codec_get_id(IntPtr codec);
+
+		public static uint CodecGetId(/* Resolved as PointerToUnknownStruct to PurpleMediaCodec */ IntPtr codec)
+		{
+			/* Unable to process codec, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_media_codec_get_encoding_name
+		 * Function Type: gchar *
+		 * Function RawType: gchar
+		 * Function Category: Native
+		 */
+		/*
+		 * gchar * purple_media_codec_get_encoding_name(PurpleMediaCodec * codec)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern string purple_media_codec_get_encoding_name(IntPtr codec);
+
+		public static string CodecGetEncodingName(/* Resolved as PointerToUnknownStruct to PurpleMediaCodec */ IntPtr codec)
+		{
+			/* Unable to process codec, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_media_codec_get_clock_rate
+		 * Function Type: guint
+		 * Function RawType: guint
+		 * Function Category: Native
+		 */
+		/*
+		 * guint purple_media_codec_get_clock_rate(PurpleMediaCodec * codec)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern uint purple_media_codec_get_clock_rate(IntPtr codec);
+
+		public static uint CodecGetClockRate(/* Resolved as PointerToUnknownStruct to PurpleMediaCodec */ IntPtr codec)
+		{
+			/* Unable to process codec, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_media_codec_get_channels
+		 * Function Type: guint
+		 * Function RawType: guint
+		 * Function Category: Native
+		 */
+		/*
+		 * guint purple_media_codec_get_channels(PurpleMediaCodec * codec)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern uint purple_media_codec_get_channels(IntPtr codec);
+
+		public static uint CodecGetChannels(/* Resolved as PointerToUnknownStruct to PurpleMediaCodec */ IntPtr codec)
+		{
+			/* Unable to process codec, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_media_codec_get_optional_parameters
+		 * Function Type: GList *
+		 * Function RawType: GList
+		 * Function Category: PointerToGList
+		 */
+		/*
+		 * GList * purple_media_codec_get_optional_parameters(PurpleMediaCodec * codec)
+		 * 
+		 * Could not generate a wrapper for purple_media_codec_get_optional_parameters in file "media.h".
+		 * Message: Unknown inner-type of argument 0 of purple_media_codec_get_optional_parameters
+		 */
+
+		/*
+		 * Function Name: purple_media_codec_to_string
+		 * Function Type: gchar *
+		 * Function RawType: gchar
+		 * Function Category: Native
+		 */
+		/*
+		 * gchar * purple_media_codec_to_string(PurpleMediaCodec * codec)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern string purple_media_codec_to_string(IntPtr codec);
+
+		public static string CodecToString(/* Resolved as PointerToUnknownStruct to PurpleMediaCodec */ IntPtr codec)
+		{
+			/* Unable to process codec, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_media_codec_list_copy
+		 * Function Type: GList *
+		 * Function RawType: GList
+		 * Function Category: PointerToGList
+		 */
+		/*
+		 * GList * purple_media_codec_list_copy(GList * codecs)
+		 * 
+		 * Could not generate a wrapper for purple_media_codec_list_copy in file "media.h".
+		 * Message: Unknown inner-type of argument 0 of purple_media_codec_list_copy
+		 */
+
+		/*
+		 * Function Name: purple_media_codec_list_free
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_media_codec_list_free(GList * codecs)
+		 * 
+		 * Could not generate a wrapper for purple_media_codec_list_free in file "media.h".
+		 * Message: Unable to provide a type for GList as no function information was provided in code.
+		 */
+
+		/*
+		 * Function Name: purple_media_get_session_ids
+		 * Function Type: GList *
+		 * Function RawType: GList
+		 * Function Category: PointerToGList
+		 */
+		/*
+		 * GList * purple_media_get_session_ids(PurpleMedia * media)
+		 * 
+		 * Could not generate a wrapper for purple_media_get_session_ids in file "media.h".
+		 * Message: Unknown inner-type of argument 0 of purple_media_get_session_ids
+		 */
+
+		/*
+		 * Function Name: purple_media_get_account
+		 * Function Type: PurpleAccount *
+		 * Function RawType: PurpleAccount
+		 * Function Category: PointerToKnownStruct
+		 */
+		/*
+		 * PurpleAccount * purple_media_get_account(PurpleMedia * media)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern IntPtr purple_media_get_account(IntPtr media);
+
+		public static PurpleAccount GetAccount(/* Resolved as PointerToUnknownStruct to PurpleMedia */ IntPtr media)
+		{
+			/* Unable to process media, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_media_get_prpl_data
+		 * Function Type: gpointer
+		 * Function RawType: gpointer
+		 * Function Category: VoidPointer
+		 */
+		/*
+		 * gpointer purple_media_get_prpl_data(PurpleMedia * media)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern IntPtr purple_media_get_prpl_data(IntPtr media);
+
+		public static IntPtr GetPrplData(/* Resolved as PointerToUnknownStruct to PurpleMedia */ IntPtr media)
+		{
+			/* Unable to process media, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_media_set_prpl_data
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_media_set_prpl_data(PurpleMedia * media, gpointer prpl_data)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_media_set_prpl_data(IntPtr media, IntPtr prpl_data);
+
+		public static void SetPrplData(/* Resolved as PointerToUnknownStruct to PurpleMedia */ IntPtr media, IntPtr prpl_data)
+		{
+			/* Unable to process media, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_media_get_session_type
+		 * Function Type: PurpleMediaSessionType
+		 * Function RawType: PurpleMediaSessionType
+		 * Function Category: KnownEnum
+		 */
+		/*
+		 * PurpleMediaSessionType purple_media_get_session_type(PurpleMedia * media, gchar * sess_id)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern Media.PurpleMediaSessionType purple_media_get_session_type(IntPtr media, string sess_id);
+
+		public static Media.PurpleMediaSessionType GetSessionType(/* Resolved as PointerToUnknownStruct to PurpleMedia */ IntPtr media, string sess_id)
+		{
+			/* Unable to process media, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_media_get_manager
+		 * Function Type: _PurpleMediaManager *
+		 * Function RawType: _PurpleMediaManager
+		 * Function Category: PointerToUnknownStruct
+		 */
+		/*
+		 * _PurpleMediaManager * purple_media_get_manager(PurpleMedia * media)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern IntPtr purple_media_get_manager(IntPtr media);
+
+		public static /* Resolved as PointerToUnknownStruct to _PurpleMediaManager */ IntPtr GetManager(/* Resolved as PointerToUnknownStruct to PurpleMedia */ IntPtr media)
+		{
+			/* Unable to process media, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_media_get_codecs
+		 * Function Type: GList *
+		 * Function RawType: GList
+		 * Function Category: PointerToGList
+		 */
+		/*
+		 * GList * purple_media_get_codecs(PurpleMedia * media, gchar * sess_id)
+		 * 
+		 * Could not generate a wrapper for purple_media_get_codecs in file "media.h".
+		 * Message: Unknown inner-type of argument 0 of purple_media_get_codecs
+		 */
+
+		/*
+		 * Function Name: purple_media_set_send_codec
+		 * Function Type: gboolean
+		 * Function RawType: gboolean
+		 * Function Category: Native
+		 */
+		/*
+		 * gboolean purple_media_set_send_codec(PurpleMedia * media, gchar * sess_id, PurpleMediaCodec * codec)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern bool purple_media_set_send_codec(IntPtr media, string sess_id, IntPtr codec);
+
+		public static bool SetSendCodec(/* Resolved as PointerToUnknownStruct to PurpleMedia */ IntPtr media, string sess_id, /* Resolved as PointerToUnknownStruct to PurpleMediaCodec */ IntPtr codec)
+		{
+			/* Unable to process media, a PointerToUnknownStruct. */
+			/* Unable to process codec, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_media_codecs_ready
+		 * Function Type: gboolean
+		 * Function RawType: gboolean
+		 * Function Category: Native
+		 */
+		/*
+		 * gboolean purple_media_codecs_ready(PurpleMedia * media, gchar * sess_id)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern bool purple_media_codecs_ready(IntPtr media, string sess_id);
+
+		public static bool CodecsReady(/* Resolved as PointerToUnknownStruct to PurpleMedia */ IntPtr media, string sess_id)
+		{
+			/* Unable to process media, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_media_set_input_volume
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_media_set_input_volume(PurpleMedia * media, gchar * session_id, double level)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_media_set_input_volume(IntPtr media, string session_id, double level);
+
+		public static void SetInputVolume(/* Resolved as PointerToUnknownStruct to PurpleMedia */ IntPtr media, string session_id, double level)
+		{
+			/* Unable to process media, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_media_remove_output_windows
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_media_remove_output_windows(PurpleMedia * media)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_media_remove_output_windows(IntPtr media);
+
+		public static void RemoveOutputWindows(/* Resolved as PointerToUnknownStruct to PurpleMedia */ IntPtr media)
+		{
+			/* Unable to process media, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+	}
+}
+
============================================================
--- libpurple/wrapper/Mediamanager.cs	58d745ef6803366c1659314f7bacbf40aff321d9
+++ libpurple/wrapper/Mediamanager.cs	58d745ef6803366c1659314f7bacbf40aff321d9
@@ -0,0 +1,117 @@
+/* PurpleWrapper - A .NET (CLR) wrapper for libpurple
+ *
+ * Purple is the legal property of its developers, whose names are too numerous
+ * to list here.  Please refer to the COPYRIGHT file distributed with this
+ * source distribution.
+ *
+ * This program 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.
+ *
+ * This program 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 this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02111-1301  USA
+ */
+
+/*
+ * This file was auto-generated from the libpurple header files to provide a
+ * clean interface between .NET/CLR and the unmanaged C library libpurple.
+ *
+ * This is the second major commit of the code.
+ * Next things:
+ *  - A few of the .h files have anonymous parameter names (eg: void cat(int, int).
+ *    This program will need to assign these parameters names.
+ *  - Function pointers inside structs aren't translated correctly into C#.
+ *  - Two places there are specific-length arrays (eg: char hostname[256]). The parser
+ *    does not detect them as an array.
+ */
+
+using System;
+using System.Collections.Generic;
+using System.Runtime.InteropServices;
+
+namespace PurpleWrapper
+{
+
+	/*
+	 * File: mediamanager.h
+	 */
+	public class Mediamanager
+	{
+
+		/*
+		 * Function Name: purple_media_manager_get_type
+		 * Function Type: GType
+		 * Function RawType: GType
+		 * Function Category: GObjectObject
+		 */
+		/*
+		 * GType purple_media_manager_get_type()
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern IntPtr purple_media_manager_get_type();
+
+		public static /* libobject */ IntPtr MediaManagerGetType()
+		{
+			/* Unable to process the return value of purple_media_manager_get_type, a GObjectObject. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_media_manager_get
+		 * Function Type: PurpleMediaManager *
+		 * Function RawType: PurpleMediaManager
+		 * Function Category: PointerToUnknownStruct
+		 */
+		/*
+		 * PurpleMediaManager * purple_media_manager_get()
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern IntPtr purple_media_manager_get();
+
+		public static /* Resolved as PointerToUnknownStruct to PurpleMediaManager */ IntPtr MediaManagerGet()
+		{
+			/* Unable to process the return value of purple_media_manager_get, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_media_manager_get_media
+		 * Function Type: GList *
+		 * Function RawType: GList
+		 * Function Category: PointerToGList
+		 */
+		/*
+		 * GList * purple_media_manager_get_media(PurpleMediaManager * manager)
+		 * 
+		 * Could not generate a wrapper for purple_media_manager_get_media in file "mediamanager.h".
+		 * Message: Unknown inner-type of argument 0 of purple_media_manager_get_media
+		 */
+
+		/*
+		 * Function Name: purple_media_manager_get_ui_caps
+		 * Function Type: PurpleMediaCaps
+		 * Function RawType: PurpleMediaCaps
+		 * Function Category: KnownEnum
+		 */
+		/*
+		 * PurpleMediaCaps purple_media_manager_get_ui_caps(PurpleMediaManager * manager)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern Media.PurpleMediaCaps purple_media_manager_get_ui_caps(IntPtr manager);
+
+		public static Media.PurpleMediaCaps MediaManagerGetUiCaps(/* Resolved as PointerToUnknownStruct to PurpleMediaManager */ IntPtr manager)
+		{
+			/* Unable to process manager, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+	}
+}
+
============================================================
--- libpurple/wrapper/Mime.cs	9dbdac00089900ff6956253fa7391cf0cb3c7abb
+++ libpurple/wrapper/Mime.cs	9dbdac00089900ff6956253fa7391cf0cb3c7abb
@@ -0,0 +1,252 @@
+/* PurpleWrapper - A .NET (CLR) wrapper for libpurple
+ *
+ * Purple is the legal property of its developers, whose names are too numerous
+ * to list here.  Please refer to the COPYRIGHT file distributed with this
+ * source distribution.
+ *
+ * This program 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.
+ *
+ * This program 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 this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02111-1301  USA
+ */
+
+/*
+ * This file was auto-generated from the libpurple header files to provide a
+ * clean interface between .NET/CLR and the unmanaged C library libpurple.
+ *
+ * This is the second major commit of the code.
+ * Next things:
+ *  - A few of the .h files have anonymous parameter names (eg: void cat(int, int).
+ *    This program will need to assign these parameters names.
+ *  - Function pointers inside structs aren't translated correctly into C#.
+ *  - Two places there are specific-length arrays (eg: char hostname[256]). The parser
+ *    does not detect them as an array.
+ */
+
+using System;
+using System.Collections.Generic;
+using System.Runtime.InteropServices;
+
+namespace PurpleWrapper
+{
+
+	/*
+	 * File: mime.h
+	 */
+	public class Mime
+	{
+
+		/*
+		 * Function Name: purple_mime_document_new
+		 * Function Type: PurpleMimeDocument *
+		 * Function RawType: PurpleMimeDocument
+		 * Function Category: PointerToUnknownStruct
+		 */
+		/*
+		 * PurpleMimeDocument * purple_mime_document_new()
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern IntPtr purple_mime_document_new();
+
+		public static /* Resolved as PointerToUnknownStruct to PurpleMimeDocument */ IntPtr DocumentNew()
+		{
+			/* Unable to process the return value of purple_mime_document_new, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_mime_document_free
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_mime_document_free(PurpleMimeDocument * doc)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_mime_document_free(IntPtr doc);
+
+		public static void DocumentFree(/* Resolved as PointerToUnknownStruct to PurpleMimeDocument */ IntPtr doc)
+		{
+			/* Unable to process doc, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_mime_document_parse
+		 * Function Type: PurpleMimeDocument *
+		 * Function RawType: PurpleMimeDocument
+		 * Function Category: PointerToUnknownStruct
+		 */
+		/*
+		 * PurpleMimeDocument * purple_mime_document_parse(char * buf)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern IntPtr purple_mime_document_parse(string buf);
+
+		public static /* Resolved as PointerToUnknownStruct to PurpleMimeDocument */ IntPtr DocumentParse(string buf)
+		{
+			/* Unable to process the return value of purple_mime_document_parse, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_mime_document_parsen
+		 * Function Type: PurpleMimeDocument *
+		 * Function RawType: PurpleMimeDocument
+		 * Function Category: PointerToUnknownStruct
+		 */
+		/*
+		 * PurpleMimeDocument * purple_mime_document_parsen(char * buf, gsize len)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern IntPtr purple_mime_document_parsen(string buf, ulong len);
+
+		public static /* Resolved as PointerToUnknownStruct to PurpleMimeDocument */ IntPtr DocumentParsen(string buf, ulong len)
+		{
+			/* Unable to process the return value of purple_mime_document_parsen, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_mime_document_write
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_mime_document_write(PurpleMimeDocument * doc, GString * str)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_mime_document_write(IntPtr doc, IntPtr str);
+
+		public static void DocumentWrite(/* Resolved as PointerToUnknownStruct to PurpleMimeDocument */ IntPtr doc, /* Resolved as PointerToUnknownStruct to GString */ IntPtr str)
+		{
+			/* Unable to process doc, a PointerToUnknownStruct. */
+			/* Unable to process str, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_mime_document_get_fields
+		 * Function Type: GList *
+		 * Function RawType: GList
+		 * Function Category: PointerToGList
+		 */
+		/*
+		 * GList * purple_mime_document_get_fields(PurpleMimeDocument * doc)
+		 * 
+		 * Could not generate a wrapper for purple_mime_document_get_fields in file "mime.h".
+		 * Message: Unknown inner-type of argument 0 of purple_mime_document_get_fields
+		 */
+
+		/*
+		 * Function Name: purple_mime_document_get_parts
+		 * Function Type: GList *
+		 * Function RawType: GList
+		 * Function Category: PointerToGList
+		 */
+		/*
+		 * GList * purple_mime_document_get_parts(PurpleMimeDocument * doc)
+		 * 
+		 * Could not generate a wrapper for purple_mime_document_get_parts in file "mime.h".
+		 * Message: Unknown inner-type of argument 0 of purple_mime_document_get_parts
+		 */
+
+		/*
+		 * Function Name: purple_mime_part_new
+		 * Function Type: PurpleMimePart *
+		 * Function RawType: PurpleMimePart
+		 * Function Category: PointerToUnknownStruct
+		 */
+		/*
+		 * PurpleMimePart * purple_mime_part_new(PurpleMimeDocument * doc)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern IntPtr purple_mime_part_new(IntPtr doc);
+
+		public static /* Resolved as PointerToUnknownStruct to PurpleMimePart */ IntPtr PartNew(/* Resolved as PointerToUnknownStruct to PurpleMimeDocument */ IntPtr doc)
+		{
+			/* Unable to process doc, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_mime_part_get_fields
+		 * Function Type: GList *
+		 * Function RawType: GList
+		 * Function Category: PointerToGList
+		 */
+		/*
+		 * GList * purple_mime_part_get_fields(PurpleMimePart * part)
+		 * 
+		 * Could not generate a wrapper for purple_mime_part_get_fields in file "mime.h".
+		 * Message: Unknown inner-type of argument 0 of purple_mime_part_get_fields
+		 */
+
+		/*
+		 * Function Name: purple_mime_part_get_data
+		 * Function Type: char *
+		 * Function RawType: char
+		 * Function Category: Native
+		 */
+		/*
+		 * char * purple_mime_part_get_data(PurpleMimePart * part)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern string purple_mime_part_get_data(IntPtr part);
+
+		public static string PartGetData(/* Resolved as PointerToUnknownStruct to PurpleMimePart */ IntPtr part)
+		{
+			/* Unable to process part, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_mime_part_get_length
+		 * Function Type: gsize
+		 * Function RawType: gsize
+		 * Function Category: Native
+		 */
+		/*
+		 * gsize purple_mime_part_get_length(PurpleMimePart * part)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern ulong purple_mime_part_get_length(IntPtr part);
+
+		public static ulong PartGetLength(/* Resolved as PointerToUnknownStruct to PurpleMimePart */ IntPtr part)
+		{
+			/* Unable to process part, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_mime_part_set_data
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_mime_part_set_data(PurpleMimePart * part, char * data)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_mime_part_set_data(IntPtr part, string data);
+
+		public static void PartSetData(/* Resolved as PointerToUnknownStruct to PurpleMimePart */ IntPtr part, string data)
+		{
+			/* Unable to process part, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+	}
+}
+
============================================================
--- libpurple/wrapper/NatPmp.cs	8ecb9d8aab5844631a6efb8dc1a350deb06df638
+++ libpurple/wrapper/NatPmp.cs	8ecb9d8aab5844631a6efb8dc1a350deb06df638
@@ -0,0 +1,126 @@
+/* PurpleWrapper - A .NET (CLR) wrapper for libpurple
+ *
+ * Purple is the legal property of its developers, whose names are too numerous
+ * to list here.  Please refer to the COPYRIGHT file distributed with this
+ * source distribution.
+ *
+ * This program 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.
+ *
+ * This program 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 this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02111-1301  USA
+ */
+
+/*
+ * This file was auto-generated from the libpurple header files to provide a
+ * clean interface between .NET/CLR and the unmanaged C library libpurple.
+ *
+ * This is the second major commit of the code.
+ * Next things:
+ *  - A few of the .h files have anonymous parameter names (eg: void cat(int, int).
+ *    This program will need to assign these parameters names.
+ *  - Function pointers inside structs aren't translated correctly into C#.
+ *  - Two places there are specific-length arrays (eg: char hostname[256]). The parser
+ *    does not detect them as an array.
+ */
+
+using System;
+using System.Collections.Generic;
+using System.Runtime.InteropServices;
+
+namespace PurpleWrapper
+{
+
+	/*
+	 * File: nat-pmp.h
+	 */
+	public class NatPmp
+	{
+		public enum PurplePmpType
+		{
+			PURPLE_PMP_TYPE_UDP,
+			PURPLE_PMP_TYPE_TCP
+		};
+
+
+		/*
+		 * Function Name: purple_pmp_init
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_pmp_init()
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_pmp_init();
+
+		public static void PmpInit()
+		{
+			purple_pmp_init();
+		}
+
+		/*
+		 * Function Name: purple_pmp_get_public_ip
+		 * Function Type: char *
+		 * Function RawType: char
+		 * Function Category: Native
+		 */
+		/*
+		 * char * purple_pmp_get_public_ip()
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern string purple_pmp_get_public_ip();
+
+		public static string PmpGetPublicIp()
+		{
+			return purple_pmp_get_public_ip();
+		}
+
+		/*
+		 * Function Name: purple_pmp_create_map
+		 * Function Type: gboolean
+		 * Function RawType: gboolean
+		 * Function Category: Native
+		 */
+		/*
+		 * gboolean purple_pmp_create_map(PurplePmpType type, unsigned short privateport, unsigned short publicport, int lifetime)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern bool purple_pmp_create_map(NatPmp.PurplePmpType type, ushort privateport, ushort publicport, int lifetime);
+
+		public static bool PmpCreateMap(NatPmp.PurplePmpType type, ushort privateport, ushort publicport, int lifetime)
+		{
+			/* Unable to process type, a KnownEnum. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_pmp_destroy_map
+		 * Function Type: gboolean
+		 * Function RawType: gboolean
+		 * Function Category: Native
+		 */
+		/*
+		 * gboolean purple_pmp_destroy_map(PurplePmpType type, unsigned short privateport)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern bool purple_pmp_destroy_map(NatPmp.PurplePmpType type, ushort privateport);
+
+		public static bool PmpDestroyMap(NatPmp.PurplePmpType type, ushort privateport)
+		{
+			/* Unable to process type, a KnownEnum. */
+			throw new NotImplementedException();
+		}
+
+	}
+}
+
============================================================
--- libpurple/wrapper/Network.cs	e96e4510c256c7da81898dce9955873cc7be40d9
+++ libpurple/wrapper/Network.cs	e96e4510c256c7da81898dce9955873cc7be40d9
@@ -0,0 +1,342 @@
+/* PurpleWrapper - A .NET (CLR) wrapper for libpurple
+ *
+ * Purple is the legal property of its developers, whose names are too numerous
+ * to list here.  Please refer to the COPYRIGHT file distributed with this
+ * source distribution.
+ *
+ * This program 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.
+ *
+ * This program 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 this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02111-1301  USA
+ */
+
+/*
+ * This file was auto-generated from the libpurple header files to provide a
+ * clean interface between .NET/CLR and the unmanaged C library libpurple.
+ *
+ * This is the second major commit of the code.
+ * Next things:
+ *  - A few of the .h files have anonymous parameter names (eg: void cat(int, int).
+ *    This program will need to assign these parameters names.
+ *  - Function pointers inside structs aren't translated correctly into C#.
+ *  - Two places there are specific-length arrays (eg: char hostname[256]). The parser
+ *    does not detect them as an array.
+ */
+
+using System;
+using System.Collections.Generic;
+using System.Runtime.InteropServices;
+
+namespace PurpleWrapper
+{
+
+	/*
+	 * File: network.h
+	 */
+	public class Network
+	{
+		public delegate void PurpleNetworkListenCallback(int listenfd, IntPtr data);
+
+		/*
+		 * Function Name: purple_network_ip_atoi
+		 * Function Type: unsigned char *
+		 * Function RawType: char
+		 * Function Category: PointerToUnknownStruct
+		 */
+		/*
+		 * unsigned char * purple_network_ip_atoi(char * ip)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern IntPtr purple_network_ip_atoi(string ip);
+
+		public static /* Resolved as PointerToUnknownStruct to char */ IntPtr IpAtoi(string ip)
+		{
+			/* Unable to process the return value of purple_network_ip_atoi, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_network_set_public_ip
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_network_set_public_ip(char * ip)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_network_set_public_ip(string ip);
+
+		public static void SetPublicIp(string ip)
+		{
+			purple_network_set_public_ip(ip);
+		}
+
+		/*
+		 * Function Name: purple_network_get_public_ip
+		 * Function Type: char *
+		 * Function RawType: char
+		 * Function Category: Native
+		 */
+		/*
+		 * char * purple_network_get_public_ip()
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern string purple_network_get_public_ip();
+
+		public static string GetPublicIp()
+		{
+			return purple_network_get_public_ip();
+		}
+
+		/*
+		 * Function Name: purple_network_get_local_system_ip
+		 * Function Type: char *
+		 * Function RawType: char
+		 * Function Category: Native
+		 */
+		/*
+		 * char * purple_network_get_local_system_ip(int fd)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern string purple_network_get_local_system_ip(int fd);
+
+		public static string GetLocalSystemIp(int fd)
+		{
+			return purple_network_get_local_system_ip(fd);
+		}
+
+		/*
+		 * Function Name: purple_network_get_my_ip
+		 * Function Type: char *
+		 * Function RawType: char
+		 * Function Category: Native
+		 */
+		/*
+		 * char * purple_network_get_my_ip(int fd)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern string purple_network_get_my_ip(int fd);
+
+		public static string GetMyIp(int fd)
+		{
+			return purple_network_get_my_ip(fd);
+		}
+
+		/*
+		 * Function Name: purple_network_listen_map_external
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_network_listen_map_external(gboolean map_external)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_network_listen_map_external(bool map_external);
+
+		public static void ListenMapExternal(bool map_external)
+		{
+			purple_network_listen_map_external(map_external);
+		}
+
+		/*
+		 * Function Name: purple_network_listen_cancel
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_network_listen_cancel(PurpleNetworkListenData * listen_data)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_network_listen_cancel(IntPtr listen_data);
+
+		public static void ListenCancel(/* Resolved as PointerToUnknownStruct to PurpleNetworkListenData */ IntPtr listen_data)
+		{
+			/* Unable to process listen_data, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_network_get_port_from_fd
+		 * Function Type: unsigned short
+		 * Function RawType: short
+		 * Function Category: Native
+		 */
+		/*
+		 * unsigned short purple_network_get_port_from_fd(int fd)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern ushort purple_network_get_port_from_fd(int fd);
+
+		public static ushort GetPortFromFd(int fd)
+		{
+			return purple_network_get_port_from_fd(fd);
+		}
+
+		/*
+		 * Function Name: purple_network_is_available
+		 * Function Type: gboolean
+		 * Function RawType: gboolean
+		 * Function Category: Native
+		 */
+		/*
+		 * gboolean purple_network_is_available()
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern bool purple_network_is_available();
+
+		public static bool IsAvailable()
+		{
+			return purple_network_is_available();
+		}
+
+		/*
+		 * Function Name: purple_network_force_online
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_network_force_online()
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_network_force_online();
+
+		public static void ForceOnline()
+		{
+			purple_network_force_online();
+		}
+
+		/*
+		 * Function Name: purple_network_get_handle
+		 * Function Type: void *
+		 * Function RawType: void
+		 * Function Category: VoidPointer
+		 */
+		/*
+		 * void * purple_network_get_handle()
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern IntPtr purple_network_get_handle();
+
+		public static IntPtr GetHandle()
+		{
+			return purple_network_get_handle();
+		}
+
+		/*
+		 * Function Name: purple_network_set_stun_server
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_network_set_stun_server(gchar * stun_server)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_network_set_stun_server(string stun_server);
+
+		public static void SetStunServer(string stun_server)
+		{
+			purple_network_set_stun_server(stun_server);
+		}
+
+		/*
+		 * Function Name: purple_network_get_stun_ip
+		 * Function Type: gchar *
+		 * Function RawType: gchar
+		 * Function Category: Native
+		 */
+		/*
+		 * gchar * purple_network_get_stun_ip()
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern string purple_network_get_stun_ip();
+
+		public static string GetStunIp()
+		{
+			return purple_network_get_stun_ip();
+		}
+
+		/*
+		 * Function Name: purple_network_set_turn_server
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_network_set_turn_server(gchar * stun_server)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_network_set_turn_server(string stun_server);
+
+		public static void SetTurnServer(string stun_server)
+		{
+			purple_network_set_turn_server(stun_server);
+		}
+
+		/*
+		 * Function Name: purple_network_get_turn_ip
+		 * Function Type: gchar *
+		 * Function RawType: gchar
+		 * Function Category: Native
+		 */
+		/*
+		 * gchar * purple_network_get_turn_ip()
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern string purple_network_get_turn_ip();
+
+		public static string GetTurnIp()
+		{
+			return purple_network_get_turn_ip();
+		}
+
+		/*
+		 * Function Name: purple_network_init
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_network_init()
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_network_init();
+
+		public static void Init()
+		{
+			purple_network_init();
+		}
+
+		/*
+		 * Function Name: purple_network_uninit
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_network_uninit()
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_network_uninit();
+
+		public static void Uninit()
+		{
+			purple_network_uninit();
+		}
+
+	}
+}
+
============================================================
--- libpurple/wrapper/Notify.cs	4e34f37ea4a1ee2f6e120e3d1599498214523d89
+++ libpurple/wrapper/Notify.cs	4e34f37ea4a1ee2f6e120e3d1599498214523d89
@@ -0,0 +1,637 @@
+/* PurpleWrapper - A .NET (CLR) wrapper for libpurple
+ *
+ * Purple is the legal property of its developers, whose names are too numerous
+ * to list here.  Please refer to the COPYRIGHT file distributed with this
+ * source distribution.
+ *
+ * This program 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.
+ *
+ * This program 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 this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02111-1301  USA
+ */
+
+/*
+ * This file was auto-generated from the libpurple header files to provide a
+ * clean interface between .NET/CLR and the unmanaged C library libpurple.
+ *
+ * This is the second major commit of the code.
+ * Next things:
+ *  - A few of the .h files have anonymous parameter names (eg: void cat(int, int).
+ *    This program will need to assign these parameters names.
+ *  - Function pointers inside structs aren't translated correctly into C#.
+ *  - Two places there are specific-length arrays (eg: char hostname[256]). The parser
+ *    does not detect them as an array.
+ */
+
+using System;
+using System.Collections.Generic;
+using System.Runtime.InteropServices;
+
+namespace PurpleWrapper
+{
+
+	/*
+	 * File: notify.h
+	 */
+	public class Notify
+	{
+		public enum PurpleNotifyType
+		{
+			PURPLE_NOTIFY_MESSAGE = 0,
+			PURPLE_NOTIFY_EMAIL,
+			PURPLE_NOTIFY_EMAILS,
+			PURPLE_NOTIFY_FORMATTED,
+			PURPLE_NOTIFY_SEARCHRESULTS,
+			PURPLE_NOTIFY_USERINFO,
+			PURPLE_NOTIFY_URI
+		};
+
+		public enum PurpleNotifyMsgType
+		{
+			PURPLE_NOTIFY_MSG_ERROR = 0,
+			PURPLE_NOTIFY_MSG_WARNING,
+			PURPLE_NOTIFY_MSG_INFO
+		};
+
+		public enum PurpleNotifySearchButtonType
+		{
+			PURPLE_NOTIFY_BUTTON_LABELED = 0,
+			PURPLE_NOTIFY_BUTTON_CONTINUE = 1,
+			PURPLE_NOTIFY_BUTTON_ADD,
+			PURPLE_NOTIFY_BUTTON_INFO,
+			PURPLE_NOTIFY_BUTTON_IM,
+			PURPLE_NOTIFY_BUTTON_JOIN,
+			PURPLE_NOTIFY_BUTTON_INVITE
+		};
+
+		public enum PurpleNotifyUserInfoEntryType
+		{
+			PURPLE_NOTIFY_USER_INFO_ENTRY_PAIR = 0,
+			PURPLE_NOTIFY_USER_INFO_ENTRY_SECTION_BREAK,
+			PURPLE_NOTIFY_USER_INFO_ENTRY_SECTION_HEADER
+		};
+
+		public delegate void PurpleNotifyCloseCallback(IntPtr user_data);
+		public delegate void PurpleNotifySearchResultsCallback(IntPtr c, IntPtr row, IntPtr user_data);
+
+		/*
+		 * Function Name: purple_notify_searchresults_free
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_notify_searchresults_free(PurpleNotifySearchResults * results)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_notify_searchresults_free(IntPtr results);
+
+		public static void SearchresultsFree(/* Resolved as PointerToUnknownStruct to PurpleNotifySearchResults */ IntPtr results)
+		{
+			/* Unable to process results, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_notify_searchresults_new
+		 * Function Type: PurpleNotifySearchResults *
+		 * Function RawType: PurpleNotifySearchResults
+		 * Function Category: PointerToUnknownStruct
+		 */
+		/*
+		 * PurpleNotifySearchResults * purple_notify_searchresults_new()
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern IntPtr purple_notify_searchresults_new();
+
+		public static /* Resolved as PointerToUnknownStruct to PurpleNotifySearchResults */ IntPtr SearchresultsNew()
+		{
+			/* Unable to process the return value of purple_notify_searchresults_new, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_notify_searchresults_column_new
+		 * Function Type: PurpleNotifySearchColumn *
+		 * Function RawType: PurpleNotifySearchColumn
+		 * Function Category: PointerToUnknownStruct
+		 */
+		/*
+		 * PurpleNotifySearchColumn * purple_notify_searchresults_column_new(char * title)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern IntPtr purple_notify_searchresults_column_new(string title);
+
+		public static /* Resolved as PointerToUnknownStruct to PurpleNotifySearchColumn */ IntPtr SearchresultsColumnNew(string title)
+		{
+			/* Unable to process the return value of purple_notify_searchresults_column_new, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_notify_searchresults_get_rows_count
+		 * Function Type: guint
+		 * Function RawType: guint
+		 * Function Category: Native
+		 */
+		/*
+		 * guint purple_notify_searchresults_get_rows_count(PurpleNotifySearchResults * results)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern uint purple_notify_searchresults_get_rows_count(IntPtr results);
+
+		public static uint SearchresultsGetRowsCount(/* Resolved as PointerToUnknownStruct to PurpleNotifySearchResults */ IntPtr results)
+		{
+			/* Unable to process results, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_notify_searchresults_get_columns_count
+		 * Function Type: guint
+		 * Function RawType: guint
+		 * Function Category: Native
+		 */
+		/*
+		 * guint purple_notify_searchresults_get_columns_count(PurpleNotifySearchResults * results)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern uint purple_notify_searchresults_get_columns_count(IntPtr results);
+
+		public static uint SearchresultsGetColumnsCount(/* Resolved as PointerToUnknownStruct to PurpleNotifySearchResults */ IntPtr results)
+		{
+			/* Unable to process results, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_notify_user_info_new
+		 * Function Type: PurpleNotifyUserInfo *
+		 * Function RawType: PurpleNotifyUserInfo
+		 * Function Category: PointerToUnknownStruct
+		 */
+		/*
+		 * PurpleNotifyUserInfo * purple_notify_user_info_new()
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern IntPtr purple_notify_user_info_new();
+
+		public static /* Resolved as PointerToUnknownStruct to PurpleNotifyUserInfo */ IntPtr UserInfoNew()
+		{
+			/* Unable to process the return value of purple_notify_user_info_new, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_notify_user_info_destroy
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_notify_user_info_destroy(PurpleNotifyUserInfo * user_info)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_notify_user_info_destroy(IntPtr user_info);
+
+		public static void UserInfoDestroy(/* Resolved as PointerToUnknownStruct to PurpleNotifyUserInfo */ IntPtr user_info)
+		{
+			/* Unable to process user_info, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_notify_user_info_get_entries
+		 * Function Type: GList *
+		 * Function RawType: GList
+		 * Function Category: PointerToGList
+		 */
+		/*
+		 * GList * purple_notify_user_info_get_entries(PurpleNotifyUserInfo * user_info)
+		 * 
+		 * Could not generate a wrapper for purple_notify_user_info_get_entries in file "notify.h".
+		 * Message: Unknown inner-type of argument 0 of purple_notify_user_info_get_entries
+		 */
+
+		/*
+		 * Function Name: purple_notify_user_info_get_text_with_newline
+		 * Function Type: char *
+		 * Function RawType: char
+		 * Function Category: Native
+		 */
+		/*
+		 * char * purple_notify_user_info_get_text_with_newline(PurpleNotifyUserInfo * user_info, char * newline)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern string purple_notify_user_info_get_text_with_newline(IntPtr user_info, string newline);
+
+		public static string UserInfoGetTextWithNewline(/* Resolved as PointerToUnknownStruct to PurpleNotifyUserInfo */ IntPtr user_info, string newline)
+		{
+			/* Unable to process user_info, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_notify_user_info_add_pair
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_notify_user_info_add_pair(PurpleNotifyUserInfo * user_info, char * label, char * value)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_notify_user_info_add_pair(IntPtr user_info, string label, string value);
+
+		public static void UserInfoAddPair(/* Resolved as PointerToUnknownStruct to PurpleNotifyUserInfo */ IntPtr user_info, string label, string value)
+		{
+			/* Unable to process user_info, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_notify_user_info_prepend_pair
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_notify_user_info_prepend_pair(PurpleNotifyUserInfo * user_info, char * label, char * value)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_notify_user_info_prepend_pair(IntPtr user_info, string label, string value);
+
+		public static void UserInfoPrependPair(/* Resolved as PointerToUnknownStruct to PurpleNotifyUserInfo */ IntPtr user_info, string label, string value)
+		{
+			/* Unable to process user_info, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_notify_user_info_remove_entry
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_notify_user_info_remove_entry(PurpleNotifyUserInfo * user_info, PurpleNotifyUserInfoEntry * user_info_entry)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_notify_user_info_remove_entry(IntPtr user_info, IntPtr user_info_entry);
+
+		public static void UserInfoRemoveEntry(/* Resolved as PointerToUnknownStruct to PurpleNotifyUserInfo */ IntPtr user_info, /* Resolved as PointerToUnknownStruct to PurpleNotifyUserInfoEntry */ IntPtr user_info_entry)
+		{
+			/* Unable to process user_info, a PointerToUnknownStruct. */
+			/* Unable to process user_info_entry, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_notify_user_info_entry_new
+		 * Function Type: PurpleNotifyUserInfoEntry *
+		 * Function RawType: PurpleNotifyUserInfoEntry
+		 * Function Category: PointerToUnknownStruct
+		 */
+		/*
+		 * PurpleNotifyUserInfoEntry * purple_notify_user_info_entry_new(char * label, char * value)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern IntPtr purple_notify_user_info_entry_new(string label, string value);
+
+		public static /* Resolved as PointerToUnknownStruct to PurpleNotifyUserInfoEntry */ IntPtr UserInfoEntryNew(string label, string value)
+		{
+			/* Unable to process the return value of purple_notify_user_info_entry_new, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_notify_user_info_add_section_break
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_notify_user_info_add_section_break(PurpleNotifyUserInfo * user_info)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_notify_user_info_add_section_break(IntPtr user_info);
+
+		public static void UserInfoAddSectionBreak(/* Resolved as PointerToUnknownStruct to PurpleNotifyUserInfo */ IntPtr user_info)
+		{
+			/* Unable to process user_info, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_notify_user_info_prepend_section_break
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_notify_user_info_prepend_section_break(PurpleNotifyUserInfo * user_info)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_notify_user_info_prepend_section_break(IntPtr user_info);
+
+		public static void UserInfoPrependSectionBreak(/* Resolved as PointerToUnknownStruct to PurpleNotifyUserInfo */ IntPtr user_info)
+		{
+			/* Unable to process user_info, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_notify_user_info_add_section_header
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_notify_user_info_add_section_header(PurpleNotifyUserInfo * user_info, char * label)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_notify_user_info_add_section_header(IntPtr user_info, string label);
+
+		public static void UserInfoAddSectionHeader(/* Resolved as PointerToUnknownStruct to PurpleNotifyUserInfo */ IntPtr user_info, string label)
+		{
+			/* Unable to process user_info, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_notify_user_info_prepend_section_header
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_notify_user_info_prepend_section_header(PurpleNotifyUserInfo * user_info, char * label)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_notify_user_info_prepend_section_header(IntPtr user_info, string label);
+
+		public static void UserInfoPrependSectionHeader(/* Resolved as PointerToUnknownStruct to PurpleNotifyUserInfo */ IntPtr user_info, string label)
+		{
+			/* Unable to process user_info, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_notify_user_info_remove_last_item
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_notify_user_info_remove_last_item(PurpleNotifyUserInfo * user_info)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_notify_user_info_remove_last_item(IntPtr user_info);
+
+		public static void UserInfoRemoveLastItem(/* Resolved as PointerToUnknownStruct to PurpleNotifyUserInfo */ IntPtr user_info)
+		{
+			/* Unable to process user_info, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_notify_user_info_entry_get_label
+		 * Function Type: gchar *
+		 * Function RawType: gchar
+		 * Function Category: Native
+		 */
+		/*
+		 * gchar * purple_notify_user_info_entry_get_label(PurpleNotifyUserInfoEntry * user_info_entry)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern string purple_notify_user_info_entry_get_label(IntPtr user_info_entry);
+
+		public static string UserInfoEntryGetLabel(/* Resolved as PointerToUnknownStruct to PurpleNotifyUserInfoEntry */ IntPtr user_info_entry)
+		{
+			/* Unable to process user_info_entry, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_notify_user_info_entry_set_label
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_notify_user_info_entry_set_label(PurpleNotifyUserInfoEntry * user_info_entry, char * label)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_notify_user_info_entry_set_label(IntPtr user_info_entry, string label);
+
+		public static void UserInfoEntrySetLabel(/* Resolved as PointerToUnknownStruct to PurpleNotifyUserInfoEntry */ IntPtr user_info_entry, string label)
+		{
+			/* Unable to process user_info_entry, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_notify_user_info_entry_get_value
+		 * Function Type: gchar *
+		 * Function RawType: gchar
+		 * Function Category: Native
+		 */
+		/*
+		 * gchar * purple_notify_user_info_entry_get_value(PurpleNotifyUserInfoEntry * user_info_entry)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern string purple_notify_user_info_entry_get_value(IntPtr user_info_entry);
+
+		public static string UserInfoEntryGetValue(/* Resolved as PointerToUnknownStruct to PurpleNotifyUserInfoEntry */ IntPtr user_info_entry)
+		{
+			/* Unable to process user_info_entry, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_notify_user_info_entry_set_value
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_notify_user_info_entry_set_value(PurpleNotifyUserInfoEntry * user_info_entry, char * value)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_notify_user_info_entry_set_value(IntPtr user_info_entry, string value);
+
+		public static void UserInfoEntrySetValue(/* Resolved as PointerToUnknownStruct to PurpleNotifyUserInfoEntry */ IntPtr user_info_entry, string value)
+		{
+			/* Unable to process user_info_entry, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_notify_user_info_entry_get_type
+		 * Function Type: PurpleNotifyUserInfoEntryType
+		 * Function RawType: PurpleNotifyUserInfoEntryType
+		 * Function Category: KnownEnum
+		 */
+		/*
+		 * PurpleNotifyUserInfoEntryType purple_notify_user_info_entry_get_type(PurpleNotifyUserInfoEntry * user_info_entry)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern Notify.PurpleNotifyUserInfoEntryType purple_notify_user_info_entry_get_type(IntPtr user_info_entry);
+
+		public static Notify.PurpleNotifyUserInfoEntryType UserInfoEntryGetType(/* Resolved as PointerToUnknownStruct to PurpleNotifyUserInfoEntry */ IntPtr user_info_entry)
+		{
+			/* Unable to process user_info_entry, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_notify_uri
+		 * Function Type: void *
+		 * Function RawType: void
+		 * Function Category: VoidPointer
+		 */
+		/*
+		 * void * purple_notify_uri(void * handle, char * uri)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern IntPtr purple_notify_uri(IntPtr handle, string uri);
+
+		public static IntPtr Uri(IntPtr handle, string uri)
+		{
+			return purple_notify_uri(handle, uri);
+		}
+
+		/*
+		 * Function Name: purple_notify_close
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_notify_close(PurpleNotifyType type, void * ui_handle)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_notify_close(Notify.PurpleNotifyType type, IntPtr ui_handle);
+
+		public static void Close(Notify.PurpleNotifyType type, IntPtr ui_handle)
+		{
+			/* Unable to process type, a KnownEnum. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_notify_close_with_handle
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_notify_close_with_handle(void * handle)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_notify_close_with_handle(IntPtr handle);
+
+		public static void CloseWithHandle(IntPtr handle)
+		{
+			purple_notify_close_with_handle(handle);
+		}
+
+		/*
+		 * Function Name: purple_notify_set_ui_ops
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_notify_set_ui_ops(PurpleNotifyUiOps * ops)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_notify_set_ui_ops(IntPtr ops);
+
+		public static void SetUiOps(/* Resolved as PointerToUnknownStruct to PurpleNotifyUiOps */ IntPtr ops)
+		{
+			/* Unable to process ops, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_notify_get_ui_ops
+		 * Function Type: PurpleNotifyUiOps *
+		 * Function RawType: PurpleNotifyUiOps
+		 * Function Category: PointerToUnknownStruct
+		 */
+		/*
+		 * PurpleNotifyUiOps * purple_notify_get_ui_ops()
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern IntPtr purple_notify_get_ui_ops();
+
+		public static /* Resolved as PointerToUnknownStruct to PurpleNotifyUiOps */ IntPtr GetUiOps()
+		{
+			/* Unable to process the return value of purple_notify_get_ui_ops, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_notify_get_handle
+		 * Function Type: void *
+		 * Function RawType: void
+		 * Function Category: VoidPointer
+		 */
+		/*
+		 * void * purple_notify_get_handle()
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern IntPtr purple_notify_get_handle();
+
+		public static IntPtr GetHandle()
+		{
+			return purple_notify_get_handle();
+		}
+
+		/*
+		 * Function Name: purple_notify_init
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_notify_init()
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_notify_init();
+
+		public static void Init()
+		{
+			purple_notify_init();
+		}
+
+		/*
+		 * Function Name: purple_notify_uninit
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_notify_uninit()
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_notify_uninit();
+
+		public static void Uninit()
+		{
+			purple_notify_uninit();
+		}
+
+	}
+}
+
============================================================
--- libpurple/wrapper/Ntlm.cs	02f49dd64a31f8e8fb54178ce63870c729437d59
+++ libpurple/wrapper/Ntlm.cs	02f49dd64a31f8e8fb54178ce63870c729437d59
@@ -0,0 +1,104 @@
+/* PurpleWrapper - A .NET (CLR) wrapper for libpurple
+ *
+ * Purple is the legal property of its developers, whose names are too numerous
+ * to list here.  Please refer to the COPYRIGHT file distributed with this
+ * source distribution.
+ *
+ * This program 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.
+ *
+ * This program 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 this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02111-1301  USA
+ */
+
+/*
+ * This file was auto-generated from the libpurple header files to provide a
+ * clean interface between .NET/CLR and the unmanaged C library libpurple.
+ *
+ * This is the second major commit of the code.
+ * Next things:
+ *  - A few of the .h files have anonymous parameter names (eg: void cat(int, int).
+ *    This program will need to assign these parameters names.
+ *  - Function pointers inside structs aren't translated correctly into C#.
+ *  - Two places there are specific-length arrays (eg: char hostname[256]). The parser
+ *    does not detect them as an array.
+ */
+
+using System;
+using System.Collections.Generic;
+using System.Runtime.InteropServices;
+
+namespace PurpleWrapper
+{
+
+	/*
+	 * File: ntlm.h
+	 */
+	public class Ntlm
+	{
+
+		/*
+		 * Function Name: purple_ntlm_gen_type1
+		 * Function Type: gchar *
+		 * Function RawType: gchar
+		 * Function Category: Native
+		 */
+		/*
+		 * gchar * purple_ntlm_gen_type1(gchar * hostname, gchar * domain)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern string purple_ntlm_gen_type1(string hostname, string domain);
+
+		public static string GenType1(string hostname, string domain)
+		{
+			return purple_ntlm_gen_type1(hostname, domain);
+		}
+
+		/*
+		 * Function Name: purple_ntlm_parse_type2
+		 * Function Type: guint8 *
+		 * Function RawType: guint8
+		 * Function Category: PointerToUnknownStruct
+		 */
+		/*
+		 * guint8 * purple_ntlm_parse_type2(gchar * type2, guint32 * flags)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern IntPtr purple_ntlm_parse_type2(string type2, IntPtr flags);
+
+		public static /* Resolved as PointerToUnknownStruct to guint8 */ IntPtr ParseType2(string type2, /* Resolved as PointerToUnknownStruct to guint32 */ IntPtr flags)
+		{
+			/* Unable to process flags, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_ntlm_gen_type3
+		 * Function Type: gchar *
+		 * Function RawType: gchar
+		 * Function Category: Native
+		 */
+		/*
+		 * gchar * purple_ntlm_gen_type3(gchar * username, gchar * passw, gchar * hostname, gchar * domain, guint8 * nonce, guint32 * flags)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern string purple_ntlm_gen_type3(string username, string passw, string hostname, string domain, IntPtr nonce, IntPtr flags);
+
+		public static string GenType3(string username, string passw, string hostname, string domain, /* Resolved as PointerToUnknownStruct to guint8 */ IntPtr nonce, /* Resolved as PointerToUnknownStruct to guint32 */ IntPtr flags)
+		{
+			/* Unable to process nonce, a PointerToUnknownStruct. */
+			/* Unable to process flags, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+	}
+}
+
============================================================
--- libpurple/wrapper/Plugin.cs	5abaf8e5ee28dd52224dab281ad576533bd3ad0e
+++ libpurple/wrapper/Plugin.cs	5abaf8e5ee28dd52224dab281ad576533bd3ad0e
@@ -0,0 +1,693 @@
+/* PurpleWrapper - A .NET (CLR) wrapper for libpurple
+ *
+ * Purple is the legal property of its developers, whose names are too numerous
+ * to list here.  Please refer to the COPYRIGHT file distributed with this
+ * source distribution.
+ *
+ * This program 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.
+ *
+ * This program 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 this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02111-1301  USA
+ */
+
+/*
+ * This file was auto-generated from the libpurple header files to provide a
+ * clean interface between .NET/CLR and the unmanaged C library libpurple.
+ *
+ * This is the second major commit of the code.
+ * Next things:
+ *  - A few of the .h files have anonymous parameter names (eg: void cat(int, int).
+ *    This program will need to assign these parameters names.
+ *  - Function pointers inside structs aren't translated correctly into C#.
+ *  - Two places there are specific-length arrays (eg: char hostname[256]). The parser
+ *    does not detect them as an array.
+ */
+
+using System;
+using System.Collections.Generic;
+using System.Runtime.InteropServices;
+
+namespace PurpleWrapper
+{
+
+	/*
+	 * File: plugin.h
+	 */
+	public class Plugin
+	{
+		public enum PurplePluginType
+		{
+			PURPLE_PLUGIN_UNKNOWN = -1,
+			PURPLE_PLUGIN_STANDARD = 0,
+			PURPLE_PLUGIN_LOADER,
+			PURPLE_PLUGIN_PROTOCOL
+		};
+
+
+		/*
+		 * Function Name: purple_plugin_new
+		 * Function Type: PurplePlugin *
+		 * Function RawType: PurplePlugin
+		 * Function Category: PointerToKnownStruct
+		 */
+		/*
+		 * PurplePlugin * purple_plugin_new(gboolean native, char * path)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern IntPtr purple_plugin_new(bool native, string path);
+
+		public static PurplePlugin New(bool native, string path)
+		{
+			return new PurplePlugin(purple_plugin_new(native, path));
+		}
+
+		/*
+		 * Function Name: purple_plugin_probe
+		 * Function Type: PurplePlugin *
+		 * Function RawType: PurplePlugin
+		 * Function Category: PointerToKnownStruct
+		 */
+		/*
+		 * PurplePlugin * purple_plugin_probe(char * filename)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern IntPtr purple_plugin_probe(string filename);
+
+		public static PurplePlugin Probe(string filename)
+		{
+			return new PurplePlugin(purple_plugin_probe(filename));
+		}
+
+		/*
+		 * Function Name: purple_plugin_register
+		 * Function Type: gboolean
+		 * Function RawType: gboolean
+		 * Function Category: Native
+		 */
+		/*
+		 * gboolean purple_plugin_register(PurplePlugin * plugin)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern bool purple_plugin_register(IntPtr plugin);
+
+		public static bool Register(PurplePlugin plugin)
+		{
+			return purple_plugin_register(plugin.Reference);
+		}
+
+		/*
+		 * Function Name: purple_plugin_load
+		 * Function Type: gboolean
+		 * Function RawType: gboolean
+		 * Function Category: Native
+		 */
+		/*
+		 * gboolean purple_plugin_load(PurplePlugin * plugin)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern bool purple_plugin_load(IntPtr plugin);
+
+		public static bool Load(PurplePlugin plugin)
+		{
+			return purple_plugin_load(plugin.Reference);
+		}
+
+		/*
+		 * Function Name: purple_plugin_unload
+		 * Function Type: gboolean
+		 * Function RawType: gboolean
+		 * Function Category: Native
+		 */
+		/*
+		 * gboolean purple_plugin_unload(PurplePlugin * plugin)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern bool purple_plugin_unload(IntPtr plugin);
+
+		public static bool Unload(PurplePlugin plugin)
+		{
+			return purple_plugin_unload(plugin.Reference);
+		}
+
+		/*
+		 * Function Name: purple_plugin_disable
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_plugin_disable(PurplePlugin * plugin)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_plugin_disable(IntPtr plugin);
+
+		public static void Disable(PurplePlugin plugin)
+		{
+			purple_plugin_disable(plugin.Reference);
+		}
+
+		/*
+		 * Function Name: purple_plugin_reload
+		 * Function Type: gboolean
+		 * Function RawType: gboolean
+		 * Function Category: Native
+		 */
+		/*
+		 * gboolean purple_plugin_reload(PurplePlugin * plugin)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern bool purple_plugin_reload(IntPtr plugin);
+
+		public static bool Reload(PurplePlugin plugin)
+		{
+			return purple_plugin_reload(plugin.Reference);
+		}
+
+		/*
+		 * Function Name: purple_plugin_destroy
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_plugin_destroy(PurplePlugin * plugin)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_plugin_destroy(IntPtr plugin);
+
+		public static void Destroy(PurplePlugin plugin)
+		{
+			purple_plugin_destroy(plugin.Reference);
+		}
+
+		/*
+		 * Function Name: purple_plugin_is_loaded
+		 * Function Type: gboolean
+		 * Function RawType: gboolean
+		 * Function Category: Native
+		 */
+		/*
+		 * gboolean purple_plugin_is_loaded(PurplePlugin * plugin)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern bool purple_plugin_is_loaded(IntPtr plugin);
+
+		public static bool IsLoaded(PurplePlugin plugin)
+		{
+			return purple_plugin_is_loaded(plugin.Reference);
+		}
+
+		/*
+		 * Function Name: purple_plugin_is_unloadable
+		 * Function Type: gboolean
+		 * Function RawType: gboolean
+		 * Function Category: Native
+		 */
+		/*
+		 * gboolean purple_plugin_is_unloadable(PurplePlugin * plugin)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern bool purple_plugin_is_unloadable(IntPtr plugin);
+
+		public static bool IsUnloadable(PurplePlugin plugin)
+		{
+			return purple_plugin_is_unloadable(plugin.Reference);
+		}
+
+		/*
+		 * Function Name: purple_plugin_get_id
+		 * Function Type: gchar *
+		 * Function RawType: gchar
+		 * Function Category: Native
+		 */
+		/*
+		 * gchar * purple_plugin_get_id(PurplePlugin * plugin)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern string purple_plugin_get_id(IntPtr plugin);
+
+		public static string GetId(PurplePlugin plugin)
+		{
+			return purple_plugin_get_id(plugin.Reference);
+		}
+
+		/*
+		 * Function Name: purple_plugin_get_name
+		 * Function Type: gchar *
+		 * Function RawType: gchar
+		 * Function Category: Native
+		 */
+		/*
+		 * gchar * purple_plugin_get_name(PurplePlugin * plugin)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern string purple_plugin_get_name(IntPtr plugin);
+
+		public static string GetName(PurplePlugin plugin)
+		{
+			return purple_plugin_get_name(plugin.Reference);
+		}
+
+		/*
+		 * Function Name: purple_plugin_get_version
+		 * Function Type: gchar *
+		 * Function RawType: gchar
+		 * Function Category: Native
+		 */
+		/*
+		 * gchar * purple_plugin_get_version(PurplePlugin * plugin)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern string purple_plugin_get_version(IntPtr plugin);
+
+		public static string GetVersion(PurplePlugin plugin)
+		{
+			return purple_plugin_get_version(plugin.Reference);
+		}
+
+		/*
+		 * Function Name: purple_plugin_get_summary
+		 * Function Type: gchar *
+		 * Function RawType: gchar
+		 * Function Category: Native
+		 */
+		/*
+		 * gchar * purple_plugin_get_summary(PurplePlugin * plugin)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern string purple_plugin_get_summary(IntPtr plugin);
+
+		public static string GetSummary(PurplePlugin plugin)
+		{
+			return purple_plugin_get_summary(plugin.Reference);
+		}
+
+		/*
+		 * Function Name: purple_plugin_get_description
+		 * Function Type: gchar *
+		 * Function RawType: gchar
+		 * Function Category: Native
+		 */
+		/*
+		 * gchar * purple_plugin_get_description(PurplePlugin * plugin)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern string purple_plugin_get_description(IntPtr plugin);
+
+		public static string GetDescription(PurplePlugin plugin)
+		{
+			return purple_plugin_get_description(plugin.Reference);
+		}
+
+		/*
+		 * Function Name: purple_plugin_get_author
+		 * Function Type: gchar *
+		 * Function RawType: gchar
+		 * Function Category: Native
+		 */
+		/*
+		 * gchar * purple_plugin_get_author(PurplePlugin * plugin)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern string purple_plugin_get_author(IntPtr plugin);
+
+		public static string GetAuthor(PurplePlugin plugin)
+		{
+			return purple_plugin_get_author(plugin.Reference);
+		}
+
+		/*
+		 * Function Name: purple_plugin_get_homepage
+		 * Function Type: gchar *
+		 * Function RawType: gchar
+		 * Function Category: Native
+		 */
+		/*
+		 * gchar * purple_plugin_get_homepage(PurplePlugin * plugin)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern string purple_plugin_get_homepage(IntPtr plugin);
+
+		public static string GetHomepage(PurplePlugin plugin)
+		{
+			return purple_plugin_get_homepage(plugin.Reference);
+		}
+
+		/*
+		 * Function Name: purple_plugin_ipc_unregister
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_plugin_ipc_unregister(PurplePlugin * plugin, char * command)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_plugin_ipc_unregister(IntPtr plugin, string command);
+
+		public static void IpcUnregister(PurplePlugin plugin, string command)
+		{
+			purple_plugin_ipc_unregister(plugin.Reference, command);
+		}
+
+		/*
+		 * Function Name: purple_plugin_ipc_unregister_all
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_plugin_ipc_unregister_all(PurplePlugin * plugin)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_plugin_ipc_unregister_all(IntPtr plugin);
+
+		public static void IpcUnregisterAll(PurplePlugin plugin)
+		{
+			purple_plugin_ipc_unregister_all(plugin.Reference);
+		}
+
+		/*
+		 * Function Name: purple_plugins_add_search_path
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_plugins_add_search_path(char * path)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_plugins_add_search_path(string path);
+
+		public static void PluginsAddSearchPath(string path)
+		{
+			purple_plugins_add_search_path(path);
+		}
+
+		/*
+		 * Function Name: purple_plugins_unload_all
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_plugins_unload_all()
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_plugins_unload_all();
+
+		public static void PluginsUnloadAll()
+		{
+			purple_plugins_unload_all();
+		}
+
+		/*
+		 * Function Name: purple_plugins_unload
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_plugins_unload(PurplePluginType type)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_plugins_unload(Plugin.PurplePluginType type);
+
+		public static void PluginsUnload(Plugin.PurplePluginType type)
+		{
+			/* Unable to process type, a KnownEnum. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_plugins_destroy_all
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_plugins_destroy_all()
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_plugins_destroy_all();
+
+		public static void PluginsDestroyAll()
+		{
+			purple_plugins_destroy_all();
+		}
+
+		/*
+		 * Function Name: purple_plugins_save_loaded
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_plugins_save_loaded(char * key)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_plugins_save_loaded(string key);
+
+		public static void PluginsSaveLoaded(string key)
+		{
+			purple_plugins_save_loaded(key);
+		}
+
+		/*
+		 * Function Name: purple_plugins_load_saved
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_plugins_load_saved(char * key)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_plugins_load_saved(string key);
+
+		public static void PluginsLoadSaved(string key)
+		{
+			purple_plugins_load_saved(key);
+		}
+
+		/*
+		 * Function Name: purple_plugins_probe
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_plugins_probe(char * ext)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_plugins_probe(string ext);
+
+		public static void PluginsProbe(string ext)
+		{
+			purple_plugins_probe(ext);
+		}
+
+		/*
+		 * Function Name: purple_plugins_enabled
+		 * Function Type: gboolean
+		 * Function RawType: gboolean
+		 * Function Category: Native
+		 */
+		/*
+		 * gboolean purple_plugins_enabled()
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern bool purple_plugins_enabled();
+
+		public static bool PluginsEnabled()
+		{
+			return purple_plugins_enabled();
+		}
+
+		/*
+		 * Function Name: purple_plugins_find_with_name
+		 * Function Type: PurplePlugin *
+		 * Function RawType: PurplePlugin
+		 * Function Category: PointerToKnownStruct
+		 */
+		/*
+		 * PurplePlugin * purple_plugins_find_with_name(char * name)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern IntPtr purple_plugins_find_with_name(string name);
+
+		public static PurplePlugin PluginsFindWithName(string name)
+		{
+			return new PurplePlugin(purple_plugins_find_with_name(name));
+		}
+
+		/*
+		 * Function Name: purple_plugins_find_with_filename
+		 * Function Type: PurplePlugin *
+		 * Function RawType: PurplePlugin
+		 * Function Category: PointerToKnownStruct
+		 */
+		/*
+		 * PurplePlugin * purple_plugins_find_with_filename(char * filename)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern IntPtr purple_plugins_find_with_filename(string filename);
+
+		public static PurplePlugin PluginsFindWithFilename(string filename)
+		{
+			return new PurplePlugin(purple_plugins_find_with_filename(filename));
+		}
+
+		/*
+		 * Function Name: purple_plugins_find_with_basename
+		 * Function Type: PurplePlugin *
+		 * Function RawType: PurplePlugin
+		 * Function Category: PointerToKnownStruct
+		 */
+		/*
+		 * PurplePlugin * purple_plugins_find_with_basename(char * basename)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern IntPtr purple_plugins_find_with_basename(string basename);
+
+		public static PurplePlugin PluginsFindWithBasename(string basename)
+		{
+			return new PurplePlugin(purple_plugins_find_with_basename(basename));
+		}
+
+		/*
+		 * Function Name: purple_plugins_find_with_id
+		 * Function Type: PurplePlugin *
+		 * Function RawType: PurplePlugin
+		 * Function Category: PointerToKnownStruct
+		 */
+		/*
+		 * PurplePlugin * purple_plugins_find_with_id(char * id)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern IntPtr purple_plugins_find_with_id(string id);
+
+		public static PurplePlugin PluginsFindWithId(string id)
+		{
+			return new PurplePlugin(purple_plugins_find_with_id(id));
+		}
+
+		/*
+		 * Function Name: purple_plugins_get_loaded
+		 * Function Type: GList *
+		 * Function RawType: GList
+		 * Function Category: PointerToGList
+		 */
+		/*
+		 * GList * purple_plugins_get_loaded()
+		 * 
+		 * Could not generate a wrapper for purple_plugins_get_loaded in file "plugin.h".
+		 * Message: Unknown inner-type of argument 0 of purple_plugins_get_loaded
+		 */
+
+		/*
+		 * Function Name: purple_plugins_get_protocols
+		 * Function Type: GList *
+		 * Function RawType: GList
+		 * Function Category: PointerToGList
+		 */
+		/*
+		 * GList * purple_plugins_get_protocols()
+		 * 
+		 * Could not generate a wrapper for purple_plugins_get_protocols in file "plugin.h".
+		 * Message: Unknown inner-type of argument 0 of purple_plugins_get_protocols
+		 */
+
+		/*
+		 * Function Name: purple_plugins_get_all
+		 * Function Type: GList *
+		 * Function RawType: GList
+		 * Function Category: PointerToGList
+		 */
+		/*
+		 * GList * purple_plugins_get_all()
+		 * 
+		 * Could not generate a wrapper for purple_plugins_get_all in file "plugin.h".
+		 * Message: Unknown inner-type of argument 0 of purple_plugins_get_all
+		 */
+
+		/*
+		 * Function Name: purple_plugins_get_handle
+		 * Function Type: void *
+		 * Function RawType: void
+		 * Function Category: VoidPointer
+		 */
+		/*
+		 * void * purple_plugins_get_handle()
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern IntPtr purple_plugins_get_handle();
+
+		public static IntPtr PluginsGetHandle()
+		{
+			return purple_plugins_get_handle();
+		}
+
+		/*
+		 * Function Name: purple_plugins_init
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_plugins_init()
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_plugins_init();
+
+		public static void PluginsInit()
+		{
+			purple_plugins_init();
+		}
+
+		/*
+		 * Function Name: purple_plugins_uninit
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_plugins_uninit()
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_plugins_uninit();
+
+		public static void PluginsUninit()
+		{
+			purple_plugins_uninit();
+		}
+
+		/*
+		 * Function Name: purple_plugin_action_free
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_plugin_action_free(PurplePluginAction * action)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_plugin_action_free(IntPtr action);
+
+		public static void ActionFree(PurplePluginAction action)
+		{
+			purple_plugin_action_free(action.Reference);
+		}
+
+	}
+}
+
============================================================
--- libpurple/wrapper/Pluginpref.cs	bf094f8b8f0d6b6c9c2c595f2286e05dbc01d153
+++ libpurple/wrapper/Pluginpref.cs	bf094f8b8f0d6b6c9c2c595f2286e05dbc01d153
@@ -0,0 +1,510 @@
+/* PurpleWrapper - A .NET (CLR) wrapper for libpurple
+ *
+ * Purple is the legal property of its developers, whose names are too numerous
+ * to list here.  Please refer to the COPYRIGHT file distributed with this
+ * source distribution.
+ *
+ * This program 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.
+ *
+ * This program 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 this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02111-1301  USA
+ */
+
+/*
+ * This file was auto-generated from the libpurple header files to provide a
+ * clean interface between .NET/CLR and the unmanaged C library libpurple.
+ *
+ * This is the second major commit of the code.
+ * Next things:
+ *  - A few of the .h files have anonymous parameter names (eg: void cat(int, int).
+ *    This program will need to assign these parameters names.
+ *  - Function pointers inside structs aren't translated correctly into C#.
+ *  - Two places there are specific-length arrays (eg: char hostname[256]). The parser
+ *    does not detect them as an array.
+ */
+
+using System;
+using System.Collections.Generic;
+using System.Runtime.InteropServices;
+
+namespace PurpleWrapper
+{
+
+	/*
+	 * File: pluginpref.h
+	 */
+	public class Pluginpref
+	{
+		public enum PurpleStringFormatType
+		{
+			PURPLE_STRING_FORMAT_TYPE_NONE = 0,
+			PURPLE_STRING_FORMAT_TYPE_MULTILINE = 1 << 0,
+			PURPLE_STRING_FORMAT_TYPE_HTML = 1 << 1
+		};
+
+		public enum PurplePluginPrefType
+		{
+			PURPLE_PLUGIN_PREF_NONE,
+			PURPLE_PLUGIN_PREF_CHOICE,
+			PURPLE_PLUGIN_PREF_INFO,
+			PURPLE_PLUGIN_PREF_STRING_FORMAT
+		};
+
+
+		/*
+		 * Function Name: purple_plugin_pref_frame_new
+		 * Function Type: PurplePluginPrefFrame *
+		 * Function RawType: PurplePluginPrefFrame
+		 * Function Category: PointerToUnknownStruct
+		 */
+		/*
+		 * PurplePluginPrefFrame * purple_plugin_pref_frame_new()
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern IntPtr purple_plugin_pref_frame_new();
+
+		public static /* Resolved as PointerToUnknownStruct to PurplePluginPrefFrame */ IntPtr PluginPrefFrameNew()
+		{
+			/* Unable to process the return value of purple_plugin_pref_frame_new, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_plugin_pref_frame_destroy
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_plugin_pref_frame_destroy(PurplePluginPrefFrame * frame)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_plugin_pref_frame_destroy(IntPtr frame);
+
+		public static void PluginPrefFrameDestroy(/* Resolved as PointerToUnknownStruct to PurplePluginPrefFrame */ IntPtr frame)
+		{
+			/* Unable to process frame, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_plugin_pref_frame_add
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_plugin_pref_frame_add(PurplePluginPrefFrame * frame, PurplePluginPref * pref)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_plugin_pref_frame_add(IntPtr frame, IntPtr pref);
+
+		public static void PluginPrefFrameAdd(/* Resolved as PointerToUnknownStruct to PurplePluginPrefFrame */ IntPtr frame, /* Resolved as PointerToUnknownStruct to PurplePluginPref */ IntPtr pref)
+		{
+			/* Unable to process frame, a PointerToUnknownStruct. */
+			/* Unable to process pref, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_plugin_pref_frame_get_prefs
+		 * Function Type: GList *
+		 * Function RawType: GList
+		 * Function Category: PointerToGList
+		 */
+		/*
+		 * GList * purple_plugin_pref_frame_get_prefs(PurplePluginPrefFrame * frame)
+		 * 
+		 * Could not generate a wrapper for purple_plugin_pref_frame_get_prefs in file "pluginpref.h".
+		 * Message: Unknown inner-type of argument 0 of purple_plugin_pref_frame_get_prefs
+		 */
+
+		/*
+		 * Function Name: purple_plugin_pref_new
+		 * Function Type: PurplePluginPref *
+		 * Function RawType: PurplePluginPref
+		 * Function Category: PointerToUnknownStruct
+		 */
+		/*
+		 * PurplePluginPref * purple_plugin_pref_new()
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern IntPtr purple_plugin_pref_new();
+
+		public static /* Resolved as PointerToUnknownStruct to PurplePluginPref */ IntPtr PluginPrefNew()
+		{
+			/* Unable to process the return value of purple_plugin_pref_new, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_plugin_pref_new_with_name
+		 * Function Type: PurplePluginPref *
+		 * Function RawType: PurplePluginPref
+		 * Function Category: PointerToUnknownStruct
+		 */
+		/*
+		 * PurplePluginPref * purple_plugin_pref_new_with_name(char * name)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern IntPtr purple_plugin_pref_new_with_name(string name);
+
+		public static /* Resolved as PointerToUnknownStruct to PurplePluginPref */ IntPtr PluginPrefNewWithName(string name)
+		{
+			/* Unable to process the return value of purple_plugin_pref_new_with_name, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_plugin_pref_new_with_label
+		 * Function Type: PurplePluginPref *
+		 * Function RawType: PurplePluginPref
+		 * Function Category: PointerToUnknownStruct
+		 */
+		/*
+		 * PurplePluginPref * purple_plugin_pref_new_with_label(char * label)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern IntPtr purple_plugin_pref_new_with_label(string label);
+
+		public static /* Resolved as PointerToUnknownStruct to PurplePluginPref */ IntPtr PluginPrefNewWithLabel(string label)
+		{
+			/* Unable to process the return value of purple_plugin_pref_new_with_label, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_plugin_pref_new_with_name_and_label
+		 * Function Type: PurplePluginPref *
+		 * Function RawType: PurplePluginPref
+		 * Function Category: PointerToUnknownStruct
+		 */
+		/*
+		 * PurplePluginPref * purple_plugin_pref_new_with_name_and_label(char * name, char * label)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern IntPtr purple_plugin_pref_new_with_name_and_label(string name, string label);
+
+		public static /* Resolved as PointerToUnknownStruct to PurplePluginPref */ IntPtr PluginPrefNewWithNameAndLabel(string name, string label)
+		{
+			/* Unable to process the return value of purple_plugin_pref_new_with_name_and_label, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_plugin_pref_destroy
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_plugin_pref_destroy(PurplePluginPref * pref)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_plugin_pref_destroy(IntPtr pref);
+
+		public static void PluginPrefDestroy(/* Resolved as PointerToUnknownStruct to PurplePluginPref */ IntPtr pref)
+		{
+			/* Unable to process pref, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_plugin_pref_set_name
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_plugin_pref_set_name(PurplePluginPref * pref, char * name)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_plugin_pref_set_name(IntPtr pref, string name);
+
+		public static void PluginPrefSetName(/* Resolved as PointerToUnknownStruct to PurplePluginPref */ IntPtr pref, string name)
+		{
+			/* Unable to process pref, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_plugin_pref_get_name
+		 * Function Type: char *
+		 * Function RawType: char
+		 * Function Category: Native
+		 */
+		/*
+		 * char * purple_plugin_pref_get_name(PurplePluginPref * pref)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern string purple_plugin_pref_get_name(IntPtr pref);
+
+		public static string PluginPrefGetName(/* Resolved as PointerToUnknownStruct to PurplePluginPref */ IntPtr pref)
+		{
+			/* Unable to process pref, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_plugin_pref_set_label
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_plugin_pref_set_label(PurplePluginPref * pref, char * label)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_plugin_pref_set_label(IntPtr pref, string label);
+
+		public static void PluginPrefSetLabel(/* Resolved as PointerToUnknownStruct to PurplePluginPref */ IntPtr pref, string label)
+		{
+			/* Unable to process pref, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_plugin_pref_get_label
+		 * Function Type: char *
+		 * Function RawType: char
+		 * Function Category: Native
+		 */
+		/*
+		 * char * purple_plugin_pref_get_label(PurplePluginPref * pref)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern string purple_plugin_pref_get_label(IntPtr pref);
+
+		public static string PluginPrefGetLabel(/* Resolved as PointerToUnknownStruct to PurplePluginPref */ IntPtr pref)
+		{
+			/* Unable to process pref, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_plugin_pref_set_bounds
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_plugin_pref_set_bounds(PurplePluginPref * pref, int min, int max)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_plugin_pref_set_bounds(IntPtr pref, int min, int max);
+
+		public static void PluginPrefSetBounds(/* Resolved as PointerToUnknownStruct to PurplePluginPref */ IntPtr pref, int min, int max)
+		{
+			/* Unable to process pref, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_plugin_pref_get_bounds
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_plugin_pref_get_bounds(PurplePluginPref * pref, int * min, int * max)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_plugin_pref_get_bounds(IntPtr pref, IntPtr min, IntPtr max);
+
+		public static void PluginPrefGetBounds(/* Resolved as PointerToUnknownStruct to PurplePluginPref */ IntPtr pref, /* Resolved as PointerToUnknownStruct to int */ IntPtr min, /* Resolved as PointerToUnknownStruct to int */ IntPtr max)
+		{
+			/* Unable to process pref, a PointerToUnknownStruct. */
+			/* Unable to process min, a PointerToUnknownStruct. */
+			/* Unable to process max, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_plugin_pref_set_type
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_plugin_pref_set_type(PurplePluginPref * pref, PurplePluginPrefType type)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_plugin_pref_set_type(IntPtr pref, Pluginpref.PurplePluginPrefType type);
+
+		public static void PluginPrefSetType(/* Resolved as PointerToUnknownStruct to PurplePluginPref */ IntPtr pref, Pluginpref.PurplePluginPrefType type)
+		{
+			/* Unable to process pref, a PointerToUnknownStruct. */
+			/* Unable to process type, a KnownEnum. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_plugin_pref_get_type
+		 * Function Type: PurplePluginPrefType
+		 * Function RawType: PurplePluginPrefType
+		 * Function Category: KnownEnum
+		 */
+		/*
+		 * PurplePluginPrefType purple_plugin_pref_get_type(PurplePluginPref * pref)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern Pluginpref.PurplePluginPrefType purple_plugin_pref_get_type(IntPtr pref);
+
+		public static Pluginpref.PurplePluginPrefType PluginPrefGetType(/* Resolved as PointerToUnknownStruct to PurplePluginPref */ IntPtr pref)
+		{
+			/* Unable to process pref, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_plugin_pref_add_choice
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_plugin_pref_add_choice(PurplePluginPref * pref, char * label, gpointer choice)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_plugin_pref_add_choice(IntPtr pref, string label, IntPtr choice);
+
+		public static void PluginPrefAddChoice(/* Resolved as PointerToUnknownStruct to PurplePluginPref */ IntPtr pref, string label, IntPtr choice)
+		{
+			/* Unable to process pref, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_plugin_pref_get_choices
+		 * Function Type: GList *
+		 * Function RawType: GList
+		 * Function Category: PointerToGList
+		 */
+		/*
+		 * GList * purple_plugin_pref_get_choices(PurplePluginPref * pref)
+		 * 
+		 * Could not generate a wrapper for purple_plugin_pref_get_choices in file "pluginpref.h".
+		 * Message: Unknown inner-type of argument 0 of purple_plugin_pref_get_choices
+		 */
+
+		/*
+		 * Function Name: purple_plugin_pref_set_max_length
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_plugin_pref_set_max_length(PurplePluginPref * pref, unsigned int max_length)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_plugin_pref_set_max_length(IntPtr pref, uint max_length);
+
+		public static void PluginPrefSetMaxLength(/* Resolved as PointerToUnknownStruct to PurplePluginPref */ IntPtr pref, uint max_length)
+		{
+			/* Unable to process pref, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_plugin_pref_get_max_length
+		 * Function Type: unsigned int
+		 * Function RawType: int
+		 * Function Category: Native
+		 */
+		/*
+		 * unsigned int purple_plugin_pref_get_max_length(PurplePluginPref * pref)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern uint purple_plugin_pref_get_max_length(IntPtr pref);
+
+		public static uint PluginPrefGetMaxLength(/* Resolved as PointerToUnknownStruct to PurplePluginPref */ IntPtr pref)
+		{
+			/* Unable to process pref, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_plugin_pref_set_masked
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_plugin_pref_set_masked(PurplePluginPref * pref, gboolean mask)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_plugin_pref_set_masked(IntPtr pref, bool mask);
+
+		public static void PluginPrefSetMasked(/* Resolved as PointerToUnknownStruct to PurplePluginPref */ IntPtr pref, bool mask)
+		{
+			/* Unable to process pref, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_plugin_pref_get_masked
+		 * Function Type: gboolean
+		 * Function RawType: gboolean
+		 * Function Category: Native
+		 */
+		/*
+		 * gboolean purple_plugin_pref_get_masked(PurplePluginPref * pref)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern bool purple_plugin_pref_get_masked(IntPtr pref);
+
+		public static bool PluginPrefGetMasked(/* Resolved as PointerToUnknownStruct to PurplePluginPref */ IntPtr pref)
+		{
+			/* Unable to process pref, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_plugin_pref_set_format_type
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_plugin_pref_set_format_type(PurplePluginPref * pref, PurpleStringFormatType format)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_plugin_pref_set_format_type(IntPtr pref, Pluginpref.PurpleStringFormatType format);
+
+		public static void PluginPrefSetFormatType(/* Resolved as PointerToUnknownStruct to PurplePluginPref */ IntPtr pref, Pluginpref.PurpleStringFormatType format)
+		{
+			/* Unable to process pref, a PointerToUnknownStruct. */
+			/* Unable to process format, a KnownEnum. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_plugin_pref_get_format_type
+		 * Function Type: PurpleStringFormatType
+		 * Function RawType: PurpleStringFormatType
+		 * Function Category: KnownEnum
+		 */
+		/*
+		 * PurpleStringFormatType purple_plugin_pref_get_format_type(PurplePluginPref * pref)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern Pluginpref.PurpleStringFormatType purple_plugin_pref_get_format_type(IntPtr pref);
+
+		public static Pluginpref.PurpleStringFormatType PluginPrefGetFormatType(/* Resolved as PointerToUnknownStruct to PurplePluginPref */ IntPtr pref)
+		{
+			/* Unable to process pref, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+	}
+}
+
============================================================
--- libpurple/wrapper/Pounce.cs	e4677ab150180a479dfcd762365121e671f8657e
+++ libpurple/wrapper/Pounce.cs	e4677ab150180a479dfcd762365121e671f8657e
@@ -0,0 +1,442 @@
+/* PurpleWrapper - A .NET (CLR) wrapper for libpurple
+ *
+ * Purple is the legal property of its developers, whose names are too numerous
+ * to list here.  Please refer to the COPYRIGHT file distributed with this
+ * source distribution.
+ *
+ * This program 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.
+ *
+ * This program 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 this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02111-1301  USA
+ */
+
+/*
+ * This file was auto-generated from the libpurple header files to provide a
+ * clean interface between .NET/CLR and the unmanaged C library libpurple.
+ *
+ * This is the second major commit of the code.
+ * Next things:
+ *  - A few of the .h files have anonymous parameter names (eg: void cat(int, int).
+ *    This program will need to assign these parameters names.
+ *  - Function pointers inside structs aren't translated correctly into C#.
+ *  - Two places there are specific-length arrays (eg: char hostname[256]). The parser
+ *    does not detect them as an array.
+ */
+
+using System;
+using System.Collections.Generic;
+using System.Runtime.InteropServices;
+
+namespace PurpleWrapper
+{
+
+	/*
+	 * File: pounce.h
+	 */
+	public class Pounce
+	{
+		public enum PurplePounceEvent
+		{
+			PURPLE_POUNCE_NONE = 0x000,
+			PURPLE_POUNCE_SIGNON = 0x001,
+			PURPLE_POUNCE_SIGNOFF = 0x002,
+			PURPLE_POUNCE_AWAY = 0x004,
+			PURPLE_POUNCE_AWAY_RETURN = 0x008,
+			PURPLE_POUNCE_IDLE = 0x010,
+			PURPLE_POUNCE_IDLE_RETURN = 0x020,
+			PURPLE_POUNCE_TYPING = 0x040,
+			PURPLE_POUNCE_TYPED = 0x080,
+			PURPLE_POUNCE_TYPING_STOPPED = 0x100,
+			PURPLE_POUNCE_MESSAGE_RECEIVED = 0x200
+		};
+
+		public enum PurplePounceOption
+		{
+			PURPLE_POUNCE_OPTION_NONE = 0x00,
+			PURPLE_POUNCE_OPTION_AWAY = 0x01
+		};
+
+		public delegate void PurplePounceCb(IntPtr _PurpleWrapper_arg0, /* Unresolved: [Category: Unknown], [Name:  ] */ IntPtr _PurpleWrapper_arg1, IntPtr _PurpleWrapper_arg2);
+
+		/*
+		 * Function Name: purple_pounce_destroy
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_pounce_destroy(PurplePounce * pounce)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_pounce_destroy(IntPtr pounce);
+
+		public static void Destroy(PurplePounce pounce)
+		{
+			purple_pounce_destroy(pounce.Reference);
+		}
+
+		/*
+		 * Function Name: purple_pounce_destroy_all_by_account
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_pounce_destroy_all_by_account(PurpleAccount * account)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_pounce_destroy_all_by_account(IntPtr account);
+
+		public static void DestroyAllByAccount(PurpleAccount account)
+		{
+			purple_pounce_destroy_all_by_account(account.Reference);
+		}
+
+		/*
+		 * Function Name: purple_pounce_set_events
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_pounce_set_events(PurplePounce * pounce, PurplePounceEvent events)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_pounce_set_events(IntPtr pounce, Pounce.PurplePounceEvent events);
+
+		public static void SetEvents(PurplePounce pounce, Pounce.PurplePounceEvent events)
+		{
+			/* Unable to process events, a KnownEnum. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_pounce_set_options
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_pounce_set_options(PurplePounce * pounce, PurplePounceOption options)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_pounce_set_options(IntPtr pounce, Pounce.PurplePounceOption options);
+
+		public static void SetOptions(PurplePounce pounce, Pounce.PurplePounceOption options)
+		{
+			/* Unable to process options, a KnownEnum. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_pounce_set_pouncer
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_pounce_set_pouncer(PurplePounce * pounce, PurpleAccount * pouncer)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_pounce_set_pouncer(IntPtr pounce, IntPtr pouncer);
+
+		public static void SetPouncer(PurplePounce pounce, PurpleAccount pouncer)
+		{
+			purple_pounce_set_pouncer(pounce.Reference, pouncer.Reference);
+		}
+
+		/*
+		 * Function Name: purple_pounce_set_pouncee
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_pounce_set_pouncee(PurplePounce * pounce, char * pouncee)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_pounce_set_pouncee(IntPtr pounce, string pouncee);
+
+		public static void SetPouncee(PurplePounce pounce, string pouncee)
+		{
+			purple_pounce_set_pouncee(pounce.Reference, pouncee);
+		}
+
+		/*
+		 * Function Name: purple_pounce_set_save
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_pounce_set_save(PurplePounce * pounce, gboolean save)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_pounce_set_save(IntPtr pounce, bool save);
+
+		public static void SetSave(PurplePounce pounce, bool save)
+		{
+			purple_pounce_set_save(pounce.Reference, save);
+		}
+
+		/*
+		 * Function Name: purple_pounce_action_register
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_pounce_action_register(PurplePounce * pounce, char * name)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_pounce_action_register(IntPtr pounce, string name);
+
+		public static void ActionRegister(PurplePounce pounce, string name)
+		{
+			purple_pounce_action_register(pounce.Reference, name);
+		}
+
+		/*
+		 * Function Name: purple_pounce_set_data
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_pounce_set_data(PurplePounce * pounce, void * data)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_pounce_set_data(IntPtr pounce, IntPtr data);
+
+		public static void SetData(PurplePounce pounce, IntPtr data)
+		{
+			purple_pounce_set_data(pounce.Reference, data);
+		}
+
+		/*
+		 * Function Name: purple_pounce_get_events
+		 * Function Type: PurplePounceEvent
+		 * Function RawType: PurplePounceEvent
+		 * Function Category: KnownEnum
+		 */
+		/*
+		 * PurplePounceEvent purple_pounce_get_events(PurplePounce * pounce)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern Pounce.PurplePounceEvent purple_pounce_get_events(IntPtr pounce);
+
+		public static Pounce.PurplePounceEvent GetEvents(PurplePounce pounce)
+		{
+			/* Unable to process the return value of purple_pounce_get_events, a KnownEnum. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_pounce_get_options
+		 * Function Type: PurplePounceOption
+		 * Function RawType: PurplePounceOption
+		 * Function Category: KnownEnum
+		 */
+		/*
+		 * PurplePounceOption purple_pounce_get_options(PurplePounce * pounce)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern Pounce.PurplePounceOption purple_pounce_get_options(IntPtr pounce);
+
+		public static Pounce.PurplePounceOption GetOptions(PurplePounce pounce)
+		{
+			/* Unable to process the return value of purple_pounce_get_options, a KnownEnum. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_pounce_get_pouncer
+		 * Function Type: PurpleAccount *
+		 * Function RawType: PurpleAccount
+		 * Function Category: PointerToKnownStruct
+		 */
+		/*
+		 * PurpleAccount * purple_pounce_get_pouncer(PurplePounce * pounce)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern IntPtr purple_pounce_get_pouncer(IntPtr pounce);
+
+		public static PurpleAccount GetPouncer(PurplePounce pounce)
+		{
+			return new PurpleAccount(purple_pounce_get_pouncer(pounce.Reference));
+		}
+
+		/*
+		 * Function Name: purple_pounce_get_pouncee
+		 * Function Type: char *
+		 * Function RawType: char
+		 * Function Category: Native
+		 */
+		/*
+		 * char * purple_pounce_get_pouncee(PurplePounce * pounce)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern string purple_pounce_get_pouncee(IntPtr pounce);
+
+		public static string GetPouncee(PurplePounce pounce)
+		{
+			return purple_pounce_get_pouncee(pounce.Reference);
+		}
+
+		/*
+		 * Function Name: purple_pounce_get_save
+		 * Function Type: gboolean
+		 * Function RawType: gboolean
+		 * Function Category: Native
+		 */
+		/*
+		 * gboolean purple_pounce_get_save(PurplePounce * pounce)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern bool purple_pounce_get_save(IntPtr pounce);
+
+		public static bool GetSave(PurplePounce pounce)
+		{
+			return purple_pounce_get_save(pounce.Reference);
+		}
+
+		/*
+		 * Function Name: purple_pounce_get_data
+		 * Function Type: void *
+		 * Function RawType: void
+		 * Function Category: VoidPointer
+		 */
+		/*
+		 * void * purple_pounce_get_data(PurplePounce * pounce)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern IntPtr purple_pounce_get_data(IntPtr pounce);
+
+		public static IntPtr GetData(PurplePounce pounce)
+		{
+			return purple_pounce_get_data(pounce.Reference);
+		}
+
+		/*
+		 * Function Name: purple_pounces_load
+		 * Function Type: gboolean
+		 * Function RawType: gboolean
+		 * Function Category: Native
+		 */
+		/*
+		 * gboolean purple_pounces_load()
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern bool purple_pounces_load();
+
+		public static bool PouncesLoad()
+		{
+			return purple_pounces_load();
+		}
+
+		/*
+		 * Function Name: purple_pounces_unregister_handler
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_pounces_unregister_handler(char * ui)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_pounces_unregister_handler(string ui);
+
+		public static void PouncesUnregisterHandler(string ui)
+		{
+			purple_pounces_unregister_handler(ui);
+		}
+
+		/*
+		 * Function Name: purple_pounces_get_all
+		 * Function Type: GList *
+		 * Function RawType: GList
+		 * Function Category: PointerToGList
+		 */
+		/*
+		 * GList * purple_pounces_get_all()
+		 * 
+		 * Could not generate a wrapper for purple_pounces_get_all in file "pounce.h".
+		 * Message: Unknown inner-type of argument 0 of purple_pounces_get_all
+		 */
+
+		/*
+		 * Function Name: purple_pounces_get_all_for_ui
+		 * Function Type: GList *
+		 * Function RawType: GList
+		 * Function Category: PointerToGList
+		 */
+		/*
+		 * GList * purple_pounces_get_all_for_ui(char * ui)
+		 * 
+		 * Could not generate a wrapper for purple_pounces_get_all_for_ui in file "pounce.h".
+		 * Message: Unknown inner-type of argument 0 of purple_pounces_get_all_for_ui
+		 */
+
+		/*
+		 * Function Name: purple_pounces_get_handle
+		 * Function Type: void *
+		 * Function RawType: void
+		 * Function Category: VoidPointer
+		 */
+		/*
+		 * void * purple_pounces_get_handle()
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern IntPtr purple_pounces_get_handle();
+
+		public static IntPtr PouncesGetHandle()
+		{
+			return purple_pounces_get_handle();
+		}
+
+		/*
+		 * Function Name: purple_pounces_init
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_pounces_init()
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_pounces_init();
+
+		public static void PouncesInit()
+		{
+			purple_pounces_init();
+		}
+
+		/*
+		 * Function Name: purple_pounces_uninit
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_pounces_uninit()
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_pounces_uninit();
+
+		public static void PouncesUninit()
+		{
+			purple_pounces_uninit();
+		}
+
+	}
+}
+
============================================================
--- libpurple/wrapper/Prefs.cs	b365a0b46620d7c77312265dcd82953ff7c9d79c
+++ libpurple/wrapper/Prefs.cs	b365a0b46620d7c77312265dcd82953ff7c9d79c
@@ -0,0 +1,630 @@
+/* PurpleWrapper - A .NET (CLR) wrapper for libpurple
+ *
+ * Purple is the legal property of its developers, whose names are too numerous
+ * to list here.  Please refer to the COPYRIGHT file distributed with this
+ * source distribution.
+ *
+ * This program 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.
+ *
+ * This program 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 this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02111-1301  USA
+ */
+
+/*
+ * This file was auto-generated from the libpurple header files to provide a
+ * clean interface between .NET/CLR and the unmanaged C library libpurple.
+ *
+ * This is the second major commit of the code.
+ * Next things:
+ *  - A few of the .h files have anonymous parameter names (eg: void cat(int, int).
+ *    This program will need to assign these parameters names.
+ *  - Function pointers inside structs aren't translated correctly into C#.
+ *  - Two places there are specific-length arrays (eg: char hostname[256]). The parser
+ *    does not detect them as an array.
+ */
+
+using System;
+using System.Collections.Generic;
+using System.Runtime.InteropServices;
+
+namespace PurpleWrapper
+{
+
+	/*
+	 * File: prefs.h
+	 */
+	public class Prefs
+	{
+		public enum PurplePrefType
+		{
+			PURPLE_PREF_NONE,
+			PURPLE_PREF_BOOLEAN,
+			PURPLE_PREF_INT,
+			PURPLE_PREF_STRING,
+			PURPLE_PREF_STRING_LIST,
+			PURPLE_PREF_PATH,
+			PURPLE_PREF_PATH_LIST
+		};
+
+		public delegate void PurplePrefCallback(string name, Prefs.PurplePrefType type, IntPtr val, IntPtr data);
+
+		/*
+		 * Function Name: purple_prefs_get_handle
+		 * Function Type: void *
+		 * Function RawType: void
+		 * Function Category: VoidPointer
+		 */
+		/*
+		 * void * purple_prefs_get_handle()
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern IntPtr purple_prefs_get_handle();
+
+		public static IntPtr GetHandle()
+		{
+			return purple_prefs_get_handle();
+		}
+
+		/*
+		 * Function Name: purple_prefs_init
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_prefs_init()
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_prefs_init();
+
+		public static void Init()
+		{
+			purple_prefs_init();
+		}
+
+		/*
+		 * Function Name: purple_prefs_uninit
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_prefs_uninit()
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_prefs_uninit();
+
+		public static void Uninit()
+		{
+			purple_prefs_uninit();
+		}
+
+		/*
+		 * Function Name: purple_prefs_add_none
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_prefs_add_none(char * name)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_prefs_add_none(string name);
+
+		public static void AddNone(string name)
+		{
+			purple_prefs_add_none(name);
+		}
+
+		/*
+		 * Function Name: purple_prefs_add_bool
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_prefs_add_bool(char * name, gboolean value)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_prefs_add_bool(string name, bool value);
+
+		public static void AddBool(string name, bool value)
+		{
+			purple_prefs_add_bool(name, value);
+		}
+
+		/*
+		 * Function Name: purple_prefs_add_int
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_prefs_add_int(char * name, int value)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_prefs_add_int(string name, int value);
+
+		public static void AddInt(string name, int value)
+		{
+			purple_prefs_add_int(name, value);
+		}
+
+		/*
+		 * Function Name: purple_prefs_add_string
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_prefs_add_string(char * name, char * value)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_prefs_add_string(string name, string value);
+
+		public static void AddString(string name, string value)
+		{
+			purple_prefs_add_string(name, value);
+		}
+
+		/*
+		 * Function Name: purple_prefs_add_string_list
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_prefs_add_string_list(char * name, GList * value)
+		 * 
+		 * Could not generate a wrapper for purple_prefs_add_string_list in file "prefs.h".
+		 * Message: Unable to provide a type for GList as no function information was provided in code.
+		 */
+
+		/*
+		 * Function Name: purple_prefs_add_path
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_prefs_add_path(char * name, char * value)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_prefs_add_path(string name, string value);
+
+		public static void AddPath(string name, string value)
+		{
+			purple_prefs_add_path(name, value);
+		}
+
+		/*
+		 * Function Name: purple_prefs_add_path_list
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_prefs_add_path_list(char * name, GList * value)
+		 * 
+		 * Could not generate a wrapper for purple_prefs_add_path_list in file "prefs.h".
+		 * Message: Unable to provide a type for GList as no function information was provided in code.
+		 */
+
+		/*
+		 * Function Name: purple_prefs_remove
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_prefs_remove(char * name)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_prefs_remove(string name);
+
+		public static void Remove(string name)
+		{
+			purple_prefs_remove(name);
+		}
+
+		/*
+		 * Function Name: purple_prefs_rename
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_prefs_rename(char * oldname, char * newname)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_prefs_rename(string oldname, string newname);
+
+		public static void Rename(string oldname, string newname)
+		{
+			purple_prefs_rename(oldname, newname);
+		}
+
+		/*
+		 * Function Name: purple_prefs_rename_boolean_toggle
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_prefs_rename_boolean_toggle(char * oldname, char * newname)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_prefs_rename_boolean_toggle(string oldname, string newname);
+
+		public static void RenameBooleanToggle(string oldname, string newname)
+		{
+			purple_prefs_rename_boolean_toggle(oldname, newname);
+		}
+
+		/*
+		 * Function Name: purple_prefs_destroy
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_prefs_destroy()
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_prefs_destroy();
+
+		public static void Destroy()
+		{
+			purple_prefs_destroy();
+		}
+
+		/*
+		 * Function Name: purple_prefs_set_generic
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_prefs_set_generic(char * name, gpointer value)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_prefs_set_generic(string name, IntPtr value);
+
+		public static void SetGeneric(string name, IntPtr value)
+		{
+			purple_prefs_set_generic(name, value);
+		}
+
+		/*
+		 * Function Name: purple_prefs_set_bool
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_prefs_set_bool(char * name, gboolean value)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_prefs_set_bool(string name, bool value);
+
+		public static void SetBool(string name, bool value)
+		{
+			purple_prefs_set_bool(name, value);
+		}
+
+		/*
+		 * Function Name: purple_prefs_set_int
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_prefs_set_int(char * name, int value)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_prefs_set_int(string name, int value);
+
+		public static void SetInt(string name, int value)
+		{
+			purple_prefs_set_int(name, value);
+		}
+
+		/*
+		 * Function Name: purple_prefs_set_string
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_prefs_set_string(char * name, char * value)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_prefs_set_string(string name, string value);
+
+		public static void SetString(string name, string value)
+		{
+			purple_prefs_set_string(name, value);
+		}
+
+		/*
+		 * Function Name: purple_prefs_set_string_list
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_prefs_set_string_list(char * name, GList * value)
+		 * 
+		 * Could not generate a wrapper for purple_prefs_set_string_list in file "prefs.h".
+		 * Message: Unable to provide a type for GList as no function information was provided in code.
+		 */
+
+		/*
+		 * Function Name: purple_prefs_set_path
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_prefs_set_path(char * name, char * value)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_prefs_set_path(string name, string value);
+
+		public static void SetPath(string name, string value)
+		{
+			purple_prefs_set_path(name, value);
+		}
+
+		/*
+		 * Function Name: purple_prefs_set_path_list
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_prefs_set_path_list(char * name, GList * value)
+		 * 
+		 * Could not generate a wrapper for purple_prefs_set_path_list in file "prefs.h".
+		 * Message: Unable to provide a type for GList as no function information was provided in code.
+		 */
+
+		/*
+		 * Function Name: purple_prefs_exists
+		 * Function Type: gboolean
+		 * Function RawType: gboolean
+		 * Function Category: Native
+		 */
+		/*
+		 * gboolean purple_prefs_exists(char * name)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern bool purple_prefs_exists(string name);
+
+		public static bool Exists(string name)
+		{
+			return purple_prefs_exists(name);
+		}
+
+		/*
+		 * Function Name: purple_prefs_get_type
+		 * Function Type: PurplePrefType
+		 * Function RawType: PurplePrefType
+		 * Function Category: KnownEnum
+		 */
+		/*
+		 * PurplePrefType purple_prefs_get_type(char * name)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern Prefs.PurplePrefType purple_prefs_get_type(string name);
+
+		public static Prefs.PurplePrefType GetType(string name)
+		{
+			/* Unable to process the return value of purple_prefs_get_type, a KnownEnum. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_prefs_get_bool
+		 * Function Type: gboolean
+		 * Function RawType: gboolean
+		 * Function Category: Native
+		 */
+		/*
+		 * gboolean purple_prefs_get_bool(char * name)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern bool purple_prefs_get_bool(string name);
+
+		public static bool GetBool(string name)
+		{
+			return purple_prefs_get_bool(name);
+		}
+
+		/*
+		 * Function Name: purple_prefs_get_int
+		 * Function Type: int
+		 * Function RawType: int
+		 * Function Category: Native
+		 */
+		/*
+		 * int purple_prefs_get_int(char * name)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern int purple_prefs_get_int(string name);
+
+		public static int GetInt(string name)
+		{
+			return purple_prefs_get_int(name);
+		}
+
+		/*
+		 * Function Name: purple_prefs_get_string
+		 * Function Type: char *
+		 * Function RawType: char
+		 * Function Category: Native
+		 */
+		/*
+		 * char * purple_prefs_get_string(char * name)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern string purple_prefs_get_string(string name);
+
+		public static string GetString(string name)
+		{
+			return purple_prefs_get_string(name);
+		}
+
+		/*
+		 * Function Name: purple_prefs_get_string_list
+		 * Function Type: GList *
+		 * Function RawType: GList
+		 * Function Category: PointerToGList
+		 */
+		/*
+		 * GList * purple_prefs_get_string_list(char * name)
+		 * 
+		 * Could not generate a wrapper for purple_prefs_get_string_list in file "prefs.h".
+		 * Message: Unknown inner-type of argument 0 of purple_prefs_get_string_list
+		 */
+
+		/*
+		 * Function Name: purple_prefs_get_path
+		 * Function Type: char *
+		 * Function RawType: char
+		 * Function Category: Native
+		 */
+		/*
+		 * char * purple_prefs_get_path(char * name)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern string purple_prefs_get_path(string name);
+
+		public static string GetPath(string name)
+		{
+			return purple_prefs_get_path(name);
+		}
+
+		/*
+		 * Function Name: purple_prefs_get_path_list
+		 * Function Type: GList *
+		 * Function RawType: GList
+		 * Function Category: PointerToGList
+		 */
+		/*
+		 * GList * purple_prefs_get_path_list(char * name)
+		 * 
+		 * Could not generate a wrapper for purple_prefs_get_path_list in file "prefs.h".
+		 * Message: Unknown inner-type of argument 0 of purple_prefs_get_path_list
+		 */
+
+		/*
+		 * Function Name: purple_prefs_get_children_names
+		 * Function Type: GList *
+		 * Function RawType: GList
+		 * Function Category: PointerToGList
+		 */
+		/*
+		 * GList * purple_prefs_get_children_names(char * name)
+		 * 
+		 * Could not generate a wrapper for purple_prefs_get_children_names in file "prefs.h".
+		 * Message: Unknown inner-type of argument 0 of purple_prefs_get_children_names
+		 */
+
+		/*
+		 * Function Name: purple_prefs_disconnect_callback
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_prefs_disconnect_callback(guint callback_id)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_prefs_disconnect_callback(uint callback_id);
+
+		public static void DisconnectCallback(uint callback_id)
+		{
+			purple_prefs_disconnect_callback(callback_id);
+		}
+
+		/*
+		 * Function Name: purple_prefs_disconnect_by_handle
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_prefs_disconnect_by_handle(void * handle)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_prefs_disconnect_by_handle(IntPtr handle);
+
+		public static void DisconnectByHandle(IntPtr handle)
+		{
+			purple_prefs_disconnect_by_handle(handle);
+		}
+
+		/*
+		 * Function Name: purple_prefs_trigger_callback
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_prefs_trigger_callback(char * name)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_prefs_trigger_callback(string name);
+
+		public static void TriggerCallback(string name)
+		{
+			purple_prefs_trigger_callback(name);
+		}
+
+		/*
+		 * Function Name: purple_prefs_load
+		 * Function Type: gboolean
+		 * Function RawType: gboolean
+		 * Function Category: Native
+		 */
+		/*
+		 * gboolean purple_prefs_load()
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern bool purple_prefs_load();
+
+		public static bool Load()
+		{
+			return purple_prefs_load();
+		}
+
+		/*
+		 * Function Name: purple_prefs_update_old
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_prefs_update_old()
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_prefs_update_old();
+
+		public static void UpdateOld()
+		{
+			purple_prefs_update_old();
+		}
+
+	}
+}
+
============================================================
--- libpurple/wrapper/Privacy.cs	0e081fdf34b0a1de943365e30b868b0002da0a2b
+++ libpurple/wrapper/Privacy.cs	0e081fdf34b0a1de943365e30b868b0002da0a2b
@@ -0,0 +1,129 @@
+/* PurpleWrapper - A .NET (CLR) wrapper for libpurple
+ *
+ * Purple is the legal property of its developers, whose names are too numerous
+ * to list here.  Please refer to the COPYRIGHT file distributed with this
+ * source distribution.
+ *
+ * This program 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.
+ *
+ * This program 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 this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02111-1301  USA
+ */
+
+/*
+ * This file was auto-generated from the libpurple header files to provide a
+ * clean interface between .NET/CLR and the unmanaged C library libpurple.
+ *
+ * This is the second major commit of the code.
+ * Next things:
+ *  - A few of the .h files have anonymous parameter names (eg: void cat(int, int).
+ *    This program will need to assign these parameters names.
+ *  - Function pointers inside structs aren't translated correctly into C#.
+ *  - Two places there are specific-length arrays (eg: char hostname[256]). The parser
+ *    does not detect them as an array.
+ */
+
+using System;
+using System.Collections.Generic;
+using System.Runtime.InteropServices;
+
+namespace PurpleWrapper
+{
+
+	/*
+	 * File: privacy.h
+	 */
+	public class Privacy
+	{
+		public enum PurplePrivacyType
+		{
+			PURPLE_PRIVACY_ALLOW_ALL = 1,
+			PURPLE_PRIVACY_DENY_ALL,
+			PURPLE_PRIVACY_ALLOW_USERS,
+			PURPLE_PRIVACY_DENY_USERS,
+			PURPLE_PRIVACY_ALLOW_BUDDYLIST
+		};
+
+
+		/*
+		 * Function Name: purple_privacy_check
+		 * Function Type: gboolean
+		 * Function RawType: gboolean
+		 * Function Category: Native
+		 */
+		/*
+		 * gboolean purple_privacy_check(PurpleAccount * account, char * who)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern bool purple_privacy_check(IntPtr account, string who);
+
+		public static bool Check(PurpleAccount account, string who)
+		{
+			return purple_privacy_check(account.Reference, who);
+		}
+
+		/*
+		 * Function Name: purple_privacy_set_ui_ops
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_privacy_set_ui_ops(PurplePrivacyUiOps * ops)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_privacy_set_ui_ops(IntPtr ops);
+
+		public static void SetUiOps(/* Resolved as PointerToUnknownStruct to PurplePrivacyUiOps */ IntPtr ops)
+		{
+			/* Unable to process ops, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_privacy_get_ui_ops
+		 * Function Type: PurplePrivacyUiOps *
+		 * Function RawType: PurplePrivacyUiOps
+		 * Function Category: PointerToUnknownStruct
+		 */
+		/*
+		 * PurplePrivacyUiOps * purple_privacy_get_ui_ops()
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern IntPtr purple_privacy_get_ui_ops();
+
+		public static /* Resolved as PointerToUnknownStruct to PurplePrivacyUiOps */ IntPtr GetUiOps()
+		{
+			/* Unable to process the return value of purple_privacy_get_ui_ops, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_privacy_init
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_privacy_init()
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_privacy_init();
+
+		public static void Init()
+		{
+			purple_privacy_init();
+		}
+
+	}
+}
+
============================================================
--- libpurple/wrapper/Proxy.cs	8fc9134c1fac5769ac297628282f9cfbfd1322c2
+++ libpurple/wrapper/Proxy.cs	8fc9134c1fac5769ac297628282f9cfbfd1322c2
@@ -0,0 +1,418 @@
+/* PurpleWrapper - A .NET (CLR) wrapper for libpurple
+ *
+ * Purple is the legal property of its developers, whose names are too numerous
+ * to list here.  Please refer to the COPYRIGHT file distributed with this
+ * source distribution.
+ *
+ * This program 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.
+ *
+ * This program 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 this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02111-1301  USA
+ */
+
+/*
+ * This file was auto-generated from the libpurple header files to provide a
+ * clean interface between .NET/CLR and the unmanaged C library libpurple.
+ *
+ * This is the second major commit of the code.
+ * Next things:
+ *  - A few of the .h files have anonymous parameter names (eg: void cat(int, int).
+ *    This program will need to assign these parameters names.
+ *  - Function pointers inside structs aren't translated correctly into C#.
+ *  - Two places there are specific-length arrays (eg: char hostname[256]). The parser
+ *    does not detect them as an array.
+ */
+
+using System;
+using System.Collections.Generic;
+using System.Runtime.InteropServices;
+
+namespace PurpleWrapper
+{
+
+	/*
+	 * File: proxy.h
+	 */
+	public class Proxy
+	{
+		public enum PurpleProxyType
+		{
+			PURPLE_PROXY_USE_GLOBAL = -1,
+			PURPLE_PROXY_NONE = 0,
+			PURPLE_PROXY_HTTP,
+			PURPLE_PROXY_SOCKS4,
+			PURPLE_PROXY_SOCKS5,
+			PURPLE_PROXY_USE_ENVVAR
+		};
+
+		public delegate void PurpleProxyConnectFunction(IntPtr data, int source, string error_message);
+
+		/*
+		 * Function Name: purple_proxy_info_new
+		 * Function Type: PurpleProxyInfo *
+		 * Function RawType: PurpleProxyInfo
+		 * Function Category: PointerToUnknownStruct
+		 */
+		/*
+		 * PurpleProxyInfo * purple_proxy_info_new()
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern IntPtr purple_proxy_info_new();
+
+		public static /* Resolved as PointerToUnknownStruct to PurpleProxyInfo */ IntPtr InfoNew()
+		{
+			/* Unable to process the return value of purple_proxy_info_new, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_proxy_info_destroy
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_proxy_info_destroy(PurpleProxyInfo * info)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_proxy_info_destroy(IntPtr info);
+
+		public static void InfoDestroy(/* Resolved as PointerToUnknownStruct to PurpleProxyInfo */ IntPtr info)
+		{
+			/* Unable to process info, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_proxy_info_set_type
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_proxy_info_set_type(PurpleProxyInfo * info, PurpleProxyType type)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_proxy_info_set_type(IntPtr info, Proxy.PurpleProxyType type);
+
+		public static void InfoSetType(/* Resolved as PointerToUnknownStruct to PurpleProxyInfo */ IntPtr info, Proxy.PurpleProxyType type)
+		{
+			/* Unable to process info, a PointerToUnknownStruct. */
+			/* Unable to process type, a KnownEnum. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_proxy_info_set_host
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_proxy_info_set_host(PurpleProxyInfo * info, char * host)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_proxy_info_set_host(IntPtr info, string host);
+
+		public static void InfoSetHost(/* Resolved as PointerToUnknownStruct to PurpleProxyInfo */ IntPtr info, string host)
+		{
+			/* Unable to process info, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_proxy_info_set_port
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_proxy_info_set_port(PurpleProxyInfo * info, int port)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_proxy_info_set_port(IntPtr info, int port);
+
+		public static void InfoSetPort(/* Resolved as PointerToUnknownStruct to PurpleProxyInfo */ IntPtr info, int port)
+		{
+			/* Unable to process info, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_proxy_info_set_username
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_proxy_info_set_username(PurpleProxyInfo * info, char * username)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_proxy_info_set_username(IntPtr info, string username);
+
+		public static void InfoSetUsername(/* Resolved as PointerToUnknownStruct to PurpleProxyInfo */ IntPtr info, string username)
+		{
+			/* Unable to process info, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_proxy_info_set_password
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_proxy_info_set_password(PurpleProxyInfo * info, char * password)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_proxy_info_set_password(IntPtr info, string password);
+
+		public static void InfoSetPassword(/* Resolved as PointerToUnknownStruct to PurpleProxyInfo */ IntPtr info, string password)
+		{
+			/* Unable to process info, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_proxy_info_get_type
+		 * Function Type: PurpleProxyType
+		 * Function RawType: PurpleProxyType
+		 * Function Category: KnownEnum
+		 */
+		/*
+		 * PurpleProxyType purple_proxy_info_get_type(PurpleProxyInfo * info)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern Proxy.PurpleProxyType purple_proxy_info_get_type(IntPtr info);
+
+		public static Proxy.PurpleProxyType InfoGetType(/* Resolved as PointerToUnknownStruct to PurpleProxyInfo */ IntPtr info)
+		{
+			/* Unable to process info, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_proxy_info_get_host
+		 * Function Type: char *
+		 * Function RawType: char
+		 * Function Category: Native
+		 */
+		/*
+		 * char * purple_proxy_info_get_host(PurpleProxyInfo * info)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern string purple_proxy_info_get_host(IntPtr info);
+
+		public static string InfoGetHost(/* Resolved as PointerToUnknownStruct to PurpleProxyInfo */ IntPtr info)
+		{
+			/* Unable to process info, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_proxy_info_get_port
+		 * Function Type: int
+		 * Function RawType: int
+		 * Function Category: Native
+		 */
+		/*
+		 * int purple_proxy_info_get_port(PurpleProxyInfo * info)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern int purple_proxy_info_get_port(IntPtr info);
+
+		public static int InfoGetPort(/* Resolved as PointerToUnknownStruct to PurpleProxyInfo */ IntPtr info)
+		{
+			/* Unable to process info, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_proxy_info_get_username
+		 * Function Type: char *
+		 * Function RawType: char
+		 * Function Category: Native
+		 */
+		/*
+		 * char * purple_proxy_info_get_username(PurpleProxyInfo * info)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern string purple_proxy_info_get_username(IntPtr info);
+
+		public static string InfoGetUsername(/* Resolved as PointerToUnknownStruct to PurpleProxyInfo */ IntPtr info)
+		{
+			/* Unable to process info, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_proxy_info_get_password
+		 * Function Type: char *
+		 * Function RawType: char
+		 * Function Category: Native
+		 */
+		/*
+		 * char * purple_proxy_info_get_password(PurpleProxyInfo * info)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern string purple_proxy_info_get_password(IntPtr info);
+
+		public static string InfoGetPassword(/* Resolved as PointerToUnknownStruct to PurpleProxyInfo */ IntPtr info)
+		{
+			/* Unable to process info, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_global_proxy_get_info
+		 * Function Type: PurpleProxyInfo *
+		 * Function RawType: PurpleProxyInfo
+		 * Function Category: PointerToUnknownStruct
+		 */
+		/*
+		 * PurpleProxyInfo * purple_global_proxy_get_info()
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern IntPtr purple_global_proxy_get_info();
+
+		public static /* Resolved as PointerToUnknownStruct to PurpleProxyInfo */ IntPtr GlobalProxyGetInfo()
+		{
+			/* Unable to process the return value of purple_global_proxy_get_info, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_global_proxy_set_info
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_global_proxy_set_info(PurpleProxyInfo * info)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_global_proxy_set_info(IntPtr info);
+
+		public static void GlobalProxySetInfo(/* Resolved as PointerToUnknownStruct to PurpleProxyInfo */ IntPtr info)
+		{
+			/* Unable to process info, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_proxy_get_handle
+		 * Function Type: void *
+		 * Function RawType: void
+		 * Function Category: VoidPointer
+		 */
+		/*
+		 * void * purple_proxy_get_handle()
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern IntPtr purple_proxy_get_handle();
+
+		public static IntPtr GetHandle()
+		{
+			return purple_proxy_get_handle();
+		}
+
+		/*
+		 * Function Name: purple_proxy_init
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_proxy_init()
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_proxy_init();
+
+		public static void Init()
+		{
+			purple_proxy_init();
+		}
+
+		/*
+		 * Function Name: purple_proxy_uninit
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_proxy_uninit()
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_proxy_uninit();
+
+		public static void Uninit()
+		{
+			purple_proxy_uninit();
+		}
+
+		/*
+		 * Function Name: purple_proxy_get_setup
+		 * Function Type: PurpleProxyInfo *
+		 * Function RawType: PurpleProxyInfo
+		 * Function Category: PointerToUnknownStruct
+		 */
+		/*
+		 * PurpleProxyInfo * purple_proxy_get_setup(PurpleAccount * account)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern IntPtr purple_proxy_get_setup(IntPtr account);
+
+		public static /* Resolved as PointerToUnknownStruct to PurpleProxyInfo */ IntPtr GetSetup(PurpleAccount account)
+		{
+			/* Unable to process the return value of purple_proxy_get_setup, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_proxy_connect_cancel
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_proxy_connect_cancel(PurpleProxyConnectData * connect_data)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_proxy_connect_cancel(IntPtr connect_data);
+
+		public static void ConnectCancel(/* Resolved as PointerToUnknownStruct to PurpleProxyConnectData */ IntPtr connect_data)
+		{
+			/* Unable to process connect_data, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_proxy_connect_cancel_with_handle
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_proxy_connect_cancel_with_handle(void * handle)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_proxy_connect_cancel_with_handle(IntPtr handle);
+
+		public static void ConnectCancelWithHandle(IntPtr handle)
+		{
+			purple_proxy_connect_cancel_with_handle(handle);
+		}
+
+	}
+}
+
============================================================
--- libpurple/wrapper/Prpl.cs	414add09cf2fe747cab8c3971b4fe8229caf7800
+++ libpurple/wrapper/Prpl.cs	414add09cf2fe747cab8c3971b4fe8229caf7800
@@ -0,0 +1,355 @@
+/* PurpleWrapper - A .NET (CLR) wrapper for libpurple
+ *
+ * Purple is the legal property of its developers, whose names are too numerous
+ * to list here.  Please refer to the COPYRIGHT file distributed with this
+ * source distribution.
+ *
+ * This program 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.
+ *
+ * This program 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 this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02111-1301  USA
+ */
+
+/*
+ * This file was auto-generated from the libpurple header files to provide a
+ * clean interface between .NET/CLR and the unmanaged C library libpurple.
+ *
+ * This is the second major commit of the code.
+ * Next things:
+ *  - A few of the .h files have anonymous parameter names (eg: void cat(int, int).
+ *    This program will need to assign these parameters names.
+ *  - Function pointers inside structs aren't translated correctly into C#.
+ *  - Two places there are specific-length arrays (eg: char hostname[256]). The parser
+ *    does not detect them as an array.
+ */
+
+using System;
+using System.Collections.Generic;
+using System.Runtime.InteropServices;
+
+namespace PurpleWrapper
+{
+
+	/*
+	 * File: prpl.h
+	 */
+	public class Prpl
+	{
+		public enum PurpleIconScaleRules
+		{
+			PURPLE_ICON_SCALE_DISPLAY = 0x01,
+			PURPLE_ICON_SCALE_SEND = 0x02
+		};
+
+		public enum PurpleProtocolOptions
+		{
+			OPT_PROTO_UNIQUE_CHATNAME = 0x00000004,
+			OPT_PROTO_CHAT_TOPIC = 0x00000008,
+			OPT_PROTO_NO_PASSWORD = 0x00000010,
+			OPT_PROTO_MAIL_CHECK = 0x00000020,
+			OPT_PROTO_IM_IMAGE = 0x00000040,
+			OPT_PROTO_PASSWORD_OPTIONAL = 0x00000080,
+			OPT_PROTO_USE_POINTSIZE = 0x00000100,
+			OPT_PROTO_REGISTER_NOSCREENNAME = 0x00000200,
+			OPT_PROTO_SLASH_COMMANDS_NATIVE = 0x00000400
+		};
+
+
+		/*
+		 * Function Name: purple_attention_type_set_name
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_attention_type_set_name(PurpleAttentionType * type, char * name)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_attention_type_set_name(IntPtr type, string name);
+
+		public static void AttentionTypeSetName(PurpleAttentionType type, string name)
+		{
+			purple_attention_type_set_name(type.Reference, name);
+		}
+
+		/*
+		 * Function Name: purple_attention_type_set_incoming_desc
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_attention_type_set_incoming_desc(PurpleAttentionType * type, char * desc)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_attention_type_set_incoming_desc(IntPtr type, string desc);
+
+		public static void AttentionTypeSetIncomingDesc(PurpleAttentionType type, string desc)
+		{
+			purple_attention_type_set_incoming_desc(type.Reference, desc);
+		}
+
+		/*
+		 * Function Name: purple_attention_type_set_outgoing_desc
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_attention_type_set_outgoing_desc(PurpleAttentionType * type, char * desc)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_attention_type_set_outgoing_desc(IntPtr type, string desc);
+
+		public static void AttentionTypeSetOutgoingDesc(PurpleAttentionType type, string desc)
+		{
+			purple_attention_type_set_outgoing_desc(type.Reference, desc);
+		}
+
+		/*
+		 * Function Name: purple_attention_type_set_icon_name
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_attention_type_set_icon_name(PurpleAttentionType * type, char * name)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_attention_type_set_icon_name(IntPtr type, string name);
+
+		public static void AttentionTypeSetIconName(PurpleAttentionType type, string name)
+		{
+			purple_attention_type_set_icon_name(type.Reference, name);
+		}
+
+		/*
+		 * Function Name: purple_attention_type_set_unlocalized_name
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_attention_type_set_unlocalized_name(PurpleAttentionType * type, char * ulname)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_attention_type_set_unlocalized_name(IntPtr type, string ulname);
+
+		public static void AttentionTypeSetUnlocalizedName(PurpleAttentionType type, string ulname)
+		{
+			purple_attention_type_set_unlocalized_name(type.Reference, ulname);
+		}
+
+		/*
+		 * Function Name: purple_attention_type_get_name
+		 * Function Type: char *
+		 * Function RawType: char
+		 * Function Category: Native
+		 */
+		/*
+		 * char * purple_attention_type_get_name(PurpleAttentionType * type)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern string purple_attention_type_get_name(IntPtr type);
+
+		public static string AttentionTypeGetName(PurpleAttentionType type)
+		{
+			return purple_attention_type_get_name(type.Reference);
+		}
+
+		/*
+		 * Function Name: purple_attention_type_get_incoming_desc
+		 * Function Type: char *
+		 * Function RawType: char
+		 * Function Category: Native
+		 */
+		/*
+		 * char * purple_attention_type_get_incoming_desc(PurpleAttentionType * type)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern string purple_attention_type_get_incoming_desc(IntPtr type);
+
+		public static string AttentionTypeGetIncomingDesc(PurpleAttentionType type)
+		{
+			return purple_attention_type_get_incoming_desc(type.Reference);
+		}
+
+		/*
+		 * Function Name: purple_attention_type_get_outgoing_desc
+		 * Function Type: char *
+		 * Function RawType: char
+		 * Function Category: Native
+		 */
+		/*
+		 * char * purple_attention_type_get_outgoing_desc(PurpleAttentionType * type)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern string purple_attention_type_get_outgoing_desc(IntPtr type);
+
+		public static string AttentionTypeGetOutgoingDesc(PurpleAttentionType type)
+		{
+			return purple_attention_type_get_outgoing_desc(type.Reference);
+		}
+
+		/*
+		 * Function Name: purple_attention_type_get_icon_name
+		 * Function Type: char *
+		 * Function RawType: char
+		 * Function Category: Native
+		 */
+		/*
+		 * char * purple_attention_type_get_icon_name(PurpleAttentionType * type)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern string purple_attention_type_get_icon_name(IntPtr type);
+
+		public static string AttentionTypeGetIconName(PurpleAttentionType type)
+		{
+			return purple_attention_type_get_icon_name(type.Reference);
+		}
+
+		/*
+		 * Function Name: purple_attention_type_get_unlocalized_name
+		 * Function Type: char *
+		 * Function RawType: char
+		 * Function Category: Native
+		 */
+		/*
+		 * char * purple_attention_type_get_unlocalized_name(PurpleAttentionType * type)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern string purple_attention_type_get_unlocalized_name(IntPtr type);
+
+		public static string AttentionTypeGetUnlocalizedName(PurpleAttentionType type)
+		{
+			return purple_attention_type_get_unlocalized_name(type.Reference);
+		}
+
+		/*
+		 * Function Name: purple_prpl_got_account_login_time
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_prpl_got_account_login_time(PurpleAccount * account, time_t login_time)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_prpl_got_account_login_time(IntPtr account, ulong login_time);
+
+		public static void GotAccountLoginTime(PurpleAccount account, DateTime login_time)
+		{
+			ulong _PurpleWrapper_param1 = (ulong)(login_time - new DateTime(1970, 1, 1)).TotalSeconds;
+			purple_prpl_got_account_login_time(account.Reference, _PurpleWrapper_param1);
+		}
+
+		/*
+		 * Function Name: purple_prpl_got_account_actions
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_prpl_got_account_actions(PurpleAccount * account)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_prpl_got_account_actions(IntPtr account);
+
+		public static void GotAccountActions(PurpleAccount account)
+		{
+			purple_prpl_got_account_actions(account.Reference);
+		}
+
+		/*
+		 * Function Name: purple_prpl_get_statuses
+		 * Function Type: GList *
+		 * Function RawType: GList
+		 * Function Category: PointerToGList
+		 */
+		/*
+		 * GList * purple_prpl_get_statuses(PurpleAccount * account, PurplePresence * presence)
+		 * 
+		 * Could not generate a wrapper for purple_prpl_get_statuses in file "prpl.h".
+		 * Message: Unknown inner-type of argument 0 of purple_prpl_get_statuses
+		 */
+
+		/*
+		 * Function Name: purple_prpl_send_attention
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_prpl_send_attention(PurpleConnection * gc, char * who, guint type_code)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_prpl_send_attention(IntPtr gc, string who, uint type_code);
+
+		public static void SendAttention(PurpleConnection gc, string who, uint type_code)
+		{
+			purple_prpl_send_attention(gc.Reference, who, type_code);
+		}
+
+		/*
+		 * Function Name: purple_prpl_got_attention
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_prpl_got_attention(PurpleConnection * gc, char * who, guint type_code)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_prpl_got_attention(IntPtr gc, string who, uint type_code);
+
+		public static void GotAttention(PurpleConnection gc, string who, uint type_code)
+		{
+			purple_prpl_got_attention(gc.Reference, who, type_code);
+		}
+
+		/*
+		 * Function Name: purple_prpl_got_attention_in_chat
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_prpl_got_attention_in_chat(PurpleConnection * gc, int id, char * who, guint type_code)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_prpl_got_attention_in_chat(IntPtr gc, int id, string who, uint type_code);
+
+		public static void GotAttentionInChat(PurpleConnection gc, int id, string who, uint type_code)
+		{
+			purple_prpl_got_attention_in_chat(gc.Reference, id, who, type_code);
+		}
+
+		/*
+		 * Function Name: purple_find_prpl
+		 * Function Type: PurplePlugin *
+		 * Function RawType: PurplePlugin
+		 * Function Category: PointerToKnownStruct
+		 */
+		/*
+		 * PurplePlugin * purple_find_prpl(char * id)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern IntPtr purple_find_prpl(string id);
+
+		public static PurplePlugin FindPrpl(string id)
+		{
+			return new PurplePlugin(purple_find_prpl(id));
+		}
+
+	}
+}
+
============================================================
--- libpurple/wrapper/PurpleAccount.cs	e3322674a37f1ff5ad009a0ca95797f96e5a2b0c
+++ libpurple/wrapper/PurpleAccount.cs	e3322674a37f1ff5ad009a0ca95797f96e5a2b0c
@@ -0,0 +1,567 @@
+/* PurpleWrapper - A .NET (CLR) wrapper for libpurple
+ *
+ * Purple is the legal property of its developers, whose names are too numerous
+ * to list here.  Please refer to the COPYRIGHT file distributed with this
+ * source distribution.
+ *
+ * This program 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.
+ *
+ * This program 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 this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02111-1301  USA
+ */
+
+/*
+ * This file was auto-generated from the libpurple header files to provide a
+ * clean interface between .NET/CLR and the unmanaged C library libpurple.
+ *
+ * This is the second major commit of the code.
+ * Next things:
+ *  - A few of the .h files have anonymous parameter names (eg: void cat(int, int).
+ *    This program will need to assign these parameters names.
+ *  - Function pointers inside structs aren't translated correctly into C#.
+ *  - Two places there are specific-length arrays (eg: char hostname[256]). The parser
+ *    does not detect them as an array.
+ */
+
+using System;
+using System.Collections.Generic;
+using System.Runtime.InteropServices;
+
+namespace PurpleWrapper
+{
+
+	/*
+	 * File: account.h
+	 * Structure: PurpleAccount
+	 */
+	public class PurpleAccount : UnmanagedWrapper<_PurpleAccount>
+	{
+		public PurpleAccount()
+		{
+		}
+
+		public PurpleAccount(IntPtr reference)
+		{
+			this.Reference = reference;
+			this.Data = (_PurpleAccount)Marshal.PtrToStructure(this.Reference, typeof(_PurpleAccount));
+		}
+
+		/*
+		 * Argument Name: username
+		 * Argument Type: char *
+		 * Argument Category: Native
+		 */
+		public string username
+		{
+			get
+			{
+				return this.Data.username;
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				this.Data.username = value;
+			}
+		}
+
+		/*
+		 * Argument Name: alias
+		 * Argument Type: char *
+		 * Argument Category: Native
+		 */
+		public string alias
+		{
+			get
+			{
+				return this.Data.alias;
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				this.Data.alias = value;
+			}
+		}
+
+		/*
+		 * Argument Name: password
+		 * Argument Type: char *
+		 * Argument Category: Native
+		 */
+		public string password
+		{
+			get
+			{
+				return this.Data.password;
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				this.Data.password = value;
+			}
+		}
+
+		/*
+		 * Argument Name: user_info
+		 * Argument Type: char *
+		 * Argument Category: Native
+		 */
+		public string user_info
+		{
+			get
+			{
+				return this.Data.user_info;
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				this.Data.user_info = value;
+			}
+		}
+
+		/*
+		 * Argument Name: buddy_icon_path
+		 * Argument Type: char *
+		 * Argument Category: Native
+		 */
+		public string buddy_icon_path
+		{
+			get
+			{
+				return this.Data.buddy_icon_path;
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				this.Data.buddy_icon_path = value;
+			}
+		}
+
+		/*
+		 * Argument Name: remember_pass
+		 * Argument Type: gboolean
+		 * Argument Category: Native
+		 */
+		public bool remember_pass
+		{
+			get
+			{
+				return this.Data.remember_pass;
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				this.Data.remember_pass = value;
+			}
+		}
+
+		/*
+		 * Argument Name: protocol_id
+		 * Argument Type: char *
+		 * Argument Category: Native
+		 */
+		public string protocol_id
+		{
+			get
+			{
+				return this.Data.protocol_id;
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				this.Data.protocol_id = value;
+			}
+		}
+
+		/*
+		 * Argument Name: gc
+		 * Argument Type: PurpleConnection *
+		 * Argument Category: PointerToKnownStruct
+		 */
+		public PurpleConnection gc
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: disconnecting
+		 * Argument Type: gboolean
+		 * Argument Category: Native
+		 */
+		public bool disconnecting
+		{
+			get
+			{
+				return this.Data.disconnecting;
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				this.Data.disconnecting = value;
+			}
+		}
+
+		/*
+		 * Argument Name: settings
+		 * Argument Type: GHashTable *
+		 * Argument Category: PointerToGHashTable
+		 */
+		/*
+		 * Could not generate a wrapper for PurpleAccount.settings in file "account.h".
+		 * Message: Unable to provide a type for HashTable as no function information was provided in code.
+		 */
+
+		/*
+		 * Argument Name: ui_settings
+		 * Argument Type: GHashTable *
+		 * Argument Category: PointerToGHashTable
+		 */
+		/*
+		 * Could not generate a wrapper for PurpleAccount.ui_settings in file "account.h".
+		 * Message: Unable to provide a type for HashTable as no function information was provided in code.
+		 */
+
+		/*
+		 * Argument Name: proxy_info
+		 * Argument Type: PurpleProxyInfo *
+		 * Argument Category: PointerToUnknownStruct
+		 */
+		public /* Resolved as PointerToUnknownStruct to PurpleProxyInfo */ IntPtr proxy_info
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: permit
+		 * Argument Type: GSList *
+		 * Argument Category: PointerToGSList
+		 */
+		/*
+		 * Could not generate a wrapper for PurpleAccount.permit in file "account.h".
+		 * Message: Unable to provide a type for GSList as no function information was provided in code.
+		 */
+
+		/*
+		 * Argument Name: deny
+		 * Argument Type: GSList *
+		 * Argument Category: PointerToGSList
+		 */
+		/*
+		 * Could not generate a wrapper for PurpleAccount.deny in file "account.h".
+		 * Message: Unable to provide a type for GSList as no function information was provided in code.
+		 */
+
+		/*
+		 * Argument Name: perm_deny
+		 * Argument Type: PurplePrivacyType
+		 * Argument Category: KnownEnum
+		 */
+		public Privacy.PurplePrivacyType perm_deny
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: status_types
+		 * Argument Type: GList *
+		 * Argument Category: PointerToGList
+		 */
+		/*
+		 * Could not generate a wrapper for PurpleAccount.status_types in file "account.h".
+		 * Message: Unable to provide a type for GList as no function information was provided in code.
+		 */
+
+		/*
+		 * Argument Name: presence
+		 * Argument Type: PurplePresence *
+		 * Argument Category: PointerToUnknownStruct
+		 */
+		public /* Resolved as PointerToUnknownStruct to PurplePresence */ IntPtr presence
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: system_log
+		 * Argument Type: PurpleLog *
+		 * Argument Category: PointerToKnownStruct
+		 */
+		public PurpleLog system_log
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: ui_data
+		 * Argument Type: void *
+		 * Argument Category: VoidPointer
+		 */
+		public IntPtr ui_data
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: registration_cb
+		 * Argument Type: PurpleAccountRegistrationCb
+		 * Argument Category: KnownFunctionPointer
+		 */
+		public Account.PurpleAccountRegistrationCb registration_cb
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: registration_cb_user_data
+		 * Argument Type: void *
+		 * Argument Category: VoidPointer
+		 */
+		public IntPtr registration_cb_user_data
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: priv
+		 * Argument Type: gpointer
+		 * Argument Category: VoidPointer
+		 */
+		public IntPtr priv
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+	}
+
+
+	[StructLayout(LayoutKind.Sequential)]
+	public class _PurpleAccount
+	{
+		/*
+		 * char * username
+		 */
+		public string username;
+
+		/*
+		 * char * alias
+		 */
+		public string alias;
+
+		/*
+		 * char * password
+		 */
+		public string password;
+
+		/*
+		 * char * user_info
+		 */
+		public string user_info;
+
+		/*
+		 * char * buddy_icon_path
+		 */
+		public string buddy_icon_path;
+
+		/*
+		 * gboolean remember_pass
+		 */
+		public bool remember_pass;
+
+		/*
+		 * char * protocol_id
+		 */
+		public string protocol_id;
+
+		/*
+		 * PurpleConnection * gc
+		 */
+		public IntPtr gc;
+
+		/*
+		 * gboolean disconnecting
+		 */
+		public bool disconnecting;
+
+		/*
+		 * GHashTable * settings
+		 */
+		public IntPtr settings;
+
+		/*
+		 * GHashTable * ui_settings
+		 */
+		public IntPtr ui_settings;
+
+		/*
+		 * PurpleProxyInfo * proxy_info
+		 */
+		public IntPtr proxy_info;
+
+		/*
+		 * GSList * permit
+		 */
+		public IntPtr permit;
+
+		/*
+		 * GSList * deny
+		 */
+		public IntPtr deny;
+
+		/*
+		 * PurplePrivacyType perm_deny
+		 */
+		public Privacy.PurplePrivacyType perm_deny;
+
+		/*
+		 * GList * status_types
+		 */
+		public IntPtr status_types;
+
+		/*
+		 * PurplePresence * presence
+		 */
+		public IntPtr presence;
+
+		/*
+		 * PurpleLog * system_log
+		 */
+		public IntPtr system_log;
+
+		/*
+		 * void * ui_data
+		 */
+		public IntPtr ui_data;
+
+		/*
+		 * PurpleAccountRegistrationCb registration_cb
+		 */
+		public IntPtr registration_cb;
+
+		/*
+		 * void * registration_cb_user_data
+		 */
+		public IntPtr registration_cb_user_data;
+
+		/*
+		 * gpointer priv
+		 */
+		public IntPtr priv;
+
+	}
+
+}
+
============================================================
--- libpurple/wrapper/PurpleAccountUiOps.cs	f9c060ab1fbcd085b0214f31dd76445397394bc5
+++ libpurple/wrapper/PurpleAccountUiOps.cs	f9c060ab1fbcd085b0214f31dd76445397394bc5
@@ -0,0 +1,292 @@
+/* PurpleWrapper - A .NET (CLR) wrapper for libpurple
+ *
+ * Purple is the legal property of its developers, whose names are too numerous
+ * to list here.  Please refer to the COPYRIGHT file distributed with this
+ * source distribution.
+ *
+ * This program 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.
+ *
+ * This program 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 this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02111-1301  USA
+ */
+
+/*
+ * This file was auto-generated from the libpurple header files to provide a
+ * clean interface between .NET/CLR and the unmanaged C library libpurple.
+ *
+ * This is the second major commit of the code.
+ * Next things:
+ *  - A few of the .h files have anonymous parameter names (eg: void cat(int, int).
+ *    This program will need to assign these parameters names.
+ *  - Function pointers inside structs aren't translated correctly into C#.
+ *  - Two places there are specific-length arrays (eg: char hostname[256]). The parser
+ *    does not detect them as an array.
+ */
+
+using System;
+using System.Collections.Generic;
+using System.Runtime.InteropServices;
+
+namespace PurpleWrapper
+{
+
+	/*
+	 * File: account.h
+	 * Structure: PurpleAccountUiOps
+	 */
+	public class PurpleAccountUiOps : UnmanagedWrapper<_PurpleAccountUiOps>
+	{
+		public PurpleAccountUiOps()
+		{
+		}
+
+		public PurpleAccountUiOps(IntPtr reference)
+		{
+			this.Reference = reference;
+			this.Data = (_PurpleAccountUiOps)Marshal.PtrToStructure(this.Reference, typeof(_PurpleAccountUiOps));
+		}
+
+		/*
+		 * Argument Name: notify_added
+		 * Argument Type: void
+		 * Argument Category: Void
+		 */
+		public IntPtr notify_added
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: status_changed
+		 * Argument Type: void
+		 * Argument Category: Void
+		 */
+		public IntPtr status_changed
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: request_add
+		 * Argument Type: void
+		 * Argument Category: Void
+		 */
+		public IntPtr request_add
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: request_authorize
+		 * Argument Type: void *
+		 * Argument Category: VoidPointer
+		 */
+		public IntPtr request_authorize
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: close_account_request
+		 * Argument Type: void
+		 * Argument Category: Void
+		 */
+		public IntPtr close_account_request
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: _purple_reserved1
+		 * Argument Type: void
+		 * Argument Category: Void
+		 */
+		public IntPtr _purple_reserved1
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: _purple_reserved2
+		 * Argument Type: void
+		 * Argument Category: Void
+		 */
+		public IntPtr _purple_reserved2
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: _purple_reserved3
+		 * Argument Type: void
+		 * Argument Category: Void
+		 */
+		public IntPtr _purple_reserved3
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: _purple_reserved4
+		 * Argument Type: void
+		 * Argument Category: Void
+		 */
+		public IntPtr _purple_reserved4
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+	}
+
+
+	[StructLayout(LayoutKind.Sequential)]
+	public class _PurpleAccountUiOps
+	{
+		/*
+		 * void (*notify_added)(PurpleAccount * account, char * remote_user, char * id, char * alias, char * message)
+		 */
+		public IntPtr notify_added;
+
+		/*
+		 * void (*status_changed)(PurpleAccount * account, PurpleStatus * status)
+		 */
+		public IntPtr status_changed;
+
+		/*
+		 * void (*request_add)(PurpleAccount * account, char * remote_user, char * id, char * alias, char * message)
+		 */
+		public IntPtr request_add;
+
+		/*
+		 * void * (*request_authorize)(PurpleAccount * account, char * remote_user, char * id, char * alias, char * message, gboolean on_list, PurpleAccountRequestAuthorizationCb authorize_cb, PurpleAccountRequestAuthorizationCb deny_cb, void * user_data)
+		 */
+		public IntPtr request_authorize;
+
+		/*
+		 * void (*close_account_request)(void * ui_handle)
+		 */
+		public IntPtr close_account_request;
+
+		/*
+		 * void (*_purple_reserved1)()
+		 */
+		public IntPtr _purple_reserved1;
+
+		/*
+		 * void (*_purple_reserved2)()
+		 */
+		public IntPtr _purple_reserved2;
+
+		/*
+		 * void (*_purple_reserved3)()
+		 */
+		public IntPtr _purple_reserved3;
+
+		/*
+		 * void (*_purple_reserved4)()
+		 */
+		public IntPtr _purple_reserved4;
+
+	}
+
+}
+
============================================================
--- libpurple/wrapper/PurpleAttentionType.cs	9bfd14f62ce4a5de8dd0603fd2db5224ea7024a2
+++ libpurple/wrapper/PurpleAttentionType.cs	9bfd14f62ce4a5de8dd0603fd2db5224ea7024a2
@@ -0,0 +1,267 @@
+/* PurpleWrapper - A .NET (CLR) wrapper for libpurple
+ *
+ * Purple is the legal property of its developers, whose names are too numerous
+ * to list here.  Please refer to the COPYRIGHT file distributed with this
+ * source distribution.
+ *
+ * This program 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.
+ *
+ * This program 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 this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02111-1301  USA
+ */
+
+/*
+ * This file was auto-generated from the libpurple header files to provide a
+ * clean interface between .NET/CLR and the unmanaged C library libpurple.
+ *
+ * This is the second major commit of the code.
+ * Next things:
+ *  - A few of the .h files have anonymous parameter names (eg: void cat(int, int).
+ *    This program will need to assign these parameters names.
+ *  - Function pointers inside structs aren't translated correctly into C#.
+ *  - Two places there are specific-length arrays (eg: char hostname[256]). The parser
+ *    does not detect them as an array.
+ */
+
+using System;
+using System.Collections.Generic;
+using System.Runtime.InteropServices;
+
+namespace PurpleWrapper
+{
+
+	/*
+	 * File: prpl.h
+	 * Structure: PurpleAttentionType
+	 */
+	public class PurpleAttentionType : UnmanagedWrapper<_PurpleAttentionType>
+	{
+		public PurpleAttentionType()
+		{
+		}
+
+		public PurpleAttentionType(IntPtr reference)
+		{
+			this.Reference = reference;
+			this.Data = (_PurpleAttentionType)Marshal.PtrToStructure(this.Reference, typeof(_PurpleAttentionType));
+		}
+
+		/*
+		 * Argument Name: name
+		 * Argument Type: const char *
+		 * Argument Category: PointerToUnknownStruct
+		 */
+		public /* Resolved as PointerToUnknownStruct to char */ IntPtr name
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: incoming_description
+		 * Argument Type: const char *
+		 * Argument Category: PointerToUnknownStruct
+		 */
+		public /* Resolved as PointerToUnknownStruct to char */ IntPtr incoming_description
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: outgoing_description
+		 * Argument Type: const char *
+		 * Argument Category: PointerToUnknownStruct
+		 */
+		public /* Resolved as PointerToUnknownStruct to char */ IntPtr outgoing_description
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: icon_name
+		 * Argument Type: const char *
+		 * Argument Category: PointerToUnknownStruct
+		 */
+		public /* Resolved as PointerToUnknownStruct to char */ IntPtr icon_name
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: unlocalized_name
+		 * Argument Type: const char *
+		 * Argument Category: PointerToUnknownStruct
+		 */
+		public /* Resolved as PointerToUnknownStruct to char */ IntPtr unlocalized_name
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: reserved2
+		 * Argument Type: gpointer
+		 * Argument Category: VoidPointer
+		 */
+		public IntPtr reserved2
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: reserved3
+		 * Argument Type: gpointer
+		 * Argument Category: VoidPointer
+		 */
+		public IntPtr reserved3
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: reserved4
+		 * Argument Type: gpointer
+		 * Argument Category: VoidPointer
+		 */
+		public IntPtr reserved4
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+	}
+
+
+	[StructLayout(LayoutKind.Sequential)]
+	public class _PurpleAttentionType
+	{
+		/*
+		 * const char * name
+		 */
+		public IntPtr name;
+
+		/*
+		 * const char * incoming_description
+		 */
+		public IntPtr incoming_description;
+
+		/*
+		 * const char * outgoing_description
+		 */
+		public IntPtr outgoing_description;
+
+		/*
+		 * const char * icon_name
+		 */
+		public IntPtr icon_name;
+
+		/*
+		 * const char * unlocalized_name
+		 */
+		public IntPtr unlocalized_name;
+
+		/*
+		 * gpointer reserved2
+		 */
+		public IntPtr reserved2;
+
+		/*
+		 * gpointer reserved3
+		 */
+		public IntPtr reserved3;
+
+		/*
+		 * gpointer reserved4
+		 */
+		public IntPtr reserved4;
+
+	}
+
+}
+
============================================================
--- libpurple/wrapper/PurpleBlistNode.cs	b030a90dedec43e692519fc0e4f7977ed91d45be
+++ libpurple/wrapper/PurpleBlistNode.cs	b030a90dedec43e692519fc0e4f7977ed91d45be
@@ -0,0 +1,257 @@
+/* PurpleWrapper - A .NET (CLR) wrapper for libpurple
+ *
+ * Purple is the legal property of its developers, whose names are too numerous
+ * to list here.  Please refer to the COPYRIGHT file distributed with this
+ * source distribution.
+ *
+ * This program 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.
+ *
+ * This program 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 this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02111-1301  USA
+ */
+
+/*
+ * This file was auto-generated from the libpurple header files to provide a
+ * clean interface between .NET/CLR and the unmanaged C library libpurple.
+ *
+ * This is the second major commit of the code.
+ * Next things:
+ *  - A few of the .h files have anonymous parameter names (eg: void cat(int, int).
+ *    This program will need to assign these parameters names.
+ *  - Function pointers inside structs aren't translated correctly into C#.
+ *  - Two places there are specific-length arrays (eg: char hostname[256]). The parser
+ *    does not detect them as an array.
+ */
+
+using System;
+using System.Collections.Generic;
+using System.Runtime.InteropServices;
+
+namespace PurpleWrapper
+{
+
+	/*
+	 * File: blist.h
+	 * Structure: PurpleBlistNode
+	 */
+	public class PurpleBlistNode : UnmanagedWrapper<_PurpleBlistNode>
+	{
+		public PurpleBlistNode()
+		{
+		}
+
+		public PurpleBlistNode(IntPtr reference)
+		{
+			this.Reference = reference;
+			this.Data = (_PurpleBlistNode)Marshal.PtrToStructure(this.Reference, typeof(_PurpleBlistNode));
+		}
+
+		/*
+		 * Argument Name: type
+		 * Argument Type: PurpleBlistNodeType
+		 * Argument Category: KnownEnum
+		 */
+		public Blist.PurpleBlistNodeType type
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: prev
+		 * Argument Type: PurpleBlistNode *
+		 * Argument Category: PointerToKnownStruct
+		 */
+		public PurpleBlistNode prev
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: next
+		 * Argument Type: PurpleBlistNode *
+		 * Argument Category: PointerToKnownStruct
+		 */
+		public PurpleBlistNode next
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: parent
+		 * Argument Type: PurpleBlistNode *
+		 * Argument Category: PointerToKnownStruct
+		 */
+		public PurpleBlistNode parent
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: child
+		 * Argument Type: PurpleBlistNode *
+		 * Argument Category: PointerToKnownStruct
+		 */
+		public PurpleBlistNode child
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: settings
+		 * Argument Type: GHashTable *
+		 * Argument Category: PointerToGHashTable
+		 */
+		/*
+		 * Could not generate a wrapper for PurpleBlistNode.settings in file "blist.h".
+		 * Message: Unable to provide a type for HashTable as no function information was provided in code.
+		 */
+
+		/*
+		 * Argument Name: ui_data
+		 * Argument Type: void          *
+		 * Argument Category: PointerToUnknownStruct
+		 */
+		public /* Resolved as PointerToUnknownStruct to void */ IntPtr ui_data
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: flags
+		 * Argument Type: PurpleBlistNodeFlags
+		 * Argument Category: KnownEnum
+		 */
+		public Blist.PurpleBlistNodeFlags flags
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+	}
+
+
+	[StructLayout(LayoutKind.Sequential)]
+	public class _PurpleBlistNode
+	{
+		/*
+		 * PurpleBlistNodeType type
+		 */
+		public Blist.PurpleBlistNodeType type;
+
+		/*
+		 * PurpleBlistNode * prev
+		 */
+		public IntPtr prev;
+
+		/*
+		 * PurpleBlistNode * next
+		 */
+		public IntPtr next;
+
+		/*
+		 * PurpleBlistNode * parent
+		 */
+		public IntPtr parent;
+
+		/*
+		 * PurpleBlistNode * child
+		 */
+		public IntPtr child;
+
+		/*
+		 * GHashTable * settings
+		 */
+		public IntPtr settings;
+
+		/*
+		 * void          * ui_data
+		 */
+		public IntPtr ui_data;
+
+		/*
+		 * PurpleBlistNodeFlags flags
+		 */
+		public Blist.PurpleBlistNodeFlags flags;
+
+	}
+
+}
+
============================================================
--- libpurple/wrapper/PurpleBlistUiOps.cs	96fa647f23de57a21497b0054406326be9367b70
+++ libpurple/wrapper/PurpleBlistUiOps.cs	96fa647f23de57a21497b0054406326be9367b70
@@ -0,0 +1,417 @@
+/* PurpleWrapper - A .NET (CLR) wrapper for libpurple
+ *
+ * Purple is the legal property of its developers, whose names are too numerous
+ * to list here.  Please refer to the COPYRIGHT file distributed with this
+ * source distribution.
+ *
+ * This program 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.
+ *
+ * This program 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 this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02111-1301  USA
+ */
+
+/*
+ * This file was auto-generated from the libpurple header files to provide a
+ * clean interface between .NET/CLR and the unmanaged C library libpurple.
+ *
+ * This is the second major commit of the code.
+ * Next things:
+ *  - A few of the .h files have anonymous parameter names (eg: void cat(int, int).
+ *    This program will need to assign these parameters names.
+ *  - Function pointers inside structs aren't translated correctly into C#.
+ *  - Two places there are specific-length arrays (eg: char hostname[256]). The parser
+ *    does not detect them as an array.
+ */
+
+using System;
+using System.Collections.Generic;
+using System.Runtime.InteropServices;
+
+namespace PurpleWrapper
+{
+
+	/*
+	 * File: blist.h
+	 * Structure: PurpleBlistUiOps
+	 */
+	public class PurpleBlistUiOps : UnmanagedWrapper<_PurpleBlistUiOps>
+	{
+		public PurpleBlistUiOps()
+		{
+		}
+
+		public PurpleBlistUiOps(IntPtr reference)
+		{
+			this.Reference = reference;
+			this.Data = (_PurpleBlistUiOps)Marshal.PtrToStructure(this.Reference, typeof(_PurpleBlistUiOps));
+		}
+
+		/*
+		 * Argument Name: new_list
+		 * Argument Type: void
+		 * Argument Category: Void
+		 */
+		public IntPtr new_list
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: new_node
+		 * Argument Type: void
+		 * Argument Category: Void
+		 */
+		public IntPtr new_node
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: show
+		 * Argument Type: void
+		 * Argument Category: Void
+		 */
+		public IntPtr show
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: update
+		 * Argument Type: void
+		 * Argument Category: Void
+		 */
+		public IntPtr update
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: remove
+		 * Argument Type: void
+		 * Argument Category: Void
+		 */
+		public IntPtr remove
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: destroy
+		 * Argument Type: void
+		 * Argument Category: Void
+		 */
+		public IntPtr destroy
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: set_visible
+		 * Argument Type: void
+		 * Argument Category: Void
+		 */
+		public IntPtr set_visible
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: request_add_buddy
+		 * Argument Type: void
+		 * Argument Category: Void
+		 */
+		public IntPtr request_add_buddy
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: request_add_chat
+		 * Argument Type: void
+		 * Argument Category: Void
+		 */
+		public IntPtr request_add_chat
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: request_add_group
+		 * Argument Type: void
+		 * Argument Category: Void
+		 */
+		public IntPtr request_add_group
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: _purple_reserved1
+		 * Argument Type: void
+		 * Argument Category: Void
+		 */
+		public IntPtr _purple_reserved1
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: _purple_reserved2
+		 * Argument Type: void
+		 * Argument Category: Void
+		 */
+		public IntPtr _purple_reserved2
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: _purple_reserved3
+		 * Argument Type: void
+		 * Argument Category: Void
+		 */
+		public IntPtr _purple_reserved3
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: _purple_reserved4
+		 * Argument Type: void
+		 * Argument Category: Void
+		 */
+		public IntPtr _purple_reserved4
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+	}
+
+
+	[StructLayout(LayoutKind.Sequential)]
+	public class _PurpleBlistUiOps
+	{
+		/*
+		 * void (*new_list)(PurpleBuddyList * list)
+		 */
+		public IntPtr new_list;
+
+		/*
+		 * void (*new_node)(PurpleBlistNode * node)
+		 */
+		public IntPtr new_node;
+
+		/*
+		 * void (*show)(PurpleBuddyList * list)
+		 */
+		public IntPtr show;
+
+		/*
+		 * void (*update)(PurpleBuddyList * list, PurpleBlistNode * node)
+		 */
+		public IntPtr update;
+
+		/*
+		 * void (*remove)(PurpleBuddyList * list, PurpleBlistNode * node)
+		 */
+		public IntPtr remove;
+
+		/*
+		 * void (*destroy)(PurpleBuddyList * list)
+		 */
+		public IntPtr destroy;
+
+		/*
+		 * void (*set_visible)(PurpleBuddyList * list, gboolean show)
+		 */
+		public IntPtr set_visible;
+
+		/*
+		 * void (*request_add_buddy)(PurpleAccount * account, char * username, char * group, char * alias)
+		 */
+		public IntPtr request_add_buddy;
+
+		/*
+		 * void (*request_add_chat)(PurpleAccount * account, PurpleGroup * group, char * alias, char * name)
+		 */
+		public IntPtr request_add_chat;
+
+		/*
+		 * void (*request_add_group)()
+		 */
+		public IntPtr request_add_group;
+
+		/*
+		 * void (*_purple_reserved1)()
+		 */
+		public IntPtr _purple_reserved1;
+
+		/*
+		 * void (*_purple_reserved2)()
+		 */
+		public IntPtr _purple_reserved2;
+
+		/*
+		 * void (*_purple_reserved3)()
+		 */
+		public IntPtr _purple_reserved3;
+
+		/*
+		 * void (*_purple_reserved4)()
+		 */
+		public IntPtr _purple_reserved4;
+
+	}
+
+}
+
============================================================
--- libpurple/wrapper/PurpleBuddy.cs	ee57b87f0101fe5d0be8f31f0982e8ae840d53c6
+++ libpurple/wrapper/PurpleBuddy.cs	ee57b87f0101fe5d0be8f31f0982e8ae840d53c6
@@ -0,0 +1,260 @@
+/* PurpleWrapper - A .NET (CLR) wrapper for libpurple
+ *
+ * Purple is the legal property of its developers, whose names are too numerous
+ * to list here.  Please refer to the COPYRIGHT file distributed with this
+ * source distribution.
+ *
+ * This program 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.
+ *
+ * This program 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 this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02111-1301  USA
+ */
+
+/*
+ * This file was auto-generated from the libpurple header files to provide a
+ * clean interface between .NET/CLR and the unmanaged C library libpurple.
+ *
+ * This is the second major commit of the code.
+ * Next things:
+ *  - A few of the .h files have anonymous parameter names (eg: void cat(int, int).
+ *    This program will need to assign these parameters names.
+ *  - Function pointers inside structs aren't translated correctly into C#.
+ *  - Two places there are specific-length arrays (eg: char hostname[256]). The parser
+ *    does not detect them as an array.
+ */
+
+using System;
+using System.Collections.Generic;
+using System.Runtime.InteropServices;
+
+namespace PurpleWrapper
+{
+
+	/*
+	 * File: blist.h
+	 * Structure: PurpleBuddy
+	 */
+	public class PurpleBuddy : UnmanagedWrapper<_PurpleBuddy>
+	{
+		public PurpleBuddy()
+		{
+		}
+
+		public PurpleBuddy(IntPtr reference)
+		{
+			this.Reference = reference;
+			this.Data = (_PurpleBuddy)Marshal.PtrToStructure(this.Reference, typeof(_PurpleBuddy));
+		}
+
+		/*
+		 * Argument Name: node
+		 * Argument Type: PurpleBlistNode
+		 * Argument Category: KnownStruct
+		 */
+		/*
+		 * Could not generate a wrapper for PurpleBuddy.node in file "blist.h".
+		 * Message: The struct contains an object that resolves to a function that is not a function pointer (PurpleBlistNode node).
+		 */
+
+		/*
+		 * Argument Name: name
+		 * Argument Type: char *
+		 * Argument Category: Native
+		 */
+		public string name
+		{
+			get
+			{
+				return this.Data.name;
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				this.Data.name = value;
+			}
+		}
+
+		/*
+		 * Argument Name: alias
+		 * Argument Type: char *
+		 * Argument Category: Native
+		 */
+		public string alias
+		{
+			get
+			{
+				return this.Data.alias;
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				this.Data.alias = value;
+			}
+		}
+
+		/*
+		 * Argument Name: server_alias
+		 * Argument Type: char *
+		 * Argument Category: Native
+		 */
+		public string server_alias
+		{
+			get
+			{
+				return this.Data.server_alias;
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				this.Data.server_alias = value;
+			}
+		}
+
+		/*
+		 * Argument Name: proto_data
+		 * Argument Type: void *
+		 * Argument Category: VoidPointer
+		 */
+		public IntPtr proto_data
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: icon
+		 * Argument Type: PurpleBuddyIcon *
+		 * Argument Category: PointerToUnknownStruct
+		 */
+		public /* Resolved as PointerToUnknownStruct to PurpleBuddyIcon */ IntPtr icon
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: account
+		 * Argument Type: PurpleAccount *
+		 * Argument Category: PointerToKnownStruct
+		 */
+		public PurpleAccount account
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: presence
+		 * Argument Type: PurplePresence *
+		 * Argument Category: PointerToUnknownStruct
+		 */
+		public /* Resolved as PointerToUnknownStruct to PurplePresence */ IntPtr presence
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+	}
+
+
+	[StructLayout(LayoutKind.Sequential)]
+	public class _PurpleBuddy
+	{
+		/*
+		 * PurpleBlistNode node
+		 */
+		/*
+		 * Could not generate a wrapper for PurpleBuddy.node in file "blist.h".
+		 * Message: The struct contains an object that resolves to a function that is not a function pointer (PurpleBlistNode node).
+		 */
+
+		/*
+		 * char * name
+		 */
+		public string name;
+
+		/*
+		 * char * alias
+		 */
+		public string alias;
+
+		/*
+		 * char * server_alias
+		 */
+		public string server_alias;
+
+		/*
+		 * void * proto_data
+		 */
+		public IntPtr proto_data;
+
+		/*
+		 * PurpleBuddyIcon * icon
+		 */
+		public IntPtr icon;
+
+		/*
+		 * PurpleAccount * account
+		 */
+		public IntPtr account;
+
+		/*
+		 * PurplePresence * presence
+		 */
+		public IntPtr presence;
+
+	}
+
+}
+
============================================================
--- libpurple/wrapper/PurpleBuddyIconSpec.cs	86ea6086cc253536dcae5c52c8ea29635b84b455
+++ libpurple/wrapper/PurpleBuddyIconSpec.cs	86ea6086cc253536dcae5c52c8ea29635b84b455
@@ -0,0 +1,242 @@
+/* PurpleWrapper - A .NET (CLR) wrapper for libpurple
+ *
+ * Purple is the legal property of its developers, whose names are too numerous
+ * to list here.  Please refer to the COPYRIGHT file distributed with this
+ * source distribution.
+ *
+ * This program 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.
+ *
+ * This program 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 this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02111-1301  USA
+ */
+
+/*
+ * This file was auto-generated from the libpurple header files to provide a
+ * clean interface between .NET/CLR and the unmanaged C library libpurple.
+ *
+ * This is the second major commit of the code.
+ * Next things:
+ *  - A few of the .h files have anonymous parameter names (eg: void cat(int, int).
+ *    This program will need to assign these parameters names.
+ *  - Function pointers inside structs aren't translated correctly into C#.
+ *  - Two places there are specific-length arrays (eg: char hostname[256]). The parser
+ *    does not detect them as an array.
+ */
+
+using System;
+using System.Collections.Generic;
+using System.Runtime.InteropServices;
+
+namespace PurpleWrapper
+{
+
+	/*
+	 * File: prpl.h
+	 * Structure: PurpleBuddyIconSpec
+	 */
+	public class PurpleBuddyIconSpec : UnmanagedWrapper<_PurpleBuddyIconSpec>
+	{
+		public PurpleBuddyIconSpec()
+		{
+		}
+
+		public PurpleBuddyIconSpec(IntPtr reference)
+		{
+			this.Reference = reference;
+			this.Data = (_PurpleBuddyIconSpec)Marshal.PtrToStructure(this.Reference, typeof(_PurpleBuddyIconSpec));
+		}
+
+		/*
+		 * Argument Name: format
+		 * Argument Type: char *
+		 * Argument Category: Native
+		 */
+		public string format
+		{
+			get
+			{
+				return this.Data.format;
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				this.Data.format = value;
+			}
+		}
+
+		/*
+		 * Argument Name: min_width
+		 * Argument Type: int
+		 * Argument Category: Native
+		 */
+		public int min_width
+		{
+			get
+			{
+				return this.Data.min_width;
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				this.Data.min_width = value;
+			}
+		}
+
+		/*
+		 * Argument Name: min_height
+		 * Argument Type: int
+		 * Argument Category: Native
+		 */
+		public int min_height
+		{
+			get
+			{
+				return this.Data.min_height;
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				this.Data.min_height = value;
+			}
+		}
+
+		/*
+		 * Argument Name: max_width
+		 * Argument Type: int
+		 * Argument Category: Native
+		 */
+		public int max_width
+		{
+			get
+			{
+				return this.Data.max_width;
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				this.Data.max_width = value;
+			}
+		}
+
+		/*
+		 * Argument Name: max_height
+		 * Argument Type: int
+		 * Argument Category: Native
+		 */
+		public int max_height
+		{
+			get
+			{
+				return this.Data.max_height;
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				this.Data.max_height = value;
+			}
+		}
+
+		/*
+		 * Argument Name: max_filesize
+		 * Argument Type: size_t
+		 * Argument Category: Native
+		 */
+		public ulong max_filesize
+		{
+			get
+			{
+				return this.Data.max_filesize;
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				this.Data.max_filesize = value;
+			}
+		}
+
+		/*
+		 * Argument Name: scale_rules
+		 * Argument Type: PurpleIconScaleRules
+		 * Argument Category: KnownEnum
+		 */
+		public Prpl.PurpleIconScaleRules scale_rules
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+	}
+
+
+	[StructLayout(LayoutKind.Sequential)]
+	public class _PurpleBuddyIconSpec
+	{
+		/*
+		 * char * format
+		 */
+		public string format;
+
+		/*
+		 * int min_width
+		 */
+		public int min_width;
+
+		/*
+		 * int min_height
+		 */
+		public int min_height;
+
+		/*
+		 * int max_width
+		 */
+		public int max_width;
+
+		/*
+		 * int max_height
+		 */
+		public int max_height;
+
+		/*
+		 * size_t max_filesize
+		 */
+		public ulong max_filesize;
+
+		/*
+		 * PurpleIconScaleRules scale_rules
+		 */
+		public Prpl.PurpleIconScaleRules scale_rules;
+
+	}
+
+}
+
============================================================
--- libpurple/wrapper/PurpleBuddyList.cs	689bcda277f630ba19172b033cee720e221cae04
+++ libpurple/wrapper/PurpleBuddyList.cs	689bcda277f630ba19172b033cee720e221cae04
@@ -0,0 +1,132 @@
+/* PurpleWrapper - A .NET (CLR) wrapper for libpurple
+ *
+ * Purple is the legal property of its developers, whose names are too numerous
+ * to list here.  Please refer to the COPYRIGHT file distributed with this
+ * source distribution.
+ *
+ * This program 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.
+ *
+ * This program 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 this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02111-1301  USA
+ */
+
+/*
+ * This file was auto-generated from the libpurple header files to provide a
+ * clean interface between .NET/CLR and the unmanaged C library libpurple.
+ *
+ * This is the second major commit of the code.
+ * Next things:
+ *  - A few of the .h files have anonymous parameter names (eg: void cat(int, int).
+ *    This program will need to assign these parameters names.
+ *  - Function pointers inside structs aren't translated correctly into C#.
+ *  - Two places there are specific-length arrays (eg: char hostname[256]). The parser
+ *    does not detect them as an array.
+ */
+
+using System;
+using System.Collections.Generic;
+using System.Runtime.InteropServices;
+
+namespace PurpleWrapper
+{
+
+	/*
+	 * File: blist.h
+	 * Structure: PurpleBuddyList
+	 */
+	public class PurpleBuddyList : UnmanagedWrapper<_PurpleBuddyList>
+	{
+		public PurpleBuddyList()
+		{
+		}
+
+		public PurpleBuddyList(IntPtr reference)
+		{
+			this.Reference = reference;
+			this.Data = (_PurpleBuddyList)Marshal.PtrToStructure(this.Reference, typeof(_PurpleBuddyList));
+		}
+
+		/*
+		 * Argument Name: root
+		 * Argument Type: PurpleBlistNode *
+		 * Argument Category: PointerToKnownStruct
+		 */
+		public PurpleBlistNode root
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: buddies
+		 * Argument Type: GHashTable *
+		 * Argument Category: PointerToGHashTable
+		 */
+		/*
+		 * Could not generate a wrapper for PurpleBuddyList.buddies in file "blist.h".
+		 * Message: Unable to provide a type for HashTable as no function information was provided in code.
+		 */
+
+		/*
+		 * Argument Name: ui_data
+		 * Argument Type: void *
+		 * Argument Category: VoidPointer
+		 */
+		public IntPtr ui_data
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+	}
+
+
+	[StructLayout(LayoutKind.Sequential)]
+	public class _PurpleBuddyList
+	{
+		/*
+		 * PurpleBlistNode * root
+		 */
+		public IntPtr root;
+
+		/*
+		 * GHashTable * buddies
+		 */
+		public IntPtr buddies;
+
+		/*
+		 * void * ui_data
+		 */
+		public IntPtr ui_data;
+
+	}
+
+}
+
============================================================
--- libpurple/wrapper/PurpleCertificate.cs	19e6265864a426325f86e3cb40f507c2c0554958
+++ libpurple/wrapper/PurpleCertificate.cs	19e6265864a426325f86e3cb40f507c2c0554958
@@ -0,0 +1,117 @@
+/* PurpleWrapper - A .NET (CLR) wrapper for libpurple
+ *
+ * Purple is the legal property of its developers, whose names are too numerous
+ * to list here.  Please refer to the COPYRIGHT file distributed with this
+ * source distribution.
+ *
+ * This program 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.
+ *
+ * This program 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 this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02111-1301  USA
+ */
+
+/*
+ * This file was auto-generated from the libpurple header files to provide a
+ * clean interface between .NET/CLR and the unmanaged C library libpurple.
+ *
+ * This is the second major commit of the code.
+ * Next things:
+ *  - A few of the .h files have anonymous parameter names (eg: void cat(int, int).
+ *    This program will need to assign these parameters names.
+ *  - Function pointers inside structs aren't translated correctly into C#.
+ *  - Two places there are specific-length arrays (eg: char hostname[256]). The parser
+ *    does not detect them as an array.
+ */
+
+using System;
+using System.Collections.Generic;
+using System.Runtime.InteropServices;
+
+namespace PurpleWrapper
+{
+
+	/*
+	 * File: certificate.h
+	 * Structure: PurpleCertificate
+	 */
+	public class PurpleCertificate : UnmanagedWrapper<_PurpleCertificate>
+	{
+		public PurpleCertificate()
+		{
+		}
+
+		public PurpleCertificate(IntPtr reference)
+		{
+			this.Reference = reference;
+			this.Data = (_PurpleCertificate)Marshal.PtrToStructure(this.Reference, typeof(_PurpleCertificate));
+		}
+
+		/*
+		 * Argument Name: scheme
+		 * Argument Type: PurpleCertificateScheme *
+		 * Argument Category: PointerToKnownStruct
+		 */
+		public PurpleCertificateScheme scheme
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: data
+		 * Argument Type: gpointer
+		 * Argument Category: VoidPointer
+		 */
+		public IntPtr data
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+	}
+
+
+	[StructLayout(LayoutKind.Sequential)]
+	public class _PurpleCertificate
+	{
+		/*
+		 * PurpleCertificateScheme * scheme
+		 */
+		public IntPtr scheme;
+
+		/*
+		 * gpointer data
+		 */
+		public IntPtr data;
+
+	}
+
+}
+
============================================================
--- libpurple/wrapper/PurpleCertificatePool.cs	5d44cddd088d31d7ad1417f69d683504534a4661
+++ libpurple/wrapper/PurpleCertificatePool.cs	5d44cddd088d31d7ad1417f69d683504534a4661
@@ -0,0 +1,442 @@
+/* PurpleWrapper - A .NET (CLR) wrapper for libpurple
+ *
+ * Purple is the legal property of its developers, whose names are too numerous
+ * to list here.  Please refer to the COPYRIGHT file distributed with this
+ * source distribution.
+ *
+ * This program 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.
+ *
+ * This program 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 this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02111-1301  USA
+ */
+
+/*
+ * This file was auto-generated from the libpurple header files to provide a
+ * clean interface between .NET/CLR and the unmanaged C library libpurple.
+ *
+ * This is the second major commit of the code.
+ * Next things:
+ *  - A few of the .h files have anonymous parameter names (eg: void cat(int, int).
+ *    This program will need to assign these parameters names.
+ *  - Function pointers inside structs aren't translated correctly into C#.
+ *  - Two places there are specific-length arrays (eg: char hostname[256]). The parser
+ *    does not detect them as an array.
+ */
+
+using System;
+using System.Collections.Generic;
+using System.Runtime.InteropServices;
+
+namespace PurpleWrapper
+{
+
+	/*
+	 * File: certificate.h
+	 * Structure: PurpleCertificatePool
+	 */
+	public class PurpleCertificatePool : UnmanagedWrapper<_PurpleCertificatePool>
+	{
+		public PurpleCertificatePool()
+		{
+		}
+
+		public PurpleCertificatePool(IntPtr reference)
+		{
+			this.Reference = reference;
+			this.Data = (_PurpleCertificatePool)Marshal.PtrToStructure(this.Reference, typeof(_PurpleCertificatePool));
+		}
+
+		/*
+		 * Argument Name: scheme_name
+		 * Argument Type: gchar *
+		 * Argument Category: Native
+		 */
+		public string scheme_name
+		{
+			get
+			{
+				return this.Data.scheme_name;
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				this.Data.scheme_name = value;
+			}
+		}
+
+		/*
+		 * Argument Name: name
+		 * Argument Type: gchar *
+		 * Argument Category: Native
+		 */
+		public string name
+		{
+			get
+			{
+				return this.Data.name;
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				this.Data.name = value;
+			}
+		}
+
+		/*
+		 * Argument Name: fullname
+		 * Argument Type: gchar *
+		 * Argument Category: Native
+		 */
+		public string fullname
+		{
+			get
+			{
+				return this.Data.fullname;
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				this.Data.fullname = value;
+			}
+		}
+
+		/*
+		 * Argument Name: data
+		 * Argument Type: gpointer
+		 * Argument Category: VoidPointer
+		 */
+		public IntPtr data
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: init
+		 * Argument Type: gboolean
+		 * Argument Category: Native
+		 */
+		public IntPtr init
+		{
+			get
+			{
+				return this.Data.init;
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				this.Data.init = value;
+			}
+		}
+
+		/*
+		 * Argument Name: uninit
+		 * Argument Type: void
+		 * Argument Category: Void
+		 */
+		public IntPtr uninit
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: cert_in_pool
+		 * Argument Type: gboolean
+		 * Argument Category: Native
+		 */
+		public IntPtr cert_in_pool
+		{
+			get
+			{
+				return this.Data.cert_in_pool;
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				this.Data.cert_in_pool = value;
+			}
+		}
+
+		/*
+		 * Argument Name: get_cert
+		 * Argument Type: PurpleCertificate *
+		 * Argument Category: PointerToKnownStruct
+		 */
+		public IntPtr get_cert
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: put_cert
+		 * Argument Type: gboolean
+		 * Argument Category: Native
+		 */
+		public IntPtr put_cert
+		{
+			get
+			{
+				return this.Data.put_cert;
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				this.Data.put_cert = value;
+			}
+		}
+
+		/*
+		 * Argument Name: delete_cert
+		 * Argument Type: gboolean
+		 * Argument Category: Native
+		 */
+		public IntPtr delete_cert
+		{
+			get
+			{
+				return this.Data.delete_cert;
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				this.Data.delete_cert = value;
+			}
+		}
+
+		/*
+		 * Argument Name: get_idlist
+		 * Argument Type: GList *
+		 * Argument Category: PointerToGList
+		 */
+		public IntPtr get_idlist
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: _purple_reserved1
+		 * Argument Type: void
+		 * Argument Category: Void
+		 */
+		public IntPtr _purple_reserved1
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: _purple_reserved2
+		 * Argument Type: void
+		 * Argument Category: Void
+		 */
+		public IntPtr _purple_reserved2
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: _purple_reserved3
+		 * Argument Type: void
+		 * Argument Category: Void
+		 */
+		public IntPtr _purple_reserved3
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: _purple_reserved4
+		 * Argument Type: void
+		 * Argument Category: Void
+		 */
+		public IntPtr _purple_reserved4
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+	}
+
+
+	[StructLayout(LayoutKind.Sequential)]
+	public class _PurpleCertificatePool
+	{
+		/*
+		 * gchar * scheme_name
+		 */
+		public string scheme_name;
+
+		/*
+		 * gchar * name
+		 */
+		public string name;
+
+		/*
+		 * gchar * fullname
+		 */
+		public string fullname;
+
+		/*
+		 * gpointer data
+		 */
+		public IntPtr data;
+
+		/*
+		 * gboolean (*init)()
+		 */
+		public IntPtr init;
+
+		/*
+		 * void (*uninit)()
+		 */
+		public IntPtr uninit;
+
+		/*
+		 * gboolean (*cert_in_pool)(gchar * id)
+		 */
+		public IntPtr cert_in_pool;
+
+		/*
+		 * PurpleCertificate * (*get_cert)(gchar * id)
+		 */
+		public IntPtr get_cert;
+
+		/*
+		 * gboolean (*put_cert)(gchar * id, PurpleCertificate * crt)
+		 */
+		public IntPtr put_cert;
+
+		/*
+		 * gboolean (*delete_cert)(gchar * id)
+		 */
+		public IntPtr delete_cert;
+
+		/*
+		 * GList * (*get_idlist)()
+		 */
+		public IntPtr get_idlist;
+
+		/*
+		 * void (*_purple_reserved1)()
+		 */
+		public IntPtr _purple_reserved1;
+
+		/*
+		 * void (*_purple_reserved2)()
+		 */
+		public IntPtr _purple_reserved2;
+
+		/*
+		 * void (*_purple_reserved3)()
+		 */
+		public IntPtr _purple_reserved3;
+
+		/*
+		 * void (*_purple_reserved4)()
+		 */
+		public IntPtr _purple_reserved4;
+
+	}
+
+}
+
============================================================
--- libpurple/wrapper/PurpleCertificateScheme.cs	fb0d4b31bde4d728a8c8e4628efa20e02b0d535b
+++ libpurple/wrapper/PurpleCertificateScheme.cs	fb0d4b31bde4d728a8c8e4628efa20e02b0d535b
@@ -0,0 +1,492 @@
+/* PurpleWrapper - A .NET (CLR) wrapper for libpurple
+ *
+ * Purple is the legal property of its developers, whose names are too numerous
+ * to list here.  Please refer to the COPYRIGHT file distributed with this
+ * source distribution.
+ *
+ * This program 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.
+ *
+ * This program 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 this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02111-1301  USA
+ */
+
+/*
+ * This file was auto-generated from the libpurple header files to provide a
+ * clean interface between .NET/CLR and the unmanaged C library libpurple.
+ *
+ * This is the second major commit of the code.
+ * Next things:
+ *  - A few of the .h files have anonymous parameter names (eg: void cat(int, int).
+ *    This program will need to assign these parameters names.
+ *  - Function pointers inside structs aren't translated correctly into C#.
+ *  - Two places there are specific-length arrays (eg: char hostname[256]). The parser
+ *    does not detect them as an array.
+ */
+
+using System;
+using System.Collections.Generic;
+using System.Runtime.InteropServices;
+
+namespace PurpleWrapper
+{
+
+	/*
+	 * File: certificate.h
+	 * Structure: PurpleCertificateScheme
+	 */
+	public class PurpleCertificateScheme : UnmanagedWrapper<_PurpleCertificateScheme>
+	{
+		public PurpleCertificateScheme()
+		{
+		}
+
+		public PurpleCertificateScheme(IntPtr reference)
+		{
+			this.Reference = reference;
+			this.Data = (_PurpleCertificateScheme)Marshal.PtrToStructure(this.Reference, typeof(_PurpleCertificateScheme));
+		}
+
+		/*
+		 * Argument Name: name
+		 * Argument Type: gchar *
+		 * Argument Category: Native
+		 */
+		public string name
+		{
+			get
+			{
+				return this.Data.name;
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				this.Data.name = value;
+			}
+		}
+
+		/*
+		 * Argument Name: fullname
+		 * Argument Type: gchar *
+		 * Argument Category: Native
+		 */
+		public string fullname
+		{
+			get
+			{
+				return this.Data.fullname;
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				this.Data.fullname = value;
+			}
+		}
+
+		/*
+		 * Argument Name: import_certificate
+		 * Argument Type: PurpleCertificate *
+		 * Argument Category: PointerToKnownStruct
+		 */
+		public IntPtr import_certificate
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: export_certificate
+		 * Argument Type: gboolean
+		 * Argument Category: Native
+		 */
+		public IntPtr export_certificate
+		{
+			get
+			{
+				return this.Data.export_certificate;
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				this.Data.export_certificate = value;
+			}
+		}
+
+		/*
+		 * Argument Name: copy_certificate
+		 * Argument Type: PurpleCertificate *
+		 * Argument Category: PointerToKnownStruct
+		 */
+		public IntPtr copy_certificate
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: destroy_certificate
+		 * Argument Type: void
+		 * Argument Category: Void
+		 */
+		public IntPtr destroy_certificate
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: signed_by
+		 * Argument Type: gboolean
+		 * Argument Category: Native
+		 */
+		public IntPtr signed_by
+		{
+			get
+			{
+				return this.Data.signed_by;
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				this.Data.signed_by = value;
+			}
+		}
+
+		/*
+		 * Argument Name: get_fingerprint_sha1
+		 * Argument Type: GByteArray *
+		 * Argument Category: PointerToUnknownStruct
+		 */
+		public IntPtr get_fingerprint_sha1
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: get_unique_id
+		 * Argument Type: gchar *
+		 * Argument Category: Native
+		 */
+		public IntPtr get_unique_id
+		{
+			get
+			{
+				return this.Data.get_unique_id;
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				this.Data.get_unique_id = value;
+			}
+		}
+
+		/*
+		 * Argument Name: get_issuer_unique_id
+		 * Argument Type: gchar *
+		 * Argument Category: Native
+		 */
+		public IntPtr get_issuer_unique_id
+		{
+			get
+			{
+				return this.Data.get_issuer_unique_id;
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				this.Data.get_issuer_unique_id = value;
+			}
+		}
+
+		/*
+		 * Argument Name: get_subject_name
+		 * Argument Type: gchar *
+		 * Argument Category: Native
+		 */
+		public IntPtr get_subject_name
+		{
+			get
+			{
+				return this.Data.get_subject_name;
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				this.Data.get_subject_name = value;
+			}
+		}
+
+		/*
+		 * Argument Name: check_subject_name
+		 * Argument Type: gboolean
+		 * Argument Category: Native
+		 */
+		public IntPtr check_subject_name
+		{
+			get
+			{
+				return this.Data.check_subject_name;
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				this.Data.check_subject_name = value;
+			}
+		}
+
+		/*
+		 * Argument Name: get_times
+		 * Argument Type: gboolean
+		 * Argument Category: Native
+		 */
+		public IntPtr get_times
+		{
+			get
+			{
+				return this.Data.get_times;
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				this.Data.get_times = value;
+			}
+		}
+
+		/*
+		 * Argument Name: _purple_reserved1
+		 * Argument Type: void
+		 * Argument Category: Void
+		 */
+		public IntPtr _purple_reserved1
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: _purple_reserved2
+		 * Argument Type: void
+		 * Argument Category: Void
+		 */
+		public IntPtr _purple_reserved2
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: _purple_reserved3
+		 * Argument Type: void
+		 * Argument Category: Void
+		 */
+		public IntPtr _purple_reserved3
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: _purple_reserved4
+		 * Argument Type: void
+		 * Argument Category: Void
+		 */
+		public IntPtr _purple_reserved4
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+	}
+
+
+	[StructLayout(LayoutKind.Sequential)]
+	public class _PurpleCertificateScheme
+	{
+		/*
+		 * gchar * name
+		 */
+		public string name;
+
+		/*
+		 * gchar * fullname
+		 */
+		public string fullname;
+
+		/*
+		 * PurpleCertificate * (*import_certificate)(gchar * filename)
+		 */
+		public IntPtr import_certificate;
+
+		/*
+		 * gboolean (*export_certificate)(gchar * filename, PurpleCertificate * crt)
+		 */
+		public IntPtr export_certificate;
+
+		/*
+		 * PurpleCertificate * (*copy_certificate)(PurpleCertificate * crt)
+		 */
+		public IntPtr copy_certificate;
+
+		/*
+		 * void (*destroy_certificate)(PurpleCertificate * crt)
+		 */
+		public IntPtr destroy_certificate;
+
+		/*
+		 * gboolean (*signed_by)(PurpleCertificate * crt, PurpleCertificate * issuer)
+		 */
+		public IntPtr signed_by;
+
+		/*
+		 * GByteArray * (*get_fingerprint_sha1)(PurpleCertificate * crt)
+		 */
+		public IntPtr get_fingerprint_sha1;
+
+		/*
+		 * gchar * (*get_unique_id)(PurpleCertificate * crt)
+		 */
+		public IntPtr get_unique_id;
+
+		/*
+		 * gchar * (*get_issuer_unique_id)(PurpleCertificate * crt)
+		 */
+		public IntPtr get_issuer_unique_id;
+
+		/*
+		 * gchar * (*get_subject_name)(PurpleCertificate * crt)
+		 */
+		public IntPtr get_subject_name;
+
+		/*
+		 * gboolean (*check_subject_name)(PurpleCertificate * crt, gchar * name)
+		 */
+		public IntPtr check_subject_name;
+
+		/*
+		 * gboolean (*get_times)(PurpleCertificate * crt, time_t * activation, time_t * expiration)
+		 */
+		public IntPtr get_times;
+
+		/*
+		 * void (*_purple_reserved1)()
+		 */
+		public IntPtr _purple_reserved1;
+
+		/*
+		 * void (*_purple_reserved2)()
+		 */
+		public IntPtr _purple_reserved2;
+
+		/*
+		 * void (*_purple_reserved3)()
+		 */
+		public IntPtr _purple_reserved3;
+
+		/*
+		 * void (*_purple_reserved4)()
+		 */
+		public IntPtr _purple_reserved4;
+
+	}
+
+}
+
============================================================
--- libpurple/wrapper/PurpleCertificateVerificationRequest.cs	cfcc9ffbf62088223b555f982dfb89033b618712
+++ libpurple/wrapper/PurpleCertificateVerificationRequest.cs	cfcc9ffbf62088223b555f982dfb89033b618712
@@ -0,0 +1,232 @@
+/* PurpleWrapper - A .NET (CLR) wrapper for libpurple
+ *
+ * Purple is the legal property of its developers, whose names are too numerous
+ * to list here.  Please refer to the COPYRIGHT file distributed with this
+ * source distribution.
+ *
+ * This program 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.
+ *
+ * This program 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 this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02111-1301  USA
+ */
+
+/*
+ * This file was auto-generated from the libpurple header files to provide a
+ * clean interface between .NET/CLR and the unmanaged C library libpurple.
+ *
+ * This is the second major commit of the code.
+ * Next things:
+ *  - A few of the .h files have anonymous parameter names (eg: void cat(int, int).
+ *    This program will need to assign these parameters names.
+ *  - Function pointers inside structs aren't translated correctly into C#.
+ *  - Two places there are specific-length arrays (eg: char hostname[256]). The parser
+ *    does not detect them as an array.
+ */
+
+using System;
+using System.Collections.Generic;
+using System.Runtime.InteropServices;
+
+namespace PurpleWrapper
+{
+
+	/*
+	 * File: certificate.h
+	 * Structure: PurpleCertificateVerificationRequest
+	 */
+	public class PurpleCertificateVerificationRequest : UnmanagedWrapper<_PurpleCertificateVerificationRequest>
+	{
+		public PurpleCertificateVerificationRequest()
+		{
+		}
+
+		public PurpleCertificateVerificationRequest(IntPtr reference)
+		{
+			this.Reference = reference;
+			this.Data = (_PurpleCertificateVerificationRequest)Marshal.PtrToStructure(this.Reference, typeof(_PurpleCertificateVerificationRequest));
+		}
+
+		/*
+		 * Argument Name: verifier
+		 * Argument Type: PurpleCertificateVerifier *
+		 * Argument Category: PointerToKnownStruct
+		 */
+		public PurpleCertificateVerifier verifier
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: scheme
+		 * Argument Type: PurpleCertificateScheme *
+		 * Argument Category: PointerToKnownStruct
+		 */
+		public PurpleCertificateScheme scheme
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: subject_name
+		 * Argument Type: gchar *
+		 * Argument Category: Native
+		 */
+		public string subject_name
+		{
+			get
+			{
+				return this.Data.subject_name;
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				this.Data.subject_name = value;
+			}
+		}
+
+		/*
+		 * Argument Name: cert_chain
+		 * Argument Type: GList *
+		 * Argument Category: PointerToGList
+		 */
+		/*
+		 * Could not generate a wrapper for PurpleCertificateVerificationRequest.cert_chain in file "certificate.h".
+		 * Message: Unable to provide a type for GList as no function information was provided in code.
+		 */
+
+		/*
+		 * Argument Name: data
+		 * Argument Type: gpointer
+		 * Argument Category: VoidPointer
+		 */
+		public IntPtr data
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: cb
+		 * Argument Type: PurpleCertificateVerifiedCallback
+		 * Argument Category: KnownFunctionPointer
+		 */
+		public Certificate.PurpleCertificateVerifiedCallback cb
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: cb_data
+		 * Argument Type: gpointer
+		 * Argument Category: VoidPointer
+		 */
+		public IntPtr cb_data
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+	}
+
+
+	[StructLayout(LayoutKind.Sequential)]
+	public class _PurpleCertificateVerificationRequest
+	{
+		/*
+		 * PurpleCertificateVerifier * verifier
+		 */
+		public IntPtr verifier;
+
+		/*
+		 * PurpleCertificateScheme * scheme
+		 */
+		public IntPtr scheme;
+
+		/*
+		 * gchar * subject_name
+		 */
+		public string subject_name;
+
+		/*
+		 * GList * cert_chain
+		 */
+		public IntPtr cert_chain;
+
+		/*
+		 * gpointer data
+		 */
+		public IntPtr data;
+
+		/*
+		 * PurpleCertificateVerifiedCallback cb
+		 */
+		public IntPtr cb;
+
+		/*
+		 * gpointer cb_data
+		 */
+		public IntPtr cb_data;
+
+	}
+
+}
+
============================================================
--- libpurple/wrapper/PurpleCertificateVerifier.cs	c224d405bbbc0870dd92b7f83dcc1bd42fa72c2f
+++ libpurple/wrapper/PurpleCertificateVerifier.cs	c224d405bbbc0870dd92b7f83dcc1bd42fa72c2f
@@ -0,0 +1,267 @@
+/* PurpleWrapper - A .NET (CLR) wrapper for libpurple
+ *
+ * Purple is the legal property of its developers, whose names are too numerous
+ * to list here.  Please refer to the COPYRIGHT file distributed with this
+ * source distribution.
+ *
+ * This program 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.
+ *
+ * This program 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 this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02111-1301  USA
+ */
+
+/*
+ * This file was auto-generated from the libpurple header files to provide a
+ * clean interface between .NET/CLR and the unmanaged C library libpurple.
+ *
+ * This is the second major commit of the code.
+ * Next things:
+ *  - A few of the .h files have anonymous parameter names (eg: void cat(int, int).
+ *    This program will need to assign these parameters names.
+ *  - Function pointers inside structs aren't translated correctly into C#.
+ *  - Two places there are specific-length arrays (eg: char hostname[256]). The parser
+ *    does not detect them as an array.
+ */
+
+using System;
+using System.Collections.Generic;
+using System.Runtime.InteropServices;
+
+namespace PurpleWrapper
+{
+
+	/*
+	 * File: certificate.h
+	 * Structure: PurpleCertificateVerifier
+	 */
+	public class PurpleCertificateVerifier : UnmanagedWrapper<_PurpleCertificateVerifier>
+	{
+		public PurpleCertificateVerifier()
+		{
+		}
+
+		public PurpleCertificateVerifier(IntPtr reference)
+		{
+			this.Reference = reference;
+			this.Data = (_PurpleCertificateVerifier)Marshal.PtrToStructure(this.Reference, typeof(_PurpleCertificateVerifier));
+		}
+
+		/*
+		 * Argument Name: scheme_name
+		 * Argument Type: gchar *
+		 * Argument Category: Native
+		 */
+		public string scheme_name
+		{
+			get
+			{
+				return this.Data.scheme_name;
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				this.Data.scheme_name = value;
+			}
+		}
+
+		/*
+		 * Argument Name: name
+		 * Argument Type: gchar *
+		 * Argument Category: Native
+		 */
+		public string name
+		{
+			get
+			{
+				return this.Data.name;
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				this.Data.name = value;
+			}
+		}
+
+		/*
+		 * Argument Name: start_verification
+		 * Argument Type: void
+		 * Argument Category: Void
+		 */
+		public IntPtr start_verification
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: destroy_request
+		 * Argument Type: void
+		 * Argument Category: Void
+		 */
+		public IntPtr destroy_request
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: _purple_reserved1
+		 * Argument Type: void
+		 * Argument Category: Void
+		 */
+		public IntPtr _purple_reserved1
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: _purple_reserved2
+		 * Argument Type: void
+		 * Argument Category: Void
+		 */
+		public IntPtr _purple_reserved2
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: _purple_reserved3
+		 * Argument Type: void
+		 * Argument Category: Void
+		 */
+		public IntPtr _purple_reserved3
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: _purple_reserved4
+		 * Argument Type: void
+		 * Argument Category: Void
+		 */
+		public IntPtr _purple_reserved4
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+	}
+
+
+	[StructLayout(LayoutKind.Sequential)]
+	public class _PurpleCertificateVerifier
+	{
+		/*
+		 * gchar * scheme_name
+		 */
+		public string scheme_name;
+
+		/*
+		 * gchar * name
+		 */
+		public string name;
+
+		/*
+		 * void (*start_verification)(PurpleCertificateVerificationRequest * vrq)
+		 */
+		public IntPtr start_verification;
+
+		/*
+		 * void (*destroy_request)(PurpleCertificateVerificationRequest * vrq)
+		 */
+		public IntPtr destroy_request;
+
+		/*
+		 * void (*_purple_reserved1)()
+		 */
+		public IntPtr _purple_reserved1;
+
+		/*
+		 * void (*_purple_reserved2)()
+		 */
+		public IntPtr _purple_reserved2;
+
+		/*
+		 * void (*_purple_reserved3)()
+		 */
+		public IntPtr _purple_reserved3;
+
+		/*
+		 * void (*_purple_reserved4)()
+		 */
+		public IntPtr _purple_reserved4;
+
+	}
+
+}
+
============================================================
--- libpurple/wrapper/PurpleChat.cs	7f9cb6dbfd1f9292b53cd6bb65e4bcc8c2be1268
+++ libpurple/wrapper/PurpleChat.cs	7f9cb6dbfd1f9292b53cd6bb65e4bcc8c2be1268
@@ -0,0 +1,150 @@
+/* PurpleWrapper - A .NET (CLR) wrapper for libpurple
+ *
+ * Purple is the legal property of its developers, whose names are too numerous
+ * to list here.  Please refer to the COPYRIGHT file distributed with this
+ * source distribution.
+ *
+ * This program 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.
+ *
+ * This program 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 this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02111-1301  USA
+ */
+
+/*
+ * This file was auto-generated from the libpurple header files to provide a
+ * clean interface between .NET/CLR and the unmanaged C library libpurple.
+ *
+ * This is the second major commit of the code.
+ * Next things:
+ *  - A few of the .h files have anonymous parameter names (eg: void cat(int, int).
+ *    This program will need to assign these parameters names.
+ *  - Function pointers inside structs aren't translated correctly into C#.
+ *  - Two places there are specific-length arrays (eg: char hostname[256]). The parser
+ *    does not detect them as an array.
+ */
+
+using System;
+using System.Collections.Generic;
+using System.Runtime.InteropServices;
+
+namespace PurpleWrapper
+{
+
+	/*
+	 * File: blist.h
+	 * Structure: PurpleChat
+	 */
+	public class PurpleChat : UnmanagedWrapper<_PurpleChat>
+	{
+		public PurpleChat()
+		{
+		}
+
+		public PurpleChat(IntPtr reference)
+		{
+			this.Reference = reference;
+			this.Data = (_PurpleChat)Marshal.PtrToStructure(this.Reference, typeof(_PurpleChat));
+		}
+
+		/*
+		 * Argument Name: node
+		 * Argument Type: PurpleBlistNode
+		 * Argument Category: KnownStruct
+		 */
+		/*
+		 * Could not generate a wrapper for PurpleChat.node in file "blist.h".
+		 * Message: The struct contains an object that resolves to a function that is not a function pointer (PurpleBlistNode node).
+		 */
+
+		/*
+		 * Argument Name: alias
+		 * Argument Type: char *
+		 * Argument Category: Native
+		 */
+		public string alias
+		{
+			get
+			{
+				return this.Data.alias;
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				this.Data.alias = value;
+			}
+		}
+
+		/*
+		 * Argument Name: components
+		 * Argument Type: GHashTable *
+		 * Argument Category: PointerToGHashTable
+		 */
+		/*
+		 * Could not generate a wrapper for PurpleChat.components in file "blist.h".
+		 * Message: Unable to provide a type for HashTable as no function information was provided in code.
+		 */
+
+		/*
+		 * Argument Name: account
+		 * Argument Type: PurpleAccount *
+		 * Argument Category: PointerToKnownStruct
+		 */
+		public PurpleAccount account
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+	}
+
+
+	[StructLayout(LayoutKind.Sequential)]
+	public class _PurpleChat
+	{
+		/*
+		 * PurpleBlistNode node
+		 */
+		/*
+		 * Could not generate a wrapper for PurpleChat.node in file "blist.h".
+		 * Message: The struct contains an object that resolves to a function that is not a function pointer (PurpleBlistNode node).
+		 */
+
+		/*
+		 * char * alias
+		 */
+		public string alias;
+
+		/*
+		 * GHashTable * components
+		 */
+		public IntPtr components;
+
+		/*
+		 * PurpleAccount * account
+		 */
+		public IntPtr account;
+
+	}
+
+}
+
============================================================
--- libpurple/wrapper/PurpleCipherOps.cs	60d9c73757ad92643435345990521b9ddf2d70dd
+++ libpurple/wrapper/PurpleCipherOps.cs	60d9c73757ad92643435345990521b9ddf2d70dd
@@ -0,0 +1,517 @@
+/* PurpleWrapper - A .NET (CLR) wrapper for libpurple
+ *
+ * Purple is the legal property of its developers, whose names are too numerous
+ * to list here.  Please refer to the COPYRIGHT file distributed with this
+ * source distribution.
+ *
+ * This program 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.
+ *
+ * This program 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 this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02111-1301  USA
+ */
+
+/*
+ * This file was auto-generated from the libpurple header files to provide a
+ * clean interface between .NET/CLR and the unmanaged C library libpurple.
+ *
+ * This is the second major commit of the code.
+ * Next things:
+ *  - A few of the .h files have anonymous parameter names (eg: void cat(int, int).
+ *    This program will need to assign these parameters names.
+ *  - Function pointers inside structs aren't translated correctly into C#.
+ *  - Two places there are specific-length arrays (eg: char hostname[256]). The parser
+ *    does not detect them as an array.
+ */
+
+using System;
+using System.Collections.Generic;
+using System.Runtime.InteropServices;
+
+namespace PurpleWrapper
+{
+
+	/*
+	 * File: cipher.h
+	 * Structure: PurpleCipherOps
+	 */
+	public class PurpleCipherOps : UnmanagedWrapper<_PurpleCipherOps>
+	{
+		public PurpleCipherOps()
+		{
+		}
+
+		public PurpleCipherOps(IntPtr reference)
+		{
+			this.Reference = reference;
+			this.Data = (_PurpleCipherOps)Marshal.PtrToStructure(this.Reference, typeof(_PurpleCipherOps));
+		}
+
+		/*
+		 * Argument Name: set_option
+		 * Argument Type: void
+		 * Argument Category: Void
+		 */
+		public IntPtr set_option
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: get_option
+		 * Argument Type: void *
+		 * Argument Category: VoidPointer
+		 */
+		public IntPtr get_option
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: init
+		 * Argument Type: void
+		 * Argument Category: Void
+		 */
+		public IntPtr init
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: reset
+		 * Argument Type: void
+		 * Argument Category: Void
+		 */
+		public IntPtr reset
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: uninit
+		 * Argument Type: void
+		 * Argument Category: Void
+		 */
+		public IntPtr uninit
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: set_iv
+		 * Argument Type: void
+		 * Argument Category: Void
+		 */
+		public IntPtr set_iv
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: append
+		 * Argument Type: void
+		 * Argument Category: Void
+		 */
+		public IntPtr append
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: digest
+		 * Argument Type: gboolean
+		 * Argument Category: Native
+		 */
+		public IntPtr digest
+		{
+			get
+			{
+				return this.Data.digest;
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				this.Data.digest = value;
+			}
+		}
+
+		/*
+		 * Argument Name: encrypt
+		 * Argument Type: int
+		 * Argument Category: Native
+		 */
+		public IntPtr encrypt
+		{
+			get
+			{
+				return this.Data.encrypt;
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				this.Data.encrypt = value;
+			}
+		}
+
+		/*
+		 * Argument Name: decrypt
+		 * Argument Type: int
+		 * Argument Category: Native
+		 */
+		public IntPtr decrypt
+		{
+			get
+			{
+				return this.Data.decrypt;
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				this.Data.decrypt = value;
+			}
+		}
+
+		/*
+		 * Argument Name: set_salt
+		 * Argument Type: void
+		 * Argument Category: Void
+		 */
+		public IntPtr set_salt
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: get_salt_size
+		 * Argument Type: size_t
+		 * Argument Category: Native
+		 */
+		public IntPtr get_salt_size
+		{
+			get
+			{
+				return this.Data.get_salt_size;
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				this.Data.get_salt_size = value;
+			}
+		}
+
+		/*
+		 * Argument Name: set_key
+		 * Argument Type: void
+		 * Argument Category: Void
+		 */
+		public IntPtr set_key
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: get_key_size
+		 * Argument Type: size_t
+		 * Argument Category: Native
+		 */
+		public IntPtr get_key_size
+		{
+			get
+			{
+				return this.Data.get_key_size;
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				this.Data.get_key_size = value;
+			}
+		}
+
+		/*
+		 * Argument Name: set_batch_mode
+		 * Argument Type: void
+		 * Argument Category: Void
+		 */
+		public IntPtr set_batch_mode
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: get_batch_mode
+		 * Argument Type: PurpleCipherBatchMode
+		 * Argument Category: KnownEnum
+		 */
+		public IntPtr get_batch_mode
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: get_block_size
+		 * Argument Type: size_t
+		 * Argument Category: Native
+		 */
+		public IntPtr get_block_size
+		{
+			get
+			{
+				return this.Data.get_block_size;
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				this.Data.get_block_size = value;
+			}
+		}
+
+		/*
+		 * Argument Name: set_key_with_len
+		 * Argument Type: void
+		 * Argument Category: Void
+		 */
+		public IntPtr set_key_with_len
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+	}
+
+
+	[StructLayout(LayoutKind.Sequential)]
+	public class _PurpleCipherOps
+	{
+		/*
+		 * void (*set_option)(PurpleCipherContext * context, gchar * name, void * value)
+		 */
+		public IntPtr set_option;
+
+		/*
+		 * void * (*get_option)(PurpleCipherContext * context, gchar * name)
+		 */
+		public IntPtr get_option;
+
+		/*
+		 * void (*init)(PurpleCipherContext * context, void * extra)
+		 */
+		public IntPtr init;
+
+		/*
+		 * void (*reset)(PurpleCipherContext * context, void * extra)
+		 */
+		public IntPtr reset;
+
+		/*
+		 * void (*uninit)(PurpleCipherContext * context)
+		 */
+		public IntPtr uninit;
+
+		/*
+		 * void (*set_iv)(PurpleCipherContext * context, guchar * iv, size_t len)
+		 */
+		public IntPtr set_iv;
+
+		/*
+		 * void (*append)(PurpleCipherContext * context, guchar * data, size_t len)
+		 */
+		public IntPtr append;
+
+		/*
+		 * gboolean (*digest)(PurpleCipherContext * context, size_t in_len, guchar digest[], size_t * out_len)
+		 */
+		public IntPtr digest;
+
+		/*
+		 * int (*encrypt)(PurpleCipherContext * context, guchar data[], size_t len, guchar output[], size_t * outlen)
+		 */
+		public IntPtr encrypt;
+
+		/*
+		 * int (*decrypt)(PurpleCipherContext * context, guchar data[], size_t len, guchar output[], size_t * outlen)
+		 */
+		public IntPtr decrypt;
+
+		/*
+		 * void (*set_salt)(PurpleCipherContext * context, guchar * salt)
+		 */
+		public IntPtr set_salt;
+
+		/*
+		 * size_t (*get_salt_size)(PurpleCipherContext * context)
+		 */
+		public IntPtr get_salt_size;
+
+		/*
+		 * void (*set_key)(PurpleCipherContext * context, guchar * key)
+		 */
+		public IntPtr set_key;
+
+		/*
+		 * size_t (*get_key_size)(PurpleCipherContext * context)
+		 */
+		public IntPtr get_key_size;
+
+		/*
+		 * void (*set_batch_mode)(PurpleCipherContext * context, PurpleCipherBatchMode mode)
+		 */
+		public IntPtr set_batch_mode;
+
+		/*
+		 * PurpleCipherBatchMode (*get_batch_mode)(PurpleCipherContext * context)
+		 */
+		public IntPtr get_batch_mode;
+
+		/*
+		 * size_t (*get_block_size)(PurpleCipherContext * context)
+		 */
+		public IntPtr get_block_size;
+
+		/*
+		 * void (*set_key_with_len)(PurpleCipherContext * context, guchar * key, size_t len)
+		 */
+		public IntPtr set_key_with_len;
+
+	}
+
+}
+
============================================================
--- libpurple/wrapper/PurpleCircBuffer.cs	5c6f6f1f40ee9a090dfdd7c25fd68fb9ddd728b9
+++ libpurple/wrapper/PurpleCircBuffer.cs	5c6f6f1f40ee9a090dfdd7c25fd68fb9ddd728b9
@@ -0,0 +1,217 @@
+/* PurpleWrapper - A .NET (CLR) wrapper for libpurple
+ *
+ * Purple is the legal property of its developers, whose names are too numerous
+ * to list here.  Please refer to the COPYRIGHT file distributed with this
+ * source distribution.
+ *
+ * This program 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.
+ *
+ * This program 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 this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02111-1301  USA
+ */
+
+/*
+ * This file was auto-generated from the libpurple header files to provide a
+ * clean interface between .NET/CLR and the unmanaged C library libpurple.
+ *
+ * This is the second major commit of the code.
+ * Next things:
+ *  - A few of the .h files have anonymous parameter names (eg: void cat(int, int).
+ *    This program will need to assign these parameters names.
+ *  - Function pointers inside structs aren't translated correctly into C#.
+ *  - Two places there are specific-length arrays (eg: char hostname[256]). The parser
+ *    does not detect them as an array.
+ */
+
+using System;
+using System.Collections.Generic;
+using System.Runtime.InteropServices;
+
+namespace PurpleWrapper
+{
+
+	/*
+	 * File: circbuffer.h
+	 * Structure: PurpleCircBuffer
+	 */
+	public class PurpleCircBuffer : UnmanagedWrapper<_PurpleCircBuffer>
+	{
+		public PurpleCircBuffer()
+		{
+		}
+
+		public PurpleCircBuffer(IntPtr reference)
+		{
+			this.Reference = reference;
+			this.Data = (_PurpleCircBuffer)Marshal.PtrToStructure(this.Reference, typeof(_PurpleCircBuffer));
+		}
+
+		/*
+		 * Argument Name: buffer
+		 * Argument Type: gchar *
+		 * Argument Category: Native
+		 */
+		public string buffer
+		{
+			get
+			{
+				return this.Data.buffer;
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				this.Data.buffer = value;
+			}
+		}
+
+		/*
+		 * Argument Name: growsize
+		 * Argument Type: gsize
+		 * Argument Category: Native
+		 */
+		public ulong growsize
+		{
+			get
+			{
+				return this.Data.growsize;
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				this.Data.growsize = value;
+			}
+		}
+
+		/*
+		 * Argument Name: buflen
+		 * Argument Type: gsize
+		 * Argument Category: Native
+		 */
+		public ulong buflen
+		{
+			get
+			{
+				return this.Data.buflen;
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				this.Data.buflen = value;
+			}
+		}
+
+		/*
+		 * Argument Name: bufused
+		 * Argument Type: gsize
+		 * Argument Category: Native
+		 */
+		public ulong bufused
+		{
+			get
+			{
+				return this.Data.bufused;
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				this.Data.bufused = value;
+			}
+		}
+
+		/*
+		 * Argument Name: inptr
+		 * Argument Type: gchar *
+		 * Argument Category: Native
+		 */
+		public string inptr
+		{
+			get
+			{
+				return this.Data.inptr;
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				this.Data.inptr = value;
+			}
+		}
+
+		/*
+		 * Argument Name: outptr
+		 * Argument Type: gchar *
+		 * Argument Category: Native
+		 */
+		public string outptr
+		{
+			get
+			{
+				return this.Data.outptr;
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				this.Data.outptr = value;
+			}
+		}
+
+	}
+
+
+	[StructLayout(LayoutKind.Sequential)]
+	public class _PurpleCircBuffer
+	{
+		/*
+		 * gchar * buffer
+		 */
+		public string buffer;
+
+		/*
+		 * gsize growsize
+		 */
+		public ulong growsize;
+
+		/*
+		 * gsize buflen
+		 */
+		public ulong buflen;
+
+		/*
+		 * gsize bufused
+		 */
+		public ulong bufused;
+
+		/*
+		 * gchar * inptr
+		 */
+		public string inptr;
+
+		/*
+		 * gchar * outptr
+		 */
+		public string outptr;
+
+	}
+
+}
+
============================================================
--- libpurple/wrapper/PurpleClient.cs	378a383b6cfd1ec7ba221ff96e0b3cb432a61c70
+++ libpurple/wrapper/PurpleClient.cs	378a383b6cfd1ec7ba221ff96e0b3cb432a61c70
@@ -0,0 +1,67 @@
+/* PurpleWrapper - A .NET (CLR) wrapper for libpurple
+ *
+ * Purple is the legal property of its developers, whose names are too numerous
+ * to list here.  Please refer to the COPYRIGHT file distributed with this
+ * source distribution.
+ *
+ * This program 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.
+ *
+ * This program 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 this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02111-1301  USA
+ */
+
+/*
+ * This file was auto-generated from the libpurple header files to provide a
+ * clean interface between .NET/CLR and the unmanaged C library libpurple.
+ *
+ * This is the second major commit of the code.
+ * Next things:
+ *  - A few of the .h files have anonymous parameter names (eg: void cat(int, int).
+ *    This program will need to assign these parameters names.
+ *  - Function pointers inside structs aren't translated correctly into C#.
+ *  - Two places there are specific-length arrays (eg: char hostname[256]). The parser
+ *    does not detect them as an array.
+ */
+
+using System;
+using System.Collections.Generic;
+using System.Runtime.InteropServices;
+
+namespace PurpleWrapper
+{
+
+	/*
+	 * File: purple-client.h
+	 */
+	public class PurpleClient
+	{
+
+		/*
+		 * Function Name: purple_init
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_init()
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_init();
+
+		public static void Init()
+		{
+			purple_init();
+		}
+
+	}
+}
+
============================================================
--- libpurple/wrapper/PurpleConnection.cs	a8fe0dc9574fda9e65ce0d580ed12346f46b3053
+++ libpurple/wrapper/PurpleConnection.cs	a8fe0dc9574fda9e65ce0d580ed12346f46b3053
@@ -0,0 +1,382 @@
+/* PurpleWrapper - A .NET (CLR) wrapper for libpurple
+ *
+ * Purple is the legal property of its developers, whose names are too numerous
+ * to list here.  Please refer to the COPYRIGHT file distributed with this
+ * source distribution.
+ *
+ * This program 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.
+ *
+ * This program 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 this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02111-1301  USA
+ */
+
+/*
+ * This file was auto-generated from the libpurple header files to provide a
+ * clean interface between .NET/CLR and the unmanaged C library libpurple.
+ *
+ * This is the second major commit of the code.
+ * Next things:
+ *  - A few of the .h files have anonymous parameter names (eg: void cat(int, int).
+ *    This program will need to assign these parameters names.
+ *  - Function pointers inside structs aren't translated correctly into C#.
+ *  - Two places there are specific-length arrays (eg: char hostname[256]). The parser
+ *    does not detect them as an array.
+ */
+
+using System;
+using System.Collections.Generic;
+using System.Runtime.InteropServices;
+
+namespace PurpleWrapper
+{
+
+	/*
+	 * File: connection.h
+	 * Structure: PurpleConnection
+	 */
+	public class PurpleConnection : UnmanagedWrapper<_PurpleConnection>
+	{
+		public PurpleConnection()
+		{
+		}
+
+		public PurpleConnection(IntPtr reference)
+		{
+			this.Reference = reference;
+			this.Data = (_PurpleConnection)Marshal.PtrToStructure(this.Reference, typeof(_PurpleConnection));
+		}
+
+		/*
+		 * Argument Name: prpl
+		 * Argument Type: PurplePlugin *
+		 * Argument Category: PointerToKnownStruct
+		 */
+		public PurplePlugin prpl
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: flags
+		 * Argument Type: PurpleConnectionFlags
+		 * Argument Category: KnownEnum
+		 */
+		public Connection.PurpleConnectionFlags flags
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: state
+		 * Argument Type: PurpleConnectionState
+		 * Argument Category: KnownEnum
+		 */
+		public Connection.PurpleConnectionState state
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: account
+		 * Argument Type: PurpleAccount *
+		 * Argument Category: PointerToKnownStruct
+		 */
+		public PurpleAccount account
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: password
+		 * Argument Type: char *
+		 * Argument Category: Native
+		 */
+		public string password
+		{
+			get
+			{
+				return this.Data.password;
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				this.Data.password = value;
+			}
+		}
+
+		/*
+		 * Argument Name: inpa
+		 * Argument Type: int
+		 * Argument Category: Native
+		 */
+		public int inpa
+		{
+			get
+			{
+				return this.Data.inpa;
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				this.Data.inpa = value;
+			}
+		}
+
+		/*
+		 * Argument Name: buddy_chats
+		 * Argument Type: GSList *
+		 * Argument Category: PointerToGSList
+		 */
+		/*
+		 * Could not generate a wrapper for PurpleConnection.buddy_chats in file "connection.h".
+		 * Message: Unable to provide a type for GSList as no function information was provided in code.
+		 */
+
+		/*
+		 * Argument Name: proto_data
+		 * Argument Type: void *
+		 * Argument Category: VoidPointer
+		 */
+		public IntPtr proto_data
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: display_name
+		 * Argument Type: char *
+		 * Argument Category: Native
+		 */
+		public string display_name
+		{
+			get
+			{
+				return this.Data.display_name;
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				this.Data.display_name = value;
+			}
+		}
+
+		/*
+		 * Argument Name: keepalive
+		 * Argument Type: guint
+		 * Argument Category: Native
+		 */
+		public uint keepalive
+		{
+			get
+			{
+				return this.Data.keepalive;
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				this.Data.keepalive = value;
+			}
+		}
+
+		/*
+		 * Argument Name: wants_to_die
+		 * Argument Type: gboolean
+		 * Argument Category: Native
+		 */
+		public bool wants_to_die
+		{
+			get
+			{
+				return this.Data.wants_to_die;
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				this.Data.wants_to_die = value;
+			}
+		}
+
+		/*
+		 * Argument Name: disconnect_timeout
+		 * Argument Type: guint
+		 * Argument Category: Native
+		 */
+		public uint disconnect_timeout
+		{
+			get
+			{
+				return this.Data.disconnect_timeout;
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				this.Data.disconnect_timeout = value;
+			}
+		}
+
+		/*
+		 * Argument Name: last_received
+		 * Argument Type: time_t
+		 * Argument Category: DateTime
+		 */
+		public DateTime last_received
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+	}
+
+
+	[StructLayout(LayoutKind.Sequential)]
+	public class _PurpleConnection
+	{
+		/*
+		 * PurplePlugin * prpl
+		 */
+		public IntPtr prpl;
+
+		/*
+		 * PurpleConnectionFlags flags
+		 */
+		public Connection.PurpleConnectionFlags flags;
+
+		/*
+		 * PurpleConnectionState state
+		 */
+		public Connection.PurpleConnectionState state;
+
+		/*
+		 * PurpleAccount * account
+		 */
+		public IntPtr account;
+
+		/*
+		 * char * password
+		 */
+		public string password;
+
+		/*
+		 * int inpa
+		 */
+		public int inpa;
+
+		/*
+		 * GSList * buddy_chats
+		 */
+		public IntPtr buddy_chats;
+
+		/*
+		 * void * proto_data
+		 */
+		public IntPtr proto_data;
+
+		/*
+		 * char * display_name
+		 */
+		public string display_name;
+
+		/*
+		 * guint keepalive
+		 */
+		public uint keepalive;
+
+		/*
+		 * gboolean wants_to_die
+		 */
+		public bool wants_to_die;
+
+		/*
+		 * guint disconnect_timeout
+		 */
+		public uint disconnect_timeout;
+
+		/*
+		 * time_t last_received
+		 */
+		public ulong last_received;
+
+	}
+
+}
+
============================================================
--- libpurple/wrapper/PurpleContact.cs	e6c1bde12e225fb3fb721ed175a615023b31bb47
+++ libpurple/wrapper/PurpleContact.cs	e6c1bde12e225fb3fb721ed175a615023b31bb47
@@ -0,0 +1,235 @@
+/* PurpleWrapper - A .NET (CLR) wrapper for libpurple
+ *
+ * Purple is the legal property of its developers, whose names are too numerous
+ * to list here.  Please refer to the COPYRIGHT file distributed with this
+ * source distribution.
+ *
+ * This program 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.
+ *
+ * This program 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 this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02111-1301  USA
+ */
+
+/*
+ * This file was auto-generated from the libpurple header files to provide a
+ * clean interface between .NET/CLR and the unmanaged C library libpurple.
+ *
+ * This is the second major commit of the code.
+ * Next things:
+ *  - A few of the .h files have anonymous parameter names (eg: void cat(int, int).
+ *    This program will need to assign these parameters names.
+ *  - Function pointers inside structs aren't translated correctly into C#.
+ *  - Two places there are specific-length arrays (eg: char hostname[256]). The parser
+ *    does not detect them as an array.
+ */
+
+using System;
+using System.Collections.Generic;
+using System.Runtime.InteropServices;
+
+namespace PurpleWrapper
+{
+
+	/*
+	 * File: blist.h
+	 * Structure: PurpleContact
+	 */
+	public class PurpleContact : UnmanagedWrapper<_PurpleContact>
+	{
+		public PurpleContact()
+		{
+		}
+
+		public PurpleContact(IntPtr reference)
+		{
+			this.Reference = reference;
+			this.Data = (_PurpleContact)Marshal.PtrToStructure(this.Reference, typeof(_PurpleContact));
+		}
+
+		/*
+		 * Argument Name: node
+		 * Argument Type: PurpleBlistNode
+		 * Argument Category: KnownStruct
+		 */
+		/*
+		 * Could not generate a wrapper for PurpleContact.node in file "blist.h".
+		 * Message: The struct contains an object that resolves to a function that is not a function pointer (PurpleBlistNode node).
+		 */
+
+		/*
+		 * Argument Name: alias
+		 * Argument Type: char *
+		 * Argument Category: Native
+		 */
+		public string alias
+		{
+			get
+			{
+				return this.Data.alias;
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				this.Data.alias = value;
+			}
+		}
+
+		/*
+		 * Argument Name: totalsize
+		 * Argument Type: int
+		 * Argument Category: Native
+		 */
+		public int totalsize
+		{
+			get
+			{
+				return this.Data.totalsize;
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				this.Data.totalsize = value;
+			}
+		}
+
+		/*
+		 * Argument Name: currentsize
+		 * Argument Type: int
+		 * Argument Category: Native
+		 */
+		public int currentsize
+		{
+			get
+			{
+				return this.Data.currentsize;
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				this.Data.currentsize = value;
+			}
+		}
+
+		/*
+		 * Argument Name: online
+		 * Argument Type: int
+		 * Argument Category: Native
+		 */
+		public int online
+		{
+			get
+			{
+				return this.Data.online;
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				this.Data.online = value;
+			}
+		}
+
+		/*
+		 * Argument Name: priority
+		 * Argument Type: PurpleBuddy *
+		 * Argument Category: PointerToKnownStruct
+		 */
+		public PurpleBuddy priority
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: priority_valid
+		 * Argument Type: gboolean
+		 * Argument Category: Native
+		 */
+		public bool priority_valid
+		{
+			get
+			{
+				return this.Data.priority_valid;
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				this.Data.priority_valid = value;
+			}
+		}
+
+	}
+
+
+	[StructLayout(LayoutKind.Sequential)]
+	public class _PurpleContact
+	{
+		/*
+		 * PurpleBlistNode node
+		 */
+		/*
+		 * Could not generate a wrapper for PurpleContact.node in file "blist.h".
+		 * Message: The struct contains an object that resolves to a function that is not a function pointer (PurpleBlistNode node).
+		 */
+
+		/*
+		 * char * alias
+		 */
+		public string alias;
+
+		/*
+		 * int totalsize
+		 */
+		public int totalsize;
+
+		/*
+		 * int currentsize
+		 */
+		public int currentsize;
+
+		/*
+		 * int online
+		 */
+		public int online;
+
+		/*
+		 * PurpleBuddy * priority
+		 */
+		public IntPtr priority;
+
+		/*
+		 * gboolean priority_valid
+		 */
+		public bool priority_valid;
+
+	}
+
+}
+
============================================================
--- libpurple/wrapper/PurpleConvChat.cs	6c9eb1aba2d75abba2142f895db04c77528842e3
+++ libpurple/wrapper/PurpleConvChat.cs	6c9eb1aba2d75abba2142f895db04c77528842e3
@@ -0,0 +1,247 @@
+/* PurpleWrapper - A .NET (CLR) wrapper for libpurple
+ *
+ * Purple is the legal property of its developers, whose names are too numerous
+ * to list here.  Please refer to the COPYRIGHT file distributed with this
+ * source distribution.
+ *
+ * This program 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.
+ *
+ * This program 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 this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02111-1301  USA
+ */
+
+/*
+ * This file was auto-generated from the libpurple header files to provide a
+ * clean interface between .NET/CLR and the unmanaged C library libpurple.
+ *
+ * This is the second major commit of the code.
+ * Next things:
+ *  - A few of the .h files have anonymous parameter names (eg: void cat(int, int).
+ *    This program will need to assign these parameters names.
+ *  - Function pointers inside structs aren't translated correctly into C#.
+ *  - Two places there are specific-length arrays (eg: char hostname[256]). The parser
+ *    does not detect them as an array.
+ */
+
+using System;
+using System.Collections.Generic;
+using System.Runtime.InteropServices;
+
+namespace PurpleWrapper
+{
+
+	/*
+	 * File: conversation.h
+	 * Structure: PurpleConvChat
+	 */
+	public class PurpleConvChat : UnmanagedWrapper<_PurpleConvChat>
+	{
+		public PurpleConvChat()
+		{
+		}
+
+		public PurpleConvChat(IntPtr reference)
+		{
+			this.Reference = reference;
+			this.Data = (_PurpleConvChat)Marshal.PtrToStructure(this.Reference, typeof(_PurpleConvChat));
+		}
+
+		/*
+		 * Argument Name: conv
+		 * Argument Type: PurpleConversation *
+		 * Argument Category: PointerToKnownStruct
+		 */
+		public PurpleConversation conv
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: in_room
+		 * Argument Type: GList *
+		 * Argument Category: PointerToGList
+		 */
+		/*
+		 * Could not generate a wrapper for PurpleConvChat.in_room in file "conversation.h".
+		 * Message: Unable to provide a type for GList as no function information was provided in code.
+		 */
+
+		/*
+		 * Argument Name: ignored
+		 * Argument Type: GList *
+		 * Argument Category: PointerToGList
+		 */
+		/*
+		 * Could not generate a wrapper for PurpleConvChat.ignored in file "conversation.h".
+		 * Message: Unable to provide a type for GList as no function information was provided in code.
+		 */
+
+		/*
+		 * Argument Name: who
+		 * Argument Type: char  *
+		 * Argument Category: PointerToUnknownStruct
+		 */
+		public /* Resolved as PointerToUnknownStruct to char */ IntPtr who
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: topic
+		 * Argument Type: char  *
+		 * Argument Category: PointerToUnknownStruct
+		 */
+		public /* Resolved as PointerToUnknownStruct to char */ IntPtr topic
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: id
+		 * Argument Type: int
+		 * Argument Category: Native
+		 */
+		public int id
+		{
+			get
+			{
+				return this.Data.id;
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				this.Data.id = value;
+			}
+		}
+
+		/*
+		 * Argument Name: nick
+		 * Argument Type: char *
+		 * Argument Category: Native
+		 */
+		public string nick
+		{
+			get
+			{
+				return this.Data.nick;
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				this.Data.nick = value;
+			}
+		}
+
+		/*
+		 * Argument Name: left
+		 * Argument Type: gboolean
+		 * Argument Category: Native
+		 */
+		public bool left
+		{
+			get
+			{
+				return this.Data.left;
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				this.Data.left = value;
+			}
+		}
+
+	}
+
+
+	[StructLayout(LayoutKind.Sequential)]
+	public class _PurpleConvChat
+	{
+		/*
+		 * PurpleConversation * conv
+		 */
+		public IntPtr conv;
+
+		/*
+		 * GList * in_room
+		 */
+		public IntPtr in_room;
+
+		/*
+		 * GList * ignored
+		 */
+		public IntPtr ignored;
+
+		/*
+		 * char  * who
+		 */
+		public IntPtr who;
+
+		/*
+		 * char  * topic
+		 */
+		public IntPtr topic;
+
+		/*
+		 * int id
+		 */
+		public int id;
+
+		/*
+		 * char * nick
+		 */
+		public string nick;
+
+		/*
+		 * gboolean left
+		 */
+		public bool left;
+
+	}
+
+}
+
============================================================
--- libpurple/wrapper/PurpleConvChatBuddy.cs	a70c61b3667a595fa30e0468d462b94f3707bf80
+++ libpurple/wrapper/PurpleConvChatBuddy.cs	a70c61b3667a595fa30e0468d462b94f3707bf80
@@ -0,0 +1,192 @@
+/* PurpleWrapper - A .NET (CLR) wrapper for libpurple
+ *
+ * Purple is the legal property of its developers, whose names are too numerous
+ * to list here.  Please refer to the COPYRIGHT file distributed with this
+ * source distribution.
+ *
+ * This program 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.
+ *
+ * This program 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 this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02111-1301  USA
+ */
+
+/*
+ * This file was auto-generated from the libpurple header files to provide a
+ * clean interface between .NET/CLR and the unmanaged C library libpurple.
+ *
+ * This is the second major commit of the code.
+ * Next things:
+ *  - A few of the .h files have anonymous parameter names (eg: void cat(int, int).
+ *    This program will need to assign these parameters names.
+ *  - Function pointers inside structs aren't translated correctly into C#.
+ *  - Two places there are specific-length arrays (eg: char hostname[256]). The parser
+ *    does not detect them as an array.
+ */
+
+using System;
+using System.Collections.Generic;
+using System.Runtime.InteropServices;
+
+namespace PurpleWrapper
+{
+
+	/*
+	 * File: conversation.h
+	 * Structure: PurpleConvChatBuddy
+	 */
+	public class PurpleConvChatBuddy : UnmanagedWrapper<_PurpleConvChatBuddy>
+	{
+		public PurpleConvChatBuddy()
+		{
+		}
+
+		public PurpleConvChatBuddy(IntPtr reference)
+		{
+			this.Reference = reference;
+			this.Data = (_PurpleConvChatBuddy)Marshal.PtrToStructure(this.Reference, typeof(_PurpleConvChatBuddy));
+		}
+
+		/*
+		 * Argument Name: name
+		 * Argument Type: char *
+		 * Argument Category: Native
+		 */
+		public string name
+		{
+			get
+			{
+				return this.Data.name;
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				this.Data.name = value;
+			}
+		}
+
+		/*
+		 * Argument Name: alias
+		 * Argument Type: char *
+		 * Argument Category: Native
+		 */
+		public string alias
+		{
+			get
+			{
+				return this.Data.alias;
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				this.Data.alias = value;
+			}
+		}
+
+		/*
+		 * Argument Name: alias_key
+		 * Argument Type: char *
+		 * Argument Category: Native
+		 */
+		public string alias_key
+		{
+			get
+			{
+				return this.Data.alias_key;
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				this.Data.alias_key = value;
+			}
+		}
+
+		/*
+		 * Argument Name: buddy
+		 * Argument Type: gboolean
+		 * Argument Category: Native
+		 */
+		public bool buddy
+		{
+			get
+			{
+				return this.Data.buddy;
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				this.Data.buddy = value;
+			}
+		}
+
+		/*
+		 * Argument Name: flags
+		 * Argument Type: PurpleConvChatBuddyFlags
+		 * Argument Category: KnownEnum
+		 */
+		public Conversation.PurpleConvChatBuddyFlags flags
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+	}
+
+
+	[StructLayout(LayoutKind.Sequential)]
+	public class _PurpleConvChatBuddy
+	{
+		/*
+		 * char * name
+		 */
+		public string name;
+
+		/*
+		 * char * alias
+		 */
+		public string alias;
+
+		/*
+		 * char * alias_key
+		 */
+		public string alias_key;
+
+		/*
+		 * gboolean buddy
+		 */
+		public bool buddy;
+
+		/*
+		 * PurpleConvChatBuddyFlags flags
+		 */
+		public Conversation.PurpleConvChatBuddyFlags flags;
+
+	}
+
+}
+
============================================================
--- libpurple/wrapper/PurpleConvIm.cs	841f60f7bc4a161f808f8fbd52c8ff78312fbec4
+++ libpurple/wrapper/PurpleConvIm.cs	841f60f7bc4a161f808f8fbd52c8ff78312fbec4
@@ -0,0 +1,217 @@
+/* PurpleWrapper - A .NET (CLR) wrapper for libpurple
+ *
+ * Purple is the legal property of its developers, whose names are too numerous
+ * to list here.  Please refer to the COPYRIGHT file distributed with this
+ * source distribution.
+ *
+ * This program 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.
+ *
+ * This program 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 this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02111-1301  USA
+ */
+
+/*
+ * This file was auto-generated from the libpurple header files to provide a
+ * clean interface between .NET/CLR and the unmanaged C library libpurple.
+ *
+ * This is the second major commit of the code.
+ * Next things:
+ *  - A few of the .h files have anonymous parameter names (eg: void cat(int, int).
+ *    This program will need to assign these parameters names.
+ *  - Function pointers inside structs aren't translated correctly into C#.
+ *  - Two places there are specific-length arrays (eg: char hostname[256]). The parser
+ *    does not detect them as an array.
+ */
+
+using System;
+using System.Collections.Generic;
+using System.Runtime.InteropServices;
+
+namespace PurpleWrapper
+{
+
+	/*
+	 * File: conversation.h
+	 * Structure: PurpleConvIm
+	 */
+	public class PurpleConvIm : UnmanagedWrapper<_PurpleConvIm>
+	{
+		public PurpleConvIm()
+		{
+		}
+
+		public PurpleConvIm(IntPtr reference)
+		{
+			this.Reference = reference;
+			this.Data = (_PurpleConvIm)Marshal.PtrToStructure(this.Reference, typeof(_PurpleConvIm));
+		}
+
+		/*
+		 * Argument Name: conv
+		 * Argument Type: PurpleConversation *
+		 * Argument Category: PointerToKnownStruct
+		 */
+		public PurpleConversation conv
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: typing_state
+		 * Argument Type: PurpleTypingState
+		 * Argument Category: KnownEnum
+		 */
+		public Conversation.PurpleTypingState typing_state
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: typing_timeout
+		 * Argument Type: guint
+		 * Argument Category: Native
+		 */
+		public uint typing_timeout
+		{
+			get
+			{
+				return this.Data.typing_timeout;
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				this.Data.typing_timeout = value;
+			}
+		}
+
+		/*
+		 * Argument Name: type_again
+		 * Argument Type: time_t
+		 * Argument Category: DateTime
+		 */
+		public DateTime type_again
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: send_typed_timeout
+		 * Argument Type: guint
+		 * Argument Category: Native
+		 */
+		public uint send_typed_timeout
+		{
+			get
+			{
+				return this.Data.send_typed_timeout;
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				this.Data.send_typed_timeout = value;
+			}
+		}
+
+		/*
+		 * Argument Name: icon
+		 * Argument Type: PurpleBuddyIcon *
+		 * Argument Category: PointerToUnknownStruct
+		 */
+		public /* Resolved as PointerToUnknownStruct to PurpleBuddyIcon */ IntPtr icon
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+	}
+
+
+	[StructLayout(LayoutKind.Sequential)]
+	public class _PurpleConvIm
+	{
+		/*
+		 * PurpleConversation * conv
+		 */
+		public IntPtr conv;
+
+		/*
+		 * PurpleTypingState typing_state
+		 */
+		public Conversation.PurpleTypingState typing_state;
+
+		/*
+		 * guint typing_timeout
+		 */
+		public uint typing_timeout;
+
+		/*
+		 * time_t type_again
+		 */
+		public ulong type_again;
+
+		/*
+		 * guint send_typed_timeout
+		 */
+		public uint send_typed_timeout;
+
+		/*
+		 * PurpleBuddyIcon * icon
+		 */
+		public IntPtr icon;
+
+	}
+
+}
+
============================================================
--- libpurple/wrapper/PurpleConvMessage.cs	b7b894d07dc0b25daa902a80f73f276f25e6513d
+++ libpurple/wrapper/PurpleConvMessage.cs	b7b894d07dc0b25daa902a80f73f276f25e6513d
@@ -0,0 +1,217 @@
+/* PurpleWrapper - A .NET (CLR) wrapper for libpurple
+ *
+ * Purple is the legal property of its developers, whose names are too numerous
+ * to list here.  Please refer to the COPYRIGHT file distributed with this
+ * source distribution.
+ *
+ * This program 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.
+ *
+ * This program 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 this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02111-1301  USA
+ */
+
+/*
+ * This file was auto-generated from the libpurple header files to provide a
+ * clean interface between .NET/CLR and the unmanaged C library libpurple.
+ *
+ * This is the second major commit of the code.
+ * Next things:
+ *  - A few of the .h files have anonymous parameter names (eg: void cat(int, int).
+ *    This program will need to assign these parameters names.
+ *  - Function pointers inside structs aren't translated correctly into C#.
+ *  - Two places there are specific-length arrays (eg: char hostname[256]). The parser
+ *    does not detect them as an array.
+ */
+
+using System;
+using System.Collections.Generic;
+using System.Runtime.InteropServices;
+
+namespace PurpleWrapper
+{
+
+	/*
+	 * File: conversation.h
+	 * Structure: PurpleConvMessage
+	 */
+	public class PurpleConvMessage : UnmanagedWrapper<_PurpleConvMessage>
+	{
+		public PurpleConvMessage()
+		{
+		}
+
+		public PurpleConvMessage(IntPtr reference)
+		{
+			this.Reference = reference;
+			this.Data = (_PurpleConvMessage)Marshal.PtrToStructure(this.Reference, typeof(_PurpleConvMessage));
+		}
+
+		/*
+		 * Argument Name: who
+		 * Argument Type: char *
+		 * Argument Category: Native
+		 */
+		public string who
+		{
+			get
+			{
+				return this.Data.who;
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				this.Data.who = value;
+			}
+		}
+
+		/*
+		 * Argument Name: what
+		 * Argument Type: char *
+		 * Argument Category: Native
+		 */
+		public string what
+		{
+			get
+			{
+				return this.Data.what;
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				this.Data.what = value;
+			}
+		}
+
+		/*
+		 * Argument Name: flags
+		 * Argument Type: PurpleMessageFlags
+		 * Argument Category: KnownEnum
+		 */
+		public Conversation.PurpleMessageFlags flags
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: when
+		 * Argument Type: time_t
+		 * Argument Category: DateTime
+		 */
+		public DateTime when
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: conv
+		 * Argument Type: PurpleConversation *
+		 * Argument Category: PointerToKnownStruct
+		 */
+		public PurpleConversation conv
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: alias
+		 * Argument Type: char *
+		 * Argument Category: Native
+		 */
+		public string alias
+		{
+			get
+			{
+				return this.Data.alias;
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				this.Data.alias = value;
+			}
+		}
+
+	}
+
+
+	[StructLayout(LayoutKind.Sequential)]
+	public class _PurpleConvMessage
+	{
+		/*
+		 * char * who
+		 */
+		public string who;
+
+		/*
+		 * char * what
+		 */
+		public string what;
+
+		/*
+		 * PurpleMessageFlags flags
+		 */
+		public Conversation.PurpleMessageFlags flags;
+
+		/*
+		 * time_t when
+		 */
+		public ulong when;
+
+		/*
+		 * PurpleConversation * conv
+		 */
+		public IntPtr conv;
+
+		/*
+		 * char * alias
+		 */
+		public string alias;
+
+	}
+
+}
+
============================================================
--- libpurple/wrapper/PurpleConversation.cs	8a00b4fca90be368184fda439042d0ccbb29566b
+++ libpurple/wrapper/PurpleConversation.cs	8a00b4fca90be368184fda439042d0ccbb29566b
@@ -0,0 +1,279 @@
+/* PurpleWrapper - A .NET (CLR) wrapper for libpurple
+ *
+ * Purple is the legal property of its developers, whose names are too numerous
+ * to list here.  Please refer to the COPYRIGHT file distributed with this
+ * source distribution.
+ *
+ * This program 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.
+ *
+ * This program 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 this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02111-1301  USA
+ */
+
+/*
+ * This file was auto-generated from the libpurple header files to provide a
+ * clean interface between .NET/CLR and the unmanaged C library libpurple.
+ *
+ * This is the second major commit of the code.
+ * Next things:
+ *  - A few of the .h files have anonymous parameter names (eg: void cat(int, int).
+ *    This program will need to assign these parameters names.
+ *  - Function pointers inside structs aren't translated correctly into C#.
+ *  - Two places there are specific-length arrays (eg: char hostname[256]). The parser
+ *    does not detect them as an array.
+ */
+
+using System;
+using System.Collections.Generic;
+using System.Runtime.InteropServices;
+
+namespace PurpleWrapper
+{
+
+	/*
+	 * File: conversation.h
+	 * Structure: PurpleConversation
+	 */
+	public class PurpleConversation : UnmanagedWrapper<_PurpleConversation>
+	{
+		public PurpleConversation()
+		{
+		}
+
+		public PurpleConversation(IntPtr reference)
+		{
+			this.Reference = reference;
+			this.Data = (_PurpleConversation)Marshal.PtrToStructure(this.Reference, typeof(_PurpleConversation));
+		}
+
+		/*
+		 * Argument Name: type
+		 * Argument Type: PurpleConversationType
+		 * Argument Category: KnownEnum
+		 */
+		public Conversation.PurpleConversationType type
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: account
+		 * Argument Type: PurpleAccount *
+		 * Argument Category: PointerToKnownStruct
+		 */
+		public PurpleAccount account
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: name
+		 * Argument Type: char *
+		 * Argument Category: Native
+		 */
+		public string name
+		{
+			get
+			{
+				return this.Data.name;
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				this.Data.name = value;
+			}
+		}
+
+		/*
+		 * Argument Name: title
+		 * Argument Type: char *
+		 * Argument Category: Native
+		 */
+		public string title
+		{
+			get
+			{
+				return this.Data.title;
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				this.Data.title = value;
+			}
+		}
+
+		/*
+		 * Argument Name: logging
+		 * Argument Type: gboolean
+		 * Argument Category: Native
+		 */
+		public bool logging
+		{
+			get
+			{
+				return this.Data.logging;
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				this.Data.logging = value;
+			}
+		}
+
+		/*
+		 * Argument Name: logs
+		 * Argument Type: GList *
+		 * Argument Category: PointerToGList
+		 */
+		/*
+		 * Could not generate a wrapper for PurpleConversation.logs in file "conversation.h".
+		 * Message: Unable to provide a type for GList as no function information was provided in code.
+		 */
+
+		/*
+		 * Argument Name: {
+		PurpleConvIm   *im
+		 * Argument Type: union
+		 * Argument Category: InnerStruct
+		 */
+		/*
+		 * Could not generate a wrapper for PurpleConversation.{
+		PurpleConvIm   *im in file "conversation.h".
+		 * Message: The struct contains an inner-struct or inner-union and cannot be automatically wrapped.
+		 */
+
+		/*
+		 * Argument Name: chat
+		 * Argument Type: PurpleConvChat *
+		 * Argument Category: PointerToKnownStruct
+		 */
+		public PurpleConvChat chat
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: misc
+		 * Argument Type: void *
+		 * Argument Category: VoidPointer
+		 */
+		public IntPtr misc
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+	}
+
+
+	[StructLayout(LayoutKind.Sequential)]
+	public class _PurpleConversation
+	{
+		/*
+		 * PurpleConversationType type
+		 */
+		public Conversation.PurpleConversationType type;
+
+		/*
+		 * PurpleAccount * account
+		 */
+		public IntPtr account;
+
+		/*
+		 * char * name
+		 */
+		public string name;
+
+		/*
+		 * char * title
+		 */
+		public string title;
+
+		/*
+		 * gboolean logging
+		 */
+		public bool logging;
+
+		/*
+		 * GList * logs
+		 */
+		public IntPtr logs;
+
+		/*
+		 * union {
+		PurpleConvIm   *im
+		 */
+		/*
+		 * Could not generate a wrapper for PurpleConversation.{
+		PurpleConvIm   *im in file "conversation.h".
+		 * Message: The struct contains an inner-struct or inner-union and cannot be automatically wrapped.
+		 */
+
+		/*
+		 * PurpleConvChat * chat
+		 */
+		public IntPtr chat;
+
+		/*
+		 * void * misc
+		 */
+		public IntPtr misc;
+
+	}
+
+}
+
============================================================
--- libpurple/wrapper/PurpleConversationUiOps.cs	e9ce7305ad865b0caa177922753415a170d5ff77
+++ libpurple/wrapper/PurpleConversationUiOps.cs	e9ce7305ad865b0caa177922753415a170d5ff77
@@ -0,0 +1,542 @@
+/* PurpleWrapper - A .NET (CLR) wrapper for libpurple
+ *
+ * Purple is the legal property of its developers, whose names are too numerous
+ * to list here.  Please refer to the COPYRIGHT file distributed with this
+ * source distribution.
+ *
+ * This program 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.
+ *
+ * This program 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 this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02111-1301  USA
+ */
+
+/*
+ * This file was auto-generated from the libpurple header files to provide a
+ * clean interface between .NET/CLR and the unmanaged C library libpurple.
+ *
+ * This is the second major commit of the code.
+ * Next things:
+ *  - A few of the .h files have anonymous parameter names (eg: void cat(int, int).
+ *    This program will need to assign these parameters names.
+ *  - Function pointers inside structs aren't translated correctly into C#.
+ *  - Two places there are specific-length arrays (eg: char hostname[256]). The parser
+ *    does not detect them as an array.
+ */
+
+using System;
+using System.Collections.Generic;
+using System.Runtime.InteropServices;
+
+namespace PurpleWrapper
+{
+
+	/*
+	 * File: conversation.h
+	 * Structure: PurpleConversationUiOps
+	 */
+	public class PurpleConversationUiOps : UnmanagedWrapper<_PurpleConversationUiOps>
+	{
+		public PurpleConversationUiOps()
+		{
+		}
+
+		public PurpleConversationUiOps(IntPtr reference)
+		{
+			this.Reference = reference;
+			this.Data = (_PurpleConversationUiOps)Marshal.PtrToStructure(this.Reference, typeof(_PurpleConversationUiOps));
+		}
+
+		/*
+		 * Argument Name: create_conversation
+		 * Argument Type: void
+		 * Argument Category: Void
+		 */
+		public IntPtr create_conversation
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: destroy_conversation
+		 * Argument Type: void
+		 * Argument Category: Void
+		 */
+		public IntPtr destroy_conversation
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: write_chat
+		 * Argument Type: void
+		 * Argument Category: Void
+		 */
+		public IntPtr write_chat
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: write_im
+		 * Argument Type: void
+		 * Argument Category: Void
+		 */
+		public IntPtr write_im
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: write_conv
+		 * Argument Type: void
+		 * Argument Category: Void
+		 */
+		public IntPtr write_conv
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: chat_add_users
+		 * Argument Type: void
+		 * Argument Category: Void
+		 */
+		public IntPtr chat_add_users
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: chat_rename_user
+		 * Argument Type: void
+		 * Argument Category: Void
+		 */
+		public IntPtr chat_rename_user
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: chat_remove_users
+		 * Argument Type: void
+		 * Argument Category: Void
+		 */
+		public IntPtr chat_remove_users
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: chat_update_user
+		 * Argument Type: void
+		 * Argument Category: Void
+		 */
+		public IntPtr chat_update_user
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: present
+		 * Argument Type: void
+		 * Argument Category: Void
+		 */
+		public IntPtr present
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: has_focus
+		 * Argument Type: gboolean
+		 * Argument Category: Native
+		 */
+		public IntPtr has_focus
+		{
+			get
+			{
+				return this.Data.has_focus;
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				this.Data.has_focus = value;
+			}
+		}
+
+		/*
+		 * Argument Name: custom_smiley_add
+		 * Argument Type: gboolean
+		 * Argument Category: Native
+		 */
+		public IntPtr custom_smiley_add
+		{
+			get
+			{
+				return this.Data.custom_smiley_add;
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				this.Data.custom_smiley_add = value;
+			}
+		}
+
+		/*
+		 * Argument Name: custom_smiley_write
+		 * Argument Type: void
+		 * Argument Category: Void
+		 */
+		public IntPtr custom_smiley_write
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: custom_smiley_close
+		 * Argument Type: void
+		 * Argument Category: Void
+		 */
+		public IntPtr custom_smiley_close
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: send_confirm
+		 * Argument Type: void
+		 * Argument Category: Void
+		 */
+		public IntPtr send_confirm
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: _purple_reserved1
+		 * Argument Type: void
+		 * Argument Category: Void
+		 */
+		public IntPtr _purple_reserved1
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: _purple_reserved2
+		 * Argument Type: void
+		 * Argument Category: Void
+		 */
+		public IntPtr _purple_reserved2
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: _purple_reserved3
+		 * Argument Type: void
+		 * Argument Category: Void
+		 */
+		public IntPtr _purple_reserved3
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: _purple_reserved4
+		 * Argument Type: void
+		 * Argument Category: Void
+		 */
+		public IntPtr _purple_reserved4
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+	}
+
+
+	[StructLayout(LayoutKind.Sequential)]
+	public class _PurpleConversationUiOps
+	{
+		/*
+		 * void (*create_conversation)(PurpleConversation * conv)
+		 */
+		public IntPtr create_conversation;
+
+		/*
+		 * void (*destroy_conversation)(PurpleConversation * conv)
+		 */
+		public IntPtr destroy_conversation;
+
+		/*
+		 * void (*write_chat)(PurpleConversation * conv, char * who, char * message, PurpleMessageFlags flags, time_t mtime)
+		 */
+		public IntPtr write_chat;
+
+		/*
+		 * void (*write_im)(PurpleConversation * conv, char * who, char * message, PurpleMessageFlags flags, time_t mtime)
+		 */
+		public IntPtr write_im;
+
+		/*
+		 * void (*write_conv)(PurpleConversation * conv, char * name, char * alias, char * message, PurpleMessageFlags flags, time_t mtime)
+		 */
+		public IntPtr write_conv;
+
+		/*
+		 * void (*chat_add_users)(PurpleConversation * conv, GList * cbuddies, gboolean new_arrivals)
+		 */
+		public IntPtr chat_add_users;
+
+		/*
+		 * void (*chat_rename_user)(PurpleConversation * conv, char * old_name, char * new_name, char * new_alias)
+		 */
+		public IntPtr chat_rename_user;
+
+		/*
+		 * void (*chat_remove_users)(PurpleConversation * conv, GList * users)
+		 */
+		public IntPtr chat_remove_users;
+
+		/*
+		 * void (*chat_update_user)(PurpleConversation * conv, char * user)
+		 */
+		public IntPtr chat_update_user;
+
+		/*
+		 * void (*present)(PurpleConversation * conv)
+		 */
+		public IntPtr present;
+
+		/*
+		 * gboolean (*has_focus)(PurpleConversation * conv)
+		 */
+		public IntPtr has_focus;
+
+		/*
+		 * gboolean (*custom_smiley_add)(PurpleConversation * conv, char * smile, gboolean remote)
+		 */
+		public IntPtr custom_smiley_add;
+
+		/*
+		 * void (*custom_smiley_write)(PurpleConversation * conv, char * smile, guchar * data, gsize size)
+		 */
+		public IntPtr custom_smiley_write;
+
+		/*
+		 * void (*custom_smiley_close)(PurpleConversation * conv, char * smile)
+		 */
+		public IntPtr custom_smiley_close;
+
+		/*
+		 * void (*send_confirm)(PurpleConversation * conv, char * message)
+		 */
+		public IntPtr send_confirm;
+
+		/*
+		 * void (*_purple_reserved1)()
+		 */
+		public IntPtr _purple_reserved1;
+
+		/*
+		 * void (*_purple_reserved2)()
+		 */
+		public IntPtr _purple_reserved2;
+
+		/*
+		 * void (*_purple_reserved3)()
+		 */
+		public IntPtr _purple_reserved3;
+
+		/*
+		 * void (*_purple_reserved4)()
+		 */
+		public IntPtr _purple_reserved4;
+
+	}
+
+}
+
============================================================
--- libpurple/wrapper/PurpleEventLoopUiOps.cs	4927f3cf427845d0cb130f9326e7001f9eca58eb
+++ libpurple/wrapper/PurpleEventLoopUiOps.cs	4927f3cf427845d0cb130f9326e7001f9eca58eb
@@ -0,0 +1,292 @@
+/* PurpleWrapper - A .NET (CLR) wrapper for libpurple
+ *
+ * Purple is the legal property of its developers, whose names are too numerous
+ * to list here.  Please refer to the COPYRIGHT file distributed with this
+ * source distribution.
+ *
+ * This program 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.
+ *
+ * This program 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 this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02111-1301  USA
+ */
+
+/*
+ * This file was auto-generated from the libpurple header files to provide a
+ * clean interface between .NET/CLR and the unmanaged C library libpurple.
+ *
+ * This is the second major commit of the code.
+ * Next things:
+ *  - A few of the .h files have anonymous parameter names (eg: void cat(int, int).
+ *    This program will need to assign these parameters names.
+ *  - Function pointers inside structs aren't translated correctly into C#.
+ *  - Two places there are specific-length arrays (eg: char hostname[256]). The parser
+ *    does not detect them as an array.
+ */
+
+using System;
+using System.Collections.Generic;
+using System.Runtime.InteropServices;
+
+namespace PurpleWrapper
+{
+
+	/*
+	 * File: eventloop.h
+	 * Structure: PurpleEventLoopUiOps
+	 */
+	public class PurpleEventLoopUiOps : UnmanagedWrapper<_PurpleEventLoopUiOps>
+	{
+		public PurpleEventLoopUiOps()
+		{
+		}
+
+		public PurpleEventLoopUiOps(IntPtr reference)
+		{
+			this.Reference = reference;
+			this.Data = (_PurpleEventLoopUiOps)Marshal.PtrToStructure(this.Reference, typeof(_PurpleEventLoopUiOps));
+		}
+
+		/*
+		 * Argument Name: timeout_add
+		 * Argument Type: guint
+		 * Argument Category: Native
+		 */
+		public IntPtr timeout_add
+		{
+			get
+			{
+				return this.Data.timeout_add;
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				this.Data.timeout_add = value;
+			}
+		}
+
+		/*
+		 * Argument Name: timeout_remove
+		 * Argument Type: gboolean
+		 * Argument Category: Native
+		 */
+		public IntPtr timeout_remove
+		{
+			get
+			{
+				return this.Data.timeout_remove;
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				this.Data.timeout_remove = value;
+			}
+		}
+
+		/*
+		 * Argument Name: input_add
+		 * Argument Type: guint
+		 * Argument Category: Native
+		 */
+		public IntPtr input_add
+		{
+			get
+			{
+				return this.Data.input_add;
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				this.Data.input_add = value;
+			}
+		}
+
+		/*
+		 * Argument Name: input_remove
+		 * Argument Type: gboolean
+		 * Argument Category: Native
+		 */
+		public IntPtr input_remove
+		{
+			get
+			{
+				return this.Data.input_remove;
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				this.Data.input_remove = value;
+			}
+		}
+
+		/*
+		 * Argument Name: input_get_error
+		 * Argument Type: int
+		 * Argument Category: Native
+		 */
+		public IntPtr input_get_error
+		{
+			get
+			{
+				return this.Data.input_get_error;
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				this.Data.input_get_error = value;
+			}
+		}
+
+		/*
+		 * Argument Name: timeout_add_seconds
+		 * Argument Type: guint
+		 * Argument Category: Native
+		 */
+		public IntPtr timeout_add_seconds
+		{
+			get
+			{
+				return this.Data.timeout_add_seconds;
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				this.Data.timeout_add_seconds = value;
+			}
+		}
+
+		/*
+		 * Argument Name: _purple_reserved2
+		 * Argument Type: void
+		 * Argument Category: Void
+		 */
+		public IntPtr _purple_reserved2
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: _purple_reserved3
+		 * Argument Type: void
+		 * Argument Category: Void
+		 */
+		public IntPtr _purple_reserved3
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: _purple_reserved4
+		 * Argument Type: void
+		 * Argument Category: Void
+		 */
+		public IntPtr _purple_reserved4
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+	}
+
+
+	[StructLayout(LayoutKind.Sequential)]
+	public class _PurpleEventLoopUiOps
+	{
+		/*
+		 * guint (*timeout_add)(guint interval, GSourceFunc function, gpointer data)
+		 */
+		public IntPtr timeout_add;
+
+		/*
+		 * gboolean (*timeout_remove)(guint handle)
+		 */
+		public IntPtr timeout_remove;
+
+		/*
+		 * guint (*input_add)(int fd, PurpleInputCondition cond, PurpleInputFunction func, gpointer user_data)
+		 */
+		public IntPtr input_add;
+
+		/*
+		 * gboolean (*input_remove)(guint handle)
+		 */
+		public IntPtr input_remove;
+
+		/*
+		 * int (*input_get_error)(int fd, int * error)
+		 */
+		public IntPtr input_get_error;
+
+		/*
+		 * guint (*timeout_add_seconds)(guint interval, GSourceFunc function, gpointer data)
+		 */
+		public IntPtr timeout_add_seconds;
+
+		/*
+		 * void (*_purple_reserved2)()
+		 */
+		public IntPtr _purple_reserved2;
+
+		/*
+		 * void (*_purple_reserved3)()
+		 */
+		public IntPtr _purple_reserved3;
+
+		/*
+		 * void (*_purple_reserved4)()
+		 */
+		public IntPtr _purple_reserved4;
+
+	}
+
+}
+
============================================================
--- libpurple/wrapper/PurpleGroup.cs	9feae08c2ab266df1677cdcc3463d6a18da5554a
+++ libpurple/wrapper/PurpleGroup.cs	9feae08c2ab266df1677cdcc3463d6a18da5554a
@@ -0,0 +1,185 @@
+/* PurpleWrapper - A .NET (CLR) wrapper for libpurple
+ *
+ * Purple is the legal property of its developers, whose names are too numerous
+ * to list here.  Please refer to the COPYRIGHT file distributed with this
+ * source distribution.
+ *
+ * This program 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.
+ *
+ * This program 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 this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02111-1301  USA
+ */
+
+/*
+ * This file was auto-generated from the libpurple header files to provide a
+ * clean interface between .NET/CLR and the unmanaged C library libpurple.
+ *
+ * This is the second major commit of the code.
+ * Next things:
+ *  - A few of the .h files have anonymous parameter names (eg: void cat(int, int).
+ *    This program will need to assign these parameters names.
+ *  - Function pointers inside structs aren't translated correctly into C#.
+ *  - Two places there are specific-length arrays (eg: char hostname[256]). The parser
+ *    does not detect them as an array.
+ */
+
+using System;
+using System.Collections.Generic;
+using System.Runtime.InteropServices;
+
+namespace PurpleWrapper
+{
+
+	/*
+	 * File: blist.h
+	 * Structure: PurpleGroup
+	 */
+	public class PurpleGroup : UnmanagedWrapper<_PurpleGroup>
+	{
+		public PurpleGroup()
+		{
+		}
+
+		public PurpleGroup(IntPtr reference)
+		{
+			this.Reference = reference;
+			this.Data = (_PurpleGroup)Marshal.PtrToStructure(this.Reference, typeof(_PurpleGroup));
+		}
+
+		/*
+		 * Argument Name: node
+		 * Argument Type: PurpleBlistNode
+		 * Argument Category: KnownStruct
+		 */
+		/*
+		 * Could not generate a wrapper for PurpleGroup.node in file "blist.h".
+		 * Message: The struct contains an object that resolves to a function that is not a function pointer (PurpleBlistNode node).
+		 */
+
+		/*
+		 * Argument Name: name
+		 * Argument Type: char *
+		 * Argument Category: Native
+		 */
+		public string name
+		{
+			get
+			{
+				return this.Data.name;
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				this.Data.name = value;
+			}
+		}
+
+		/*
+		 * Argument Name: totalsize
+		 * Argument Type: int
+		 * Argument Category: Native
+		 */
+		public int totalsize
+		{
+			get
+			{
+				return this.Data.totalsize;
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				this.Data.totalsize = value;
+			}
+		}
+
+		/*
+		 * Argument Name: currentsize
+		 * Argument Type: int
+		 * Argument Category: Native
+		 */
+		public int currentsize
+		{
+			get
+			{
+				return this.Data.currentsize;
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				this.Data.currentsize = value;
+			}
+		}
+
+		/*
+		 * Argument Name: online
+		 * Argument Type: int
+		 * Argument Category: Native
+		 */
+		public int online
+		{
+			get
+			{
+				return this.Data.online;
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				this.Data.online = value;
+			}
+		}
+
+	}
+
+
+	[StructLayout(LayoutKind.Sequential)]
+	public class _PurpleGroup
+	{
+		/*
+		 * PurpleBlistNode node
+		 */
+		/*
+		 * Could not generate a wrapper for PurpleGroup.node in file "blist.h".
+		 * Message: The struct contains an object that resolves to a function that is not a function pointer (PurpleBlistNode node).
+		 */
+
+		/*
+		 * char * name
+		 */
+		public string name;
+
+		/*
+		 * int totalsize
+		 */
+		public int totalsize;
+
+		/*
+		 * int currentsize
+		 */
+		public int currentsize;
+
+		/*
+		 * int online
+		 */
+		public int online;
+
+	}
+
+}
+
============================================================
--- libpurple/wrapper/PurpleKeyValuePair.cs	649266ab2fbce3195c29737e1763d92a7834baec
+++ libpurple/wrapper/PurpleKeyValuePair.cs	649266ab2fbce3195c29737e1763d92a7834baec
@@ -0,0 +1,117 @@
+/* PurpleWrapper - A .NET (CLR) wrapper for libpurple
+ *
+ * Purple is the legal property of its developers, whose names are too numerous
+ * to list here.  Please refer to the COPYRIGHT file distributed with this
+ * source distribution.
+ *
+ * This program 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.
+ *
+ * This program 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 this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02111-1301  USA
+ */
+
+/*
+ * This file was auto-generated from the libpurple header files to provide a
+ * clean interface between .NET/CLR and the unmanaged C library libpurple.
+ *
+ * This is the second major commit of the code.
+ * Next things:
+ *  - A few of the .h files have anonymous parameter names (eg: void cat(int, int).
+ *    This program will need to assign these parameters names.
+ *  - Function pointers inside structs aren't translated correctly into C#.
+ *  - Two places there are specific-length arrays (eg: char hostname[256]). The parser
+ *    does not detect them as an array.
+ */
+
+using System;
+using System.Collections.Generic;
+using System.Runtime.InteropServices;
+
+namespace PurpleWrapper
+{
+
+	/*
+	 * File: util.h
+	 * Structure: PurpleKeyValuePair
+	 */
+	public class PurpleKeyValuePair : UnmanagedWrapper<_PurpleKeyValuePair>
+	{
+		public PurpleKeyValuePair()
+		{
+		}
+
+		public PurpleKeyValuePair(IntPtr reference)
+		{
+			this.Reference = reference;
+			this.Data = (_PurpleKeyValuePair)Marshal.PtrToStructure(this.Reference, typeof(_PurpleKeyValuePair));
+		}
+
+		/*
+		 * Argument Name: key
+		 * Argument Type: gchar *
+		 * Argument Category: Native
+		 */
+		public string key
+		{
+			get
+			{
+				return this.Data.key;
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				this.Data.key = value;
+			}
+		}
+
+		/*
+		 * Argument Name: value
+		 * Argument Type: void *
+		 * Argument Category: VoidPointer
+		 */
+		public IntPtr value
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+	}
+
+
+	[StructLayout(LayoutKind.Sequential)]
+	public class _PurpleKeyValuePair
+	{
+		/*
+		 * gchar * key
+		 */
+		public string key;
+
+		/*
+		 * void * value
+		 */
+		public IntPtr value;
+
+	}
+
+}
+
============================================================
--- libpurple/wrapper/PurpleLog.cs	b199292fbde439a2fc30faf7a541b45488ea2781
+++ libpurple/wrapper/PurpleLog.cs	b199292fbde439a2fc30faf7a541b45488ea2781
@@ -0,0 +1,260 @@
+/* PurpleWrapper - A .NET (CLR) wrapper for libpurple
+ *
+ * Purple is the legal property of its developers, whose names are too numerous
+ * to list here.  Please refer to the COPYRIGHT file distributed with this
+ * source distribution.
+ *
+ * This program 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.
+ *
+ * This program 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 this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02111-1301  USA
+ */
+
+/*
+ * This file was auto-generated from the libpurple header files to provide a
+ * clean interface between .NET/CLR and the unmanaged C library libpurple.
+ *
+ * This is the second major commit of the code.
+ * Next things:
+ *  - A few of the .h files have anonymous parameter names (eg: void cat(int, int).
+ *    This program will need to assign these parameters names.
+ *  - Function pointers inside structs aren't translated correctly into C#.
+ *  - Two places there are specific-length arrays (eg: char hostname[256]). The parser
+ *    does not detect them as an array.
+ */
+
+using System;
+using System.Collections.Generic;
+using System.Runtime.InteropServices;
+
+namespace PurpleWrapper
+{
+
+	/*
+	 * File: log.h
+	 * Structure: PurpleLog
+	 */
+	public class PurpleLog : UnmanagedWrapper<_PurpleLog>
+	{
+		public PurpleLog()
+		{
+		}
+
+		public PurpleLog(IntPtr reference)
+		{
+			this.Reference = reference;
+			this.Data = (_PurpleLog)Marshal.PtrToStructure(this.Reference, typeof(_PurpleLog));
+		}
+
+		/*
+		 * Argument Name: type
+		 * Argument Type: PurpleLogType
+		 * Argument Category: KnownEnum
+		 */
+		public Log.PurpleLogType type
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: name
+		 * Argument Type: char *
+		 * Argument Category: Native
+		 */
+		public string name
+		{
+			get
+			{
+				return this.Data.name;
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				this.Data.name = value;
+			}
+		}
+
+		/*
+		 * Argument Name: account
+		 * Argument Type: PurpleAccount *
+		 * Argument Category: PointerToKnownStruct
+		 */
+		public PurpleAccount account
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: conv
+		 * Argument Type: PurpleConversation *
+		 * Argument Category: PointerToKnownStruct
+		 */
+		public PurpleConversation conv
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: time
+		 * Argument Type: time_t
+		 * Argument Category: DateTime
+		 */
+		public DateTime time
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: logger
+		 * Argument Type: PurpleLogLogger *
+		 * Argument Category: PointerToKnownStruct
+		 */
+		public PurpleLogLogger logger
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: logger_data
+		 * Argument Type: void *
+		 * Argument Category: VoidPointer
+		 */
+		public IntPtr logger_data
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: tm *tm
+		 * Argument Type: struct
+		 * Argument Category: InnerStruct
+		 */
+		/*
+		 * Could not generate a wrapper for PurpleLog.tm *tm in file "log.h".
+		 * Message: The struct contains an inner-struct or inner-union and cannot be automatically wrapped.
+		 */
+
+	}
+
+
+	[StructLayout(LayoutKind.Sequential)]
+	public class _PurpleLog
+	{
+		/*
+		 * PurpleLogType type
+		 */
+		public Log.PurpleLogType type;
+
+		/*
+		 * char * name
+		 */
+		public string name;
+
+		/*
+		 * PurpleAccount * account
+		 */
+		public IntPtr account;
+
+		/*
+		 * PurpleConversation * conv
+		 */
+		public IntPtr conv;
+
+		/*
+		 * time_t time
+		 */
+		public ulong time;
+
+		/*
+		 * PurpleLogLogger * logger
+		 */
+		public IntPtr logger;
+
+		/*
+		 * void * logger_data
+		 */
+		public IntPtr logger_data;
+
+		/*
+		 * struct tm *tm
+		 */
+		/*
+		 * Could not generate a wrapper for PurpleLog.tm *tm in file "log.h".
+		 * Message: The struct contains an inner-struct or inner-union and cannot be automatically wrapped.
+		 */
+
+	}
+
+}
+
============================================================
--- libpurple/wrapper/PurpleLogCommonLoggerData.cs	88a04e8494fceb66baf3ab1878ff808f3164f9cd
+++ libpurple/wrapper/PurpleLogCommonLoggerData.cs	88a04e8494fceb66baf3ab1878ff808f3164f9cd
@@ -0,0 +1,142 @@
+/* PurpleWrapper - A .NET (CLR) wrapper for libpurple
+ *
+ * Purple is the legal property of its developers, whose names are too numerous
+ * to list here.  Please refer to the COPYRIGHT file distributed with this
+ * source distribution.
+ *
+ * This program 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.
+ *
+ * This program 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 this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02111-1301  USA
+ */
+
+/*
+ * This file was auto-generated from the libpurple header files to provide a
+ * clean interface between .NET/CLR and the unmanaged C library libpurple.
+ *
+ * This is the second major commit of the code.
+ * Next things:
+ *  - A few of the .h files have anonymous parameter names (eg: void cat(int, int).
+ *    This program will need to assign these parameters names.
+ *  - Function pointers inside structs aren't translated correctly into C#.
+ *  - Two places there are specific-length arrays (eg: char hostname[256]). The parser
+ *    does not detect them as an array.
+ */
+
+using System;
+using System.Collections.Generic;
+using System.Runtime.InteropServices;
+
+namespace PurpleWrapper
+{
+
+	/*
+	 * File: log.h
+	 * Structure: PurpleLogCommonLoggerData
+	 */
+	public class PurpleLogCommonLoggerData : UnmanagedWrapper<_PurpleLogCommonLoggerData>
+	{
+		public PurpleLogCommonLoggerData()
+		{
+		}
+
+		public PurpleLogCommonLoggerData(IntPtr reference)
+		{
+			this.Reference = reference;
+			this.Data = (_PurpleLogCommonLoggerData)Marshal.PtrToStructure(this.Reference, typeof(_PurpleLogCommonLoggerData));
+		}
+
+		/*
+		 * Argument Name: path
+		 * Argument Type: char *
+		 * Argument Category: Native
+		 */
+		public string path
+		{
+			get
+			{
+				return this.Data.path;
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				this.Data.path = value;
+			}
+		}
+
+		/*
+		 * Argument Name: file
+		 * Argument Type: FILE *
+		 * Argument Category: PointerToUnknownStruct
+		 */
+		public /* Resolved as PointerToUnknownStruct to FILE */ IntPtr file
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: extra_data
+		 * Argument Type: void *
+		 * Argument Category: VoidPointer
+		 */
+		public IntPtr extra_data
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+	}
+
+
+	[StructLayout(LayoutKind.Sequential)]
+	public class _PurpleLogCommonLoggerData
+	{
+		/*
+		 * char * path
+		 */
+		public string path;
+
+		/*
+		 * FILE * file
+		 */
+		public IntPtr file;
+
+		/*
+		 * void * extra_data
+		 */
+		public IntPtr extra_data;
+
+	}
+
+}
+
============================================================
--- libpurple/wrapper/PurpleLogLogger.cs	2421a793f65179da3943b135916b561603f55b6d
+++ libpurple/wrapper/PurpleLogLogger.cs	2421a793f65179da3943b135916b561603f55b6d
@@ -0,0 +1,492 @@
+/* PurpleWrapper - A .NET (CLR) wrapper for libpurple
+ *
+ * Purple is the legal property of its developers, whose names are too numerous
+ * to list here.  Please refer to the COPYRIGHT file distributed with this
+ * source distribution.
+ *
+ * This program 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.
+ *
+ * This program 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 this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02111-1301  USA
+ */
+
+/*
+ * This file was auto-generated from the libpurple header files to provide a
+ * clean interface between .NET/CLR and the unmanaged C library libpurple.
+ *
+ * This is the second major commit of the code.
+ * Next things:
+ *  - A few of the .h files have anonymous parameter names (eg: void cat(int, int).
+ *    This program will need to assign these parameters names.
+ *  - Function pointers inside structs aren't translated correctly into C#.
+ *  - Two places there are specific-length arrays (eg: char hostname[256]). The parser
+ *    does not detect them as an array.
+ */
+
+using System;
+using System.Collections.Generic;
+using System.Runtime.InteropServices;
+
+namespace PurpleWrapper
+{
+
+	/*
+	 * File: log.h
+	 * Structure: PurpleLogLogger
+	 */
+	public class PurpleLogLogger : UnmanagedWrapper<_PurpleLogLogger>
+	{
+		public PurpleLogLogger()
+		{
+		}
+
+		public PurpleLogLogger(IntPtr reference)
+		{
+			this.Reference = reference;
+			this.Data = (_PurpleLogLogger)Marshal.PtrToStructure(this.Reference, typeof(_PurpleLogLogger));
+		}
+
+		/*
+		 * Argument Name: name
+		 * Argument Type: char *
+		 * Argument Category: Native
+		 */
+		public string name
+		{
+			get
+			{
+				return this.Data.name;
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				this.Data.name = value;
+			}
+		}
+
+		/*
+		 * Argument Name: id
+		 * Argument Type: char *
+		 * Argument Category: Native
+		 */
+		public string id
+		{
+			get
+			{
+				return this.Data.id;
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				this.Data.id = value;
+			}
+		}
+
+		/*
+		 * Argument Name: create
+		 * Argument Type: void
+		 * Argument Category: Void
+		 */
+		public IntPtr create
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: write
+		 * Argument Type: gsize
+		 * Argument Category: Native
+		 */
+		public IntPtr write
+		{
+			get
+			{
+				return this.Data.write;
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				this.Data.write = value;
+			}
+		}
+
+		/*
+		 * Argument Name: finalize
+		 * Argument Type: void
+		 * Argument Category: Void
+		 */
+		public IntPtr finalize
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: list
+		 * Argument Type: GList *
+		 * Argument Category: PointerToGList
+		 */
+		public IntPtr list
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: read
+		 * Argument Type: char *
+		 * Argument Category: Native
+		 */
+		public IntPtr read
+		{
+			get
+			{
+				return this.Data.read;
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				this.Data.read = value;
+			}
+		}
+
+		/*
+		 * Argument Name: size
+		 * Argument Type: int
+		 * Argument Category: Native
+		 */
+		public IntPtr size
+		{
+			get
+			{
+				return this.Data.size;
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				this.Data.size = value;
+			}
+		}
+
+		/*
+		 * Argument Name: total_size
+		 * Argument Type: int
+		 * Argument Category: Native
+		 */
+		public IntPtr total_size
+		{
+			get
+			{
+				return this.Data.total_size;
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				this.Data.total_size = value;
+			}
+		}
+
+		/*
+		 * Argument Name: list_syslog
+		 * Argument Type: GList *
+		 * Argument Category: PointerToGList
+		 */
+		public IntPtr list_syslog
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: get_log_sets
+		 * Argument Type: void
+		 * Argument Category: Void
+		 */
+		public IntPtr get_log_sets
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: remove
+		 * Argument Type: gboolean
+		 * Argument Category: Native
+		 */
+		public IntPtr remove
+		{
+			get
+			{
+				return this.Data.remove;
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				this.Data.remove = value;
+			}
+		}
+
+		/*
+		 * Argument Name: is_deletable
+		 * Argument Type: gboolean
+		 * Argument Category: Native
+		 */
+		public IntPtr is_deletable
+		{
+			get
+			{
+				return this.Data.is_deletable;
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				this.Data.is_deletable = value;
+			}
+		}
+
+		/*
+		 * Argument Name: _purple_reserved1
+		 * Argument Type: void
+		 * Argument Category: Void
+		 */
+		public IntPtr _purple_reserved1
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: _purple_reserved2
+		 * Argument Type: void
+		 * Argument Category: Void
+		 */
+		public IntPtr _purple_reserved2
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: _purple_reserved3
+		 * Argument Type: void
+		 * Argument Category: Void
+		 */
+		public IntPtr _purple_reserved3
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: _purple_reserved4
+		 * Argument Type: void
+		 * Argument Category: Void
+		 */
+		public IntPtr _purple_reserved4
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+	}
+
+
+	[StructLayout(LayoutKind.Sequential)]
+	public class _PurpleLogLogger
+	{
+		/*
+		 * char * name
+		 */
+		public string name;
+
+		/*
+		 * char * id
+		 */
+		public string id;
+
+		/*
+		 * void (*create)(PurpleLog * log)
+		 */
+		public IntPtr create;
+
+		/*
+		 * gsize (*write)(PurpleLog * log, PurpleMessageFlags type, char * from, time_t time, char * message)
+		 */
+		public IntPtr write;
+
+		/*
+		 * void (*finalize)(PurpleLog * log)
+		 */
+		public IntPtr finalize;
+
+		/*
+		 * GList * (*list)(PurpleLogType type, char * name, PurpleAccount * account)
+		 */
+		public IntPtr list;
+
+		/*
+		 * char * (*read)(PurpleLog * log, PurpleLogReadFlags * flags)
+		 */
+		public IntPtr read;
+
+		/*
+		 * int (*size)(PurpleLog * log)
+		 */
+		public IntPtr size;
+
+		/*
+		 * int (*total_size)(PurpleLogType type, char * name, PurpleAccount * account)
+		 */
+		public IntPtr total_size;
+
+		/*
+		 * GList * (*list_syslog)(PurpleAccount * account)
+		 */
+		public IntPtr list_syslog;
+
+		/*
+		 * void (*get_log_sets)(PurpleLogSetCallback cb, GHashTable * sets)
+		 */
+		public IntPtr get_log_sets;
+
+		/*
+		 * gboolean (*remove)(PurpleLog * log)
+		 */
+		public IntPtr remove;
+
+		/*
+		 * gboolean (*is_deletable)(PurpleLog * log)
+		 */
+		public IntPtr is_deletable;
+
+		/*
+		 * void (*_purple_reserved1)()
+		 */
+		public IntPtr _purple_reserved1;
+
+		/*
+		 * void (*_purple_reserved2)()
+		 */
+		public IntPtr _purple_reserved2;
+
+		/*
+		 * void (*_purple_reserved3)()
+		 */
+		public IntPtr _purple_reserved3;
+
+		/*
+		 * void (*_purple_reserved4)()
+		 */
+		public IntPtr _purple_reserved4;
+
+	}
+
+}
+
============================================================
--- libpurple/wrapper/PurpleLogSet.cs	eb6aee9232a158317e7b8a3f319db0a25be3495f
+++ libpurple/wrapper/PurpleLogSet.cs	eb6aee9232a158317e7b8a3f319db0a25be3495f
@@ -0,0 +1,192 @@
+/* PurpleWrapper - A .NET (CLR) wrapper for libpurple
+ *
+ * Purple is the legal property of its developers, whose names are too numerous
+ * to list here.  Please refer to the COPYRIGHT file distributed with this
+ * source distribution.
+ *
+ * This program 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.
+ *
+ * This program 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 this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02111-1301  USA
+ */
+
+/*
+ * This file was auto-generated from the libpurple header files to provide a
+ * clean interface between .NET/CLR and the unmanaged C library libpurple.
+ *
+ * This is the second major commit of the code.
+ * Next things:
+ *  - A few of the .h files have anonymous parameter names (eg: void cat(int, int).
+ *    This program will need to assign these parameters names.
+ *  - Function pointers inside structs aren't translated correctly into C#.
+ *  - Two places there are specific-length arrays (eg: char hostname[256]). The parser
+ *    does not detect them as an array.
+ */
+
+using System;
+using System.Collections.Generic;
+using System.Runtime.InteropServices;
+
+namespace PurpleWrapper
+{
+
+	/*
+	 * File: log.h
+	 * Structure: PurpleLogSet
+	 */
+	public class PurpleLogSet : UnmanagedWrapper<_PurpleLogSet>
+	{
+		public PurpleLogSet()
+		{
+		}
+
+		public PurpleLogSet(IntPtr reference)
+		{
+			this.Reference = reference;
+			this.Data = (_PurpleLogSet)Marshal.PtrToStructure(this.Reference, typeof(_PurpleLogSet));
+		}
+
+		/*
+		 * Argument Name: type
+		 * Argument Type: PurpleLogType
+		 * Argument Category: KnownEnum
+		 */
+		public Log.PurpleLogType type
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: name
+		 * Argument Type: char *
+		 * Argument Category: Native
+		 */
+		public string name
+		{
+			get
+			{
+				return this.Data.name;
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				this.Data.name = value;
+			}
+		}
+
+		/*
+		 * Argument Name: account
+		 * Argument Type: PurpleAccount *
+		 * Argument Category: PointerToKnownStruct
+		 */
+		public PurpleAccount account
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: buddy
+		 * Argument Type: gboolean
+		 * Argument Category: Native
+		 */
+		public bool buddy
+		{
+			get
+			{
+				return this.Data.buddy;
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				this.Data.buddy = value;
+			}
+		}
+
+		/*
+		 * Argument Name: normalized_name
+		 * Argument Type: char *
+		 * Argument Category: Native
+		 */
+		public string normalized_name
+		{
+			get
+			{
+				return this.Data.normalized_name;
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				this.Data.normalized_name = value;
+			}
+		}
+
+	}
+
+
+	[StructLayout(LayoutKind.Sequential)]
+	public class _PurpleLogSet
+	{
+		/*
+		 * PurpleLogType type
+		 */
+		public Log.PurpleLogType type;
+
+		/*
+		 * char * name
+		 */
+		public string name;
+
+		/*
+		 * PurpleAccount * account
+		 */
+		public IntPtr account;
+
+		/*
+		 * gboolean buddy
+		 */
+		public bool buddy;
+
+		/*
+		 * char * normalized_name
+		 */
+		public string normalized_name;
+
+	}
+
+}
+
============================================================
--- libpurple/wrapper/PurpleMenuAction.cs	39f52b4f5eee94195585367960eedfcf87a95ac3
+++ libpurple/wrapper/PurpleMenuAction.cs	39f52b4f5eee94195585367960eedfcf87a95ac3
@@ -0,0 +1,157 @@
+/* PurpleWrapper - A .NET (CLR) wrapper for libpurple
+ *
+ * Purple is the legal property of its developers, whose names are too numerous
+ * to list here.  Please refer to the COPYRIGHT file distributed with this
+ * source distribution.
+ *
+ * This program 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.
+ *
+ * This program 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 this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02111-1301  USA
+ */
+
+/*
+ * This file was auto-generated from the libpurple header files to provide a
+ * clean interface between .NET/CLR and the unmanaged C library libpurple.
+ *
+ * This is the second major commit of the code.
+ * Next things:
+ *  - A few of the .h files have anonymous parameter names (eg: void cat(int, int).
+ *    This program will need to assign these parameters names.
+ *  - Function pointers inside structs aren't translated correctly into C#.
+ *  - Two places there are specific-length arrays (eg: char hostname[256]). The parser
+ *    does not detect them as an array.
+ */
+
+using System;
+using System.Collections.Generic;
+using System.Runtime.InteropServices;
+
+namespace PurpleWrapper
+{
+
+	/*
+	 * File: util.h
+	 * Structure: PurpleMenuAction
+	 */
+	public class PurpleMenuAction : UnmanagedWrapper<_PurpleMenuAction>
+	{
+		public PurpleMenuAction()
+		{
+		}
+
+		public PurpleMenuAction(IntPtr reference)
+		{
+			this.Reference = reference;
+			this.Data = (_PurpleMenuAction)Marshal.PtrToStructure(this.Reference, typeof(_PurpleMenuAction));
+		}
+
+		/*
+		 * Argument Name: label
+		 * Argument Type: char *
+		 * Argument Category: Native
+		 */
+		public string label
+		{
+			get
+			{
+				return this.Data.label;
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				this.Data.label = value;
+			}
+		}
+
+		/*
+		 * Argument Name: callback
+		 * Argument Type: PurpleCallback
+		 * Argument Category: KnownFunctionPointer
+		 */
+		public Signals.PurpleCallback callback
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: data
+		 * Argument Type: gpointer
+		 * Argument Category: VoidPointer
+		 */
+		public IntPtr data
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: children
+		 * Argument Type: GList *
+		 * Argument Category: PointerToGList
+		 */
+		/*
+		 * Could not generate a wrapper for PurpleMenuAction.children in file "util.h".
+		 * Message: Unable to provide a type for GList as no function information was provided in code.
+		 */
+
+	}
+
+
+	[StructLayout(LayoutKind.Sequential)]
+	public class _PurpleMenuAction
+	{
+		/*
+		 * char * label
+		 */
+		public string label;
+
+		/*
+		 * PurpleCallback callback
+		 */
+		public IntPtr callback;
+
+		/*
+		 * gpointer data
+		 */
+		public IntPtr data;
+
+		/*
+		 * GList * children
+		 */
+		public IntPtr children;
+
+	}
+
+}
+
============================================================
--- libpurple/wrapper/PurplePlugin.cs	1b8cdaefe57c5b251f0e22112df3af05c696fbda
+++ libpurple/wrapper/PurplePlugin.cs	1b8cdaefe57c5b251f0e22112df3af05c696fbda
@@ -0,0 +1,407 @@
+/* PurpleWrapper - A .NET (CLR) wrapper for libpurple
+ *
+ * Purple is the legal property of its developers, whose names are too numerous
+ * to list here.  Please refer to the COPYRIGHT file distributed with this
+ * source distribution.
+ *
+ * This program 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.
+ *
+ * This program 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 this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02111-1301  USA
+ */
+
+/*
+ * This file was auto-generated from the libpurple header files to provide a
+ * clean interface between .NET/CLR and the unmanaged C library libpurple.
+ *
+ * This is the second major commit of the code.
+ * Next things:
+ *  - A few of the .h files have anonymous parameter names (eg: void cat(int, int).
+ *    This program will need to assign these parameters names.
+ *  - Function pointers inside structs aren't translated correctly into C#.
+ *  - Two places there are specific-length arrays (eg: char hostname[256]). The parser
+ *    does not detect them as an array.
+ */
+
+using System;
+using System.Collections.Generic;
+using System.Runtime.InteropServices;
+
+namespace PurpleWrapper
+{
+
+	/*
+	 * File: plugin.h
+	 * Structure: PurplePlugin
+	 */
+	public class PurplePlugin : UnmanagedWrapper<_PurplePlugin>
+	{
+		public PurplePlugin()
+		{
+		}
+
+		public PurplePlugin(IntPtr reference)
+		{
+			this.Reference = reference;
+			this.Data = (_PurplePlugin)Marshal.PtrToStructure(this.Reference, typeof(_PurplePlugin));
+		}
+
+		/*
+		 * Argument Name: native_plugin
+		 * Argument Type: gboolean
+		 * Argument Category: Native
+		 */
+		public bool native_plugin
+		{
+			get
+			{
+				return this.Data.native_plugin;
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				this.Data.native_plugin = value;
+			}
+		}
+
+		/*
+		 * Argument Name: loaded
+		 * Argument Type: gboolean
+		 * Argument Category: Native
+		 */
+		public bool loaded
+		{
+			get
+			{
+				return this.Data.loaded;
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				this.Data.loaded = value;
+			}
+		}
+
+		/*
+		 * Argument Name: handle
+		 * Argument Type: void *
+		 * Argument Category: VoidPointer
+		 */
+		public IntPtr handle
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: path
+		 * Argument Type: char *
+		 * Argument Category: Native
+		 */
+		public string path
+		{
+			get
+			{
+				return this.Data.path;
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				this.Data.path = value;
+			}
+		}
+
+		/*
+		 * Argument Name: info
+		 * Argument Type: PurplePluginInfo *
+		 * Argument Category: PointerToKnownStruct
+		 */
+		public PurplePluginInfo info
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: error
+		 * Argument Type: char *
+		 * Argument Category: Native
+		 */
+		public string error
+		{
+			get
+			{
+				return this.Data.error;
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				this.Data.error = value;
+			}
+		}
+
+		/*
+		 * Argument Name: ipc_data
+		 * Argument Type: void *
+		 * Argument Category: VoidPointer
+		 */
+		public IntPtr ipc_data
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: extra
+		 * Argument Type: void *
+		 * Argument Category: VoidPointer
+		 */
+		public IntPtr extra
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: unloadable
+		 * Argument Type: gboolean
+		 * Argument Category: Native
+		 */
+		public bool unloadable
+		{
+			get
+			{
+				return this.Data.unloadable;
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				this.Data.unloadable = value;
+			}
+		}
+
+		/*
+		 * Argument Name: dependent_plugins
+		 * Argument Type: GList *
+		 * Argument Category: PointerToGList
+		 */
+		/*
+		 * Could not generate a wrapper for PurplePlugin.dependent_plugins in file "plugin.h".
+		 * Message: Unable to provide a type for GList as no function information was provided in code.
+		 */
+
+		/*
+		 * Argument Name: _purple_reserved1
+		 * Argument Type: void
+		 * Argument Category: Void
+		 */
+		public IntPtr _purple_reserved1
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: _purple_reserved2
+		 * Argument Type: void
+		 * Argument Category: Void
+		 */
+		public IntPtr _purple_reserved2
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: _purple_reserved3
+		 * Argument Type: void
+		 * Argument Category: Void
+		 */
+		public IntPtr _purple_reserved3
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: _purple_reserved4
+		 * Argument Type: void
+		 * Argument Category: Void
+		 */
+		public IntPtr _purple_reserved4
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+	}
+
+
+	[StructLayout(LayoutKind.Sequential)]
+	public class _PurplePlugin
+	{
+		/*
+		 * gboolean native_plugin
+		 */
+		public bool native_plugin;
+
+		/*
+		 * gboolean loaded
+		 */
+		public bool loaded;
+
+		/*
+		 * void * handle
+		 */
+		public IntPtr handle;
+
+		/*
+		 * char * path
+		 */
+		public string path;
+
+		/*
+		 * PurplePluginInfo * info
+		 */
+		public IntPtr info;
+
+		/*
+		 * char * error
+		 */
+		public string error;
+
+		/*
+		 * void * ipc_data
+		 */
+		public IntPtr ipc_data;
+
+		/*
+		 * void * extra
+		 */
+		public IntPtr extra;
+
+		/*
+		 * gboolean unloadable
+		 */
+		public bool unloadable;
+
+		/*
+		 * GList * dependent_plugins
+		 */
+		public IntPtr dependent_plugins;
+
+		/*
+		 * void (*_purple_reserved1)()
+		 */
+		public IntPtr _purple_reserved1;
+
+		/*
+		 * void (*_purple_reserved2)()
+		 */
+		public IntPtr _purple_reserved2;
+
+		/*
+		 * void (*_purple_reserved3)()
+		 */
+		public IntPtr _purple_reserved3;
+
+		/*
+		 * void (*_purple_reserved4)()
+		 */
+		public IntPtr _purple_reserved4;
+
+	}
+
+}
+
============================================================
--- libpurple/wrapper/PurplePluginAction.cs	c23c593c1b94481249493b06be0dc43110f53a69
+++ libpurple/wrapper/PurplePluginAction.cs	c23c593c1b94481249493b06be0dc43110f53a69
@@ -0,0 +1,192 @@
+/* PurpleWrapper - A .NET (CLR) wrapper for libpurple
+ *
+ * Purple is the legal property of its developers, whose names are too numerous
+ * to list here.  Please refer to the COPYRIGHT file distributed with this
+ * source distribution.
+ *
+ * This program 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.
+ *
+ * This program 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 this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02111-1301  USA
+ */
+
+/*
+ * This file was auto-generated from the libpurple header files to provide a
+ * clean interface between .NET/CLR and the unmanaged C library libpurple.
+ *
+ * This is the second major commit of the code.
+ * Next things:
+ *  - A few of the .h files have anonymous parameter names (eg: void cat(int, int).
+ *    This program will need to assign these parameters names.
+ *  - Function pointers inside structs aren't translated correctly into C#.
+ *  - Two places there are specific-length arrays (eg: char hostname[256]). The parser
+ *    does not detect them as an array.
+ */
+
+using System;
+using System.Collections.Generic;
+using System.Runtime.InteropServices;
+
+namespace PurpleWrapper
+{
+
+	/*
+	 * File: plugin.h
+	 * Structure: PurplePluginAction
+	 */
+	public class PurplePluginAction : UnmanagedWrapper<_PurplePluginAction>
+	{
+		public PurplePluginAction()
+		{
+		}
+
+		public PurplePluginAction(IntPtr reference)
+		{
+			this.Reference = reference;
+			this.Data = (_PurplePluginAction)Marshal.PtrToStructure(this.Reference, typeof(_PurplePluginAction));
+		}
+
+		/*
+		 * Argument Name: label
+		 * Argument Type: char *
+		 * Argument Category: Native
+		 */
+		public string label
+		{
+			get
+			{
+				return this.Data.label;
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				this.Data.label = value;
+			}
+		}
+
+		/*
+		 * Argument Name: callback
+		 * Argument Type: void
+		 * Argument Category: Void
+		 */
+		public IntPtr callback
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: plugin
+		 * Argument Type: PurplePlugin *
+		 * Argument Category: PointerToKnownStruct
+		 */
+		public PurplePlugin plugin
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: context
+		 * Argument Type: gpointer
+		 * Argument Category: VoidPointer
+		 */
+		public IntPtr context
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: user_data
+		 * Argument Type: gpointer
+		 * Argument Category: VoidPointer
+		 */
+		public IntPtr user_data
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+	}
+
+
+	[StructLayout(LayoutKind.Sequential)]
+	public class _PurplePluginAction
+	{
+		/*
+		 * char * label
+		 */
+		public string label;
+
+		/*
+		 * void (*callback)(PurplePluginAction * )
+		 */
+		public IntPtr callback;
+
+		/*
+		 * PurplePlugin * plugin
+		 */
+		public IntPtr plugin;
+
+		/*
+		 * gpointer context
+		 */
+		public IntPtr context;
+
+		/*
+		 * gpointer user_data
+		 */
+		public IntPtr user_data;
+
+	}
+
+}
+
============================================================
--- libpurple/wrapper/PurplePluginInfo.cs	9a408ea041350f74d326286f73cd246ee5c4d062
+++ libpurple/wrapper/PurplePluginInfo.cs	9a408ea041350f74d326286f73cd246ee5c4d062
@@ -0,0 +1,707 @@
+/* PurpleWrapper - A .NET (CLR) wrapper for libpurple
+ *
+ * Purple is the legal property of its developers, whose names are too numerous
+ * to list here.  Please refer to the COPYRIGHT file distributed with this
+ * source distribution.
+ *
+ * This program 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.
+ *
+ * This program 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 this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02111-1301  USA
+ */
+
+/*
+ * This file was auto-generated from the libpurple header files to provide a
+ * clean interface between .NET/CLR and the unmanaged C library libpurple.
+ *
+ * This is the second major commit of the code.
+ * Next things:
+ *  - A few of the .h files have anonymous parameter names (eg: void cat(int, int).
+ *    This program will need to assign these parameters names.
+ *  - Function pointers inside structs aren't translated correctly into C#.
+ *  - Two places there are specific-length arrays (eg: char hostname[256]). The parser
+ *    does not detect them as an array.
+ */
+
+using System;
+using System.Collections.Generic;
+using System.Runtime.InteropServices;
+
+namespace PurpleWrapper
+{
+
+	/*
+	 * File: plugin.h
+	 * Structure: PurplePluginInfo
+	 */
+	public class PurplePluginInfo : UnmanagedWrapper<_PurplePluginInfo>
+	{
+		public PurplePluginInfo()
+		{
+		}
+
+		public PurplePluginInfo(IntPtr reference)
+		{
+			this.Reference = reference;
+			this.Data = (_PurplePluginInfo)Marshal.PtrToStructure(this.Reference, typeof(_PurplePluginInfo));
+		}
+
+		/*
+		 * Argument Name: magic
+		 * Argument Type: unsigned int
+		 * Argument Category: Native
+		 */
+		public uint magic
+		{
+			get
+			{
+				return this.Data.magic;
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				this.Data.magic = value;
+			}
+		}
+
+		/*
+		 * Argument Name: major_version
+		 * Argument Type: unsigned int
+		 * Argument Category: Native
+		 */
+		public uint major_version
+		{
+			get
+			{
+				return this.Data.major_version;
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				this.Data.major_version = value;
+			}
+		}
+
+		/*
+		 * Argument Name: minor_version
+		 * Argument Type: unsigned int
+		 * Argument Category: Native
+		 */
+		public uint minor_version
+		{
+			get
+			{
+				return this.Data.minor_version;
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				this.Data.minor_version = value;
+			}
+		}
+
+		/*
+		 * Argument Name: type
+		 * Argument Type: PurplePluginType
+		 * Argument Category: KnownEnum
+		 */
+		public Plugin.PurplePluginType type
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: ui_requirement
+		 * Argument Type: char *
+		 * Argument Category: Native
+		 */
+		public string ui_requirement
+		{
+			get
+			{
+				return this.Data.ui_requirement;
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				this.Data.ui_requirement = value;
+			}
+		}
+
+		/*
+		 * Argument Name: flags
+		 * Argument Type: unsigned long
+		 * Argument Category: Native
+		 */
+		public ulong flags
+		{
+			get
+			{
+				return this.Data.flags;
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				this.Data.flags = value;
+			}
+		}
+
+		/*
+		 * Argument Name: dependencies
+		 * Argument Type: GList *
+		 * Argument Category: PointerToGList
+		 */
+		/*
+		 * Could not generate a wrapper for PurplePluginInfo.dependencies in file "plugin.h".
+		 * Message: Unable to provide a type for GList as no function information was provided in code.
+		 */
+
+		/*
+		 * Argument Name: priority
+		 * Argument Type: PurplePluginPriority
+		 * Argument Category: Native
+		 */
+		public int priority
+		{
+			get
+			{
+				return this.Data.priority;
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				this.Data.priority = value;
+			}
+		}
+
+		/*
+		 * Argument Name: id
+		 * Argument Type: char *
+		 * Argument Category: Native
+		 */
+		public string id
+		{
+			get
+			{
+				return this.Data.id;
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				this.Data.id = value;
+			}
+		}
+
+		/*
+		 * Argument Name: name
+		 * Argument Type: char *
+		 * Argument Category: Native
+		 */
+		public string name
+		{
+			get
+			{
+				return this.Data.name;
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				this.Data.name = value;
+			}
+		}
+
+		/*
+		 * Argument Name: version
+		 * Argument Type: char *
+		 * Argument Category: Native
+		 */
+		public string version
+		{
+			get
+			{
+				return this.Data.version;
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				this.Data.version = value;
+			}
+		}
+
+		/*
+		 * Argument Name: summary
+		 * Argument Type: char *
+		 * Argument Category: Native
+		 */
+		public string summary
+		{
+			get
+			{
+				return this.Data.summary;
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				this.Data.summary = value;
+			}
+		}
+
+		/*
+		 * Argument Name: description
+		 * Argument Type: char *
+		 * Argument Category: Native
+		 */
+		public string description
+		{
+			get
+			{
+				return this.Data.description;
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				this.Data.description = value;
+			}
+		}
+
+		/*
+		 * Argument Name: author
+		 * Argument Type: char *
+		 * Argument Category: Native
+		 */
+		public string author
+		{
+			get
+			{
+				return this.Data.author;
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				this.Data.author = value;
+			}
+		}
+
+		/*
+		 * Argument Name: homepage
+		 * Argument Type: char *
+		 * Argument Category: Native
+		 */
+		public string homepage
+		{
+			get
+			{
+				return this.Data.homepage;
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				this.Data.homepage = value;
+			}
+		}
+
+		/*
+		 * Argument Name: load
+		 * Argument Type: gboolean
+		 * Argument Category: Native
+		 */
+		public IntPtr load
+		{
+			get
+			{
+				return this.Data.load;
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				this.Data.load = value;
+			}
+		}
+
+		/*
+		 * Argument Name: unload
+		 * Argument Type: gboolean
+		 * Argument Category: Native
+		 */
+		public IntPtr unload
+		{
+			get
+			{
+				return this.Data.unload;
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				this.Data.unload = value;
+			}
+		}
+
+		/*
+		 * Argument Name: destroy
+		 * Argument Type: void
+		 * Argument Category: Void
+		 */
+		public IntPtr destroy
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: ui_info
+		 * Argument Type: void *
+		 * Argument Category: VoidPointer
+		 */
+		public IntPtr ui_info
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: extra_info
+		 * Argument Type: void *
+		 * Argument Category: VoidPointer
+		 */
+		public IntPtr extra_info
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: prefs_info
+		 * Argument Type: PurplePluginUiInfo *
+		 * Argument Category: PointerToKnownStruct
+		 */
+		public PurplePluginUiInfo prefs_info
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: actions
+		 * Argument Type: GList *
+		 * Argument Category: PointerToGList
+		 */
+		public IntPtr actions
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: _purple_reserved1
+		 * Argument Type: void
+		 * Argument Category: Void
+		 */
+		public IntPtr _purple_reserved1
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: _purple_reserved2
+		 * Argument Type: void
+		 * Argument Category: Void
+		 */
+		public IntPtr _purple_reserved2
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: _purple_reserved3
+		 * Argument Type: void
+		 * Argument Category: Void
+		 */
+		public IntPtr _purple_reserved3
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: _purple_reserved4
+		 * Argument Type: void
+		 * Argument Category: Void
+		 */
+		public IntPtr _purple_reserved4
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+	}
+
+
+	[StructLayout(LayoutKind.Sequential)]
+	public class _PurplePluginInfo
+	{
+		/*
+		 * unsigned int magic
+		 */
+		public uint magic;
+
+		/*
+		 * unsigned int major_version
+		 */
+		public uint major_version;
+
+		/*
+		 * unsigned int minor_version
+		 */
+		public uint minor_version;
+
+		/*
+		 * PurplePluginType type
+		 */
+		public Plugin.PurplePluginType type;
+
+		/*
+		 * char * ui_requirement
+		 */
+		public string ui_requirement;
+
+		/*
+		 * unsigned long flags
+		 */
+		public ulong flags;
+
+		/*
+		 * GList * dependencies
+		 */
+		public IntPtr dependencies;
+
+		/*
+		 * PurplePluginPriority priority
+		 */
+		public int priority;
+
+		/*
+		 * char * id
+		 */
+		public string id;
+
+		/*
+		 * char * name
+		 */
+		public string name;
+
+		/*
+		 * char * version
+		 */
+		public string version;
+
+		/*
+		 * char * summary
+		 */
+		public string summary;
+
+		/*
+		 * char * description
+		 */
+		public string description;
+
+		/*
+		 * char * author
+		 */
+		public string author;
+
+		/*
+		 * char * homepage
+		 */
+		public string homepage;
+
+		/*
+		 * gboolean (*load)(PurplePlugin * plugin)
+		 */
+		public IntPtr load;
+
+		/*
+		 * gboolean (*unload)(PurplePlugin * plugin)
+		 */
+		public IntPtr unload;
+
+		/*
+		 * void (*destroy)(PurplePlugin * plugin)
+		 */
+		public IntPtr destroy;
+
+		/*
+		 * void * ui_info
+		 */
+		public IntPtr ui_info;
+
+		/*
+		 * void * extra_info
+		 */
+		public IntPtr extra_info;
+
+		/*
+		 * PurplePluginUiInfo * prefs_info
+		 */
+		public IntPtr prefs_info;
+
+		/*
+		 * GList * (*actions)(PurplePlugin * plugin, gpointer context)
+		 */
+		public IntPtr actions;
+
+		/*
+		 * void (*_purple_reserved1)()
+		 */
+		public IntPtr _purple_reserved1;
+
+		/*
+		 * void (*_purple_reserved2)()
+		 */
+		public IntPtr _purple_reserved2;
+
+		/*
+		 * void (*_purple_reserved3)()
+		 */
+		public IntPtr _purple_reserved3;
+
+		/*
+		 * void (*_purple_reserved4)()
+		 */
+		public IntPtr _purple_reserved4;
+
+	}
+
+}
+
============================================================
--- libpurple/wrapper/PurplePluginLoaderInfo.cs	2bbbf5a587fe384be8976e0bae6d9f5bcf8049af
+++ libpurple/wrapper/PurplePluginLoaderInfo.cs	2bbbf5a587fe384be8976e0bae6d9f5bcf8049af
@@ -0,0 +1,282 @@
+/* PurpleWrapper - A .NET (CLR) wrapper for libpurple
+ *
+ * Purple is the legal property of its developers, whose names are too numerous
+ * to list here.  Please refer to the COPYRIGHT file distributed with this
+ * source distribution.
+ *
+ * This program 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.
+ *
+ * This program 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 this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02111-1301  USA
+ */
+
+/*
+ * This file was auto-generated from the libpurple header files to provide a
+ * clean interface between .NET/CLR and the unmanaged C library libpurple.
+ *
+ * This is the second major commit of the code.
+ * Next things:
+ *  - A few of the .h files have anonymous parameter names (eg: void cat(int, int).
+ *    This program will need to assign these parameters names.
+ *  - Function pointers inside structs aren't translated correctly into C#.
+ *  - Two places there are specific-length arrays (eg: char hostname[256]). The parser
+ *    does not detect them as an array.
+ */
+
+using System;
+using System.Collections.Generic;
+using System.Runtime.InteropServices;
+
+namespace PurpleWrapper
+{
+
+	/*
+	 * File: plugin.h
+	 * Structure: PurplePluginLoaderInfo
+	 */
+	public class PurplePluginLoaderInfo : UnmanagedWrapper<_PurplePluginLoaderInfo>
+	{
+		public PurplePluginLoaderInfo()
+		{
+		}
+
+		public PurplePluginLoaderInfo(IntPtr reference)
+		{
+			this.Reference = reference;
+			this.Data = (_PurplePluginLoaderInfo)Marshal.PtrToStructure(this.Reference, typeof(_PurplePluginLoaderInfo));
+		}
+
+		/*
+		 * Argument Name: exts
+		 * Argument Type: GList *
+		 * Argument Category: PointerToGList
+		 */
+		/*
+		 * Could not generate a wrapper for PurplePluginLoaderInfo.exts in file "plugin.h".
+		 * Message: Unable to provide a type for GList as no function information was provided in code.
+		 */
+
+		/*
+		 * Argument Name: probe
+		 * Argument Type: gboolean
+		 * Argument Category: Native
+		 */
+		public IntPtr probe
+		{
+			get
+			{
+				return this.Data.probe;
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				this.Data.probe = value;
+			}
+		}
+
+		/*
+		 * Argument Name: load
+		 * Argument Type: gboolean
+		 * Argument Category: Native
+		 */
+		public IntPtr load
+		{
+			get
+			{
+				return this.Data.load;
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				this.Data.load = value;
+			}
+		}
+
+		/*
+		 * Argument Name: unload
+		 * Argument Type: gboolean
+		 * Argument Category: Native
+		 */
+		public IntPtr unload
+		{
+			get
+			{
+				return this.Data.unload;
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				this.Data.unload = value;
+			}
+		}
+
+		/*
+		 * Argument Name: destroy
+		 * Argument Type: void
+		 * Argument Category: Void
+		 */
+		public IntPtr destroy
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: _purple_reserved1
+		 * Argument Type: void
+		 * Argument Category: Void
+		 */
+		public IntPtr _purple_reserved1
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: _purple_reserved2
+		 * Argument Type: void
+		 * Argument Category: Void
+		 */
+		public IntPtr _purple_reserved2
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: _purple_reserved3
+		 * Argument Type: void
+		 * Argument Category: Void
+		 */
+		public IntPtr _purple_reserved3
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: _purple_reserved4
+		 * Argument Type: void
+		 * Argument Category: Void
+		 */
+		public IntPtr _purple_reserved4
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+	}
+
+
+	[StructLayout(LayoutKind.Sequential)]
+	public class _PurplePluginLoaderInfo
+	{
+		/*
+		 * GList * exts
+		 */
+		public IntPtr exts;
+
+		/*
+		 * gboolean (*probe)(PurplePlugin * plugin)
+		 */
+		public IntPtr probe;
+
+		/*
+		 * gboolean (*load)(PurplePlugin * plugin)
+		 */
+		public IntPtr load;
+
+		/*
+		 * gboolean (*unload)(PurplePlugin * plugin)
+		 */
+		public IntPtr unload;
+
+		/*
+		 * void (*destroy)(PurplePlugin * plugin)
+		 */
+		public IntPtr destroy;
+
+		/*
+		 * void (*_purple_reserved1)()
+		 */
+		public IntPtr _purple_reserved1;
+
+		/*
+		 * void (*_purple_reserved2)()
+		 */
+		public IntPtr _purple_reserved2;
+
+		/*
+		 * void (*_purple_reserved3)()
+		 */
+		public IntPtr _purple_reserved3;
+
+		/*
+		 * void (*_purple_reserved4)()
+		 */
+		public IntPtr _purple_reserved4;
+
+	}
+
+}
+
============================================================
--- libpurple/wrapper/PurplePluginProtocolInfo.cs	52047447980ddc0a97a6b6e430482bb2309c214f
+++ libpurple/wrapper/PurplePluginProtocolInfo.cs	52047447980ddc0a97a6b6e430482bb2309c214f
@@ -0,0 +1,1765 @@
+/* PurpleWrapper - A .NET (CLR) wrapper for libpurple
+ *
+ * Purple is the legal property of its developers, whose names are too numerous
+ * to list here.  Please refer to the COPYRIGHT file distributed with this
+ * source distribution.
+ *
+ * This program 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.
+ *
+ * This program 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 this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02111-1301  USA
+ */
+
+/*
+ * This file was auto-generated from the libpurple header files to provide a
+ * clean interface between .NET/CLR and the unmanaged C library libpurple.
+ *
+ * This is the second major commit of the code.
+ * Next things:
+ *  - A few of the .h files have anonymous parameter names (eg: void cat(int, int).
+ *    This program will need to assign these parameters names.
+ *  - Function pointers inside structs aren't translated correctly into C#.
+ *  - Two places there are specific-length arrays (eg: char hostname[256]). The parser
+ *    does not detect them as an array.
+ */
+
+using System;
+using System.Collections.Generic;
+using System.Runtime.InteropServices;
+
+namespace PurpleWrapper
+{
+
+	/*
+	 * File: prpl.h
+	 * Structure: PurplePluginProtocolInfo
+	 */
+	public class PurplePluginProtocolInfo : UnmanagedWrapper<_PurplePluginProtocolInfo>
+	{
+		public PurplePluginProtocolInfo()
+		{
+		}
+
+		public PurplePluginProtocolInfo(IntPtr reference)
+		{
+			this.Reference = reference;
+			this.Data = (_PurplePluginProtocolInfo)Marshal.PtrToStructure(this.Reference, typeof(_PurplePluginProtocolInfo));
+		}
+
+		/*
+		 * Argument Name: options
+		 * Argument Type: PurpleProtocolOptions
+		 * Argument Category: KnownEnum
+		 */
+		public Prpl.PurpleProtocolOptions options
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: user_splits
+		 * Argument Type: GList *
+		 * Argument Category: PointerToGList
+		 */
+		/*
+		 * Could not generate a wrapper for PurplePluginProtocolInfo.user_splits in file "prpl.h".
+		 * Message: Unable to provide a type for GList as no function information was provided in code.
+		 */
+
+		/*
+		 * Argument Name: protocol_options
+		 * Argument Type: GList *
+		 * Argument Category: PointerToGList
+		 */
+		/*
+		 * Could not generate a wrapper for PurplePluginProtocolInfo.protocol_options in file "prpl.h".
+		 * Message: Unable to provide a type for GList as no function information was provided in code.
+		 */
+
+		/*
+		 * Argument Name: icon_spec
+		 * Argument Type: PurpleBuddyIconSpec
+		 * Argument Category: KnownStruct
+		 */
+		/*
+		 * Could not generate a wrapper for PurplePluginProtocolInfo.icon_spec in file "prpl.h".
+		 * Message: The struct contains an object that resolves to a function that is not a function pointer (PurpleBuddyIconSpec icon_spec).
+		 */
+
+		/*
+		 * Argument Name: list_icon
+		 * Argument Type: const char *
+		 * Argument Category: PointerToUnknownStruct
+		 */
+		public IntPtr list_icon
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: list_emblem
+		 * Argument Type: const char *
+		 * Argument Category: PointerToUnknownStruct
+		 */
+		public IntPtr list_emblem
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: status_text
+		 * Argument Type: char *
+		 * Argument Category: Native
+		 */
+		public IntPtr status_text
+		{
+			get
+			{
+				return this.Data.status_text;
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				this.Data.status_text = value;
+			}
+		}
+
+		/*
+		 * Argument Name: tooltip_text
+		 * Argument Type: void
+		 * Argument Category: Void
+		 */
+		public IntPtr tooltip_text
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: status_types
+		 * Argument Type: GList *
+		 * Argument Category: PointerToGList
+		 */
+		public IntPtr status_types
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: blist_node_menu
+		 * Argument Type: GList *
+		 * Argument Category: PointerToGList
+		 */
+		public IntPtr blist_node_menu
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: chat_info
+		 * Argument Type: GList *
+		 * Argument Category: PointerToGList
+		 */
+		public IntPtr chat_info
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: chat_info_defaults
+		 * Argument Type: GHashTable *
+		 * Argument Category: PointerToGHashTable
+		 */
+		public IntPtr chat_info_defaults
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: login
+		 * Argument Type: void
+		 * Argument Category: Void
+		 */
+		public IntPtr login
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: close
+		 * Argument Type: void
+		 * Argument Category: Void
+		 */
+		public IntPtr close
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: send_im
+		 * Argument Type: int
+		 * Argument Category: Native
+		 */
+		public IntPtr send_im
+		{
+			get
+			{
+				return this.Data.send_im;
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				this.Data.send_im = value;
+			}
+		}
+
+		/*
+		 * Argument Name: set_info
+		 * Argument Type: void
+		 * Argument Category: Void
+		 */
+		public IntPtr set_info
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: send_typing
+		 * Argument Type: unsigned int
+		 * Argument Category: Native
+		 */
+		public IntPtr send_typing
+		{
+			get
+			{
+				return this.Data.send_typing;
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				this.Data.send_typing = value;
+			}
+		}
+
+		/*
+		 * Argument Name: get_info
+		 * Argument Type: void
+		 * Argument Category: Void
+		 */
+		public IntPtr get_info
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: set_status
+		 * Argument Type: void
+		 * Argument Category: Void
+		 */
+		public IntPtr set_status
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: set_idle
+		 * Argument Type: void
+		 * Argument Category: Void
+		 */
+		public IntPtr set_idle
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: change_passwd
+		 * Argument Type: void
+		 * Argument Category: Void
+		 */
+		public IntPtr change_passwd
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: add_buddy
+		 * Argument Type: void
+		 * Argument Category: Void
+		 */
+		public IntPtr add_buddy
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: add_buddies
+		 * Argument Type: void
+		 * Argument Category: Void
+		 */
+		public IntPtr add_buddies
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: remove_buddy
+		 * Argument Type: void
+		 * Argument Category: Void
+		 */
+		public IntPtr remove_buddy
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: remove_buddies
+		 * Argument Type: void
+		 * Argument Category: Void
+		 */
+		public IntPtr remove_buddies
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: add_permit
+		 * Argument Type: void
+		 * Argument Category: Void
+		 */
+		public IntPtr add_permit
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: add_deny
+		 * Argument Type: void
+		 * Argument Category: Void
+		 */
+		public IntPtr add_deny
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: rem_permit
+		 * Argument Type: void
+		 * Argument Category: Void
+		 */
+		public IntPtr rem_permit
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: rem_deny
+		 * Argument Type: void
+		 * Argument Category: Void
+		 */
+		public IntPtr rem_deny
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: set_permit_deny
+		 * Argument Type: void
+		 * Argument Category: Void
+		 */
+		public IntPtr set_permit_deny
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: join_chat
+		 * Argument Type: void
+		 * Argument Category: Void
+		 */
+		public IntPtr join_chat
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: reject_chat
+		 * Argument Type: void
+		 * Argument Category: Void
+		 */
+		public IntPtr reject_chat
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: get_chat_name
+		 * Argument Type: char *
+		 * Argument Category: Native
+		 */
+		public IntPtr get_chat_name
+		{
+			get
+			{
+				return this.Data.get_chat_name;
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				this.Data.get_chat_name = value;
+			}
+		}
+
+		/*
+		 * Argument Name: chat_invite
+		 * Argument Type: void
+		 * Argument Category: Void
+		 */
+		public IntPtr chat_invite
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: chat_leave
+		 * Argument Type: void
+		 * Argument Category: Void
+		 */
+		public IntPtr chat_leave
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: chat_whisper
+		 * Argument Type: void
+		 * Argument Category: Void
+		 */
+		public IntPtr chat_whisper
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: chat_send
+		 * Argument Type: int
+		 * Argument Category: Native
+		 */
+		public IntPtr chat_send
+		{
+			get
+			{
+				return this.Data.chat_send;
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				this.Data.chat_send = value;
+			}
+		}
+
+		/*
+		 * Argument Name: keepalive
+		 * Argument Type: void
+		 * Argument Category: Void
+		 */
+		public IntPtr keepalive
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: register_user
+		 * Argument Type: void
+		 * Argument Category: Void
+		 */
+		public IntPtr register_user
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: get_cb_info
+		 * Argument Type: void
+		 * Argument Category: Void
+		 */
+		public IntPtr get_cb_info
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: get_cb_away
+		 * Argument Type: void
+		 * Argument Category: Void
+		 */
+		public IntPtr get_cb_away
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: alias_buddy
+		 * Argument Type: void
+		 * Argument Category: Void
+		 */
+		public IntPtr alias_buddy
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: group_buddy
+		 * Argument Type: void
+		 * Argument Category: Void
+		 */
+		public IntPtr group_buddy
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: rename_group
+		 * Argument Type: void
+		 * Argument Category: Void
+		 */
+		public IntPtr rename_group
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: buddy_free
+		 * Argument Type: void
+		 * Argument Category: Void
+		 */
+		public IntPtr buddy_free
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: convo_closed
+		 * Argument Type: void
+		 * Argument Category: Void
+		 */
+		public IntPtr convo_closed
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: normalize
+		 * Argument Type: const char *
+		 * Argument Category: PointerToUnknownStruct
+		 */
+		public IntPtr normalize
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: set_buddy_icon
+		 * Argument Type: void
+		 * Argument Category: Void
+		 */
+		public IntPtr set_buddy_icon
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: remove_group
+		 * Argument Type: void
+		 * Argument Category: Void
+		 */
+		public IntPtr remove_group
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: get_cb_real_name
+		 * Argument Type: char *
+		 * Argument Category: Native
+		 */
+		public IntPtr get_cb_real_name
+		{
+			get
+			{
+				return this.Data.get_cb_real_name;
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				this.Data.get_cb_real_name = value;
+			}
+		}
+
+		/*
+		 * Argument Name: set_chat_topic
+		 * Argument Type: void
+		 * Argument Category: Void
+		 */
+		public IntPtr set_chat_topic
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: find_blist_chat
+		 * Argument Type: PurpleChat *
+		 * Argument Category: PointerToKnownStruct
+		 */
+		public IntPtr find_blist_chat
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: roomlist_get_list
+		 * Argument Type: PurpleRoomlist *
+		 * Argument Category: PointerToKnownStruct
+		 */
+		public IntPtr roomlist_get_list
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: roomlist_cancel
+		 * Argument Type: void
+		 * Argument Category: Void
+		 */
+		public IntPtr roomlist_cancel
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: roomlist_expand_category
+		 * Argument Type: void
+		 * Argument Category: Void
+		 */
+		public IntPtr roomlist_expand_category
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: can_receive_file
+		 * Argument Type: gboolean
+		 * Argument Category: Native
+		 */
+		public IntPtr can_receive_file
+		{
+			get
+			{
+				return this.Data.can_receive_file;
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				this.Data.can_receive_file = value;
+			}
+		}
+
+		/*
+		 * Argument Name: send_file
+		 * Argument Type: void
+		 * Argument Category: Void
+		 */
+		public IntPtr send_file
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: new_xfer
+		 * Argument Type: PurpleXfer *
+		 * Argument Category: PointerToKnownStruct
+		 */
+		public IntPtr new_xfer
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: offline_message
+		 * Argument Type: gboolean
+		 * Argument Category: Native
+		 */
+		public IntPtr offline_message
+		{
+			get
+			{
+				return this.Data.offline_message;
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				this.Data.offline_message = value;
+			}
+		}
+
+		/*
+		 * Argument Name: whiteboard_prpl_ops
+		 * Argument Type: PurpleWhiteboardPrplOps *
+		 * Argument Category: PointerToKnownStruct
+		 */
+		public PurpleWhiteboardPrplOps whiteboard_prpl_ops
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: send_raw
+		 * Argument Type: int
+		 * Argument Category: Native
+		 */
+		public IntPtr send_raw
+		{
+			get
+			{
+				return this.Data.send_raw;
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				this.Data.send_raw = value;
+			}
+		}
+
+		/*
+		 * Argument Name: roomlist_room_serialize
+		 * Argument Type: char *
+		 * Argument Category: Native
+		 */
+		public IntPtr roomlist_room_serialize
+		{
+			get
+			{
+				return this.Data.roomlist_room_serialize;
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				this.Data.roomlist_room_serialize = value;
+			}
+		}
+
+		/*
+		 * Argument Name: unregister_user
+		 * Argument Type: void
+		 * Argument Category: Void
+		 */
+		public IntPtr unregister_user
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: send_attention
+		 * Argument Type: gboolean
+		 * Argument Category: Native
+		 */
+		public IntPtr send_attention
+		{
+			get
+			{
+				return this.Data.send_attention;
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				this.Data.send_attention = value;
+			}
+		}
+
+		/*
+		 * Argument Name: get_attention_types
+		 * Argument Type: GList *
+		 * Argument Category: PointerToGList
+		 */
+		public IntPtr get_attention_types
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: struct_size
+		 * Argument Type: unsigned long
+		 * Argument Category: Native
+		 */
+		public ulong struct_size
+		{
+			get
+			{
+				return this.Data.struct_size;
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				this.Data.struct_size = value;
+			}
+		}
+
+		/*
+		 * Argument Name: get_account_text_table
+		 * Argument Type: GHashTable *
+		 * Argument Category: PointerToGHashTable
+		 */
+		public IntPtr get_account_text_table
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: initiate_media
+		 * Argument Type: gboolean
+		 * Argument Category: Native
+		 */
+		public IntPtr initiate_media
+		{
+			get
+			{
+				return this.Data.initiate_media;
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				this.Data.initiate_media = value;
+			}
+		}
+
+		/*
+		 * Argument Name: get_media_caps
+		 * Argument Type: PurpleMediaCaps
+		 * Argument Category: KnownEnum
+		 */
+		public IntPtr get_media_caps
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+	}
+
+
+	[StructLayout(LayoutKind.Sequential)]
+	public class _PurplePluginProtocolInfo
+	{
+		/*
+		 * PurpleProtocolOptions options
+		 */
+		public Prpl.PurpleProtocolOptions options;
+
+		/*
+		 * GList * user_splits
+		 */
+		public IntPtr user_splits;
+
+		/*
+		 * GList * protocol_options
+		 */
+		public IntPtr protocol_options;
+
+		/*
+		 * PurpleBuddyIconSpec icon_spec
+		 */
+		/*
+		 * Could not generate a wrapper for PurplePluginProtocolInfo.icon_spec in file "prpl.h".
+		 * Message: The struct contains an object that resolves to a function that is not a function pointer (PurpleBuddyIconSpec icon_spec).
+		 */
+
+		/*
+		 * const char * (*list_icon)(PurpleAccount * account, PurpleBuddy * buddy)
+		 */
+		public IntPtr list_icon;
+
+		/*
+		 * const char * (*list_emblem)(PurpleBuddy * buddy)
+		 */
+		public IntPtr list_emblem;
+
+		/*
+		 * char * (*status_text)(PurpleBuddy * buddy)
+		 */
+		public IntPtr status_text;
+
+		/*
+		 * void (*tooltip_text)(PurpleBuddy * buddy, PurpleNotifyUserInfo * user_info, gboolean full)
+		 */
+		public IntPtr tooltip_text;
+
+		/*
+		 * GList * (*status_types)(PurpleAccount * account)
+		 */
+		public IntPtr status_types;
+
+		/*
+		 * GList * (*blist_node_menu)(PurpleBlistNode * node)
+		 */
+		public IntPtr blist_node_menu;
+
+		/*
+		 * GList * (*chat_info)(PurpleConnection * )
+		 */
+		public IntPtr chat_info;
+
+		/*
+		 * GHashTable * (*chat_info_defaults)(PurpleConnection * , char * chat_name)
+		 */
+		public IntPtr chat_info_defaults;
+
+		/*
+		 * void (*login)(PurpleAccount * )
+		 */
+		public IntPtr login;
+
+		/*
+		 * void (*close)(PurpleConnection * )
+		 */
+		public IntPtr close;
+
+		/*
+		 * int (*send_im)(PurpleConnection * , char * who, char * message, PurpleMessageFlags flags)
+		 */
+		public IntPtr send_im;
+
+		/*
+		 * void (*set_info)(PurpleConnection * , char * info)
+		 */
+		public IntPtr set_info;
+
+		/*
+		 * unsigned int (*send_typing)(PurpleConnection * , char * name, PurpleTypingState state)
+		 */
+		public IntPtr send_typing;
+
+		/*
+		 * void (*get_info)(PurpleConnection * , char * who)
+		 */
+		public IntPtr get_info;
+
+		/*
+		 * void (*set_status)(PurpleAccount * account, PurpleStatus * status)
+		 */
+		public IntPtr set_status;
+
+		/*
+		 * void (*set_idle)(PurpleConnection * , int idletime)
+		 */
+		public IntPtr set_idle;
+
+		/*
+		 * void (*change_passwd)(PurpleConnection * , char * old_pass, char * new_pass)
+		 */
+		public IntPtr change_passwd;
+
+		/*
+		 * void (*add_buddy)(PurpleConnection * , PurpleBuddy * buddy, PurpleGroup * group)
+		 */
+		public IntPtr add_buddy;
+
+		/*
+		 * void (*add_buddies)(PurpleConnection * , GList * buddies, GList * groups)
+		 */
+		public IntPtr add_buddies;
+
+		/*
+		 * void (*remove_buddy)(PurpleConnection * , PurpleBuddy * buddy, PurpleGroup * group)
+		 */
+		public IntPtr remove_buddy;
+
+		/*
+		 * void (*remove_buddies)(PurpleConnection * , GList * buddies, GList * groups)
+		 */
+		public IntPtr remove_buddies;
+
+		/*
+		 * void (*add_permit)(PurpleConnection * , char * name)
+		 */
+		public IntPtr add_permit;
+
+		/*
+		 * void (*add_deny)(PurpleConnection * , char * name)
+		 */
+		public IntPtr add_deny;
+
+		/*
+		 * void (*rem_permit)(PurpleConnection * , char * name)
+		 */
+		public IntPtr rem_permit;
+
+		/*
+		 * void (*rem_deny)(PurpleConnection * , char * name)
+		 */
+		public IntPtr rem_deny;
+
+		/*
+		 * void (*set_permit_deny)(PurpleConnection * )
+		 */
+		public IntPtr set_permit_deny;
+
+		/*
+		 * void (*join_chat)(PurpleConnection * , GHashTable * components)
+		 */
+		public IntPtr join_chat;
+
+		/*
+		 * void (*reject_chat)(PurpleConnection * , GHashTable * components)
+		 */
+		public IntPtr reject_chat;
+
+		/*
+		 * char * (*get_chat_name)(GHashTable * components)
+		 */
+		public IntPtr get_chat_name;
+
+		/*
+		 * void (*chat_invite)(PurpleConnection * , int id, char * message, char * who)
+		 */
+		public IntPtr chat_invite;
+
+		/*
+		 * void (*chat_leave)(PurpleConnection * , int id)
+		 */
+		public IntPtr chat_leave;
+
+		/*
+		 * void (*chat_whisper)(PurpleConnection * , int id, char * who, char * message)
+		 */
+		public IntPtr chat_whisper;
+
+		/*
+		 * int (*chat_send)(PurpleConnection * , int id, char * message, PurpleMessageFlags flags)
+		 */
+		public IntPtr chat_send;
+
+		/*
+		 * void (*keepalive)(PurpleConnection * )
+		 */
+		public IntPtr keepalive;
+
+		/*
+		 * void (*register_user)(PurpleAccount * )
+		 */
+		public IntPtr register_user;
+
+		/*
+		 * void (*get_cb_info)(PurpleConnection * ,  , char * who)
+		 */
+		public IntPtr get_cb_info;
+
+		/*
+		 * void (*get_cb_away)(PurpleConnection * ,  , char * who)
+		 */
+		public IntPtr get_cb_away;
+
+		/*
+		 * void (*alias_buddy)(PurpleConnection * , char * who, char * alias)
+		 */
+		public IntPtr alias_buddy;
+
+		/*
+		 * void (*group_buddy)(PurpleConnection * , char * who, char * old_group, char * new_group)
+		 */
+		public IntPtr group_buddy;
+
+		/*
+		 * void (*rename_group)(PurpleConnection * , char * old_name, PurpleGroup * group, GList * moved_buddies)
+		 */
+		public IntPtr rename_group;
+
+		/*
+		 * void (*buddy_free)(PurpleBuddy * )
+		 */
+		public IntPtr buddy_free;
+
+		/*
+		 * void (*convo_closed)(PurpleConnection * , char * who)
+		 */
+		public IntPtr convo_closed;
+
+		/*
+		 * const char * (*normalize)(PurpleAccount * , char * who)
+		 */
+		public IntPtr normalize;
+
+		/*
+		 * void (*set_buddy_icon)(PurpleConnection * , PurpleStoredImage * img)
+		 */
+		public IntPtr set_buddy_icon;
+
+		/*
+		 * void (*remove_group)(PurpleConnection * gc, PurpleGroup * group)
+		 */
+		public IntPtr remove_group;
+
+		/*
+		 * char * (*get_cb_real_name)(PurpleConnection * gc, int id, char * who)
+		 */
+		public IntPtr get_cb_real_name;
+
+		/*
+		 * void (*set_chat_topic)(PurpleConnection * gc, int id, char * topic)
+		 */
+		public IntPtr set_chat_topic;
+
+		/*
+		 * PurpleChat * (*find_blist_chat)(PurpleAccount * account, char * name)
+		 */
+		public IntPtr find_blist_chat;
+
+		/*
+		 * PurpleRoomlist * (*roomlist_get_list)(PurpleConnection * gc)
+		 */
+		public IntPtr roomlist_get_list;
+
+		/*
+		 * void (*roomlist_cancel)(PurpleRoomlist * list)
+		 */
+		public IntPtr roomlist_cancel;
+
+		/*
+		 * void (*roomlist_expand_category)(PurpleRoomlist * list, PurpleRoomlistRoom * category)
+		 */
+		public IntPtr roomlist_expand_category;
+
+		/*
+		 * gboolean (*can_receive_file)(PurpleConnection * , char * who)
+		 */
+		public IntPtr can_receive_file;
+
+		/*
+		 * void (*send_file)(PurpleConnection * , char * who, char * filename)
+		 */
+		public IntPtr send_file;
+
+		/*
+		 * PurpleXfer * (*new_xfer)(PurpleConnection * , char * who)
+		 */
+		public IntPtr new_xfer;
+
+		/*
+		 * gboolean (*offline_message)(PurpleBuddy * buddy)
+		 */
+		public IntPtr offline_message;
+
+		/*
+		 * PurpleWhiteboardPrplOps * whiteboard_prpl_ops
+		 */
+		public IntPtr whiteboard_prpl_ops;
+
+		/*
+		 * int (*send_raw)(PurpleConnection * gc, char * buf, int len)
+		 */
+		public IntPtr send_raw;
+
+		/*
+		 * char * (*roomlist_room_serialize)(PurpleRoomlistRoom * room)
+		 */
+		public IntPtr roomlist_room_serialize;
+
+		/*
+		 * void (*unregister_user)(PurpleAccount * , PurpleAccountUnregistrationCb cb, void * user_data)
+		 */
+		public IntPtr unregister_user;
+
+		/*
+		 * gboolean (*send_attention)(PurpleConnection * gc, char * username, guint type)
+		 */
+		public IntPtr send_attention;
+
+		/*
+		 * GList * (*get_attention_types)(PurpleAccount * acct)
+		 */
+		public IntPtr get_attention_types;
+
+		/*
+		 * unsigned long struct_size
+		 */
+		public ulong struct_size;
+
+		/*
+		 * GHashTable * (*get_account_text_table)(PurpleAccount * account)
+		 */
+		public IntPtr get_account_text_table;
+
+		/*
+		 * gboolean (*initiate_media)(PurpleAccount * account, char * who, PurpleMediaSessionType type)
+		 */
+		public IntPtr initiate_media;
+
+		/*
+		 * PurpleMediaCaps (*get_media_caps)(PurpleAccount * account, char * who)
+		 */
+		public IntPtr get_media_caps;
+
+	}
+
+}
+
============================================================
--- libpurple/wrapper/PurplePluginUiInfo.cs	28cfac5c4ea61cf4127818102c78c370eb891d8e
+++ libpurple/wrapper/PurplePluginUiInfo.cs	28cfac5c4ea61cf4127818102c78c370eb891d8e
@@ -0,0 +1,242 @@
+/* PurpleWrapper - A .NET (CLR) wrapper for libpurple
+ *
+ * Purple is the legal property of its developers, whose names are too numerous
+ * to list here.  Please refer to the COPYRIGHT file distributed with this
+ * source distribution.
+ *
+ * This program 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.
+ *
+ * This program 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 this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02111-1301  USA
+ */
+
+/*
+ * This file was auto-generated from the libpurple header files to provide a
+ * clean interface between .NET/CLR and the unmanaged C library libpurple.
+ *
+ * This is the second major commit of the code.
+ * Next things:
+ *  - A few of the .h files have anonymous parameter names (eg: void cat(int, int).
+ *    This program will need to assign these parameters names.
+ *  - Function pointers inside structs aren't translated correctly into C#.
+ *  - Two places there are specific-length arrays (eg: char hostname[256]). The parser
+ *    does not detect them as an array.
+ */
+
+using System;
+using System.Collections.Generic;
+using System.Runtime.InteropServices;
+
+namespace PurpleWrapper
+{
+
+	/*
+	 * File: plugin.h
+	 * Structure: PurplePluginUiInfo
+	 */
+	public class PurplePluginUiInfo : UnmanagedWrapper<_PurplePluginUiInfo>
+	{
+		public PurplePluginUiInfo()
+		{
+		}
+
+		public PurplePluginUiInfo(IntPtr reference)
+		{
+			this.Reference = reference;
+			this.Data = (_PurplePluginUiInfo)Marshal.PtrToStructure(this.Reference, typeof(_PurplePluginUiInfo));
+		}
+
+		/*
+		 * Argument Name: get_plugin_pref_frame
+		 * Argument Type: PurplePluginPrefFrame *
+		 * Argument Category: PointerToUnknownStruct
+		 */
+		public IntPtr get_plugin_pref_frame
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: page_num
+		 * Argument Type: int
+		 * Argument Category: Native
+		 */
+		public int page_num
+		{
+			get
+			{
+				return this.Data.page_num;
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				this.Data.page_num = value;
+			}
+		}
+
+		/*
+		 * Argument Name: frame
+		 * Argument Type: PurplePluginPrefFrame *
+		 * Argument Category: PointerToUnknownStruct
+		 */
+		public /* Resolved as PointerToUnknownStruct to PurplePluginPrefFrame */ IntPtr frame
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: _purple_reserved1
+		 * Argument Type: void
+		 * Argument Category: Void
+		 */
+		public IntPtr _purple_reserved1
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: _purple_reserved2
+		 * Argument Type: void
+		 * Argument Category: Void
+		 */
+		public IntPtr _purple_reserved2
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: _purple_reserved3
+		 * Argument Type: void
+		 * Argument Category: Void
+		 */
+		public IntPtr _purple_reserved3
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: _purple_reserved4
+		 * Argument Type: void
+		 * Argument Category: Void
+		 */
+		public IntPtr _purple_reserved4
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+	}
+
+
+	[StructLayout(LayoutKind.Sequential)]
+	public class _PurplePluginUiInfo
+	{
+		/*
+		 * PurplePluginPrefFrame * (*get_plugin_pref_frame)(PurplePlugin * plugin)
+		 */
+		public IntPtr get_plugin_pref_frame;
+
+		/*
+		 * int page_num
+		 */
+		public int page_num;
+
+		/*
+		 * PurplePluginPrefFrame * frame
+		 */
+		public IntPtr frame;
+
+		/*
+		 * void (*_purple_reserved1)()
+		 */
+		public IntPtr _purple_reserved1;
+
+		/*
+		 * void (*_purple_reserved2)()
+		 */
+		public IntPtr _purple_reserved2;
+
+		/*
+		 * void (*_purple_reserved3)()
+		 */
+		public IntPtr _purple_reserved3;
+
+		/*
+		 * void (*_purple_reserved4)()
+		 */
+		public IntPtr _purple_reserved4;
+
+	}
+
+}
+
============================================================
--- libpurple/wrapper/PurplePounce.cs	be78ae6afcc02e9e5f588727ddeff22d5c13c185
+++ libpurple/wrapper/PurplePounce.cs	be78ae6afcc02e9e5f588727ddeff22d5c13c185
@@ -0,0 +1,257 @@
+/* PurpleWrapper - A .NET (CLR) wrapper for libpurple
+ *
+ * Purple is the legal property of its developers, whose names are too numerous
+ * to list here.  Please refer to the COPYRIGHT file distributed with this
+ * source distribution.
+ *
+ * This program 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.
+ *
+ * This program 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 this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02111-1301  USA
+ */
+
+/*
+ * This file was auto-generated from the libpurple header files to provide a
+ * clean interface between .NET/CLR and the unmanaged C library libpurple.
+ *
+ * This is the second major commit of the code.
+ * Next things:
+ *  - A few of the .h files have anonymous parameter names (eg: void cat(int, int).
+ *    This program will need to assign these parameters names.
+ *  - Function pointers inside structs aren't translated correctly into C#.
+ *  - Two places there are specific-length arrays (eg: char hostname[256]). The parser
+ *    does not detect them as an array.
+ */
+
+using System;
+using System.Collections.Generic;
+using System.Runtime.InteropServices;
+
+namespace PurpleWrapper
+{
+
+	/*
+	 * File: pounce.h
+	 * Structure: PurplePounce
+	 */
+	public class PurplePounce : UnmanagedWrapper<_PurplePounce>
+	{
+		public PurplePounce()
+		{
+		}
+
+		public PurplePounce(IntPtr reference)
+		{
+			this.Reference = reference;
+			this.Data = (_PurplePounce)Marshal.PtrToStructure(this.Reference, typeof(_PurplePounce));
+		}
+
+		/*
+		 * Argument Name: ui_type
+		 * Argument Type: char *
+		 * Argument Category: Native
+		 */
+		public string ui_type
+		{
+			get
+			{
+				return this.Data.ui_type;
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				this.Data.ui_type = value;
+			}
+		}
+
+		/*
+		 * Argument Name: events
+		 * Argument Type: PurplePounceEvent
+		 * Argument Category: KnownEnum
+		 */
+		public Pounce.PurplePounceEvent events
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: options
+		 * Argument Type: PurplePounceOption
+		 * Argument Category: KnownEnum
+		 */
+		public Pounce.PurplePounceOption options
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: pouncer
+		 * Argument Type: PurpleAccount *
+		 * Argument Category: PointerToKnownStruct
+		 */
+		public PurpleAccount pouncer
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: pouncee
+		 * Argument Type: char *
+		 * Argument Category: Native
+		 */
+		public string pouncee
+		{
+			get
+			{
+				return this.Data.pouncee;
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				this.Data.pouncee = value;
+			}
+		}
+
+		/*
+		 * Argument Name: actions
+		 * Argument Type: GHashTable *
+		 * Argument Category: PointerToGHashTable
+		 */
+		/*
+		 * Could not generate a wrapper for PurplePounce.actions in file "pounce.h".
+		 * Message: Unable to provide a type for HashTable as no function information was provided in code.
+		 */
+
+		/*
+		 * Argument Name: save
+		 * Argument Type: gboolean
+		 * Argument Category: Native
+		 */
+		public bool save
+		{
+			get
+			{
+				return this.Data.save;
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				this.Data.save = value;
+			}
+		}
+
+		/*
+		 * Argument Name: data
+		 * Argument Type: void *
+		 * Argument Category: VoidPointer
+		 */
+		public IntPtr data
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+	}
+
+
+	[StructLayout(LayoutKind.Sequential)]
+	public class _PurplePounce
+	{
+		/*
+		 * char * ui_type
+		 */
+		public string ui_type;
+
+		/*
+		 * PurplePounceEvent events
+		 */
+		public Pounce.PurplePounceEvent events;
+
+		/*
+		 * PurplePounceOption options
+		 */
+		public Pounce.PurplePounceOption options;
+
+		/*
+		 * PurpleAccount * pouncer
+		 */
+		public IntPtr pouncer;
+
+		/*
+		 * char * pouncee
+		 */
+		public string pouncee;
+
+		/*
+		 * GHashTable * actions
+		 */
+		public IntPtr actions;
+
+		/*
+		 * gboolean save
+		 */
+		public bool save;
+
+		/*
+		 * void * data
+		 */
+		public IntPtr data;
+
+	}
+
+}
+
============================================================
--- libpurple/wrapper/PurpleRequestField.cs	64b2a748ba228a4abc2569bef834ee19e2b14100
+++ libpurple/wrapper/PurpleRequestField.cs	64b2a748ba228a4abc2569bef834ee19e2b14100
@@ -0,0 +1,372 @@
+/* PurpleWrapper - A .NET (CLR) wrapper for libpurple
+ *
+ * Purple is the legal property of its developers, whose names are too numerous
+ * to list here.  Please refer to the COPYRIGHT file distributed with this
+ * source distribution.
+ *
+ * This program 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.
+ *
+ * This program 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 this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02111-1301  USA
+ */
+
+/*
+ * This file was auto-generated from the libpurple header files to provide a
+ * clean interface between .NET/CLR and the unmanaged C library libpurple.
+ *
+ * This is the second major commit of the code.
+ * Next things:
+ *  - A few of the .h files have anonymous parameter names (eg: void cat(int, int).
+ *    This program will need to assign these parameters names.
+ *  - Function pointers inside structs aren't translated correctly into C#.
+ *  - Two places there are specific-length arrays (eg: char hostname[256]). The parser
+ *    does not detect them as an array.
+ */
+
+using System;
+using System.Collections.Generic;
+using System.Runtime.InteropServices;
+
+namespace PurpleWrapper
+{
+
+	/*
+	 * File: request.h
+	 * Structure: PurpleRequestField
+	 */
+	public class PurpleRequestField : UnmanagedWrapper<_PurpleRequestField>
+	{
+		public PurpleRequestField()
+		{
+		}
+
+		public PurpleRequestField(IntPtr reference)
+		{
+			this.Reference = reference;
+			this.Data = (_PurpleRequestField)Marshal.PtrToStructure(this.Reference, typeof(_PurpleRequestField));
+		}
+
+		/*
+		 * Argument Name: type
+		 * Argument Type: PurpleRequestFieldType
+		 * Argument Category: KnownEnum
+		 */
+		public Request.PurpleRequestFieldType type
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: group
+		 * Argument Type: PurpleRequestFieldGroup *
+		 * Argument Category: PointerToUnknownStruct
+		 */
+		public /* Resolved as PointerToUnknownStruct to PurpleRequestFieldGroup */ IntPtr group
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: id
+		 * Argument Type: char *
+		 * Argument Category: Native
+		 */
+		public string id
+		{
+			get
+			{
+				return this.Data.id;
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				this.Data.id = value;
+			}
+		}
+
+		/*
+		 * Argument Name: label
+		 * Argument Type: char *
+		 * Argument Category: Native
+		 */
+		public string label
+		{
+			get
+			{
+				return this.Data.label;
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				this.Data.label = value;
+			}
+		}
+
+		/*
+		 * Argument Name: type_hint
+		 * Argument Type: char *
+		 * Argument Category: Native
+		 */
+		public string type_hint
+		{
+			get
+			{
+				return this.Data.type_hint;
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				this.Data.type_hint = value;
+			}
+		}
+
+		/*
+		 * Argument Name: visible
+		 * Argument Type: gboolean
+		 * Argument Category: Native
+		 */
+		public bool visible
+		{
+			get
+			{
+				return this.Data.visible;
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				this.Data.visible = value;
+			}
+		}
+
+		/*
+		 * Argument Name: required
+		 * Argument Type: gboolean
+		 * Argument Category: Native
+		 */
+		public bool required
+		{
+			get
+			{
+				return this.Data.required;
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				this.Data.required = value;
+			}
+		}
+
+		/*
+		 * Argument Name: {
+		struct
+		{
+			gboolean multiline
+		 * Argument Type: union
+		 * Argument Category: InnerStruct
+		 */
+		/*
+		 * Could not generate a wrapper for PurpleRequestField.{
+		struct
+		{
+			gboolean multiline in file "request.h".
+		 * Message: The struct contains an inner-struct or inner-union and cannot be automatically wrapped.
+		 */
+
+		/*
+		 * Argument Name: masked
+		 * Argument Type: gboolean
+		 * Argument Category: Native
+		 */
+		public bool masked
+		{
+			get
+			{
+				return this.Data.masked;
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				this.Data.masked = value;
+			}
+		}
+
+		/*
+		 * Argument Name: editable
+		 * Argument Type: gboolean
+		 * Argument Category: Native
+		 */
+		public bool editable
+		{
+			get
+			{
+				return this.Data.editable;
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				this.Data.editable = value;
+			}
+		}
+
+		/*
+		 * Argument Name: default_value
+		 * Argument Type: char *
+		 * Argument Category: Native
+		 */
+		public string default_value
+		{
+			get
+			{
+				return this.Data.default_value;
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				this.Data.default_value = value;
+			}
+		}
+
+		/*
+		 * Argument Name: value
+		 * Argument Type: char *
+		 * Argument Category: Native
+		 */
+		public string value
+		{
+			get
+			{
+				return this.Data.value;
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				this.Data.value = value;
+			}
+		}
+
+	}
+
+
+	[StructLayout(LayoutKind.Sequential)]
+	public class _PurpleRequestField
+	{
+		/*
+		 * PurpleRequestFieldType type
+		 */
+		public Request.PurpleRequestFieldType type;
+
+		/*
+		 * PurpleRequestFieldGroup * group
+		 */
+		public IntPtr group;
+
+		/*
+		 * char * id
+		 */
+		public string id;
+
+		/*
+		 * char * label
+		 */
+		public string label;
+
+		/*
+		 * char * type_hint
+		 */
+		public string type_hint;
+
+		/*
+		 * gboolean visible
+		 */
+		public bool visible;
+
+		/*
+		 * gboolean required
+		 */
+		public bool required;
+
+		/*
+		 * union {
+		struct
+		{
+			gboolean multiline
+		 */
+		/*
+		 * Could not generate a wrapper for PurpleRequestField.{
+		struct
+		{
+			gboolean multiline in file "request.h".
+		 * Message: The struct contains an inner-struct or inner-union and cannot be automatically wrapped.
+		 */
+
+		/*
+		 * gboolean masked
+		 */
+		public bool masked;
+
+		/*
+		 * gboolean editable
+		 */
+		public bool editable;
+
+		/*
+		 * char * default_value
+		 */
+		public string default_value;
+
+		/*
+		 * char * value
+		 */
+		public string value;
+
+	}
+
+}
+
============================================================
--- libpurple/wrapper/PurpleRoomlist.cs	6bcfe00c95851429e05273eda22ad6a667192309
+++ libpurple/wrapper/PurpleRoomlist.cs	6bcfe00c95851429e05273eda22ad6a667192309
@@ -0,0 +1,222 @@
+/* PurpleWrapper - A .NET (CLR) wrapper for libpurple
+ *
+ * Purple is the legal property of its developers, whose names are too numerous
+ * to list here.  Please refer to the COPYRIGHT file distributed with this
+ * source distribution.
+ *
+ * This program 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.
+ *
+ * This program 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 this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02111-1301  USA
+ */
+
+/*
+ * This file was auto-generated from the libpurple header files to provide a
+ * clean interface between .NET/CLR and the unmanaged C library libpurple.
+ *
+ * This is the second major commit of the code.
+ * Next things:
+ *  - A few of the .h files have anonymous parameter names (eg: void cat(int, int).
+ *    This program will need to assign these parameters names.
+ *  - Function pointers inside structs aren't translated correctly into C#.
+ *  - Two places there are specific-length arrays (eg: char hostname[256]). The parser
+ *    does not detect them as an array.
+ */
+
+using System;
+using System.Collections.Generic;
+using System.Runtime.InteropServices;
+
+namespace PurpleWrapper
+{
+
+	/*
+	 * File: roomlist.h
+	 * Structure: PurpleRoomlist
+	 */
+	public class PurpleRoomlist : UnmanagedWrapper<_PurpleRoomlist>
+	{
+		public PurpleRoomlist()
+		{
+		}
+
+		public PurpleRoomlist(IntPtr reference)
+		{
+			this.Reference = reference;
+			this.Data = (_PurpleRoomlist)Marshal.PtrToStructure(this.Reference, typeof(_PurpleRoomlist));
+		}
+
+		/*
+		 * Argument Name: account
+		 * Argument Type: PurpleAccount *
+		 * Argument Category: PointerToKnownStruct
+		 */
+		public PurpleAccount account
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: fields
+		 * Argument Type: GList *
+		 * Argument Category: PointerToGList
+		 */
+		/*
+		 * Could not generate a wrapper for PurpleRoomlist.fields in file "roomlist.h".
+		 * Message: Unable to provide a type for GList as no function information was provided in code.
+		 */
+
+		/*
+		 * Argument Name: rooms
+		 * Argument Type: GList *
+		 * Argument Category: PointerToGList
+		 */
+		/*
+		 * Could not generate a wrapper for PurpleRoomlist.rooms in file "roomlist.h".
+		 * Message: Unable to provide a type for GList as no function information was provided in code.
+		 */
+
+		/*
+		 * Argument Name: in_progress
+		 * Argument Type: gboolean
+		 * Argument Category: Native
+		 */
+		public bool in_progress
+		{
+			get
+			{
+				return this.Data.in_progress;
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				this.Data.in_progress = value;
+			}
+		}
+
+		/*
+		 * Argument Name: ui_data
+		 * Argument Type: gpointer
+		 * Argument Category: VoidPointer
+		 */
+		public IntPtr ui_data
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: proto_data
+		 * Argument Type: gpointer
+		 * Argument Category: VoidPointer
+		 */
+		public IntPtr proto_data
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: ref
+		 * Argument Type: guint
+		 * Argument Category: Native
+		 */
+		public uint ref_
+		{
+			get
+			{
+				return this.Data.ref_;
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				this.Data.ref_ = value;
+			}
+		}
+
+	}
+
+
+	[StructLayout(LayoutKind.Sequential)]
+	public class _PurpleRoomlist
+	{
+		/*
+		 * PurpleAccount * account
+		 */
+		public IntPtr account;
+
+		/*
+		 * GList * fields
+		 */
+		public IntPtr fields;
+
+		/*
+		 * GList * rooms
+		 */
+		public IntPtr rooms;
+
+		/*
+		 * gboolean in_progress
+		 */
+		public bool in_progress;
+
+		/*
+		 * gpointer ui_data
+		 */
+		public IntPtr ui_data;
+
+		/*
+		 * gpointer proto_data
+		 */
+		public IntPtr proto_data;
+
+		/*
+		 * guint ref
+		 */
+		public uint ref_;
+
+	}
+
+}
+
============================================================
--- libpurple/wrapper/PurpleRoomlistField.cs	795b68f0be72d5e5978616bfe37c4ec690a0b596
+++ libpurple/wrapper/PurpleRoomlistField.cs	795b68f0be72d5e5978616bfe37c4ec690a0b596
@@ -0,0 +1,167 @@
+/* PurpleWrapper - A .NET (CLR) wrapper for libpurple
+ *
+ * Purple is the legal property of its developers, whose names are too numerous
+ * to list here.  Please refer to the COPYRIGHT file distributed with this
+ * source distribution.
+ *
+ * This program 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.
+ *
+ * This program 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 this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02111-1301  USA
+ */
+
+/*
+ * This file was auto-generated from the libpurple header files to provide a
+ * clean interface between .NET/CLR and the unmanaged C library libpurple.
+ *
+ * This is the second major commit of the code.
+ * Next things:
+ *  - A few of the .h files have anonymous parameter names (eg: void cat(int, int).
+ *    This program will need to assign these parameters names.
+ *  - Function pointers inside structs aren't translated correctly into C#.
+ *  - Two places there are specific-length arrays (eg: char hostname[256]). The parser
+ *    does not detect them as an array.
+ */
+
+using System;
+using System.Collections.Generic;
+using System.Runtime.InteropServices;
+
+namespace PurpleWrapper
+{
+
+	/*
+	 * File: roomlist.h
+	 * Structure: PurpleRoomlistField
+	 */
+	public class PurpleRoomlistField : UnmanagedWrapper<_PurpleRoomlistField>
+	{
+		public PurpleRoomlistField()
+		{
+		}
+
+		public PurpleRoomlistField(IntPtr reference)
+		{
+			this.Reference = reference;
+			this.Data = (_PurpleRoomlistField)Marshal.PtrToStructure(this.Reference, typeof(_PurpleRoomlistField));
+		}
+
+		/*
+		 * Argument Name: type
+		 * Argument Type: PurpleRoomlistFieldType
+		 * Argument Category: KnownEnum
+		 */
+		public Roomlist.PurpleRoomlistFieldType type
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: label
+		 * Argument Type: gchar *
+		 * Argument Category: Native
+		 */
+		public string label
+		{
+			get
+			{
+				return this.Data.label;
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				this.Data.label = value;
+			}
+		}
+
+		/*
+		 * Argument Name: name
+		 * Argument Type: gchar *
+		 * Argument Category: Native
+		 */
+		public string name
+		{
+			get
+			{
+				return this.Data.name;
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				this.Data.name = value;
+			}
+		}
+
+		/*
+		 * Argument Name: hidden
+		 * Argument Type: gboolean
+		 * Argument Category: Native
+		 */
+		public bool hidden
+		{
+			get
+			{
+				return this.Data.hidden;
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				this.Data.hidden = value;
+			}
+		}
+
+	}
+
+
+	[StructLayout(LayoutKind.Sequential)]
+	public class _PurpleRoomlistField
+	{
+		/*
+		 * PurpleRoomlistFieldType type
+		 */
+		public Roomlist.PurpleRoomlistFieldType type;
+
+		/*
+		 * gchar * label
+		 */
+		public string label;
+
+		/*
+		 * gchar * name
+		 */
+		public string name;
+
+		/*
+		 * gboolean hidden
+		 */
+		public bool hidden;
+
+	}
+
+}
+
============================================================
--- libpurple/wrapper/PurpleRoomlistRoom.cs	b7ebb018fd32b6757e105fff83e538f5ae1cb64a
+++ libpurple/wrapper/PurpleRoomlistRoom.cs	b7ebb018fd32b6757e105fff83e538f5ae1cb64a
@@ -0,0 +1,182 @@
+/* PurpleWrapper - A .NET (CLR) wrapper for libpurple
+ *
+ * Purple is the legal property of its developers, whose names are too numerous
+ * to list here.  Please refer to the COPYRIGHT file distributed with this
+ * source distribution.
+ *
+ * This program 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.
+ *
+ * This program 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 this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02111-1301  USA
+ */
+
+/*
+ * This file was auto-generated from the libpurple header files to provide a
+ * clean interface between .NET/CLR and the unmanaged C library libpurple.
+ *
+ * This is the second major commit of the code.
+ * Next things:
+ *  - A few of the .h files have anonymous parameter names (eg: void cat(int, int).
+ *    This program will need to assign these parameters names.
+ *  - Function pointers inside structs aren't translated correctly into C#.
+ *  - Two places there are specific-length arrays (eg: char hostname[256]). The parser
+ *    does not detect them as an array.
+ */
+
+using System;
+using System.Collections.Generic;
+using System.Runtime.InteropServices;
+
+namespace PurpleWrapper
+{
+
+	/*
+	 * File: roomlist.h
+	 * Structure: PurpleRoomlistRoom
+	 */
+	public class PurpleRoomlistRoom : UnmanagedWrapper<_PurpleRoomlistRoom>
+	{
+		public PurpleRoomlistRoom()
+		{
+		}
+
+		public PurpleRoomlistRoom(IntPtr reference)
+		{
+			this.Reference = reference;
+			this.Data = (_PurpleRoomlistRoom)Marshal.PtrToStructure(this.Reference, typeof(_PurpleRoomlistRoom));
+		}
+
+		/*
+		 * Argument Name: type
+		 * Argument Type: PurpleRoomlistRoomType
+		 * Argument Category: KnownEnum
+		 */
+		public Roomlist.PurpleRoomlistRoomType type
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: name
+		 * Argument Type: gchar *
+		 * Argument Category: Native
+		 */
+		public string name
+		{
+			get
+			{
+				return this.Data.name;
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				this.Data.name = value;
+			}
+		}
+
+		/*
+		 * Argument Name: fields
+		 * Argument Type: GList *
+		 * Argument Category: PointerToGList
+		 */
+		/*
+		 * Could not generate a wrapper for PurpleRoomlistRoom.fields in file "roomlist.h".
+		 * Message: Unable to provide a type for GList as no function information was provided in code.
+		 */
+
+		/*
+		 * Argument Name: parent
+		 * Argument Type: PurpleRoomlistRoom *
+		 * Argument Category: PointerToKnownStruct
+		 */
+		public PurpleRoomlistRoom parent
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: expanded_once
+		 * Argument Type: gboolean
+		 * Argument Category: Native
+		 */
+		public bool expanded_once
+		{
+			get
+			{
+				return this.Data.expanded_once;
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				this.Data.expanded_once = value;
+			}
+		}
+
+	}
+
+
+	[StructLayout(LayoutKind.Sequential)]
+	public class _PurpleRoomlistRoom
+	{
+		/*
+		 * PurpleRoomlistRoomType type
+		 */
+		public Roomlist.PurpleRoomlistRoomType type;
+
+		/*
+		 * gchar * name
+		 */
+		public string name;
+
+		/*
+		 * GList * fields
+		 */
+		public IntPtr fields;
+
+		/*
+		 * PurpleRoomlistRoom * parent
+		 */
+		public IntPtr parent;
+
+		/*
+		 * gboolean expanded_once
+		 */
+		public bool expanded_once;
+
+	}
+
+}
+
============================================================
--- libpurple/wrapper/PurpleRoomlistUiOps.cs	578ece8bee91e00abbf778d7fdf3fa8756d6e4c7
+++ libpurple/wrapper/PurpleRoomlistUiOps.cs	578ece8bee91e00abbf778d7fdf3fa8756d6e4c7
@@ -0,0 +1,317 @@
+/* PurpleWrapper - A .NET (CLR) wrapper for libpurple
+ *
+ * Purple is the legal property of its developers, whose names are too numerous
+ * to list here.  Please refer to the COPYRIGHT file distributed with this
+ * source distribution.
+ *
+ * This program 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.
+ *
+ * This program 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 this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02111-1301  USA
+ */
+
+/*
+ * This file was auto-generated from the libpurple header files to provide a
+ * clean interface between .NET/CLR and the unmanaged C library libpurple.
+ *
+ * This is the second major commit of the code.
+ * Next things:
+ *  - A few of the .h files have anonymous parameter names (eg: void cat(int, int).
+ *    This program will need to assign these parameters names.
+ *  - Function pointers inside structs aren't translated correctly into C#.
+ *  - Two places there are specific-length arrays (eg: char hostname[256]). The parser
+ *    does not detect them as an array.
+ */
+
+using System;
+using System.Collections.Generic;
+using System.Runtime.InteropServices;
+
+namespace PurpleWrapper
+{
+
+	/*
+	 * File: roomlist.h
+	 * Structure: PurpleRoomlistUiOps
+	 */
+	public class PurpleRoomlistUiOps : UnmanagedWrapper<_PurpleRoomlistUiOps>
+	{
+		public PurpleRoomlistUiOps()
+		{
+		}
+
+		public PurpleRoomlistUiOps(IntPtr reference)
+		{
+			this.Reference = reference;
+			this.Data = (_PurpleRoomlistUiOps)Marshal.PtrToStructure(this.Reference, typeof(_PurpleRoomlistUiOps));
+		}
+
+		/*
+		 * Argument Name: show_with_account
+		 * Argument Type: void
+		 * Argument Category: Void
+		 */
+		public IntPtr show_with_account
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: create
+		 * Argument Type: void
+		 * Argument Category: Void
+		 */
+		public IntPtr create
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: set_fields
+		 * Argument Type: void
+		 * Argument Category: Void
+		 */
+		public IntPtr set_fields
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: add_room
+		 * Argument Type: void
+		 * Argument Category: Void
+		 */
+		public IntPtr add_room
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: in_progress
+		 * Argument Type: void
+		 * Argument Category: Void
+		 */
+		public IntPtr in_progress
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: destroy
+		 * Argument Type: void
+		 * Argument Category: Void
+		 */
+		public IntPtr destroy
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: _purple_reserved1
+		 * Argument Type: void
+		 * Argument Category: Void
+		 */
+		public IntPtr _purple_reserved1
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: _purple_reserved2
+		 * Argument Type: void
+		 * Argument Category: Void
+		 */
+		public IntPtr _purple_reserved2
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: _purple_reserved3
+		 * Argument Type: void
+		 * Argument Category: Void
+		 */
+		public IntPtr _purple_reserved3
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: _purple_reserved4
+		 * Argument Type: void
+		 * Argument Category: Void
+		 */
+		public IntPtr _purple_reserved4
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+	}
+
+
+	[StructLayout(LayoutKind.Sequential)]
+	public class _PurpleRoomlistUiOps
+	{
+		/*
+		 * void (*show_with_account)(PurpleAccount * account)
+		 */
+		public IntPtr show_with_account;
+
+		/*
+		 * void (*create)(PurpleRoomlist * list)
+		 */
+		public IntPtr create;
+
+		/*
+		 * void (*set_fields)(PurpleRoomlist * list, GList * fields)
+		 */
+		public IntPtr set_fields;
+
+		/*
+		 * void (*add_room)(PurpleRoomlist * list, PurpleRoomlistRoom * room)
+		 */
+		public IntPtr add_room;
+
+		/*
+		 * void (*in_progress)(PurpleRoomlist * list, gboolean flag)
+		 */
+		public IntPtr in_progress;
+
+		/*
+		 * void (*destroy)(PurpleRoomlist * list)
+		 */
+		public IntPtr destroy;
+
+		/*
+		 * void (*_purple_reserved1)()
+		 */
+		public IntPtr _purple_reserved1;
+
+		/*
+		 * void (*_purple_reserved2)()
+		 */
+		public IntPtr _purple_reserved2;
+
+		/*
+		 * void (*_purple_reserved3)()
+		 */
+		public IntPtr _purple_reserved3;
+
+		/*
+		 * void (*_purple_reserved4)()
+		 */
+		public IntPtr _purple_reserved4;
+
+	}
+
+}
+
============================================================
--- libpurple/wrapper/PurpleSoundTheme.cs	21ca3d1964ba1531cf42de7a9ff5c32b9e604219
+++ libpurple/wrapper/PurpleSoundTheme.cs	21ca3d1964ba1531cf42de7a9ff5c32b9e604219
@@ -0,0 +1,110 @@
+/* PurpleWrapper - A .NET (CLR) wrapper for libpurple
+ *
+ * Purple is the legal property of its developers, whose names are too numerous
+ * to list here.  Please refer to the COPYRIGHT file distributed with this
+ * source distribution.
+ *
+ * This program 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.
+ *
+ * This program 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 this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02111-1301  USA
+ */
+
+/*
+ * This file was auto-generated from the libpurple header files to provide a
+ * clean interface between .NET/CLR and the unmanaged C library libpurple.
+ *
+ * This is the second major commit of the code.
+ * Next things:
+ *  - A few of the .h files have anonymous parameter names (eg: void cat(int, int).
+ *    This program will need to assign these parameters names.
+ *  - Function pointers inside structs aren't translated correctly into C#.
+ *  - Two places there are specific-length arrays (eg: char hostname[256]). The parser
+ *    does not detect them as an array.
+ */
+
+using System;
+using System.Collections.Generic;
+using System.Runtime.InteropServices;
+
+namespace PurpleWrapper
+{
+
+	/*
+	 * File: sound-theme.h
+	 * Structure: PurpleSoundTheme
+	 */
+	public class PurpleSoundTheme : UnmanagedWrapper<_PurpleSoundTheme>
+	{
+		public PurpleSoundTheme()
+		{
+		}
+
+		public PurpleSoundTheme(IntPtr reference)
+		{
+			this.Reference = reference;
+			this.Data = (_PurpleSoundTheme)Marshal.PtrToStructure(this.Reference, typeof(_PurpleSoundTheme));
+		}
+
+		/*
+		 * Argument Name: parent
+		 * Argument Type: PurpleTheme
+		 * Argument Category: KnownStruct
+		 */
+		/*
+		 * Could not generate a wrapper for PurpleSoundTheme.parent in file "sound-theme.h".
+		 * Message: The struct contains an object that resolves to a function that is not a function pointer (PurpleTheme parent).
+		 */
+
+		/*
+		 * Argument Name: priv
+		 * Argument Type: gpointer
+		 * Argument Category: VoidPointer
+		 */
+		public IntPtr priv
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+	}
+
+
+	[StructLayout(LayoutKind.Sequential)]
+	public class _PurpleSoundTheme
+	{
+		/*
+		 * PurpleTheme parent
+		 */
+		/*
+		 * Could not generate a wrapper for PurpleSoundTheme.parent in file "sound-theme.h".
+		 * Message: The struct contains an object that resolves to a function that is not a function pointer (PurpleTheme parent).
+		 */
+
+		/*
+		 * gpointer priv
+		 */
+		public IntPtr priv;
+
+	}
+
+}
+
============================================================
--- libpurple/wrapper/PurpleSoundThemeClass.cs	e3962db64b0b34c585e21c5b2d1c8068755c86cf
+++ libpurple/wrapper/PurpleSoundThemeClass.cs	e3962db64b0b34c585e21c5b2d1c8068755c86cf
@@ -0,0 +1,85 @@
+/* PurpleWrapper - A .NET (CLR) wrapper for libpurple
+ *
+ * Purple is the legal property of its developers, whose names are too numerous
+ * to list here.  Please refer to the COPYRIGHT file distributed with this
+ * source distribution.
+ *
+ * This program 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.
+ *
+ * This program 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 this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02111-1301  USA
+ */
+
+/*
+ * This file was auto-generated from the libpurple header files to provide a
+ * clean interface between .NET/CLR and the unmanaged C library libpurple.
+ *
+ * This is the second major commit of the code.
+ * Next things:
+ *  - A few of the .h files have anonymous parameter names (eg: void cat(int, int).
+ *    This program will need to assign these parameters names.
+ *  - Function pointers inside structs aren't translated correctly into C#.
+ *  - Two places there are specific-length arrays (eg: char hostname[256]). The parser
+ *    does not detect them as an array.
+ */
+
+using System;
+using System.Collections.Generic;
+using System.Runtime.InteropServices;
+
+namespace PurpleWrapper
+{
+
+	/*
+	 * File: sound-theme.h
+	 * Structure: PurpleSoundThemeClass
+	 */
+	public class PurpleSoundThemeClass : UnmanagedWrapper<_PurpleSoundThemeClass>
+	{
+		public PurpleSoundThemeClass()
+		{
+		}
+
+		public PurpleSoundThemeClass(IntPtr reference)
+		{
+			this.Reference = reference;
+			this.Data = (_PurpleSoundThemeClass)Marshal.PtrToStructure(this.Reference, typeof(_PurpleSoundThemeClass));
+		}
+
+		/*
+		 * Argument Name: parent_class
+		 * Argument Type: PurpleThemeClass
+		 * Argument Category: KnownStruct
+		 */
+		/*
+		 * Could not generate a wrapper for PurpleSoundThemeClass.parent_class in file "sound-theme.h".
+		 * Message: The struct contains an object that resolves to a function that is not a function pointer (PurpleThemeClass parent_class).
+		 */
+
+	}
+
+
+	[StructLayout(LayoutKind.Sequential)]
+	public class _PurpleSoundThemeClass
+	{
+		/*
+		 * PurpleThemeClass parent_class
+		 */
+		/*
+		 * Could not generate a wrapper for PurpleSoundThemeClass.parent_class in file "sound-theme.h".
+		 * Message: The struct contains an object that resolves to a function that is not a function pointer (PurpleThemeClass parent_class).
+		 */
+
+	}
+
+}
+
============================================================
--- libpurple/wrapper/PurpleSoundThemeLoader.cs	726aff5b8de792a69696991d9980114f98173209
+++ libpurple/wrapper/PurpleSoundThemeLoader.cs	726aff5b8de792a69696991d9980114f98173209
@@ -0,0 +1,85 @@
+/* PurpleWrapper - A .NET (CLR) wrapper for libpurple
+ *
+ * Purple is the legal property of its developers, whose names are too numerous
+ * to list here.  Please refer to the COPYRIGHT file distributed with this
+ * source distribution.
+ *
+ * This program 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.
+ *
+ * This program 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 this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02111-1301  USA
+ */
+
+/*
+ * This file was auto-generated from the libpurple header files to provide a
+ * clean interface between .NET/CLR and the unmanaged C library libpurple.
+ *
+ * This is the second major commit of the code.
+ * Next things:
+ *  - A few of the .h files have anonymous parameter names (eg: void cat(int, int).
+ *    This program will need to assign these parameters names.
+ *  - Function pointers inside structs aren't translated correctly into C#.
+ *  - Two places there are specific-length arrays (eg: char hostname[256]). The parser
+ *    does not detect them as an array.
+ */
+
+using System;
+using System.Collections.Generic;
+using System.Runtime.InteropServices;
+
+namespace PurpleWrapper
+{
+
+	/*
+	 * File: sound-theme-loader.h
+	 * Structure: PurpleSoundThemeLoader
+	 */
+	public class PurpleSoundThemeLoader : UnmanagedWrapper<_PurpleSoundThemeLoader>
+	{
+		public PurpleSoundThemeLoader()
+		{
+		}
+
+		public PurpleSoundThemeLoader(IntPtr reference)
+		{
+			this.Reference = reference;
+			this.Data = (_PurpleSoundThemeLoader)Marshal.PtrToStructure(this.Reference, typeof(_PurpleSoundThemeLoader));
+		}
+
+		/*
+		 * Argument Name: parent
+		 * Argument Type: PurpleThemeLoader
+		 * Argument Category: KnownStruct
+		 */
+		/*
+		 * Could not generate a wrapper for PurpleSoundThemeLoader.parent in file "sound-theme-loader.h".
+		 * Message: The struct contains an object that resolves to a function that is not a function pointer (PurpleThemeLoader parent).
+		 */
+
+	}
+
+
+	[StructLayout(LayoutKind.Sequential)]
+	public class _PurpleSoundThemeLoader
+	{
+		/*
+		 * PurpleThemeLoader parent
+		 */
+		/*
+		 * Could not generate a wrapper for PurpleSoundThemeLoader.parent in file "sound-theme-loader.h".
+		 * Message: The struct contains an object that resolves to a function that is not a function pointer (PurpleThemeLoader parent).
+		 */
+
+	}
+
+}
+
============================================================
--- libpurple/wrapper/PurpleSoundThemeLoaderClass.cs	d676c05dec03d2e06dd9738566314034b3f9b173
+++ libpurple/wrapper/PurpleSoundThemeLoaderClass.cs	d676c05dec03d2e06dd9738566314034b3f9b173
@@ -0,0 +1,85 @@
+/* PurpleWrapper - A .NET (CLR) wrapper for libpurple
+ *
+ * Purple is the legal property of its developers, whose names are too numerous
+ * to list here.  Please refer to the COPYRIGHT file distributed with this
+ * source distribution.
+ *
+ * This program 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.
+ *
+ * This program 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 this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02111-1301  USA
+ */
+
+/*
+ * This file was auto-generated from the libpurple header files to provide a
+ * clean interface between .NET/CLR and the unmanaged C library libpurple.
+ *
+ * This is the second major commit of the code.
+ * Next things:
+ *  - A few of the .h files have anonymous parameter names (eg: void cat(int, int).
+ *    This program will need to assign these parameters names.
+ *  - Function pointers inside structs aren't translated correctly into C#.
+ *  - Two places there are specific-length arrays (eg: char hostname[256]). The parser
+ *    does not detect them as an array.
+ */
+
+using System;
+using System.Collections.Generic;
+using System.Runtime.InteropServices;
+
+namespace PurpleWrapper
+{
+
+	/*
+	 * File: sound-theme-loader.h
+	 * Structure: PurpleSoundThemeLoaderClass
+	 */
+	public class PurpleSoundThemeLoaderClass : UnmanagedWrapper<_PurpleSoundThemeLoaderClass>
+	{
+		public PurpleSoundThemeLoaderClass()
+		{
+		}
+
+		public PurpleSoundThemeLoaderClass(IntPtr reference)
+		{
+			this.Reference = reference;
+			this.Data = (_PurpleSoundThemeLoaderClass)Marshal.PtrToStructure(this.Reference, typeof(_PurpleSoundThemeLoaderClass));
+		}
+
+		/*
+		 * Argument Name: parent_class
+		 * Argument Type: PurpleThemeLoaderClass
+		 * Argument Category: KnownStruct
+		 */
+		/*
+		 * Could not generate a wrapper for PurpleSoundThemeLoaderClass.parent_class in file "sound-theme-loader.h".
+		 * Message: The struct contains an object that resolves to a function that is not a function pointer (PurpleThemeLoaderClass parent_class).
+		 */
+
+	}
+
+
+	[StructLayout(LayoutKind.Sequential)]
+	public class _PurpleSoundThemeLoaderClass
+	{
+		/*
+		 * PurpleThemeLoaderClass parent_class
+		 */
+		/*
+		 * Could not generate a wrapper for PurpleSoundThemeLoaderClass.parent_class in file "sound-theme-loader.h".
+		 * Message: The struct contains an object that resolves to a function that is not a function pointer (PurpleThemeLoaderClass parent_class).
+		 */
+
+	}
+
+}
+
============================================================
--- libpurple/wrapper/PurpleSoundUiOps.cs	72dd29d87d4e7f9e0bb9493f03b2e7c7231b5c91
+++ libpurple/wrapper/PurpleSoundUiOps.cs	72dd29d87d4e7f9e0bb9493f03b2e7c7231b5c91
@@ -0,0 +1,267 @@
+/* PurpleWrapper - A .NET (CLR) wrapper for libpurple
+ *
+ * Purple is the legal property of its developers, whose names are too numerous
+ * to list here.  Please refer to the COPYRIGHT file distributed with this
+ * source distribution.
+ *
+ * This program 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.
+ *
+ * This program 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 this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02111-1301  USA
+ */
+
+/*
+ * This file was auto-generated from the libpurple header files to provide a
+ * clean interface between .NET/CLR and the unmanaged C library libpurple.
+ *
+ * This is the second major commit of the code.
+ * Next things:
+ *  - A few of the .h files have anonymous parameter names (eg: void cat(int, int).
+ *    This program will need to assign these parameters names.
+ *  - Function pointers inside structs aren't translated correctly into C#.
+ *  - Two places there are specific-length arrays (eg: char hostname[256]). The parser
+ *    does not detect them as an array.
+ */
+
+using System;
+using System.Collections.Generic;
+using System.Runtime.InteropServices;
+
+namespace PurpleWrapper
+{
+
+	/*
+	 * File: sound.h
+	 * Structure: PurpleSoundUiOps
+	 */
+	public class PurpleSoundUiOps : UnmanagedWrapper<_PurpleSoundUiOps>
+	{
+		public PurpleSoundUiOps()
+		{
+		}
+
+		public PurpleSoundUiOps(IntPtr reference)
+		{
+			this.Reference = reference;
+			this.Data = (_PurpleSoundUiOps)Marshal.PtrToStructure(this.Reference, typeof(_PurpleSoundUiOps));
+		}
+
+		/*
+		 * Argument Name: init
+		 * Argument Type: void
+		 * Argument Category: Void
+		 */
+		public IntPtr init
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: uninit
+		 * Argument Type: void
+		 * Argument Category: Void
+		 */
+		public IntPtr uninit
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: play_file
+		 * Argument Type: void
+		 * Argument Category: Void
+		 */
+		public IntPtr play_file
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: play_event
+		 * Argument Type: void
+		 * Argument Category: Void
+		 */
+		public IntPtr play_event
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: _purple_reserved1
+		 * Argument Type: void
+		 * Argument Category: Void
+		 */
+		public IntPtr _purple_reserved1
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: _purple_reserved2
+		 * Argument Type: void
+		 * Argument Category: Void
+		 */
+		public IntPtr _purple_reserved2
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: _purple_reserved3
+		 * Argument Type: void
+		 * Argument Category: Void
+		 */
+		public IntPtr _purple_reserved3
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: _purple_reserved4
+		 * Argument Type: void
+		 * Argument Category: Void
+		 */
+		public IntPtr _purple_reserved4
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+	}
+
+
+	[StructLayout(LayoutKind.Sequential)]
+	public class _PurpleSoundUiOps
+	{
+		/*
+		 * void (*init)()
+		 */
+		public IntPtr init;
+
+		/*
+		 * void (*uninit)()
+		 */
+		public IntPtr uninit;
+
+		/*
+		 * void (*play_file)(char * filename)
+		 */
+		public IntPtr play_file;
+
+		/*
+		 * void (*play_event)(PurpleSoundEventID event)
+		 */
+		public IntPtr play_event;
+
+		/*
+		 * void (*_purple_reserved1)()
+		 */
+		public IntPtr _purple_reserved1;
+
+		/*
+		 * void (*_purple_reserved2)()
+		 */
+		public IntPtr _purple_reserved2;
+
+		/*
+		 * void (*_purple_reserved3)()
+		 */
+		public IntPtr _purple_reserved3;
+
+		/*
+		 * void (*_purple_reserved4)()
+		 */
+		public IntPtr _purple_reserved4;
+
+	}
+
+}
+
============================================================
--- libpurple/wrapper/PurpleSrvResponse.cs	658039f6e90e26a6084eb2f5617b65f72b219941
+++ libpurple/wrapper/PurpleSrvResponse.cs	658039f6e90e26a6084eb2f5617b65f72b219941
@@ -0,0 +1,167 @@
+/* PurpleWrapper - A .NET (CLR) wrapper for libpurple
+ *
+ * Purple is the legal property of its developers, whose names are too numerous
+ * to list here.  Please refer to the COPYRIGHT file distributed with this
+ * source distribution.
+ *
+ * This program 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.
+ *
+ * This program 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 this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02111-1301  USA
+ */
+
+/*
+ * This file was auto-generated from the libpurple header files to provide a
+ * clean interface between .NET/CLR and the unmanaged C library libpurple.
+ *
+ * This is the second major commit of the code.
+ * Next things:
+ *  - A few of the .h files have anonymous parameter names (eg: void cat(int, int).
+ *    This program will need to assign these parameters names.
+ *  - Function pointers inside structs aren't translated correctly into C#.
+ *  - Two places there are specific-length arrays (eg: char hostname[256]). The parser
+ *    does not detect them as an array.
+ */
+
+using System;
+using System.Collections.Generic;
+using System.Runtime.InteropServices;
+
+namespace PurpleWrapper
+{
+
+	/*
+	 * File: dnssrv.h
+	 * Structure: PurpleSrvResponse
+	 */
+	public class PurpleSrvResponse : UnmanagedWrapper<_PurpleSrvResponse>
+	{
+		public PurpleSrvResponse()
+		{
+		}
+
+		public PurpleSrvResponse(IntPtr reference)
+		{
+			this.Reference = reference;
+			this.Data = (_PurpleSrvResponse)Marshal.PtrToStructure(this.Reference, typeof(_PurpleSrvResponse));
+		}
+
+		/*
+		 * Argument Name: hostname
+		 * Argument Type: char
+		 * Argument Category: Native
+		 */
+		public string[] hostname
+		{
+			get
+			{
+				return this.Data.hostname;
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				this.Data.hostname = value;
+			}
+		}
+
+		/*
+		 * Argument Name: port
+		 * Argument Type: int
+		 * Argument Category: Native
+		 */
+		public int port
+		{
+			get
+			{
+				return this.Data.port;
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				this.Data.port = value;
+			}
+		}
+
+		/*
+		 * Argument Name: weight
+		 * Argument Type: int
+		 * Argument Category: Native
+		 */
+		public int weight
+		{
+			get
+			{
+				return this.Data.weight;
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				this.Data.weight = value;
+			}
+		}
+
+		/*
+		 * Argument Name: pref
+		 * Argument Type: int
+		 * Argument Category: Native
+		 */
+		public int pref
+		{
+			get
+			{
+				return this.Data.pref;
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				this.Data.pref = value;
+			}
+		}
+
+	}
+
+
+	[StructLayout(LayoutKind.Sequential)]
+	public class _PurpleSrvResponse
+	{
+		/*
+		 * char hostname
+		 */
+		public string[] hostname;
+
+		/*
+		 * int port
+		 */
+		public int port;
+
+		/*
+		 * int weight
+		 */
+		public int weight;
+
+		/*
+		 * int pref
+		 */
+		public int pref;
+
+	}
+
+}
+
============================================================
--- libpurple/wrapper/PurpleSslConnection.cs	ffba038f7b7a36cc7ca101f59dbec509c131ecbf
+++ libpurple/wrapper/PurpleSslConnection.cs	ffba038f7b7a36cc7ca101f59dbec509c131ecbf
@@ -0,0 +1,367 @@
+/* PurpleWrapper - A .NET (CLR) wrapper for libpurple
+ *
+ * Purple is the legal property of its developers, whose names are too numerous
+ * to list here.  Please refer to the COPYRIGHT file distributed with this
+ * source distribution.
+ *
+ * This program 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.
+ *
+ * This program 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 this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02111-1301  USA
+ */
+
+/*
+ * This file was auto-generated from the libpurple header files to provide a
+ * clean interface between .NET/CLR and the unmanaged C library libpurple.
+ *
+ * This is the second major commit of the code.
+ * Next things:
+ *  - A few of the .h files have anonymous parameter names (eg: void cat(int, int).
+ *    This program will need to assign these parameters names.
+ *  - Function pointers inside structs aren't translated correctly into C#.
+ *  - Two places there are specific-length arrays (eg: char hostname[256]). The parser
+ *    does not detect them as an array.
+ */
+
+using System;
+using System.Collections.Generic;
+using System.Runtime.InteropServices;
+
+namespace PurpleWrapper
+{
+
+	/*
+	 * File: sslconn.h
+	 * Structure: PurpleSslConnection
+	 */
+	public class PurpleSslConnection : UnmanagedWrapper<_PurpleSslConnection>
+	{
+		public PurpleSslConnection()
+		{
+		}
+
+		public PurpleSslConnection(IntPtr reference)
+		{
+			this.Reference = reference;
+			this.Data = (_PurpleSslConnection)Marshal.PtrToStructure(this.Reference, typeof(_PurpleSslConnection));
+		}
+
+		/*
+		 * Argument Name: host
+		 * Argument Type: char *
+		 * Argument Category: Native
+		 */
+		public string host
+		{
+			get
+			{
+				return this.Data.host;
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				this.Data.host = value;
+			}
+		}
+
+		/*
+		 * Argument Name: port
+		 * Argument Type: int
+		 * Argument Category: Native
+		 */
+		public int port
+		{
+			get
+			{
+				return this.Data.port;
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				this.Data.port = value;
+			}
+		}
+
+		/*
+		 * Argument Name: connect_cb_data
+		 * Argument Type: void *
+		 * Argument Category: VoidPointer
+		 */
+		public IntPtr connect_cb_data
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: connect_cb
+		 * Argument Type: PurpleSslInputFunction
+		 * Argument Category: KnownFunctionPointer
+		 */
+		public Sslconn.PurpleSslInputFunction connect_cb
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: error_cb
+		 * Argument Type: PurpleSslErrorFunction
+		 * Argument Category: KnownFunctionPointer
+		 */
+		public Sslconn.PurpleSslErrorFunction error_cb
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: recv_cb_data
+		 * Argument Type: void *
+		 * Argument Category: VoidPointer
+		 */
+		public IntPtr recv_cb_data
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: recv_cb
+		 * Argument Type: PurpleSslInputFunction
+		 * Argument Category: KnownFunctionPointer
+		 */
+		public Sslconn.PurpleSslInputFunction recv_cb
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: fd
+		 * Argument Type: int
+		 * Argument Category: Native
+		 */
+		public int fd
+		{
+			get
+			{
+				return this.Data.fd;
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				this.Data.fd = value;
+			}
+		}
+
+		/*
+		 * Argument Name: inpa
+		 * Argument Type: guint
+		 * Argument Category: Native
+		 */
+		public uint inpa
+		{
+			get
+			{
+				return this.Data.inpa;
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				this.Data.inpa = value;
+			}
+		}
+
+		/*
+		 * Argument Name: connect_data
+		 * Argument Type: PurpleProxyConnectData *
+		 * Argument Category: PointerToUnknownStruct
+		 */
+		public /* Resolved as PointerToUnknownStruct to PurpleProxyConnectData */ IntPtr connect_data
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: private_data
+		 * Argument Type: void *
+		 * Argument Category: VoidPointer
+		 */
+		public IntPtr private_data
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: verifier
+		 * Argument Type: PurpleCertificateVerifier *
+		 * Argument Category: PointerToKnownStruct
+		 */
+		public PurpleCertificateVerifier verifier
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+	}
+
+
+	[StructLayout(LayoutKind.Sequential)]
+	public class _PurpleSslConnection
+	{
+		/*
+		 * char * host
+		 */
+		public string host;
+
+		/*
+		 * int port
+		 */
+		public int port;
+
+		/*
+		 * void * connect_cb_data
+		 */
+		public IntPtr connect_cb_data;
+
+		/*
+		 * PurpleSslInputFunction connect_cb
+		 */
+		public IntPtr connect_cb;
+
+		/*
+		 * PurpleSslErrorFunction error_cb
+		 */
+		public IntPtr error_cb;
+
+		/*
+		 * void * recv_cb_data
+		 */
+		public IntPtr recv_cb_data;
+
+		/*
+		 * PurpleSslInputFunction recv_cb
+		 */
+		public IntPtr recv_cb;
+
+		/*
+		 * int fd
+		 */
+		public int fd;
+
+		/*
+		 * guint inpa
+		 */
+		public uint inpa;
+
+		/*
+		 * PurpleProxyConnectData * connect_data
+		 */
+		public IntPtr connect_data;
+
+		/*
+		 * void * private_data
+		 */
+		public IntPtr private_data;
+
+		/*
+		 * PurpleCertificateVerifier * verifier
+		 */
+		public IntPtr verifier;
+
+	}
+
+}
+
============================================================
--- libpurple/wrapper/PurpleStunNatDiscovery.cs	bc6e27b23130fb3873d0b105e8abae998e0c11b9
+++ libpurple/wrapper/PurpleStunNatDiscovery.cs	bc6e27b23130fb3873d0b105e8abae998e0c11b9
@@ -0,0 +1,192 @@
+/* PurpleWrapper - A .NET (CLR) wrapper for libpurple
+ *
+ * Purple is the legal property of its developers, whose names are too numerous
+ * to list here.  Please refer to the COPYRIGHT file distributed with this
+ * source distribution.
+ *
+ * This program 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.
+ *
+ * This program 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 this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02111-1301  USA
+ */
+
+/*
+ * This file was auto-generated from the libpurple header files to provide a
+ * clean interface between .NET/CLR and the unmanaged C library libpurple.
+ *
+ * This is the second major commit of the code.
+ * Next things:
+ *  - A few of the .h files have anonymous parameter names (eg: void cat(int, int).
+ *    This program will need to assign these parameters names.
+ *  - Function pointers inside structs aren't translated correctly into C#.
+ *  - Two places there are specific-length arrays (eg: char hostname[256]). The parser
+ *    does not detect them as an array.
+ */
+
+using System;
+using System.Collections.Generic;
+using System.Runtime.InteropServices;
+
+namespace PurpleWrapper
+{
+
+	/*
+	 * File: stun.h
+	 * Structure: PurpleStunNatDiscovery
+	 */
+	public class PurpleStunNatDiscovery : UnmanagedWrapper<_PurpleStunNatDiscovery>
+	{
+		public PurpleStunNatDiscovery()
+		{
+		}
+
+		public PurpleStunNatDiscovery(IntPtr reference)
+		{
+			this.Reference = reference;
+			this.Data = (_PurpleStunNatDiscovery)Marshal.PtrToStructure(this.Reference, typeof(_PurpleStunNatDiscovery));
+		}
+
+		/*
+		 * Argument Name: status
+		 * Argument Type: PurpleStunStatus
+		 * Argument Category: KnownEnum
+		 */
+		public Stun.PurpleStunStatus status
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: type
+		 * Argument Type: PurpleStunNatType
+		 * Argument Category: KnownEnum
+		 */
+		public Stun.PurpleStunNatType type
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: publicip
+		 * Argument Type: char
+		 * Argument Category: Native
+		 */
+		public string[] publicip
+		{
+			get
+			{
+				return this.Data.publicip;
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				this.Data.publicip = value;
+			}
+		}
+
+		/*
+		 * Argument Name: servername
+		 * Argument Type: char *
+		 * Argument Category: Native
+		 */
+		public string servername
+		{
+			get
+			{
+				return this.Data.servername;
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				this.Data.servername = value;
+			}
+		}
+
+		/*
+		 * Argument Name: lookup_time
+		 * Argument Type: time_t
+		 * Argument Category: DateTime
+		 */
+		public DateTime lookup_time
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+	}
+
+
+	[StructLayout(LayoutKind.Sequential)]
+	public class _PurpleStunNatDiscovery
+	{
+		/*
+		 * PurpleStunStatus status
+		 */
+		public Stun.PurpleStunStatus status;
+
+		/*
+		 * PurpleStunNatType type
+		 */
+		public Stun.PurpleStunNatType type;
+
+		/*
+		 * char publicip
+		 */
+		public string[] publicip;
+
+		/*
+		 * char * servername
+		 */
+		public string servername;
+
+		/*
+		 * time_t lookup_time
+		 */
+		public ulong lookup_time;
+
+	}
+
+}
+
============================================================
--- libpurple/wrapper/PurpleTheme.cs	5b7fe0d509e5bd80194694d5d2ea1769e2e9f998
+++ libpurple/wrapper/PurpleTheme.cs	5b7fe0d509e5bd80194694d5d2ea1769e2e9f998
@@ -0,0 +1,117 @@
+/* PurpleWrapper - A .NET (CLR) wrapper for libpurple
+ *
+ * Purple is the legal property of its developers, whose names are too numerous
+ * to list here.  Please refer to the COPYRIGHT file distributed with this
+ * source distribution.
+ *
+ * This program 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.
+ *
+ * This program 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 this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02111-1301  USA
+ */
+
+/*
+ * This file was auto-generated from the libpurple header files to provide a
+ * clean interface between .NET/CLR and the unmanaged C library libpurple.
+ *
+ * This is the second major commit of the code.
+ * Next things:
+ *  - A few of the .h files have anonymous parameter names (eg: void cat(int, int).
+ *    This program will need to assign these parameters names.
+ *  - Function pointers inside structs aren't translated correctly into C#.
+ *  - Two places there are specific-length arrays (eg: char hostname[256]). The parser
+ *    does not detect them as an array.
+ */
+
+using System;
+using System.Collections.Generic;
+using System.Runtime.InteropServices;
+
+namespace PurpleWrapper
+{
+
+	/*
+	 * File: theme.h
+	 * Structure: PurpleTheme
+	 */
+	public class PurpleTheme : UnmanagedWrapper<_PurpleTheme>
+	{
+		public PurpleTheme()
+		{
+		}
+
+		public PurpleTheme(IntPtr reference)
+		{
+			this.Reference = reference;
+			this.Data = (_PurpleTheme)Marshal.PtrToStructure(this.Reference, typeof(_PurpleTheme));
+		}
+
+		/*
+		 * Argument Name: parent
+		 * Argument Type: GObject
+		 * Argument Category: GObjectObject
+		 */
+		public /* libobject */ IntPtr parent
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: priv
+		 * Argument Type: gpointer
+		 * Argument Category: VoidPointer
+		 */
+		public IntPtr priv
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+	}
+
+
+	[StructLayout(LayoutKind.Sequential)]
+	public class _PurpleTheme
+	{
+		/*
+		 * GObject parent
+		 */
+		public IntPtr parent;
+
+		/*
+		 * gpointer priv
+		 */
+		public IntPtr priv;
+
+	}
+
+}
+
============================================================
--- libpurple/wrapper/PurpleThemeClass.cs	63ce3584583cb8a1aaf7aae02da6a332431e10d3
+++ libpurple/wrapper/PurpleThemeClass.cs	63ce3584583cb8a1aaf7aae02da6a332431e10d3
@@ -0,0 +1,92 @@
+/* PurpleWrapper - A .NET (CLR) wrapper for libpurple
+ *
+ * Purple is the legal property of its developers, whose names are too numerous
+ * to list here.  Please refer to the COPYRIGHT file distributed with this
+ * source distribution.
+ *
+ * This program 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.
+ *
+ * This program 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 this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02111-1301  USA
+ */
+
+/*
+ * This file was auto-generated from the libpurple header files to provide a
+ * clean interface between .NET/CLR and the unmanaged C library libpurple.
+ *
+ * This is the second major commit of the code.
+ * Next things:
+ *  - A few of the .h files have anonymous parameter names (eg: void cat(int, int).
+ *    This program will need to assign these parameters names.
+ *  - Function pointers inside structs aren't translated correctly into C#.
+ *  - Two places there are specific-length arrays (eg: char hostname[256]). The parser
+ *    does not detect them as an array.
+ */
+
+using System;
+using System.Collections.Generic;
+using System.Runtime.InteropServices;
+
+namespace PurpleWrapper
+{
+
+	/*
+	 * File: theme.h
+	 * Structure: PurpleThemeClass
+	 */
+	public class PurpleThemeClass : UnmanagedWrapper<_PurpleThemeClass>
+	{
+		public PurpleThemeClass()
+		{
+		}
+
+		public PurpleThemeClass(IntPtr reference)
+		{
+			this.Reference = reference;
+			this.Data = (_PurpleThemeClass)Marshal.PtrToStructure(this.Reference, typeof(_PurpleThemeClass));
+		}
+
+		/*
+		 * Argument Name: parent_class
+		 * Argument Type: GObjectClass
+		 * Argument Category: GObjectObject
+		 */
+		public /* libobject */ IntPtr parent_class
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+	}
+
+
+	[StructLayout(LayoutKind.Sequential)]
+	public class _PurpleThemeClass
+	{
+		/*
+		 * GObjectClass parent_class
+		 */
+		public IntPtr parent_class;
+
+	}
+
+}
+
============================================================
--- libpurple/wrapper/PurpleThemeLoader.cs	f28c6a32549e3d5b4a42af21c34303c815efe32c
+++ libpurple/wrapper/PurpleThemeLoader.cs	f28c6a32549e3d5b4a42af21c34303c815efe32c
@@ -0,0 +1,117 @@
+/* PurpleWrapper - A .NET (CLR) wrapper for libpurple
+ *
+ * Purple is the legal property of its developers, whose names are too numerous
+ * to list here.  Please refer to the COPYRIGHT file distributed with this
+ * source distribution.
+ *
+ * This program 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.
+ *
+ * This program 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 this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02111-1301  USA
+ */
+
+/*
+ * This file was auto-generated from the libpurple header files to provide a
+ * clean interface between .NET/CLR and the unmanaged C library libpurple.
+ *
+ * This is the second major commit of the code.
+ * Next things:
+ *  - A few of the .h files have anonymous parameter names (eg: void cat(int, int).
+ *    This program will need to assign these parameters names.
+ *  - Function pointers inside structs aren't translated correctly into C#.
+ *  - Two places there are specific-length arrays (eg: char hostname[256]). The parser
+ *    does not detect them as an array.
+ */
+
+using System;
+using System.Collections.Generic;
+using System.Runtime.InteropServices;
+
+namespace PurpleWrapper
+{
+
+	/*
+	 * File: theme-loader.h
+	 * Structure: PurpleThemeLoader
+	 */
+	public class PurpleThemeLoader : UnmanagedWrapper<_PurpleThemeLoader>
+	{
+		public PurpleThemeLoader()
+		{
+		}
+
+		public PurpleThemeLoader(IntPtr reference)
+		{
+			this.Reference = reference;
+			this.Data = (_PurpleThemeLoader)Marshal.PtrToStructure(this.Reference, typeof(_PurpleThemeLoader));
+		}
+
+		/*
+		 * Argument Name: parent
+		 * Argument Type: GObject
+		 * Argument Category: GObjectObject
+		 */
+		public /* libobject */ IntPtr parent
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: priv
+		 * Argument Type: gpointer
+		 * Argument Category: VoidPointer
+		 */
+		public IntPtr priv
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+	}
+
+
+	[StructLayout(LayoutKind.Sequential)]
+	public class _PurpleThemeLoader
+	{
+		/*
+		 * GObject parent
+		 */
+		public IntPtr parent;
+
+		/*
+		 * gpointer priv
+		 */
+		public IntPtr priv;
+
+	}
+
+}
+
============================================================
--- libpurple/wrapper/PurpleThemeLoaderClass.cs	c5255410d6261737391b5d8ec75d1afdc118cc7a
+++ libpurple/wrapper/PurpleThemeLoaderClass.cs	c5255410d6261737391b5d8ec75d1afdc118cc7a
@@ -0,0 +1,117 @@
+/* PurpleWrapper - A .NET (CLR) wrapper for libpurple
+ *
+ * Purple is the legal property of its developers, whose names are too numerous
+ * to list here.  Please refer to the COPYRIGHT file distributed with this
+ * source distribution.
+ *
+ * This program 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.
+ *
+ * This program 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 this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02111-1301  USA
+ */
+
+/*
+ * This file was auto-generated from the libpurple header files to provide a
+ * clean interface between .NET/CLR and the unmanaged C library libpurple.
+ *
+ * This is the second major commit of the code.
+ * Next things:
+ *  - A few of the .h files have anonymous parameter names (eg: void cat(int, int).
+ *    This program will need to assign these parameters names.
+ *  - Function pointers inside structs aren't translated correctly into C#.
+ *  - Two places there are specific-length arrays (eg: char hostname[256]). The parser
+ *    does not detect them as an array.
+ */
+
+using System;
+using System.Collections.Generic;
+using System.Runtime.InteropServices;
+
+namespace PurpleWrapper
+{
+
+	/*
+	 * File: theme-loader.h
+	 * Structure: PurpleThemeLoaderClass
+	 */
+	public class PurpleThemeLoaderClass : UnmanagedWrapper<_PurpleThemeLoaderClass>
+	{
+		public PurpleThemeLoaderClass()
+		{
+		}
+
+		public PurpleThemeLoaderClass(IntPtr reference)
+		{
+			this.Reference = reference;
+			this.Data = (_PurpleThemeLoaderClass)Marshal.PtrToStructure(this.Reference, typeof(_PurpleThemeLoaderClass));
+		}
+
+		/*
+		 * Argument Name: parent_class
+		 * Argument Type: GObjectClass
+		 * Argument Category: GObjectObject
+		 */
+		public /* libobject */ IntPtr parent_class
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: purple_theme_loader_build
+		 * Argument Type: PurpleTheme *
+		 * Argument Category: PointerToKnownStruct
+		 */
+		public IntPtr purple_theme_loader_build
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+	}
+
+
+	[StructLayout(LayoutKind.Sequential)]
+	public class _PurpleThemeLoaderClass
+	{
+		/*
+		 * GObjectClass parent_class
+		 */
+		public IntPtr parent_class;
+
+		/*
+		 * PurpleTheme * (*purple_theme_loader_build)(gchar* )
+		 */
+		public IntPtr purple_theme_loader_build;
+
+	}
+
+}
+
============================================================
--- libpurple/wrapper/PurpleThemeManager.cs	05720e6991f402dfd385edc3fe460eb18509a58e
+++ libpurple/wrapper/PurpleThemeManager.cs	05720e6991f402dfd385edc3fe460eb18509a58e
@@ -0,0 +1,92 @@
+/* PurpleWrapper - A .NET (CLR) wrapper for libpurple
+ *
+ * Purple is the legal property of its developers, whose names are too numerous
+ * to list here.  Please refer to the COPYRIGHT file distributed with this
+ * source distribution.
+ *
+ * This program 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.
+ *
+ * This program 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 this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02111-1301  USA
+ */
+
+/*
+ * This file was auto-generated from the libpurple header files to provide a
+ * clean interface between .NET/CLR and the unmanaged C library libpurple.
+ *
+ * This is the second major commit of the code.
+ * Next things:
+ *  - A few of the .h files have anonymous parameter names (eg: void cat(int, int).
+ *    This program will need to assign these parameters names.
+ *  - Function pointers inside structs aren't translated correctly into C#.
+ *  - Two places there are specific-length arrays (eg: char hostname[256]). The parser
+ *    does not detect them as an array.
+ */
+
+using System;
+using System.Collections.Generic;
+using System.Runtime.InteropServices;
+
+namespace PurpleWrapper
+{
+
+	/*
+	 * File: theme-manager.h
+	 * Structure: PurpleThemeManager
+	 */
+	public class PurpleThemeManager : UnmanagedWrapper<_PurpleThemeManager>
+	{
+		public PurpleThemeManager()
+		{
+		}
+
+		public PurpleThemeManager(IntPtr reference)
+		{
+			this.Reference = reference;
+			this.Data = (_PurpleThemeManager)Marshal.PtrToStructure(this.Reference, typeof(_PurpleThemeManager));
+		}
+
+		/*
+		 * Argument Name: parent
+		 * Argument Type: GObject
+		 * Argument Category: GObjectObject
+		 */
+		public /* libobject */ IntPtr parent
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+	}
+
+
+	[StructLayout(LayoutKind.Sequential)]
+	public class _PurpleThemeManager
+	{
+		/*
+		 * GObject parent
+		 */
+		public IntPtr parent;
+
+	}
+
+}
+
============================================================
--- libpurple/wrapper/PurpleThemeManagerClass.cs	b8c0a7354ea6e889fc25977b0172236a611a3afe
+++ libpurple/wrapper/PurpleThemeManagerClass.cs	b8c0a7354ea6e889fc25977b0172236a611a3afe
@@ -0,0 +1,92 @@
+/* PurpleWrapper - A .NET (CLR) wrapper for libpurple
+ *
+ * Purple is the legal property of its developers, whose names are too numerous
+ * to list here.  Please refer to the COPYRIGHT file distributed with this
+ * source distribution.
+ *
+ * This program 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.
+ *
+ * This program 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 this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02111-1301  USA
+ */
+
+/*
+ * This file was auto-generated from the libpurple header files to provide a
+ * clean interface between .NET/CLR and the unmanaged C library libpurple.
+ *
+ * This is the second major commit of the code.
+ * Next things:
+ *  - A few of the .h files have anonymous parameter names (eg: void cat(int, int).
+ *    This program will need to assign these parameters names.
+ *  - Function pointers inside structs aren't translated correctly into C#.
+ *  - Two places there are specific-length arrays (eg: char hostname[256]). The parser
+ *    does not detect them as an array.
+ */
+
+using System;
+using System.Collections.Generic;
+using System.Runtime.InteropServices;
+
+namespace PurpleWrapper
+{
+
+	/*
+	 * File: theme-manager.h
+	 * Structure: PurpleThemeManagerClass
+	 */
+	public class PurpleThemeManagerClass : UnmanagedWrapper<_PurpleThemeManagerClass>
+	{
+		public PurpleThemeManagerClass()
+		{
+		}
+
+		public PurpleThemeManagerClass(IntPtr reference)
+		{
+			this.Reference = reference;
+			this.Data = (_PurpleThemeManagerClass)Marshal.PtrToStructure(this.Reference, typeof(_PurpleThemeManagerClass));
+		}
+
+		/*
+		 * Argument Name: parent_class
+		 * Argument Type: GObjectClass
+		 * Argument Category: GObjectObject
+		 */
+		public /* libobject */ IntPtr parent_class
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+	}
+
+
+	[StructLayout(LayoutKind.Sequential)]
+	public class _PurpleThemeManagerClass
+	{
+		/*
+		 * GObjectClass parent_class
+		 */
+		public IntPtr parent_class;
+
+	}
+
+}
+
============================================================
--- libpurple/wrapper/PurpleWhiteboard.cs	dfee8b7418759c6113019d70a6069d0993a2eef5
+++ libpurple/wrapper/PurpleWhiteboard.cs	dfee8b7418759c6113019d70a6069d0993a2eef5
@@ -0,0 +1,232 @@
+/* PurpleWrapper - A .NET (CLR) wrapper for libpurple
+ *
+ * Purple is the legal property of its developers, whose names are too numerous
+ * to list here.  Please refer to the COPYRIGHT file distributed with this
+ * source distribution.
+ *
+ * This program 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.
+ *
+ * This program 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 this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02111-1301  USA
+ */
+
+/*
+ * This file was auto-generated from the libpurple header files to provide a
+ * clean interface between .NET/CLR and the unmanaged C library libpurple.
+ *
+ * This is the second major commit of the code.
+ * Next things:
+ *  - A few of the .h files have anonymous parameter names (eg: void cat(int, int).
+ *    This program will need to assign these parameters names.
+ *  - Function pointers inside structs aren't translated correctly into C#.
+ *  - Two places there are specific-length arrays (eg: char hostname[256]). The parser
+ *    does not detect them as an array.
+ */
+
+using System;
+using System.Collections.Generic;
+using System.Runtime.InteropServices;
+
+namespace PurpleWrapper
+{
+
+	/*
+	 * File: whiteboard.h
+	 * Structure: PurpleWhiteboard
+	 */
+	public class PurpleWhiteboard : UnmanagedWrapper<_PurpleWhiteboard>
+	{
+		public PurpleWhiteboard()
+		{
+		}
+
+		public PurpleWhiteboard(IntPtr reference)
+		{
+			this.Reference = reference;
+			this.Data = (_PurpleWhiteboard)Marshal.PtrToStructure(this.Reference, typeof(_PurpleWhiteboard));
+		}
+
+		/*
+		 * Argument Name: state
+		 * Argument Type: int
+		 * Argument Category: Native
+		 */
+		public int state
+		{
+			get
+			{
+				return this.Data.state;
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				this.Data.state = value;
+			}
+		}
+
+		/*
+		 * Argument Name: account
+		 * Argument Type: PurpleAccount *
+		 * Argument Category: PointerToKnownStruct
+		 */
+		public PurpleAccount account
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: who
+		 * Argument Type: char *
+		 * Argument Category: Native
+		 */
+		public string who
+		{
+			get
+			{
+				return this.Data.who;
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				this.Data.who = value;
+			}
+		}
+
+		/*
+		 * Argument Name: ui_data
+		 * Argument Type: void *
+		 * Argument Category: VoidPointer
+		 */
+		public IntPtr ui_data
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: proto_data
+		 * Argument Type: void *
+		 * Argument Category: VoidPointer
+		 */
+		public IntPtr proto_data
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: prpl_ops
+		 * Argument Type: PurpleWhiteboardPrplOps *
+		 * Argument Category: PointerToKnownStruct
+		 */
+		public PurpleWhiteboardPrplOps prpl_ops
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: draw_list
+		 * Argument Type: GList *
+		 * Argument Category: PointerToGList
+		 */
+		/*
+		 * Could not generate a wrapper for PurpleWhiteboard.draw_list in file "whiteboard.h".
+		 * Message: Unable to provide a type for GList as no function information was provided in code.
+		 */
+
+	}
+
+
+	[StructLayout(LayoutKind.Sequential)]
+	public class _PurpleWhiteboard
+	{
+		/*
+		 * int state
+		 */
+		public int state;
+
+		/*
+		 * PurpleAccount * account
+		 */
+		public IntPtr account;
+
+		/*
+		 * char * who
+		 */
+		public string who;
+
+		/*
+		 * void * ui_data
+		 */
+		public IntPtr ui_data;
+
+		/*
+		 * void * proto_data
+		 */
+		public IntPtr proto_data;
+
+		/*
+		 * PurpleWhiteboardPrplOps * prpl_ops
+		 */
+		public IntPtr prpl_ops;
+
+		/*
+		 * GList * draw_list
+		 */
+		public IntPtr draw_list;
+
+	}
+
+}
+
============================================================
--- libpurple/wrapper/PurpleWhiteboardPrplOps.cs	945e364643f1d70dbb89b44d3b331a73b6bc96d5
+++ libpurple/wrapper/PurpleWhiteboardPrplOps.cs	945e364643f1d70dbb89b44d3b331a73b6bc96d5
@@ -0,0 +1,367 @@
+/* PurpleWrapper - A .NET (CLR) wrapper for libpurple
+ *
+ * Purple is the legal property of its developers, whose names are too numerous
+ * to list here.  Please refer to the COPYRIGHT file distributed with this
+ * source distribution.
+ *
+ * This program 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.
+ *
+ * This program 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 this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02111-1301  USA
+ */
+
+/*
+ * This file was auto-generated from the libpurple header files to provide a
+ * clean interface between .NET/CLR and the unmanaged C library libpurple.
+ *
+ * This is the second major commit of the code.
+ * Next things:
+ *  - A few of the .h files have anonymous parameter names (eg: void cat(int, int).
+ *    This program will need to assign these parameters names.
+ *  - Function pointers inside structs aren't translated correctly into C#.
+ *  - Two places there are specific-length arrays (eg: char hostname[256]). The parser
+ *    does not detect them as an array.
+ */
+
+using System;
+using System.Collections.Generic;
+using System.Runtime.InteropServices;
+
+namespace PurpleWrapper
+{
+
+	/*
+	 * File: whiteboard.h
+	 * Structure: PurpleWhiteboardPrplOps
+	 */
+	public class PurpleWhiteboardPrplOps : UnmanagedWrapper<_PurpleWhiteboardPrplOps>
+	{
+		public PurpleWhiteboardPrplOps()
+		{
+		}
+
+		public PurpleWhiteboardPrplOps(IntPtr reference)
+		{
+			this.Reference = reference;
+			this.Data = (_PurpleWhiteboardPrplOps)Marshal.PtrToStructure(this.Reference, typeof(_PurpleWhiteboardPrplOps));
+		}
+
+		/*
+		 * Argument Name: start
+		 * Argument Type: void
+		 * Argument Category: Void
+		 */
+		public IntPtr start
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: end
+		 * Argument Type: void
+		 * Argument Category: Void
+		 */
+		public IntPtr end
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: get_dimensions
+		 * Argument Type: void
+		 * Argument Category: Void
+		 */
+		public IntPtr get_dimensions
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: set_dimensions
+		 * Argument Type: void
+		 * Argument Category: Void
+		 */
+		public IntPtr set_dimensions
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: get_brush
+		 * Argument Type: void
+		 * Argument Category: Void
+		 */
+		public IntPtr get_brush
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: set_brush
+		 * Argument Type: void
+		 * Argument Category: Void
+		 */
+		public IntPtr set_brush
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: send_draw_list
+		 * Argument Type: void
+		 * Argument Category: Void
+		 */
+		public IntPtr send_draw_list
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: clear
+		 * Argument Type: void
+		 * Argument Category: Void
+		 */
+		public IntPtr clear
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: _purple_reserved1
+		 * Argument Type: void
+		 * Argument Category: Void
+		 */
+		public IntPtr _purple_reserved1
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: _purple_reserved2
+		 * Argument Type: void
+		 * Argument Category: Void
+		 */
+		public IntPtr _purple_reserved2
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: _purple_reserved3
+		 * Argument Type: void
+		 * Argument Category: Void
+		 */
+		public IntPtr _purple_reserved3
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: _purple_reserved4
+		 * Argument Type: void
+		 * Argument Category: Void
+		 */
+		public IntPtr _purple_reserved4
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+	}
+
+
+	[StructLayout(LayoutKind.Sequential)]
+	public class _PurpleWhiteboardPrplOps
+	{
+		/*
+		 * void (*start)(PurpleWhiteboard * wb)
+		 */
+		public IntPtr start;
+
+		/*
+		 * void (*end)(PurpleWhiteboard * wb)
+		 */
+		public IntPtr end;
+
+		/*
+		 * void (*get_dimensions)(PurpleWhiteboard * wb, int * width, int * height)
+		 */
+		public IntPtr get_dimensions;
+
+		/*
+		 * void (*set_dimensions)(PurpleWhiteboard * wb, int width, int height)
+		 */
+		public IntPtr set_dimensions;
+
+		/*
+		 * void (*get_brush)(PurpleWhiteboard * wb, int * size, int * color)
+		 */
+		public IntPtr get_brush;
+
+		/*
+		 * void (*set_brush)(PurpleWhiteboard * wb, int size, int color)
+		 */
+		public IntPtr set_brush;
+
+		/*
+		 * void (*send_draw_list)(PurpleWhiteboard * wb, GList * draw_list)
+		 */
+		public IntPtr send_draw_list;
+
+		/*
+		 * void (*clear)(PurpleWhiteboard * wb)
+		 */
+		public IntPtr clear;
+
+		/*
+		 * void (*_purple_reserved1)()
+		 */
+		public IntPtr _purple_reserved1;
+
+		/*
+		 * void (*_purple_reserved2)()
+		 */
+		public IntPtr _purple_reserved2;
+
+		/*
+		 * void (*_purple_reserved3)()
+		 */
+		public IntPtr _purple_reserved3;
+
+		/*
+		 * void (*_purple_reserved4)()
+		 */
+		public IntPtr _purple_reserved4;
+
+	}
+
+}
+
============================================================
--- libpurple/wrapper/PurpleWhiteboardUiOps.cs	ee5ee6544ea1a72b8b3780b5d9a46d9e2485b520
+++ libpurple/wrapper/PurpleWhiteboardUiOps.cs	ee5ee6544ea1a72b8b3780b5d9a46d9e2485b520
@@ -0,0 +1,342 @@
+/* PurpleWrapper - A .NET (CLR) wrapper for libpurple
+ *
+ * Purple is the legal property of its developers, whose names are too numerous
+ * to list here.  Please refer to the COPYRIGHT file distributed with this
+ * source distribution.
+ *
+ * This program 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.
+ *
+ * This program 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 this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02111-1301  USA
+ */
+
+/*
+ * This file was auto-generated from the libpurple header files to provide a
+ * clean interface between .NET/CLR and the unmanaged C library libpurple.
+ *
+ * This is the second major commit of the code.
+ * Next things:
+ *  - A few of the .h files have anonymous parameter names (eg: void cat(int, int).
+ *    This program will need to assign these parameters names.
+ *  - Function pointers inside structs aren't translated correctly into C#.
+ *  - Two places there are specific-length arrays (eg: char hostname[256]). The parser
+ *    does not detect them as an array.
+ */
+
+using System;
+using System.Collections.Generic;
+using System.Runtime.InteropServices;
+
+namespace PurpleWrapper
+{
+
+	/*
+	 * File: whiteboard.h
+	 * Structure: PurpleWhiteboardUiOps
+	 */
+	public class PurpleWhiteboardUiOps : UnmanagedWrapper<_PurpleWhiteboardUiOps>
+	{
+		public PurpleWhiteboardUiOps()
+		{
+		}
+
+		public PurpleWhiteboardUiOps(IntPtr reference)
+		{
+			this.Reference = reference;
+			this.Data = (_PurpleWhiteboardUiOps)Marshal.PtrToStructure(this.Reference, typeof(_PurpleWhiteboardUiOps));
+		}
+
+		/*
+		 * Argument Name: create
+		 * Argument Type: void
+		 * Argument Category: Void
+		 */
+		public IntPtr create
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: destroy
+		 * Argument Type: void
+		 * Argument Category: Void
+		 */
+		public IntPtr destroy
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: set_dimensions
+		 * Argument Type: void
+		 * Argument Category: Void
+		 */
+		public IntPtr set_dimensions
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: set_brush
+		 * Argument Type: void
+		 * Argument Category: Void
+		 */
+		public IntPtr set_brush
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: draw_point
+		 * Argument Type: void
+		 * Argument Category: Void
+		 */
+		public IntPtr draw_point
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: draw_line
+		 * Argument Type: void
+		 * Argument Category: Void
+		 */
+		public IntPtr draw_line
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: clear
+		 * Argument Type: void
+		 * Argument Category: Void
+		 */
+		public IntPtr clear
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: _purple_reserved1
+		 * Argument Type: void
+		 * Argument Category: Void
+		 */
+		public IntPtr _purple_reserved1
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: _purple_reserved2
+		 * Argument Type: void
+		 * Argument Category: Void
+		 */
+		public IntPtr _purple_reserved2
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: _purple_reserved3
+		 * Argument Type: void
+		 * Argument Category: Void
+		 */
+		public IntPtr _purple_reserved3
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: _purple_reserved4
+		 * Argument Type: void
+		 * Argument Category: Void
+		 */
+		public IntPtr _purple_reserved4
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+	}
+
+
+	[StructLayout(LayoutKind.Sequential)]
+	public class _PurpleWhiteboardUiOps
+	{
+		/*
+		 * void (*create)(PurpleWhiteboard * wb)
+		 */
+		public IntPtr create;
+
+		/*
+		 * void (*destroy)(PurpleWhiteboard * wb)
+		 */
+		public IntPtr destroy;
+
+		/*
+		 * void (*set_dimensions)(PurpleWhiteboard * wb, int width, int height)
+		 */
+		public IntPtr set_dimensions;
+
+		/*
+		 * void (*set_brush)(PurpleWhiteboard * wb, int size, int color)
+		 */
+		public IntPtr set_brush;
+
+		/*
+		 * void (*draw_point)(PurpleWhiteboard * wb, int x, int y, int color, int size)
+		 */
+		public IntPtr draw_point;
+
+		/*
+		 * void (*draw_line)(PurpleWhiteboard * wb, int x1, int y1, int x2, int y2, int color, int size)
+		 */
+		public IntPtr draw_line;
+
+		/*
+		 * void (*clear)(PurpleWhiteboard * wb)
+		 */
+		public IntPtr clear;
+
+		/*
+		 * void (*_purple_reserved1)()
+		 */
+		public IntPtr _purple_reserved1;
+
+		/*
+		 * void (*_purple_reserved2)()
+		 */
+		public IntPtr _purple_reserved2;
+
+		/*
+		 * void (*_purple_reserved3)()
+		 */
+		public IntPtr _purple_reserved3;
+
+		/*
+		 * void (*_purple_reserved4)()
+		 */
+		public IntPtr _purple_reserved4;
+
+	}
+
+}
+
============================================================
--- libpurple/wrapper/PurpleWrapper.csproj	cda9988892e23cf62f44eefee6f20ef427533252
+++ libpurple/wrapper/PurpleWrapper.csproj	cda9988892e23cf62f44eefee6f20ef427533252
@@ -0,0 +1,180 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="3.5" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <PropertyGroup>
+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+    <ProductVersion>9.0.30729</ProductVersion>
+    <SchemaVersion>2.0</SchemaVersion>
+    <ProjectGuid>{8034DEA9-30CC-DEA0-3903-80210CE809FA}</ProjectGuid>
+    <OutputType>Library</OutputType>
+    <AppDesignerFolder>Properties</AppDesignerFolder>
+    <RootNamespace>Scripts</RootNamespace>
+    <AssemblyName>Scripts</AssemblyName>
+    <TargetFrameworkVersion>v3.5</TargetFrameworkVersion>
+    <FileAlignment>512</FileAlignment>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+    <DebugSymbols>true</DebugSymbols>
+    <DebugType>full</DebugType>
+    <Optimize>false</Optimize>
+    <OutputPath>bin\Debug\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+    <PlatformTarget>x86</PlatformTarget>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+    <DebugType>pdbonly</DebugType>
+    <Optimize>true</Optimize>
+    <OutputPath>bin\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x86' ">
+    <PlatformTarget>x86</PlatformTarget>
+    <OutputPath>bin\x86\Debug\</OutputPath>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x86' ">
+    <PlatformTarget>x86</PlatformTarget>
+    <OutputPath>bin\x86\Release\</OutputPath>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug %28Win32%29|AnyCPU' ">
+    <OutputPath>bin\Debug %28Win32%29\</OutputPath>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug %28Win32%29|x86' ">
+    <OutputPath>bin\x86\Debug %28Win32%29\</OutputPath>
+  </PropertyGroup>
+  <ItemGroup>
+    <Reference Include="System" />
+    <Reference Include="System.Core">
+      <RequiredTargetFramework>3.5</RequiredTargetFramework>
+    </Reference>
+  </ItemGroup>
+  <ItemGroup>
+    <Compile Include="UnmanagedWrapper.cs" />
+    <Compile Include="Account.cs" />
+    <Compile Include="PurpleAccountUiOps.cs" />
+    <Compile Include="PurpleAccount.cs" />
+    <Compile Include="Accountopt.cs" />
+    <Compile Include="Blist.cs" />
+    <Compile Include="PurpleBlistNode.cs" />
+    <Compile Include="PurpleBuddy.cs" />
+    <Compile Include="PurpleContact.cs" />
+    <Compile Include="PurpleGroup.cs" />
+    <Compile Include="PurpleChat.cs" />
+    <Compile Include="PurpleBuddyList.cs" />
+    <Compile Include="PurpleBlistUiOps.cs" />
+    <Compile Include="Buddyicon.cs" />
+    <Compile Include="Certificate.cs" />
+    <Compile Include="PurpleCertificate.cs" />
+    <Compile Include="PurpleCertificatePool.cs" />
+    <Compile Include="PurpleCertificateScheme.cs" />
+    <Compile Include="PurpleCertificateVerifier.cs" />
+    <Compile Include="PurpleCertificateVerificationRequest.cs" />
+    <Compile Include="Cipher.cs" />
+    <Compile Include="PurpleCipherOps.cs" />
+    <Compile Include="Circbuffer.cs" />
+    <Compile Include="PurpleCircBuffer.cs" />
+    <Compile Include="Cmds.cs" />
+    <Compile Include="Config.cs" />
+    <Compile Include="Connection.cs" />
+    <Compile Include="PurpleConnection.cs" />
+    <Compile Include="Conversation.cs" />
+    <Compile Include="PurpleConversationUiOps.cs" />
+    <Compile Include="PurpleConvIm.cs" />
+    <Compile Include="PurpleConvChat.cs" />
+    <Compile Include="PurpleConvChatBuddy.cs" />
+    <Compile Include="PurpleConvMessage.cs" />
+    <Compile Include="PurpleConversation.cs" />
+    <Compile Include="Core.cs" />
+    <Compile Include="Debug.cs" />
+    <Compile Include="Desktopitem.cs" />
+    <Compile Include="Dnsquery.cs" />
+    <Compile Include="Dnssrv.cs" />
+    <Compile Include="PurpleSrvResponse.cs" />
+    <Compile Include="Eventloop.cs" />
+    <Compile Include="PurpleEventLoopUiOps.cs" />
+    <Compile Include="Ft.cs" />
+    <Compile Include="PurpleXfer.cs" />
+    <Compile Include="Idle.cs" />
+    <Compile Include="Imgstore.cs" />
+    <Compile Include="Log.cs" />
+    <Compile Include="PurpleLogLogger.cs" />
+    <Compile Include="PurpleLog.cs" />
+    <Compile Include="PurpleLogCommonLoggerData.cs" />
+    <Compile Include="PurpleLogSet.cs" />
+    <Compile Include="Media.cs" />
+    <Compile Include="Mediamanager.cs" />
+    <Compile Include="Mime.cs" />
+    <Compile Include="NatPmp.cs" />
+    <Compile Include="Network.cs" />
+    <Compile Include="Notify.cs" />
+    <Compile Include="Ntlm.cs" />
+    <Compile Include="Plugin.cs" />
+    <Compile Include="PurplePluginInfo.cs" />
+    <Compile Include="PurplePluginLoaderInfo.cs" />
+    <Compile Include="PurplePlugin.cs" />
+    <Compile Include="PurplePluginUiInfo.cs" />
+    <Compile Include="PurplePluginAction.cs" />
+    <Compile Include="Pluginpref.cs" />
+    <Compile Include="Pounce.cs" />
+    <Compile Include="PurplePounce.cs" />
+    <Compile Include="Prefs.cs" />
+    <Compile Include="Privacy.cs" />
+    <Compile Include="Proxy.cs" />
+    <Compile Include="Prpl.cs" />
+    <Compile Include="PurpleBuddyIconSpec.cs" />
+    <Compile Include="proto_chat_entry.cs" />
+    <Compile Include="PurpleAttentionType.cs" />
+    <Compile Include="PurplePluginProtocolInfo.cs" />
+    <Compile Include="PurpleClient.cs" />
+    <Compile Include="Request.cs" />
+    <Compile Include="PurpleRequestField.cs" />
+    <Compile Include="Roomlist.cs" />
+    <Compile Include="PurpleRoomlist.cs" />
+    <Compile Include="PurpleRoomlistRoom.cs" />
+    <Compile Include="PurpleRoomlistField.cs" />
+    <Compile Include="PurpleRoomlistUiOps.cs" />
+    <Compile Include="Savedstatuses.cs" />
+    <Compile Include="Server.cs" />
+    <Compile Include="Signals.cs" />
+    <Compile Include="Smiley.cs" />
+    <Compile Include="SoundThemeLoader.cs" />
+    <Compile Include="PurpleSoundThemeLoader.cs" />
+    <Compile Include="PurpleSoundThemeLoaderClass.cs" />
+    <Compile Include="SoundTheme.cs" />
+    <Compile Include="PurpleSoundTheme.cs" />
+    <Compile Include="PurpleSoundThemeClass.cs" />
+    <Compile Include="Sound.cs" />
+    <Compile Include="PurpleSoundUiOps.cs" />
+    <Compile Include="Sslconn.cs" />
+    <Compile Include="PurpleSslConnection.cs" />
+    <Compile Include="Status.cs" />
+    <Compile Include="Stringref.cs" />
+    <Compile Include="Stun.cs" />
+    <Compile Include="PurpleStunNatDiscovery.cs" />
+    <Compile Include="ThemeLoader.cs" />
+    <Compile Include="PurpleThemeLoader.cs" />
+    <Compile Include="PurpleThemeLoaderClass.cs" />
+    <Compile Include="ThemeManager.cs" />
+    <Compile Include="PurpleThemeManager.cs" />
+    <Compile Include="PurpleThemeManagerClass.cs" />
+    <Compile Include="Theme.cs" />
+    <Compile Include="PurpleTheme.cs" />
+    <Compile Include="PurpleThemeClass.cs" />
+    <Compile Include="Upnp.cs" />
+    <Compile Include="Util.cs" />
+    <Compile Include="PurpleMenuAction.cs" />
+    <Compile Include="PurpleKeyValuePair.cs" />
+    <Compile Include="Value.cs" />
+    <Compile Include="Version.cs" />
+    <Compile Include="Whiteboard.cs" />
+    <Compile Include="PurpleWhiteboard.cs" />
+    <Compile Include="PurpleWhiteboardUiOps.cs" />
+    <Compile Include="PurpleWhiteboardPrplOps.cs" />
+    <Compile Include="XMLNodeClass.cs" />
+    <Compile Include="xmlnode.cs" />
+  </ItemGroup>
+  <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
+</Project>
\ No newline at end of file
============================================================
--- libpurple/wrapper/PurpleXfer.cs	d7dfed200d807464cd60a43a82b2817a978f9ed3
+++ libpurple/wrapper/PurpleXfer.cs	d7dfed200d807464cd60a43a82b2817a978f9ed3
@@ -0,0 +1,789 @@
+/* PurpleWrapper - A .NET (CLR) wrapper for libpurple
+ *
+ * Purple is the legal property of its developers, whose names are too numerous
+ * to list here.  Please refer to the COPYRIGHT file distributed with this
+ * source distribution.
+ *
+ * This program 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.
+ *
+ * This program 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 this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02111-1301  USA
+ */
+
+/*
+ * This file was auto-generated from the libpurple header files to provide a
+ * clean interface between .NET/CLR and the unmanaged C library libpurple.
+ *
+ * This is the second major commit of the code.
+ * Next things:
+ *  - A few of the .h files have anonymous parameter names (eg: void cat(int, int).
+ *    This program will need to assign these parameters names.
+ *  - Function pointers inside structs aren't translated correctly into C#.
+ *  - Two places there are specific-length arrays (eg: char hostname[256]). The parser
+ *    does not detect them as an array.
+ */
+
+using System;
+using System.Collections.Generic;
+using System.Runtime.InteropServices;
+
+namespace PurpleWrapper
+{
+
+	/*
+	 * File: ft.h
+	 * Structure: PurpleXfer
+	 */
+	public class PurpleXfer : UnmanagedWrapper<_PurpleXfer>
+	{
+		public PurpleXfer()
+		{
+		}
+
+		public PurpleXfer(IntPtr reference)
+		{
+			this.Reference = reference;
+			this.Data = (_PurpleXfer)Marshal.PtrToStructure(this.Reference, typeof(_PurpleXfer));
+		}
+
+		/*
+		 * Argument Name: ref
+		 * Argument Type: guint
+		 * Argument Category: Native
+		 */
+		public uint ref_
+		{
+			get
+			{
+				return this.Data.ref_;
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				this.Data.ref_ = value;
+			}
+		}
+
+		/*
+		 * Argument Name: type
+		 * Argument Type: PurpleXferType
+		 * Argument Category: KnownEnum
+		 */
+		public Ft.PurpleXferType type
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: account
+		 * Argument Type: PurpleAccount *
+		 * Argument Category: PointerToKnownStruct
+		 */
+		public PurpleAccount account
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: who
+		 * Argument Type: char *
+		 * Argument Category: Native
+		 */
+		public string who
+		{
+			get
+			{
+				return this.Data.who;
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				this.Data.who = value;
+			}
+		}
+
+		/*
+		 * Argument Name: message
+		 * Argument Type: char *
+		 * Argument Category: Native
+		 */
+		public string message
+		{
+			get
+			{
+				return this.Data.message;
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				this.Data.message = value;
+			}
+		}
+
+		/*
+		 * Argument Name: filename
+		 * Argument Type: char *
+		 * Argument Category: Native
+		 */
+		public string filename
+		{
+			get
+			{
+				return this.Data.filename;
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				this.Data.filename = value;
+			}
+		}
+
+		/*
+		 * Argument Name: local_filename
+		 * Argument Type: char *
+		 * Argument Category: Native
+		 */
+		public string local_filename
+		{
+			get
+			{
+				return this.Data.local_filename;
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				this.Data.local_filename = value;
+			}
+		}
+
+		/*
+		 * Argument Name: size
+		 * Argument Type: size_t
+		 * Argument Category: Native
+		 */
+		public ulong size
+		{
+			get
+			{
+				return this.Data.size;
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				this.Data.size = value;
+			}
+		}
+
+		/*
+		 * Argument Name: dest_fp
+		 * Argument Type: FILE *
+		 * Argument Category: PointerToUnknownStruct
+		 */
+		public /* Resolved as PointerToUnknownStruct to FILE */ IntPtr dest_fp
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: remote_ip
+		 * Argument Type: char *
+		 * Argument Category: Native
+		 */
+		public string remote_ip
+		{
+			get
+			{
+				return this.Data.remote_ip;
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				this.Data.remote_ip = value;
+			}
+		}
+
+		/*
+		 * Argument Name: local_port
+		 * Argument Type: int
+		 * Argument Category: Native
+		 */
+		public int local_port
+		{
+			get
+			{
+				return this.Data.local_port;
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				this.Data.local_port = value;
+			}
+		}
+
+		/*
+		 * Argument Name: remote_port
+		 * Argument Type: int
+		 * Argument Category: Native
+		 */
+		public int remote_port
+		{
+			get
+			{
+				return this.Data.remote_port;
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				this.Data.remote_port = value;
+			}
+		}
+
+		/*
+		 * Argument Name: fd
+		 * Argument Type: int
+		 * Argument Category: Native
+		 */
+		public int fd
+		{
+			get
+			{
+				return this.Data.fd;
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				this.Data.fd = value;
+			}
+		}
+
+		/*
+		 * Argument Name: watcher
+		 * Argument Type: int
+		 * Argument Category: Native
+		 */
+		public int watcher
+		{
+			get
+			{
+				return this.Data.watcher;
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				this.Data.watcher = value;
+			}
+		}
+
+		/*
+		 * Argument Name: bytes_sent
+		 * Argument Type: size_t
+		 * Argument Category: Native
+		 */
+		public ulong bytes_sent
+		{
+			get
+			{
+				return this.Data.bytes_sent;
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				this.Data.bytes_sent = value;
+			}
+		}
+
+		/*
+		 * Argument Name: bytes_remaining
+		 * Argument Type: size_t
+		 * Argument Category: Native
+		 */
+		public ulong bytes_remaining
+		{
+			get
+			{
+				return this.Data.bytes_remaining;
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				this.Data.bytes_remaining = value;
+			}
+		}
+
+		/*
+		 * Argument Name: start_time
+		 * Argument Type: time_t
+		 * Argument Category: DateTime
+		 */
+		public DateTime start_time
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: end_time
+		 * Argument Type: time_t
+		 * Argument Category: DateTime
+		 */
+		public DateTime end_time
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: current_buffer_size
+		 * Argument Type: size_t
+		 * Argument Category: Native
+		 */
+		public ulong current_buffer_size
+		{
+			get
+			{
+				return this.Data.current_buffer_size;
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				this.Data.current_buffer_size = value;
+			}
+		}
+
+		/*
+		 * Argument Name: status
+		 * Argument Type: PurpleXferStatusType
+		 * Argument Category: KnownEnum
+		 */
+		public Ft.PurpleXferStatusType status
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: {
+		void (*init)(PurpleXfer *xfer)
+		 * Argument Type: struct
+		 * Argument Category: InnerStruct
+		 */
+		/*
+		 * Could not generate a wrapper for PurpleXfer.{
+		void (*init)(PurpleXfer *xfer) in file "ft.h".
+		 * Message: The struct contains an inner-struct or inner-union and cannot be automatically wrapped.
+		 */
+
+		/*
+		 * Argument Name: request_denied
+		 * Argument Type: void
+		 * Argument Category: Void
+		 */
+		public IntPtr request_denied
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: start
+		 * Argument Type: void
+		 * Argument Category: Void
+		 */
+		public IntPtr start
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: end
+		 * Argument Type: void
+		 * Argument Category: Void
+		 */
+		public IntPtr end
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: cancel_send
+		 * Argument Type: void
+		 * Argument Category: Void
+		 */
+		public IntPtr cancel_send
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: cancel_recv
+		 * Argument Type: void
+		 * Argument Category: Void
+		 */
+		public IntPtr cancel_recv
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: read
+		 * Argument Type: gssize
+		 * Argument Category: Native
+		 */
+		public IntPtr read
+		{
+			get
+			{
+				return this.Data.read;
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				this.Data.read = value;
+			}
+		}
+
+		/*
+		 * Argument Name: write
+		 * Argument Type: gssize
+		 * Argument Category: Native
+		 */
+		public IntPtr write
+		{
+			get
+			{
+				return this.Data.write;
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				this.Data.write = value;
+			}
+		}
+
+		/*
+		 * Argument Name: ack
+		 * Argument Type: void
+		 * Argument Category: Void
+		 */
+		public IntPtr ack
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+	}
+
+
+	[StructLayout(LayoutKind.Sequential)]
+	public class _PurpleXfer
+	{
+		/*
+		 * guint ref
+		 */
+		public uint ref_;
+
+		/*
+		 * PurpleXferType type
+		 */
+		public Ft.PurpleXferType type;
+
+		/*
+		 * PurpleAccount * account
+		 */
+		public IntPtr account;
+
+		/*
+		 * char * who
+		 */
+		public string who;
+
+		/*
+		 * char * message
+		 */
+		public string message;
+
+		/*
+		 * char * filename
+		 */
+		public string filename;
+
+		/*
+		 * char * local_filename
+		 */
+		public string local_filename;
+
+		/*
+		 * size_t size
+		 */
+		public ulong size;
+
+		/*
+		 * FILE * dest_fp
+		 */
+		public IntPtr dest_fp;
+
+		/*
+		 * char * remote_ip
+		 */
+		public string remote_ip;
+
+		/*
+		 * int local_port
+		 */
+		public int local_port;
+
+		/*
+		 * int remote_port
+		 */
+		public int remote_port;
+
+		/*
+		 * int fd
+		 */
+		public int fd;
+
+		/*
+		 * int watcher
+		 */
+		public int watcher;
+
+		/*
+		 * size_t bytes_sent
+		 */
+		public ulong bytes_sent;
+
+		/*
+		 * size_t bytes_remaining
+		 */
+		public ulong bytes_remaining;
+
+		/*
+		 * time_t start_time
+		 */
+		public ulong start_time;
+
+		/*
+		 * time_t end_time
+		 */
+		public ulong end_time;
+
+		/*
+		 * size_t current_buffer_size
+		 */
+		public ulong current_buffer_size;
+
+		/*
+		 * PurpleXferStatusType status
+		 */
+		public Ft.PurpleXferStatusType status;
+
+		/*
+		 * struct {
+		void (*init)(PurpleXfer *xfer)
+		 */
+		/*
+		 * Could not generate a wrapper for PurpleXfer.{
+		void (*init)(PurpleXfer *xfer) in file "ft.h".
+		 * Message: The struct contains an inner-struct or inner-union and cannot be automatically wrapped.
+		 */
+
+		/*
+		 * void (*request_denied)(PurpleXfer * xfer)
+		 */
+		public IntPtr request_denied;
+
+		/*
+		 * void (*start)(PurpleXfer * xfer)
+		 */
+		public IntPtr start;
+
+		/*
+		 * void (*end)(PurpleXfer * xfer)
+		 */
+		public IntPtr end;
+
+		/*
+		 * void (*cancel_send)(PurpleXfer * xfer)
+		 */
+		public IntPtr cancel_send;
+
+		/*
+		 * void (*cancel_recv)(PurpleXfer * xfer)
+		 */
+		public IntPtr cancel_recv;
+
+		/*
+		 * gssize (*read)(guchar ** buffer, PurpleXfer * xfer)
+		 */
+		public IntPtr read;
+
+		/*
+		 * gssize (*write)(guchar * buffer, size_t size, PurpleXfer * xfer)
+		 */
+		public IntPtr write;
+
+		/*
+		 * void (*ack)(PurpleXfer * xfer, guchar * buffer, size_t size)
+		 */
+		public IntPtr ack;
+
+	}
+
+}
+
============================================================
--- libpurple/wrapper/Request.cs	7c608be59c50f1daf9009e475aea50bdfe0e2a6d
+++ libpurple/wrapper/Request.cs	7c608be59c50f1daf9009e475aea50bdfe0e2a6d
@@ -0,0 +1,768 @@
+/* PurpleWrapper - A .NET (CLR) wrapper for libpurple
+ *
+ * Purple is the legal property of its developers, whose names are too numerous
+ * to list here.  Please refer to the COPYRIGHT file distributed with this
+ * source distribution.
+ *
+ * This program 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.
+ *
+ * This program 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 this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02111-1301  USA
+ */
+
+/*
+ * This file was auto-generated from the libpurple header files to provide a
+ * clean interface between .NET/CLR and the unmanaged C library libpurple.
+ *
+ * This is the second major commit of the code.
+ * Next things:
+ *  - A few of the .h files have anonymous parameter names (eg: void cat(int, int).
+ *    This program will need to assign these parameters names.
+ *  - Function pointers inside structs aren't translated correctly into C#.
+ *  - Two places there are specific-length arrays (eg: char hostname[256]). The parser
+ *    does not detect them as an array.
+ */
+
+using System;
+using System.Collections.Generic;
+using System.Runtime.InteropServices;
+
+namespace PurpleWrapper
+{
+
+	/*
+	 * File: request.h
+	 */
+	public class Request
+	{
+		public enum PurpleRequestType
+		{
+			PURPLE_REQUEST_INPUT = 0,
+			PURPLE_REQUEST_CHOICE,
+			PURPLE_REQUEST_ACTION,
+			PURPLE_REQUEST_FIELDS,
+			PURPLE_REQUEST_FILE,
+			PURPLE_REQUEST_FOLDER
+		};
+
+		public enum PurpleRequestFieldType
+		{
+			PURPLE_REQUEST_FIELD_NONE,
+			PURPLE_REQUEST_FIELD_STRING,
+			PURPLE_REQUEST_FIELD_INTEGER,
+			PURPLE_REQUEST_FIELD_BOOLEAN,
+			PURPLE_REQUEST_FIELD_CHOICE,
+			PURPLE_REQUEST_FIELD_LIST,
+			PURPLE_REQUEST_FIELD_LABEL,
+			PURPLE_REQUEST_FIELD_IMAGE,
+			PURPLE_REQUEST_FIELD_ACCOUNT
+		};
+
+		public delegate void PurpleRequestInputCb(IntPtr _PurpleWrapper_arg0, string _PurpleWrapper_arg1);
+		public delegate void PurpleRequestActionCb(IntPtr _PurpleWrapper_arg0, /* Unresolved: [Category: Unknown], [Name:  ] */ IntPtr _PurpleWrapper_arg1);
+		public delegate void PurpleRequestChoiceCb(IntPtr _PurpleWrapper_arg0, /* Unresolved: [Category: Unknown], [Name:  ] */ IntPtr _PurpleWrapper_arg1);
+		public delegate void PurpleRequestFieldsCb(IntPtr _PurpleWrapper_arg0, IntPtr fields);
+		public delegate void PurpleRequestFileCb(IntPtr _PurpleWrapper_arg0, string filename);
+
+		/*
+		 * Function Name: purple_request_fields_new
+		 * Function Type: PurpleRequestFields *
+		 * Function RawType: PurpleRequestFields
+		 * Function Category: PointerToUnknownStruct
+		 */
+		/*
+		 * PurpleRequestFields * purple_request_fields_new()
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern IntPtr purple_request_fields_new();
+
+		public static /* Resolved as PointerToUnknownStruct to PurpleRequestFields */ IntPtr FieldsNew()
+		{
+			/* Unable to process the return value of purple_request_fields_new, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_request_fields_destroy
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_request_fields_destroy(PurpleRequestFields * fields)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_request_fields_destroy(IntPtr fields);
+
+		public static void FieldsDestroy(/* Resolved as PointerToUnknownStruct to PurpleRequestFields */ IntPtr fields)
+		{
+			/* Unable to process fields, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_request_fields_get_groups
+		 * Function Type: GList *
+		 * Function RawType: GList
+		 * Function Category: PointerToGList
+		 */
+		/*
+		 * GList * purple_request_fields_get_groups(PurpleRequestFields * fields)
+		 * 
+		 * Could not generate a wrapper for purple_request_fields_get_groups in file "request.h".
+		 * Message: Unknown inner-type of argument 0 of purple_request_fields_get_groups
+		 */
+
+		/*
+		 * Function Name: purple_request_fields_get_required
+		 * Function Type: GList *
+		 * Function RawType: GList
+		 * Function Category: PointerToGList
+		 */
+		/*
+		 * GList * purple_request_fields_get_required(PurpleRequestFields * fields)
+		 * 
+		 * Could not generate a wrapper for purple_request_fields_get_required in file "request.h".
+		 * Message: Unknown inner-type of argument 0 of purple_request_fields_get_required
+		 */
+
+		/*
+		 * Function Name: purple_request_field_group_new
+		 * Function Type: PurpleRequestFieldGroup *
+		 * Function RawType: PurpleRequestFieldGroup
+		 * Function Category: PointerToUnknownStruct
+		 */
+		/*
+		 * PurpleRequestFieldGroup * purple_request_field_group_new(char * title)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern IntPtr purple_request_field_group_new(string title);
+
+		public static /* Resolved as PointerToUnknownStruct to PurpleRequestFieldGroup */ IntPtr FieldGroupNew(string title)
+		{
+			/* Unable to process the return value of purple_request_field_group_new, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_request_field_group_destroy
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_request_field_group_destroy(PurpleRequestFieldGroup * group)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_request_field_group_destroy(IntPtr group);
+
+		public static void FieldGroupDestroy(/* Resolved as PointerToUnknownStruct to PurpleRequestFieldGroup */ IntPtr group)
+		{
+			/* Unable to process group, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_request_field_destroy
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_request_field_destroy(PurpleRequestField * field)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_request_field_destroy(IntPtr field);
+
+		public static void FieldDestroy(PurpleRequestField field)
+		{
+			purple_request_field_destroy(field.Reference);
+		}
+
+		/*
+		 * Function Name: purple_request_field_set_label
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_request_field_set_label(PurpleRequestField * field, char * label)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_request_field_set_label(IntPtr field, string label);
+
+		public static void FieldSetLabel(PurpleRequestField field, string label)
+		{
+			purple_request_field_set_label(field.Reference, label);
+		}
+
+		/*
+		 * Function Name: purple_request_field_set_visible
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_request_field_set_visible(PurpleRequestField * field, gboolean visible)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_request_field_set_visible(IntPtr field, bool visible);
+
+		public static void FieldSetVisible(PurpleRequestField field, bool visible)
+		{
+			purple_request_field_set_visible(field.Reference, visible);
+		}
+
+		/*
+		 * Function Name: purple_request_field_get_type
+		 * Function Type: PurpleRequestFieldType
+		 * Function RawType: PurpleRequestFieldType
+		 * Function Category: KnownEnum
+		 */
+		/*
+		 * PurpleRequestFieldType purple_request_field_get_type(PurpleRequestField * field)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern Request.PurpleRequestFieldType purple_request_field_get_type(IntPtr field);
+
+		public static Request.PurpleRequestFieldType FieldGetType(PurpleRequestField field)
+		{
+			/* Unable to process the return value of purple_request_field_get_type, a KnownEnum. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_request_field_get_group
+		 * Function Type: PurpleRequestFieldGroup *
+		 * Function RawType: PurpleRequestFieldGroup
+		 * Function Category: PointerToUnknownStruct
+		 */
+		/*
+		 * PurpleRequestFieldGroup * purple_request_field_get_group(PurpleRequestField * field)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern IntPtr purple_request_field_get_group(IntPtr field);
+
+		public static /* Resolved as PointerToUnknownStruct to PurpleRequestFieldGroup */ IntPtr FieldGetGroup(PurpleRequestField field)
+		{
+			/* Unable to process the return value of purple_request_field_get_group, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_request_field_get_id
+		 * Function Type: char *
+		 * Function RawType: char
+		 * Function Category: Native
+		 */
+		/*
+		 * char * purple_request_field_get_id(PurpleRequestField * field)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern string purple_request_field_get_id(IntPtr field);
+
+		public static string FieldGetId(PurpleRequestField field)
+		{
+			return purple_request_field_get_id(field.Reference);
+		}
+
+		/*
+		 * Function Name: purple_request_field_get_label
+		 * Function Type: char *
+		 * Function RawType: char
+		 * Function Category: Native
+		 */
+		/*
+		 * char * purple_request_field_get_label(PurpleRequestField * field)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern string purple_request_field_get_label(IntPtr field);
+
+		public static string FieldGetLabel(PurpleRequestField field)
+		{
+			return purple_request_field_get_label(field.Reference);
+		}
+
+		/*
+		 * Function Name: purple_request_field_is_visible
+		 * Function Type: gboolean
+		 * Function RawType: gboolean
+		 * Function Category: Native
+		 */
+		/*
+		 * gboolean purple_request_field_is_visible(PurpleRequestField * field)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern bool purple_request_field_is_visible(IntPtr field);
+
+		public static bool FieldIsVisible(PurpleRequestField field)
+		{
+			return purple_request_field_is_visible(field.Reference);
+		}
+
+		/*
+		 * Function Name: purple_request_field_get_type_hint
+		 * Function Type: char *
+		 * Function RawType: char
+		 * Function Category: Native
+		 */
+		/*
+		 * char * purple_request_field_get_type_hint(PurpleRequestField * field)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern string purple_request_field_get_type_hint(IntPtr field);
+
+		public static string FieldGetTypeHint(PurpleRequestField field)
+		{
+			return purple_request_field_get_type_hint(field.Reference);
+		}
+
+		/*
+		 * Function Name: purple_request_field_is_required
+		 * Function Type: gboolean
+		 * Function RawType: gboolean
+		 * Function Category: Native
+		 */
+		/*
+		 * gboolean purple_request_field_is_required(PurpleRequestField * field)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern bool purple_request_field_is_required(IntPtr field);
+
+		public static bool FieldIsRequired(PurpleRequestField field)
+		{
+			return purple_request_field_is_required(field.Reference);
+		}
+
+		/*
+		 * Function Name: purple_request_field_get_ui_data
+		 * Function Type: gpointer
+		 * Function RawType: gpointer
+		 * Function Category: VoidPointer
+		 */
+		/*
+		 * gpointer purple_request_field_get_ui_data(PurpleRequestField * field)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern IntPtr purple_request_field_get_ui_data(IntPtr field);
+
+		public static IntPtr FieldGetUiData(PurpleRequestField field)
+		{
+			return purple_request_field_get_ui_data(field.Reference);
+		}
+
+		/*
+		 * Function Name: purple_request_field_string_get_value
+		 * Function Type: char *
+		 * Function RawType: char
+		 * Function Category: Native
+		 */
+		/*
+		 * char * purple_request_field_string_get_value(PurpleRequestField * field)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern string purple_request_field_string_get_value(IntPtr field);
+
+		public static string FieldStringGetValue(PurpleRequestField field)
+		{
+			return purple_request_field_string_get_value(field.Reference);
+		}
+
+		/*
+		 * Function Name: purple_request_field_string_is_multiline
+		 * Function Type: gboolean
+		 * Function RawType: gboolean
+		 * Function Category: Native
+		 */
+		/*
+		 * gboolean purple_request_field_string_is_multiline(PurpleRequestField * field)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern bool purple_request_field_string_is_multiline(IntPtr field);
+
+		public static bool FieldStringIsMultiline(PurpleRequestField field)
+		{
+			return purple_request_field_string_is_multiline(field.Reference);
+		}
+
+		/*
+		 * Function Name: purple_request_field_string_is_masked
+		 * Function Type: gboolean
+		 * Function RawType: gboolean
+		 * Function Category: Native
+		 */
+		/*
+		 * gboolean purple_request_field_string_is_masked(PurpleRequestField * field)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern bool purple_request_field_string_is_masked(IntPtr field);
+
+		public static bool FieldStringIsMasked(PurpleRequestField field)
+		{
+			return purple_request_field_string_is_masked(field.Reference);
+		}
+
+		/*
+		 * Function Name: purple_request_field_string_is_editable
+		 * Function Type: gboolean
+		 * Function RawType: gboolean
+		 * Function Category: Native
+		 */
+		/*
+		 * gboolean purple_request_field_string_is_editable(PurpleRequestField * field)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern bool purple_request_field_string_is_editable(IntPtr field);
+
+		public static bool FieldStringIsEditable(PurpleRequestField field)
+		{
+			return purple_request_field_string_is_editable(field.Reference);
+		}
+
+		/*
+		 * Function Name: purple_request_field_int_set_value
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_request_field_int_set_value(PurpleRequestField * field, int value)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_request_field_int_set_value(IntPtr field, int value);
+
+		public static void FieldIntSetValue(PurpleRequestField field, int value)
+		{
+			purple_request_field_int_set_value(field.Reference, value);
+		}
+
+		/*
+		 * Function Name: purple_request_field_int_get_default_value
+		 * Function Type: int
+		 * Function RawType: int
+		 * Function Category: Native
+		 */
+		/*
+		 * int purple_request_field_int_get_default_value(PurpleRequestField * field)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern int purple_request_field_int_get_default_value(IntPtr field);
+
+		public static int FieldIntGetDefaultValue(PurpleRequestField field)
+		{
+			return purple_request_field_int_get_default_value(field.Reference);
+		}
+
+		/*
+		 * Function Name: purple_request_field_int_get_value
+		 * Function Type: int
+		 * Function RawType: int
+		 * Function Category: Native
+		 */
+		/*
+		 * int purple_request_field_int_get_value(PurpleRequestField * field)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern int purple_request_field_int_get_value(IntPtr field);
+
+		public static int FieldIntGetValue(PurpleRequestField field)
+		{
+			return purple_request_field_int_get_value(field.Reference);
+		}
+
+		/*
+		 * Function Name: purple_request_field_bool_get_value
+		 * Function Type: gboolean
+		 * Function RawType: gboolean
+		 * Function Category: Native
+		 */
+		/*
+		 * gboolean purple_request_field_bool_get_value(PurpleRequestField * field)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern bool purple_request_field_bool_get_value(IntPtr field);
+
+		public static bool FieldBoolGetValue(PurpleRequestField field)
+		{
+			return purple_request_field_bool_get_value(field.Reference);
+		}
+
+		/*
+		 * Function Name: purple_request_field_choice_set_value
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_request_field_choice_set_value(PurpleRequestField * field, int value)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_request_field_choice_set_value(IntPtr field, int value);
+
+		public static void FieldChoiceSetValue(PurpleRequestField field, int value)
+		{
+			purple_request_field_choice_set_value(field.Reference, value);
+		}
+
+		/*
+		 * Function Name: purple_request_field_choice_get_default_value
+		 * Function Type: int
+		 * Function RawType: int
+		 * Function Category: Native
+		 */
+		/*
+		 * int purple_request_field_choice_get_default_value(PurpleRequestField * field)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern int purple_request_field_choice_get_default_value(IntPtr field);
+
+		public static int FieldChoiceGetDefaultValue(PurpleRequestField field)
+		{
+			return purple_request_field_choice_get_default_value(field.Reference);
+		}
+
+		/*
+		 * Function Name: purple_request_field_choice_get_value
+		 * Function Type: int
+		 * Function RawType: int
+		 * Function Category: Native
+		 */
+		/*
+		 * int purple_request_field_choice_get_value(PurpleRequestField * field)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern int purple_request_field_choice_get_value(IntPtr field);
+
+		public static int FieldChoiceGetValue(PurpleRequestField field)
+		{
+			return purple_request_field_choice_get_value(field.Reference);
+		}
+
+		/*
+		 * Function Name: purple_request_field_choice_get_labels
+		 * Function Type: GList *
+		 * Function RawType: GList
+		 * Function Category: PointerToGList
+		 */
+		/*
+		 * GList * purple_request_field_choice_get_labels(PurpleRequestField * field)
+		 * 
+		 * Could not generate a wrapper for purple_request_field_choice_get_labels in file "request.h".
+		 * Message: Unknown inner-type of argument 0 of purple_request_field_choice_get_labels
+		 */
+
+		/*
+		 * Function Name: purple_request_field_list_new
+		 * Function Type: PurpleRequestField *
+		 * Function RawType: PurpleRequestField
+		 * Function Category: PointerToKnownStruct
+		 */
+		/*
+		 * PurpleRequestField * purple_request_field_list_new(char * id, char * text)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern IntPtr purple_request_field_list_new(string id, string text);
+
+		public static PurpleRequestField FieldListNew(string id, string text)
+		{
+			return new PurpleRequestField(purple_request_field_list_new(id, text));
+		}
+
+		/*
+		 * Function Name: purple_request_field_list_clear_selected
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_request_field_list_clear_selected(PurpleRequestField * field)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_request_field_list_clear_selected(IntPtr field);
+
+		public static void FieldListClearSelected(PurpleRequestField field)
+		{
+			purple_request_field_list_clear_selected(field.Reference);
+		}
+
+		/*
+		 * Function Name: purple_request_field_list_get_items
+		 * Function Type: GList *
+		 * Function RawType: GList
+		 * Function Category: PointerToGList
+		 */
+		/*
+		 * GList * purple_request_field_list_get_items(PurpleRequestField * field)
+		 * 
+		 * Could not generate a wrapper for purple_request_field_list_get_items in file "request.h".
+		 * Message: Unknown inner-type of argument 0 of purple_request_field_list_get_items
+		 */
+
+		/*
+		 * Function Name: purple_request_field_image_set_scale
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_request_field_image_set_scale(PurpleRequestField * field, unsigned int x, unsigned int y)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_request_field_image_set_scale(IntPtr field, uint x, uint y);
+
+		public static void FieldImageSetScale(PurpleRequestField field, uint x, uint y)
+		{
+			purple_request_field_image_set_scale(field.Reference, x, y);
+		}
+
+		/*
+		 * Function Name: purple_request_field_image_get_buffer
+		 * Function Type: char *
+		 * Function RawType: char
+		 * Function Category: Native
+		 */
+		/*
+		 * char * purple_request_field_image_get_buffer(PurpleRequestField * field)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern string purple_request_field_image_get_buffer(IntPtr field);
+
+		public static string FieldImageGetBuffer(PurpleRequestField field)
+		{
+			return purple_request_field_image_get_buffer(field.Reference);
+		}
+
+		/*
+		 * Function Name: purple_request_field_image_get_size
+		 * Function Type: gsize
+		 * Function RawType: gsize
+		 * Function Category: Native
+		 */
+		/*
+		 * gsize purple_request_field_image_get_size(PurpleRequestField * field)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern ulong purple_request_field_image_get_size(IntPtr field);
+
+		public static ulong FieldImageGetSize(PurpleRequestField field)
+		{
+			return purple_request_field_image_get_size(field.Reference);
+		}
+
+		/*
+		 * Function Name: purple_request_field_image_get_scale_x
+		 * Function Type: unsigned int
+		 * Function RawType: int
+		 * Function Category: Native
+		 */
+		/*
+		 * unsigned int purple_request_field_image_get_scale_x(PurpleRequestField * field)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern uint purple_request_field_image_get_scale_x(IntPtr field);
+
+		public static uint FieldImageGetScaleX(PurpleRequestField field)
+		{
+			return purple_request_field_image_get_scale_x(field.Reference);
+		}
+
+		/*
+		 * Function Name: purple_request_field_image_get_scale_y
+		 * Function Type: unsigned int
+		 * Function RawType: int
+		 * Function Category: Native
+		 */
+		/*
+		 * unsigned int purple_request_field_image_get_scale_y(PurpleRequestField * field)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern uint purple_request_field_image_get_scale_y(IntPtr field);
+
+		public static uint FieldImageGetScaleY(PurpleRequestField field)
+		{
+			return purple_request_field_image_get_scale_y(field.Reference);
+		}
+
+		/*
+		 * Function Name: purple_request_close
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_request_close(PurpleRequestType type, void * uihandle)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_request_close(Request.PurpleRequestType type, IntPtr uihandle);
+
+		public static void Close(Request.PurpleRequestType type, IntPtr uihandle)
+		{
+			/* Unable to process type, a KnownEnum. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_request_close_with_handle
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_request_close_with_handle(void * handle)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_request_close_with_handle(IntPtr handle);
+
+		public static void CloseWithHandle(IntPtr handle)
+		{
+			purple_request_close_with_handle(handle);
+		}
+
+		/*
+		 * Function Name: purple_request_set_ui_ops
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_request_set_ui_ops(PurpleRequestUiOps * ops)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_request_set_ui_ops(IntPtr ops);
+
+		public static void SetUiOps(/* Resolved as PointerToUnknownStruct to PurpleRequestUiOps */ IntPtr ops)
+		{
+			/* Unable to process ops, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_request_get_ui_ops
+		 * Function Type: PurpleRequestUiOps *
+		 * Function RawType: PurpleRequestUiOps
+		 * Function Category: PointerToUnknownStruct
+		 */
+		/*
+		 * PurpleRequestUiOps * purple_request_get_ui_ops()
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern IntPtr purple_request_get_ui_ops();
+
+		public static /* Resolved as PointerToUnknownStruct to PurpleRequestUiOps */ IntPtr GetUiOps()
+		{
+			/* Unable to process the return value of purple_request_get_ui_ops, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+	}
+}
+
============================================================
--- libpurple/wrapper/Roomlist.cs	4b084a19266da03ebd7f11496d0370cd0f3dba54
+++ libpurple/wrapper/Roomlist.cs	4b084a19266da03ebd7f11496d0370cd0f3dba54
@@ -0,0 +1,444 @@
+/* PurpleWrapper - A .NET (CLR) wrapper for libpurple
+ *
+ * Purple is the legal property of its developers, whose names are too numerous
+ * to list here.  Please refer to the COPYRIGHT file distributed with this
+ * source distribution.
+ *
+ * This program 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.
+ *
+ * This program 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 this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02111-1301  USA
+ */
+
+/*
+ * This file was auto-generated from the libpurple header files to provide a
+ * clean interface between .NET/CLR and the unmanaged C library libpurple.
+ *
+ * This is the second major commit of the code.
+ * Next things:
+ *  - A few of the .h files have anonymous parameter names (eg: void cat(int, int).
+ *    This program will need to assign these parameters names.
+ *  - Function pointers inside structs aren't translated correctly into C#.
+ *  - Two places there are specific-length arrays (eg: char hostname[256]). The parser
+ *    does not detect them as an array.
+ */
+
+using System;
+using System.Collections.Generic;
+using System.Runtime.InteropServices;
+
+namespace PurpleWrapper
+{
+
+	/*
+	 * File: roomlist.h
+	 */
+	public class Roomlist
+	{
+		public enum PurpleRoomlistRoomType
+		{
+			PURPLE_ROOMLIST_ROOMTYPE_CATEGORY = 0x01,
+			PURPLE_ROOMLIST_ROOMTYPE_ROOM = 0x02
+		};
+
+		public enum PurpleRoomlistFieldType
+		{
+			PURPLE_ROOMLIST_FIELD_BOOL,
+			PURPLE_ROOMLIST_FIELD_INT,
+			PURPLE_ROOMLIST_FIELD_STRING
+		};
+
+
+		/*
+		 * Function Name: purple_roomlist_show_with_account
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_roomlist_show_with_account(PurpleAccount * account)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_roomlist_show_with_account(IntPtr account);
+
+		public static void ShowWithAccount(PurpleAccount account)
+		{
+			purple_roomlist_show_with_account(account.Reference);
+		}
+
+		/*
+		 * Function Name: purple_roomlist_new
+		 * Function Type: PurpleRoomlist *
+		 * Function RawType: PurpleRoomlist
+		 * Function Category: PointerToKnownStruct
+		 */
+		/*
+		 * PurpleRoomlist * purple_roomlist_new(PurpleAccount * account)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern IntPtr purple_roomlist_new(IntPtr account);
+
+		public static PurpleRoomlist New(PurpleAccount account)
+		{
+			return new PurpleRoomlist(purple_roomlist_new(account.Reference));
+		}
+
+		/*
+		 * Function Name: purple_roomlist_ref
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_roomlist_ref(PurpleRoomlist * list)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_roomlist_ref(IntPtr list);
+
+		public static void Ref(PurpleRoomlist list)
+		{
+			purple_roomlist_ref(list.Reference);
+		}
+
+		/*
+		 * Function Name: purple_roomlist_unref
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_roomlist_unref(PurpleRoomlist * list)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_roomlist_unref(IntPtr list);
+
+		public static void Unref(PurpleRoomlist list)
+		{
+			purple_roomlist_unref(list.Reference);
+		}
+
+		/*
+		 * Function Name: purple_roomlist_set_fields
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_roomlist_set_fields(PurpleRoomlist * list, GList * fields)
+		 * 
+		 * Could not generate a wrapper for purple_roomlist_set_fields in file "roomlist.h".
+		 * Message: Unable to provide a type for GList as no function information was provided in code.
+		 */
+
+		/*
+		 * Function Name: purple_roomlist_set_in_progress
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_roomlist_set_in_progress(PurpleRoomlist * list, gboolean in_progress)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_roomlist_set_in_progress(IntPtr list, bool in_progress);
+
+		public static void SetInProgress(PurpleRoomlist list, bool in_progress)
+		{
+			purple_roomlist_set_in_progress(list.Reference, in_progress);
+		}
+
+		/*
+		 * Function Name: purple_roomlist_get_in_progress
+		 * Function Type: gboolean
+		 * Function RawType: gboolean
+		 * Function Category: Native
+		 */
+		/*
+		 * gboolean purple_roomlist_get_in_progress(PurpleRoomlist * list)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern bool purple_roomlist_get_in_progress(IntPtr list);
+
+		public static bool GetInProgress(PurpleRoomlist list)
+		{
+			return purple_roomlist_get_in_progress(list.Reference);
+		}
+
+		/*
+		 * Function Name: purple_roomlist_room_add
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_roomlist_room_add(PurpleRoomlist * list, PurpleRoomlistRoom * room)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_roomlist_room_add(IntPtr list, IntPtr room);
+
+		public static void RoomAdd(PurpleRoomlist list, PurpleRoomlistRoom room)
+		{
+			purple_roomlist_room_add(list.Reference, room.Reference);
+		}
+
+		/*
+		 * Function Name: purple_roomlist_get_list
+		 * Function Type: PurpleRoomlist *
+		 * Function RawType: PurpleRoomlist
+		 * Function Category: PointerToKnownStruct
+		 */
+		/*
+		 * PurpleRoomlist * purple_roomlist_get_list(PurpleConnection * gc)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern IntPtr purple_roomlist_get_list(IntPtr gc);
+
+		public static PurpleRoomlist GetList(PurpleConnection gc)
+		{
+			return new PurpleRoomlist(purple_roomlist_get_list(gc.Reference));
+		}
+
+		/*
+		 * Function Name: purple_roomlist_cancel_get_list
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_roomlist_cancel_get_list(PurpleRoomlist * list)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_roomlist_cancel_get_list(IntPtr list);
+
+		public static void CancelGetList(PurpleRoomlist list)
+		{
+			purple_roomlist_cancel_get_list(list.Reference);
+		}
+
+		/*
+		 * Function Name: purple_roomlist_expand_category
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_roomlist_expand_category(PurpleRoomlist * list, PurpleRoomlistRoom * category)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_roomlist_expand_category(IntPtr list, IntPtr category);
+
+		public static void ExpandCategory(PurpleRoomlist list, PurpleRoomlistRoom category)
+		{
+			purple_roomlist_expand_category(list.Reference, category.Reference);
+		}
+
+		/*
+		 * Function Name: purple_roomlist_get_fields
+		 * Function Type: GList *
+		 * Function RawType: GList
+		 * Function Category: PointerToGList
+		 */
+		/*
+		 * GList * purple_roomlist_get_fields(PurpleRoomlist * roomlist)
+		 * 
+		 * Could not generate a wrapper for purple_roomlist_get_fields in file "roomlist.h".
+		 * Message: Unknown inner-type of argument 0 of purple_roomlist_get_fields
+		 */
+
+		/*
+		 * Function Name: purple_roomlist_room_add_field
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_roomlist_room_add_field(PurpleRoomlist * list, PurpleRoomlistRoom * room, gconstpointer field)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_roomlist_room_add_field(IntPtr list, IntPtr room, IntPtr field);
+
+		public static void RoomAddField(PurpleRoomlist list, PurpleRoomlistRoom room, IntPtr field)
+		{
+			purple_roomlist_room_add_field(list.Reference, room.Reference, field);
+		}
+
+		/*
+		 * Function Name: purple_roomlist_room_join
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_roomlist_room_join(PurpleRoomlist * list, PurpleRoomlistRoom * room)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_roomlist_room_join(IntPtr list, IntPtr room);
+
+		public static void RoomJoin(PurpleRoomlist list, PurpleRoomlistRoom room)
+		{
+			purple_roomlist_room_join(list.Reference, room.Reference);
+		}
+
+		/*
+		 * Function Name: purple_roomlist_room_get_type
+		 * Function Type: PurpleRoomlistRoomType
+		 * Function RawType: PurpleRoomlistRoomType
+		 * Function Category: KnownEnum
+		 */
+		/*
+		 * PurpleRoomlistRoomType purple_roomlist_room_get_type(PurpleRoomlistRoom * room)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern Roomlist.PurpleRoomlistRoomType purple_roomlist_room_get_type(IntPtr room);
+
+		public static Roomlist.PurpleRoomlistRoomType RoomGetType(PurpleRoomlistRoom room)
+		{
+			/* Unable to process the return value of purple_roomlist_room_get_type, a KnownEnum. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_roomlist_room_get_name
+		 * Function Type: char *
+		 * Function RawType: char
+		 * Function Category: Native
+		 */
+		/*
+		 * char * purple_roomlist_room_get_name(PurpleRoomlistRoom * room)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern string purple_roomlist_room_get_name(IntPtr room);
+
+		public static string RoomGetName(PurpleRoomlistRoom room)
+		{
+			return purple_roomlist_room_get_name(room.Reference);
+		}
+
+		/*
+		 * Function Name: purple_roomlist_room_get_parent
+		 * Function Type: PurpleRoomlistRoom *
+		 * Function RawType: PurpleRoomlistRoom
+		 * Function Category: PointerToKnownStruct
+		 */
+		/*
+		 * PurpleRoomlistRoom * purple_roomlist_room_get_parent(PurpleRoomlistRoom * room)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern IntPtr purple_roomlist_room_get_parent(IntPtr room);
+
+		public static PurpleRoomlistRoom RoomGetParent(PurpleRoomlistRoom room)
+		{
+			return new PurpleRoomlistRoom(purple_roomlist_room_get_parent(room.Reference));
+		}
+
+		/*
+		 * Function Name: purple_roomlist_room_get_fields
+		 * Function Type: GList *
+		 * Function RawType: GList
+		 * Function Category: PointerToGList
+		 */
+		/*
+		 * GList * purple_roomlist_room_get_fields(PurpleRoomlistRoom * room)
+		 * 
+		 * Could not generate a wrapper for purple_roomlist_room_get_fields in file "roomlist.h".
+		 * Message: Unknown inner-type of argument 0 of purple_roomlist_room_get_fields
+		 */
+
+		/*
+		 * Function Name: purple_roomlist_field_get_type
+		 * Function Type: PurpleRoomlistFieldType
+		 * Function RawType: PurpleRoomlistFieldType
+		 * Function Category: KnownEnum
+		 */
+		/*
+		 * PurpleRoomlistFieldType purple_roomlist_field_get_type(PurpleRoomlistField * field)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern Roomlist.PurpleRoomlistFieldType purple_roomlist_field_get_type(IntPtr field);
+
+		public static Roomlist.PurpleRoomlistFieldType FieldGetType(PurpleRoomlistField field)
+		{
+			/* Unable to process the return value of purple_roomlist_field_get_type, a KnownEnum. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_roomlist_field_get_label
+		 * Function Type: char *
+		 * Function RawType: char
+		 * Function Category: Native
+		 */
+		/*
+		 * char * purple_roomlist_field_get_label(PurpleRoomlistField * field)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern string purple_roomlist_field_get_label(IntPtr field);
+
+		public static string FieldGetLabel(PurpleRoomlistField field)
+		{
+			return purple_roomlist_field_get_label(field.Reference);
+		}
+
+		/*
+		 * Function Name: purple_roomlist_field_get_hidden
+		 * Function Type: gboolean
+		 * Function RawType: gboolean
+		 * Function Category: Native
+		 */
+		/*
+		 * gboolean purple_roomlist_field_get_hidden(PurpleRoomlistField * field)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern bool purple_roomlist_field_get_hidden(IntPtr field);
+
+		public static bool FieldGetHidden(PurpleRoomlistField field)
+		{
+			return purple_roomlist_field_get_hidden(field.Reference);
+		}
+
+		/*
+		 * Function Name: purple_roomlist_set_ui_ops
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_roomlist_set_ui_ops(PurpleRoomlistUiOps * ops)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_roomlist_set_ui_ops(IntPtr ops);
+
+		public static void SetUiOps(PurpleRoomlistUiOps ops)
+		{
+			purple_roomlist_set_ui_ops(ops.Reference);
+		}
+
+		/*
+		 * Function Name: purple_roomlist_get_ui_ops
+		 * Function Type: PurpleRoomlistUiOps *
+		 * Function RawType: PurpleRoomlistUiOps
+		 * Function Category: PointerToKnownStruct
+		 */
+		/*
+		 * PurpleRoomlistUiOps * purple_roomlist_get_ui_ops()
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern IntPtr purple_roomlist_get_ui_ops();
+
+		public static PurpleRoomlistUiOps GetUiOps()
+		{
+			return new PurpleRoomlistUiOps(purple_roomlist_get_ui_ops());
+		}
+
+	}
+}
+
============================================================
--- libpurple/wrapper/Savedstatuses.cs	44d737ddd6227b0b10d095a385507ce4958e4c9b
+++ libpurple/wrapper/Savedstatuses.cs	44d737ddd6227b0b10d095a385507ce4958e4c9b
@@ -0,0 +1,503 @@
+/* PurpleWrapper - A .NET (CLR) wrapper for libpurple
+ *
+ * Purple is the legal property of its developers, whose names are too numerous
+ * to list here.  Please refer to the COPYRIGHT file distributed with this
+ * source distribution.
+ *
+ * This program 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.
+ *
+ * This program 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 this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02111-1301  USA
+ */
+
+/*
+ * This file was auto-generated from the libpurple header files to provide a
+ * clean interface between .NET/CLR and the unmanaged C library libpurple.
+ *
+ * This is the second major commit of the code.
+ * Next things:
+ *  - A few of the .h files have anonymous parameter names (eg: void cat(int, int).
+ *    This program will need to assign these parameters names.
+ *  - Function pointers inside structs aren't translated correctly into C#.
+ *  - Two places there are specific-length arrays (eg: char hostname[256]). The parser
+ *    does not detect them as an array.
+ */
+
+using System;
+using System.Collections.Generic;
+using System.Runtime.InteropServices;
+
+namespace PurpleWrapper
+{
+
+	/*
+	 * File: savedstatuses.h
+	 */
+	public class Savedstatuses
+	{
+
+		/*
+		 * Function Name: purple_savedstatus_delete
+		 * Function Type: gboolean
+		 * Function RawType: gboolean
+		 * Function Category: Native
+		 */
+		/*
+		 * gboolean purple_savedstatus_delete(char * title)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern bool purple_savedstatus_delete(string title);
+
+		public static bool SavedstatusDelete(string title)
+		{
+			return purple_savedstatus_delete(title);
+		}
+
+		/*
+		 * Function Name: purple_savedstatus_delete_by_status
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_savedstatus_delete_by_status(PurpleSavedStatus * saved_status)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_savedstatus_delete_by_status(IntPtr saved_status);
+
+		public static void SavedstatusDeleteByStatus(/* Resolved as PointerToUnknownStruct to PurpleSavedStatus */ IntPtr saved_status)
+		{
+			/* Unable to process saved_status, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_savedstatuses_get_all
+		 * Function Type: GList *
+		 * Function RawType: GList
+		 * Function Category: PointerToGList
+		 */
+		/*
+		 * GList * purple_savedstatuses_get_all()
+		 * 
+		 * Could not generate a wrapper for purple_savedstatuses_get_all in file "savedstatuses.h".
+		 * Message: Unknown inner-type of argument 0 of purple_savedstatuses_get_all
+		 */
+
+		/*
+		 * Function Name: purple_savedstatuses_get_popular
+		 * Function Type: GList *
+		 * Function RawType: GList
+		 * Function Category: PointerToGList
+		 */
+		/*
+		 * GList * purple_savedstatuses_get_popular(unsigned int how_many)
+		 * 
+		 * Could not generate a wrapper for purple_savedstatuses_get_popular in file "savedstatuses.h".
+		 * Message: Unknown inner-type of argument 0 of purple_savedstatuses_get_popular
+		 */
+
+		/*
+		 * Function Name: purple_savedstatus_get_current
+		 * Function Type: PurpleSavedStatus *
+		 * Function RawType: PurpleSavedStatus
+		 * Function Category: PointerToUnknownStruct
+		 */
+		/*
+		 * PurpleSavedStatus * purple_savedstatus_get_current()
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern IntPtr purple_savedstatus_get_current();
+
+		public static /* Resolved as PointerToUnknownStruct to PurpleSavedStatus */ IntPtr SavedstatusGetCurrent()
+		{
+			/* Unable to process the return value of purple_savedstatus_get_current, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_savedstatus_get_default
+		 * Function Type: PurpleSavedStatus *
+		 * Function RawType: PurpleSavedStatus
+		 * Function Category: PointerToUnknownStruct
+		 */
+		/*
+		 * PurpleSavedStatus * purple_savedstatus_get_default()
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern IntPtr purple_savedstatus_get_default();
+
+		public static /* Resolved as PointerToUnknownStruct to PurpleSavedStatus */ IntPtr SavedstatusGetDefault()
+		{
+			/* Unable to process the return value of purple_savedstatus_get_default, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_savedstatus_get_idleaway
+		 * Function Type: PurpleSavedStatus *
+		 * Function RawType: PurpleSavedStatus
+		 * Function Category: PointerToUnknownStruct
+		 */
+		/*
+		 * PurpleSavedStatus * purple_savedstatus_get_idleaway()
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern IntPtr purple_savedstatus_get_idleaway();
+
+		public static /* Resolved as PointerToUnknownStruct to PurpleSavedStatus */ IntPtr SavedstatusGetIdleaway()
+		{
+			/* Unable to process the return value of purple_savedstatus_get_idleaway, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_savedstatus_is_idleaway
+		 * Function Type: gboolean
+		 * Function RawType: gboolean
+		 * Function Category: Native
+		 */
+		/*
+		 * gboolean purple_savedstatus_is_idleaway()
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern bool purple_savedstatus_is_idleaway();
+
+		public static bool SavedstatusIsIdleaway()
+		{
+			return purple_savedstatus_is_idleaway();
+		}
+
+		/*
+		 * Function Name: purple_savedstatus_set_idleaway
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_savedstatus_set_idleaway(gboolean idleaway)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_savedstatus_set_idleaway(bool idleaway);
+
+		public static void SavedstatusSetIdleaway(bool idleaway)
+		{
+			purple_savedstatus_set_idleaway(idleaway);
+		}
+
+		/*
+		 * Function Name: purple_savedstatus_get_startup
+		 * Function Type: PurpleSavedStatus *
+		 * Function RawType: PurpleSavedStatus
+		 * Function Category: PointerToUnknownStruct
+		 */
+		/*
+		 * PurpleSavedStatus * purple_savedstatus_get_startup()
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern IntPtr purple_savedstatus_get_startup();
+
+		public static /* Resolved as PointerToUnknownStruct to PurpleSavedStatus */ IntPtr SavedstatusGetStartup()
+		{
+			/* Unable to process the return value of purple_savedstatus_get_startup, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_savedstatus_find
+		 * Function Type: PurpleSavedStatus *
+		 * Function RawType: PurpleSavedStatus
+		 * Function Category: PointerToUnknownStruct
+		 */
+		/*
+		 * PurpleSavedStatus * purple_savedstatus_find(char * title)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern IntPtr purple_savedstatus_find(string title);
+
+		public static /* Resolved as PointerToUnknownStruct to PurpleSavedStatus */ IntPtr SavedstatusFind(string title)
+		{
+			/* Unable to process the return value of purple_savedstatus_find, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_savedstatus_find_by_creation_time
+		 * Function Type: PurpleSavedStatus *
+		 * Function RawType: PurpleSavedStatus
+		 * Function Category: PointerToUnknownStruct
+		 */
+		/*
+		 * PurpleSavedStatus * purple_savedstatus_find_by_creation_time(time_t creation_time)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern IntPtr purple_savedstatus_find_by_creation_time(ulong creation_time);
+
+		public static /* Resolved as PointerToUnknownStruct to PurpleSavedStatus */ IntPtr SavedstatusFindByCreationTime(DateTime creation_time)
+		{
+			ulong _PurpleWrapper_param0 = (ulong)(creation_time - new DateTime(1970, 1, 1)).TotalSeconds;
+			/* Unable to process the return value of purple_savedstatus_find_by_creation_time, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_savedstatus_find_transient_by_type_and_message
+		 * Function Type: PurpleSavedStatus *
+		 * Function RawType: PurpleSavedStatus
+		 * Function Category: PointerToUnknownStruct
+		 */
+		/*
+		 * PurpleSavedStatus * purple_savedstatus_find_transient_by_type_and_message(PurpleStatusPrimitive type, char * message)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern IntPtr purple_savedstatus_find_transient_by_type_and_message(Status.PurpleStatusPrimitive type, string message);
+
+		public static /* Resolved as PointerToUnknownStruct to PurpleSavedStatus */ IntPtr SavedstatusFindTransientByTypeAndMessage(Status.PurpleStatusPrimitive type, string message)
+		{
+			/* Unable to process type, a KnownEnum. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_savedstatus_is_transient
+		 * Function Type: gboolean
+		 * Function RawType: gboolean
+		 * Function Category: Native
+		 */
+		/*
+		 * gboolean purple_savedstatus_is_transient(PurpleSavedStatus * saved_status)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern bool purple_savedstatus_is_transient(IntPtr saved_status);
+
+		public static bool SavedstatusIsTransient(/* Resolved as PointerToUnknownStruct to PurpleSavedStatus */ IntPtr saved_status)
+		{
+			/* Unable to process saved_status, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_savedstatus_get_title
+		 * Function Type: char *
+		 * Function RawType: char
+		 * Function Category: Native
+		 */
+		/*
+		 * char * purple_savedstatus_get_title(PurpleSavedStatus * saved_status)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern string purple_savedstatus_get_title(IntPtr saved_status);
+
+		public static string SavedstatusGetTitle(/* Resolved as PointerToUnknownStruct to PurpleSavedStatus */ IntPtr saved_status)
+		{
+			/* Unable to process saved_status, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_savedstatus_get_type
+		 * Function Type: PurpleStatusPrimitive
+		 * Function RawType: PurpleStatusPrimitive
+		 * Function Category: KnownEnum
+		 */
+		/*
+		 * PurpleStatusPrimitive purple_savedstatus_get_type(PurpleSavedStatus * saved_status)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern Status.PurpleStatusPrimitive purple_savedstatus_get_type(IntPtr saved_status);
+
+		public static Status.PurpleStatusPrimitive SavedstatusGetType(/* Resolved as PointerToUnknownStruct to PurpleSavedStatus */ IntPtr saved_status)
+		{
+			/* Unable to process saved_status, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_savedstatus_get_message
+		 * Function Type: char *
+		 * Function RawType: char
+		 * Function Category: Native
+		 */
+		/*
+		 * char * purple_savedstatus_get_message(PurpleSavedStatus * saved_status)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern string purple_savedstatus_get_message(IntPtr saved_status);
+
+		public static string SavedstatusGetMessage(/* Resolved as PointerToUnknownStruct to PurpleSavedStatus */ IntPtr saved_status)
+		{
+			/* Unable to process saved_status, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_savedstatus_get_creation_time
+		 * Function Type: time_t
+		 * Function RawType: time_t
+		 * Function Category: DateTime
+		 */
+		/*
+		 * time_t purple_savedstatus_get_creation_time(PurpleSavedStatus * saved_status)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern ulong purple_savedstatus_get_creation_time(IntPtr saved_status);
+
+		public static DateTime SavedstatusGetCreationTime(/* Resolved as PointerToUnknownStruct to PurpleSavedStatus */ IntPtr saved_status)
+		{
+			/* Unable to process saved_status, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_savedstatus_has_substatuses
+		 * Function Type: gboolean
+		 * Function RawType: gboolean
+		 * Function Category: Native
+		 */
+		/*
+		 * gboolean purple_savedstatus_has_substatuses(PurpleSavedStatus * saved_status)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern bool purple_savedstatus_has_substatuses(IntPtr saved_status);
+
+		public static bool SavedstatusHasSubstatuses(/* Resolved as PointerToUnknownStruct to PurpleSavedStatus */ IntPtr saved_status)
+		{
+			/* Unable to process saved_status, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_savedstatus_substatus_get_type
+		 * Function Type: PurpleStatusType *
+		 * Function RawType: PurpleStatusType
+		 * Function Category: PointerToUnknownStruct
+		 */
+		/*
+		 * PurpleStatusType * purple_savedstatus_substatus_get_type(PurpleSavedStatusSub * substatus)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern IntPtr purple_savedstatus_substatus_get_type(IntPtr substatus);
+
+		public static /* Resolved as PointerToUnknownStruct to PurpleStatusType */ IntPtr SavedstatusSubstatusGetType(/* Resolved as PointerToUnknownStruct to PurpleSavedStatusSub */ IntPtr substatus)
+		{
+			/* Unable to process substatus, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_savedstatus_substatus_get_message
+		 * Function Type: char *
+		 * Function RawType: char
+		 * Function Category: Native
+		 */
+		/*
+		 * char * purple_savedstatus_substatus_get_message(PurpleSavedStatusSub * substatus)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern string purple_savedstatus_substatus_get_message(IntPtr substatus);
+
+		public static string SavedstatusSubstatusGetMessage(/* Resolved as PointerToUnknownStruct to PurpleSavedStatusSub */ IntPtr substatus)
+		{
+			/* Unable to process substatus, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_savedstatus_activate
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_savedstatus_activate(PurpleSavedStatus * saved_status)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_savedstatus_activate(IntPtr saved_status);
+
+		public static void SavedstatusActivate(/* Resolved as PointerToUnknownStruct to PurpleSavedStatus */ IntPtr saved_status)
+		{
+			/* Unable to process saved_status, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_savedstatus_activate_for_account
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_savedstatus_activate_for_account(PurpleSavedStatus * saved_status, PurpleAccount * account)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_savedstatus_activate_for_account(IntPtr saved_status, IntPtr account);
+
+		public static void SavedstatusActivateForAccount(/* Resolved as PointerToUnknownStruct to PurpleSavedStatus */ IntPtr saved_status, PurpleAccount account)
+		{
+			/* Unable to process saved_status, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_savedstatuses_get_handle
+		 * Function Type: void *
+		 * Function RawType: void
+		 * Function Category: VoidPointer
+		 */
+		/*
+		 * void * purple_savedstatuses_get_handle()
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern IntPtr purple_savedstatuses_get_handle();
+
+		public static IntPtr GetHandle()
+		{
+			return purple_savedstatuses_get_handle();
+		}
+
+		/*
+		 * Function Name: purple_savedstatuses_init
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_savedstatuses_init()
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_savedstatuses_init();
+
+		public static void Init()
+		{
+			purple_savedstatuses_init();
+		}
+
+		/*
+		 * Function Name: purple_savedstatuses_uninit
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_savedstatuses_uninit()
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_savedstatuses_uninit();
+
+		public static void Uninit()
+		{
+			purple_savedstatuses_uninit();
+		}
+
+	}
+}
+
============================================================
--- libpurple/wrapper/Server.cs	ec1cfa4837a4164119fa9e7d5abb2b6a6185fa5d
+++ libpurple/wrapper/Server.cs	ec1cfa4837a4164119fa9e7d5abb2b6a6185fa5d
@@ -0,0 +1,487 @@
+/* PurpleWrapper - A .NET (CLR) wrapper for libpurple
+ *
+ * Purple is the legal property of its developers, whose names are too numerous
+ * to list here.  Please refer to the COPYRIGHT file distributed with this
+ * source distribution.
+ *
+ * This program 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.
+ *
+ * This program 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 this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02111-1301  USA
+ */
+
+/*
+ * This file was auto-generated from the libpurple header files to provide a
+ * clean interface between .NET/CLR and the unmanaged C library libpurple.
+ *
+ * This is the second major commit of the code.
+ * Next things:
+ *  - A few of the .h files have anonymous parameter names (eg: void cat(int, int).
+ *    This program will need to assign these parameters names.
+ *  - Function pointers inside structs aren't translated correctly into C#.
+ *  - Two places there are specific-length arrays (eg: char hostname[256]). The parser
+ *    does not detect them as an array.
+ */
+
+using System;
+using System.Collections.Generic;
+using System.Runtime.InteropServices;
+
+namespace PurpleWrapper
+{
+
+	/*
+	 * File: server.h
+	 */
+	public class Server
+	{
+
+		/*
+		 * Function Name: serv_send_typing
+		 * Function Type: unsigned int
+		 * Function RawType: int
+		 * Function Category: Native
+		 */
+		/*
+		 * unsigned int serv_send_typing(PurpleConnection * gc, char * name, PurpleTypingState state)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern uint serv_send_typing(IntPtr gc, string name, Conversation.PurpleTypingState state);
+
+		public static uint ServSendTyping(PurpleConnection gc, string name, Conversation.PurpleTypingState state)
+		{
+			/* Unable to process state, a KnownEnum. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: serv_move_buddy
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void serv_move_buddy(PurpleBuddy * , PurpleGroup * , PurpleGroup * )
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void serv_move_buddy(IntPtr _PurpleWrapper_arg0, IntPtr _PurpleWrapper_arg1, IntPtr _PurpleWrapper_arg2);
+
+		public static void ServMoveBuddy(PurpleBuddy _PurpleWrapper_arg0, PurpleGroup _PurpleWrapper_arg1, PurpleGroup _PurpleWrapper_arg2)
+		{
+			serv_move_buddy(_PurpleWrapper_arg0.Reference, _PurpleWrapper_arg1.Reference, _PurpleWrapper_arg2.Reference);
+		}
+
+		/*
+		 * Function Name: serv_send_im
+		 * Function Type: int
+		 * Function RawType: int
+		 * Function Category: Native
+		 */
+		/*
+		 * int serv_send_im(PurpleConnection * , char * , char * , PurpleMessageFlags flags)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern int serv_send_im(IntPtr _PurpleWrapper_arg0, string _PurpleWrapper_arg1, string _PurpleWrapper_arg2, Conversation.PurpleMessageFlags flags);
+
+		public static int ServSendIm(PurpleConnection _PurpleWrapper_arg0, string _PurpleWrapper_arg1, string _PurpleWrapper_arg2, Conversation.PurpleMessageFlags flags)
+		{
+			/* Unable to process flags, a KnownEnum. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_get_attention_type_from_code
+		 * Function Type: PurpleAttentionType *
+		 * Function RawType: PurpleAttentionType
+		 * Function Category: PointerToKnownStruct
+		 */
+		/*
+		 * PurpleAttentionType * purple_get_attention_type_from_code(PurpleAccount * account, guint type_code)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern IntPtr purple_get_attention_type_from_code(IntPtr account, uint type_code);
+
+		public static PurpleAttentionType GetAttentionTypeFromCode(PurpleAccount account, uint type_code)
+		{
+			return new PurpleAttentionType(purple_get_attention_type_from_code(account.Reference, type_code));
+		}
+
+		/*
+		 * Function Name: serv_send_attention
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void serv_send_attention(PurpleConnection * gc, char * who, guint type_code)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void serv_send_attention(IntPtr gc, string who, uint type_code);
+
+		public static void ServSendAttention(PurpleConnection gc, string who, uint type_code)
+		{
+			serv_send_attention(gc.Reference, who, type_code);
+		}
+
+		/*
+		 * Function Name: serv_got_attention
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void serv_got_attention(PurpleConnection * gc, char * who, guint type_code)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void serv_got_attention(IntPtr gc, string who, uint type_code);
+
+		public static void ServGotAttention(PurpleConnection gc, string who, uint type_code)
+		{
+			serv_got_attention(gc.Reference, who, type_code);
+		}
+
+		/*
+		 * Function Name: serv_get_info
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void serv_get_info(PurpleConnection * , char * )
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void serv_get_info(IntPtr _PurpleWrapper_arg0, string _PurpleWrapper_arg1);
+
+		public static void ServGetInfo(PurpleConnection _PurpleWrapper_arg0, string _PurpleWrapper_arg1)
+		{
+			serv_get_info(_PurpleWrapper_arg0.Reference, _PurpleWrapper_arg1);
+		}
+
+		/*
+		 * Function Name: serv_set_info
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void serv_set_info(PurpleConnection * , char * )
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void serv_set_info(IntPtr _PurpleWrapper_arg0, string _PurpleWrapper_arg1);
+
+		public static void ServSetInfo(PurpleConnection _PurpleWrapper_arg0, string _PurpleWrapper_arg1)
+		{
+			serv_set_info(_PurpleWrapper_arg0.Reference, _PurpleWrapper_arg1);
+		}
+
+		/*
+		 * Function Name: serv_add_permit
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void serv_add_permit(PurpleConnection * , char * )
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void serv_add_permit(IntPtr _PurpleWrapper_arg0, string _PurpleWrapper_arg1);
+
+		public static void ServAddPermit(PurpleConnection _PurpleWrapper_arg0, string _PurpleWrapper_arg1)
+		{
+			serv_add_permit(_PurpleWrapper_arg0.Reference, _PurpleWrapper_arg1);
+		}
+
+		/*
+		 * Function Name: serv_add_deny
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void serv_add_deny(PurpleConnection * , char * )
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void serv_add_deny(IntPtr _PurpleWrapper_arg0, string _PurpleWrapper_arg1);
+
+		public static void ServAddDeny(PurpleConnection _PurpleWrapper_arg0, string _PurpleWrapper_arg1)
+		{
+			serv_add_deny(_PurpleWrapper_arg0.Reference, _PurpleWrapper_arg1);
+		}
+
+		/*
+		 * Function Name: serv_rem_permit
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void serv_rem_permit(PurpleConnection * , char * )
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void serv_rem_permit(IntPtr _PurpleWrapper_arg0, string _PurpleWrapper_arg1);
+
+		public static void ServRemPermit(PurpleConnection _PurpleWrapper_arg0, string _PurpleWrapper_arg1)
+		{
+			serv_rem_permit(_PurpleWrapper_arg0.Reference, _PurpleWrapper_arg1);
+		}
+
+		/*
+		 * Function Name: serv_rem_deny
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void serv_rem_deny(PurpleConnection * , char * )
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void serv_rem_deny(IntPtr _PurpleWrapper_arg0, string _PurpleWrapper_arg1);
+
+		public static void ServRemDeny(PurpleConnection _PurpleWrapper_arg0, string _PurpleWrapper_arg1)
+		{
+			serv_rem_deny(_PurpleWrapper_arg0.Reference, _PurpleWrapper_arg1);
+		}
+
+		/*
+		 * Function Name: serv_set_permit_deny
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void serv_set_permit_deny(PurpleConnection * )
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void serv_set_permit_deny(IntPtr _PurpleWrapper_arg0);
+
+		public static void ServSetPermitDeny(PurpleConnection _PurpleWrapper_arg0)
+		{
+			serv_set_permit_deny(_PurpleWrapper_arg0.Reference);
+		}
+
+		/*
+		 * Function Name: serv_chat_invite
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void serv_chat_invite(PurpleConnection * ,  , char * , char * )
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void serv_chat_invite(IntPtr _PurpleWrapper_arg0, /* Unresolved: [Category: Unknown], [Name:  ] */ IntPtr _PurpleWrapper_arg1, string _PurpleWrapper_arg2, string _PurpleWrapper_arg3);
+
+		public static void ServChatInvite(PurpleConnection _PurpleWrapper_arg0, /* Unresolved: [Category: Unknown], [Name:  ] */ IntPtr _PurpleWrapper_arg1, string _PurpleWrapper_arg2, string _PurpleWrapper_arg3)
+		{
+			/* Unable to process , a Unknown. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: serv_chat_leave
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void serv_chat_leave(PurpleConnection * ,  )
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void serv_chat_leave(IntPtr _PurpleWrapper_arg0, /* Unresolved: [Category: Unknown], [Name:  ] */ IntPtr _PurpleWrapper_arg1);
+
+		public static void ServChatLeave(PurpleConnection _PurpleWrapper_arg0, /* Unresolved: [Category: Unknown], [Name:  ] */ IntPtr _PurpleWrapper_arg1)
+		{
+			/* Unable to process , a Unknown. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: serv_chat_whisper
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void serv_chat_whisper(PurpleConnection * ,  , char * , char * )
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void serv_chat_whisper(IntPtr _PurpleWrapper_arg0, /* Unresolved: [Category: Unknown], [Name:  ] */ IntPtr _PurpleWrapper_arg1, string _PurpleWrapper_arg2, string _PurpleWrapper_arg3);
+
+		public static void ServChatWhisper(PurpleConnection _PurpleWrapper_arg0, /* Unresolved: [Category: Unknown], [Name:  ] */ IntPtr _PurpleWrapper_arg1, string _PurpleWrapper_arg2, string _PurpleWrapper_arg3)
+		{
+			/* Unable to process , a Unknown. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: serv_chat_send
+		 * Function Type: int
+		 * Function RawType: int
+		 * Function Category: Native
+		 */
+		/*
+		 * int serv_chat_send(PurpleConnection * ,  , char * , PurpleMessageFlags flags)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern int serv_chat_send(IntPtr _PurpleWrapper_arg0, /* Unresolved: [Category: Unknown], [Name:  ] */ IntPtr _PurpleWrapper_arg1, string _PurpleWrapper_arg2, Conversation.PurpleMessageFlags flags);
+
+		public static int ServChatSend(PurpleConnection _PurpleWrapper_arg0, /* Unresolved: [Category: Unknown], [Name:  ] */ IntPtr _PurpleWrapper_arg1, string _PurpleWrapper_arg2, Conversation.PurpleMessageFlags flags)
+		{
+			/* Unable to process , a Unknown. */
+			/* Unable to process flags, a KnownEnum. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: serv_alias_buddy
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void serv_alias_buddy(PurpleBuddy * )
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void serv_alias_buddy(IntPtr _PurpleWrapper_arg0);
+
+		public static void ServAliasBuddy(PurpleBuddy _PurpleWrapper_arg0)
+		{
+			serv_alias_buddy(_PurpleWrapper_arg0.Reference);
+		}
+
+		/*
+		 * Function Name: serv_got_alias
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void serv_got_alias(PurpleConnection * gc, char * who, char * alias)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void serv_got_alias(IntPtr gc, string who, string alias);
+
+		public static void ServGotAlias(PurpleConnection gc, string who, string alias)
+		{
+			serv_got_alias(gc.Reference, who, alias);
+		}
+
+		/*
+		 * Function Name: purple_serv_got_private_alias
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_serv_got_private_alias(PurpleConnection * gc, char * who, char * alias)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_serv_got_private_alias(IntPtr gc, string who, string alias);
+
+		public static void ServGotPrivateAlias(PurpleConnection gc, string who, string alias)
+		{
+			purple_serv_got_private_alias(gc.Reference, who, alias);
+		}
+
+		/*
+		 * Function Name: serv_got_typing_stopped
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void serv_got_typing_stopped(PurpleConnection * gc, char * name)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void serv_got_typing_stopped(IntPtr gc, string name);
+
+		public static void ServGotTypingStopped(PurpleConnection gc, string name)
+		{
+			serv_got_typing_stopped(gc.Reference, name);
+		}
+
+		/*
+		 * Function Name: serv_join_chat
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void serv_join_chat(PurpleConnection * , GHashTable * data)
+		 * 
+		 * Could not generate a wrapper for serv_join_chat in file "server.h".
+		 * Message: Unable to provide a type for HashTable as no function information was provided in code.
+		 */
+
+		/*
+		 * Function Name: serv_reject_chat
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void serv_reject_chat(PurpleConnection * , GHashTable * data)
+		 * 
+		 * Could not generate a wrapper for serv_reject_chat in file "server.h".
+		 * Message: Unable to provide a type for HashTable as no function information was provided in code.
+		 */
+
+		/*
+		 * Function Name: purple_serv_got_join_chat_failed
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_serv_got_join_chat_failed(PurpleConnection * gc, GHashTable * data)
+		 * 
+		 * Could not generate a wrapper for purple_serv_got_join_chat_failed in file "server.h".
+		 * Message: Unable to provide a type for HashTable as no function information was provided in code.
+		 */
+
+		/*
+		 * Function Name: serv_got_chat_left
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void serv_got_chat_left(PurpleConnection * g, int id)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void serv_got_chat_left(IntPtr g, int id);
+
+		public static void ServGotChatLeft(PurpleConnection g, int id)
+		{
+			serv_got_chat_left(g.Reference, id);
+		}
+
+		/*
+		 * Function Name: serv_send_file
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void serv_send_file(PurpleConnection * gc, char * who, char * file)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void serv_send_file(IntPtr gc, string who, string file);
+
+		public static void ServSendFile(PurpleConnection gc, string who, string file)
+		{
+			serv_send_file(gc.Reference, who, file);
+		}
+
+	}
+}
+
============================================================
--- libpurple/wrapper/Signals.cs	5ce5840147945ca3b82efb535b88fba2ef0610f2
+++ libpurple/wrapper/Signals.cs	5ce5840147945ca3b82efb535b88fba2ef0610f2
@@ -0,0 +1,155 @@
+/* PurpleWrapper - A .NET (CLR) wrapper for libpurple
+ *
+ * Purple is the legal property of its developers, whose names are too numerous
+ * to list here.  Please refer to the COPYRIGHT file distributed with this
+ * source distribution.
+ *
+ * This program 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.
+ *
+ * This program 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 this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02111-1301  USA
+ */
+
+/*
+ * This file was auto-generated from the libpurple header files to provide a
+ * clean interface between .NET/CLR and the unmanaged C library libpurple.
+ *
+ * This is the second major commit of the code.
+ * Next things:
+ *  - A few of the .h files have anonymous parameter names (eg: void cat(int, int).
+ *    This program will need to assign these parameters names.
+ *  - Function pointers inside structs aren't translated correctly into C#.
+ *  - Two places there are specific-length arrays (eg: char hostname[256]). The parser
+ *    does not detect them as an array.
+ */
+
+using System;
+using System.Collections.Generic;
+using System.Runtime.InteropServices;
+
+namespace PurpleWrapper
+{
+
+	/*
+	 * File: signals.h
+	 */
+	public class Signals
+	{
+		public delegate void PurpleCallback();
+		public delegate void PurpleSignalMarshalFunc(IntPtr cb, /* Unresolved: [Category: Unknown], [Name: va_list args] */ IntPtr args, IntPtr data, IntPtr return_val);
+
+		/*
+		 * Function Name: purple_signal_unregister
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_signal_unregister(void * instance, char * signal)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_signal_unregister(IntPtr instance, string signal);
+
+		public static void SignalUnregister(IntPtr instance, string signal)
+		{
+			purple_signal_unregister(instance, signal);
+		}
+
+		/*
+		 * Function Name: purple_signals_unregister_by_instance
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_signals_unregister_by_instance(void * instance)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_signals_unregister_by_instance(IntPtr instance);
+
+		public static void UnregisterByInstance(IntPtr instance)
+		{
+			purple_signals_unregister_by_instance(instance);
+		}
+
+		/*
+		 * Function Name: purple_signals_disconnect_by_handle
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_signals_disconnect_by_handle(void * handle)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_signals_disconnect_by_handle(IntPtr handle);
+
+		public static void DisconnectByHandle(IntPtr handle)
+		{
+			purple_signals_disconnect_by_handle(handle);
+		}
+
+		/*
+		 * Function Name: purple_signal_emit_vargs
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_signal_emit_vargs(void * instance, char * signal, va_list args)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_signal_emit_vargs(IntPtr instance, string signal, /* Unresolved: [Category: Unknown], [Name: va_list args] */ IntPtr args);
+
+		public static void SignalEmitVargs(IntPtr instance, string signal, /* Unresolved: [Category: Unknown], [Name: va_list args] */ IntPtr args)
+		{
+			/* Unable to process args, a Unknown. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_signals_init
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_signals_init()
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_signals_init();
+
+		public static void Init()
+		{
+			purple_signals_init();
+		}
+
+		/*
+		 * Function Name: purple_signals_uninit
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_signals_uninit()
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_signals_uninit();
+
+		public static void Uninit()
+		{
+			purple_signals_uninit();
+		}
+
+	}
+}
+
============================================================
--- libpurple/wrapper/Smiley.cs	1698f8bde3d5f1da93e087572170f108ea358967
+++ libpurple/wrapper/Smiley.cs	1698f8bde3d5f1da93e087572170f108ea358967
@@ -0,0 +1,349 @@
+/* PurpleWrapper - A .NET (CLR) wrapper for libpurple
+ *
+ * Purple is the legal property of its developers, whose names are too numerous
+ * to list here.  Please refer to the COPYRIGHT file distributed with this
+ * source distribution.
+ *
+ * This program 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.
+ *
+ * This program 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 this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02111-1301  USA
+ */
+
+/*
+ * This file was auto-generated from the libpurple header files to provide a
+ * clean interface between .NET/CLR and the unmanaged C library libpurple.
+ *
+ * This is the second major commit of the code.
+ * Next things:
+ *  - A few of the .h files have anonymous parameter names (eg: void cat(int, int).
+ *    This program will need to assign these parameters names.
+ *  - Function pointers inside structs aren't translated correctly into C#.
+ *  - Two places there are specific-length arrays (eg: char hostname[256]). The parser
+ *    does not detect them as an array.
+ */
+
+using System;
+using System.Collections.Generic;
+using System.Runtime.InteropServices;
+
+namespace PurpleWrapper
+{
+
+	/*
+	 * File: smiley.h
+	 */
+	public class Smiley
+	{
+
+		/*
+		 * Function Name: purple_smiley_get_type
+		 * Function Type: GType
+		 * Function RawType: GType
+		 * Function Category: GObjectObject
+		 */
+		/*
+		 * GType purple_smiley_get_type()
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern IntPtr purple_smiley_get_type();
+
+		public static /* libobject */ IntPtr GetType()
+		{
+			/* Unable to process the return value of purple_smiley_get_type, a GObjectObject. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_smiley_new
+		 * Function Type: PurpleSmiley *
+		 * Function RawType: PurpleSmiley
+		 * Function Category: PointerToUnknownStruct
+		 */
+		/*
+		 * PurpleSmiley * purple_smiley_new(PurpleStoredImage * img, char * shortcut)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern IntPtr purple_smiley_new(IntPtr img, string shortcut);
+
+		public static /* Resolved as PointerToUnknownStruct to PurpleSmiley */ IntPtr New(/* Resolved as PointerToUnknownStruct to PurpleStoredImage */ IntPtr img, string shortcut)
+		{
+			/* Unable to process img, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_smiley_new_from_file
+		 * Function Type: PurpleSmiley *
+		 * Function RawType: PurpleSmiley
+		 * Function Category: PointerToUnknownStruct
+		 */
+		/*
+		 * PurpleSmiley * purple_smiley_new_from_file(char * shortcut, char * filepath)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern IntPtr purple_smiley_new_from_file(string shortcut, string filepath);
+
+		public static /* Resolved as PointerToUnknownStruct to PurpleSmiley */ IntPtr NewFromFile(string shortcut, string filepath)
+		{
+			/* Unable to process the return value of purple_smiley_new_from_file, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_smiley_delete
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_smiley_delete(PurpleSmiley * smiley)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_smiley_delete(IntPtr smiley);
+
+		public static void Delete(/* Resolved as PointerToUnknownStruct to PurpleSmiley */ IntPtr smiley)
+		{
+			/* Unable to process smiley, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_smiley_set_shortcut
+		 * Function Type: gboolean
+		 * Function RawType: gboolean
+		 * Function Category: Native
+		 */
+		/*
+		 * gboolean purple_smiley_set_shortcut(PurpleSmiley * smiley, char * shortcut)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern bool purple_smiley_set_shortcut(IntPtr smiley, string shortcut);
+
+		public static bool SetShortcut(/* Resolved as PointerToUnknownStruct to PurpleSmiley */ IntPtr smiley, string shortcut)
+		{
+			/* Unable to process smiley, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_smiley_get_shortcut
+		 * Function Type: char *
+		 * Function RawType: char
+		 * Function Category: Native
+		 */
+		/*
+		 * char * purple_smiley_get_shortcut(PurpleSmiley * smiley)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern string purple_smiley_get_shortcut(IntPtr smiley);
+
+		public static string GetShortcut(/* Resolved as PointerToUnknownStruct to PurpleSmiley */ IntPtr smiley)
+		{
+			/* Unable to process smiley, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_smiley_get_checksum
+		 * Function Type: char *
+		 * Function RawType: char
+		 * Function Category: Native
+		 */
+		/*
+		 * char * purple_smiley_get_checksum(PurpleSmiley * smiley)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern string purple_smiley_get_checksum(IntPtr smiley);
+
+		public static string GetChecksum(/* Resolved as PointerToUnknownStruct to PurpleSmiley */ IntPtr smiley)
+		{
+			/* Unable to process smiley, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_smiley_get_stored_image
+		 * Function Type: PurpleStoredImage *
+		 * Function RawType: PurpleStoredImage
+		 * Function Category: PointerToUnknownStruct
+		 */
+		/*
+		 * PurpleStoredImage * purple_smiley_get_stored_image(PurpleSmiley * smiley)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern IntPtr purple_smiley_get_stored_image(IntPtr smiley);
+
+		public static /* Resolved as PointerToUnknownStruct to PurpleStoredImage */ IntPtr GetStoredImage(/* Resolved as PointerToUnknownStruct to PurpleSmiley */ IntPtr smiley)
+		{
+			/* Unable to process smiley, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_smiley_get_data
+		 * Function Type: gconstpointer
+		 * Function RawType: gconstpointer
+		 * Function Category: VoidPointer
+		 */
+		/*
+		 * gconstpointer purple_smiley_get_data(PurpleSmiley * smiley, size_t * len)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern IntPtr purple_smiley_get_data(IntPtr smiley, IntPtr len);
+
+		public static IntPtr GetData(/* Resolved as PointerToUnknownStruct to PurpleSmiley */ IntPtr smiley, /* Resolved as PointerToUnknownStruct to size_t */ IntPtr len)
+		{
+			/* Unable to process smiley, a PointerToUnknownStruct. */
+			/* Unable to process len, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_smiley_get_extension
+		 * Function Type: char *
+		 * Function RawType: char
+		 * Function Category: Native
+		 */
+		/*
+		 * char * purple_smiley_get_extension(PurpleSmiley * smiley)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern string purple_smiley_get_extension(IntPtr smiley);
+
+		public static string GetExtension(/* Resolved as PointerToUnknownStruct to PurpleSmiley */ IntPtr smiley)
+		{
+			/* Unable to process smiley, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_smiley_get_full_path
+		 * Function Type: char *
+		 * Function RawType: char
+		 * Function Category: Native
+		 */
+		/*
+		 * char * purple_smiley_get_full_path(PurpleSmiley * smiley)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern string purple_smiley_get_full_path(IntPtr smiley);
+
+		public static string GetFullPath(/* Resolved as PointerToUnknownStruct to PurpleSmiley */ IntPtr smiley)
+		{
+			/* Unable to process smiley, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_smileys_get_all
+		 * Function Type: GList *
+		 * Function RawType: GList
+		 * Function Category: PointerToGList
+		 */
+		/*
+		 * GList * purple_smileys_get_all()
+		 * 
+		 * Could not generate a wrapper for purple_smileys_get_all in file "smiley.h".
+		 * Message: Unknown inner-type of argument 0 of purple_smileys_get_all
+		 */
+
+		/*
+		 * Function Name: purple_smileys_find_by_shortcut
+		 * Function Type: PurpleSmiley *
+		 * Function RawType: PurpleSmiley
+		 * Function Category: PointerToUnknownStruct
+		 */
+		/*
+		 * PurpleSmiley * purple_smileys_find_by_shortcut(char * shortcut)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern IntPtr purple_smileys_find_by_shortcut(string shortcut);
+
+		public static /* Resolved as PointerToUnknownStruct to PurpleSmiley */ IntPtr SmileysFindByShortcut(string shortcut)
+		{
+			/* Unable to process the return value of purple_smileys_find_by_shortcut, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_smileys_find_by_checksum
+		 * Function Type: PurpleSmiley *
+		 * Function RawType: PurpleSmiley
+		 * Function Category: PointerToUnknownStruct
+		 */
+		/*
+		 * PurpleSmiley * purple_smileys_find_by_checksum(char * checksum)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern IntPtr purple_smileys_find_by_checksum(string checksum);
+
+		public static /* Resolved as PointerToUnknownStruct to PurpleSmiley */ IntPtr SmileysFindByChecksum(string checksum)
+		{
+			/* Unable to process the return value of purple_smileys_find_by_checksum, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_smileys_get_storing_dir
+		 * Function Type: char *
+		 * Function RawType: char
+		 * Function Category: Native
+		 */
+		/*
+		 * char * purple_smileys_get_storing_dir()
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern string purple_smileys_get_storing_dir();
+
+		public static string SmileysGetStoringDir()
+		{
+			return purple_smileys_get_storing_dir();
+		}
+
+		/*
+		 * Function Name: purple_smileys_init
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_smileys_init()
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_smileys_init();
+
+		public static void SmileysInit()
+		{
+			purple_smileys_init();
+		}
+
+		/*
+		 * Function Name: purple_smileys_uninit
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_smileys_uninit()
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_smileys_uninit();
+
+		public static void SmileysUninit()
+		{
+			purple_smileys_uninit();
+		}
+
+	}
+}
+
============================================================
--- libpurple/wrapper/Sound.cs	fc64187c425037e587606410686ae9ab1e062f05
+++ libpurple/wrapper/Sound.cs	fc64187c425037e587606410686ae9ab1e062f05
@@ -0,0 +1,186 @@
+/* PurpleWrapper - A .NET (CLR) wrapper for libpurple
+ *
+ * Purple is the legal property of its developers, whose names are too numerous
+ * to list here.  Please refer to the COPYRIGHT file distributed with this
+ * source distribution.
+ *
+ * This program 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.
+ *
+ * This program 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 this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02111-1301  USA
+ */
+
+/*
+ * This file was auto-generated from the libpurple header files to provide a
+ * clean interface between .NET/CLR and the unmanaged C library libpurple.
+ *
+ * This is the second major commit of the code.
+ * Next things:
+ *  - A few of the .h files have anonymous parameter names (eg: void cat(int, int).
+ *    This program will need to assign these parameters names.
+ *  - Function pointers inside structs aren't translated correctly into C#.
+ *  - Two places there are specific-length arrays (eg: char hostname[256]). The parser
+ *    does not detect them as an array.
+ */
+
+using System;
+using System.Collections.Generic;
+using System.Runtime.InteropServices;
+
+namespace PurpleWrapper
+{
+
+	/*
+	 * File: sound.h
+	 */
+	public class Sound
+	{
+		public enum PurpleSoundEventID
+		{
+			PURPLE_SOUND_BUDDY_ARRIVE = 0,
+			PURPLE_SOUND_BUDDY_LEAVE,
+			PURPLE_SOUND_RECEIVE,
+			PURPLE_SOUND_FIRST_RECEIVE,
+			PURPLE_SOUND_SEND,
+			PURPLE_SOUND_CHAT_JOIN,
+			PURPLE_SOUND_CHAT_LEAVE,
+			PURPLE_SOUND_CHAT_YOU_SAY,
+			PURPLE_SOUND_CHAT_SAY,
+			PURPLE_SOUND_POUNCE_DEFAULT,
+			PURPLE_SOUND_CHAT_NICK,
+			PURPLE_NUM_SOUNDS
+		};
+
+
+		/*
+		 * Function Name: purple_sound_play_file
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_sound_play_file(char * filename, PurpleAccount * account)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_sound_play_file(string filename, IntPtr account);
+
+		public static void PlayFile(string filename, PurpleAccount account)
+		{
+			purple_sound_play_file(filename, account.Reference);
+		}
+
+		/*
+		 * Function Name: purple_sound_play_event
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_sound_play_event(PurpleSoundEventID event, PurpleAccount * account)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_sound_play_event(Sound.PurpleSoundEventID event_, IntPtr account);
+
+		public static void PlayEvent(Sound.PurpleSoundEventID event_, PurpleAccount account)
+		{
+			/* Unable to process event, a KnownEnum. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_sound_set_ui_ops
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_sound_set_ui_ops(PurpleSoundUiOps * ops)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_sound_set_ui_ops(IntPtr ops);
+
+		public static void SetUiOps(PurpleSoundUiOps ops)
+		{
+			purple_sound_set_ui_ops(ops.Reference);
+		}
+
+		/*
+		 * Function Name: purple_sound_get_ui_ops
+		 * Function Type: PurpleSoundUiOps *
+		 * Function RawType: PurpleSoundUiOps
+		 * Function Category: PointerToKnownStruct
+		 */
+		/*
+		 * PurpleSoundUiOps * purple_sound_get_ui_ops()
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern IntPtr purple_sound_get_ui_ops();
+
+		public static PurpleSoundUiOps GetUiOps()
+		{
+			return new PurpleSoundUiOps(purple_sound_get_ui_ops());
+		}
+
+		/*
+		 * Function Name: purple_sound_init
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_sound_init()
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_sound_init();
+
+		public static void Init()
+		{
+			purple_sound_init();
+		}
+
+		/*
+		 * Function Name: purple_sound_uninit
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_sound_uninit()
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_sound_uninit();
+
+		public static void Uninit()
+		{
+			purple_sound_uninit();
+		}
+
+		/*
+		 * Function Name: purple_sounds_get_handle
+		 * Function Type: void *
+		 * Function RawType: void
+		 * Function Category: VoidPointer
+		 */
+		/*
+		 * void * purple_sounds_get_handle()
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern IntPtr purple_sounds_get_handle();
+
+		public static IntPtr SoundsGetHandle()
+		{
+			return purple_sounds_get_handle();
+		}
+
+	}
+}
+
============================================================
--- libpurple/wrapper/SoundTheme.cs	f53b4b8770f37ecc2eb021c55829789c0362a0b3
+++ libpurple/wrapper/SoundTheme.cs	f53b4b8770f37ecc2eb021c55829789c0362a0b3
@@ -0,0 +1,68 @@
+/* PurpleWrapper - A .NET (CLR) wrapper for libpurple
+ *
+ * Purple is the legal property of its developers, whose names are too numerous
+ * to list here.  Please refer to the COPYRIGHT file distributed with this
+ * source distribution.
+ *
+ * This program 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.
+ *
+ * This program 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 this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02111-1301  USA
+ */
+
+/*
+ * This file was auto-generated from the libpurple header files to provide a
+ * clean interface between .NET/CLR and the unmanaged C library libpurple.
+ *
+ * This is the second major commit of the code.
+ * Next things:
+ *  - A few of the .h files have anonymous parameter names (eg: void cat(int, int).
+ *    This program will need to assign these parameters names.
+ *  - Function pointers inside structs aren't translated correctly into C#.
+ *  - Two places there are specific-length arrays (eg: char hostname[256]). The parser
+ *    does not detect them as an array.
+ */
+
+using System;
+using System.Collections.Generic;
+using System.Runtime.InteropServices;
+
+namespace PurpleWrapper
+{
+
+	/*
+	 * File: sound-theme.h
+	 */
+	public class SoundTheme
+	{
+
+		/*
+		 * Function Name: purple_sound_theme_get_type
+		 * Function Type: GType
+		 * Function RawType: GType
+		 * Function Category: GObjectObject
+		 */
+		/*
+		 * GType purple_sound_theme_get_type()
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern IntPtr purple_sound_theme_get_type();
+
+		public static /* libobject */ IntPtr SoundThemeGetType()
+		{
+			/* Unable to process the return value of purple_sound_theme_get_type, a GObjectObject. */
+			throw new NotImplementedException();
+		}
+
+	}
+}
+
============================================================
--- libpurple/wrapper/SoundThemeLoader.cs	58c7a1b4421ff84c528532d121ff9a5e89fecfef
+++ libpurple/wrapper/SoundThemeLoader.cs	58c7a1b4421ff84c528532d121ff9a5e89fecfef
@@ -0,0 +1,68 @@
+/* PurpleWrapper - A .NET (CLR) wrapper for libpurple
+ *
+ * Purple is the legal property of its developers, whose names are too numerous
+ * to list here.  Please refer to the COPYRIGHT file distributed with this
+ * source distribution.
+ *
+ * This program 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.
+ *
+ * This program 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 this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02111-1301  USA
+ */
+
+/*
+ * This file was auto-generated from the libpurple header files to provide a
+ * clean interface between .NET/CLR and the unmanaged C library libpurple.
+ *
+ * This is the second major commit of the code.
+ * Next things:
+ *  - A few of the .h files have anonymous parameter names (eg: void cat(int, int).
+ *    This program will need to assign these parameters names.
+ *  - Function pointers inside structs aren't translated correctly into C#.
+ *  - Two places there are specific-length arrays (eg: char hostname[256]). The parser
+ *    does not detect them as an array.
+ */
+
+using System;
+using System.Collections.Generic;
+using System.Runtime.InteropServices;
+
+namespace PurpleWrapper
+{
+
+	/*
+	 * File: sound-theme-loader.h
+	 */
+	public class SoundThemeLoader
+	{
+
+		/*
+		 * Function Name: purple_sound_theme_loader_get_type
+		 * Function Type: GType
+		 * Function RawType: GType
+		 * Function Category: GObjectObject
+		 */
+		/*
+		 * GType purple_sound_theme_loader_get_type()
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern IntPtr purple_sound_theme_loader_get_type();
+
+		public static /* libobject */ IntPtr SoundThemeLoaderGetType()
+		{
+			/* Unable to process the return value of purple_sound_theme_loader_get_type, a GObjectObject. */
+			throw new NotImplementedException();
+		}
+
+	}
+}
+
============================================================
--- libpurple/wrapper/Sslconn.cs	d35ded8ce86fc7aae5a2f36ed51eb431cb6229fa
+++ libpurple/wrapper/Sslconn.cs	d35ded8ce86fc7aae5a2f36ed51eb431cb6229fa
@@ -0,0 +1,228 @@
+/* PurpleWrapper - A .NET (CLR) wrapper for libpurple
+ *
+ * Purple is the legal property of its developers, whose names are too numerous
+ * to list here.  Please refer to the COPYRIGHT file distributed with this
+ * source distribution.
+ *
+ * This program 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.
+ *
+ * This program 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 this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02111-1301  USA
+ */
+
+/*
+ * This file was auto-generated from the libpurple header files to provide a
+ * clean interface between .NET/CLR and the unmanaged C library libpurple.
+ *
+ * This is the second major commit of the code.
+ * Next things:
+ *  - A few of the .h files have anonymous parameter names (eg: void cat(int, int).
+ *    This program will need to assign these parameters names.
+ *  - Function pointers inside structs aren't translated correctly into C#.
+ *  - Two places there are specific-length arrays (eg: char hostname[256]). The parser
+ *    does not detect them as an array.
+ */
+
+using System;
+using System.Collections.Generic;
+using System.Runtime.InteropServices;
+
+namespace PurpleWrapper
+{
+
+	/*
+	 * File: sslconn.h
+	 */
+	public class Sslconn
+	{
+		public enum PurpleSslErrorType
+		{
+			PURPLE_SSL_HANDSHAKE_FAILED = 1,
+			PURPLE_SSL_CONNECT_FAILED = 2,
+			PURPLE_SSL_CERTIFICATE_INVALID = 3
+		};
+
+		public delegate void PurpleSslInputFunction(/* Unresolved: [Category: Unknown], [Name:  ] */ IntPtr _PurpleWrapper_arg0, IntPtr _PurpleWrapper_arg1, /* Unresolved: [Category: Unknown], [Name:  ] */ IntPtr _PurpleWrapper_arg2);
+		public delegate void PurpleSslErrorFunction(IntPtr _PurpleWrapper_arg0, /* Unresolved: [Category: Unknown], [Name:  ] */ IntPtr _PurpleWrapper_arg1, /* Unresolved: [Category: Unknown], [Name:  ] */ IntPtr _PurpleWrapper_arg2);
+
+		/*
+		 * Function Name: purple_ssl_is_supported
+		 * Function Type: gboolean
+		 * Function RawType: gboolean
+		 * Function Category: Native
+		 */
+		/*
+		 * gboolean purple_ssl_is_supported()
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern bool purple_ssl_is_supported();
+
+		public static bool SslIsSupported()
+		{
+			return purple_ssl_is_supported();
+		}
+
+		/*
+		 * Function Name: purple_ssl_strerror
+		 * Function Type: gchar *
+		 * Function RawType: gchar
+		 * Function Category: Native
+		 */
+		/*
+		 * gchar * purple_ssl_strerror(PurpleSslErrorType error)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern string purple_ssl_strerror(Sslconn.PurpleSslErrorType error);
+
+		public static string SslStrerror(Sslconn.PurpleSslErrorType error)
+		{
+			/* Unable to process error, a KnownEnum. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_ssl_close
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_ssl_close(PurpleSslConnection * gsc)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_ssl_close(IntPtr gsc);
+
+		public static void SslClose(PurpleSslConnection gsc)
+		{
+			purple_ssl_close(gsc.Reference);
+		}
+
+		/*
+		 * Function Name: purple_ssl_read
+		 * Function Type: size_t
+		 * Function RawType: size_t
+		 * Function Category: Native
+		 */
+		/*
+		 * size_t purple_ssl_read(PurpleSslConnection * gsc, void * buffer, size_t len)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern ulong purple_ssl_read(IntPtr gsc, IntPtr buffer, ulong len);
+
+		public static ulong SslRead(PurpleSslConnection gsc, IntPtr buffer, ulong len)
+		{
+			return purple_ssl_read(gsc.Reference, buffer, len);
+		}
+
+		/*
+		 * Function Name: purple_ssl_write
+		 * Function Type: size_t
+		 * Function RawType: size_t
+		 * Function Category: Native
+		 */
+		/*
+		 * size_t purple_ssl_write(PurpleSslConnection * gsc, void * buffer, size_t len)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern ulong purple_ssl_write(IntPtr gsc, IntPtr buffer, ulong len);
+
+		public static ulong SslWrite(PurpleSslConnection gsc, IntPtr buffer, ulong len)
+		{
+			return purple_ssl_write(gsc.Reference, buffer, len);
+		}
+
+		/*
+		 * Function Name: purple_ssl_get_peer_certificates
+		 * Function Type: GList *
+		 * Function RawType: GList
+		 * Function Category: PointerToGList
+		 */
+		/*
+		 * GList * purple_ssl_get_peer_certificates(PurpleSslConnection * gsc)
+		 * 
+		 * Could not generate a wrapper for purple_ssl_get_peer_certificates in file "sslconn.h".
+		 * Message: Unknown inner-type of argument 0 of purple_ssl_get_peer_certificates
+		 */
+
+		/*
+		 * Function Name: purple_ssl_set_ops
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_ssl_set_ops(PurpleSslOps * ops)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_ssl_set_ops(IntPtr ops);
+
+		public static void SslSetOps(/* Resolved as PointerToUnknownStruct to PurpleSslOps */ IntPtr ops)
+		{
+			/* Unable to process ops, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_ssl_get_ops
+		 * Function Type: PurpleSslOps *
+		 * Function RawType: PurpleSslOps
+		 * Function Category: PointerToUnknownStruct
+		 */
+		/*
+		 * PurpleSslOps * purple_ssl_get_ops()
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern IntPtr purple_ssl_get_ops();
+
+		public static /* Resolved as PointerToUnknownStruct to PurpleSslOps */ IntPtr SslGetOps()
+		{
+			/* Unable to process the return value of purple_ssl_get_ops, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_ssl_init
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_ssl_init()
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_ssl_init();
+
+		public static void SslInit()
+		{
+			purple_ssl_init();
+		}
+
+		/*
+		 * Function Name: purple_ssl_uninit
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_ssl_uninit()
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_ssl_uninit();
+
+		public static void SslUninit()
+		{
+			purple_ssl_uninit();
+		}
+
+	}
+}
+
============================================================
--- libpurple/wrapper/Status.cs	e746894fcdf9eaf7bc29a1458353e08ebb896d09
+++ libpurple/wrapper/Status.cs	e746894fcdf9eaf7bc29a1458353e08ebb896d09
@@ -0,0 +1,1011 @@
+/* PurpleWrapper - A .NET (CLR) wrapper for libpurple
+ *
+ * Purple is the legal property of its developers, whose names are too numerous
+ * to list here.  Please refer to the COPYRIGHT file distributed with this
+ * source distribution.
+ *
+ * This program 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.
+ *
+ * This program 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 this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02111-1301  USA
+ */
+
+/*
+ * This file was auto-generated from the libpurple header files to provide a
+ * clean interface between .NET/CLR and the unmanaged C library libpurple.
+ *
+ * This is the second major commit of the code.
+ * Next things:
+ *  - A few of the .h files have anonymous parameter names (eg: void cat(int, int).
+ *    This program will need to assign these parameters names.
+ *  - Function pointers inside structs aren't translated correctly into C#.
+ *  - Two places there are specific-length arrays (eg: char hostname[256]). The parser
+ *    does not detect them as an array.
+ */
+
+using System;
+using System.Collections.Generic;
+using System.Runtime.InteropServices;
+
+namespace PurpleWrapper
+{
+
+	/*
+	 * File: status.h
+	 */
+	public class Status
+	{
+		public enum PurplePresenceContext
+		{
+			PURPLE_PRESENCE_CONTEXT_UNSET = 0,
+			PURPLE_PRESENCE_CONTEXT_ACCOUNT,
+			PURPLE_PRESENCE_CONTEXT_CONV,
+			PURPLE_PRESENCE_CONTEXT_BUDDY
+		};
+
+		public enum PurpleStatusPrimitive
+		{
+			PURPLE_STATUS_UNSET = 0,
+			PURPLE_STATUS_OFFLINE,
+			PURPLE_STATUS_AVAILABLE,
+			PURPLE_STATUS_UNAVAILABLE,
+			PURPLE_STATUS_INVISIBLE,
+			PURPLE_STATUS_AWAY,
+			PURPLE_STATUS_EXTENDED_AWAY,
+			PURPLE_STATUS_MOBILE,
+			PURPLE_STATUS_TUNE,
+			PURPLE_STATUS_NUM_PRIMITIVES
+		};
+
+
+		/*
+		 * Function Name: purple_primitive_get_id_from_type
+		 * Function Type: char *
+		 * Function RawType: char
+		 * Function Category: Native
+		 */
+		/*
+		 * char * purple_primitive_get_id_from_type(PurpleStatusPrimitive type)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern string purple_primitive_get_id_from_type(Status.PurpleStatusPrimitive type);
+
+		public static string PrimitiveGetIdFromType(Status.PurpleStatusPrimitive type)
+		{
+			/* Unable to process type, a KnownEnum. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_primitive_get_name_from_type
+		 * Function Type: char *
+		 * Function RawType: char
+		 * Function Category: Native
+		 */
+		/*
+		 * char * purple_primitive_get_name_from_type(PurpleStatusPrimitive type)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern string purple_primitive_get_name_from_type(Status.PurpleStatusPrimitive type);
+
+		public static string PrimitiveGetNameFromType(Status.PurpleStatusPrimitive type)
+		{
+			/* Unable to process type, a KnownEnum. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_primitive_get_type_from_id
+		 * Function Type: PurpleStatusPrimitive
+		 * Function RawType: PurpleStatusPrimitive
+		 * Function Category: KnownEnum
+		 */
+		/*
+		 * PurpleStatusPrimitive purple_primitive_get_type_from_id(char * id)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern Status.PurpleStatusPrimitive purple_primitive_get_type_from_id(string id);
+
+		public static Status.PurpleStatusPrimitive PrimitiveGetTypeFromId(string id)
+		{
+			/* Unable to process the return value of purple_primitive_get_type_from_id, a KnownEnum. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_status_type_destroy
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_status_type_destroy(PurpleStatusType * status_type)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_status_type_destroy(IntPtr status_type);
+
+		public static void TypeDestroy(/* Resolved as PointerToUnknownStruct to PurpleStatusType */ IntPtr status_type)
+		{
+			/* Unable to process status_type, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_status_type_get_id
+		 * Function Type: char *
+		 * Function RawType: char
+		 * Function Category: Native
+		 */
+		/*
+		 * char * purple_status_type_get_id(PurpleStatusType * status_type)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern string purple_status_type_get_id(IntPtr status_type);
+
+		public static string TypeGetId(/* Resolved as PointerToUnknownStruct to PurpleStatusType */ IntPtr status_type)
+		{
+			/* Unable to process status_type, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_status_type_get_name
+		 * Function Type: char *
+		 * Function RawType: char
+		 * Function Category: Native
+		 */
+		/*
+		 * char * purple_status_type_get_name(PurpleStatusType * status_type)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern string purple_status_type_get_name(IntPtr status_type);
+
+		public static string TypeGetName(/* Resolved as PointerToUnknownStruct to PurpleStatusType */ IntPtr status_type)
+		{
+			/* Unable to process status_type, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_status_type_is_saveable
+		 * Function Type: gboolean
+		 * Function RawType: gboolean
+		 * Function Category: Native
+		 */
+		/*
+		 * gboolean purple_status_type_is_saveable(PurpleStatusType * status_type)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern bool purple_status_type_is_saveable(IntPtr status_type);
+
+		public static bool TypeIsSaveable(/* Resolved as PointerToUnknownStruct to PurpleStatusType */ IntPtr status_type)
+		{
+			/* Unable to process status_type, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_status_type_is_user_settable
+		 * Function Type: gboolean
+		 * Function RawType: gboolean
+		 * Function Category: Native
+		 */
+		/*
+		 * gboolean purple_status_type_is_user_settable(PurpleStatusType * status_type)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern bool purple_status_type_is_user_settable(IntPtr status_type);
+
+		public static bool TypeIsUserSettable(/* Resolved as PointerToUnknownStruct to PurpleStatusType */ IntPtr status_type)
+		{
+			/* Unable to process status_type, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_status_type_is_independent
+		 * Function Type: gboolean
+		 * Function RawType: gboolean
+		 * Function Category: Native
+		 */
+		/*
+		 * gboolean purple_status_type_is_independent(PurpleStatusType * status_type)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern bool purple_status_type_is_independent(IntPtr status_type);
+
+		public static bool TypeIsIndependent(/* Resolved as PointerToUnknownStruct to PurpleStatusType */ IntPtr status_type)
+		{
+			/* Unable to process status_type, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_status_type_is_exclusive
+		 * Function Type: gboolean
+		 * Function RawType: gboolean
+		 * Function Category: Native
+		 */
+		/*
+		 * gboolean purple_status_type_is_exclusive(PurpleStatusType * status_type)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern bool purple_status_type_is_exclusive(IntPtr status_type);
+
+		public static bool TypeIsExclusive(/* Resolved as PointerToUnknownStruct to PurpleStatusType */ IntPtr status_type)
+		{
+			/* Unable to process status_type, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_status_type_is_available
+		 * Function Type: gboolean
+		 * Function RawType: gboolean
+		 * Function Category: Native
+		 */
+		/*
+		 * gboolean purple_status_type_is_available(PurpleStatusType * status_type)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern bool purple_status_type_is_available(IntPtr status_type);
+
+		public static bool TypeIsAvailable(/* Resolved as PointerToUnknownStruct to PurpleStatusType */ IntPtr status_type)
+		{
+			/* Unable to process status_type, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_status_type_get_primary_attr
+		 * Function Type: char *
+		 * Function RawType: char
+		 * Function Category: Native
+		 */
+		/*
+		 * char * purple_status_type_get_primary_attr(PurpleStatusType * type)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern string purple_status_type_get_primary_attr(IntPtr type);
+
+		public static string TypeGetPrimaryAttr(/* Resolved as PointerToUnknownStruct to PurpleStatusType */ IntPtr type)
+		{
+			/* Unable to process type, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_status_type_get_attrs
+		 * Function Type: GList *
+		 * Function RawType: GList
+		 * Function Category: PointerToGList
+		 */
+		/*
+		 * GList * purple_status_type_get_attrs(PurpleStatusType * status_type)
+		 * 
+		 * Could not generate a wrapper for purple_status_type_get_attrs in file "status.h".
+		 * Message: Unknown inner-type of argument 0 of purple_status_type_get_attrs
+		 */
+
+		/*
+		 * Function Name: purple_status_attr_destroy
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_status_attr_destroy(PurpleStatusAttr * attr)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_status_attr_destroy(IntPtr attr);
+
+		public static void AttrDestroy(/* Resolved as PointerToUnknownStruct to PurpleStatusAttr */ IntPtr attr)
+		{
+			/* Unable to process attr, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_status_attr_get_id
+		 * Function Type: char *
+		 * Function RawType: char
+		 * Function Category: Native
+		 */
+		/*
+		 * char * purple_status_attr_get_id(PurpleStatusAttr * attr)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern string purple_status_attr_get_id(IntPtr attr);
+
+		public static string AttrGetId(/* Resolved as PointerToUnknownStruct to PurpleStatusAttr */ IntPtr attr)
+		{
+			/* Unable to process attr, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_status_attr_get_name
+		 * Function Type: char *
+		 * Function RawType: char
+		 * Function Category: Native
+		 */
+		/*
+		 * char * purple_status_attr_get_name(PurpleStatusAttr * attr)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern string purple_status_attr_get_name(IntPtr attr);
+
+		public static string AttrGetName(/* Resolved as PointerToUnknownStruct to PurpleStatusAttr */ IntPtr attr)
+		{
+			/* Unable to process attr, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_status_attr_get_value
+		 * Function Type: PurpleValue *
+		 * Function RawType: PurpleValue
+		 * Function Category: PointerToUnknownStruct
+		 */
+		/*
+		 * PurpleValue * purple_status_attr_get_value(PurpleStatusAttr * attr)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern IntPtr purple_status_attr_get_value(IntPtr attr);
+
+		public static /* Resolved as PointerToUnknownStruct to PurpleValue */ IntPtr AttrGetValue(/* Resolved as PointerToUnknownStruct to PurpleStatusAttr */ IntPtr attr)
+		{
+			/* Unable to process attr, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_status_destroy
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_status_destroy(PurpleStatus * status)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_status_destroy(IntPtr status);
+
+		public static void Destroy(/* Resolved as PointerToUnknownStruct to PurpleStatus */ IntPtr status)
+		{
+			/* Unable to process status, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_status_set_active
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_status_set_active(PurpleStatus * status, gboolean active)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_status_set_active(IntPtr status, bool active);
+
+		public static void SetActive(/* Resolved as PointerToUnknownStruct to PurpleStatus */ IntPtr status, bool active)
+		{
+			/* Unable to process status, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_status_get_type
+		 * Function Type: PurpleStatusType *
+		 * Function RawType: PurpleStatusType
+		 * Function Category: PointerToUnknownStruct
+		 */
+		/*
+		 * PurpleStatusType * purple_status_get_type(PurpleStatus * status)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern IntPtr purple_status_get_type(IntPtr status);
+
+		public static /* Resolved as PointerToUnknownStruct to PurpleStatusType */ IntPtr GetType(/* Resolved as PointerToUnknownStruct to PurpleStatus */ IntPtr status)
+		{
+			/* Unable to process status, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_status_get_presence
+		 * Function Type: PurplePresence *
+		 * Function RawType: PurplePresence
+		 * Function Category: PointerToUnknownStruct
+		 */
+		/*
+		 * PurplePresence * purple_status_get_presence(PurpleStatus * status)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern IntPtr purple_status_get_presence(IntPtr status);
+
+		public static /* Resolved as PointerToUnknownStruct to PurplePresence */ IntPtr GetPresence(/* Resolved as PointerToUnknownStruct to PurpleStatus */ IntPtr status)
+		{
+			/* Unable to process status, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_status_get_id
+		 * Function Type: char *
+		 * Function RawType: char
+		 * Function Category: Native
+		 */
+		/*
+		 * char * purple_status_get_id(PurpleStatus * status)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern string purple_status_get_id(IntPtr status);
+
+		public static string GetId(/* Resolved as PointerToUnknownStruct to PurpleStatus */ IntPtr status)
+		{
+			/* Unable to process status, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_status_get_name
+		 * Function Type: char *
+		 * Function RawType: char
+		 * Function Category: Native
+		 */
+		/*
+		 * char * purple_status_get_name(PurpleStatus * status)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern string purple_status_get_name(IntPtr status);
+
+		public static string GetName(/* Resolved as PointerToUnknownStruct to PurpleStatus */ IntPtr status)
+		{
+			/* Unable to process status, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_status_is_independent
+		 * Function Type: gboolean
+		 * Function RawType: gboolean
+		 * Function Category: Native
+		 */
+		/*
+		 * gboolean purple_status_is_independent(PurpleStatus * status)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern bool purple_status_is_independent(IntPtr status);
+
+		public static bool IsIndependent(/* Resolved as PointerToUnknownStruct to PurpleStatus */ IntPtr status)
+		{
+			/* Unable to process status, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_status_is_exclusive
+		 * Function Type: gboolean
+		 * Function RawType: gboolean
+		 * Function Category: Native
+		 */
+		/*
+		 * gboolean purple_status_is_exclusive(PurpleStatus * status)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern bool purple_status_is_exclusive(IntPtr status);
+
+		public static bool IsExclusive(/* Resolved as PointerToUnknownStruct to PurpleStatus */ IntPtr status)
+		{
+			/* Unable to process status, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_status_is_available
+		 * Function Type: gboolean
+		 * Function RawType: gboolean
+		 * Function Category: Native
+		 */
+		/*
+		 * gboolean purple_status_is_available(PurpleStatus * status)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern bool purple_status_is_available(IntPtr status);
+
+		public static bool IsAvailable(/* Resolved as PointerToUnknownStruct to PurpleStatus */ IntPtr status)
+		{
+			/* Unable to process status, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_status_is_active
+		 * Function Type: gboolean
+		 * Function RawType: gboolean
+		 * Function Category: Native
+		 */
+		/*
+		 * gboolean purple_status_is_active(PurpleStatus * status)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern bool purple_status_is_active(IntPtr status);
+
+		public static bool IsActive(/* Resolved as PointerToUnknownStruct to PurpleStatus */ IntPtr status)
+		{
+			/* Unable to process status, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_status_is_online
+		 * Function Type: gboolean
+		 * Function RawType: gboolean
+		 * Function Category: Native
+		 */
+		/*
+		 * gboolean purple_status_is_online(PurpleStatus * status)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern bool purple_status_is_online(IntPtr status);
+
+		public static bool IsOnline(/* Resolved as PointerToUnknownStruct to PurpleStatus */ IntPtr status)
+		{
+			/* Unable to process status, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_status_get_attr_int
+		 * Function Type: int
+		 * Function RawType: int
+		 * Function Category: Native
+		 */
+		/*
+		 * int purple_status_get_attr_int(PurpleStatus * status, char * id)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern int purple_status_get_attr_int(IntPtr status, string id);
+
+		public static int GetAttrInt(/* Resolved as PointerToUnknownStruct to PurpleStatus */ IntPtr status, string id)
+		{
+			/* Unable to process status, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_status_compare
+		 * Function Type: gint
+		 * Function RawType: gint
+		 * Function Category: Native
+		 */
+		/*
+		 * gint purple_status_compare(PurpleStatus * status1, PurpleStatus * status2)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern int purple_status_compare(IntPtr status1, IntPtr status2);
+
+		public static int Compare(/* Resolved as PointerToUnknownStruct to PurpleStatus */ IntPtr status1, /* Resolved as PointerToUnknownStruct to PurpleStatus */ IntPtr status2)
+		{
+			/* Unable to process status1, a PointerToUnknownStruct. */
+			/* Unable to process status2, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_presence_new
+		 * Function Type: PurplePresence *
+		 * Function RawType: PurplePresence
+		 * Function Category: PointerToUnknownStruct
+		 */
+		/*
+		 * PurplePresence * purple_presence_new(PurplePresenceContext context)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern IntPtr purple_presence_new(Status.PurplePresenceContext context);
+
+		public static /* Resolved as PointerToUnknownStruct to PurplePresence */ IntPtr PresenceNew(Status.PurplePresenceContext context)
+		{
+			/* Unable to process context, a KnownEnum. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_presence_new_for_account
+		 * Function Type: PurplePresence *
+		 * Function RawType: PurplePresence
+		 * Function Category: PointerToUnknownStruct
+		 */
+		/*
+		 * PurplePresence * purple_presence_new_for_account(PurpleAccount * account)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern IntPtr purple_presence_new_for_account(IntPtr account);
+
+		public static /* Resolved as PointerToUnknownStruct to PurplePresence */ IntPtr PresenceNewForAccount(PurpleAccount account)
+		{
+			/* Unable to process the return value of purple_presence_new_for_account, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_presence_new_for_conv
+		 * Function Type: PurplePresence *
+		 * Function RawType: PurplePresence
+		 * Function Category: PointerToUnknownStruct
+		 */
+		/*
+		 * PurplePresence * purple_presence_new_for_conv(PurpleConversation * conv)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern IntPtr purple_presence_new_for_conv(IntPtr conv);
+
+		public static /* Resolved as PointerToUnknownStruct to PurplePresence */ IntPtr PresenceNewForConv(PurpleConversation conv)
+		{
+			/* Unable to process the return value of purple_presence_new_for_conv, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_presence_new_for_buddy
+		 * Function Type: PurplePresence *
+		 * Function RawType: PurplePresence
+		 * Function Category: PointerToUnknownStruct
+		 */
+		/*
+		 * PurplePresence * purple_presence_new_for_buddy(PurpleBuddy * buddy)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern IntPtr purple_presence_new_for_buddy(IntPtr buddy);
+
+		public static /* Resolved as PointerToUnknownStruct to PurplePresence */ IntPtr PresenceNewForBuddy(PurpleBuddy buddy)
+		{
+			/* Unable to process the return value of purple_presence_new_for_buddy, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_presence_destroy
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_presence_destroy(PurplePresence * presence)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_presence_destroy(IntPtr presence);
+
+		public static void PresenceDestroy(/* Resolved as PointerToUnknownStruct to PurplePresence */ IntPtr presence)
+		{
+			/* Unable to process presence, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_presence_add_status
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_presence_add_status(PurplePresence * presence, PurpleStatus * status)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_presence_add_status(IntPtr presence, IntPtr status);
+
+		public static void PresenceAddStatus(/* Resolved as PointerToUnknownStruct to PurplePresence */ IntPtr presence, /* Resolved as PointerToUnknownStruct to PurpleStatus */ IntPtr status)
+		{
+			/* Unable to process presence, a PointerToUnknownStruct. */
+			/* Unable to process status, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_presence_add_list
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_presence_add_list(PurplePresence * presence, GList * source_list)
+		 * 
+		 * Could not generate a wrapper for purple_presence_add_list in file "status.h".
+		 * Message: Unable to provide a type for GList as no function information was provided in code.
+		 */
+
+		/*
+		 * Function Name: purple_presence_set_login_time
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_presence_set_login_time(PurplePresence * presence, time_t login_time)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_presence_set_login_time(IntPtr presence, ulong login_time);
+
+		public static void PresenceSetLoginTime(/* Resolved as PointerToUnknownStruct to PurplePresence */ IntPtr presence, DateTime login_time)
+		{
+			/* Unable to process presence, a PointerToUnknownStruct. */
+			ulong _PurpleWrapper_param1 = (ulong)(login_time - new DateTime(1970, 1, 1)).TotalSeconds;
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_presence_get_context
+		 * Function Type: PurplePresenceContext
+		 * Function RawType: PurplePresenceContext
+		 * Function Category: KnownEnum
+		 */
+		/*
+		 * PurplePresenceContext purple_presence_get_context(PurplePresence * presence)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern Status.PurplePresenceContext purple_presence_get_context(IntPtr presence);
+
+		public static Status.PurplePresenceContext PresenceGetContext(/* Resolved as PointerToUnknownStruct to PurplePresence */ IntPtr presence)
+		{
+			/* Unable to process presence, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_presence_get_account
+		 * Function Type: PurpleAccount *
+		 * Function RawType: PurpleAccount
+		 * Function Category: PointerToKnownStruct
+		 */
+		/*
+		 * PurpleAccount * purple_presence_get_account(PurplePresence * presence)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern IntPtr purple_presence_get_account(IntPtr presence);
+
+		public static PurpleAccount PresenceGetAccount(/* Resolved as PointerToUnknownStruct to PurplePresence */ IntPtr presence)
+		{
+			/* Unable to process presence, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_presence_get_conversation
+		 * Function Type: PurpleConversation *
+		 * Function RawType: PurpleConversation
+		 * Function Category: PointerToKnownStruct
+		 */
+		/*
+		 * PurpleConversation * purple_presence_get_conversation(PurplePresence * presence)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern IntPtr purple_presence_get_conversation(IntPtr presence);
+
+		public static PurpleConversation PresenceGetConversation(/* Resolved as PointerToUnknownStruct to PurplePresence */ IntPtr presence)
+		{
+			/* Unable to process presence, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_presence_get_chat_user
+		 * Function Type: char *
+		 * Function RawType: char
+		 * Function Category: Native
+		 */
+		/*
+		 * char * purple_presence_get_chat_user(PurplePresence * presence)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern string purple_presence_get_chat_user(IntPtr presence);
+
+		public static string PresenceGetChatUser(/* Resolved as PointerToUnknownStruct to PurplePresence */ IntPtr presence)
+		{
+			/* Unable to process presence, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_presence_get_buddy
+		 * Function Type: PurpleBuddy *
+		 * Function RawType: PurpleBuddy
+		 * Function Category: PointerToKnownStruct
+		 */
+		/*
+		 * PurpleBuddy * purple_presence_get_buddy(PurplePresence * presence)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern IntPtr purple_presence_get_buddy(IntPtr presence);
+
+		public static PurpleBuddy PresenceGetBuddy(/* Resolved as PointerToUnknownStruct to PurplePresence */ IntPtr presence)
+		{
+			/* Unable to process presence, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_presence_get_statuses
+		 * Function Type: GList *
+		 * Function RawType: GList
+		 * Function Category: PointerToGList
+		 */
+		/*
+		 * GList * purple_presence_get_statuses(PurplePresence * presence)
+		 * 
+		 * Could not generate a wrapper for purple_presence_get_statuses in file "status.h".
+		 * Message: Unknown inner-type of argument 0 of purple_presence_get_statuses
+		 */
+
+		/*
+		 * Function Name: purple_presence_get_active_status
+		 * Function Type: PurpleStatus *
+		 * Function RawType: PurpleStatus
+		 * Function Category: PointerToUnknownStruct
+		 */
+		/*
+		 * PurpleStatus * purple_presence_get_active_status(PurplePresence * presence)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern IntPtr purple_presence_get_active_status(IntPtr presence);
+
+		public static /* Resolved as PointerToUnknownStruct to PurpleStatus */ IntPtr PresenceGetActiveStatus(/* Resolved as PointerToUnknownStruct to PurplePresence */ IntPtr presence)
+		{
+			/* Unable to process presence, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_presence_is_available
+		 * Function Type: gboolean
+		 * Function RawType: gboolean
+		 * Function Category: Native
+		 */
+		/*
+		 * gboolean purple_presence_is_available(PurplePresence * presence)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern bool purple_presence_is_available(IntPtr presence);
+
+		public static bool PresenceIsAvailable(/* Resolved as PointerToUnknownStruct to PurplePresence */ IntPtr presence)
+		{
+			/* Unable to process presence, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_presence_is_online
+		 * Function Type: gboolean
+		 * Function RawType: gboolean
+		 * Function Category: Native
+		 */
+		/*
+		 * gboolean purple_presence_is_online(PurplePresence * presence)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern bool purple_presence_is_online(IntPtr presence);
+
+		public static bool PresenceIsOnline(/* Resolved as PointerToUnknownStruct to PurplePresence */ IntPtr presence)
+		{
+			/* Unable to process presence, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_presence_is_idle
+		 * Function Type: gboolean
+		 * Function RawType: gboolean
+		 * Function Category: Native
+		 */
+		/*
+		 * gboolean purple_presence_is_idle(PurplePresence * presence)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern bool purple_presence_is_idle(IntPtr presence);
+
+		public static bool PresenceIsIdle(/* Resolved as PointerToUnknownStruct to PurplePresence */ IntPtr presence)
+		{
+			/* Unable to process presence, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_presence_get_idle_time
+		 * Function Type: time_t
+		 * Function RawType: time_t
+		 * Function Category: DateTime
+		 */
+		/*
+		 * time_t purple_presence_get_idle_time(PurplePresence * presence)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern ulong purple_presence_get_idle_time(IntPtr presence);
+
+		public static DateTime PresenceGetIdleTime(/* Resolved as PointerToUnknownStruct to PurplePresence */ IntPtr presence)
+		{
+			/* Unable to process presence, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_presence_get_login_time
+		 * Function Type: time_t
+		 * Function RawType: time_t
+		 * Function Category: DateTime
+		 */
+		/*
+		 * time_t purple_presence_get_login_time(PurplePresence * presence)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern ulong purple_presence_get_login_time(IntPtr presence);
+
+		public static DateTime PresenceGetLoginTime(/* Resolved as PointerToUnknownStruct to PurplePresence */ IntPtr presence)
+		{
+			/* Unable to process presence, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_status_get_handle
+		 * Function Type: void *
+		 * Function RawType: void
+		 * Function Category: VoidPointer
+		 */
+		/*
+		 * void * purple_status_get_handle()
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern IntPtr purple_status_get_handle();
+
+		public static IntPtr GetHandle()
+		{
+			return purple_status_get_handle();
+		}
+
+		/*
+		 * Function Name: purple_status_init
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_status_init()
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_status_init();
+
+		public static void Init()
+		{
+			purple_status_init();
+		}
+
+		/*
+		 * Function Name: purple_status_uninit
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_status_uninit()
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_status_uninit();
+
+		public static void Uninit()
+		{
+			purple_status_uninit();
+		}
+
+	}
+}
+
============================================================
--- libpurple/wrapper/Stringref.cs	b2dad7f99682c683ede37461a98f76df72f869ef
+++ libpurple/wrapper/Stringref.cs	b2dad7f99682c683ede37461a98f76df72f869ef
@@ -0,0 +1,177 @@
+/* PurpleWrapper - A .NET (CLR) wrapper for libpurple
+ *
+ * Purple is the legal property of its developers, whose names are too numerous
+ * to list here.  Please refer to the COPYRIGHT file distributed with this
+ * source distribution.
+ *
+ * This program 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.
+ *
+ * This program 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 this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02111-1301  USA
+ */
+
+/*
+ * This file was auto-generated from the libpurple header files to provide a
+ * clean interface between .NET/CLR and the unmanaged C library libpurple.
+ *
+ * This is the second major commit of the code.
+ * Next things:
+ *  - A few of the .h files have anonymous parameter names (eg: void cat(int, int).
+ *    This program will need to assign these parameters names.
+ *  - Function pointers inside structs aren't translated correctly into C#.
+ *  - Two places there are specific-length arrays (eg: char hostname[256]). The parser
+ *    does not detect them as an array.
+ */
+
+using System;
+using System.Collections.Generic;
+using System.Runtime.InteropServices;
+
+namespace PurpleWrapper
+{
+
+	/*
+	 * File: stringref.h
+	 */
+	public class Stringref
+	{
+
+		/*
+		 * Function Name: purple_stringref_new
+		 * Function Type: PurpleStringref *
+		 * Function RawType: PurpleStringref
+		 * Function Category: PointerToUnknownStruct
+		 */
+		/*
+		 * PurpleStringref * purple_stringref_new(char * value)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern IntPtr purple_stringref_new(string value);
+
+		public static /* Resolved as PointerToUnknownStruct to PurpleStringref */ IntPtr New(string value)
+		{
+			/* Unable to process the return value of purple_stringref_new, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_stringref_new_noref
+		 * Function Type: PurpleStringref *
+		 * Function RawType: PurpleStringref
+		 * Function Category: PointerToUnknownStruct
+		 */
+		/*
+		 * PurpleStringref * purple_stringref_new_noref(char * value)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern IntPtr purple_stringref_new_noref(string value);
+
+		public static /* Resolved as PointerToUnknownStruct to PurpleStringref */ IntPtr NewNoref(string value)
+		{
+			/* Unable to process the return value of purple_stringref_new_noref, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_stringref_ref
+		 * Function Type: PurpleStringref *
+		 * Function RawType: PurpleStringref
+		 * Function Category: PointerToUnknownStruct
+		 */
+		/*
+		 * PurpleStringref * purple_stringref_ref(PurpleStringref * stringref)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern IntPtr purple_stringref_ref(IntPtr stringref);
+
+		public static /* Resolved as PointerToUnknownStruct to PurpleStringref */ IntPtr Ref(/* Resolved as PointerToUnknownStruct to PurpleStringref */ IntPtr stringref)
+		{
+			/* Unable to process stringref, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_stringref_unref
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_stringref_unref(PurpleStringref * stringref)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_stringref_unref(IntPtr stringref);
+
+		public static void Unref(/* Resolved as PointerToUnknownStruct to PurpleStringref */ IntPtr stringref)
+		{
+			/* Unable to process stringref, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_stringref_value
+		 * Function Type: char *
+		 * Function RawType: char
+		 * Function Category: Native
+		 */
+		/*
+		 * char * purple_stringref_value(PurpleStringref * stringref)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern string purple_stringref_value(IntPtr stringref);
+
+		public static string Value(/* Resolved as PointerToUnknownStruct to PurpleStringref */ IntPtr stringref)
+		{
+			/* Unable to process stringref, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_stringref_cmp
+		 * Function Type: int
+		 * Function RawType: int
+		 * Function Category: Native
+		 */
+		/*
+		 * int purple_stringref_cmp(PurpleStringref * s1, PurpleStringref * s2)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern int purple_stringref_cmp(IntPtr s1, IntPtr s2);
+
+		public static int Cmp(/* Resolved as PointerToUnknownStruct to PurpleStringref */ IntPtr s1, /* Resolved as PointerToUnknownStruct to PurpleStringref */ IntPtr s2)
+		{
+			/* Unable to process s1, a PointerToUnknownStruct. */
+			/* Unable to process s2, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_stringref_len
+		 * Function Type: size_t
+		 * Function RawType: size_t
+		 * Function Category: Native
+		 */
+		/*
+		 * size_t purple_stringref_len(PurpleStringref * stringref)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern ulong purple_stringref_len(IntPtr stringref);
+
+		public static ulong Len(/* Resolved as PointerToUnknownStruct to PurpleStringref */ IntPtr stringref)
+		{
+			/* Unable to process stringref, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+	}
+}
+
============================================================
--- libpurple/wrapper/Stun.cs	2969871d7b706ff294c678770bd0984bf1e59d24
+++ libpurple/wrapper/Stun.cs	2969871d7b706ff294c678770bd0984bf1e59d24
@@ -0,0 +1,104 @@
+/* PurpleWrapper - A .NET (CLR) wrapper for libpurple
+ *
+ * Purple is the legal property of its developers, whose names are too numerous
+ * to list here.  Please refer to the COPYRIGHT file distributed with this
+ * source distribution.
+ *
+ * This program 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.
+ *
+ * This program 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 this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02111-1301  USA
+ */
+
+/*
+ * This file was auto-generated from the libpurple header files to provide a
+ * clean interface between .NET/CLR and the unmanaged C library libpurple.
+ *
+ * This is the second major commit of the code.
+ * Next things:
+ *  - A few of the .h files have anonymous parameter names (eg: void cat(int, int).
+ *    This program will need to assign these parameters names.
+ *  - Function pointers inside structs aren't translated correctly into C#.
+ *  - Two places there are specific-length arrays (eg: char hostname[256]). The parser
+ *    does not detect them as an array.
+ */
+
+using System;
+using System.Collections.Generic;
+using System.Runtime.InteropServices;
+
+namespace PurpleWrapper
+{
+
+	/*
+	 * File: stun.h
+	 */
+	public class Stun
+	{
+		public enum PurpleStunStatus
+		{
+			PURPLE_STUN_STATUS_UNDISCOVERED = -1,
+			PURPLE_STUN_STATUS_UNKNOWN,
+			PURPLE_STUN_STATUS_DISCOVERING,
+			PURPLE_STUN_STATUS_DISCOVERED
+		};
+
+		public enum PurpleStunNatType
+		{
+			PURPLE_STUN_NAT_TYPE_PUBLIC_IP,
+			PURPLE_STUN_NAT_TYPE_UNKNOWN_NAT,
+			PURPLE_STUN_NAT_TYPE_FULL_CONE,
+			PURPLE_STUN_NAT_TYPE_RESTRICTED_CONE,
+			PURPLE_STUN_NAT_TYPE_PORT_RESTRICTED_CONE,
+			PURPLE_STUN_NAT_TYPE_SYMMETRIC
+		};
+
+		public delegate void StunCallback(IntPtr _PurpleWrapper_arg0);
+
+		/*
+		 * Function Name: purple_stun_discover
+		 * Function Type: PurpleStunNatDiscovery *
+		 * Function RawType: PurpleStunNatDiscovery
+		 * Function Category: PointerToKnownStruct
+		 */
+		/*
+		 * PurpleStunNatDiscovery * purple_stun_discover(StunCallback cb)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern IntPtr purple_stun_discover(IntPtr cb);
+
+		public static PurpleStunNatDiscovery Discover(Stun.StunCallback cb)
+		{
+			/* Unable to process cb, a KnownFunctionPointer. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_stun_init
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_stun_init()
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_stun_init();
+
+		public static void Init()
+		{
+			purple_stun_init();
+		}
+
+	}
+}
+
============================================================
--- libpurple/wrapper/Theme.cs	c02cea2452452bcbe7305cee11a95f56aed9dc3d
+++ libpurple/wrapper/Theme.cs	c02cea2452452bcbe7305cee11a95f56aed9dc3d
@@ -0,0 +1,272 @@
+/* PurpleWrapper - A .NET (CLR) wrapper for libpurple
+ *
+ * Purple is the legal property of its developers, whose names are too numerous
+ * to list here.  Please refer to the COPYRIGHT file distributed with this
+ * source distribution.
+ *
+ * This program 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.
+ *
+ * This program 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 this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02111-1301  USA
+ */
+
+/*
+ * This file was auto-generated from the libpurple header files to provide a
+ * clean interface between .NET/CLR and the unmanaged C library libpurple.
+ *
+ * This is the second major commit of the code.
+ * Next things:
+ *  - A few of the .h files have anonymous parameter names (eg: void cat(int, int).
+ *    This program will need to assign these parameters names.
+ *  - Function pointers inside structs aren't translated correctly into C#.
+ *  - Two places there are specific-length arrays (eg: char hostname[256]). The parser
+ *    does not detect them as an array.
+ */
+
+using System;
+using System.Collections.Generic;
+using System.Runtime.InteropServices;
+
+namespace PurpleWrapper
+{
+
+	/*
+	 * File: theme.h
+	 */
+	public class Theme
+	{
+
+		/*
+		 * Function Name: purple_theme_get_type
+		 * Function Type: GType
+		 * Function RawType: GType
+		 * Function Category: GObjectObject
+		 */
+		/*
+		 * GType purple_theme_get_type()
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern IntPtr purple_theme_get_type();
+
+		public static /* libobject */ IntPtr GetType()
+		{
+			/* Unable to process the return value of purple_theme_get_type, a GObjectObject. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_theme_get_name
+		 * Function Type: gchar *
+		 * Function RawType: gchar
+		 * Function Category: Native
+		 */
+		/*
+		 * gchar * purple_theme_get_name(PurpleTheme * theme)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern string purple_theme_get_name(IntPtr theme);
+
+		public static string GetName(PurpleTheme theme)
+		{
+			return purple_theme_get_name(theme.Reference);
+		}
+
+		/*
+		 * Function Name: purple_theme_set_name
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_theme_set_name(PurpleTheme * theme, gchar * name)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_theme_set_name(IntPtr theme, string name);
+
+		public static void SetName(PurpleTheme theme, string name)
+		{
+			purple_theme_set_name(theme.Reference, name);
+		}
+
+		/*
+		 * Function Name: purple_theme_get_description
+		 * Function Type: gchar *
+		 * Function RawType: gchar
+		 * Function Category: Native
+		 */
+		/*
+		 * gchar * purple_theme_get_description(PurpleTheme * theme)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern string purple_theme_get_description(IntPtr theme);
+
+		public static string GetDescription(PurpleTheme theme)
+		{
+			return purple_theme_get_description(theme.Reference);
+		}
+
+		/*
+		 * Function Name: purple_theme_set_description
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_theme_set_description(PurpleTheme * theme, gchar * description)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_theme_set_description(IntPtr theme, string description);
+
+		public static void SetDescription(PurpleTheme theme, string description)
+		{
+			purple_theme_set_description(theme.Reference, description);
+		}
+
+		/*
+		 * Function Name: purple_theme_get_author
+		 * Function Type: gchar *
+		 * Function RawType: gchar
+		 * Function Category: Native
+		 */
+		/*
+		 * gchar * purple_theme_get_author(PurpleTheme * theme)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern string purple_theme_get_author(IntPtr theme);
+
+		public static string GetAuthor(PurpleTheme theme)
+		{
+			return purple_theme_get_author(theme.Reference);
+		}
+
+		/*
+		 * Function Name: purple_theme_set_author
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_theme_set_author(PurpleTheme * theme, gchar * author)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_theme_set_author(IntPtr theme, string author);
+
+		public static void SetAuthor(PurpleTheme theme, string author)
+		{
+			purple_theme_set_author(theme.Reference, author);
+		}
+
+		/*
+		 * Function Name: purple_theme_get_type_string
+		 * Function Type: gchar *
+		 * Function RawType: gchar
+		 * Function Category: Native
+		 */
+		/*
+		 * gchar * purple_theme_get_type_string(PurpleTheme * theme)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern string purple_theme_get_type_string(IntPtr theme);
+
+		public static string GetTypeString(PurpleTheme theme)
+		{
+			return purple_theme_get_type_string(theme.Reference);
+		}
+
+		/*
+		 * Function Name: purple_theme_get_dir
+		 * Function Type: gchar *
+		 * Function RawType: gchar
+		 * Function Category: Native
+		 */
+		/*
+		 * gchar * purple_theme_get_dir(PurpleTheme * theme)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern string purple_theme_get_dir(IntPtr theme);
+
+		public static string GetDir(PurpleTheme theme)
+		{
+			return purple_theme_get_dir(theme.Reference);
+		}
+
+		/*
+		 * Function Name: purple_theme_set_dir
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_theme_set_dir(PurpleTheme * theme, gchar * dir)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_theme_set_dir(IntPtr theme, string dir);
+
+		public static void SetDir(PurpleTheme theme, string dir)
+		{
+			purple_theme_set_dir(theme.Reference, dir);
+		}
+
+		/*
+		 * Function Name: purple_theme_get_image
+		 * Function Type: gchar *
+		 * Function RawType: gchar
+		 * Function Category: Native
+		 */
+		/*
+		 * gchar * purple_theme_get_image(PurpleTheme * theme)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern string purple_theme_get_image(IntPtr theme);
+
+		public static string GetImage(PurpleTheme theme)
+		{
+			return purple_theme_get_image(theme.Reference);
+		}
+
+		/*
+		 * Function Name: purple_theme_get_image_full
+		 * Function Type: gchar *
+		 * Function RawType: gchar
+		 * Function Category: Native
+		 */
+		/*
+		 * gchar * purple_theme_get_image_full(PurpleTheme * theme)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern string purple_theme_get_image_full(IntPtr theme);
+
+		public static string GetImageFull(PurpleTheme theme)
+		{
+			return purple_theme_get_image_full(theme.Reference);
+		}
+
+		/*
+		 * Function Name: purple_theme_set_image
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_theme_set_image(PurpleTheme * theme, gchar * img)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_theme_set_image(IntPtr theme, string img);
+
+		public static void SetImage(PurpleTheme theme, string img)
+		{
+			purple_theme_set_image(theme.Reference, img);
+		}
+
+	}
+}
+
============================================================
--- libpurple/wrapper/ThemeLoader.cs	66a41853118873c3ecb0727cfc05f04e6f830558
+++ libpurple/wrapper/ThemeLoader.cs	66a41853118873c3ecb0727cfc05f04e6f830558
@@ -0,0 +1,102 @@
+/* PurpleWrapper - A .NET (CLR) wrapper for libpurple
+ *
+ * Purple is the legal property of its developers, whose names are too numerous
+ * to list here.  Please refer to the COPYRIGHT file distributed with this
+ * source distribution.
+ *
+ * This program 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.
+ *
+ * This program 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 this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02111-1301  USA
+ */
+
+/*
+ * This file was auto-generated from the libpurple header files to provide a
+ * clean interface between .NET/CLR and the unmanaged C library libpurple.
+ *
+ * This is the second major commit of the code.
+ * Next things:
+ *  - A few of the .h files have anonymous parameter names (eg: void cat(int, int).
+ *    This program will need to assign these parameters names.
+ *  - Function pointers inside structs aren't translated correctly into C#.
+ *  - Two places there are specific-length arrays (eg: char hostname[256]). The parser
+ *    does not detect them as an array.
+ */
+
+using System;
+using System.Collections.Generic;
+using System.Runtime.InteropServices;
+
+namespace PurpleWrapper
+{
+
+	/*
+	 * File: theme-loader.h
+	 */
+	public class ThemeLoader
+	{
+
+		/*
+		 * Function Name: purple_theme_loader_get_type
+		 * Function Type: GType
+		 * Function RawType: GType
+		 * Function Category: GObjectObject
+		 */
+		/*
+		 * GType purple_theme_loader_get_type()
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern IntPtr purple_theme_loader_get_type();
+
+		public static /* libobject */ IntPtr ThemeLoaderGetType()
+		{
+			/* Unable to process the return value of purple_theme_loader_get_type, a GObjectObject. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_theme_loader_get_type_string
+		 * Function Type: gchar *
+		 * Function RawType: gchar
+		 * Function Category: Native
+		 */
+		/*
+		 * gchar * purple_theme_loader_get_type_string(PurpleThemeLoader * self)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern string purple_theme_loader_get_type_string(IntPtr self);
+
+		public static string ThemeLoaderGetTypeString(PurpleThemeLoader self)
+		{
+			return purple_theme_loader_get_type_string(self.Reference);
+		}
+
+		/*
+		 * Function Name: purple_theme_loader_build
+		 * Function Type: PurpleTheme *
+		 * Function RawType: PurpleTheme
+		 * Function Category: PointerToKnownStruct
+		 */
+		/*
+		 * PurpleTheme * purple_theme_loader_build(PurpleThemeLoader * loader, gchar * dir)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern IntPtr purple_theme_loader_build(IntPtr loader, string dir);
+
+		public static PurpleTheme ThemeLoaderBuild(PurpleThemeLoader loader, string dir)
+		{
+			return new PurpleTheme(purple_theme_loader_build(loader.Reference, dir));
+		}
+
+	}
+}
+
============================================================
--- libpurple/wrapper/ThemeManager.cs	33fbfae2f21af715e2ad00536f8339bf9ac97b92
+++ libpurple/wrapper/ThemeManager.cs	33fbfae2f21af715e2ad00536f8339bf9ac97b92
@@ -0,0 +1,223 @@
+/* PurpleWrapper - A .NET (CLR) wrapper for libpurple
+ *
+ * Purple is the legal property of its developers, whose names are too numerous
+ * to list here.  Please refer to the COPYRIGHT file distributed with this
+ * source distribution.
+ *
+ * This program 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.
+ *
+ * This program 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 this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02111-1301  USA
+ */
+
+/*
+ * This file was auto-generated from the libpurple header files to provide a
+ * clean interface between .NET/CLR and the unmanaged C library libpurple.
+ *
+ * This is the second major commit of the code.
+ * Next things:
+ *  - A few of the .h files have anonymous parameter names (eg: void cat(int, int).
+ *    This program will need to assign these parameters names.
+ *  - Function pointers inside structs aren't translated correctly into C#.
+ *  - Two places there are specific-length arrays (eg: char hostname[256]). The parser
+ *    does not detect them as an array.
+ */
+
+using System;
+using System.Collections.Generic;
+using System.Runtime.InteropServices;
+
+namespace PurpleWrapper
+{
+
+	/*
+	 * File: theme-manager.h
+	 */
+	public class ThemeManager
+	{
+		public delegate void PTFunc(IntPtr _PurpleWrapper_arg0);
+
+		/*
+		 * Function Name: purple_theme_manager_get_type
+		 * Function Type: GType
+		 * Function RawType: GType
+		 * Function Category: GObjectObject
+		 */
+		/*
+		 * GType purple_theme_manager_get_type()
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern IntPtr purple_theme_manager_get_type();
+
+		public static /* libobject */ IntPtr ThemeManagerGetType()
+		{
+			/* Unable to process the return value of purple_theme_manager_get_type, a GObjectObject. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_theme_manager_init
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_theme_manager_init()
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_theme_manager_init();
+
+		public static void ThemeManagerInit()
+		{
+			purple_theme_manager_init();
+		}
+
+		/*
+		 * Function Name: purple_theme_manager_uninit
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_theme_manager_uninit()
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_theme_manager_uninit();
+
+		public static void ThemeManagerUninit()
+		{
+			purple_theme_manager_uninit();
+		}
+
+		/*
+		 * Function Name: purple_theme_manager_refresh
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_theme_manager_refresh()
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_theme_manager_refresh();
+
+		public static void ThemeManagerRefresh()
+		{
+			purple_theme_manager_refresh();
+		}
+
+		/*
+		 * Function Name: purple_theme_manager_find_theme
+		 * Function Type: PurpleTheme *
+		 * Function RawType: PurpleTheme
+		 * Function Category: PointerToKnownStruct
+		 */
+		/*
+		 * PurpleTheme * purple_theme_manager_find_theme(gchar * name, gchar * type)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern IntPtr purple_theme_manager_find_theme(string name, string type);
+
+		public static PurpleTheme ThemeManagerFindTheme(string name, string type)
+		{
+			return new PurpleTheme(purple_theme_manager_find_theme(name, type));
+		}
+
+		/*
+		 * Function Name: purple_theme_manager_add_theme
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_theme_manager_add_theme(PurpleTheme * theme)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_theme_manager_add_theme(IntPtr theme);
+
+		public static void ThemeManagerAddTheme(PurpleTheme theme)
+		{
+			purple_theme_manager_add_theme(theme.Reference);
+		}
+
+		/*
+		 * Function Name: purple_theme_manager_remove_theme
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_theme_manager_remove_theme(PurpleTheme * theme)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_theme_manager_remove_theme(IntPtr theme);
+
+		public static void ThemeManagerRemoveTheme(PurpleTheme theme)
+		{
+			purple_theme_manager_remove_theme(theme.Reference);
+		}
+
+		/*
+		 * Function Name: purple_theme_manager_register_type
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_theme_manager_register_type(PurpleThemeLoader * loader)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_theme_manager_register_type(IntPtr loader);
+
+		public static void ThemeManagerRegisterType(PurpleThemeLoader loader)
+		{
+			purple_theme_manager_register_type(loader.Reference);
+		}
+
+		/*
+		 * Function Name: purple_theme_manager_unregister_type
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_theme_manager_unregister_type(PurpleThemeLoader * loader)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_theme_manager_unregister_type(IntPtr loader);
+
+		public static void ThemeManagerUnregisterType(PurpleThemeLoader loader)
+		{
+			purple_theme_manager_unregister_type(loader.Reference);
+		}
+
+		/*
+		 * Function Name: purple_theme_manager_for_each_theme
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_theme_manager_for_each_theme(PTFunc func)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_theme_manager_for_each_theme(IntPtr func);
+
+		public static void ThemeManagerForEachTheme(ThemeManager.PTFunc func)
+		{
+			/* Unable to process func, a KnownFunctionPointer. */
+			throw new NotImplementedException();
+		}
+
+	}
+}
+
============================================================
--- libpurple/wrapper/UnmanagedWrapper.cs	4fdf2c27d12506d6d1eb6e3c33fec97e8166c14e
+++ libpurple/wrapper/UnmanagedWrapper.cs	4fdf2c27d12506d6d1eb6e3c33fec97e8166c14e
@@ -0,0 +1,25 @@
+using System;
+
+namespace PurpleWrapper
+{
+    public abstract class UnmanagedWrapper<T>
+    {
+        private T data;
+        private IntPtr reference;
+
+        public Type GetUnmanagedType() { return typeof(T); }
+
+        public IntPtr Reference
+        {
+            get { return reference; }
+            set { reference = value; }
+        }
+
+        public T Data
+        {
+            get { return data; }
+            set { data = value; }
+        }
+    }
+}
+
============================================================
--- libpurple/wrapper/Upnp.cs	6fa93ff3179f921288ebf8a8227ea8b6ed12eae0
+++ libpurple/wrapper/Upnp.cs	6fa93ff3179f921288ebf8a8227ea8b6ed12eae0
@@ -0,0 +1,140 @@
+/* PurpleWrapper - A .NET (CLR) wrapper for libpurple
+ *
+ * Purple is the legal property of its developers, whose names are too numerous
+ * to list here.  Please refer to the COPYRIGHT file distributed with this
+ * source distribution.
+ *
+ * This program 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.
+ *
+ * This program 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 this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02111-1301  USA
+ */
+
+/*
+ * This file was auto-generated from the libpurple header files to provide a
+ * clean interface between .NET/CLR and the unmanaged C library libpurple.
+ *
+ * This is the second major commit of the code.
+ * Next things:
+ *  - A few of the .h files have anonymous parameter names (eg: void cat(int, int).
+ *    This program will need to assign these parameters names.
+ *  - Function pointers inside structs aren't translated correctly into C#.
+ *  - Two places there are specific-length arrays (eg: char hostname[256]). The parser
+ *    does not detect them as an array.
+ */
+
+using System;
+using System.Collections.Generic;
+using System.Runtime.InteropServices;
+
+namespace PurpleWrapper
+{
+
+	/*
+	 * File: upnp.h
+	 */
+	public class Upnp
+	{
+		public delegate void PurpleUPnPCallback(bool success, IntPtr data);
+
+		/*
+		 * Function Name: purple_upnp_init
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_upnp_init()
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_upnp_init();
+
+		public static void Init()
+		{
+			purple_upnp_init();
+		}
+
+		/*
+		 * Function Name: purple_upnp_discover
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_upnp_discover(PurpleUPnPCallback cb, gpointer cb_data)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_upnp_discover(IntPtr cb, IntPtr cb_data);
+
+		public static void Discover(Upnp.PurpleUPnPCallback cb, IntPtr cb_data)
+		{
+			/* Unable to process cb, a KnownFunctionPointer. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_upnp_get_control_info
+		 * Function Type: PurpleUPnPControlInfo*
+		 * Function RawType: PurpleUPnPControlInfo*
+		 * Function Category: PointerToUnknownStruct
+		 */
+		/*
+		 * PurpleUPnPControlInfo* purple_upnp_get_control_info()
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern IntPtr purple_upnp_get_control_info();
+
+		public static /* Resolved as PointerToUnknownStruct to PurpleUPnPControlInfo* */ IntPtr GetControlInfo()
+		{
+			/* Unable to process the return value of purple_upnp_get_control_info, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_upnp_get_public_ip
+		 * Function Type: gchar*
+		 * Function RawType: gchar*
+		 * Function Category: PointerToUnknownStruct
+		 */
+		/*
+		 * gchar* purple_upnp_get_public_ip()
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern IntPtr purple_upnp_get_public_ip();
+
+		public static /* Resolved as PointerToUnknownStruct to gchar* */ IntPtr GetPublicIp()
+		{
+			/* Unable to process the return value of purple_upnp_get_public_ip, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_upnp_cancel_port_mapping
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_upnp_cancel_port_mapping(UPnPMappingAddRemove * mapping_data)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_upnp_cancel_port_mapping(IntPtr mapping_data);
+
+		public static void CancelPortMapping(/* Resolved as PointerToUnknownStruct to UPnPMappingAddRemove */ IntPtr mapping_data)
+		{
+			/* Unable to process mapping_data, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+	}
+}
+
============================================================
--- libpurple/wrapper/Util.cs	6083b1e6fc38b78864a02f630d49d231ae5e0ad2
+++ libpurple/wrapper/Util.cs	6083b1e6fc38b78864a02f630d49d231ae5e0ad2
@@ -0,0 +1,1288 @@
+/* PurpleWrapper - A .NET (CLR) wrapper for libpurple
+ *
+ * Purple is the legal property of its developers, whose names are too numerous
+ * to list here.  Please refer to the COPYRIGHT file distributed with this
+ * source distribution.
+ *
+ * This program 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.
+ *
+ * This program 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 this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02111-1301  USA
+ */
+
+/*
+ * This file was auto-generated from the libpurple header files to provide a
+ * clean interface between .NET/CLR and the unmanaged C library libpurple.
+ *
+ * This is the second major commit of the code.
+ * Next things:
+ *  - A few of the .h files have anonymous parameter names (eg: void cat(int, int).
+ *    This program will need to assign these parameters names.
+ *  - Function pointers inside structs aren't translated correctly into C#.
+ *  - Two places there are specific-length arrays (eg: char hostname[256]). The parser
+ *    does not detect them as an array.
+ */
+
+using System;
+using System.Collections.Generic;
+using System.Runtime.InteropServices;
+
+namespace PurpleWrapper
+{
+
+	/*
+	 * File: util.h
+	 */
+	public class Util
+	{
+		public delegate void PurpleUtilFetchUrlCallback(IntPtr url_data, IntPtr user_data, string url_text, ulong len, string error_message);
+
+		/*
+		 * Function Name: purple_menu_action_free
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_menu_action_free(PurpleMenuAction * act)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_menu_action_free(IntPtr act);
+
+		public static void MenuActionFree(PurpleMenuAction act)
+		{
+			purple_menu_action_free(act.Reference);
+		}
+
+		/*
+		 * Function Name: purple_util_init
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_util_init()
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_util_init();
+
+		public static void Init()
+		{
+			purple_util_init();
+		}
+
+		/*
+		 * Function Name: purple_util_uninit
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_util_uninit()
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_util_uninit();
+
+		public static void Uninit()
+		{
+			purple_util_uninit();
+		}
+
+		/*
+		 * Function Name: purple_base16_encode
+		 * Function Type: gchar *
+		 * Function RawType: gchar
+		 * Function Category: Native
+		 */
+		/*
+		 * gchar * purple_base16_encode(guchar * data, gsize len)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern string purple_base16_encode(IntPtr data, ulong len);
+
+		public static string Base16Encode(/* Resolved as PointerToUnknownStruct to guchar */ IntPtr data, ulong len)
+		{
+			/* Unable to process data, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_base16_decode
+		 * Function Type: guchar *
+		 * Function RawType: guchar
+		 * Function Category: PointerToUnknownStruct
+		 */
+		/*
+		 * guchar * purple_base16_decode(char * str, gsize * ret_len)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern IntPtr purple_base16_decode(string str, IntPtr ret_len);
+
+		public static /* Resolved as PointerToUnknownStruct to guchar */ IntPtr Base16Decode(string str, /* Resolved as PointerToUnknownStruct to gsize */ IntPtr ret_len)
+		{
+			/* Unable to process ret_len, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_base16_encode_chunked
+		 * Function Type: gchar *
+		 * Function RawType: gchar
+		 * Function Category: Native
+		 */
+		/*
+		 * gchar * purple_base16_encode_chunked(guchar * data, gsize len)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern string purple_base16_encode_chunked(IntPtr data, ulong len);
+
+		public static string Base16EncodeChunked(/* Resolved as PointerToUnknownStruct to guchar */ IntPtr data, ulong len)
+		{
+			/* Unable to process data, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_base64_encode
+		 * Function Type: gchar *
+		 * Function RawType: gchar
+		 * Function Category: Native
+		 */
+		/*
+		 * gchar * purple_base64_encode(guchar * data, gsize len)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern string purple_base64_encode(IntPtr data, ulong len);
+
+		public static string Base64Encode(/* Resolved as PointerToUnknownStruct to guchar */ IntPtr data, ulong len)
+		{
+			/* Unable to process data, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_base64_decode
+		 * Function Type: guchar *
+		 * Function RawType: guchar
+		 * Function Category: PointerToUnknownStruct
+		 */
+		/*
+		 * guchar * purple_base64_decode(char * str, gsize * ret_len)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern IntPtr purple_base64_decode(string str, IntPtr ret_len);
+
+		public static /* Resolved as PointerToUnknownStruct to guchar */ IntPtr Base64Decode(string str, /* Resolved as PointerToUnknownStruct to gsize */ IntPtr ret_len)
+		{
+			/* Unable to process ret_len, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_quotedp_decode
+		 * Function Type: guchar *
+		 * Function RawType: guchar
+		 * Function Category: PointerToUnknownStruct
+		 */
+		/*
+		 * guchar * purple_quotedp_decode(char * str, gsize * ret_len)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern IntPtr purple_quotedp_decode(string str, IntPtr ret_len);
+
+		public static /* Resolved as PointerToUnknownStruct to guchar */ IntPtr QuotedpDecode(string str, /* Resolved as PointerToUnknownStruct to gsize */ IntPtr ret_len)
+		{
+			/* Unable to process ret_len, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_mime_decode_field
+		 * Function Type: char *
+		 * Function RawType: char
+		 * Function Category: Native
+		 */
+		/*
+		 * char * purple_mime_decode_field(char * str)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern string purple_mime_decode_field(string str);
+
+		public static string MimeDecodeField(string str)
+		{
+			return purple_mime_decode_field(str);
+		}
+
+		/*
+		 * Function Name: purple_utf8_strftime
+		 * Function Type: char *
+		 * Function RawType: char
+		 * Function Category: Native
+		 */
+		/*
+		 * char * purple_utf8_strftime(char * format, struct tm)
+		 * 
+		 * Could not generate a wrapper for purple_utf8_strftime in file "util.h".
+		 * Message: The struct contains an inner-struct or inner-union and cannot be automatically wrapped.
+		 */
+
+		/*
+		 * Function Name: purple_get_tzoff_str
+		 * Function Type: char *
+		 * Function RawType: char
+		 * Function Category: Native
+		 */
+		/*
+		 * char * purple_get_tzoff_str(struct tm, gboolean iso)
+		 * 
+		 * Could not generate a wrapper for purple_get_tzoff_str in file "util.h".
+		 * Message: The struct contains an inner-struct or inner-union and cannot be automatically wrapped.
+		 */
+
+		/*
+		 * Function Name: purple_date_format_short
+		 * Function Type: char *
+		 * Function RawType: char
+		 * Function Category: Native
+		 */
+		/*
+		 * char * purple_date_format_short(struct tm)
+		 * 
+		 * Could not generate a wrapper for purple_date_format_short in file "util.h".
+		 * Message: The struct contains an inner-struct or inner-union and cannot be automatically wrapped.
+		 */
+
+		/*
+		 * Function Name: purple_date_format_long
+		 * Function Type: char *
+		 * Function RawType: char
+		 * Function Category: Native
+		 */
+		/*
+		 * char * purple_date_format_long(struct tm)
+		 * 
+		 * Could not generate a wrapper for purple_date_format_long in file "util.h".
+		 * Message: The struct contains an inner-struct or inner-union and cannot be automatically wrapped.
+		 */
+
+		/*
+		 * Function Name: purple_date_format_full
+		 * Function Type: char *
+		 * Function RawType: char
+		 * Function Category: Native
+		 */
+		/*
+		 * char * purple_date_format_full(struct tm)
+		 * 
+		 * Could not generate a wrapper for purple_date_format_full in file "util.h".
+		 * Message: The struct contains an inner-struct or inner-union and cannot be automatically wrapped.
+		 */
+
+		/*
+		 * Function Name: purple_time_format
+		 * Function Type: char *
+		 * Function RawType: char
+		 * Function Category: Native
+		 */
+		/*
+		 * char * purple_time_format(struct tm)
+		 * 
+		 * Could not generate a wrapper for purple_time_format in file "util.h".
+		 * Message: The struct contains an inner-struct or inner-union and cannot be automatically wrapped.
+		 */
+
+		/*
+		 * Function Name: purple_markup_strip_html
+		 * Function Type: char *
+		 * Function RawType: char
+		 * Function Category: Native
+		 */
+		/*
+		 * char * purple_markup_strip_html(char * str)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern string purple_markup_strip_html(string str);
+
+		public static string MarkupStripHtml(string str)
+		{
+			return purple_markup_strip_html(str);
+		}
+
+		/*
+		 * Function Name: purple_markup_linkify
+		 * Function Type: char *
+		 * Function RawType: char
+		 * Function Category: Native
+		 */
+		/*
+		 * char * purple_markup_linkify(char * str)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern string purple_markup_linkify(string str);
+
+		public static string MarkupLinkify(string str)
+		{
+			return purple_markup_linkify(str);
+		}
+
+		/*
+		 * Function Name: purple_unescape_html
+		 * Function Type: char *
+		 * Function RawType: char
+		 * Function Category: Native
+		 */
+		/*
+		 * char * purple_unescape_html(char * html)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern string purple_unescape_html(string html);
+
+		public static string UnescapeHtml(string html)
+		{
+			return purple_unescape_html(html);
+		}
+
+		/*
+		 * Function Name: purple_markup_slice
+		 * Function Type: char *
+		 * Function RawType: char
+		 * Function Category: Native
+		 */
+		/*
+		 * char * purple_markup_slice(char * str, guint x, guint y)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern string purple_markup_slice(string str, uint x, uint y);
+
+		public static string MarkupSlice(string str, uint x, uint y)
+		{
+			return purple_markup_slice(str, x, y);
+		}
+
+		/*
+		 * Function Name: purple_markup_get_tag_name
+		 * Function Type: char *
+		 * Function RawType: char
+		 * Function Category: Native
+		 */
+		/*
+		 * char * purple_markup_get_tag_name(char * tag)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern string purple_markup_get_tag_name(string tag);
+
+		public static string MarkupGetTagName(string tag)
+		{
+			return purple_markup_get_tag_name(tag);
+		}
+
+		/*
+		 * Function Name: purple_markup_unescape_entity
+		 * Function Type: char *
+		 * Function RawType: char
+		 * Function Category: Native
+		 */
+		/*
+		 * char * purple_markup_unescape_entity(char * text, int * length)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern string purple_markup_unescape_entity(string text, IntPtr length);
+
+		public static string MarkupUnescapeEntity(string text, /* Resolved as PointerToUnknownStruct to int */ IntPtr length)
+		{
+			/* Unable to process length, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_markup_get_css_property
+		 * Function Type: char *
+		 * Function RawType: char
+		 * Function Category: Native
+		 */
+		/*
+		 * char * purple_markup_get_css_property(gchar * style, gchar * opt)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern string purple_markup_get_css_property(string style, string opt);
+
+		public static string MarkupGetCssProperty(string style, string opt)
+		{
+			return purple_markup_get_css_property(style, opt);
+		}
+
+		/*
+		 * Function Name: purple_markup_is_rtl
+		 * Function Type: gboolean
+		 * Function RawType: gboolean
+		 * Function Category: Native
+		 */
+		/*
+		 * gboolean purple_markup_is_rtl(char * html)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern bool purple_markup_is_rtl(string html);
+
+		public static bool MarkupIsRtl(string html)
+		{
+			return purple_markup_is_rtl(html);
+		}
+
+		/*
+		 * Function Name: purple_home_dir
+		 * Function Type: gchar *
+		 * Function RawType: gchar
+		 * Function Category: Native
+		 */
+		/*
+		 * gchar * purple_home_dir()
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern string purple_home_dir();
+
+		public static string HomeDir()
+		{
+			return purple_home_dir();
+		}
+
+		/*
+		 * Function Name: purple_user_dir
+		 * Function Type: char *
+		 * Function RawType: char
+		 * Function Category: Native
+		 */
+		/*
+		 * char * purple_user_dir()
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern string purple_user_dir();
+
+		public static string UserDir()
+		{
+			return purple_user_dir();
+		}
+
+		/*
+		 * Function Name: purple_util_set_user_dir
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_util_set_user_dir(char * dir)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_util_set_user_dir(string dir);
+
+		public static void SetUserDir(string dir)
+		{
+			purple_util_set_user_dir(dir);
+		}
+
+		/*
+		 * Function Name: purple_build_dir
+		 * Function Type: int
+		 * Function RawType: int
+		 * Function Category: Native
+		 */
+		/*
+		 * int purple_build_dir(char * path, int mode)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern int purple_build_dir(string path, int mode);
+
+		public static int BuildDir(string path, int mode)
+		{
+			return purple_build_dir(path, mode);
+		}
+
+		/*
+		 * Function Name: purple_util_write_data_to_file_absolute
+		 * Function Type: gboolean
+		 * Function RawType: gboolean
+		 * Function Category: Native
+		 */
+		/*
+		 * gboolean purple_util_write_data_to_file_absolute(char * filename_full, char * data, gssize size)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern bool purple_util_write_data_to_file_absolute(string filename_full, string data, long size);
+
+		public static bool WriteDataToFileAbsolute(string filename_full, string data, long size)
+		{
+			return purple_util_write_data_to_file_absolute(filename_full, data, size);
+		}
+
+		/*
+		 * Function Name: purple_mkstemp
+		 * Function Type: FILE *
+		 * Function RawType: FILE
+		 * Function Category: PointerToUnknownStruct
+		 */
+		/*
+		 * FILE * purple_mkstemp(char ** path, gboolean binary)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern IntPtr purple_mkstemp(IntPtr path, bool binary);
+
+		public static /* Resolved as PointerToUnknownStruct to FILE */ IntPtr Mkstemp(/* Resolved as PointerToUnknownStruct to char */ IntPtr path, bool binary)
+		{
+			/* Unable to process path, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_util_get_image_extension
+		 * Function Type: char *
+		 * Function RawType: char
+		 * Function Category: Native
+		 */
+		/*
+		 * char * purple_util_get_image_extension(gconstpointer data, size_t len)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern string purple_util_get_image_extension(IntPtr data, ulong len);
+
+		public static string GetImageExtension(IntPtr data, ulong len)
+		{
+			return purple_util_get_image_extension(data, len);
+		}
+
+		/*
+		 * Function Name: purple_util_get_image_checksum
+		 * Function Type: char *
+		 * Function RawType: char
+		 * Function Category: Native
+		 */
+		/*
+		 * char * purple_util_get_image_checksum(gconstpointer image_data, size_t image_len)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern string purple_util_get_image_checksum(IntPtr image_data, ulong image_len);
+
+		public static string GetImageChecksum(IntPtr image_data, ulong image_len)
+		{
+			return purple_util_get_image_checksum(image_data, image_len);
+		}
+
+		/*
+		 * Function Name: purple_util_get_image_filename
+		 * Function Type: char *
+		 * Function RawType: char
+		 * Function Category: Native
+		 */
+		/*
+		 * char * purple_util_get_image_filename(gconstpointer image_data, size_t image_len)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern string purple_util_get_image_filename(IntPtr image_data, ulong image_len);
+
+		public static string GetImageFilename(IntPtr image_data, ulong image_len)
+		{
+			return purple_util_get_image_filename(image_data, image_len);
+		}
+
+		/*
+		 * Function Name: purple_program_is_valid
+		 * Function Type: gboolean
+		 * Function RawType: gboolean
+		 * Function Category: Native
+		 */
+		/*
+		 * gboolean purple_program_is_valid(char * program)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern bool purple_program_is_valid(string program);
+
+		public static bool ProgramIsValid(string program)
+		{
+			return purple_program_is_valid(program);
+		}
+
+		/*
+		 * Function Name: purple_running_gnome
+		 * Function Type: gboolean
+		 * Function RawType: gboolean
+		 * Function Category: Native
+		 */
+		/*
+		 * gboolean purple_running_gnome()
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern bool purple_running_gnome();
+
+		public static bool RunningGnome()
+		{
+			return purple_running_gnome();
+		}
+
+		/*
+		 * Function Name: purple_running_kde
+		 * Function Type: gboolean
+		 * Function RawType: gboolean
+		 * Function Category: Native
+		 */
+		/*
+		 * gboolean purple_running_kde()
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern bool purple_running_kde();
+
+		public static bool RunningKde()
+		{
+			return purple_running_kde();
+		}
+
+		/*
+		 * Function Name: purple_running_osx
+		 * Function Type: gboolean
+		 * Function RawType: gboolean
+		 * Function Category: Native
+		 */
+		/*
+		 * gboolean purple_running_osx()
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern bool purple_running_osx();
+
+		public static bool RunningOsx()
+		{
+			return purple_running_osx();
+		}
+
+		/*
+		 * Function Name: purple_fd_get_ip
+		 * Function Type: char *
+		 * Function RawType: char
+		 * Function Category: Native
+		 */
+		/*
+		 * char * purple_fd_get_ip(int fd)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern string purple_fd_get_ip(int fd);
+
+		public static string FdGetIp(int fd)
+		{
+			return purple_fd_get_ip(fd);
+		}
+
+		/*
+		 * Function Name: purple_strequal
+		 * Function Type: gboolean
+		 * Function RawType: gboolean
+		 * Function Category: Native
+		 */
+		/*
+		 * gboolean purple_strequal(gchar * left, gchar * right)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern bool purple_strequal(string left, string right);
+
+		public static bool Strequal(string left, string right)
+		{
+			return purple_strequal(left, right);
+		}
+
+		/*
+		 * Function Name: purple_normalize
+		 * Function Type: char *
+		 * Function RawType: char
+		 * Function Category: Native
+		 */
+		/*
+		 * char * purple_normalize(PurpleAccount * account, char * str)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern string purple_normalize(IntPtr account, string str);
+
+		public static string Normalize(PurpleAccount account, string str)
+		{
+			return purple_normalize(account.Reference, str);
+		}
+
+		/*
+		 * Function Name: purple_normalize_nocase
+		 * Function Type: char *
+		 * Function RawType: char
+		 * Function Category: Native
+		 */
+		/*
+		 * char * purple_normalize_nocase(PurpleAccount * account, char * str)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern string purple_normalize_nocase(IntPtr account, string str);
+
+		public static string NormalizeNocase(PurpleAccount account, string str)
+		{
+			return purple_normalize_nocase(account.Reference, str);
+		}
+
+		/*
+		 * Function Name: purple_str_has_prefix
+		 * Function Type: gboolean
+		 * Function RawType: gboolean
+		 * Function Category: Native
+		 */
+		/*
+		 * gboolean purple_str_has_prefix(char * s, char * p)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern bool purple_str_has_prefix(string s, string p);
+
+		public static bool StrHasPrefix(string s, string p)
+		{
+			return purple_str_has_prefix(s, p);
+		}
+
+		/*
+		 * Function Name: purple_str_has_suffix
+		 * Function Type: gboolean
+		 * Function RawType: gboolean
+		 * Function Category: Native
+		 */
+		/*
+		 * gboolean purple_str_has_suffix(char * s, char * x)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern bool purple_str_has_suffix(string s, string x);
+
+		public static bool StrHasSuffix(string s, string x)
+		{
+			return purple_str_has_suffix(s, x);
+		}
+
+		/*
+		 * Function Name: purple_strdup_withhtml
+		 * Function Type: gchar *
+		 * Function RawType: gchar
+		 * Function Category: Native
+		 */
+		/*
+		 * gchar * purple_strdup_withhtml(gchar * src)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern string purple_strdup_withhtml(string src);
+
+		public static string StrdupWithhtml(string src)
+		{
+			return purple_strdup_withhtml(src);
+		}
+
+		/*
+		 * Function Name: purple_str_add_cr
+		 * Function Type: char *
+		 * Function RawType: char
+		 * Function Category: Native
+		 */
+		/*
+		 * char * purple_str_add_cr(char * str)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern string purple_str_add_cr(string str);
+
+		public static string StrAddCr(string str)
+		{
+			return purple_str_add_cr(str);
+		}
+
+		/*
+		 * Function Name: purple_str_strip_char
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_str_strip_char(char * str, char thechar)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_str_strip_char(string str, char thechar);
+
+		public static void StrStripChar(string str, char thechar)
+		{
+			purple_str_strip_char(str, thechar);
+		}
+
+		/*
+		 * Function Name: purple_utf8_ncr_encode
+		 * Function Type: char *
+		 * Function RawType: char
+		 * Function Category: Native
+		 */
+		/*
+		 * char * purple_utf8_ncr_encode(char * in)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern string purple_utf8_ncr_encode(string in_);
+
+		public static string Utf8NcrEncode(string in_)
+		{
+			return purple_utf8_ncr_encode(in_);
+		}
+
+		/*
+		 * Function Name: purple_utf8_ncr_decode
+		 * Function Type: char *
+		 * Function RawType: char
+		 * Function Category: Native
+		 */
+		/*
+		 * char * purple_utf8_ncr_decode(char * in)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern string purple_utf8_ncr_decode(string in_);
+
+		public static string Utf8NcrDecode(string in_)
+		{
+			return purple_utf8_ncr_decode(in_);
+		}
+
+		/*
+		 * Function Name: purple_strcasestr
+		 * Function Type: char *
+		 * Function RawType: char
+		 * Function Category: Native
+		 */
+		/*
+		 * char * purple_strcasestr(char * haystack, char * needle)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern string purple_strcasestr(string haystack, string needle);
+
+		public static string Strcasestr(string haystack, string needle)
+		{
+			return purple_strcasestr(haystack, needle);
+		}
+
+		/*
+		 * Function Name: purple_str_size_to_units
+		 * Function Type: char *
+		 * Function RawType: char
+		 * Function Category: Native
+		 */
+		/*
+		 * char * purple_str_size_to_units(size_t size)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern string purple_str_size_to_units(ulong size);
+
+		public static string StrSizeToUnits(ulong size)
+		{
+			return purple_str_size_to_units(size);
+		}
+
+		/*
+		 * Function Name: purple_str_seconds_to_string
+		 * Function Type: char *
+		 * Function RawType: char
+		 * Function Category: Native
+		 */
+		/*
+		 * char * purple_str_seconds_to_string(guint sec)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern string purple_str_seconds_to_string(uint sec);
+
+		public static string StrSecondsToString(uint sec)
+		{
+			return purple_str_seconds_to_string(sec);
+		}
+
+		/*
+		 * Function Name: purple_str_binary_to_ascii
+		 * Function Type: char *
+		 * Function RawType: char
+		 * Function Category: Native
+		 */
+		/*
+		 * char * purple_str_binary_to_ascii(unsigned char * binary, guint len)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern string purple_str_binary_to_ascii(IntPtr binary, uint len);
+
+		public static string StrBinaryToAscii(/* Resolved as PointerToUnknownStruct to char */ IntPtr binary, uint len)
+		{
+			/* Unable to process binary, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_got_protocol_handler_uri
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_got_protocol_handler_uri(char * uri)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_got_protocol_handler_uri(string uri);
+
+		public static void GotProtocolHandlerUri(string uri)
+		{
+			purple_got_protocol_handler_uri(uri);
+		}
+
+		/*
+		 * Function Name: purple_util_fetch_url_cancel
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_util_fetch_url_cancel(PurpleUtilFetchUrlData * url_data)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_util_fetch_url_cancel(IntPtr url_data);
+
+		public static void FetchUrlCancel(/* Resolved as PointerToUnknownStruct to PurpleUtilFetchUrlData */ IntPtr url_data)
+		{
+			/* Unable to process url_data, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_url_decode
+		 * Function Type: char *
+		 * Function RawType: char
+		 * Function Category: Native
+		 */
+		/*
+		 * char * purple_url_decode(char * str)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern string purple_url_decode(string str);
+
+		public static string UrlDecode(string str)
+		{
+			return purple_url_decode(str);
+		}
+
+		/*
+		 * Function Name: purple_url_encode
+		 * Function Type: char *
+		 * Function RawType: char
+		 * Function Category: Native
+		 */
+		/*
+		 * char * purple_url_encode(char * str)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern string purple_url_encode(string str);
+
+		public static string UrlEncode(string str)
+		{
+			return purple_url_encode(str);
+		}
+
+		/*
+		 * Function Name: purple_email_is_valid
+		 * Function Type: gboolean
+		 * Function RawType: gboolean
+		 * Function Category: Native
+		 */
+		/*
+		 * gboolean purple_email_is_valid(char * address)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern bool purple_email_is_valid(string address);
+
+		public static bool EmailIsValid(string address)
+		{
+			return purple_email_is_valid(address);
+		}
+
+		/*
+		 * Function Name: purple_ip_address_is_valid
+		 * Function Type: gboolean
+		 * Function RawType: gboolean
+		 * Function Category: Native
+		 */
+		/*
+		 * gboolean purple_ip_address_is_valid(char * ip)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern bool purple_ip_address_is_valid(string ip);
+
+		public static bool IpAddressIsValid(string ip)
+		{
+			return purple_ip_address_is_valid(ip);
+		}
+
+		/*
+		 * Function Name: purple_uri_list_extract_uris
+		 * Function Type: GList *
+		 * Function RawType: GList
+		 * Function Category: PointerToGList
+		 */
+		/*
+		 * GList * purple_uri_list_extract_uris(gchar * uri_list)
+		 * 
+		 * Could not generate a wrapper for purple_uri_list_extract_uris in file "util.h".
+		 * Message: Unknown inner-type of argument 0 of purple_uri_list_extract_uris
+		 */
+
+		/*
+		 * Function Name: purple_uri_list_extract_filenames
+		 * Function Type: GList *
+		 * Function RawType: GList
+		 * Function Category: PointerToGList
+		 */
+		/*
+		 * GList * purple_uri_list_extract_filenames(gchar * uri_list)
+		 * 
+		 * Could not generate a wrapper for purple_uri_list_extract_filenames in file "util.h".
+		 * Message: Unknown inner-type of argument 0 of purple_uri_list_extract_filenames
+		 */
+
+		/*
+		 * Function Name: purple_utf8_try_convert
+		 * Function Type: gchar *
+		 * Function RawType: gchar
+		 * Function Category: Native
+		 */
+		/*
+		 * gchar * purple_utf8_try_convert(char * str)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern string purple_utf8_try_convert(string str);
+
+		public static string Utf8TryConvert(string str)
+		{
+			return purple_utf8_try_convert(str);
+		}
+
+		/*
+		 * Function Name: purple_utf8_salvage
+		 * Function Type: gchar *
+		 * Function RawType: gchar
+		 * Function Category: Native
+		 */
+		/*
+		 * gchar * purple_utf8_salvage(char * str)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern string purple_utf8_salvage(string str);
+
+		public static string Utf8Salvage(string str)
+		{
+			return purple_utf8_salvage(str);
+		}
+
+		/*
+		 * Function Name: purple_utf8_strip_unprintables
+		 * Function Type: gchar *
+		 * Function RawType: gchar
+		 * Function Category: Native
+		 */
+		/*
+		 * gchar * purple_utf8_strip_unprintables(gchar * str)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern string purple_utf8_strip_unprintables(string str);
+
+		public static string Utf8StripUnprintables(string str)
+		{
+			return purple_utf8_strip_unprintables(str);
+		}
+
+		/*
+		 * Function Name: purple_gai_strerror
+		 * Function Type: gchar *
+		 * Function RawType: gchar
+		 * Function Category: Native
+		 */
+		/*
+		 * gchar * purple_gai_strerror(gint errnum)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern string purple_gai_strerror(int errnum);
+
+		public static string GaiStrerror(int errnum)
+		{
+			return purple_gai_strerror(errnum);
+		}
+
+		/*
+		 * Function Name: purple_utf8_strcasecmp
+		 * Function Type: int
+		 * Function RawType: int
+		 * Function Category: Native
+		 */
+		/*
+		 * int purple_utf8_strcasecmp(char * a, char * b)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern int purple_utf8_strcasecmp(string a, string b);
+
+		public static int Utf8Strcasecmp(string a, string b)
+		{
+			return purple_utf8_strcasecmp(a, b);
+		}
+
+		/*
+		 * Function Name: purple_utf8_has_word
+		 * Function Type: gboolean
+		 * Function RawType: gboolean
+		 * Function Category: Native
+		 */
+		/*
+		 * gboolean purple_utf8_has_word(char * haystack, char * needle)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern bool purple_utf8_has_word(string haystack, string needle);
+
+		public static bool Utf8HasWord(string haystack, string needle)
+		{
+			return purple_utf8_has_word(haystack, needle);
+		}
+
+		/*
+		 * Function Name: purple_print_utf8_to_console
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_print_utf8_to_console(FILE * filestream, char * message)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_print_utf8_to_console(IntPtr filestream, string message);
+
+		public static void PrintUtf8ToConsole(/* Resolved as PointerToUnknownStruct to FILE */ IntPtr filestream, string message)
+		{
+			/* Unable to process filestream, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_message_meify
+		 * Function Type: gboolean
+		 * Function RawType: gboolean
+		 * Function Category: Native
+		 */
+		/*
+		 * gboolean purple_message_meify(char * message, gssize len)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern bool purple_message_meify(string message, long len);
+
+		public static bool MessageMeify(string message, long len)
+		{
+			return purple_message_meify(message, len);
+		}
+
+		/*
+		 * Function Name: purple_text_strip_mnemonic
+		 * Function Type: char *
+		 * Function RawType: char
+		 * Function Category: Native
+		 */
+		/*
+		 * char * purple_text_strip_mnemonic(char * in)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern string purple_text_strip_mnemonic(string in_);
+
+		public static string TextStripMnemonic(string in_)
+		{
+			return purple_text_strip_mnemonic(in_);
+		}
+
+		/*
+		 * Function Name: purple_unescape_filename
+		 * Function Type: char *
+		 * Function RawType: char
+		 * Function Category: Native
+		 */
+		/*
+		 * char * purple_unescape_filename(char * str)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern string purple_unescape_filename(string str);
+
+		public static string UnescapeFilename(string str)
+		{
+			return purple_unescape_filename(str);
+		}
+
+		/*
+		 * Function Name: purple_escape_filename
+		 * Function Type: char *
+		 * Function RawType: char
+		 * Function Category: Native
+		 */
+		/*
+		 * char * purple_escape_filename(char * str)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern string purple_escape_filename(string str);
+
+		public static string EscapeFilename(string str)
+		{
+			return purple_escape_filename(str);
+		}
+
+		/*
+		 * Function Name: purple_oscar_convert
+		 * Function Type: char *
+		 * Function RawType: char
+		 * Function Category: Native
+		 */
+		/*
+		 * char * purple_oscar_convert(char * act, char * protocol)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern string purple_oscar_convert(string act, string protocol);
+
+		public static string OscarConvert(string act, string protocol)
+		{
+			return purple_oscar_convert(act, protocol);
+		}
+
+		/*
+		 * Function Name: purple_restore_default_signal_handlers
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_restore_default_signal_handlers()
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_restore_default_signal_handlers();
+
+		public static void RestoreDefaultSignalHandlers()
+		{
+			purple_restore_default_signal_handlers();
+		}
+
+		/*
+		 * Function Name: purple_get_host_name
+		 * Function Type: gchar *
+		 * Function RawType: gchar
+		 * Function Category: Native
+		 */
+		/*
+		 * gchar * purple_get_host_name()
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern string purple_get_host_name();
+
+		public static string GetHostName()
+		{
+			return purple_get_host_name();
+		}
+
+	}
+}
+
============================================================
--- libpurple/wrapper/Value.cs	4be921a178a9017520c41e83d8624f3068bb20b0
+++ libpurple/wrapper/Value.cs	4be921a178a9017520c41e83d8624f3068bb20b0
@@ -0,0 +1,780 @@
+/* PurpleWrapper - A .NET (CLR) wrapper for libpurple
+ *
+ * Purple is the legal property of its developers, whose names are too numerous
+ * to list here.  Please refer to the COPYRIGHT file distributed with this
+ * source distribution.
+ *
+ * This program 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.
+ *
+ * This program 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 this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02111-1301  USA
+ */
+
+/*
+ * This file was auto-generated from the libpurple header files to provide a
+ * clean interface between .NET/CLR and the unmanaged C library libpurple.
+ *
+ * This is the second major commit of the code.
+ * Next things:
+ *  - A few of the .h files have anonymous parameter names (eg: void cat(int, int).
+ *    This program will need to assign these parameters names.
+ *  - Function pointers inside structs aren't translated correctly into C#.
+ *  - Two places there are specific-length arrays (eg: char hostname[256]). The parser
+ *    does not detect them as an array.
+ */
+
+using System;
+using System.Collections.Generic;
+using System.Runtime.InteropServices;
+
+namespace PurpleWrapper
+{
+
+	/*
+	 * File: value.h
+	 */
+	public class Value
+	{
+		public enum PurpleType
+		{
+			PURPLE_TYPE_UNKNOWN = 0,
+			PURPLE_TYPE_SUBTYPE,
+			PURPLE_TYPE_CHAR,
+			PURPLE_TYPE_UCHAR,
+			PURPLE_TYPE_BOOLEAN,
+			PURPLE_TYPE_SHORT,
+			PURPLE_TYPE_USHORT,
+			PURPLE_TYPE_INT,
+			PURPLE_TYPE_UINT,
+			PURPLE_TYPE_LONG,
+			PURPLE_TYPE_ULONG,
+			PURPLE_TYPE_INT64,
+			PURPLE_TYPE_UINT64,
+			PURPLE_TYPE_STRING,
+			PURPLE_TYPE_OBJECT,
+			PURPLE_TYPE_POINTER,
+			PURPLE_TYPE_ENUM,
+			PURPLE_TYPE_BOXED
+		};
+
+		public enum PurpleSubType
+		{
+			PURPLE_SUBTYPE_UNKNOWN = 0,
+			PURPLE_SUBTYPE_ACCOUNT,
+			PURPLE_SUBTYPE_BLIST,
+			PURPLE_SUBTYPE_BLIST_BUDDY,
+			PURPLE_SUBTYPE_BLIST_GROUP,
+			PURPLE_SUBTYPE_BLIST_CHAT,
+			PURPLE_SUBTYPE_BUDDY_ICON,
+			PURPLE_SUBTYPE_CONNECTION,
+			PURPLE_SUBTYPE_CONVERSATION,
+			PURPLE_SUBTYPE_PLUGIN,
+			PURPLE_SUBTYPE_BLIST_NODE,
+			PURPLE_SUBTYPE_CIPHER,
+			PURPLE_SUBTYPE_STATUS,
+			PURPLE_SUBTYPE_LOG,
+			PURPLE_SUBTYPE_XFER,
+			PURPLE_SUBTYPE_SAVEDSTATUS,
+			PURPLE_SUBTYPE_XMLNODE,
+			PURPLE_SUBTYPE_USERINFO,
+			PURPLE_SUBTYPE_STORED_IMAGE,
+			PURPLE_SUBTYPE_CERTIFICATEPOOL
+		};
+
+
+		/*
+		 * Function Name: purple_value_destroy
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_value_destroy(PurpleValue * value)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_value_destroy(IntPtr value);
+
+		public static void Destroy(/* Resolved as PointerToUnknownStruct to PurpleValue */ IntPtr value)
+		{
+			/* Unable to process value, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_value_dup
+		 * Function Type: PurpleValue *
+		 * Function RawType: PurpleValue
+		 * Function Category: PointerToUnknownStruct
+		 */
+		/*
+		 * PurpleValue * purple_value_dup(PurpleValue * value)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern IntPtr purple_value_dup(IntPtr value);
+
+		public static /* Resolved as PointerToUnknownStruct to PurpleValue */ IntPtr Dup(/* Resolved as PointerToUnknownStruct to PurpleValue */ IntPtr value)
+		{
+			/* Unable to process value, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_value_get_type
+		 * Function Type: PurpleType
+		 * Function RawType: PurpleType
+		 * Function Category: KnownEnum
+		 */
+		/*
+		 * PurpleType purple_value_get_type(PurpleValue * value)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern Value.PurpleType purple_value_get_type(IntPtr value);
+
+		public static Value.PurpleType GetType(/* Resolved as PointerToUnknownStruct to PurpleValue */ IntPtr value)
+		{
+			/* Unable to process value, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_value_get_subtype
+		 * Function Type: unsigned int
+		 * Function RawType: int
+		 * Function Category: Native
+		 */
+		/*
+		 * unsigned int purple_value_get_subtype(PurpleValue * value)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern uint purple_value_get_subtype(IntPtr value);
+
+		public static uint GetSubtype(/* Resolved as PointerToUnknownStruct to PurpleValue */ IntPtr value)
+		{
+			/* Unable to process value, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_value_get_specific_type
+		 * Function Type: char *
+		 * Function RawType: char
+		 * Function Category: Native
+		 */
+		/*
+		 * char * purple_value_get_specific_type(PurpleValue * value)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern string purple_value_get_specific_type(IntPtr value);
+
+		public static string GetSpecificType(/* Resolved as PointerToUnknownStruct to PurpleValue */ IntPtr value)
+		{
+			/* Unable to process value, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_value_is_outgoing
+		 * Function Type: gboolean
+		 * Function RawType: gboolean
+		 * Function Category: Native
+		 */
+		/*
+		 * gboolean purple_value_is_outgoing(PurpleValue * value)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern bool purple_value_is_outgoing(IntPtr value);
+
+		public static bool IsOutgoing(/* Resolved as PointerToUnknownStruct to PurpleValue */ IntPtr value)
+		{
+			/* Unable to process value, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_value_set_char
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_value_set_char(PurpleValue * value, char data)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_value_set_char(IntPtr value, char data);
+
+		public static void SetChar(/* Resolved as PointerToUnknownStruct to PurpleValue */ IntPtr value, char data)
+		{
+			/* Unable to process value, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_value_set_uchar
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_value_set_uchar(PurpleValue * value, unsigned char data)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_value_set_uchar(IntPtr value, byte data);
+
+		public static void SetUchar(/* Resolved as PointerToUnknownStruct to PurpleValue */ IntPtr value, byte data)
+		{
+			/* Unable to process value, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_value_set_boolean
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_value_set_boolean(PurpleValue * value, gboolean data)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_value_set_boolean(IntPtr value, bool data);
+
+		public static void SetBoolean(/* Resolved as PointerToUnknownStruct to PurpleValue */ IntPtr value, bool data)
+		{
+			/* Unable to process value, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_value_set_short
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_value_set_short(PurpleValue * value, short data)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_value_set_short(IntPtr value, short data);
+
+		public static void SetShort(/* Resolved as PointerToUnknownStruct to PurpleValue */ IntPtr value, short data)
+		{
+			/* Unable to process value, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_value_set_ushort
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_value_set_ushort(PurpleValue * value, unsigned short data)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_value_set_ushort(IntPtr value, ushort data);
+
+		public static void SetUshort(/* Resolved as PointerToUnknownStruct to PurpleValue */ IntPtr value, ushort data)
+		{
+			/* Unable to process value, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_value_set_int
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_value_set_int(PurpleValue * value, int data)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_value_set_int(IntPtr value, int data);
+
+		public static void SetInt(/* Resolved as PointerToUnknownStruct to PurpleValue */ IntPtr value, int data)
+		{
+			/* Unable to process value, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_value_set_uint
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_value_set_uint(PurpleValue * value, unsigned int data)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_value_set_uint(IntPtr value, uint data);
+
+		public static void SetUint(/* Resolved as PointerToUnknownStruct to PurpleValue */ IntPtr value, uint data)
+		{
+			/* Unable to process value, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_value_set_long
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_value_set_long(PurpleValue * value, long data)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_value_set_long(IntPtr value, long data);
+
+		public static void SetLong(/* Resolved as PointerToUnknownStruct to PurpleValue */ IntPtr value, long data)
+		{
+			/* Unable to process value, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_value_set_ulong
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_value_set_ulong(PurpleValue * value, unsigned long data)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_value_set_ulong(IntPtr value, ulong data);
+
+		public static void SetUlong(/* Resolved as PointerToUnknownStruct to PurpleValue */ IntPtr value, ulong data)
+		{
+			/* Unable to process value, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_value_set_int64
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_value_set_int64(PurpleValue * value, gint64 data)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_value_set_int64(IntPtr value, long data);
+
+		public static void SetInt64(/* Resolved as PointerToUnknownStruct to PurpleValue */ IntPtr value, long data)
+		{
+			/* Unable to process value, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_value_set_uint64
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_value_set_uint64(PurpleValue * value, guint64 data)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_value_set_uint64(IntPtr value, ulong data);
+
+		public static void SetUint64(/* Resolved as PointerToUnknownStruct to PurpleValue */ IntPtr value, ulong data)
+		{
+			/* Unable to process value, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_value_set_string
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_value_set_string(PurpleValue * value, char * data)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_value_set_string(IntPtr value, string data);
+
+		public static void SetString(/* Resolved as PointerToUnknownStruct to PurpleValue */ IntPtr value, string data)
+		{
+			/* Unable to process value, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_value_set_object
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_value_set_object(PurpleValue * value, void * data)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_value_set_object(IntPtr value, IntPtr data);
+
+		public static void SetObject(/* Resolved as PointerToUnknownStruct to PurpleValue */ IntPtr value, IntPtr data)
+		{
+			/* Unable to process value, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_value_set_pointer
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_value_set_pointer(PurpleValue * value, void * data)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_value_set_pointer(IntPtr value, IntPtr data);
+
+		public static void SetPointer(/* Resolved as PointerToUnknownStruct to PurpleValue */ IntPtr value, IntPtr data)
+		{
+			/* Unable to process value, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_value_set_enum
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_value_set_enum(PurpleValue * value, int data)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_value_set_enum(IntPtr value, int data);
+
+		public static void SetEnum(/* Resolved as PointerToUnknownStruct to PurpleValue */ IntPtr value, int data)
+		{
+			/* Unable to process value, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_value_set_boxed
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_value_set_boxed(PurpleValue * value, void * data)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_value_set_boxed(IntPtr value, IntPtr data);
+
+		public static void SetBoxed(/* Resolved as PointerToUnknownStruct to PurpleValue */ IntPtr value, IntPtr data)
+		{
+			/* Unable to process value, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_value_get_char
+		 * Function Type: char
+		 * Function RawType: char
+		 * Function Category: Native
+		 */
+		/*
+		 * char purple_value_get_char(PurpleValue * value)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern char purple_value_get_char(IntPtr value);
+
+		public static char GetChar(/* Resolved as PointerToUnknownStruct to PurpleValue */ IntPtr value)
+		{
+			/* Unable to process value, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_value_get_uchar
+		 * Function Type: unsigned char
+		 * Function RawType: char
+		 * Function Category: Native
+		 */
+		/*
+		 * unsigned char purple_value_get_uchar(PurpleValue * value)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern byte purple_value_get_uchar(IntPtr value);
+
+		public static byte GetUchar(/* Resolved as PointerToUnknownStruct to PurpleValue */ IntPtr value)
+		{
+			/* Unable to process value, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_value_get_boolean
+		 * Function Type: gboolean
+		 * Function RawType: gboolean
+		 * Function Category: Native
+		 */
+		/*
+		 * gboolean purple_value_get_boolean(PurpleValue * value)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern bool purple_value_get_boolean(IntPtr value);
+
+		public static bool GetBoolean(/* Resolved as PointerToUnknownStruct to PurpleValue */ IntPtr value)
+		{
+			/* Unable to process value, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_value_get_short
+		 * Function Type: short
+		 * Function RawType: short
+		 * Function Category: Native
+		 */
+		/*
+		 * short purple_value_get_short(PurpleValue * value)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern short purple_value_get_short(IntPtr value);
+
+		public static short GetShort(/* Resolved as PointerToUnknownStruct to PurpleValue */ IntPtr value)
+		{
+			/* Unable to process value, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_value_get_ushort
+		 * Function Type: unsigned short
+		 * Function RawType: short
+		 * Function Category: Native
+		 */
+		/*
+		 * unsigned short purple_value_get_ushort(PurpleValue * value)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern ushort purple_value_get_ushort(IntPtr value);
+
+		public static ushort GetUshort(/* Resolved as PointerToUnknownStruct to PurpleValue */ IntPtr value)
+		{
+			/* Unable to process value, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_value_get_int
+		 * Function Type: int
+		 * Function RawType: int
+		 * Function Category: Native
+		 */
+		/*
+		 * int purple_value_get_int(PurpleValue * value)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern int purple_value_get_int(IntPtr value);
+
+		public static int GetInt(/* Resolved as PointerToUnknownStruct to PurpleValue */ IntPtr value)
+		{
+			/* Unable to process value, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_value_get_uint
+		 * Function Type: unsigned int
+		 * Function RawType: int
+		 * Function Category: Native
+		 */
+		/*
+		 * unsigned int purple_value_get_uint(PurpleValue * value)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern uint purple_value_get_uint(IntPtr value);
+
+		public static uint GetUint(/* Resolved as PointerToUnknownStruct to PurpleValue */ IntPtr value)
+		{
+			/* Unable to process value, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_value_get_long
+		 * Function Type: long
+		 * Function RawType: long
+		 * Function Category: Native
+		 */
+		/*
+		 * long purple_value_get_long(PurpleValue * value)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern long purple_value_get_long(IntPtr value);
+
+		public static long GetLong(/* Resolved as PointerToUnknownStruct to PurpleValue */ IntPtr value)
+		{
+			/* Unable to process value, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_value_get_ulong
+		 * Function Type: unsigned long
+		 * Function RawType: long
+		 * Function Category: Native
+		 */
+		/*
+		 * unsigned long purple_value_get_ulong(PurpleValue * value)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern ulong purple_value_get_ulong(IntPtr value);
+
+		public static ulong GetUlong(/* Resolved as PointerToUnknownStruct to PurpleValue */ IntPtr value)
+		{
+			/* Unable to process value, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_value_get_int64
+		 * Function Type: gint64
+		 * Function RawType: gint64
+		 * Function Category: Native
+		 */
+		/*
+		 * gint64 purple_value_get_int64(PurpleValue * value)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern long purple_value_get_int64(IntPtr value);
+
+		public static long GetInt64(/* Resolved as PointerToUnknownStruct to PurpleValue */ IntPtr value)
+		{
+			/* Unable to process value, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_value_get_uint64
+		 * Function Type: guint64
+		 * Function RawType: guint64
+		 * Function Category: Native
+		 */
+		/*
+		 * guint64 purple_value_get_uint64(PurpleValue * value)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern ulong purple_value_get_uint64(IntPtr value);
+
+		public static ulong GetUint64(/* Resolved as PointerToUnknownStruct to PurpleValue */ IntPtr value)
+		{
+			/* Unable to process value, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_value_get_string
+		 * Function Type: char *
+		 * Function RawType: char
+		 * Function Category: Native
+		 */
+		/*
+		 * char * purple_value_get_string(PurpleValue * value)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern string purple_value_get_string(IntPtr value);
+
+		public static string GetString(/* Resolved as PointerToUnknownStruct to PurpleValue */ IntPtr value)
+		{
+			/* Unable to process value, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_value_get_object
+		 * Function Type: void *
+		 * Function RawType: void
+		 * Function Category: VoidPointer
+		 */
+		/*
+		 * void * purple_value_get_object(PurpleValue * value)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern IntPtr purple_value_get_object(IntPtr value);
+
+		public static IntPtr GetObject(/* Resolved as PointerToUnknownStruct to PurpleValue */ IntPtr value)
+		{
+			/* Unable to process value, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_value_get_pointer
+		 * Function Type: void *
+		 * Function RawType: void
+		 * Function Category: VoidPointer
+		 */
+		/*
+		 * void * purple_value_get_pointer(PurpleValue * value)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern IntPtr purple_value_get_pointer(IntPtr value);
+
+		public static IntPtr GetPointer(/* Resolved as PointerToUnknownStruct to PurpleValue */ IntPtr value)
+		{
+			/* Unable to process value, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_value_get_enum
+		 * Function Type: int
+		 * Function RawType: int
+		 * Function Category: Native
+		 */
+		/*
+		 * int purple_value_get_enum(PurpleValue * value)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern int purple_value_get_enum(IntPtr value);
+
+		public static int GetEnum(/* Resolved as PointerToUnknownStruct to PurpleValue */ IntPtr value)
+		{
+			/* Unable to process value, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_value_get_boxed
+		 * Function Type: void *
+		 * Function RawType: void
+		 * Function Category: VoidPointer
+		 */
+		/*
+		 * void * purple_value_get_boxed(PurpleValue * value)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern IntPtr purple_value_get_boxed(IntPtr value);
+
+		public static IntPtr GetBoxed(/* Resolved as PointerToUnknownStruct to PurpleValue */ IntPtr value)
+		{
+			/* Unable to process value, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+	}
+}
+
============================================================
--- libpurple/wrapper/Version.cs	6b3ef012aa51f75aa106e6b6ba8e96ce061c7f0c
+++ libpurple/wrapper/Version.cs	6b3ef012aa51f75aa106e6b6ba8e96ce061c7f0c
@@ -0,0 +1,67 @@
+/* PurpleWrapper - A .NET (CLR) wrapper for libpurple
+ *
+ * Purple is the legal property of its developers, whose names are too numerous
+ * to list here.  Please refer to the COPYRIGHT file distributed with this
+ * source distribution.
+ *
+ * This program 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.
+ *
+ * This program 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 this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02111-1301  USA
+ */
+
+/*
+ * This file was auto-generated from the libpurple header files to provide a
+ * clean interface between .NET/CLR and the unmanaged C library libpurple.
+ *
+ * This is the second major commit of the code.
+ * Next things:
+ *  - A few of the .h files have anonymous parameter names (eg: void cat(int, int).
+ *    This program will need to assign these parameters names.
+ *  - Function pointers inside structs aren't translated correctly into C#.
+ *  - Two places there are specific-length arrays (eg: char hostname[256]). The parser
+ *    does not detect them as an array.
+ */
+
+using System;
+using System.Collections.Generic;
+using System.Runtime.InteropServices;
+
+namespace PurpleWrapper
+{
+
+	/*
+	 * File: version.h
+	 */
+	public class Version
+	{
+
+		/*
+		 * Function Name: purple_version_check
+		 * Function Type: char *
+		 * Function RawType: char
+		 * Function Category: Native
+		 */
+		/*
+		 * char * purple_version_check(guint required_major, guint required_minor, guint required_micro)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern string purple_version_check(uint required_major, uint required_minor, uint required_micro);
+
+		public static string Check(uint required_major, uint required_minor, uint required_micro)
+		{
+			return purple_version_check(required_major, required_minor, required_micro);
+		}
+
+	}
+}
+
============================================================
--- libpurple/wrapper/Whiteboard.cs	5ab41c0109733aed046690e7f896291b37aa5126
+++ libpurple/wrapper/Whiteboard.cs	5ab41c0109733aed046690e7f896291b37aa5126
@@ -0,0 +1,335 @@
+/* PurpleWrapper - A .NET (CLR) wrapper for libpurple
+ *
+ * Purple is the legal property of its developers, whose names are too numerous
+ * to list here.  Please refer to the COPYRIGHT file distributed with this
+ * source distribution.
+ *
+ * This program 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.
+ *
+ * This program 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 this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02111-1301  USA
+ */
+
+/*
+ * This file was auto-generated from the libpurple header files to provide a
+ * clean interface between .NET/CLR and the unmanaged C library libpurple.
+ *
+ * This is the second major commit of the code.
+ * Next things:
+ *  - A few of the .h files have anonymous parameter names (eg: void cat(int, int).
+ *    This program will need to assign these parameters names.
+ *  - Function pointers inside structs aren't translated correctly into C#.
+ *  - Two places there are specific-length arrays (eg: char hostname[256]). The parser
+ *    does not detect them as an array.
+ */
+
+using System;
+using System.Collections.Generic;
+using System.Runtime.InteropServices;
+
+namespace PurpleWrapper
+{
+
+	/*
+	 * File: whiteboard.h
+	 */
+	public class Whiteboard
+	{
+
+		/*
+		 * Function Name: purple_whiteboard_set_ui_ops
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_whiteboard_set_ui_ops(PurpleWhiteboardUiOps * ops)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_whiteboard_set_ui_ops(IntPtr ops);
+
+		public static void SetUiOps(PurpleWhiteboardUiOps ops)
+		{
+			purple_whiteboard_set_ui_ops(ops.Reference);
+		}
+
+		/*
+		 * Function Name: purple_whiteboard_set_prpl_ops
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_whiteboard_set_prpl_ops(PurpleWhiteboard * wb, PurpleWhiteboardPrplOps * ops)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_whiteboard_set_prpl_ops(IntPtr wb, IntPtr ops);
+
+		public static void SetPrplOps(PurpleWhiteboard wb, PurpleWhiteboardPrplOps ops)
+		{
+			purple_whiteboard_set_prpl_ops(wb.Reference, ops.Reference);
+		}
+
+		/*
+		 * Function Name: purple_whiteboard_create
+		 * Function Type: PurpleWhiteboard *
+		 * Function RawType: PurpleWhiteboard
+		 * Function Category: PointerToKnownStruct
+		 */
+		/*
+		 * PurpleWhiteboard * purple_whiteboard_create(PurpleAccount * account, char * who, int state)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern IntPtr purple_whiteboard_create(IntPtr account, string who, int state);
+
+		public static PurpleWhiteboard Create(PurpleAccount account, string who, int state)
+		{
+			return new PurpleWhiteboard(purple_whiteboard_create(account.Reference, who, state));
+		}
+
+		/*
+		 * Function Name: purple_whiteboard_destroy
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_whiteboard_destroy(PurpleWhiteboard * wb)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_whiteboard_destroy(IntPtr wb);
+
+		public static void Destroy(PurpleWhiteboard wb)
+		{
+			purple_whiteboard_destroy(wb.Reference);
+		}
+
+		/*
+		 * Function Name: purple_whiteboard_start
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_whiteboard_start(PurpleWhiteboard * wb)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_whiteboard_start(IntPtr wb);
+
+		public static void Start(PurpleWhiteboard wb)
+		{
+			purple_whiteboard_start(wb.Reference);
+		}
+
+		/*
+		 * Function Name: purple_whiteboard_get_session
+		 * Function Type: PurpleWhiteboard *
+		 * Function RawType: PurpleWhiteboard
+		 * Function Category: PointerToKnownStruct
+		 */
+		/*
+		 * PurpleWhiteboard * purple_whiteboard_get_session(PurpleAccount * account, char * who)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern IntPtr purple_whiteboard_get_session(IntPtr account, string who);
+
+		public static PurpleWhiteboard GetSession(PurpleAccount account, string who)
+		{
+			return new PurpleWhiteboard(purple_whiteboard_get_session(account.Reference, who));
+		}
+
+		/*
+		 * Function Name: purple_whiteboard_draw_list_destroy
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_whiteboard_draw_list_destroy(GList * draw_list)
+		 * 
+		 * Could not generate a wrapper for purple_whiteboard_draw_list_destroy in file "whiteboard.h".
+		 * Message: Unable to provide a type for GList as no function information was provided in code.
+		 */
+
+		/*
+		 * Function Name: purple_whiteboard_get_dimensions
+		 * Function Type: gboolean
+		 * Function RawType: gboolean
+		 * Function Category: Native
+		 */
+		/*
+		 * gboolean purple_whiteboard_get_dimensions(PurpleWhiteboard * wb, int * width, int * height)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern bool purple_whiteboard_get_dimensions(IntPtr wb, IntPtr width, IntPtr height);
+
+		public static bool GetDimensions(PurpleWhiteboard wb, /* Resolved as PointerToUnknownStruct to int */ IntPtr width, /* Resolved as PointerToUnknownStruct to int */ IntPtr height)
+		{
+			/* Unable to process width, a PointerToUnknownStruct. */
+			/* Unable to process height, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_whiteboard_set_dimensions
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_whiteboard_set_dimensions(PurpleWhiteboard * wb, int width, int height)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_whiteboard_set_dimensions(IntPtr wb, int width, int height);
+
+		public static void SetDimensions(PurpleWhiteboard wb, int width, int height)
+		{
+			purple_whiteboard_set_dimensions(wb.Reference, width, height);
+		}
+
+		/*
+		 * Function Name: purple_whiteboard_draw_point
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_whiteboard_draw_point(PurpleWhiteboard * wb, int x, int y, int color, int size)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_whiteboard_draw_point(IntPtr wb, int x, int y, int color, int size);
+
+		public static void DrawPoint(PurpleWhiteboard wb, int x, int y, int color, int size)
+		{
+			purple_whiteboard_draw_point(wb.Reference, x, y, color, size);
+		}
+
+		/*
+		 * Function Name: purple_whiteboard_send_draw_list
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_whiteboard_send_draw_list(PurpleWhiteboard * wb, GList * list)
+		 * 
+		 * Could not generate a wrapper for purple_whiteboard_send_draw_list in file "whiteboard.h".
+		 * Message: Unable to provide a type for GList as no function information was provided in code.
+		 */
+
+		/*
+		 * Function Name: purple_whiteboard_draw_line
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_whiteboard_draw_line(PurpleWhiteboard * wb, int x1, int y1, int x2, int y2, int color, int size)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_whiteboard_draw_line(IntPtr wb, int x1, int y1, int x2, int y2, int color, int size);
+
+		public static void DrawLine(PurpleWhiteboard wb, int x1, int y1, int x2, int y2, int color, int size)
+		{
+			purple_whiteboard_draw_line(wb.Reference, x1, y1, x2, y2, color, size);
+		}
+
+		/*
+		 * Function Name: purple_whiteboard_clear
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_whiteboard_clear(PurpleWhiteboard * wb)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_whiteboard_clear(IntPtr wb);
+
+		public static void Clear(PurpleWhiteboard wb)
+		{
+			purple_whiteboard_clear(wb.Reference);
+		}
+
+		/*
+		 * Function Name: purple_whiteboard_send_clear
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_whiteboard_send_clear(PurpleWhiteboard * wb)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_whiteboard_send_clear(IntPtr wb);
+
+		public static void SendClear(PurpleWhiteboard wb)
+		{
+			purple_whiteboard_send_clear(wb.Reference);
+		}
+
+		/*
+		 * Function Name: purple_whiteboard_send_brush
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_whiteboard_send_brush(PurpleWhiteboard * wb, int size, int color)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_whiteboard_send_brush(IntPtr wb, int size, int color);
+
+		public static void SendBrush(PurpleWhiteboard wb, int size, int color)
+		{
+			purple_whiteboard_send_brush(wb.Reference, size, color);
+		}
+
+		/*
+		 * Function Name: purple_whiteboard_get_brush
+		 * Function Type: gboolean
+		 * Function RawType: gboolean
+		 * Function Category: Native
+		 */
+		/*
+		 * gboolean purple_whiteboard_get_brush(PurpleWhiteboard * wb, int * size, int * color)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern bool purple_whiteboard_get_brush(IntPtr wb, IntPtr size, IntPtr color);
+
+		public static bool GetBrush(PurpleWhiteboard wb, /* Resolved as PointerToUnknownStruct to int */ IntPtr size, /* Resolved as PointerToUnknownStruct to int */ IntPtr color)
+		{
+			/* Unable to process size, a PointerToUnknownStruct. */
+			/* Unable to process color, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: purple_whiteboard_set_brush
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void purple_whiteboard_set_brush(PurpleWhiteboard * wb, int size, int color)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void purple_whiteboard_set_brush(IntPtr wb, int size, int color);
+
+		public static void SetBrush(PurpleWhiteboard wb, int size, int color)
+		{
+			purple_whiteboard_set_brush(wb.Reference, size, color);
+		}
+
+	}
+}
+
============================================================
--- libpurple/wrapper/XMLNodeClass.cs	65b2e80beb27012d19de68a542a74c475ce2f29e
+++ libpurple/wrapper/XMLNodeClass.cs	65b2e80beb27012d19de68a542a74c475ce2f29e
@@ -0,0 +1,501 @@
+/* PurpleWrapper - A .NET (CLR) wrapper for libpurple
+ *
+ * Purple is the legal property of its developers, whose names are too numerous
+ * to list here.  Please refer to the COPYRIGHT file distributed with this
+ * source distribution.
+ *
+ * This program 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.
+ *
+ * This program 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 this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02111-1301  USA
+ */
+
+/*
+ * This file was auto-generated from the libpurple header files to provide a
+ * clean interface between .NET/CLR and the unmanaged C library libpurple.
+ *
+ * This is the second major commit of the code.
+ * Next things:
+ *  - A few of the .h files have anonymous parameter names (eg: void cat(int, int).
+ *    This program will need to assign these parameters names.
+ *  - Function pointers inside structs aren't translated correctly into C#.
+ *  - Two places there are specific-length arrays (eg: char hostname[256]). The parser
+ *    does not detect them as an array.
+ */
+
+using System;
+using System.Collections.Generic;
+using System.Runtime.InteropServices;
+
+namespace PurpleWrapper
+{
+
+	/*
+	 * File: xmlnode.h
+	 */
+	public class XMLNodeClass
+	{
+		public enum XMLNodeType
+		{
+			XMLNODE_TYPE_TAG,
+			XMLNODE_TYPE_ATTRIB,
+			XMLNODE_TYPE_DATA
+		};
+
+
+		/*
+		 * Function Name: xmlnode_new
+		 * Function Type: xmlnode *
+		 * Function RawType: xmlnode
+		 * Function Category: PointerToKnownStruct
+		 */
+		/*
+		 * xmlnode * xmlnode_new(char * name)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern IntPtr xmlnode_new(string name);
+
+		public static xmlnode XmlnodeNew(string name)
+		{
+			return new xmlnode(xmlnode_new(name));
+		}
+
+		/*
+		 * Function Name: xmlnode_new_child
+		 * Function Type: xmlnode *
+		 * Function RawType: xmlnode
+		 * Function Category: PointerToKnownStruct
+		 */
+		/*
+		 * xmlnode * xmlnode_new_child(xmlnode * parent, char * name)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern IntPtr xmlnode_new_child(IntPtr parent, string name);
+
+		public static xmlnode XmlnodeNewChild(xmlnode parent, string name)
+		{
+			return new xmlnode(xmlnode_new_child(parent.Reference, name));
+		}
+
+		/*
+		 * Function Name: xmlnode_insert_child
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void xmlnode_insert_child(xmlnode * parent, xmlnode * child)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void xmlnode_insert_child(IntPtr parent, IntPtr child);
+
+		public static void XmlnodeInsertChild(xmlnode parent, xmlnode child)
+		{
+			xmlnode_insert_child(parent.Reference, child.Reference);
+		}
+
+		/*
+		 * Function Name: xmlnode_get_child
+		 * Function Type: xmlnode *
+		 * Function RawType: xmlnode
+		 * Function Category: PointerToKnownStruct
+		 */
+		/*
+		 * xmlnode * xmlnode_get_child(xmlnode * parent, char * name)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern IntPtr xmlnode_get_child(IntPtr parent, string name);
+
+		public static xmlnode XmlnodeGetChild(xmlnode parent, string name)
+		{
+			return new xmlnode(xmlnode_get_child(parent.Reference, name));
+		}
+
+		/*
+		 * Function Name: xmlnode_get_child_with_namespace
+		 * Function Type: xmlnode *
+		 * Function RawType: xmlnode
+		 * Function Category: PointerToKnownStruct
+		 */
+		/*
+		 * xmlnode * xmlnode_get_child_with_namespace(xmlnode * parent, char * name, char * xmlns)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern IntPtr xmlnode_get_child_with_namespace(IntPtr parent, string name, string xmlns);
+
+		public static xmlnode XmlnodeGetChildWithNamespace(xmlnode parent, string name, string xmlns)
+		{
+			return new xmlnode(xmlnode_get_child_with_namespace(parent.Reference, name, xmlns));
+		}
+
+		/*
+		 * Function Name: xmlnode_get_next_twin
+		 * Function Type: xmlnode *
+		 * Function RawType: xmlnode
+		 * Function Category: PointerToKnownStruct
+		 */
+		/*
+		 * xmlnode * xmlnode_get_next_twin(xmlnode * node)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern IntPtr xmlnode_get_next_twin(IntPtr node);
+
+		public static xmlnode XmlnodeGetNextTwin(xmlnode node)
+		{
+			return new xmlnode(xmlnode_get_next_twin(node.Reference));
+		}
+
+		/*
+		 * Function Name: xmlnode_insert_data
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void xmlnode_insert_data(xmlnode * node, char * data, gssize size)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void xmlnode_insert_data(IntPtr node, string data, long size);
+
+		public static void XmlnodeInsertData(xmlnode node, string data, long size)
+		{
+			xmlnode_insert_data(node.Reference, data, size);
+		}
+
+		/*
+		 * Function Name: xmlnode_get_data
+		 * Function Type: char *
+		 * Function RawType: char
+		 * Function Category: Native
+		 */
+		/*
+		 * char * xmlnode_get_data(xmlnode * node)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern string xmlnode_get_data(IntPtr node);
+
+		public static string XmlnodeGetData(xmlnode node)
+		{
+			return xmlnode_get_data(node.Reference);
+		}
+
+		/*
+		 * Function Name: xmlnode_get_data_unescaped
+		 * Function Type: char *
+		 * Function RawType: char
+		 * Function Category: Native
+		 */
+		/*
+		 * char * xmlnode_get_data_unescaped(xmlnode * node)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern string xmlnode_get_data_unescaped(IntPtr node);
+
+		public static string XmlnodeGetDataUnescaped(xmlnode node)
+		{
+			return xmlnode_get_data_unescaped(node.Reference);
+		}
+
+		/*
+		 * Function Name: xmlnode_set_attrib
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void xmlnode_set_attrib(xmlnode * node, char * attr, char * value)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void xmlnode_set_attrib(IntPtr node, string attr, string value);
+
+		public static void XmlnodeSetAttrib(xmlnode node, string attr, string value)
+		{
+			xmlnode_set_attrib(node.Reference, attr, value);
+		}
+
+		/*
+		 * Function Name: xmlnode_set_attrib_with_prefix
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void xmlnode_set_attrib_with_prefix(xmlnode * node, char * attr, char * prefix, char * value)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void xmlnode_set_attrib_with_prefix(IntPtr node, string attr, string prefix, string value);
+
+		public static void XmlnodeSetAttribWithPrefix(xmlnode node, string attr, string prefix, string value)
+		{
+			xmlnode_set_attrib_with_prefix(node.Reference, attr, prefix, value);
+		}
+
+		/*
+		 * Function Name: xmlnode_set_attrib_with_namespace
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void xmlnode_set_attrib_with_namespace(xmlnode * node, char * attr, char * xmlns, char * value)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void xmlnode_set_attrib_with_namespace(IntPtr node, string attr, string xmlns, string value);
+
+		public static void XmlnodeSetAttribWithNamespace(xmlnode node, string attr, string xmlns, string value)
+		{
+			xmlnode_set_attrib_with_namespace(node.Reference, attr, xmlns, value);
+		}
+
+		/*
+		 * Function Name: xmlnode_get_attrib
+		 * Function Type: char *
+		 * Function RawType: char
+		 * Function Category: Native
+		 */
+		/*
+		 * char * xmlnode_get_attrib(xmlnode * node, char * attr)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern string xmlnode_get_attrib(IntPtr node, string attr);
+
+		public static string XmlnodeGetAttrib(xmlnode node, string attr)
+		{
+			return xmlnode_get_attrib(node.Reference, attr);
+		}
+
+		/*
+		 * Function Name: xmlnode_get_attrib_with_namespace
+		 * Function Type: char *
+		 * Function RawType: char
+		 * Function Category: Native
+		 */
+		/*
+		 * char * xmlnode_get_attrib_with_namespace(xmlnode * node, char * attr, char * xmlns)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern string xmlnode_get_attrib_with_namespace(IntPtr node, string attr, string xmlns);
+
+		public static string XmlnodeGetAttribWithNamespace(xmlnode node, string attr, string xmlns)
+		{
+			return xmlnode_get_attrib_with_namespace(node.Reference, attr, xmlns);
+		}
+
+		/*
+		 * Function Name: xmlnode_remove_attrib
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void xmlnode_remove_attrib(xmlnode * node, char * attr)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void xmlnode_remove_attrib(IntPtr node, string attr);
+
+		public static void XmlnodeRemoveAttrib(xmlnode node, string attr)
+		{
+			xmlnode_remove_attrib(node.Reference, attr);
+		}
+
+		/*
+		 * Function Name: xmlnode_remove_attrib_with_namespace
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void xmlnode_remove_attrib_with_namespace(xmlnode * node, char * attr, char * xmlns)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void xmlnode_remove_attrib_with_namespace(IntPtr node, string attr, string xmlns);
+
+		public static void XmlnodeRemoveAttribWithNamespace(xmlnode node, string attr, string xmlns)
+		{
+			xmlnode_remove_attrib_with_namespace(node.Reference, attr, xmlns);
+		}
+
+		/*
+		 * Function Name: xmlnode_set_namespace
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void xmlnode_set_namespace(xmlnode * node, char * xmlns)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void xmlnode_set_namespace(IntPtr node, string xmlns);
+
+		public static void XmlnodeSetNamespace(xmlnode node, string xmlns)
+		{
+			xmlnode_set_namespace(node.Reference, xmlns);
+		}
+
+		/*
+		 * Function Name: xmlnode_get_namespace
+		 * Function Type: char *
+		 * Function RawType: char
+		 * Function Category: Native
+		 */
+		/*
+		 * char * xmlnode_get_namespace(xmlnode * node)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern string xmlnode_get_namespace(IntPtr node);
+
+		public static string XmlnodeGetNamespace(xmlnode node)
+		{
+			return xmlnode_get_namespace(node.Reference);
+		}
+
+		/*
+		 * Function Name: xmlnode_set_prefix
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void xmlnode_set_prefix(xmlnode * node, char * prefix)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void xmlnode_set_prefix(IntPtr node, string prefix);
+
+		public static void XmlnodeSetPrefix(xmlnode node, string prefix)
+		{
+			xmlnode_set_prefix(node.Reference, prefix);
+		}
+
+		/*
+		 * Function Name: xmlnode_get_prefix
+		 * Function Type: char *
+		 * Function RawType: char
+		 * Function Category: Native
+		 */
+		/*
+		 * char * xmlnode_get_prefix(xmlnode * node)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern string xmlnode_get_prefix(IntPtr node);
+
+		public static string XmlnodeGetPrefix(xmlnode node)
+		{
+			return xmlnode_get_prefix(node.Reference);
+		}
+
+		/*
+		 * Function Name: xmlnode_get_parent
+		 * Function Type: xmlnode *
+		 * Function RawType: xmlnode
+		 * Function Category: PointerToKnownStruct
+		 */
+		/*
+		 * xmlnode * xmlnode_get_parent(xmlnode * child)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern IntPtr xmlnode_get_parent(IntPtr child);
+
+		public static xmlnode XmlnodeGetParent(xmlnode child)
+		{
+			return new xmlnode(xmlnode_get_parent(child.Reference));
+		}
+
+		/*
+		 * Function Name: xmlnode_to_str
+		 * Function Type: char *
+		 * Function RawType: char
+		 * Function Category: Native
+		 */
+		/*
+		 * char * xmlnode_to_str(xmlnode * node, int * len)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern string xmlnode_to_str(IntPtr node, IntPtr len);
+
+		public static string XmlnodeToStr(xmlnode node, /* Resolved as PointerToUnknownStruct to int */ IntPtr len)
+		{
+			/* Unable to process len, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: xmlnode_to_formatted_str
+		 * Function Type: char *
+		 * Function RawType: char
+		 * Function Category: Native
+		 */
+		/*
+		 * char * xmlnode_to_formatted_str(xmlnode * node, int * len)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern string xmlnode_to_formatted_str(IntPtr node, IntPtr len);
+
+		public static string XmlnodeToFormattedStr(xmlnode node, /* Resolved as PointerToUnknownStruct to int */ IntPtr len)
+		{
+			/* Unable to process len, a PointerToUnknownStruct. */
+			throw new NotImplementedException();
+		}
+
+		/*
+		 * Function Name: xmlnode_from_str
+		 * Function Type: xmlnode *
+		 * Function RawType: xmlnode
+		 * Function Category: PointerToKnownStruct
+		 */
+		/*
+		 * xmlnode * xmlnode_from_str(char * str, gssize size)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern IntPtr xmlnode_from_str(string str, long size);
+
+		public static xmlnode XmlnodeFromStr(string str, long size)
+		{
+			return new xmlnode(xmlnode_from_str(str, size));
+		}
+
+		/*
+		 * Function Name: xmlnode_copy
+		 * Function Type: xmlnode *
+		 * Function RawType: xmlnode
+		 * Function Category: PointerToKnownStruct
+		 */
+		/*
+		 * xmlnode * xmlnode_copy(xmlnode * src)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern IntPtr xmlnode_copy(IntPtr src);
+
+		public static xmlnode XmlnodeCopy(xmlnode src)
+		{
+			return new xmlnode(xmlnode_copy(src.Reference));
+		}
+
+		/*
+		 * Function Name: xmlnode_free
+		 * Function Type: void
+		 * Function RawType: void
+		 * Function Category: Void
+		 */
+		/*
+		 * void xmlnode_free(xmlnode * node)
+		 */
+		[DllImport("libpurple.dll")]
+		private static extern void xmlnode_free(IntPtr node);
+
+		public static void XmlnodeFree(xmlnode node)
+		{
+			xmlnode_free(node.Reference);
+		}
+
+	}
+}
+
============================================================
--- libpurple/wrapper/generator/CArgument.cs	f75d20003ac081975df76176da384e663b139252
+++ libpurple/wrapper/generator/CArgument.cs	f75d20003ac081975df76176da384e663b139252
@@ -0,0 +1,136 @@
+using System;
+using System.Collections.Generic;
+
+namespace Scripts
+{
+    class CArgument : CTyped
+    {
+        private bool isEllipsis = false;
+        private bool isFunctionPointer = false;
+        public List<CArgument> functionPointerArguments = new List<CArgument>();
+        int argumentNumber = -1;
+
+        public CArgument(CFile file)
+            : base(file, "", "")
+        {
+        }
+
+        public CArgument(CFile file, String type, String name, int argumentNumber)
+            : base(file, type, name)
+        {
+            this.ArgumentNumber = argumentNumber;
+        }
+
+        public int ArgumentNumber
+        {
+            get { return argumentNumber; }
+            set { argumentNumber = value; }
+        }
+
+        public bool IsEllipsis
+        {
+            get { return isEllipsis; }
+            set { isEllipsis = value; }
+        }
+
+        public bool IsFunctionPointer
+        {
+            get { return isFunctionPointer; }
+            set { isFunctionPointer = value; }
+        }
+
+        public List<CArgument> FunctionPointerArguments
+        {
+            get { return functionPointerArguments; }
+        }
+
+        public void AddFunctionPointerArgument(CArgument argument)
+        {
+            functionPointerArguments.Add(argument);
+        }
+
+        public override string ToString()
+        {
+            if (this.IsEllipsis)
+                return "...";
+            else if (this.IsFunctionPointer)
+            {
+                String str = this.Type + " (*" + this.Name + ")(";
+
+                for (int i = 0; i < this.FunctionPointerArguments.Count; i++)
+                {
+                    if (i != 0)
+                        str += ", ";
+
+                    str += this.FunctionPointerArguments[i].ToString();
+                }
+                str += ")";
+
+                return str;
+            }
+            else
+                return this.Type + " " + this.Name;
+        }
+
+        public string GetArgumentSafeName()
+        {
+            if (this.SafeName == "")
+                return "_PurpleWrapper_arg" + this.ArgumentNumber;
+            else
+                return this.SafeName;
+        }
+
+        public string GetCSharpPrivateFunction()
+        {
+            return GetCSharpFunction(CSharpFunctionType.Private, null);
+        }
+
+        public string GetCSharpPrivateFunction(String functionName)
+        {
+            return GetCSharpFunction(CSharpFunctionType.Private, functionName);
+        }
+
+        public string GetCSharpPublicFunction()
+        {
+            return GetCSharpFunction(CSharpFunctionType.Public, null);
+        }
+
+        public string GetCSharpPublicFunction(String functionName)
+        {
+            return GetCSharpFunction(CSharpFunctionType.Public, functionName);
+        }
+
+        private enum CSharpFunctionType { Public, Private };
+
+        // NEXT: Function Name
+        private string GetCSharpFunction(CSharpFunctionType functionType, String functionName)
+        {
+            if (this.IsEllipsis)
+                throw new UnableToCreateWrapperException("The function argument contains the ellipsis argument and cannot be automatically wrapped.");
+            else
+            {
+                String result = "";
+
+                if (this.IsFunctionPointer)
+                    result = "IntPtr";
+                else
+                {
+                    switch (functionType)
+                    {
+                        case CSharpFunctionType.Private:
+                            result = this.CSharpInternalAPIType;
+                            break;
+
+                        case CSharpFunctionType.Public:
+                            result = this.CSharpExternalAPIType;
+                            break;
+                    }
+                }
+
+                result += " " + this.GetArgumentSafeName();
+                return result;
+            }
+
+        }
+    }
+}
============================================================
--- libpurple/wrapper/generator/CFunction.cs	bd46bd897adb4f5e88e8b014756d9508cb08de27
+++ libpurple/wrapper/generator/CFunction.cs	bd46bd897adb4f5e88e8b014756d9508cb08de27
@@ -0,0 +1,109 @@
+using System;
+using System.Collections.Generic;
+
+namespace Scripts
+{
+    class CFunction : CTyped
+    {
+        private List<CArgument> arguments = new List<CArgument>();
+        private bool isFunctionPointer = false;
+
+        public CFunction(CFile file, String returnType, String name)
+            : base(file, returnType, name)
+        {
+        }
+
+        public void AddArgument(CArgument argument)
+        {
+            arguments.Add(argument);
+        }
+
+        public List<CArgument> Arguments
+        {
+            get
+            {
+                return arguments;
+            }
+        }
+
+        public bool IsFunctionPointer
+        {
+            get { return isFunctionPointer; }
+            set { isFunctionPointer = true; }
+        }
+
+        public override string ToString()
+        {
+            String str = this.Type + " " + this.Name + "(";
+
+            for (int i = 0; i < this.Arguments.Count; i++)
+            {
+                if (i != 0)
+                    str += ", ";
+                
+                str += this.Arguments[i].ToString();
+            }
+
+            str += ")";
+            return str;
+        }
+
+        public string GetCSharpPrivateFunction()
+        {
+            String str = "";
+            str += this.CSharpInternalAPIType + " " + this.SafeName + "(";
+
+            for (int i = 0; i < this.Arguments.Count; i++)
+            {
+                if (i != 0)
+                    str += ", ";
+
+                str += this.Arguments[i].GetCSharpPrivateFunction();
+            }
+
+            str += ")";
+            return str;
+        }
+
+        public string GetCSharpPublicFunction()
+        {
+            String str = "";
+
+            String modifiedName = this.SafeName.ToLower();
+            if (modifiedName.StartsWith("purple_"))
+                modifiedName = modifiedName.Substring(7);
+            if (modifiedName.StartsWith(this.File.FileNameAsClassName.ToLower() + "_"))
+                modifiedName = modifiedName.Substring(this.File.FileNameAsClassName.Length + 1);
+
+            String finalName = "";
+            finalName += Char.ToUpper(modifiedName[0]);
+            for (int i = 1; i < modifiedName.Length; i++)
+            {
+                if (modifiedName[i] == '_' && i != modifiedName.Length - 1)
+                {
+                    finalName += Char.ToUpper(modifiedName[i + 1]);
+                    i++;
+                }
+                else
+                {
+                    finalName += modifiedName[i];
+                }
+            }
+
+
+
+            str += this.GetCSharpExternalAPIType(this.Name, 0) + " " + finalName + "(";
+
+            for (int i = 0; i < this.Arguments.Count; i++)
+            {
+                if (i != 0)
+                    str += ", ";
+
+                str += this.Arguments[i].GetCSharpPublicFunction();
+            }
+
+            str += ")";
+            return str;
+        }
+    }
+}
============================================================
--- libpurple/wrapper/generator/CNamed.cs	55d15ffe0e69d1b424061abcf342a1ec849be4a1
+++ libpurple/wrapper/generator/CNamed.cs	55d15ffe0e69d1b424061abcf342a1ec849be4a1
@@ -0,0 +1,52 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+
+namespace Scripts
+{
+    abstract class CNamed
+    {
+        private String name;
+        private CFile file;
+
+        public CNamed(CFile file, String name)
+        {
+            this.File = file;
+            this.Name = name;
+        }
+
+        public String Name
+        {
+            get
+            {
+                return name;
+            }
+            set
+            {
+                if (value.Length > 0 && value[0] == '_' && !value.Contains("purple_reserved"))
+                    name = value.Substring(1);
+                else
+                    name = value;
+            }
+        }
+
+        public String SafeName
+        {
+            get
+            {
+                if (this.Name == "in" || this.Name == "event" || this.Name == "ref")
+                    return this.Name + "_";
+                else
+                    return this.Name;
+            }
+        }
+
+        public CFile File
+        {
+            get { return file; }
+            set { file = value; }
+        }
+
+    }
+}
============================================================
--- libpurple/wrapper/generator/CTyped.cs	cd94d02525abfd845150aa29ac8bc5345e1a2bb3
+++ libpurple/wrapper/generator/CTyped.cs	cd94d02525abfd845150aa29ac8bc5345e1a2bb3
@@ -0,0 +1,495 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+
+namespace Scripts
+{
+    class CTyped : CNamed
+    {
+        private string type;
+        private bool isArray;
+        private int arraySize;
+
+        public enum TypeCategory
+        {
+            Void,
+            DateTime,
+            Native,
+            PointerToKnownStruct,
+            VoidPointer,
+            GObjectObject,
+            InnerStruct,
+            PointerToUnknownStruct,
+            Unknown,
+            KnownEnum,
+            KnownFunctionPointer,
+            KnownFunction,
+            KnownStruct,
+            KnownArgument,
+            PointerToGList,
+            PointerToGHashTable,
+            PointerToGSList
+        };
+
+
+        public CTyped(CFile file, String type, String name)
+            : base(file, name)
+        {
+            this.Type = type;
+
+            if (name.Contains("["))
+            {
+                this.ArraySize = int.Parse(name.Substring(name.IndexOf("[") + 1, name.IndexOf("]") - name.IndexOf("[") - 1));
+                this.IsArray = true;
+                this.Name = name.Substring(0, name.IndexOf("["));
+            }
+
+            if (name.EndsWith("[]"))
+            {
+                name = name.Substring(0, name.Length - 2);
+                this.IsArray = true;
+                this.ArraySize = -1;
+            }
+        }
+
+        public int ArraySize
+        {
+            get { return arraySize; }
+            set { arraySize = value; }
+        }
+
+        public String Type
+        {
+            get { return type; }
+            set { type = value; }
+        }
+
+        public bool IsArray
+        {
+            get { return isArray; }
+            set { isArray = value; }
+        }
+
+        public String RawType
+        {
+            get
+            {
+                String fullType = this.Type;
+
+                if (fullType.StartsWith("const"))
+                    fullType = fullType.Substring(("const").Length).Trim();
+                
+                if (fullType.StartsWith("unsigned"))
+                    fullType = fullType.Substring(("unsigned").Length).Trim();
+
+                if (fullType.Contains(" "))
+                    return fullType.Substring(0, fullType.IndexOf(" "));
+                else
+                    return fullType;
+            }
+        }
+
+        public bool IsTypePointer
+        {
+            get
+            {
+                if (this.Type != null && (this.Type.EndsWith("*") || this.Type == "gpointer" || this.Type == "gconstpointer"))
+                    return true;
+                else
+                    return false;
+            }
+        }
+
+        public bool IsTypeString
+        {
+            get
+            {
+                if (this.NativeType == "string")
+                    return true;
+                else
+                    return false;
+            }
+        }
+
+        public bool IsTypeNative
+        {
+            get
+            {
+                if (this.NativeType == null)
+                    return false;
+                else
+                    return true;
+            }
+        }
+
+        public bool IsTypeVoid
+        {
+            get
+            {
+                if (this.Type == "void")
+                    return true;
+                else
+                    return false;
+            }
+        }
+
+        public bool IsTypeTime
+        {
+            get
+            {
+                if (this.Type == "time_t")
+                    return true;
+                else
+                    return false;
+            }
+        }
+
+        public CNamed ResolvedType
+        {
+            get
+            {
+                return CFile.LookUpName(this.RawType);
+            }
+        }
+
+        public TypeCategory Category
+        {
+            get
+            {
+                if (this.IsTypeNative)
+                    return TypeCategory.Native;
+                else if (this.Type == "void *" || this.Type == "gpointer" || this.Type == "gconstpointer")
+                    return TypeCategory.VoidPointer;
+                else if (this.IsTypeVoid)
+                    return TypeCategory.Void;
+                else if (this.IsTypeTime)
+                    return TypeCategory.DateTime;
+                else if (this.Type == "GObject" || this.Type == "GObjectClass" || this.Type == "GType" || this.Type == "GCallback" || this.Type == "GSourceFunc")
+                    return TypeCategory.GObjectObject;
+                else if (this.Type == "struct" || this.Type == "union")
+                    return TypeCategory.InnerStruct;
+                else if (this.Type == "GList *")
+                    return TypeCategory.PointerToGList;
+                else if (this.Type == "GHashTable *")
+                    return TypeCategory.PointerToGHashTable;
+                else if (this.Type == "GSList *")
+                    return TypeCategory.PointerToGSList;
+                else
+                {
+                    CNamed resolvedType = this.ResolvedType;
+
+                    if (resolvedType != null)
+                    {
+                        if (resolvedType is CEnum)
+                            return TypeCategory.KnownEnum;
+                        else if (resolvedType is CArgument)
+                            return TypeCategory.KnownArgument;
+                        else if (resolvedType is CFunction)
+                        {
+                            if (((CFunction)resolvedType).IsFunctionPointer)
+                                return TypeCategory.KnownFunctionPointer;
+                            else
+                                return TypeCategory.KnownFunction;
+                        }
+                        else if (resolvedType is CStruct)
+                        {
+                            if (this.IsTypePointer)
+                                return TypeCategory.PointerToKnownStruct;
+                            else
+                                return TypeCategory.KnownStruct;
+                        }
+                        else
+                            return TypeCategory.Unknown;
+                    }
+                    else
+                    {
+                        if (this.IsTypePointer)
+                            return TypeCategory.PointerToUnknownStruct;
+                        else
+                            return TypeCategory.Unknown;
+                    }
+                }
+
+
+            }
+        }
+
+        public String CSharpInternalAPIType
+        {
+            get
+            {
+                String str = "";
+
+                switch (this.Category)
+                {
+                    case TypeCategory.Native:
+                        str = this.NativeType;
+                        break;
+
+                    case TypeCategory.PointerToKnownStruct:
+                    case TypeCategory.PointerToUnknownStruct:
+                    case TypeCategory.VoidPointer:
+                    case TypeCategory.GObjectObject:
+                    case TypeCategory.KnownFunctionPointer:
+                    case TypeCategory.PointerToGSList:
+                    case TypeCategory.PointerToGList:
+                    case TypeCategory.PointerToGHashTable:
+                        str = "IntPtr";
+                        break;
+
+                    case TypeCategory.Void:
+                        str = "void";
+                        break;
+
+                    case TypeCategory.DateTime:
+                        str = "ulong";
+                        break;
+
+                    case TypeCategory.InnerStruct:
+                        throw new UnableToCreateWrapperException("The struct contains an inner-struct or inner-union and cannot be automatically wrapped.");
+                        break;
+
+                    case TypeCategory.KnownStruct:
+                        throw new UnableToCreateWrapperException("The struct contains an object that resolves to a function that is not a function pointer (" + this.ToString() + ").");
+                        break;
+
+                    case TypeCategory.KnownEnum:
+                        {
+                            CEnum resolvedEnum = (CEnum)this.ResolvedType;
+                            str = resolvedEnum.File.FileNameAsClassName + "." + resolvedEnum.Name;
+                        }
+                        break;
+
+                    default:
+                        str = "/* Unresolved: [Category: " + this.Category.ToString() + "], [Name: " + this.ToString() + "] */ IntPtr";
+                        //throw new UnableToCreateWrapperException("The type could not be resolved (" + this.ToString() + ").");
+                        break;
+                }
+
+                if (this.IsArray)
+                    str += "[]";
+
+                return str;
+            }
+        }
+
+        private enum APIType { External, Internal };
+
+        private string GetCSharpAPIType(APIType apiType, string functionName, int argumentNumber)
+        {
+            if (this.Category == TypeCategory.PointerToGSList ||
+                this.Category == TypeCategory.PointerToGList ||
+                this.Category == TypeCategory.PointerToGHashTable)
+            {
+                string returnStructureInnerValueType = PurpleTranslations.GetListElementType(functionName, argumentNumber);
+
+                // TODO: ManagedWrappers
+
+                if (returnStructureInnerValueType == null)
+                    throw new UnableToCreateWrapperException("Unknown inner-type of argument " + argumentNumber + " of " + functionName);
+
+                if (this.Category == TypeCategory.PointerToGSList)
+                {
+                    if (apiType == APIType.External)
+                        return "IList<" + returnStructureInnerValueType + ">";
+                    else
+                        return "GSList<" + returnStructureInnerValueType + ">";
+                }
+                else if (this.Category == TypeCategory.PointerToGList)
+                {
+                    if (apiType == APIType.External)
+                        return "IList<" + returnStructureInnerValueType + ">";
+                    else
+                        return "GSList<" + returnStructureInnerValueType + ">";
+                }
+                else
+                {
+                    if (apiType == APIType.External)
+                        return "IDictionary<string, " + returnStructureInnerValueType + ">";
+                    else
+                        return "GHashTable<" + returnStructureInnerValueType + ">";
+                }
+            }
+            else
+            {
+                if (apiType == APIType.External)
+                    return this.CSharpExternalAPIType;
+                else
+                    return this.CSharpInternalAPIType;
+            }
+        }
+
+        public string GetCSharpExternalAPIType(string functionName, int argumentNumber)
+        {
+            return GetCSharpAPIType(APIType.External, functionName, argumentNumber);
+        }
+
+
+        public String CSharpExternalAPIType
+        {
+            get
+            {
+                String str;
+
+                switch (this.Category)
+                {
+                    case TypeCategory.Native:
+                        str = this.NativeType;
+                        break;
+
+                    case TypeCategory.VoidPointer:
+                        str = "IntPtr";
+                        break;
+
+                    case TypeCategory.Void:
+                        str = "void";
+                        break;
+
+                    case TypeCategory.DateTime:
+                        str = "DateTime";
+                        break;
+
+                    case TypeCategory.GObjectObject:
+                        str = "/* libobject */ IntPtr";
+                        break;
+
+                    case TypeCategory.InnerStruct:
+                        throw new UnableToCreateWrapperException("The struct contains an inner-struct or inner-union and cannot be automatically wrapped.");
+                        break;
+
+                    case TypeCategory.KnownStruct:
+                        throw new UnableToCreateWrapperException("The struct contains an object that resolves to a function that is not a function pointer (" + this.ToString() + ").");
+                        break;
+
+                    case TypeCategory.PointerToKnownStruct:
+                        str = this.ResolvedType.SafeName;
+                        break;
+
+                    case TypeCategory.PointerToUnknownStruct:
+                        str = "/* Resolved as PointerToUnknownStruct to " + this.RawType + " */ IntPtr";
+                        break;
+
+                    case TypeCategory.KnownEnum:
+                        {
+                            CEnum resolvedEnum = (CEnum)this.ResolvedType;
+                            str = resolvedEnum.File.FileNameAsClassName + "." + resolvedEnum.SafeName;
+                        }
+                        break;
+
+                    case TypeCategory.KnownFunctionPointer:
+                        {
+                            CFunction resolvedFunctionPointer = (CFunction)this.ResolvedType;
+                            str = resolvedFunctionPointer.File.FileNameAsClassName + "." + resolvedFunctionPointer.SafeName;
+                        }
+                        break;
+
+                    case TypeCategory.PointerToGSList:
+                        throw new UnableToCreateWrapperException("Unable to provide a type for GSList as no function information was provided in code.");
+                        break;
+
+                    case TypeCategory.PointerToGList:
+                        throw new UnableToCreateWrapperException("Unable to provide a type for GList as no function information was provided in code.");
+                        break;
+
+                    case TypeCategory.PointerToGHashTable:
+                        throw new UnableToCreateWrapperException("Unable to provide a type for HashTable as no function information was provided in code.");
+                        break;
+
+                    default:
+                        str = "/* Unresolved: [Category: " + this.Category.ToString() + "], [Name: " + this.ToString() + "] */ IntPtr";
+                        //throw new UnableToCreateWrapperException("The type could not be resolved (" + this.ToString() + ").");
+                        break;
+                }
+
+                if (this.IsArray)
+                    str += "[]";
+
+                return str;
+            }
+        }
+
+        public String NativeType
+        {
+            get
+            {
+                if (this.Type == "char" && this.IsArray)
+                    return "string";
+
+                switch (this.Type)
+                {
+                    case "gboolean":
+                        return "bool";
+
+                    case "gchar":
+                    case "char":
+                    case "int8":
+                        return "char";
+
+                    case "uint8":
+                    case "unsigned char":
+                    case "guchar":
+                        return "byte";
+
+                    case "gchar *":
+                    case "char *":
+                        return "string";
+
+                    case "gint":
+                    case "int":
+                    case "gint32":
+                    case "PurplePluginPriority":   /* by typedef */
+                        return "int";
+
+                    case "guint":
+                    case "unsigned int":
+                    case "guint32":
+                    case "PurpleCmdId":            /* by typedef */
+                        return "uint";
+
+                    case "gshort":
+                    case "short":
+                    case "gint16":
+                        return "short";
+
+                    case "gushort":
+                    case "unsigned short":
+                    case "guint16":
+                        return "ushort";
+
+                    case "glong":
+                    case "long":
+                    case "gint64":
+                    case "gssize":
+                    case "goffset":
+                        return "long";
+
+                    case "gulong":
+                    case "unsigned long":
+                    case "guint64":
+                    case "gsize":
+                        return "ulong";
+
+                    case "gfloat":
+                    case "float":
+                        return "float";
+
+                    case "gdouble":
+                    case "double":
+                        return "double";
+
+                    case "size_t":
+                        if (IntPtr.Size == 4) return "uint";
+                        else return "ulong";
+                }
+
+                return null;
+            }
+        }
+
+        public override string ToString()
+        {
+            return "Type: " + this.Type + ", Name: " + this.Name;
+        }
+    }
+}
============================================================
--- libpurple/wrapper/generator/Logger.cs	c3f7d617f39136996943f3bf616d94fb0da85871
+++ libpurple/wrapper/generator/Logger.cs	c3f7d617f39136996943f3bf616d94fb0da85871
@@ -0,0 +1,39 @@
+using System;
+using System.IO;
+using System.Collections.Generic;
+
+namespace Scripts
+{
+    class Logger
+    {
+        private static StreamWriter writer = new StreamWriter("log.txt");
+        private static Stack<string> prefixList = new Stack<string>();
+
+        public static void Log(String message)
+        {
+            message = message.Replace("\n", "\\n").Replace("\t", "\\t");
+            while (message.Contains("  "))
+                message = message.Replace("  ", " ");
+
+            foreach (String prefix in prefixList)
+                message = prefix + message;
+
+            writer.WriteLine(message);
+        }
+
+        public static void AddPrefix(String prefix)
+        {
+            prefixList.Push(prefix);
+        }
+
+        public static void RemovePrefix()
+        {
+            prefixList.Pop();
+        }
+
+        public static void CloseLog()
+        {
+            writer.Close();
+        }
+    }
+}
============================================================
--- libpurple/wrapper/generator/Program.cs	1caca457292635694d04720b3eac64635a2f4617
+++ libpurple/wrapper/generator/Program.cs	1caca457292635694d04720b3eac64635a2f4617
@@ -0,0 +1,39 @@
+using System;
+
+namespace Scripts
+{
+    class Program
+    {
+        static void Main(string[] args)
+        {
+            WrapperGenerator wrapperGen = new WrapperGenerator();
+
+            Console.WriteLine("Parsing .h files...");
+            wrapperGen.ParseHFilesInDirectory(@"../../../../");
+            //wrapperGen.ParseHFile(@"../../../../plugin.h");
+
+            Console.WriteLine("Writing struct data...");
+            wrapperGen.GenerateStructFiles();
+
+            Console.WriteLine("Writing function data...");
+            wrapperGen.GenerateFunctionWrappers();
+
+            Console.WriteLine("Writing base classes and visual studio project file...");
+            wrapperGen.WriteVisualStudioProjectFile();
+            wrapperGen.WriteBaseClasses();
+
+            /*
+            Console.WriteLine();
+            Console.WriteLine("Finding \"PurpleAccountRegistrationCb\"...");
+            Console.WriteLine(CFile.LookUpName("PurpleAccountRegistrationCb").ToString());
+            */
+
+            Logger.CloseLog();
+
+            Console.WriteLine("Finished!");
+            Console.ReadLine();
+
+
+        }
+    }
+}
============================================================
--- libpurple/wrapper/generator/Properties/AssemblyInfo.cs	c9a9b9fc4f1000a92e7c91463e83d33b5d29e280
+++ libpurple/wrapper/generator/Properties/AssemblyInfo.cs	c9a9b9fc4f1000a92e7c91463e83d33b5d29e280
@@ -0,0 +1,36 @@
+using System.Reflection;
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
+
+// General Information about an assembly is controlled through the following 
+// set of attributes. Change these attribute values to modify the information
+// associated with an assembly.
+[assembly: AssemblyTitle("Scripts")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("Microsoft")]
+[assembly: AssemblyProduct("Scripts")]
+[assembly: AssemblyCopyright("Copyright (C) Microsoft 2009")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+
+// Setting ComVisible to false makes the types in this assembly not visible 
+// to COM components.  If you need to access a type in this assembly from 
+// COM, set the ComVisible attribute to true on that type.
+[assembly: ComVisible(false)]
+
+// The following GUID is for the ID of the typelib if this project is exposed to COM
+[assembly: Guid("7019d3a7-0325-4cf6-83ca-27dd6e0126a9")]
+
+// Version information for an assembly consists of the following four values:
+//
+//      Major Version
+//      Minor Version 
+//      Build Number
+//      Revision
+//
+// You can specify all the values or you can default the Build and Revision Numbers 
+// by using the '*' as shown below:
+// [assembly: AssemblyVersion("1.0.*")]
+[assembly: AssemblyVersion("1.0.0.0")]
+[assembly: AssemblyFileVersion("1.0.0.0")]
============================================================
--- libpurple/wrapper/generator/PurpleTranslations.cs	b179203d85d485108aa8b0c99fb1ad2bc2c30741
+++ libpurple/wrapper/generator/PurpleTranslations.cs	b179203d85d485108aa8b0c99fb1ad2bc2c30741
@@ -0,0 +1,24 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+
+namespace Scripts
+{
+    class PurpleTranslations
+    {
+        public static string GetListElementType(string functionName, int argumentNumber)
+        {
+            if (functionName == "purple_account_set_status_types" && argumentNumber == 2)
+                return "string";
+            else if (functionName == "purple_account_get_status_types" && argumentNumber == 0)
+                return "string";
+            else
+            {
+                Console.WriteLine("Need: " + functionName);
+                return null;
+            }
+
+        }
+    }
+}
============================================================
--- libpurple/wrapper/generator/Scripts.csproj	260515ff31cbf7766720c3755c7b2f5ac5b2e28a
+++ libpurple/wrapper/generator/Scripts.csproj	260515ff31cbf7766720c3755c7b2f5ac5b2e28a
@@ -0,0 +1,70 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="3.5" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <PropertyGroup>
+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+    <ProductVersion>9.0.30729</ProductVersion>
+    <SchemaVersion>2.0</SchemaVersion>
+    <ProjectGuid>{43BF057D-B023-463D-B2E0-FDDA18CDE11A}</ProjectGuid>
+    <OutputType>Exe</OutputType>
+    <AppDesignerFolder>Properties</AppDesignerFolder>
+    <RootNamespace>Scripts</RootNamespace>
+    <AssemblyName>Scripts</AssemblyName>
+    <TargetFrameworkVersion>v3.5</TargetFrameworkVersion>
+    <FileAlignment>512</FileAlignment>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+    <DebugSymbols>true</DebugSymbols>
+    <DebugType>full</DebugType>
+    <Optimize>false</Optimize>
+    <OutputPath>bin\Debug\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+    <DebugType>pdbonly</DebugType>
+    <Optimize>true</Optimize>
+    <OutputPath>bin\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+  </PropertyGroup>
+  <ItemGroup>
+    <Reference Include="System" />
+    <Reference Include="System.Core">
+      <RequiredTargetFramework>3.5</RequiredTargetFramework>
+    </Reference>
+    <Reference Include="System.Xml.Linq">
+      <RequiredTargetFramework>3.5</RequiredTargetFramework>
+    </Reference>
+    <Reference Include="System.Data.DataSetExtensions">
+      <RequiredTargetFramework>3.5</RequiredTargetFramework>
+    </Reference>
+    <Reference Include="System.Data" />
+    <Reference Include="System.Xml" />
+  </ItemGroup>
+  <ItemGroup>
+    <Compile Include="CEnum.cs" />
+    <Compile Include="CFile.cs" />
+    <Compile Include="CFunction.cs" />
+    <Compile Include="CArgument.cs" />
+    <Compile Include="CNamed.cs" />
+    <Compile Include="CStruct.cs" />
+    <Compile Include="CTyped.cs" />
+    <Compile Include="Logger.cs" />
+    <Compile Include="Program.cs" />
+    <Compile Include="Properties\AssemblyInfo.cs" />
+    <Compile Include="PurpleTranslations.cs" />
+    <Compile Include="UnableToCreateWrapperException.cs" />
+    <Compile Include="WrapperGenerator.cs" />
+  </ItemGroup>
+  <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
+  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 
+       Other similar extension points exist, see Microsoft.Common.targets.
+  <Target Name="BeforeBuild">
+  </Target>
+  <Target Name="AfterBuild">
+  </Target>
+  -->
+</Project>
\ No newline at end of file
============================================================
--- libpurple/wrapper/generator/Scripts.sln	cdbbce6f535e4e49785d5f472355a7e6df6ef3a9
+++ libpurple/wrapper/generator/Scripts.sln	cdbbce6f535e4e49785d5f472355a7e6df6ef3a9
@@ -0,0 +1,20 @@
+
+Microsoft Visual Studio Solution File, Format Version 10.00
+# Visual Studio 2008
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Scripts", "Scripts.csproj", "{43BF057D-B023-463D-B2E0-FDDA18CDE11A}"
+EndProject
+Global
+	GlobalSection(SolutionConfigurationPlatforms) = preSolution
+		Debug|Any CPU = Debug|Any CPU
+		Release|Any CPU = Release|Any CPU
+	EndGlobalSection
+	GlobalSection(ProjectConfigurationPlatforms) = postSolution
+		{43BF057D-B023-463D-B2E0-FDDA18CDE11A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{43BF057D-B023-463D-B2E0-FDDA18CDE11A}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{43BF057D-B023-463D-B2E0-FDDA18CDE11A}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{43BF057D-B023-463D-B2E0-FDDA18CDE11A}.Release|Any CPU.Build.0 = Release|Any CPU
+	EndGlobalSection
+	GlobalSection(SolutionProperties) = preSolution
+		HideSolutionNode = FALSE
+	EndGlobalSection
+EndGlobal
============================================================
# libpurple/wrapper/generator/Scripts.suo is binary
============================================================
--- libpurple/wrapper/generator/WrapperGenerator.cs	99351e693a69508e9259eb9a82eda5230ad0a07c
+++ libpurple/wrapper/generator/WrapperGenerator.cs	99351e693a69508e9259eb9a82eda5230ad0a07c
@@ -0,0 +1,774 @@
+using System;
+using System.Collections.Generic;
+using System.IO;
+using System.Text;
+using System.Text.RegularExpressions;
+
+namespace Scripts
+{
+    class WrapperGenerator
+    {
+        private String path = @"../../../";
+
+        public void ParseHFilesInDirectory(String directory)
+        {
+            DirectoryInfo directionryInfo = new DirectoryInfo(directory);
+            FileInfo[] fileInfos = directionryInfo.GetFiles("*.h");
+
+            foreach (FileInfo fileInfo in fileInfos)
+            {
+                if (fileInfo.Name == "internal.h" || fileInfo.Name == "dbus.h" || fileInfo.Name == "dbus-bindings.h" ||
+                    fileInfo.Name == "dbus-maybe.h" || fileInfo.Name == "dbus-define-api.h" || fileInfo.Name == "dbus-purple.h" ||
+                    fileInfo.Name == "dbus-server.h" || fileInfo.Name == "dbus-useful.h" || fileInfo.Name == "gaim-compat.h" ||
+                    fileInfo.Name == "media-gst.h")
+                {
+                    continue;
+                }
+
+                ParseHFile(fileInfo.FullName);
+            }
+        }
+
+
+        public void ParseHFile(String path)
+        {
+            Regex structRegex =         new Regex(@"struct \s+ (?<StructName> \w+ ) \s* " +
+                                                  @"\{ " +
+                                                  @"      (?<StructInternal>.*?) " +
+                                                  @"\} \s* (\w+ \s*)? ;",
+                                                  RegexOptions.Singleline | RegexOptions.IgnorePatternWhitespace);
+
+            Regex structInternalRegex = new Regex(@"(?<VariableType>   " +
+                                                  @"      ( const \s+ unsigned \s+ \w+ \s* [\*]+ \s* )    |" +
+                                                  @"      ( const \s+ unsigned \s+ \w+ \s+           )    |" +
+                                                  @"      ( const \s+              \w+ \s* [\*]+ \s* )    |" +
+                                                  @"      ( const \s+              \w+ \s+           )    |" +
+                                                  @"      (           unsigned \s+ \w+ \s* [\*]+ \s* )    |" +
+                                                  @"      (           unsigned \s+ \w+ \s+           )    |" +
+                                                  @"      (                        \w+ \s* [\*]+ \s* )    |" +
+                                                  @"      (                        \w+ \s+           )     " +
+                                                  @")" +
+                                                  @"(  ( \(+ \* \s* (?<Name> \w+ ) \) \s* \( (?<FunctionPointerArguments> .*?) \)+ )" +
+                                                  @"    |  (?<Name> .*? ) ) ;", RegexOptions.Singleline | RegexOptions.IgnorePatternWhitespace);
+
+            Regex functionRegEx =
+                new Regex(@"(?<ReturnType> " +
+                          @"     ( const unsigned \s+ \w+ \s* [\*]+ \s* )     | " +
+                          @"     ( const unsigned \s+ \w+ \s+           )     | " +
+                          @"     ( const              \w+ \s* [\*]+ \s* )     | " +
+                          @"     ( const              \w+ \s+           )     | " +
+                          @"     (       unsigned \s+ \w+ \s* [\*]+ \s* )     | " +
+                          @"     (       unsigned \s+ \w+ \s+           )     | " +
+                          @"     (                    \w+ \s* [\*]+ \s* )     | " +
+                          @"     (                    \w+ \s+           )       " +
+                          @")" +
+                          @"(?<Name>\w+?) \s* \( (?<ParameterList> [a-zA-Z0-9_,\* ]*) \)", RegexOptions.Singleline | RegexOptions.IgnorePatternWhitespace);
+            
+            Regex functionArgumentsRegEx =
+                new Regex(@"(?<VariableType> " +
+                          @"     ( const unsigned \s+ \w+ \s* [\*]+ \s* )     | " +
+                          @"     ( const unsigned \s+ \w+ \s+           )     | " +
+                          @"     ( const              \w+ \s* [\*]+ \s* )     | " +
+                          @"     ( const              \w+ \s+           )     | " +
+                          @"     (       unsigned \s+ \w+ \s* [\*]+ \s* )     | " +
+                          @"     (       unsigned \s+ \w+ \s+           )     | " +
+                          @"     (                    \w+ \s* [\*]+ \s* )     | " +
+                          @"     (                    \w+ \s+           )       " +
+                          @") " +
+                          @"(?<VariableName> (\w | \[ | \])* )",
+                          RegexOptions.Singleline | RegexOptions.IgnorePatternWhitespace);
+
+            Regex commentRegex = new Regex(@"(?<Comment> /\* .*? \*/)", RegexOptions.Singleline | RegexOptions.IgnorePatternWhitespace);
+
+            Regex enumRegex = new Regex(@"typedef \s+ enum \s* \w* \s* \{ \s* (?<EnumInternalPlusClose> .*? \s* \} ) \s* (?<Name> \w+ ) \s* ;", RegexOptions.Singleline | RegexOptions.IgnorePatternWhitespace);
+            Regex enumInternalRegex = new Regex(@"(?<Name> \w+ ) \s* ( = \s* (?<Value> .+?) )? \s* (, | \})", RegexOptions.Singleline | RegexOptions.IgnorePatternWhitespace);
+
+            Regex functionPointerRegex = new Regex(@"typedef \s* (?<ReturnType> \w* ) \s* \( \* (?<Name> \w* ) \) \s* \( (?<FunctionPointerArguments> .*?) \);", RegexOptions.Singleline | RegexOptions.IgnorePatternWhitespace);
+
+
+            FileInfo fileInfo = new FileInfo(path);
+            StreamReader reader = new StreamReader(fileInfo.FullName);
+            String fullFile = reader.ReadToEnd();
+            reader.Close();
+
+            Logger.Log("Reading " + path + "...");
+            Logger.AddPrefix("  ");
+
+            CFile currentFile = new CFile(fileInfo.Name);
+
+            foreach (Match commentMatch in commentRegex.Matches(fullFile))
+            {
+                fullFile = fullFile.Remove(
+                    fullFile.IndexOf(commentMatch.Groups["Comment"].Value),
+                    commentMatch.Groups["Comment"].Length);
+            }
+
+            Logger.Log("Beginning to read all structs in file:");
+            Logger.AddPrefix("  ");
+            foreach (Match match in structRegex.Matches(fullFile))
+            {
+                Logger.Log("Reading struct [" + match.Groups[0].Value + "]...");
+                Logger.AddPrefix("  ");
+                CStruct structObject = new CStruct(currentFile, match.Groups["StructName"].Value);
+
+                String internalStructData = match.Groups["StructInternal"].Value;
+
+                if (internalStructData != null)
+                {
+                    int argumentNumber = 0;
+
+                    foreach (Match internalStructMatch in structInternalRegex.Matches(internalStructData))
+                    {
+                        Logger.Log("Reading struct element: [" + internalStructMatch.Groups[0].Value + "]...");
+                        string elementType = internalStructMatch.Groups["VariableType"].Value.Trim();
+                        string name = internalStructMatch.Groups["Name"].Value;
+
+                        CArgument argument = new CArgument(currentFile, elementType, name, argumentNumber);
+                        argumentNumber++;
+
+                        string functionPointerArguments = internalStructMatch.Groups["FunctionPointerArguments"].Value;
+                        if (functionPointerArguments != "")
+                        {
+                            argument.IsFunctionPointer = true;
+                            int innerArgumentNumber = 0;
+
+                            String[] functionPointerArgumentsList = functionPointerArguments.Split(',');
+                            foreach (String functionPointerArgument in functionPointerArgumentsList)
+                            {
+                                String currentArgument = functionPointerArgument.Replace("const ", "").Trim();
+
+                                CArgument functionPointerArgumentObject = new CArgument(currentFile);
+                                if (currentArgument == "void")
+                                    continue;
+                                else
+                                {
+                                    Match parameterMatch = functionArgumentsRegEx.Match(currentArgument);
+                                    functionPointerArgumentObject.Type = parameterMatch.Groups["VariableType"].Value.Trim();
+                                    functionPointerArgumentObject.Name = parameterMatch.Groups["VariableName"].Value;
+                                    functionPointerArgumentObject.ArgumentNumber = innerArgumentNumber;
+                                    innerArgumentNumber++;
+                                }
+
+                                argument.AddFunctionPointerArgument(functionPointerArgumentObject);
+                            }
+                        }
+
+                        structObject.AddField(argument);
+                    }
+
+                    Logger.RemovePrefix();
+                }
+
+                //Console.WriteLine(structObject.ToString()); Console.WriteLine();
+                currentFile.addStruct(structObject);
+            }
+            Logger.RemovePrefix();
+
+            Logger.Log("Beginning to read all functions in file:");
+            Logger.AddPrefix("  ");
+            foreach (Match match in functionRegEx.Matches(fullFile))
+            {
+                Logger.Log("Reading function [" + match.Groups[0].Value + "]...");
+                Logger.AddPrefix("  ");
+
+                String functionReturnType = match.Groups["ReturnType"].Value.Trim();
+                String functionName = match.Groups["Name"].Value;
+                String parameterList = match.Groups["ParameterList"].Value;
+
+
+                /* There's a few messy #define's for PURPLE_INIT_PLUGIN that yields some false
+                 * matches... so we throw them out. */
+                if (currentFile.FileName == "plugin.h")
+                {
+                    if (functionName == "_FUNC_NAME" || functionName == "purple_init_plugin")
+                    {
+                        Logger.RemovePrefix();
+                        continue;
+                    }
+
+                    if (functionReturnType == "return")
+                    {
+                        Logger.RemovePrefix();
+                        continue;
+                    }
+                }
+                else if (currentFile.FileName == "prpl.h")
+                {
+                    if (functionReturnType == "unsigned" && functionName == "int")
+                    {
+                        Logger.RemovePrefix();
+                        continue;
+                    }
+                }
+
+                if (functionReturnType == "typedef" || functionReturnType == "define")
+                {
+                    Logger.Log("Function ignored as it's a typedef'd type (possibly a function pointer?)");
+                    Logger.RemovePrefix();
+                    continue;
+                }
+
+
+                CFunction function = new CFunction(currentFile, functionReturnType, functionName);
+                int argumentNumber = 0;
+
+                String[] functionParameters = parameterList.Split(',');
+                foreach (String functionParameterInList in functionParameters)
+                {
+                    String functionParameter = functionParameterInList.Replace("const ", "").Trim();
+
+                    CArgument argument = new CArgument(currentFile);
+                    if (functionParameter == "...")
+                    {
+                        argument.IsEllipsis = true;
+                    }
+                    else if (functionParameter == "void")
+                        continue;
+                    else
+                    {
+                        Match parameterMatch = functionArgumentsRegEx.Match(functionParameter);
+                        argument.Type = parameterMatch.Groups["VariableType"].Value.Trim();
+                        argument.Name = parameterMatch.Groups["VariableName"].Value;
+                        argument.ArgumentNumber = argumentNumber;
+                        argumentNumber++;
+                    }
+
+                    function.AddArgument(argument);
+                }
+
+                currentFile.addFunction(function);
+                //Console.WriteLine(function.ToString());
+                //Console.WriteLine(function.GetCSharpPrivateFunction());
+                //Console.WriteLine(function.GetCSharpPublicFunction());
+                //Console.WriteLine();
+                Logger.RemovePrefix();
+            }
+            Logger.RemovePrefix();
+
+            Logger.Log("Beginning to read all enums in file:");
+            Logger.AddPrefix("  ");
+            foreach (Match match in enumRegex.Matches(fullFile))
+            {
+                Logger.Log("Reading enum [" + match.Groups[0].Value + "]...");
+                Logger.AddPrefix("  ");
+                CEnum enumeration = new CEnum(currentFile, match.Groups["Name"].Value);
+
+                foreach (Match enumElementMatch in enumInternalRegex.Matches(match.Groups["EnumInternalPlusClose"].Value))
+                {
+                    Logger.Log("Reading enum element [" + enumElementMatch.Groups[0].Value + "]...");
+                    enumeration.AddElement(enumElementMatch.Groups["Name"].Value, enumElementMatch.Groups["Value"].Value);
+                }
+
+                currentFile.AddEnum(enumeration);
+                //Console.WriteLine(enumeration.ToString());
+                Logger.RemovePrefix();
+            }
+            Logger.RemovePrefix();
+
+            Logger.Log("Beginning to read all function pointers in file:");
+            Logger.AddPrefix("  ");
+            foreach (Match match in functionPointerRegex.Matches(fullFile))
+            {
+                Logger.Log("Reading function pointer [" + match.Groups[0].Value + "]...");
+                Logger.AddPrefix("  ");
+                CFunction function = new CFunction(currentFile, match.Groups["ReturnType"].Value, match.Groups["Name"].Value);
+                function.IsFunctionPointer = true;
+
+                string functionPointerArguments = match.Groups["FunctionPointerArguments"].Value;
+                if (functionPointerArguments != "")
+                {
+                    int argumentNumber = 0;
+
+                    String[] functionPointerArgumentsList = functionPointerArguments.Split(',');
+                    foreach (String functionPointerArgument in functionPointerArgumentsList)
+                    {
+                        String currentArgument = functionPointerArgument.Replace("const ", "").Trim();
+
+                        CArgument functionPointerArgumentObject = new CArgument(currentFile);
+                        if (currentArgument == "void")
+                            continue;
+                        else
+                        {
+                            Match parameterMatch = functionArgumentsRegEx.Match(currentArgument);
+                            functionPointerArgumentObject.Type = parameterMatch.Groups["VariableType"].Value.Trim();
+                            functionPointerArgumentObject.Name = parameterMatch.Groups["VariableName"].Value;
+                            functionPointerArgumentObject.ArgumentNumber = argumentNumber;
+
+                            argumentNumber++;
+                        }
+
+                        function.AddArgument(functionPointerArgumentObject);
+                    }
+                }
+
+                currentFile.addFunctionPointer(function);
+                //Console.WriteLine(function.ToString());
+                Logger.RemovePrefix();
+            }
+            Logger.RemovePrefix();
+
+            CFile.FileCollection.Add(currentFile);
+            Logger.RemovePrefix();
+        }
+
+        public void WriteBaseClasses()
+        {
+            StreamWriter writer = new StreamWriter(path + "UnmanagedWrapper.cs");
+            
+            writer.WriteLine("using System;");
+            writer.WriteLine();
+            writer.WriteLine("namespace PurpleWrapper");
+            writer.WriteLine("{");
+            writer.WriteLine("    public abstract class UnmanagedWrapper<T>");
+            writer.WriteLine("    {");
+            writer.WriteLine("        private T data;");
+            writer.WriteLine("        private IntPtr reference;");
+            writer.WriteLine();
+            writer.WriteLine("        public Type GetUnmanagedType() { return typeof(T); }");
+            writer.WriteLine();
+            writer.WriteLine("        public IntPtr Reference");
+            writer.WriteLine("        {");
+            writer.WriteLine("            get { return reference; }");
+            writer.WriteLine("            set { reference = value; }");
+            writer.WriteLine("        }");
+            writer.WriteLine();
+            writer.WriteLine("        public T Data");
+            writer.WriteLine("        {");
+            writer.WriteLine("            get { return data; }");
+            writer.WriteLine("            set { data = value; }");
+            writer.WriteLine("        }");
+            writer.WriteLine("    }");
+            writer.WriteLine("}");
+            writer.WriteLine();
+
+            writer.Close();
+        }
+
+        public void WriteVisualStudioProjectFile()
+        {
+            StreamWriter writer = new StreamWriter(path + "PurpleWrapper.csproj");
+
+            writer.WriteLine("<?xml version=\"1.0\" encoding=\"utf-8\"?>");
+            writer.WriteLine("<Project ToolsVersion=\"3.5\" DefaultTargets=\"Build\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">");
+            writer.WriteLine("  <PropertyGroup>");
+            writer.WriteLine("    <Configuration Condition=\" '$(Configuration)' == '' \">Debug</Configuration>");
+            writer.WriteLine("    <Platform Condition=\" '$(Platform)' == '' \">AnyCPU</Platform>");
+            writer.WriteLine("    <ProductVersion>9.0.30729</ProductVersion>");
+            writer.WriteLine("    <SchemaVersion>2.0</SchemaVersion>");
+            writer.WriteLine("    <ProjectGuid>{8034DEA9-30CC-DEA0-3903-80210CE809FA}</ProjectGuid>");
+            writer.WriteLine("    <OutputType>Library</OutputType>");
+            writer.WriteLine("    <AppDesignerFolder>Properties</AppDesignerFolder>");
+            writer.WriteLine("    <RootNamespace>Scripts</RootNamespace>");
+            writer.WriteLine("    <AssemblyName>Scripts</AssemblyName>");
+            writer.WriteLine("    <TargetFrameworkVersion>v3.5</TargetFrameworkVersion>");
+            writer.WriteLine("    <FileAlignment>512</FileAlignment>");
+            writer.WriteLine("  </PropertyGroup>");
+            writer.WriteLine("  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' \">");
+            writer.WriteLine("    <DebugSymbols>true</DebugSymbols>");
+            writer.WriteLine("    <DebugType>full</DebugType>");
+            writer.WriteLine("    <Optimize>false</Optimize>");
+            writer.WriteLine("    <OutputPath>bin\\Debug\\</OutputPath>");
+            writer.WriteLine("    <DefineConstants>DEBUG;TRACE</DefineConstants>");
+            writer.WriteLine("    <ErrorReport>prompt</ErrorReport>");
+            writer.WriteLine("    <WarningLevel>4</WarningLevel>");
+            writer.WriteLine("  </PropertyGroup>");
+            writer.WriteLine("  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' \">");
+            writer.WriteLine("    <DebugType>pdbonly</DebugType>");
+            writer.WriteLine("    <Optimize>true</Optimize>");
+            writer.WriteLine("    <OutputPath>bin\\Release\\</OutputPath>");
+            writer.WriteLine("    <DefineConstants>TRACE</DefineConstants>");
+            writer.WriteLine("    <ErrorReport>prompt</ErrorReport>");
+            writer.WriteLine("    <WarningLevel>4</WarningLevel>");
+            writer.WriteLine("  </PropertyGroup>");
+            writer.WriteLine("  <ItemGroup>");
+            writer.WriteLine("    <Reference Include=\"System\" />");
+            writer.WriteLine("    <Reference Include=\"System.Core\">");
+            writer.WriteLine("      <RequiredTargetFramework>3.5</RequiredTargetFramework>");
+            writer.WriteLine("    </Reference>");
+            writer.WriteLine("  </ItemGroup>");
+            writer.WriteLine("  <ItemGroup>");
+
+            writer.WriteLine("    <Compile Include=\"UnmanagedWrapper.cs\" />");
+            foreach (CFile file in CFile.FileCollection)
+            {
+                writer.WriteLine("    <Compile Include=\"" + file.FileNameAsClassName + ".cs\" />");
+
+                foreach (CStruct structure in file.Structs)
+                {
+                    writer.WriteLine("    <Compile Include=\"" + structure.Name + ".cs\" />");
+                }
+            }
+
+
+            writer.WriteLine("  </ItemGroup>");
+            writer.WriteLine("  <Import Project=\"$(MSBuildToolsPath)\\Microsoft.CSharp.targets\" />");
+            writer.WriteLine("</Project>");
+
+            writer.Close();
+        }
+
+
+        private String GetCommentHeader()
+        {
+            StringBuilder sb = new StringBuilder();
+
+            sb.AppendLine("/* PurpleWrapper - A .NET (CLR) wrapper for libpurple");
+            sb.AppendLine(" *");
+            sb.AppendLine(" * Purple is the legal property of its developers, whose names are too numerous");
+            sb.AppendLine(" * to list here.  Please refer to the COPYRIGHT file distributed with this");
+            sb.AppendLine(" * source distribution.");
+            sb.AppendLine(" *");
+            sb.AppendLine(" * This program is free software; you can redistribute it and/or modify");
+            sb.AppendLine(" * it under the terms of the GNU General Public License as published by");
+            sb.AppendLine(" * the Free Software Foundation; either version 2 of the License, or");
+            sb.AppendLine(" * (at your option) any later version.");
+            sb.AppendLine(" *");
+            sb.AppendLine(" * This program is distributed in the hope that it will be useful,");
+            sb.AppendLine(" * but WITHOUT ANY WARRANTY; without even the implied warranty of");
+            sb.AppendLine(" * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the");
+            sb.AppendLine(" * GNU General Public License for more details.");
+            sb.AppendLine(" *");
+            sb.AppendLine(" * You should have received a copy of the GNU General Public License");
+            sb.AppendLine(" * along with this program; if not, write to the Free Software");
+            sb.AppendLine(" * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02111-1301  USA");
+            sb.AppendLine(" */");
+            sb.AppendLine();
+            sb.AppendLine("/*");
+            sb.AppendLine(" * This file was auto-generated from the libpurple header files to provide a");
+            sb.AppendLine(" * clean interface between .NET/CLR and the unmanaged C library libpurple.");
+            sb.AppendLine(" *");
+            sb.AppendLine(" * This is the second major commit of the code.");
+            sb.AppendLine(" * Next things:");
+            sb.AppendLine(" *  - A few of the .h files have anonymous parameter names (eg: void cat(int, int).");
+            sb.AppendLine(" *    This program will need to assign these parameters names.");
+            sb.AppendLine(" *  - Function pointers inside structs aren't translated correctly into C#.");
+            sb.AppendLine(" *  - Two places there are specific-length arrays (eg: char hostname[256]). The parser");
+            sb.AppendLine(" *    does not detect them as an array.");
+            sb.AppendLine(" */");
+
+            return sb.ToString();
+        }
+
+        public void GenerateStructFiles()
+        {
+            StreamWriter writer;
+            foreach (CFile file in CFile.FileCollection)
+            {
+                foreach (CStruct structure in file.Structs)
+                {
+                    StringBuilder structureStringBuilder = new StringBuilder();
+
+                    structureStringBuilder.AppendLine(GetCommentHeader());
+
+                    structureStringBuilder.AppendLine("using System;");
+                    structureStringBuilder.AppendLine("using System.Collections.Generic;");
+                    structureStringBuilder.AppendLine("using System.Runtime.InteropServices;");
+                    structureStringBuilder.AppendLine();
+                    structureStringBuilder.AppendLine("namespace PurpleWrapper");
+                    structureStringBuilder.AppendLine("{");
+                    structureStringBuilder.AppendLine();
+                    structureStringBuilder.AppendLine("\t/*");
+                    structureStringBuilder.AppendLine("\t * File: " + file.FileName);
+                    structureStringBuilder.AppendLine("\t * Structure: " + structure.Name);
+                    structureStringBuilder.AppendLine("\t */");
+                    structureStringBuilder.AppendLine("\tpublic class " + structure.Name + " : UnmanagedWrapper<_" + structure.Name + ">");
+                    structureStringBuilder.AppendLine("\t{");
+
+
+                    StringBuilder sb = new StringBuilder();
+
+                    sb.AppendLine("\t\tpublic " + structure.Name + "()");
+                    sb.AppendLine("\t\t{");
+                    sb.AppendLine("\t\t}");
+                    sb.AppendLine();
+
+                    sb.AppendLine("\t\tpublic " + structure.Name + "(IntPtr reference)");
+                    sb.AppendLine("\t\t{");
+                    sb.AppendLine("\t\t\tthis.Reference = reference;");
+                    sb.AppendLine("\t\t\tthis.Data = (_" + structure.Name + ")Marshal.PtrToStructure(this.Reference, typeof(_" + structure.Name + "));");
+                    sb.AppendLine("\t\t}");
+                    sb.AppendLine();
+
+                    foreach (CArgument argument in structure.Fields)
+                    {
+                        sb.AppendLine("\t\t/*");
+                        sb.AppendLine("\t\t * Argument Name: " + argument.Name);
+                        sb.AppendLine("\t\t * Argument Type: " + argument.Type);
+                        sb.AppendLine("\t\t * Argument Category: " + argument.Category.ToString());
+                        sb.AppendLine("\t\t */");
+
+                        try
+                        {
+                            sb.AppendLine("\t\tpublic " + argument.GetCSharpPublicFunction());
+                            sb.AppendLine("\t\t{");
+
+
+                            /* get */
+                            sb.AppendLine("\t\t\tget");
+                            sb.AppendLine("\t\t\t{");
+                            if (argument.IsTypeNative)
+                                sb.AppendLine("\t\t\t\treturn this.Data." + argument.SafeName + ";");
+                            else
+                                sb.AppendLine("\t\t\t\tthrow new NotImplementedException(); /* Non-native type. */");
+                            sb.AppendLine("\t\t\t}");
+
+
+                            /* set */
+                            sb.AppendLine("\t\t\tset");
+                            sb.AppendLine("\t\t\t{");
+                            sb.AppendLine("\t\t\t\tif (this.Reference != IntPtr.Zero)");
+                            sb.AppendLine("\t\t\t\t\tthis.Reference = IntPtr.Zero;");
+                            sb.AppendLine();
+
+                            if (argument.IsTypeNative)
+                                sb.AppendLine("\t\t\t\tthis.Data." + argument.SafeName + " = value;");
+                            else
+                                sb.AppendLine("\t\t\t\tthrow new NotImplementedException(); /* Non-native type. */");
+
+                            sb.AppendLine("\t\t\t}");
+                            sb.AppendLine("\t\t}");
+                            sb.AppendLine();
+                        }
+                        catch (UnableToCreateWrapperException e)
+                        {
+                            sb.AppendLine("\t\t/*");
+                            sb.AppendLine("\t\t * Could not generate a wrapper for " + structure.Name + "." + argument.Name + " in file \"" + structure.File.FileName + "\".");
+                            sb.AppendLine("\t\t * Message: " + e.Message);
+                            sb.AppendLine("\t\t */");
+                            sb.AppendLine();
+                        }
+                    }
+
+                    sb.AppendLine("\t}");
+                    sb.AppendLine();
+                    sb.AppendLine();
+
+
+                    sb.AppendLine("\t[StructLayout(LayoutKind.Sequential)]");
+                    sb.AppendLine("\tpublic class _" + structure.Name);
+                    sb.AppendLine("\t{");
+
+                    foreach (CArgument argument in structure.Fields)
+                    {
+                        try
+                        {
+                            sb.AppendLine("\t\t/*");
+                            sb.AppendLine("\t\t * " + argument.ToString());
+                            sb.AppendLine("\t\t */");
+
+                            if (argument.IsFunctionPointer)
+                                sb.AppendLine("\t\tpublic IntPtr " + argument.SafeName + ";");
+                            else
+                                sb.AppendLine("\t\tpublic " + argument.CSharpInternalAPIType + " " + argument.SafeName + ";");
+
+                            sb.AppendLine();
+                        }
+                        catch (UnableToCreateWrapperException e)
+                        {
+                            sb.AppendLine("\t\t/*");
+                            sb.AppendLine("\t\t * Could not generate a wrapper for " + structure.Name + "." + argument.Name + " in file \"" + structure.File.FileName + "\".");
+                            sb.AppendLine("\t\t * Message: " + e.Message);
+                            sb.AppendLine("\t\t */");
+                            sb.AppendLine();
+                        }
+                    }
+
+                    sb.AppendLine("\t}");
+
+                    structureStringBuilder.AppendLine(sb.ToString());
+                    structureStringBuilder.AppendLine("}");
+
+
+                    writer = new StreamWriter(path + structure.Name + ".cs");
+                    writer.WriteLine(structureStringBuilder.ToString());
+                    writer.Close();
+
+                }
+            }
+        }
+
+        public void GenerateFunctionWrappers()
+        {
+            foreach (CFile file in CFile.FileCollection)
+            {
+                StreamWriter writer = new StreamWriter(path + file.FileNameAsClassName + ".cs");
+                writer.WriteLine(GetCommentHeader());
+
+                writer.WriteLine("using System;");
+                writer.WriteLine("using System.Collections.Generic;");
+                writer.WriteLine("using System.Runtime.InteropServices;");
+                writer.WriteLine();
+                writer.WriteLine("namespace PurpleWrapper");
+                writer.WriteLine("{");
+
+                writer.WriteLine();
+                writer.WriteLine("\t/*");
+                writer.WriteLine("\t * File: " + file.FileName);
+                writer.WriteLine("\t */");
+                writer.WriteLine("\tpublic class " + file.FileNameAsClassName);
+                writer.WriteLine("\t{");
+
+                foreach (CEnum enumeration in file.Enums)
+                {
+                    enumeration.WriteForCSharp(writer, "\t\t");
+                }
+
+
+                /* Write function pointer delegates */
+                foreach (CFunction function in file.FunctionPointers)
+                {
+                    String delegateString = "\t\t";
+
+                    delegateString += "public delegate " + function.CSharpExternalAPIType + " " + function.SafeName + "(";
+
+                    if (function.Arguments.Count > 0)
+                    {
+                        foreach (CArgument functionArgument in function.Arguments)
+                        {
+                            // TODO: Split delegate into public/private pair?
+                            delegateString += functionArgument.GetCSharpPrivateFunction() + ", ";
+                        }
+
+                        delegateString = delegateString.Substring(0, delegateString.Length - 2);
+                    }
+                    delegateString += ");";
+
+                    writer.WriteLine(delegateString);
+                }
+                writer.WriteLine();
+
+                foreach (CFunction function in file.Functions)
+                {
+                    writer.WriteLine("\t\t/*");
+                    writer.WriteLine("\t\t * Function Name: " + function.Name);
+                    writer.WriteLine("\t\t * Function Type: " + function.Type);
+                    writer.WriteLine("\t\t * Function RawType: " + function.RawType);
+                    writer.WriteLine("\t\t * Function Category: " + function.Category);
+                    writer.WriteLine("\t\t */");
+
+                    try
+                    {
+                        StringBuilder sb = new StringBuilder();
+
+                        sb.AppendLine("\t\t/*");
+                        sb.AppendLine("\t\t * " + function.ToString());
+                        sb.AppendLine("\t\t */");
+                        sb.AppendLine("\t\t[DllImport(\"libpurple.dll\")]");
+                        sb.AppendLine("\t\tprivate static extern " + function.GetCSharpPrivateFunction() + ";");
+                        sb.AppendLine();
+                        sb.AppendLine("\t\tpublic static " + function.GetCSharpPublicFunction());
+                        sb.AppendLine("\t\t{");
+
+
+                        String[] functionArgs = new String[function.Arguments.Count];
+                        bool allArgsCanBeUsed = true;
+
+                        for (int i = 0; i < function.Arguments.Count; i++)
+                        {
+                            CArgument arg = function.Arguments[i];
+
+                            switch (arg.Category)
+                            {
+                                case CTyped.TypeCategory.PointerToKnownStruct:
+                                    functionArgs[i] = arg.GetArgumentSafeName() + ".Reference";
+                                    break;
+
+                                case CTyped.TypeCategory.Native:
+                                case CTyped.TypeCategory.VoidPointer:
+                                    functionArgs[i] = arg.GetArgumentSafeName();
+                                    break;
+
+                                case CTyped.TypeCategory.DateTime:
+                                    sb.AppendLine("\t\t\tulong _PurpleWrapper_param" + i + " = (ulong)(" + arg.GetArgumentSafeName() + " - new DateTime(1970, 1, 1)).TotalSeconds;");
+                                    functionArgs[i] = "_PurpleWrapper_param" + i;
+                                    break;
+
+                                default:
+                                    sb.AppendLine("\t\t\t/* Unable to process " + arg.Name + ", a " + arg.Category.ToString() + ". */");
+                                    allArgsCanBeUsed = false;
+                                    break;
+                            }
+                        }
+
+
+
+                        if (allArgsCanBeUsed)
+                        {
+                            String functionCall = "";
+                            functionCall = function.Name + "(";
+                            for (int i = 0; i < functionArgs.Length; i++)
+                            {
+                                functionCall += functionArgs[i];
+
+                                if (i != functionArgs.Length - 1)
+                                    functionCall += ", ";
+                            }
+                            functionCall += ")";
+
+
+                            String returnStatement = "";
+                            switch (function.Category)
+                            {
+                                case CTyped.TypeCategory.Void:
+                                    /* No return should be done. */
+                                    returnStatement = functionCall + ";";
+                                    break;
+
+                                case CTyped.TypeCategory.Native:
+                                case CTyped.TypeCategory.VoidPointer:
+                                    /* Simply return the value returned -- it's all native. */
+                                    returnStatement = "return " + functionCall + ";";
+                                    break;
+
+                                case CTyped.TypeCategory.PointerToKnownStruct:
+                                    returnStatement = "return new " + function.RawType + "(" + functionCall + ");";
+                                    break;
+
+                                default:
+                                    sb.AppendLine("\t\t\t/* Unable to process the return value of " + function.SafeName + ", a " + function.Category.ToString() + ". */");
+                                    allArgsCanBeUsed = false;
+                                    break;
+
+                            }
+
+
+                            if (allArgsCanBeUsed)
+                                sb.AppendLine("\t\t\t" + returnStatement);
+                            else
+                                sb.AppendLine("\t\t\tthrow new NotImplementedException();");
+                        }
+                        else
+                        {
+                            sb.AppendLine("\t\t\tthrow new NotImplementedException();");
+                        }
+
+                        sb.AppendLine("\t\t}");
+
+                        writer.WriteLine(sb.ToString());
+                    }
+                    catch (UnableToCreateWrapperException e)
+                    {
+                        Console.WriteLine("Could not generate a wrapper for " + function.Name + " in file \"" + function.File.FileName + "\".");
+                        Console.WriteLine("Message: " + e.Message);
+
+                        StringBuilder sb = new StringBuilder();
+                        sb.AppendLine("\t\t/*");
+                        sb.AppendLine("\t\t * " + function.ToString());
+                        sb.AppendLine("\t\t * ");
+                        sb.AppendLine("\t\t * " + "Could not generate a wrapper for " + function.Name + " in file \"" + function.File.FileName + "\".");
+                        sb.AppendLine("\t\t * " + "Message: " + e.Message);
+                        sb.AppendLine("\t\t */");
+
+                        writer.WriteLine(sb.ToString());
+                    }
+                }
+
+                writer.WriteLine("\t}");
+                writer.WriteLine("}");
+                writer.WriteLine();
+
+                writer.Close();
+            }
+        }
+    }
+}
============================================================
--- libpurple/wrapper/proto_chat_entry.cs	a711491136b70eb1efe9c0421a533a546c2465f5
+++ libpurple/wrapper/proto_chat_entry.cs	a711491136b70eb1efe9c0421a533a546c2465f5
@@ -0,0 +1,242 @@
+/* PurpleWrapper - A .NET (CLR) wrapper for libpurple
+ *
+ * Purple is the legal property of its developers, whose names are too numerous
+ * to list here.  Please refer to the COPYRIGHT file distributed with this
+ * source distribution.
+ *
+ * This program 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.
+ *
+ * This program 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 this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02111-1301  USA
+ */
+
+/*
+ * This file was auto-generated from the libpurple header files to provide a
+ * clean interface between .NET/CLR and the unmanaged C library libpurple.
+ *
+ * This is the second major commit of the code.
+ * Next things:
+ *  - A few of the .h files have anonymous parameter names (eg: void cat(int, int).
+ *    This program will need to assign these parameters names.
+ *  - Function pointers inside structs aren't translated correctly into C#.
+ *  - Two places there are specific-length arrays (eg: char hostname[256]). The parser
+ *    does not detect them as an array.
+ */
+
+using System;
+using System.Collections.Generic;
+using System.Runtime.InteropServices;
+
+namespace PurpleWrapper
+{
+
+	/*
+	 * File: prpl.h
+	 * Structure: proto_chat_entry
+	 */
+	public class proto_chat_entry : UnmanagedWrapper<_proto_chat_entry>
+	{
+		public proto_chat_entry()
+		{
+		}
+
+		public proto_chat_entry(IntPtr reference)
+		{
+			this.Reference = reference;
+			this.Data = (_proto_chat_entry)Marshal.PtrToStructure(this.Reference, typeof(_proto_chat_entry));
+		}
+
+		/*
+		 * Argument Name: label
+		 * Argument Type: const char *
+		 * Argument Category: PointerToUnknownStruct
+		 */
+		public /* Resolved as PointerToUnknownStruct to char */ IntPtr label
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: identifier
+		 * Argument Type: const char *
+		 * Argument Category: PointerToUnknownStruct
+		 */
+		public /* Resolved as PointerToUnknownStruct to char */ IntPtr identifier
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: required
+		 * Argument Type: gboolean
+		 * Argument Category: Native
+		 */
+		public bool required
+		{
+			get
+			{
+				return this.Data.required;
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				this.Data.required = value;
+			}
+		}
+
+		/*
+		 * Argument Name: is_int
+		 * Argument Type: gboolean
+		 * Argument Category: Native
+		 */
+		public bool is_int
+		{
+			get
+			{
+				return this.Data.is_int;
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				this.Data.is_int = value;
+			}
+		}
+
+		/*
+		 * Argument Name: min
+		 * Argument Type: int
+		 * Argument Category: Native
+		 */
+		public int min
+		{
+			get
+			{
+				return this.Data.min;
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				this.Data.min = value;
+			}
+		}
+
+		/*
+		 * Argument Name: max
+		 * Argument Type: int
+		 * Argument Category: Native
+		 */
+		public int max
+		{
+			get
+			{
+				return this.Data.max;
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				this.Data.max = value;
+			}
+		}
+
+		/*
+		 * Argument Name: secret
+		 * Argument Type: gboolean
+		 * Argument Category: Native
+		 */
+		public bool secret
+		{
+			get
+			{
+				return this.Data.secret;
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				this.Data.secret = value;
+			}
+		}
+
+	}
+
+
+	[StructLayout(LayoutKind.Sequential)]
+	public class _proto_chat_entry
+	{
+		/*
+		 * const char * label
+		 */
+		public IntPtr label;
+
+		/*
+		 * const char * identifier
+		 */
+		public IntPtr identifier;
+
+		/*
+		 * gboolean required
+		 */
+		public bool required;
+
+		/*
+		 * gboolean is_int
+		 */
+		public bool is_int;
+
+		/*
+		 * int min
+		 */
+		public int min;
+
+		/*
+		 * int max
+		 */
+		public int max;
+
+		/*
+		 * gboolean secret
+		 */
+		public bool secret;
+
+	}
+
+}
+
============================================================
--- libpurple/wrapper/xmlnode.cs	46546bd3c82748fbf812cb8190ed860984b321a8
+++ libpurple/wrapper/xmlnode.cs	46546bd3c82748fbf812cb8190ed860984b321a8
@@ -0,0 +1,304 @@
+/* PurpleWrapper - A .NET (CLR) wrapper for libpurple
+ *
+ * Purple is the legal property of its developers, whose names are too numerous
+ * to list here.  Please refer to the COPYRIGHT file distributed with this
+ * source distribution.
+ *
+ * This program 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.
+ *
+ * This program 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 this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02111-1301  USA
+ */
+
+/*
+ * This file was auto-generated from the libpurple header files to provide a
+ * clean interface between .NET/CLR and the unmanaged C library libpurple.
+ *
+ * This is the second major commit of the code.
+ * Next things:
+ *  - A few of the .h files have anonymous parameter names (eg: void cat(int, int).
+ *    This program will need to assign these parameters names.
+ *  - Function pointers inside structs aren't translated correctly into C#.
+ *  - Two places there are specific-length arrays (eg: char hostname[256]). The parser
+ *    does not detect them as an array.
+ */
+
+using System;
+using System.Collections.Generic;
+using System.Runtime.InteropServices;
+
+namespace PurpleWrapper
+{
+
+	/*
+	 * File: xmlnode.h
+	 * Structure: xmlnode
+	 */
+	public class xmlnode : UnmanagedWrapper<_xmlnode>
+	{
+		public xmlnode()
+		{
+		}
+
+		public xmlnode(IntPtr reference)
+		{
+			this.Reference = reference;
+			this.Data = (_xmlnode)Marshal.PtrToStructure(this.Reference, typeof(_xmlnode));
+		}
+
+		/*
+		 * Argument Name: name
+		 * Argument Type: char *
+		 * Argument Category: Native
+		 */
+		public string name
+		{
+			get
+			{
+				return this.Data.name;
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				this.Data.name = value;
+			}
+		}
+
+		/*
+		 * Argument Name: xmlns
+		 * Argument Type: char *
+		 * Argument Category: Native
+		 */
+		public string xmlns
+		{
+			get
+			{
+				return this.Data.xmlns;
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				this.Data.xmlns = value;
+			}
+		}
+
+		/*
+		 * Argument Name: type
+		 * Argument Type: XMLNodeType
+		 * Argument Category: KnownEnum
+		 */
+		public XMLNodeClass.XMLNodeType type
+		{
+			get
+			{
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				throw new NotImplementedException(); /* Non-native type. */
+			}
+		}
+
+		/*
+		 * Argument Name: data
+		 * Argument Type: char *
+		 * Argument Category: Native
+		 */
+		public string data
+		{
+			get
+			{
+				return this.Data.data;
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				this.Data.data = value;
+			}
+		}
+
+		/*
+		 * Argument Name: data_sz
+		 * Argument Type: size_t
+		 * Argument Category: Native
+		 */
+		public ulong data_sz
+		{
+			get
+			{
+				return this.Data.data_sz;
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				this.Data.data_sz = value;
+			}
+		}
+
+		/*
+		 * Argument Name: xmlnode *parent
+		 * Argument Type: struct
+		 * Argument Category: InnerStruct
+		 */
+		/*
+		 * Could not generate a wrapper for xmlnode.xmlnode *parent in file "xmlnode.h".
+		 * Message: The struct contains an inner-struct or inner-union and cannot be automatically wrapped.
+		 */
+
+		/*
+		 * Argument Name: xmlnode *child
+		 * Argument Type: struct
+		 * Argument Category: InnerStruct
+		 */
+		/*
+		 * Could not generate a wrapper for xmlnode.xmlnode *child in file "xmlnode.h".
+		 * Message: The struct contains an inner-struct or inner-union and cannot be automatically wrapped.
+		 */
+
+		/*
+		 * Argument Name: xmlnode *lastchild
+		 * Argument Type: struct
+		 * Argument Category: InnerStruct
+		 */
+		/*
+		 * Could not generate a wrapper for xmlnode.xmlnode *lastchild in file "xmlnode.h".
+		 * Message: The struct contains an inner-struct or inner-union and cannot be automatically wrapped.
+		 */
+
+		/*
+		 * Argument Name: xmlnode *next
+		 * Argument Type: struct
+		 * Argument Category: InnerStruct
+		 */
+		/*
+		 * Could not generate a wrapper for xmlnode.xmlnode *next in file "xmlnode.h".
+		 * Message: The struct contains an inner-struct or inner-union and cannot be automatically wrapped.
+		 */
+
+		/*
+		 * Argument Name: prefix
+		 * Argument Type: char *
+		 * Argument Category: Native
+		 */
+		public string prefix
+		{
+			get
+			{
+				return this.Data.prefix;
+			}
+			set
+			{
+				if (this.Reference != IntPtr.Zero)
+					this.Reference = IntPtr.Zero;
+
+				this.Data.prefix = value;
+			}
+		}
+
+		/*
+		 * Argument Name: namespace_map
+		 * Argument Type: GHashTable *
+		 * Argument Category: PointerToGHashTable
+		 */
+		/*
+		 * Could not generate a wrapper for xmlnode.namespace_map in file "xmlnode.h".
+		 * Message: Unable to provide a type for HashTable as no function information was provided in code.
+		 */
+
+	}
+
+
+	[StructLayout(LayoutKind.Sequential)]
+	public class _xmlnode
+	{
+		/*
+		 * char * name
+		 */
+		public string name;
+
+		/*
+		 * char * xmlns
+		 */
+		public string xmlns;
+
+		/*
+		 * XMLNodeType type
+		 */
+		public XMLNodeClass.XMLNodeType type;
+
+		/*
+		 * char * data
+		 */
+		public string data;
+
+		/*
+		 * size_t data_sz
+		 */
+		public ulong data_sz;
+
+		/*
+		 * struct xmlnode *parent
+		 */
+		/*
+		 * Could not generate a wrapper for xmlnode.xmlnode *parent in file "xmlnode.h".
+		 * Message: The struct contains an inner-struct or inner-union and cannot be automatically wrapped.
+		 */
+
+		/*
+		 * struct xmlnode *child
+		 */
+		/*
+		 * Could not generate a wrapper for xmlnode.xmlnode *child in file "xmlnode.h".
+		 * Message: The struct contains an inner-struct or inner-union and cannot be automatically wrapped.
+		 */
+
+		/*
+		 * struct xmlnode *lastchild
+		 */
+		/*
+		 * Could not generate a wrapper for xmlnode.xmlnode *lastchild in file "xmlnode.h".
+		 * Message: The struct contains an inner-struct or inner-union and cannot be automatically wrapped.
+		 */
+
+		/*
+		 * struct xmlnode *next
+		 */
+		/*
+		 * Could not generate a wrapper for xmlnode.xmlnode *next in file "xmlnode.h".
+		 * Message: The struct contains an inner-struct or inner-union and cannot be automatically wrapped.
+		 */
+
+		/*
+		 * char * prefix
+		 */
+		public string prefix;
+
+		/*
+		 * GHashTable * namespace_map
+		 */
+		public IntPtr namespace_map;
+
+	}
+
+}
+
============================================================
--- penguin/GLib/README.txt	55098d727394681fa1dec582969f7dcda278cc60
+++ penguin/GLib/README.txt	55098d727394681fa1dec582969f7dcda278cc60
@@ -0,0 +1,8 @@
+A C# wrapper for glib has been developed by [ole.andre.ravnas at tandberg.com]. 
+
+You can acquire the sources needed via the following commands:
+===
+bzr branch http://bazaar.launchpad.net/~oleavr/oabuild/build
+bzr branch http://bazaar.launchpad.net/~oleavr/oabuild/libintl-proxy
+bzr branch http://bazaar.launchpad.net/~oleavr/oabuild/glib
+===
\ No newline at end of file
============================================================
--- penguin/Penguin/Penguin.csproj	40a0501066650f3742f3874722aa5e22fe699788
+++ penguin/Penguin/Penguin.csproj	40a0501066650f3742f3874722aa5e22fe699788
@@ -0,0 +1,93 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="3.5" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <PropertyGroup>
+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+    <ProductVersion>9.0.30729</ProductVersion>
+    <SchemaVersion>2.0</SchemaVersion>
+    <ProjectGuid>{16F97E97-B16F-49B2-A8E0-049E57963361}</ProjectGuid>
+    <OutputType>WinExe</OutputType>
+    <AppDesignerFolder>Properties</AppDesignerFolder>
+    <RootNamespace>Penguin</RootNamespace>
+    <AssemblyName>Penguin</AssemblyName>
+    <TargetFrameworkVersion>v3.5</TargetFrameworkVersion>
+    <FileAlignment>512</FileAlignment>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+    <DebugSymbols>true</DebugSymbols>
+    <DebugType>full</DebugType>
+    <Optimize>false</Optimize>
+    <OutputPath>bin\Debug\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+    <PlatformTarget>x86</PlatformTarget>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+    <DebugType>pdbonly</DebugType>
+    <Optimize>true</Optimize>
+    <OutputPath>bin\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug %28Win32%29|AnyCPU' ">
+    <OutputPath>bin\Debug %28Win32%29\</OutputPath>
+  </PropertyGroup>
+  <ItemGroup>
+    <Reference Include="System" />
+    <Reference Include="System.Core">
+      <RequiredTargetFramework>3.5</RequiredTargetFramework>
+    </Reference>
+    <Reference Include="System.Data.DataSetExtensions">
+      <RequiredTargetFramework>3.5</RequiredTargetFramework>
+    </Reference>
+    <Reference Include="System.Data" />
+    <Reference Include="System.Deployment" />
+    <Reference Include="System.Drawing" />
+    <Reference Include="System.Windows.Forms" />
+    <Reference Include="System.Xml" />
+  </ItemGroup>
+  <ItemGroup>
+    <Compile Include="WelcomeForm.cs">
+      <SubType>Form</SubType>
+    </Compile>
+    <Compile Include="WelcomeForm.Designer.cs">
+      <DependentUpon>WelcomeForm.cs</DependentUpon>
+    </Compile>
+    <Compile Include="Program.cs" />
+    <Compile Include="Properties\AssemblyInfo.cs" />
+    <EmbeddedResource Include="Properties\Resources.resx">
+      <Generator>ResXFileCodeGenerator</Generator>
+      <LastGenOutput>Resources.Designer.cs</LastGenOutput>
+      <SubType>Designer</SubType>
+    </EmbeddedResource>
+    <Compile Include="Properties\Resources.Designer.cs">
+      <AutoGen>True</AutoGen>
+      <DependentUpon>Resources.resx</DependentUpon>
+    </Compile>
+    <None Include="Properties\Settings.settings">
+      <Generator>SettingsSingleFileGenerator</Generator>
+      <LastGenOutput>Settings.Designer.cs</LastGenOutput>
+    </None>
+    <Compile Include="Properties\Settings.Designer.cs">
+      <AutoGen>True</AutoGen>
+      <DependentUpon>Settings.settings</DependentUpon>
+      <DesignTimeSharedInput>True</DesignTimeSharedInput>
+    </Compile>
+  </ItemGroup>
+  <ItemGroup>
+    <ProjectReference Include="..\..\libpurple\wrapper\PurpleWrapper.csproj">
+      <Project>{8034DEA9-30CC-DEA0-3903-80210CE809FA}</Project>
+      <Name>PurpleWrapper</Name>
+    </ProjectReference>
+  </ItemGroup>
+  <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
+  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 
+       Other similar extension points exist, see Microsoft.Common.targets.
+  <Target Name="BeforeBuild">
+  </Target>
+  <Target Name="AfterBuild">
+  </Target>
+  -->
+</Project>
\ No newline at end of file
============================================================
--- penguin/Penguin/Program.cs	c903d9539b39f9ffc690fd3f4c85dbe9f705adbb
+++ penguin/Penguin/Program.cs	c903d9539b39f9ffc690fd3f4c85dbe9f705adbb
@@ -0,0 +1,21 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Windows.Forms;
+
+namespace Penguin
+{
+    static class Program
+    {
+        /// <summary>
+        /// The main entry point for the application.
+        /// </summary>
+        [STAThread]
+        static void Main()
+        {
+            Application.EnableVisualStyles();
+            Application.SetCompatibleTextRenderingDefault(false);
+            Application.Run(new WelcomeForm());
+        }
+    }
+}
============================================================
--- penguin/Penguin/Properties/AssemblyInfo.cs	2d50d6c86cdc5086a260d791e998b659c15d7280
+++ penguin/Penguin/Properties/AssemblyInfo.cs	2d50d6c86cdc5086a260d791e998b659c15d7280
@@ -0,0 +1,36 @@
+using System.Reflection;
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
+
+// General Information about an assembly is controlled through the following 
+// set of attributes. Change these attribute values to modify the information
+// associated with an assembly.
+[assembly: AssemblyTitle("Penguin")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("")]
+[assembly: AssemblyProduct("Penguin")]
+[assembly: AssemblyCopyright("")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+
+// Setting ComVisible to false makes the types in this assembly not visible 
+// to COM components.  If you need to access a type in this assembly from 
+// COM, set the ComVisible attribute to true on that type.
+[assembly: ComVisible(false)]
+
+// The following GUID is for the ID of the typelib if this project is exposed to COM
+[assembly: Guid("4b1156cc-29ad-49d3-aa12-361c2bf15829")]
+
+// Version information for an assembly consists of the following four values:
+//
+//      Major Version
+//      Minor Version 
+//      Build Number
+//      Revision
+//
+// You can specify all the values or you can default the Build and Revision Numbers 
+// by using the '*' as shown below:
+// [assembly: AssemblyVersion("1.0.*")]
+[assembly: AssemblyVersion("1.0.0.0")]
+[assembly: AssemblyFileVersion("1.0.0.0")]
============================================================
--- penguin/Penguin/Properties/Resources.Designer.cs	b6e9efcefa71f3ac463528cfa14e0088fa8ba4bb
+++ penguin/Penguin/Properties/Resources.Designer.cs	b6e9efcefa71f3ac463528cfa14e0088fa8ba4bb
@@ -0,0 +1,71 @@
+//------------------------------------------------------------------------------
+// <auto-generated>
+//     This code was generated by a tool.
+//     Runtime Version:2.0.50727.3074
+//
+//     Changes to this file may cause incorrect behavior and will be lost if
+//     the code is regenerated.
+// </auto-generated>
+//------------------------------------------------------------------------------
+
+namespace Penguin.Properties
+{
+
+
+    /// <summary>
+    ///   A strongly-typed resource class, for looking up localized strings, etc.
+    /// </summary>
+    // This class was auto-generated by the StronglyTypedResourceBuilder
+    // class via a tool like ResGen or Visual Studio.
+    // To add or remove a member, edit your .ResX file then rerun ResGen
+    // with the /str option, or rebuild your VS project.
+    [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "2.0.0.0")]
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
+    internal class Resources
+    {
+
+        private static global::System.Resources.ResourceManager resourceMan;
+
+        private static global::System.Globalization.CultureInfo resourceCulture;
+
+        [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
+        internal Resources()
+        {
+        }
+
+        /// <summary>
+        ///   Returns the cached ResourceManager instance used by this class.
+        /// </summary>
+        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
+        internal static global::System.Resources.ResourceManager ResourceManager
+        {
+            get
+            {
+                if ((resourceMan == null))
+                {
+                    global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("Penguin.Properties.Resources", typeof(Resources).Assembly);
+                    resourceMan = temp;
+                }
+                return resourceMan;
+            }
+        }
+
+        /// <summary>
+        ///   Overrides the current thread's CurrentUICulture property for all
+        ///   resource lookups using this strongly typed resource class.
+        /// </summary>
+        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
+        internal static global::System.Globalization.CultureInfo Culture
+        {
+            get
+            {
+                return resourceCulture;
+            }
+            set
+            {
+                resourceCulture = value;
+            }
+        }
+    }
+}
============================================================
--- penguin/Penguin/Properties/Resources.resx	47b15748ecc8e952c5935170090db7c269ce4b4f
+++ penguin/Penguin/Properties/Resources.resx	47b15748ecc8e952c5935170090db7c269ce4b4f
@@ -0,0 +1,117 @@
+<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+</root>
\ No newline at end of file
============================================================
--- penguin/Penguin/Properties/Settings.Designer.cs	6fb66eb235f93d122526b269372bc04014ec97f0
+++ penguin/Penguin/Properties/Settings.Designer.cs	6fb66eb235f93d122526b269372bc04014ec97f0
@@ -0,0 +1,30 @@
+//------------------------------------------------------------------------------
+// <auto-generated>
+//     This code was generated by a tool.
+//     Runtime Version:2.0.50727.3074
+//
+//     Changes to this file may cause incorrect behavior and will be lost if
+//     the code is regenerated.
+// </auto-generated>
+//------------------------------------------------------------------------------
+
+namespace Penguin.Properties
+{
+
+
+    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
+    [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "9.0.0.0")]
+    internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase
+    {
+
+        private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings())));
+
+        public static Settings Default
+        {
+            get
+            {
+                return defaultInstance;
+            }
+        }
+    }
+}
============================================================
--- penguin/Penguin/Properties/Settings.settings	5e1d04de66ffcc5dfd813530ab6992e6daaae417
+++ penguin/Penguin/Properties/Settings.settings	5e1d04de66ffcc5dfd813530ab6992e6daaae417
@@ -0,0 +1,7 @@
+<?xml version='1.0' encoding='utf-8'?>
+<SettingsFile xmlns="http://schemas.microsoft.com/VisualStudio/2004/01/settings" CurrentProfile="(Default)">
+  <Profiles>
+    <Profile Name="(Default)" />
+  </Profiles>
+  <Settings />
+</SettingsFile>
============================================================
--- penguin/Penguin/WelcomeForm.Designer.cs	aec5a69a2b4eec54f275603c65c3128f1cc006c8
+++ penguin/Penguin/WelcomeForm.Designer.cs	aec5a69a2b4eec54f275603c65c3128f1cc006c8
@@ -0,0 +1,39 @@
+namespace Penguin
+{
+    partial class WelcomeForm
+    {
+        /// <summary>
+        /// Required designer variable.
+        /// </summary>
+        private System.ComponentModel.IContainer components = null;
+
+        /// <summary>
+        /// Clean up any resources being used.
+        /// </summary>
+        /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
+        protected override void Dispose(bool disposing)
+        {
+            if (disposing && (components != null))
+            {
+                components.Dispose();
+            }
+            base.Dispose(disposing);
+        }
+
+        #region Windows Form Designer generated code
+
+        /// <summary>
+        /// Required method for Designer support - do not modify
+        /// the contents of this method with the code editor.
+        /// </summary>
+        private void InitializeComponent()
+        {
+            this.components = new System.ComponentModel.Container();
+            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+            this.Text = "Form1";
+        }
+
+        #endregion
+    }
+}
+
============================================================
--- penguin/Penguin/WelcomeForm.cs	ca69f47ffbf925b6519b59459318e58eadb27533
+++ penguin/Penguin/WelcomeForm.cs	ca69f47ffbf925b6519b59459318e58eadb27533
@@ -0,0 +1,19 @@
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Data;
+using System.Drawing;
+using System.Linq;
+using System.Text;
+using System.Windows.Forms;
+
+namespace Penguin
+{
+    public partial class WelcomeForm : Form
+    {
+        public WelcomeForm()
+        {
+            InitializeComponent();
+        }
+    }
+}
============================================================
--- penguin/Penguin.sln	48071dd688cea2c873c7ef1379bdd51673a8dd4f
+++ penguin/Penguin.sln	48071dd688cea2c873c7ef1379bdd51673a8dd4f
@@ -0,0 +1,647 @@
+
+Microsoft Visual Studio Solution File, Format Version 10.00
+# Visual Studio 2008
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "PurpleWrapper", "..\libpurple\wrapper\PurpleWrapper.csproj", "{8034DEA9-30CC-DEA0-3903-80210CE809FA}"
+	ProjectSection(ProjectDependencies) = postProject
+		{9F347485-0492-4473-B597-0444687EEE3F} = {9F347485-0492-4473-B597-0444687EEE3F}
+	EndProjectSection
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Penguin", "Penguin\Penguin.csproj", "{16F97E97-B16F-49B2-A8E0-049E57963361}"
+	ProjectSection(ProjectDependencies) = postProject
+		{8034DEA9-30CC-DEA0-3903-80210CE809FA} = {8034DEA9-30CC-DEA0-3903-80210CE809FA}
+	EndProjectSection
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "libpurple", "libpurple", "{F7CE879A-78D1-4738-88F8-6EA6DFDB3172}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "wrapper", "wrapper", "{259F3184-C992-4858-AB00-3147438B280E}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "libpurple", "libpurple", "{4A4BF248-A1B7-462A-B9CB-055D7FA49ADC}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "prpls", "prpls", "{EFC2778C-4E9C-4BE1-8F58-C73086B847CF}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "glib-generated", "GLib\glib\win32\oa\glib-generated.vcproj", "{85DCFF40-BF5B-459A-BF20-377472BBF846}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "glib-genmarshal", "GLib\glib\win32\oa\glib-genmarshal.vcproj", "{BD12E835-5C52-4E5D-8234-1C579F33E27A}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libglib", "GLib\glib\win32\oa\libglib.vcproj", "{12BCA020-EABF-429E-876A-A476BC9C10C0}"
+	ProjectSection(ProjectDependencies) = postProject
+		{85DCFF40-BF5B-459A-BF20-377472BBF846} = {85DCFF40-BF5B-459A-BF20-377472BBF846}
+	EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libgmodule", "GLib\glib\win32\oa\libgmodule.vcproj", "{4214047C-F5C1-40B3-8369-5DCED8C32770}"
+	ProjectSection(ProjectDependencies) = postProject
+		{85DCFF40-BF5B-459A-BF20-377472BBF846} = {85DCFF40-BF5B-459A-BF20-377472BBF846}
+	EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libgobject", "GLib\glib\win32\oa\libgobject.vcproj", "{F172EFFC-E30F-4593-809E-DB2024B1E753}"
+	ProjectSection(ProjectDependencies) = postProject
+		{4CEE3392-89AC-4367-B219-42360CF91CBB} = {4CEE3392-89AC-4367-B219-42360CF91CBB}
+	EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libgthread", "GLib\glib\win32\oa\libgthread.vcproj", "{C8AFB8C3-FFFD-460F-BC13-9AC25D7B117C}"
+	ProjectSection(ProjectDependencies) = postProject
+		{85DCFF40-BF5B-459A-BF20-377472BBF846} = {85DCFF40-BF5B-459A-BF20-377472BBF846}
+	EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libpcre", "GLib\glib\win32\oa\libpcre.vcproj", "{AE3F6497-7880-4C08-B6E2-3AF05BCFB671}"
+	ProjectSection(ProjectDependencies) = postProject
+		{85DCFF40-BF5B-459A-BF20-377472BBF846} = {85DCFF40-BF5B-459A-BF20-377472BBF846}
+	EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "gobject-generated", "GLib\glib\win32\oa\gobject-generated.vcproj", "{4CEE3392-89AC-4367-B219-42360CF91CBB}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Dependencies", "Dependencies", "{3CC18A8E-B460-47C2-8FB5-B0EE8A3608D0}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "GLib", "GLib", "{3F741360-ECE1-42FF-B8E9-96D4A5DD2A30}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libintl-proxy", "GLib\libintl-proxy\libintl-proxy.vcproj", "{CB7DC8B9-C2B8-4352-908E-9230BA9906EE}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "GLibCore", "GLibCore", "{3FFFE88B-948B-4B8F-B843-264763B1EF37}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Tools", "Tools", "{51462126-2E74-41C9-BC24-DF55876732B7}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "GModule", "GModule", "{B8DB17E1-CE45-4354-8B3E-767648F3A2BE}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "GThread", "GThread", "{B3B22C2A-52B9-448F-8E13-8BCCFD6C0020}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "GObject", "GObject", "{2D723AC0-293F-41C8-99A7-2DD8756556C7}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "GIO", "GIO", "{E16DEC4D-DAF0-4415-A601-9B034BBFB630}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libgio", "GLib\glib\win32\oa\libgio.vcproj", "{66757FD0-C29F-4744-9C52-CE79E7E4289F}"
+	ProjectSection(ProjectDependencies) = postProject
+		{E28A4D3E-E995-499D-A920-D155E5EA4A79} = {E28A4D3E-E995-499D-A920-D155E5EA4A79}
+		{4CEE3392-89AC-4367-B219-42360CF91CBB} = {4CEE3392-89AC-4367-B219-42360CF91CBB}
+	EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "gio-generated", "GLib\glib\win32\oa\gio-generated.vcproj", "{E28A4D3E-E995-499D-A920-D155E5EA4A79}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Tests", "Tests", "{F0191CA8-AA6A-49D2-9E58-77A8334FB926}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "glib-test-checksum", "GLib\glib\win32\oa\glib-test-checksum.vcproj", "{860FFAEE-5D5F-44DA-8ED0-0F6987229545}"
+	ProjectSection(ProjectDependencies) = postProject
+		{85DCFF40-BF5B-459A-BF20-377472BBF846} = {85DCFF40-BF5B-459A-BF20-377472BBF846}
+	EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "glib-test-array", "GLib\glib\win32\oa\glib-test-array.vcproj", "{5E7C37E6-65DC-43EA-8C14-B325A8B3B2A7}"
+	ProjectSection(ProjectDependencies) = postProject
+		{85DCFF40-BF5B-459A-BF20-377472BBF846} = {85DCFF40-BF5B-459A-BF20-377472BBF846}
+	EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "glib-test-asyncqueue", "GLib\glib\win32\oa\glib-test-asyncqueue.vcproj", "{9566788F-9AEE-47EB-8FBE-4A1766E805D8}"
+	ProjectSection(ProjectDependencies) = postProject
+		{85DCFF40-BF5B-459A-BF20-377472BBF846} = {85DCFF40-BF5B-459A-BF20-377472BBF846}
+	EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libpurple", "..\libpurple\win32\vs9\libpurple.vcproj", "{9F347485-0492-4473-B597-0444687EEE3F}"
+EndProject
+Global
+	GlobalSection(SolutionConfigurationPlatforms) = preSolution
+		Debug (Win32)|Any CPU = Debug (Win32)|Any CPU
+		Debug (Win32)|Mixed Platforms = Debug (Win32)|Mixed Platforms
+		Debug (Win32)|Win32 = Debug (Win32)|Win32
+		Debug (Win32)|x64 = Debug (Win32)|x64
+		Debug (Win32)|x86 = Debug (Win32)|x86
+		Debug|Any CPU = Debug|Any CPU
+		Debug|Mixed Platforms = Debug|Mixed Platforms
+		Debug|Win32 = Debug|Win32
+		Debug|x64 = Debug|x64
+		Debug|x86 = Debug|x86
+		Release|Any CPU = Release|Any CPU
+		Release|Mixed Platforms = Release|Mixed Platforms
+		Release|Win32 = Release|Win32
+		Release|x64 = Release|x64
+		Release|x86 = Release|x86
+		ReleaseWdkCrt|Any CPU = ReleaseWdkCrt|Any CPU
+		ReleaseWdkCrt|Mixed Platforms = ReleaseWdkCrt|Mixed Platforms
+		ReleaseWdkCrt|Win32 = ReleaseWdkCrt|Win32
+		ReleaseWdkCrt|x64 = ReleaseWdkCrt|x64
+		ReleaseWdkCrt|x86 = ReleaseWdkCrt|x86
+	EndGlobalSection
+	GlobalSection(ProjectConfigurationPlatforms) = postSolution
+		{8034DEA9-30CC-DEA0-3903-80210CE809FA}.Debug (Win32)|Any CPU.ActiveCfg = Debug (Win32)|Any CPU
+		{8034DEA9-30CC-DEA0-3903-80210CE809FA}.Debug (Win32)|Any CPU.Build.0 = Debug (Win32)|Any CPU
+		{8034DEA9-30CC-DEA0-3903-80210CE809FA}.Debug (Win32)|Mixed Platforms.ActiveCfg = Debug (Win32)|x86
+		{8034DEA9-30CC-DEA0-3903-80210CE809FA}.Debug (Win32)|Mixed Platforms.Build.0 = Debug (Win32)|x86
+		{8034DEA9-30CC-DEA0-3903-80210CE809FA}.Debug (Win32)|Win32.ActiveCfg = Debug (Win32)|x86
+		{8034DEA9-30CC-DEA0-3903-80210CE809FA}.Debug (Win32)|Win32.Build.0 = Debug (Win32)|x86
+		{8034DEA9-30CC-DEA0-3903-80210CE809FA}.Debug (Win32)|x64.ActiveCfg = Debug (Win32)|x86
+		{8034DEA9-30CC-DEA0-3903-80210CE809FA}.Debug (Win32)|x86.ActiveCfg = Debug (Win32)|x86
+		{8034DEA9-30CC-DEA0-3903-80210CE809FA}.Debug (Win32)|x86.Build.0 = Debug (Win32)|x86
+		{8034DEA9-30CC-DEA0-3903-80210CE809FA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{8034DEA9-30CC-DEA0-3903-80210CE809FA}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{8034DEA9-30CC-DEA0-3903-80210CE809FA}.Debug|Mixed Platforms.ActiveCfg = Debug|x86
+		{8034DEA9-30CC-DEA0-3903-80210CE809FA}.Debug|Mixed Platforms.Build.0 = Debug|x86
+		{8034DEA9-30CC-DEA0-3903-80210CE809FA}.Debug|Win32.ActiveCfg = Debug|x86
+		{8034DEA9-30CC-DEA0-3903-80210CE809FA}.Debug|Win32.Build.0 = Debug|x86
+		{8034DEA9-30CC-DEA0-3903-80210CE809FA}.Debug|x64.ActiveCfg = Debug|x86
+		{8034DEA9-30CC-DEA0-3903-80210CE809FA}.Debug|x86.ActiveCfg = Debug|x86
+		{8034DEA9-30CC-DEA0-3903-80210CE809FA}.Debug|x86.Build.0 = Debug|x86
+		{8034DEA9-30CC-DEA0-3903-80210CE809FA}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{8034DEA9-30CC-DEA0-3903-80210CE809FA}.Release|Any CPU.Build.0 = Release|Any CPU
+		{8034DEA9-30CC-DEA0-3903-80210CE809FA}.Release|Mixed Platforms.ActiveCfg = Release|x86
+		{8034DEA9-30CC-DEA0-3903-80210CE809FA}.Release|Mixed Platforms.Build.0 = Release|x86
+		{8034DEA9-30CC-DEA0-3903-80210CE809FA}.Release|Win32.ActiveCfg = Release|x86
+		{8034DEA9-30CC-DEA0-3903-80210CE809FA}.Release|x64.ActiveCfg = Release|x86
+		{8034DEA9-30CC-DEA0-3903-80210CE809FA}.Release|x86.ActiveCfg = Release|x86
+		{8034DEA9-30CC-DEA0-3903-80210CE809FA}.Release|x86.Build.0 = Release|x86
+		{8034DEA9-30CC-DEA0-3903-80210CE809FA}.ReleaseWdkCrt|Any CPU.ActiveCfg = Release|x86
+		{8034DEA9-30CC-DEA0-3903-80210CE809FA}.ReleaseWdkCrt|Mixed Platforms.ActiveCfg = Release|x86
+		{8034DEA9-30CC-DEA0-3903-80210CE809FA}.ReleaseWdkCrt|Win32.ActiveCfg = Release|x86
+		{8034DEA9-30CC-DEA0-3903-80210CE809FA}.ReleaseWdkCrt|x64.ActiveCfg = Release|x86
+		{8034DEA9-30CC-DEA0-3903-80210CE809FA}.ReleaseWdkCrt|x86.ActiveCfg = Release|x86
+		{16F97E97-B16F-49B2-A8E0-049E57963361}.Debug (Win32)|Any CPU.ActiveCfg = Debug (Win32)|Any CPU
+		{16F97E97-B16F-49B2-A8E0-049E57963361}.Debug (Win32)|Any CPU.Build.0 = Debug (Win32)|Any CPU
+		{16F97E97-B16F-49B2-A8E0-049E57963361}.Debug (Win32)|Mixed Platforms.ActiveCfg = Debug (Win32)|Any CPU
+		{16F97E97-B16F-49B2-A8E0-049E57963361}.Debug (Win32)|Mixed Platforms.Build.0 = Debug (Win32)|Any CPU
+		{16F97E97-B16F-49B2-A8E0-049E57963361}.Debug (Win32)|Win32.ActiveCfg = Debug (Win32)|Any CPU
+		{16F97E97-B16F-49B2-A8E0-049E57963361}.Debug (Win32)|Win32.Build.0 = Debug (Win32)|Any CPU
+		{16F97E97-B16F-49B2-A8E0-049E57963361}.Debug (Win32)|x64.ActiveCfg = Debug (Win32)|Any CPU
+		{16F97E97-B16F-49B2-A8E0-049E57963361}.Debug (Win32)|x86.ActiveCfg = Debug (Win32)|Any CPU
+		{16F97E97-B16F-49B2-A8E0-049E57963361}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{16F97E97-B16F-49B2-A8E0-049E57963361}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{16F97E97-B16F-49B2-A8E0-049E57963361}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
+		{16F97E97-B16F-49B2-A8E0-049E57963361}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
+		{16F97E97-B16F-49B2-A8E0-049E57963361}.Debug|Win32.ActiveCfg = Debug|Any CPU
+		{16F97E97-B16F-49B2-A8E0-049E57963361}.Debug|Win32.Build.0 = Debug|Any CPU
+		{16F97E97-B16F-49B2-A8E0-049E57963361}.Debug|x64.ActiveCfg = Debug|Any CPU
+		{16F97E97-B16F-49B2-A8E0-049E57963361}.Debug|x86.ActiveCfg = Debug|Any CPU
+		{16F97E97-B16F-49B2-A8E0-049E57963361}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{16F97E97-B16F-49B2-A8E0-049E57963361}.Release|Any CPU.Build.0 = Release|Any CPU
+		{16F97E97-B16F-49B2-A8E0-049E57963361}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
+		{16F97E97-B16F-49B2-A8E0-049E57963361}.Release|Mixed Platforms.Build.0 = Release|Any CPU
+		{16F97E97-B16F-49B2-A8E0-049E57963361}.Release|Win32.ActiveCfg = Release|Any CPU
+		{16F97E97-B16F-49B2-A8E0-049E57963361}.Release|x64.ActiveCfg = Release|Any CPU
+		{16F97E97-B16F-49B2-A8E0-049E57963361}.Release|x86.ActiveCfg = Release|Any CPU
+		{16F97E97-B16F-49B2-A8E0-049E57963361}.ReleaseWdkCrt|Any CPU.ActiveCfg = Release|Any CPU
+		{16F97E97-B16F-49B2-A8E0-049E57963361}.ReleaseWdkCrt|Mixed Platforms.ActiveCfg = Release|Any CPU
+		{16F97E97-B16F-49B2-A8E0-049E57963361}.ReleaseWdkCrt|Win32.ActiveCfg = Release|Any CPU
+		{16F97E97-B16F-49B2-A8E0-049E57963361}.ReleaseWdkCrt|x64.ActiveCfg = Release|Any CPU
+		{16F97E97-B16F-49B2-A8E0-049E57963361}.ReleaseWdkCrt|x86.ActiveCfg = Release|Any CPU
+		{85DCFF40-BF5B-459A-BF20-377472BBF846}.Debug (Win32)|Any CPU.ActiveCfg = Debug (Win32)|x64
+		{85DCFF40-BF5B-459A-BF20-377472BBF846}.Debug (Win32)|Mixed Platforms.ActiveCfg = Debug (Win32)|x64
+		{85DCFF40-BF5B-459A-BF20-377472BBF846}.Debug (Win32)|Mixed Platforms.Build.0 = Debug (Win32)|x64
+		{85DCFF40-BF5B-459A-BF20-377472BBF846}.Debug (Win32)|Win32.ActiveCfg = Debug (Win32)|Win32
+		{85DCFF40-BF5B-459A-BF20-377472BBF846}.Debug (Win32)|Win32.Build.0 = Debug (Win32)|Win32
+		{85DCFF40-BF5B-459A-BF20-377472BBF846}.Debug (Win32)|x64.ActiveCfg = Debug (Win32)|x64
+		{85DCFF40-BF5B-459A-BF20-377472BBF846}.Debug (Win32)|x64.Build.0 = Debug (Win32)|x64
+		{85DCFF40-BF5B-459A-BF20-377472BBF846}.Debug (Win32)|x86.ActiveCfg = Debug (Win32)|x64
+		{85DCFF40-BF5B-459A-BF20-377472BBF846}.Debug|Any CPU.ActiveCfg = Debug|x64
+		{85DCFF40-BF5B-459A-BF20-377472BBF846}.Debug|Mixed Platforms.ActiveCfg = Debug|x64
+		{85DCFF40-BF5B-459A-BF20-377472BBF846}.Debug|Win32.ActiveCfg = Debug|Win32
+		{85DCFF40-BF5B-459A-BF20-377472BBF846}.Debug|Win32.Build.0 = Debug|Win32
+		{85DCFF40-BF5B-459A-BF20-377472BBF846}.Debug|x64.ActiveCfg = Debug|x64
+		{85DCFF40-BF5B-459A-BF20-377472BBF846}.Debug|x64.Build.0 = Debug|x64
+		{85DCFF40-BF5B-459A-BF20-377472BBF846}.Debug|x86.ActiveCfg = Debug|x64
+		{85DCFF40-BF5B-459A-BF20-377472BBF846}.Release|Any CPU.ActiveCfg = Release|x64
+		{85DCFF40-BF5B-459A-BF20-377472BBF846}.Release|Mixed Platforms.ActiveCfg = Release|x64
+		{85DCFF40-BF5B-459A-BF20-377472BBF846}.Release|Win32.ActiveCfg = Release|Win32
+		{85DCFF40-BF5B-459A-BF20-377472BBF846}.Release|Win32.Build.0 = Release|Win32
+		{85DCFF40-BF5B-459A-BF20-377472BBF846}.Release|x64.ActiveCfg = Release|x64
+		{85DCFF40-BF5B-459A-BF20-377472BBF846}.Release|x64.Build.0 = Release|x64
+		{85DCFF40-BF5B-459A-BF20-377472BBF846}.Release|x86.ActiveCfg = Release|x64
+		{85DCFF40-BF5B-459A-BF20-377472BBF846}.ReleaseWdkCrt|Any CPU.ActiveCfg = ReleaseWdkCrt|x64
+		{85DCFF40-BF5B-459A-BF20-377472BBF846}.ReleaseWdkCrt|Mixed Platforms.ActiveCfg = ReleaseWdkCrt|x64
+		{85DCFF40-BF5B-459A-BF20-377472BBF846}.ReleaseWdkCrt|Win32.ActiveCfg = ReleaseWdkCrt|Win32
+		{85DCFF40-BF5B-459A-BF20-377472BBF846}.ReleaseWdkCrt|Win32.Build.0 = ReleaseWdkCrt|Win32
+		{85DCFF40-BF5B-459A-BF20-377472BBF846}.ReleaseWdkCrt|x64.ActiveCfg = ReleaseWdkCrt|x64
+		{85DCFF40-BF5B-459A-BF20-377472BBF846}.ReleaseWdkCrt|x64.Build.0 = ReleaseWdkCrt|x64
+		{85DCFF40-BF5B-459A-BF20-377472BBF846}.ReleaseWdkCrt|x86.ActiveCfg = ReleaseWdkCrt|x64
+		{BD12E835-5C52-4E5D-8234-1C579F33E27A}.Debug (Win32)|Any CPU.ActiveCfg = Debug (Win32)|x64
+		{BD12E835-5C52-4E5D-8234-1C579F33E27A}.Debug (Win32)|Mixed Platforms.ActiveCfg = Debug (Win32)|x64
+		{BD12E835-5C52-4E5D-8234-1C579F33E27A}.Debug (Win32)|Mixed Platforms.Build.0 = Debug (Win32)|x64
+		{BD12E835-5C52-4E5D-8234-1C579F33E27A}.Debug (Win32)|Win32.ActiveCfg = Debug (Win32)|Win32
+		{BD12E835-5C52-4E5D-8234-1C579F33E27A}.Debug (Win32)|Win32.Build.0 = Debug (Win32)|Win32
+		{BD12E835-5C52-4E5D-8234-1C579F33E27A}.Debug (Win32)|x64.ActiveCfg = Debug (Win32)|x64
+		{BD12E835-5C52-4E5D-8234-1C579F33E27A}.Debug (Win32)|x64.Build.0 = Debug (Win32)|x64
+		{BD12E835-5C52-4E5D-8234-1C579F33E27A}.Debug (Win32)|x86.ActiveCfg = Debug (Win32)|x64
+		{BD12E835-5C52-4E5D-8234-1C579F33E27A}.Debug|Any CPU.ActiveCfg = Debug|x64
+		{BD12E835-5C52-4E5D-8234-1C579F33E27A}.Debug|Mixed Platforms.ActiveCfg = Debug|x64
+		{BD12E835-5C52-4E5D-8234-1C579F33E27A}.Debug|Win32.ActiveCfg = Debug|Win32
+		{BD12E835-5C52-4E5D-8234-1C579F33E27A}.Debug|Win32.Build.0 = Debug|Win32
+		{BD12E835-5C52-4E5D-8234-1C579F33E27A}.Debug|x64.ActiveCfg = Debug|x64
+		{BD12E835-5C52-4E5D-8234-1C579F33E27A}.Debug|x64.Build.0 = Debug|x64
+		{BD12E835-5C52-4E5D-8234-1C579F33E27A}.Debug|x86.ActiveCfg = Debug|x64
+		{BD12E835-5C52-4E5D-8234-1C579F33E27A}.Release|Any CPU.ActiveCfg = Release|x64
+		{BD12E835-5C52-4E5D-8234-1C579F33E27A}.Release|Mixed Platforms.ActiveCfg = Release|x64
+		{BD12E835-5C52-4E5D-8234-1C579F33E27A}.Release|Win32.ActiveCfg = Release|Win32
+		{BD12E835-5C52-4E5D-8234-1C579F33E27A}.Release|Win32.Build.0 = Release|Win32
+		{BD12E835-5C52-4E5D-8234-1C579F33E27A}.Release|x64.ActiveCfg = Release|x64
+		{BD12E835-5C52-4E5D-8234-1C579F33E27A}.Release|x64.Build.0 = Release|x64
+		{BD12E835-5C52-4E5D-8234-1C579F33E27A}.Release|x86.ActiveCfg = Release|x64
+		{BD12E835-5C52-4E5D-8234-1C579F33E27A}.ReleaseWdkCrt|Any CPU.ActiveCfg = ReleaseWdkCrt|x64
+		{BD12E835-5C52-4E5D-8234-1C579F33E27A}.ReleaseWdkCrt|Mixed Platforms.ActiveCfg = ReleaseWdkCrt|x64
+		{BD12E835-5C52-4E5D-8234-1C579F33E27A}.ReleaseWdkCrt|Win32.ActiveCfg = ReleaseWdkCrt|Win32
+		{BD12E835-5C52-4E5D-8234-1C579F33E27A}.ReleaseWdkCrt|Win32.Build.0 = ReleaseWdkCrt|Win32
+		{BD12E835-5C52-4E5D-8234-1C579F33E27A}.ReleaseWdkCrt|x64.ActiveCfg = ReleaseWdkCrt|x64
+		{BD12E835-5C52-4E5D-8234-1C579F33E27A}.ReleaseWdkCrt|x64.Build.0 = ReleaseWdkCrt|x64
+		{BD12E835-5C52-4E5D-8234-1C579F33E27A}.ReleaseWdkCrt|x86.ActiveCfg = ReleaseWdkCrt|x64
+		{12BCA020-EABF-429E-876A-A476BC9C10C0}.Debug (Win32)|Any CPU.ActiveCfg = Debug (Win32)|x64
+		{12BCA020-EABF-429E-876A-A476BC9C10C0}.Debug (Win32)|Mixed Platforms.ActiveCfg = Debug (Win32)|x64
+		{12BCA020-EABF-429E-876A-A476BC9C10C0}.Debug (Win32)|Mixed Platforms.Build.0 = Debug (Win32)|x64
+		{12BCA020-EABF-429E-876A-A476BC9C10C0}.Debug (Win32)|Win32.ActiveCfg = Debug (Win32)|Win32
+		{12BCA020-EABF-429E-876A-A476BC9C10C0}.Debug (Win32)|Win32.Build.0 = Debug (Win32)|Win32
+		{12BCA020-EABF-429E-876A-A476BC9C10C0}.Debug (Win32)|x64.ActiveCfg = Debug (Win32)|x64
+		{12BCA020-EABF-429E-876A-A476BC9C10C0}.Debug (Win32)|x64.Build.0 = Debug (Win32)|x64
+		{12BCA020-EABF-429E-876A-A476BC9C10C0}.Debug (Win32)|x86.ActiveCfg = Debug (Win32)|x64
+		{12BCA020-EABF-429E-876A-A476BC9C10C0}.Debug|Any CPU.ActiveCfg = Debug|x64
+		{12BCA020-EABF-429E-876A-A476BC9C10C0}.Debug|Mixed Platforms.ActiveCfg = Debug|x64
+		{12BCA020-EABF-429E-876A-A476BC9C10C0}.Debug|Win32.ActiveCfg = Debug|Win32
+		{12BCA020-EABF-429E-876A-A476BC9C10C0}.Debug|Win32.Build.0 = Debug|Win32
+		{12BCA020-EABF-429E-876A-A476BC9C10C0}.Debug|x64.ActiveCfg = Debug|x64
+		{12BCA020-EABF-429E-876A-A476BC9C10C0}.Debug|x64.Build.0 = Debug|x64
+		{12BCA020-EABF-429E-876A-A476BC9C10C0}.Debug|x86.ActiveCfg = Debug|x64
+		{12BCA020-EABF-429E-876A-A476BC9C10C0}.Release|Any CPU.ActiveCfg = Release|x64
+		{12BCA020-EABF-429E-876A-A476BC9C10C0}.Release|Mixed Platforms.ActiveCfg = Release|x64
+		{12BCA020-EABF-429E-876A-A476BC9C10C0}.Release|Win32.ActiveCfg = Release|Win32
+		{12BCA020-EABF-429E-876A-A476BC9C10C0}.Release|Win32.Build.0 = Release|Win32
+		{12BCA020-EABF-429E-876A-A476BC9C10C0}.Release|x64.ActiveCfg = Release|x64
+		{12BCA020-EABF-429E-876A-A476BC9C10C0}.Release|x64.Build.0 = Release|x64
+		{12BCA020-EABF-429E-876A-A476BC9C10C0}.Release|x86.ActiveCfg = Release|x64
+		{12BCA020-EABF-429E-876A-A476BC9C10C0}.ReleaseWdkCrt|Any CPU.ActiveCfg = ReleaseWdkCrt|x64
+		{12BCA020-EABF-429E-876A-A476BC9C10C0}.ReleaseWdkCrt|Mixed Platforms.ActiveCfg = ReleaseWdkCrt|x64
+		{12BCA020-EABF-429E-876A-A476BC9C10C0}.ReleaseWdkCrt|Win32.ActiveCfg = ReleaseWdkCrt|Win32
+		{12BCA020-EABF-429E-876A-A476BC9C10C0}.ReleaseWdkCrt|Win32.Build.0 = ReleaseWdkCrt|Win32
+		{12BCA020-EABF-429E-876A-A476BC9C10C0}.ReleaseWdkCrt|x64.ActiveCfg = ReleaseWdkCrt|x64
+		{12BCA020-EABF-429E-876A-A476BC9C10C0}.ReleaseWdkCrt|x64.Build.0 = ReleaseWdkCrt|x64
+		{12BCA020-EABF-429E-876A-A476BC9C10C0}.ReleaseWdkCrt|x86.ActiveCfg = ReleaseWdkCrt|x64
+		{4214047C-F5C1-40B3-8369-5DCED8C32770}.Debug (Win32)|Any CPU.ActiveCfg = Debug (Win32)|x64
+		{4214047C-F5C1-40B3-8369-5DCED8C32770}.Debug (Win32)|Mixed Platforms.ActiveCfg = Debug (Win32)|x64
+		{4214047C-F5C1-40B3-8369-5DCED8C32770}.Debug (Win32)|Mixed Platforms.Build.0 = Debug (Win32)|x64
+		{4214047C-F5C1-40B3-8369-5DCED8C32770}.Debug (Win32)|Win32.ActiveCfg = Debug (Win32)|Win32
+		{4214047C-F5C1-40B3-8369-5DCED8C32770}.Debug (Win32)|Win32.Build.0 = Debug (Win32)|Win32
+		{4214047C-F5C1-40B3-8369-5DCED8C32770}.Debug (Win32)|x64.ActiveCfg = Debug (Win32)|x64
+		{4214047C-F5C1-40B3-8369-5DCED8C32770}.Debug (Win32)|x64.Build.0 = Debug (Win32)|x64
+		{4214047C-F5C1-40B3-8369-5DCED8C32770}.Debug (Win32)|x86.ActiveCfg = Debug (Win32)|x64
+		{4214047C-F5C1-40B3-8369-5DCED8C32770}.Debug|Any CPU.ActiveCfg = Debug|x64
+		{4214047C-F5C1-40B3-8369-5DCED8C32770}.Debug|Mixed Platforms.ActiveCfg = Debug|x64
+		{4214047C-F5C1-40B3-8369-5DCED8C32770}.Debug|Win32.ActiveCfg = Debug|Win32
+		{4214047C-F5C1-40B3-8369-5DCED8C32770}.Debug|Win32.Build.0 = Debug|Win32
+		{4214047C-F5C1-40B3-8369-5DCED8C32770}.Debug|x64.ActiveCfg = Debug|x64
+		{4214047C-F5C1-40B3-8369-5DCED8C32770}.Debug|x64.Build.0 = Debug|x64
+		{4214047C-F5C1-40B3-8369-5DCED8C32770}.Debug|x86.ActiveCfg = Debug|x64
+		{4214047C-F5C1-40B3-8369-5DCED8C32770}.Release|Any CPU.ActiveCfg = Release|x64
+		{4214047C-F5C1-40B3-8369-5DCED8C32770}.Release|Mixed Platforms.ActiveCfg = Release|x64
+		{4214047C-F5C1-40B3-8369-5DCED8C32770}.Release|Win32.ActiveCfg = Release|Win32
+		{4214047C-F5C1-40B3-8369-5DCED8C32770}.Release|Win32.Build.0 = Release|Win32
+		{4214047C-F5C1-40B3-8369-5DCED8C32770}.Release|x64.ActiveCfg = Release|x64
+		{4214047C-F5C1-40B3-8369-5DCED8C32770}.Release|x64.Build.0 = Release|x64
+		{4214047C-F5C1-40B3-8369-5DCED8C32770}.Release|x86.ActiveCfg = Release|x64
+		{4214047C-F5C1-40B3-8369-5DCED8C32770}.ReleaseWdkCrt|Any CPU.ActiveCfg = ReleaseWdkCrt|x64
+		{4214047C-F5C1-40B3-8369-5DCED8C32770}.ReleaseWdkCrt|Mixed Platforms.ActiveCfg = ReleaseWdkCrt|x64
+		{4214047C-F5C1-40B3-8369-5DCED8C32770}.ReleaseWdkCrt|Win32.ActiveCfg = ReleaseWdkCrt|Win32
+		{4214047C-F5C1-40B3-8369-5DCED8C32770}.ReleaseWdkCrt|Win32.Build.0 = ReleaseWdkCrt|Win32
+		{4214047C-F5C1-40B3-8369-5DCED8C32770}.ReleaseWdkCrt|x64.ActiveCfg = ReleaseWdkCrt|x64
+		{4214047C-F5C1-40B3-8369-5DCED8C32770}.ReleaseWdkCrt|x64.Build.0 = ReleaseWdkCrt|x64
+		{4214047C-F5C1-40B3-8369-5DCED8C32770}.ReleaseWdkCrt|x86.ActiveCfg = ReleaseWdkCrt|x64
+		{F172EFFC-E30F-4593-809E-DB2024B1E753}.Debug (Win32)|Any CPU.ActiveCfg = Debug (Win32)|x64
+		{F172EFFC-E30F-4593-809E-DB2024B1E753}.Debug (Win32)|Mixed Platforms.ActiveCfg = Debug (Win32)|x64
+		{F172EFFC-E30F-4593-809E-DB2024B1E753}.Debug (Win32)|Mixed Platforms.Build.0 = Debug (Win32)|x64
+		{F172EFFC-E30F-4593-809E-DB2024B1E753}.Debug (Win32)|Win32.ActiveCfg = Debug (Win32)|Win32
+		{F172EFFC-E30F-4593-809E-DB2024B1E753}.Debug (Win32)|Win32.Build.0 = Debug (Win32)|Win32
+		{F172EFFC-E30F-4593-809E-DB2024B1E753}.Debug (Win32)|x64.ActiveCfg = Debug (Win32)|x64
+		{F172EFFC-E30F-4593-809E-DB2024B1E753}.Debug (Win32)|x64.Build.0 = Debug (Win32)|x64
+		{F172EFFC-E30F-4593-809E-DB2024B1E753}.Debug (Win32)|x86.ActiveCfg = Debug (Win32)|x64
+		{F172EFFC-E30F-4593-809E-DB2024B1E753}.Debug|Any CPU.ActiveCfg = Debug|x64
+		{F172EFFC-E30F-4593-809E-DB2024B1E753}.Debug|Mixed Platforms.ActiveCfg = Debug|x64
+		{F172EFFC-E30F-4593-809E-DB2024B1E753}.Debug|Win32.ActiveCfg = Debug|Win32
+		{F172EFFC-E30F-4593-809E-DB2024B1E753}.Debug|Win32.Build.0 = Debug|Win32
+		{F172EFFC-E30F-4593-809E-DB2024B1E753}.Debug|x64.ActiveCfg = Debug|x64
+		{F172EFFC-E30F-4593-809E-DB2024B1E753}.Debug|x64.Build.0 = Debug|x64
+		{F172EFFC-E30F-4593-809E-DB2024B1E753}.Debug|x86.ActiveCfg = Debug|x64
+		{F172EFFC-E30F-4593-809E-DB2024B1E753}.Release|Any CPU.ActiveCfg = Release|x64
+		{F172EFFC-E30F-4593-809E-DB2024B1E753}.Release|Mixed Platforms.ActiveCfg = Release|x64
+		{F172EFFC-E30F-4593-809E-DB2024B1E753}.Release|Win32.ActiveCfg = Release|Win32
+		{F172EFFC-E30F-4593-809E-DB2024B1E753}.Release|Win32.Build.0 = Release|Win32
+		{F172EFFC-E30F-4593-809E-DB2024B1E753}.Release|x64.ActiveCfg = Release|x64
+		{F172EFFC-E30F-4593-809E-DB2024B1E753}.Release|x64.Build.0 = Release|x64
+		{F172EFFC-E30F-4593-809E-DB2024B1E753}.Release|x86.ActiveCfg = Release|x64
+		{F172EFFC-E30F-4593-809E-DB2024B1E753}.ReleaseWdkCrt|Any CPU.ActiveCfg = ReleaseWdkCrt|x64
+		{F172EFFC-E30F-4593-809E-DB2024B1E753}.ReleaseWdkCrt|Mixed Platforms.ActiveCfg = ReleaseWdkCrt|x64
+		{F172EFFC-E30F-4593-809E-DB2024B1E753}.ReleaseWdkCrt|Win32.ActiveCfg = ReleaseWdkCrt|Win32
+		{F172EFFC-E30F-4593-809E-DB2024B1E753}.ReleaseWdkCrt|Win32.Build.0 = ReleaseWdkCrt|Win32
+		{F172EFFC-E30F-4593-809E-DB2024B1E753}.ReleaseWdkCrt|x64.ActiveCfg = ReleaseWdkCrt|x64
+		{F172EFFC-E30F-4593-809E-DB2024B1E753}.ReleaseWdkCrt|x64.Build.0 = ReleaseWdkCrt|x64
+		{F172EFFC-E30F-4593-809E-DB2024B1E753}.ReleaseWdkCrt|x86.ActiveCfg = ReleaseWdkCrt|x64
+		{C8AFB8C3-FFFD-460F-BC13-9AC25D7B117C}.Debug (Win32)|Any CPU.ActiveCfg = Debug (Win32)|x64
+		{C8AFB8C3-FFFD-460F-BC13-9AC25D7B117C}.Debug (Win32)|Mixed Platforms.ActiveCfg = Debug (Win32)|x64
+		{C8AFB8C3-FFFD-460F-BC13-9AC25D7B117C}.Debug (Win32)|Mixed Platforms.Build.0 = Debug (Win32)|x64
+		{C8AFB8C3-FFFD-460F-BC13-9AC25D7B117C}.Debug (Win32)|Win32.ActiveCfg = Debug (Win32)|Win32
+		{C8AFB8C3-FFFD-460F-BC13-9AC25D7B117C}.Debug (Win32)|Win32.Build.0 = Debug (Win32)|Win32
+		{C8AFB8C3-FFFD-460F-BC13-9AC25D7B117C}.Debug (Win32)|x64.ActiveCfg = Debug (Win32)|x64
+		{C8AFB8C3-FFFD-460F-BC13-9AC25D7B117C}.Debug (Win32)|x64.Build.0 = Debug (Win32)|x64
+		{C8AFB8C3-FFFD-460F-BC13-9AC25D7B117C}.Debug (Win32)|x86.ActiveCfg = Debug (Win32)|x64
+		{C8AFB8C3-FFFD-460F-BC13-9AC25D7B117C}.Debug|Any CPU.ActiveCfg = Debug|x64
+		{C8AFB8C3-FFFD-460F-BC13-9AC25D7B117C}.Debug|Mixed Platforms.ActiveCfg = Debug|x64
+		{C8AFB8C3-FFFD-460F-BC13-9AC25D7B117C}.Debug|Win32.ActiveCfg = Debug|Win32
+		{C8AFB8C3-FFFD-460F-BC13-9AC25D7B117C}.Debug|Win32.Build.0 = Debug|Win32
+		{C8AFB8C3-FFFD-460F-BC13-9AC25D7B117C}.Debug|x64.ActiveCfg = Debug|x64
+		{C8AFB8C3-FFFD-460F-BC13-9AC25D7B117C}.Debug|x64.Build.0 = Debug|x64
+		{C8AFB8C3-FFFD-460F-BC13-9AC25D7B117C}.Debug|x86.ActiveCfg = Debug|x64
+		{C8AFB8C3-FFFD-460F-BC13-9AC25D7B117C}.Release|Any CPU.ActiveCfg = Release|x64
+		{C8AFB8C3-FFFD-460F-BC13-9AC25D7B117C}.Release|Mixed Platforms.ActiveCfg = Release|x64
+		{C8AFB8C3-FFFD-460F-BC13-9AC25D7B117C}.Release|Win32.ActiveCfg = Release|Win32
+		{C8AFB8C3-FFFD-460F-BC13-9AC25D7B117C}.Release|Win32.Build.0 = Release|Win32
+		{C8AFB8C3-FFFD-460F-BC13-9AC25D7B117C}.Release|x64.ActiveCfg = Release|x64
+		{C8AFB8C3-FFFD-460F-BC13-9AC25D7B117C}.Release|x64.Build.0 = Release|x64
+		{C8AFB8C3-FFFD-460F-BC13-9AC25D7B117C}.Release|x86.ActiveCfg = Release|x64
+		{C8AFB8C3-FFFD-460F-BC13-9AC25D7B117C}.ReleaseWdkCrt|Any CPU.ActiveCfg = ReleaseWdkCrt|x64
+		{C8AFB8C3-FFFD-460F-BC13-9AC25D7B117C}.ReleaseWdkCrt|Mixed Platforms.ActiveCfg = ReleaseWdkCrt|x64
+		{C8AFB8C3-FFFD-460F-BC13-9AC25D7B117C}.ReleaseWdkCrt|Win32.ActiveCfg = ReleaseWdkCrt|Win32
+		{C8AFB8C3-FFFD-460F-BC13-9AC25D7B117C}.ReleaseWdkCrt|Win32.Build.0 = ReleaseWdkCrt|Win32
+		{C8AFB8C3-FFFD-460F-BC13-9AC25D7B117C}.ReleaseWdkCrt|x64.ActiveCfg = ReleaseWdkCrt|x64
+		{C8AFB8C3-FFFD-460F-BC13-9AC25D7B117C}.ReleaseWdkCrt|x64.Build.0 = ReleaseWdkCrt|x64
+		{C8AFB8C3-FFFD-460F-BC13-9AC25D7B117C}.ReleaseWdkCrt|x86.ActiveCfg = ReleaseWdkCrt|x64
+		{AE3F6497-7880-4C08-B6E2-3AF05BCFB671}.Debug (Win32)|Any CPU.ActiveCfg = Debug (Win32)|x64
+		{AE3F6497-7880-4C08-B6E2-3AF05BCFB671}.Debug (Win32)|Mixed Platforms.ActiveCfg = Debug (Win32)|x64
+		{AE3F6497-7880-4C08-B6E2-3AF05BCFB671}.Debug (Win32)|Mixed Platforms.Build.0 = Debug (Win32)|x64
+		{AE3F6497-7880-4C08-B6E2-3AF05BCFB671}.Debug (Win32)|Win32.ActiveCfg = Debug (Win32)|Win32
+		{AE3F6497-7880-4C08-B6E2-3AF05BCFB671}.Debug (Win32)|Win32.Build.0 = Debug (Win32)|Win32
+		{AE3F6497-7880-4C08-B6E2-3AF05BCFB671}.Debug (Win32)|x64.ActiveCfg = Debug (Win32)|x64
+		{AE3F6497-7880-4C08-B6E2-3AF05BCFB671}.Debug (Win32)|x64.Build.0 = Debug (Win32)|x64
+		{AE3F6497-7880-4C08-B6E2-3AF05BCFB671}.Debug (Win32)|x86.ActiveCfg = Debug (Win32)|x64
+		{AE3F6497-7880-4C08-B6E2-3AF05BCFB671}.Debug|Any CPU.ActiveCfg = Debug|x64
+		{AE3F6497-7880-4C08-B6E2-3AF05BCFB671}.Debug|Mixed Platforms.ActiveCfg = Debug|x64
+		{AE3F6497-7880-4C08-B6E2-3AF05BCFB671}.Debug|Win32.ActiveCfg = Debug|Win32
+		{AE3F6497-7880-4C08-B6E2-3AF05BCFB671}.Debug|Win32.Build.0 = Debug|Win32
+		{AE3F6497-7880-4C08-B6E2-3AF05BCFB671}.Debug|x64.ActiveCfg = Debug|x64
+		{AE3F6497-7880-4C08-B6E2-3AF05BCFB671}.Debug|x64.Build.0 = Debug|x64
+		{AE3F6497-7880-4C08-B6E2-3AF05BCFB671}.Debug|x86.ActiveCfg = Debug|x64
+		{AE3F6497-7880-4C08-B6E2-3AF05BCFB671}.Release|Any CPU.ActiveCfg = Release|x64
+		{AE3F6497-7880-4C08-B6E2-3AF05BCFB671}.Release|Mixed Platforms.ActiveCfg = Release|x64
+		{AE3F6497-7880-4C08-B6E2-3AF05BCFB671}.Release|Win32.ActiveCfg = Release|Win32
+		{AE3F6497-7880-4C08-B6E2-3AF05BCFB671}.Release|Win32.Build.0 = Release|Win32
+		{AE3F6497-7880-4C08-B6E2-3AF05BCFB671}.Release|x64.ActiveCfg = Release|x64
+		{AE3F6497-7880-4C08-B6E2-3AF05BCFB671}.Release|x64.Build.0 = Release|x64
+		{AE3F6497-7880-4C08-B6E2-3AF05BCFB671}.Release|x86.ActiveCfg = Release|x64
+		{AE3F6497-7880-4C08-B6E2-3AF05BCFB671}.ReleaseWdkCrt|Any CPU.ActiveCfg = ReleaseWdkCrt|x64
+		{AE3F6497-7880-4C08-B6E2-3AF05BCFB671}.ReleaseWdkCrt|Mixed Platforms.ActiveCfg = ReleaseWdkCrt|x64
+		{AE3F6497-7880-4C08-B6E2-3AF05BCFB671}.ReleaseWdkCrt|Win32.ActiveCfg = ReleaseWdkCrt|Win32
+		{AE3F6497-7880-4C08-B6E2-3AF05BCFB671}.ReleaseWdkCrt|Win32.Build.0 = ReleaseWdkCrt|Win32
+		{AE3F6497-7880-4C08-B6E2-3AF05BCFB671}.ReleaseWdkCrt|x64.ActiveCfg = ReleaseWdkCrt|x64
+		{AE3F6497-7880-4C08-B6E2-3AF05BCFB671}.ReleaseWdkCrt|x64.Build.0 = ReleaseWdkCrt|x64
+		{AE3F6497-7880-4C08-B6E2-3AF05BCFB671}.ReleaseWdkCrt|x86.ActiveCfg = ReleaseWdkCrt|x64
+		{4CEE3392-89AC-4367-B219-42360CF91CBB}.Debug (Win32)|Any CPU.ActiveCfg = Debug (Win32)|x64
+		{4CEE3392-89AC-4367-B219-42360CF91CBB}.Debug (Win32)|Mixed Platforms.ActiveCfg = Debug (Win32)|x64
+		{4CEE3392-89AC-4367-B219-42360CF91CBB}.Debug (Win32)|Mixed Platforms.Build.0 = Debug (Win32)|x64
+		{4CEE3392-89AC-4367-B219-42360CF91CBB}.Debug (Win32)|Win32.ActiveCfg = Debug (Win32)|Win32
+		{4CEE3392-89AC-4367-B219-42360CF91CBB}.Debug (Win32)|Win32.Build.0 = Debug (Win32)|Win32
+		{4CEE3392-89AC-4367-B219-42360CF91CBB}.Debug (Win32)|x64.ActiveCfg = Debug (Win32)|x64
+		{4CEE3392-89AC-4367-B219-42360CF91CBB}.Debug (Win32)|x64.Build.0 = Debug (Win32)|x64
+		{4CEE3392-89AC-4367-B219-42360CF91CBB}.Debug (Win32)|x86.ActiveCfg = Debug (Win32)|x64
+		{4CEE3392-89AC-4367-B219-42360CF91CBB}.Debug|Any CPU.ActiveCfg = Debug|x64
+		{4CEE3392-89AC-4367-B219-42360CF91CBB}.Debug|Mixed Platforms.ActiveCfg = Debug|x64
+		{4CEE3392-89AC-4367-B219-42360CF91CBB}.Debug|Win32.ActiveCfg = Debug|Win32
+		{4CEE3392-89AC-4367-B219-42360CF91CBB}.Debug|Win32.Build.0 = Debug|Win32
+		{4CEE3392-89AC-4367-B219-42360CF91CBB}.Debug|x64.ActiveCfg = Debug|x64
+		{4CEE3392-89AC-4367-B219-42360CF91CBB}.Debug|x64.Build.0 = Debug|x64
+		{4CEE3392-89AC-4367-B219-42360CF91CBB}.Debug|x86.ActiveCfg = Debug|x64
+		{4CEE3392-89AC-4367-B219-42360CF91CBB}.Release|Any CPU.ActiveCfg = Release|x64
+		{4CEE3392-89AC-4367-B219-42360CF91CBB}.Release|Mixed Platforms.ActiveCfg = Release|x64
+		{4CEE3392-89AC-4367-B219-42360CF91CBB}.Release|Win32.ActiveCfg = Release|Win32
+		{4CEE3392-89AC-4367-B219-42360CF91CBB}.Release|Win32.Build.0 = Release|Win32
+		{4CEE3392-89AC-4367-B219-42360CF91CBB}.Release|x64.ActiveCfg = Release|x64
+		{4CEE3392-89AC-4367-B219-42360CF91CBB}.Release|x64.Build.0 = Release|x64
+		{4CEE3392-89AC-4367-B219-42360CF91CBB}.Release|x86.ActiveCfg = Release|x64
+		{4CEE3392-89AC-4367-B219-42360CF91CBB}.ReleaseWdkCrt|Any CPU.ActiveCfg = ReleaseWdkCrt|x64
+		{4CEE3392-89AC-4367-B219-42360CF91CBB}.ReleaseWdkCrt|Mixed Platforms.ActiveCfg = ReleaseWdkCrt|x64
+		{4CEE3392-89AC-4367-B219-42360CF91CBB}.ReleaseWdkCrt|Win32.ActiveCfg = ReleaseWdkCrt|Win32
+		{4CEE3392-89AC-4367-B219-42360CF91CBB}.ReleaseWdkCrt|Win32.Build.0 = ReleaseWdkCrt|Win32
+		{4CEE3392-89AC-4367-B219-42360CF91CBB}.ReleaseWdkCrt|x64.ActiveCfg = ReleaseWdkCrt|x64
+		{4CEE3392-89AC-4367-B219-42360CF91CBB}.ReleaseWdkCrt|x64.Build.0 = ReleaseWdkCrt|x64
+		{4CEE3392-89AC-4367-B219-42360CF91CBB}.ReleaseWdkCrt|x86.ActiveCfg = ReleaseWdkCrt|x64
+		{CB7DC8B9-C2B8-4352-908E-9230BA9906EE}.Debug (Win32)|Any CPU.ActiveCfg = Debug (Win32)|x64
+		{CB7DC8B9-C2B8-4352-908E-9230BA9906EE}.Debug (Win32)|Mixed Platforms.ActiveCfg = Debug (Win32)|x64
+		{CB7DC8B9-C2B8-4352-908E-9230BA9906EE}.Debug (Win32)|Mixed Platforms.Build.0 = Debug (Win32)|x64
+		{CB7DC8B9-C2B8-4352-908E-9230BA9906EE}.Debug (Win32)|Win32.ActiveCfg = Debug (Win32)|Win32
+		{CB7DC8B9-C2B8-4352-908E-9230BA9906EE}.Debug (Win32)|Win32.Build.0 = Debug (Win32)|Win32
+		{CB7DC8B9-C2B8-4352-908E-9230BA9906EE}.Debug (Win32)|x64.ActiveCfg = Debug (Win32)|x64
+		{CB7DC8B9-C2B8-4352-908E-9230BA9906EE}.Debug (Win32)|x64.Build.0 = Debug (Win32)|x64
+		{CB7DC8B9-C2B8-4352-908E-9230BA9906EE}.Debug (Win32)|x86.ActiveCfg = Debug (Win32)|x64
+		{CB7DC8B9-C2B8-4352-908E-9230BA9906EE}.Debug|Any CPU.ActiveCfg = Debug|x64
+		{CB7DC8B9-C2B8-4352-908E-9230BA9906EE}.Debug|Mixed Platforms.ActiveCfg = Debug|x64
+		{CB7DC8B9-C2B8-4352-908E-9230BA9906EE}.Debug|Win32.ActiveCfg = Debug|Win32
+		{CB7DC8B9-C2B8-4352-908E-9230BA9906EE}.Debug|Win32.Build.0 = Debug|Win32
+		{CB7DC8B9-C2B8-4352-908E-9230BA9906EE}.Debug|x64.ActiveCfg = Debug|x64
+		{CB7DC8B9-C2B8-4352-908E-9230BA9906EE}.Debug|x64.Build.0 = Debug|x64
+		{CB7DC8B9-C2B8-4352-908E-9230BA9906EE}.Debug|x86.ActiveCfg = Debug|x64
+		{CB7DC8B9-C2B8-4352-908E-9230BA9906EE}.Release|Any CPU.ActiveCfg = Release|x64
+		{CB7DC8B9-C2B8-4352-908E-9230BA9906EE}.Release|Mixed Platforms.ActiveCfg = Release|x64
+		{CB7DC8B9-C2B8-4352-908E-9230BA9906EE}.Release|Win32.ActiveCfg = Release|Win32
+		{CB7DC8B9-C2B8-4352-908E-9230BA9906EE}.Release|Win32.Build.0 = Release|Win32
+		{CB7DC8B9-C2B8-4352-908E-9230BA9906EE}.Release|x64.ActiveCfg = Release|x64
+		{CB7DC8B9-C2B8-4352-908E-9230BA9906EE}.Release|x64.Build.0 = Release|x64
+		{CB7DC8B9-C2B8-4352-908E-9230BA9906EE}.Release|x86.ActiveCfg = Release|x64
+		{CB7DC8B9-C2B8-4352-908E-9230BA9906EE}.ReleaseWdkCrt|Any CPU.ActiveCfg = ReleaseWdkCrt|x64
+		{CB7DC8B9-C2B8-4352-908E-9230BA9906EE}.ReleaseWdkCrt|Mixed Platforms.ActiveCfg = ReleaseWdkCrt|x64
+		{CB7DC8B9-C2B8-4352-908E-9230BA9906EE}.ReleaseWdkCrt|Win32.ActiveCfg = ReleaseWdkCrt|Win32
+		{CB7DC8B9-C2B8-4352-908E-9230BA9906EE}.ReleaseWdkCrt|Win32.Build.0 = ReleaseWdkCrt|Win32
+		{CB7DC8B9-C2B8-4352-908E-9230BA9906EE}.ReleaseWdkCrt|x64.ActiveCfg = ReleaseWdkCrt|x64
+		{CB7DC8B9-C2B8-4352-908E-9230BA9906EE}.ReleaseWdkCrt|x64.Build.0 = ReleaseWdkCrt|x64
+		{CB7DC8B9-C2B8-4352-908E-9230BA9906EE}.ReleaseWdkCrt|x86.ActiveCfg = ReleaseWdkCrt|x64
+		{66757FD0-C29F-4744-9C52-CE79E7E4289F}.Debug (Win32)|Any CPU.ActiveCfg = Debug (Win32)|x64
+		{66757FD0-C29F-4744-9C52-CE79E7E4289F}.Debug (Win32)|Mixed Platforms.ActiveCfg = Debug (Win32)|x64
+		{66757FD0-C29F-4744-9C52-CE79E7E4289F}.Debug (Win32)|Mixed Platforms.Build.0 = Debug (Win32)|x64
+		{66757FD0-C29F-4744-9C52-CE79E7E4289F}.Debug (Win32)|Win32.ActiveCfg = Debug (Win32)|Win32
+		{66757FD0-C29F-4744-9C52-CE79E7E4289F}.Debug (Win32)|Win32.Build.0 = Debug (Win32)|Win32
+		{66757FD0-C29F-4744-9C52-CE79E7E4289F}.Debug (Win32)|x64.ActiveCfg = Debug (Win32)|x64
+		{66757FD0-C29F-4744-9C52-CE79E7E4289F}.Debug (Win32)|x64.Build.0 = Debug (Win32)|x64
+		{66757FD0-C29F-4744-9C52-CE79E7E4289F}.Debug (Win32)|x86.ActiveCfg = Debug (Win32)|x64
+		{66757FD0-C29F-4744-9C52-CE79E7E4289F}.Debug|Any CPU.ActiveCfg = Debug|x64
+		{66757FD0-C29F-4744-9C52-CE79E7E4289F}.Debug|Mixed Platforms.ActiveCfg = Debug|x64
+		{66757FD0-C29F-4744-9C52-CE79E7E4289F}.Debug|Win32.ActiveCfg = Debug|Win32
+		{66757FD0-C29F-4744-9C52-CE79E7E4289F}.Debug|Win32.Build.0 = Debug|Win32
+		{66757FD0-C29F-4744-9C52-CE79E7E4289F}.Debug|x64.ActiveCfg = Debug|x64
+		{66757FD0-C29F-4744-9C52-CE79E7E4289F}.Debug|x64.Build.0 = Debug|x64
+		{66757FD0-C29F-4744-9C52-CE79E7E4289F}.Debug|x86.ActiveCfg = Debug|x64
+		{66757FD0-C29F-4744-9C52-CE79E7E4289F}.Release|Any CPU.ActiveCfg = Release|x64
+		{66757FD0-C29F-4744-9C52-CE79E7E4289F}.Release|Mixed Platforms.ActiveCfg = Release|x64
+		{66757FD0-C29F-4744-9C52-CE79E7E4289F}.Release|Win32.ActiveCfg = Release|Win32
+		{66757FD0-C29F-4744-9C52-CE79E7E4289F}.Release|Win32.Build.0 = Release|Win32
+		{66757FD0-C29F-4744-9C52-CE79E7E4289F}.Release|x64.ActiveCfg = Release|x64
+		{66757FD0-C29F-4744-9C52-CE79E7E4289F}.Release|x64.Build.0 = Release|x64
+		{66757FD0-C29F-4744-9C52-CE79E7E4289F}.Release|x86.ActiveCfg = Release|x64
+		{66757FD0-C29F-4744-9C52-CE79E7E4289F}.ReleaseWdkCrt|Any CPU.ActiveCfg = ReleaseWdkCrt|x64
+		{66757FD0-C29F-4744-9C52-CE79E7E4289F}.ReleaseWdkCrt|Mixed Platforms.ActiveCfg = ReleaseWdkCrt|x64
+		{66757FD0-C29F-4744-9C52-CE79E7E4289F}.ReleaseWdkCrt|Win32.ActiveCfg = ReleaseWdkCrt|Win32
+		{66757FD0-C29F-4744-9C52-CE79E7E4289F}.ReleaseWdkCrt|Win32.Build.0 = ReleaseWdkCrt|Win32
+		{66757FD0-C29F-4744-9C52-CE79E7E4289F}.ReleaseWdkCrt|x64.ActiveCfg = ReleaseWdkCrt|x64
+		{66757FD0-C29F-4744-9C52-CE79E7E4289F}.ReleaseWdkCrt|x64.Build.0 = ReleaseWdkCrt|x64
+		{66757FD0-C29F-4744-9C52-CE79E7E4289F}.ReleaseWdkCrt|x86.ActiveCfg = ReleaseWdkCrt|x64
+		{E28A4D3E-E995-499D-A920-D155E5EA4A79}.Debug (Win32)|Any CPU.ActiveCfg = Debug (Win32)|x64
+		{E28A4D3E-E995-499D-A920-D155E5EA4A79}.Debug (Win32)|Mixed Platforms.ActiveCfg = Debug (Win32)|x64
+		{E28A4D3E-E995-499D-A920-D155E5EA4A79}.Debug (Win32)|Mixed Platforms.Build.0 = Debug (Win32)|x64
+		{E28A4D3E-E995-499D-A920-D155E5EA4A79}.Debug (Win32)|Win32.ActiveCfg = Debug (Win32)|Win32
+		{E28A4D3E-E995-499D-A920-D155E5EA4A79}.Debug (Win32)|Win32.Build.0 = Debug (Win32)|Win32
+		{E28A4D3E-E995-499D-A920-D155E5EA4A79}.Debug (Win32)|x64.ActiveCfg = Debug (Win32)|x64
+		{E28A4D3E-E995-499D-A920-D155E5EA4A79}.Debug (Win32)|x64.Build.0 = Debug (Win32)|x64
+		{E28A4D3E-E995-499D-A920-D155E5EA4A79}.Debug (Win32)|x86.ActiveCfg = Debug (Win32)|x64
+		{E28A4D3E-E995-499D-A920-D155E5EA4A79}.Debug|Any CPU.ActiveCfg = Debug|x64
+		{E28A4D3E-E995-499D-A920-D155E5EA4A79}.Debug|Mixed Platforms.ActiveCfg = Debug|x64
+		{E28A4D3E-E995-499D-A920-D155E5EA4A79}.Debug|Win32.ActiveCfg = Debug|Win32
+		{E28A4D3E-E995-499D-A920-D155E5EA4A79}.Debug|Win32.Build.0 = Debug|Win32
+		{E28A4D3E-E995-499D-A920-D155E5EA4A79}.Debug|x64.ActiveCfg = Debug|x64
+		{E28A4D3E-E995-499D-A920-D155E5EA4A79}.Debug|x64.Build.0 = Debug|x64
+		{E28A4D3E-E995-499D-A920-D155E5EA4A79}.Debug|x86.ActiveCfg = Debug|x64
+		{E28A4D3E-E995-499D-A920-D155E5EA4A79}.Release|Any CPU.ActiveCfg = Release|x64
+		{E28A4D3E-E995-499D-A920-D155E5EA4A79}.Release|Mixed Platforms.ActiveCfg = Release|x64
+		{E28A4D3E-E995-499D-A920-D155E5EA4A79}.Release|Win32.ActiveCfg = Release|Win32
+		{E28A4D3E-E995-499D-A920-D155E5EA4A79}.Release|Win32.Build.0 = Release|Win32
+		{E28A4D3E-E995-499D-A920-D155E5EA4A79}.Release|x64.ActiveCfg = Release|x64
+		{E28A4D3E-E995-499D-A920-D155E5EA4A79}.Release|x64.Build.0 = Release|x64
+		{E28A4D3E-E995-499D-A920-D155E5EA4A79}.Release|x86.ActiveCfg = Release|x64
+		{E28A4D3E-E995-499D-A920-D155E5EA4A79}.ReleaseWdkCrt|Any CPU.ActiveCfg = ReleaseWdkCrt|x64
+		{E28A4D3E-E995-499D-A920-D155E5EA4A79}.ReleaseWdkCrt|Mixed Platforms.ActiveCfg = ReleaseWdkCrt|x64
+		{E28A4D3E-E995-499D-A920-D155E5EA4A79}.ReleaseWdkCrt|Win32.ActiveCfg = ReleaseWdkCrt|Win32
+		{E28A4D3E-E995-499D-A920-D155E5EA4A79}.ReleaseWdkCrt|Win32.Build.0 = ReleaseWdkCrt|Win32
+		{E28A4D3E-E995-499D-A920-D155E5EA4A79}.ReleaseWdkCrt|x64.ActiveCfg = ReleaseWdkCrt|x64
+		{E28A4D3E-E995-499D-A920-D155E5EA4A79}.ReleaseWdkCrt|x64.Build.0 = ReleaseWdkCrt|x64
+		{E28A4D3E-E995-499D-A920-D155E5EA4A79}.ReleaseWdkCrt|x86.ActiveCfg = ReleaseWdkCrt|x64
+		{860FFAEE-5D5F-44DA-8ED0-0F6987229545}.Debug (Win32)|Any CPU.ActiveCfg = Debug (Win32)|x64
+		{860FFAEE-5D5F-44DA-8ED0-0F6987229545}.Debug (Win32)|Mixed Platforms.ActiveCfg = Debug (Win32)|x64
+		{860FFAEE-5D5F-44DA-8ED0-0F6987229545}.Debug (Win32)|Mixed Platforms.Build.0 = Debug (Win32)|x64
+		{860FFAEE-5D5F-44DA-8ED0-0F6987229545}.Debug (Win32)|Win32.ActiveCfg = Debug (Win32)|Win32
+		{860FFAEE-5D5F-44DA-8ED0-0F6987229545}.Debug (Win32)|Win32.Build.0 = Debug (Win32)|Win32
+		{860FFAEE-5D5F-44DA-8ED0-0F6987229545}.Debug (Win32)|x64.ActiveCfg = Debug (Win32)|x64
+		{860FFAEE-5D5F-44DA-8ED0-0F6987229545}.Debug (Win32)|x64.Build.0 = Debug (Win32)|x64
+		{860FFAEE-5D5F-44DA-8ED0-0F6987229545}.Debug (Win32)|x86.ActiveCfg = Debug (Win32)|x64
+		{860FFAEE-5D5F-44DA-8ED0-0F6987229545}.Debug|Any CPU.ActiveCfg = Debug|x64
+		{860FFAEE-5D5F-44DA-8ED0-0F6987229545}.Debug|Mixed Platforms.ActiveCfg = Debug|x64
+		{860FFAEE-5D5F-44DA-8ED0-0F6987229545}.Debug|Win32.ActiveCfg = Debug|Win32
+		{860FFAEE-5D5F-44DA-8ED0-0F6987229545}.Debug|Win32.Build.0 = Debug|Win32
+		{860FFAEE-5D5F-44DA-8ED0-0F6987229545}.Debug|x64.ActiveCfg = Debug|x64
+		{860FFAEE-5D5F-44DA-8ED0-0F6987229545}.Debug|x64.Build.0 = Debug|x64
+		{860FFAEE-5D5F-44DA-8ED0-0F6987229545}.Debug|x86.ActiveCfg = Debug|x64
+		{860FFAEE-5D5F-44DA-8ED0-0F6987229545}.Release|Any CPU.ActiveCfg = Release|x64
+		{860FFAEE-5D5F-44DA-8ED0-0F6987229545}.Release|Mixed Platforms.ActiveCfg = Release|x64
+		{860FFAEE-5D5F-44DA-8ED0-0F6987229545}.Release|Win32.ActiveCfg = Release|Win32
+		{860FFAEE-5D5F-44DA-8ED0-0F6987229545}.Release|Win32.Build.0 = Release|Win32
+		{860FFAEE-5D5F-44DA-8ED0-0F6987229545}.Release|x64.ActiveCfg = Release|x64
+		{860FFAEE-5D5F-44DA-8ED0-0F6987229545}.Release|x64.Build.0 = Release|x64
+		{860FFAEE-5D5F-44DA-8ED0-0F6987229545}.Release|x86.ActiveCfg = Release|x64
+		{860FFAEE-5D5F-44DA-8ED0-0F6987229545}.ReleaseWdkCrt|Any CPU.ActiveCfg = ReleaseWdkCrt|x64
+		{860FFAEE-5D5F-44DA-8ED0-0F6987229545}.ReleaseWdkCrt|Mixed Platforms.ActiveCfg = ReleaseWdkCrt|x64
+		{860FFAEE-5D5F-44DA-8ED0-0F6987229545}.ReleaseWdkCrt|Win32.ActiveCfg = ReleaseWdkCrt|Win32
+		{860FFAEE-5D5F-44DA-8ED0-0F6987229545}.ReleaseWdkCrt|Win32.Build.0 = ReleaseWdkCrt|Win32
+		{860FFAEE-5D5F-44DA-8ED0-0F6987229545}.ReleaseWdkCrt|x64.ActiveCfg = ReleaseWdkCrt|x64
+		{860FFAEE-5D5F-44DA-8ED0-0F6987229545}.ReleaseWdkCrt|x64.Build.0 = ReleaseWdkCrt|x64
+		{860FFAEE-5D5F-44DA-8ED0-0F6987229545}.ReleaseWdkCrt|x86.ActiveCfg = ReleaseWdkCrt|x64
+		{5E7C37E6-65DC-43EA-8C14-B325A8B3B2A7}.Debug (Win32)|Any CPU.ActiveCfg = Debug (Win32)|x64
+		{5E7C37E6-65DC-43EA-8C14-B325A8B3B2A7}.Debug (Win32)|Mixed Platforms.ActiveCfg = Debug (Win32)|x64
+		{5E7C37E6-65DC-43EA-8C14-B325A8B3B2A7}.Debug (Win32)|Mixed Platforms.Build.0 = Debug (Win32)|x64
+		{5E7C37E6-65DC-43EA-8C14-B325A8B3B2A7}.Debug (Win32)|Win32.ActiveCfg = Debug (Win32)|Win32
+		{5E7C37E6-65DC-43EA-8C14-B325A8B3B2A7}.Debug (Win32)|Win32.Build.0 = Debug (Win32)|Win32
+		{5E7C37E6-65DC-43EA-8C14-B325A8B3B2A7}.Debug (Win32)|x64.ActiveCfg = Debug (Win32)|x64
+		{5E7C37E6-65DC-43EA-8C14-B325A8B3B2A7}.Debug (Win32)|x64.Build.0 = Debug (Win32)|x64
+		{5E7C37E6-65DC-43EA-8C14-B325A8B3B2A7}.Debug (Win32)|x86.ActiveCfg = Debug (Win32)|x64
+		{5E7C37E6-65DC-43EA-8C14-B325A8B3B2A7}.Debug|Any CPU.ActiveCfg = Debug|x64
+		{5E7C37E6-65DC-43EA-8C14-B325A8B3B2A7}.Debug|Mixed Platforms.ActiveCfg = Debug|x64
+		{5E7C37E6-65DC-43EA-8C14-B325A8B3B2A7}.Debug|Win32.ActiveCfg = Debug|Win32
+		{5E7C37E6-65DC-43EA-8C14-B325A8B3B2A7}.Debug|Win32.Build.0 = Debug|Win32
+		{5E7C37E6-65DC-43EA-8C14-B325A8B3B2A7}.Debug|x64.ActiveCfg = Debug|x64
+		{5E7C37E6-65DC-43EA-8C14-B325A8B3B2A7}.Debug|x64.Build.0 = Debug|x64
+		{5E7C37E6-65DC-43EA-8C14-B325A8B3B2A7}.Debug|x86.ActiveCfg = Debug|x64
+		{5E7C37E6-65DC-43EA-8C14-B325A8B3B2A7}.Release|Any CPU.ActiveCfg = Release|x64
+		{5E7C37E6-65DC-43EA-8C14-B325A8B3B2A7}.Release|Mixed Platforms.ActiveCfg = Release|x64
+		{5E7C37E6-65DC-43EA-8C14-B325A8B3B2A7}.Release|Win32.ActiveCfg = Release|Win32
+		{5E7C37E6-65DC-43EA-8C14-B325A8B3B2A7}.Release|Win32.Build.0 = Release|Win32
+		{5E7C37E6-65DC-43EA-8C14-B325A8B3B2A7}.Release|x64.ActiveCfg = Release|x64
+		{5E7C37E6-65DC-43EA-8C14-B325A8B3B2A7}.Release|x64.Build.0 = Release|x64
+		{5E7C37E6-65DC-43EA-8C14-B325A8B3B2A7}.Release|x86.ActiveCfg = Release|x64
+		{5E7C37E6-65DC-43EA-8C14-B325A8B3B2A7}.ReleaseWdkCrt|Any CPU.ActiveCfg = ReleaseWdkCrt|x64
+		{5E7C37E6-65DC-43EA-8C14-B325A8B3B2A7}.ReleaseWdkCrt|Mixed Platforms.ActiveCfg = ReleaseWdkCrt|x64
+		{5E7C37E6-65DC-43EA-8C14-B325A8B3B2A7}.ReleaseWdkCrt|Win32.ActiveCfg = ReleaseWdkCrt|Win32
+		{5E7C37E6-65DC-43EA-8C14-B325A8B3B2A7}.ReleaseWdkCrt|Win32.Build.0 = ReleaseWdkCrt|Win32
+		{5E7C37E6-65DC-43EA-8C14-B325A8B3B2A7}.ReleaseWdkCrt|x64.ActiveCfg = ReleaseWdkCrt|x64
+		{5E7C37E6-65DC-43EA-8C14-B325A8B3B2A7}.ReleaseWdkCrt|x64.Build.0 = ReleaseWdkCrt|x64
+		{5E7C37E6-65DC-43EA-8C14-B325A8B3B2A7}.ReleaseWdkCrt|x86.ActiveCfg = ReleaseWdkCrt|x64
+		{9566788F-9AEE-47EB-8FBE-4A1766E805D8}.Debug (Win32)|Any CPU.ActiveCfg = Debug (Win32)|x64
+		{9566788F-9AEE-47EB-8FBE-4A1766E805D8}.Debug (Win32)|Mixed Platforms.ActiveCfg = Debug (Win32)|x64
+		{9566788F-9AEE-47EB-8FBE-4A1766E805D8}.Debug (Win32)|Mixed Platforms.Build.0 = Debug (Win32)|x64
+		{9566788F-9AEE-47EB-8FBE-4A1766E805D8}.Debug (Win32)|Win32.ActiveCfg = Debug (Win32)|Win32
+		{9566788F-9AEE-47EB-8FBE-4A1766E805D8}.Debug (Win32)|Win32.Build.0 = Debug (Win32)|Win32
+		{9566788F-9AEE-47EB-8FBE-4A1766E805D8}.Debug (Win32)|x64.ActiveCfg = Debug (Win32)|x64
+		{9566788F-9AEE-47EB-8FBE-4A1766E805D8}.Debug (Win32)|x64.Build.0 = Debug (Win32)|x64
+		{9566788F-9AEE-47EB-8FBE-4A1766E805D8}.Debug (Win32)|x86.ActiveCfg = Debug (Win32)|x64
+		{9566788F-9AEE-47EB-8FBE-4A1766E805D8}.Debug|Any CPU.ActiveCfg = Debug|x64
+		{9566788F-9AEE-47EB-8FBE-4A1766E805D8}.Debug|Mixed Platforms.ActiveCfg = Debug|x64
+		{9566788F-9AEE-47EB-8FBE-4A1766E805D8}.Debug|Win32.ActiveCfg = Debug|Win32
+		{9566788F-9AEE-47EB-8FBE-4A1766E805D8}.Debug|Win32.Build.0 = Debug|Win32
+		{9566788F-9AEE-47EB-8FBE-4A1766E805D8}.Debug|x64.ActiveCfg = Debug|x64
+		{9566788F-9AEE-47EB-8FBE-4A1766E805D8}.Debug|x64.Build.0 = Debug|x64
+		{9566788F-9AEE-47EB-8FBE-4A1766E805D8}.Debug|x86.ActiveCfg = Debug|x64
+		{9566788F-9AEE-47EB-8FBE-4A1766E805D8}.Release|Any CPU.ActiveCfg = Release|x64
+		{9566788F-9AEE-47EB-8FBE-4A1766E805D8}.Release|Mixed Platforms.ActiveCfg = Release|x64
+		{9566788F-9AEE-47EB-8FBE-4A1766E805D8}.Release|Win32.ActiveCfg = Release|Win32
+		{9566788F-9AEE-47EB-8FBE-4A1766E805D8}.Release|Win32.Build.0 = Release|Win32
+		{9566788F-9AEE-47EB-8FBE-4A1766E805D8}.Release|x64.ActiveCfg = Release|x64
+		{9566788F-9AEE-47EB-8FBE-4A1766E805D8}.Release|x64.Build.0 = Release|x64
+		{9566788F-9AEE-47EB-8FBE-4A1766E805D8}.Release|x86.ActiveCfg = Release|x64
+		{9566788F-9AEE-47EB-8FBE-4A1766E805D8}.ReleaseWdkCrt|Any CPU.ActiveCfg = ReleaseWdkCrt|x64
+		{9566788F-9AEE-47EB-8FBE-4A1766E805D8}.ReleaseWdkCrt|Mixed Platforms.ActiveCfg = ReleaseWdkCrt|x64
+		{9566788F-9AEE-47EB-8FBE-4A1766E805D8}.ReleaseWdkCrt|Win32.ActiveCfg = ReleaseWdkCrt|Win32
+		{9566788F-9AEE-47EB-8FBE-4A1766E805D8}.ReleaseWdkCrt|Win32.Build.0 = ReleaseWdkCrt|Win32
+		{9566788F-9AEE-47EB-8FBE-4A1766E805D8}.ReleaseWdkCrt|x64.ActiveCfg = ReleaseWdkCrt|x64
+		{9566788F-9AEE-47EB-8FBE-4A1766E805D8}.ReleaseWdkCrt|x64.Build.0 = ReleaseWdkCrt|x64
+		{9566788F-9AEE-47EB-8FBE-4A1766E805D8}.ReleaseWdkCrt|x86.ActiveCfg = ReleaseWdkCrt|x64
+		{9F347485-0492-4473-B597-0444687EEE3F}.Debug (Win32)|Any CPU.ActiveCfg = Debug|Win32
+		{9F347485-0492-4473-B597-0444687EEE3F}.Debug (Win32)|Mixed Platforms.ActiveCfg = Debug|Win32
+		{9F347485-0492-4473-B597-0444687EEE3F}.Debug (Win32)|Mixed Platforms.Build.0 = Debug|Win32
+		{9F347485-0492-4473-B597-0444687EEE3F}.Debug (Win32)|Win32.ActiveCfg = Debug|Win32
+		{9F347485-0492-4473-B597-0444687EEE3F}.Debug (Win32)|Win32.Build.0 = Debug|Win32
+		{9F347485-0492-4473-B597-0444687EEE3F}.Debug (Win32)|x64.ActiveCfg = Debug|Win32
+		{9F347485-0492-4473-B597-0444687EEE3F}.Debug (Win32)|x86.ActiveCfg = Debug|Win32
+		{9F347485-0492-4473-B597-0444687EEE3F}.Debug|Any CPU.ActiveCfg = Debug|Win32
+		{9F347485-0492-4473-B597-0444687EEE3F}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
+		{9F347485-0492-4473-B597-0444687EEE3F}.Debug|Mixed Platforms.Build.0 = Debug|Win32
+		{9F347485-0492-4473-B597-0444687EEE3F}.Debug|Win32.ActiveCfg = Debug|Win32
+		{9F347485-0492-4473-B597-0444687EEE3F}.Debug|Win32.Build.0 = Debug|Win32
+		{9F347485-0492-4473-B597-0444687EEE3F}.Debug|x64.ActiveCfg = Debug|Win32
+		{9F347485-0492-4473-B597-0444687EEE3F}.Debug|x86.ActiveCfg = Debug|Win32
+		{9F347485-0492-4473-B597-0444687EEE3F}.Release|Any CPU.ActiveCfg = Release|Win32
+		{9F347485-0492-4473-B597-0444687EEE3F}.Release|Mixed Platforms.ActiveCfg = Release|Win32
+		{9F347485-0492-4473-B597-0444687EEE3F}.Release|Mixed Platforms.Build.0 = Release|Win32
+		{9F347485-0492-4473-B597-0444687EEE3F}.Release|Win32.ActiveCfg = Release|Win32
+		{9F347485-0492-4473-B597-0444687EEE3F}.Release|Win32.Build.0 = Release|Win32
+		{9F347485-0492-4473-B597-0444687EEE3F}.Release|x64.ActiveCfg = Release|Win32
+		{9F347485-0492-4473-B597-0444687EEE3F}.Release|x86.ActiveCfg = Release|Win32
+		{9F347485-0492-4473-B597-0444687EEE3F}.ReleaseWdkCrt|Any CPU.ActiveCfg = Release|Win32
+		{9F347485-0492-4473-B597-0444687EEE3F}.ReleaseWdkCrt|Mixed Platforms.ActiveCfg = Release|Win32
+		{9F347485-0492-4473-B597-0444687EEE3F}.ReleaseWdkCrt|Mixed Platforms.Build.0 = Release|Win32
+		{9F347485-0492-4473-B597-0444687EEE3F}.ReleaseWdkCrt|Win32.ActiveCfg = Release|Win32
+		{9F347485-0492-4473-B597-0444687EEE3F}.ReleaseWdkCrt|Win32.Build.0 = Release|Win32
+		{9F347485-0492-4473-B597-0444687EEE3F}.ReleaseWdkCrt|x64.ActiveCfg = Release|Win32
+		{9F347485-0492-4473-B597-0444687EEE3F}.ReleaseWdkCrt|x86.ActiveCfg = Release|Win32
+	EndGlobalSection
+	GlobalSection(SolutionProperties) = preSolution
+		HideSolutionNode = FALSE
+	EndGlobalSection
+	GlobalSection(NestedProjects) = preSolution
+		{259F3184-C992-4858-AB00-3147438B280E} = {F7CE879A-78D1-4738-88F8-6EA6DFDB3172}
+		{4A4BF248-A1B7-462A-B9CB-055D7FA49ADC} = {F7CE879A-78D1-4738-88F8-6EA6DFDB3172}
+		{EFC2778C-4E9C-4BE1-8F58-C73086B847CF} = {F7CE879A-78D1-4738-88F8-6EA6DFDB3172}
+		{8034DEA9-30CC-DEA0-3903-80210CE809FA} = {259F3184-C992-4858-AB00-3147438B280E}
+		{9F347485-0492-4473-B597-0444687EEE3F} = {4A4BF248-A1B7-462A-B9CB-055D7FA49ADC}
+		{51462126-2E74-41C9-BC24-DF55876732B7} = {3F741360-ECE1-42FF-B8E9-96D4A5DD2A30}
+		{3FFFE88B-948B-4B8F-B843-264763B1EF37} = {3F741360-ECE1-42FF-B8E9-96D4A5DD2A30}
+		{B8DB17E1-CE45-4354-8B3E-767648F3A2BE} = {3F741360-ECE1-42FF-B8E9-96D4A5DD2A30}
+		{2D723AC0-293F-41C8-99A7-2DD8756556C7} = {3F741360-ECE1-42FF-B8E9-96D4A5DD2A30}
+		{B3B22C2A-52B9-448F-8E13-8BCCFD6C0020} = {3F741360-ECE1-42FF-B8E9-96D4A5DD2A30}
+		{E16DEC4D-DAF0-4415-A601-9B034BBFB630} = {3F741360-ECE1-42FF-B8E9-96D4A5DD2A30}
+		{F0191CA8-AA6A-49D2-9E58-77A8334FB926} = {3F741360-ECE1-42FF-B8E9-96D4A5DD2A30}
+		{BD12E835-5C52-4E5D-8234-1C579F33E27A} = {51462126-2E74-41C9-BC24-DF55876732B7}
+		{AE3F6497-7880-4C08-B6E2-3AF05BCFB671} = {3FFFE88B-948B-4B8F-B843-264763B1EF37}
+		{85DCFF40-BF5B-459A-BF20-377472BBF846} = {3FFFE88B-948B-4B8F-B843-264763B1EF37}
+		{12BCA020-EABF-429E-876A-A476BC9C10C0} = {3FFFE88B-948B-4B8F-B843-264763B1EF37}
+		{4214047C-F5C1-40B3-8369-5DCED8C32770} = {B8DB17E1-CE45-4354-8B3E-767648F3A2BE}
+		{4CEE3392-89AC-4367-B219-42360CF91CBB} = {2D723AC0-293F-41C8-99A7-2DD8756556C7}
+		{F172EFFC-E30F-4593-809E-DB2024B1E753} = {2D723AC0-293F-41C8-99A7-2DD8756556C7}
+		{C8AFB8C3-FFFD-460F-BC13-9AC25D7B117C} = {B3B22C2A-52B9-448F-8E13-8BCCFD6C0020}
+		{CB7DC8B9-C2B8-4352-908E-9230BA9906EE} = {3CC18A8E-B460-47C2-8FB5-B0EE8A3608D0}
+		{66757FD0-C29F-4744-9C52-CE79E7E4289F} = {E16DEC4D-DAF0-4415-A601-9B034BBFB630}
+		{E28A4D3E-E995-499D-A920-D155E5EA4A79} = {E16DEC4D-DAF0-4415-A601-9B034BBFB630}
+		{860FFAEE-5D5F-44DA-8ED0-0F6987229545} = {F0191CA8-AA6A-49D2-9E58-77A8334FB926}
+		{5E7C37E6-65DC-43EA-8C14-B325A8B3B2A7} = {F0191CA8-AA6A-49D2-9E58-77A8334FB926}
+		{9566788F-9AEE-47EB-8FBE-4A1766E805D8} = {F0191CA8-AA6A-49D2-9E58-77A8334FB926}
+	EndGlobalSection
+EndGlobal
============================================================
--- penguin/README.txt	163f33ca824fe8f0c675f25ce7467e1ce6100ed5
+++ penguin/README.txt	163f33ca824fe8f0c675f25ce7467e1ce6100ed5
@@ -0,0 +1,24 @@
+To sucessfully build this project, you must download some external sources.
+
+[Step 1]
+  You must have a full checkout of the /penguin/ directory and the /libpurple/ directory.
+  These are the only sources needed within pidgin that are required.
+
+[Step 2]:
+  Follow instructions in GLib/README.txt
+
+[Step 3]:
+  Copy the following folders and files into this directory from GLib/build:
+    /builddeps/
+    /scripts/
+    /tools/
+    /vsprops/
+    msvc-pragmas.h
+    OABuild.rules
+
+[Step 4]:
+  (TBA): Getting libxml2.dll to link correctly.
+
+[Step 5]:
+  Open Penguin.sln inside Visual Studio and compile/run.
+
============================================================
--- libpurple/config.h	ba11202ca5e27e7c2481ef8f3818c27ed2a08a88
+++ libpurple/config.h	5538cdba7a07c8e51b293134cebc454c5271dec2
@@ -11,7 +11,7 @@
 /* #undef ENABLE_MONO */
 
 /* always defined to indicate that i18n is enabled */
-#define ENABLE_NLS 1
+/* #define ENABLE_NLS 1 */
 
 /* Define if you have the external 'altzone' variable. */
 /* #undef HAVE_ALTZONE */


More information about the Commits mailing list