remove httpserver that is no longer used

UbitUmarov [2024-04-20 16:41:49]
remove httpserver that is no longer used
Filename
HttpServer/Apache License 2.0.txt
HttpServer/trunk/HttpServer.4.5.resharper.user
HttpServer/trunk/HttpServer.sln
HttpServer/trunk/HttpServer.suo
HttpServer/trunk/HttpServer/Authentication/AuthenticationModule.cs
HttpServer/trunk/HttpServer/Authentication/BasicAuthentication.cs
HttpServer/trunk/HttpServer/Authentication/DigestAuthentication.cs
HttpServer/trunk/HttpServer/Check.cs
HttpServer/trunk/HttpServer/ClientAcceptedEventArgs.cs
HttpServer/trunk/HttpServer/ComponentProvider.cs
HttpServer/trunk/HttpServer/ContentTypes.cs
HttpServer/trunk/HttpServer/ContextTimeoutManager.cs
HttpServer/trunk/HttpServer/Controllers/AuthRequiredAttribute.cs
HttpServer/trunk/HttpServer/Controllers/AuthValidatorAttribute.cs
HttpServer/trunk/HttpServer/Controllers/BeforeFilter.cs
HttpServer/trunk/HttpServer/Controllers/ControllerNameAttribute.cs
HttpServer/trunk/HttpServer/Controllers/ControllerTester.cs
HttpServer/trunk/HttpServer/Controllers/RawHandlerAttribute.cs
HttpServer/trunk/HttpServer/Controllers/RequestController.cs
HttpServer/trunk/HttpServer/Controllers/ViewController.cs
HttpServer/trunk/HttpServer/ExceptionEventArgs.cs
HttpServer/trunk/HttpServer/ExceptionHandler.cs
HttpServer/trunk/HttpServer/Exceptions/BadRequestException.cs
HttpServer/trunk/HttpServer/Exceptions/ForbiddenException.cs
HttpServer/trunk/HttpServer/Exceptions/HttpException.cs
HttpServer/trunk/HttpServer/Exceptions/InternalServerException.cs
HttpServer/trunk/HttpServer/Exceptions/NotFoundException.cs
HttpServer/trunk/HttpServer/Exceptions/UnauthorizedException.cs
HttpServer/trunk/HttpServer/FormDecoders/FormDecoder.cs
HttpServer/trunk/HttpServer/FormDecoders/FormDecoderProvider.cs
HttpServer/trunk/HttpServer/FormDecoders/HttpMultipart.cs
HttpServer/trunk/HttpServer/FormDecoders/IFormDecoder.cs
HttpServer/trunk/HttpServer/FormDecoders/MultipartDecoder.cs
HttpServer/trunk/HttpServer/FormDecoders/UrlDecoder.cs
HttpServer/trunk/HttpServer/FormDecoders/XmlDecoder.cs
HttpServer/trunk/HttpServer/Helpers/FormHelper.cs
HttpServer/trunk/HttpServer/Helpers/GetIdTitle.cs
HttpServer/trunk/HttpServer/Helpers/Implementations/PrototypeImp.cs
HttpServer/trunk/HttpServer/Helpers/JSHelper.cs
HttpServer/trunk/HttpServer/Helpers/ObjectForm.cs
HttpServer/trunk/HttpServer/Helpers/ResourceInfo.cs
HttpServer/trunk/HttpServer/Helpers/ResourceManager.cs
HttpServer/trunk/HttpServer/Helpers/WebHelper.cs
HttpServer/trunk/HttpServer/Helpers/XmlHelper.cs
HttpServer/trunk/HttpServer/HttpClientContext.cs
HttpServer/trunk/HttpServer/HttpContextFactory.cs
HttpServer/trunk/HttpServer/HttpFile.cs
HttpServer/trunk/HttpServer/HttpForm.cs
HttpServer/trunk/HttpServer/HttpHelper.cs
HttpServer/trunk/HttpServer/HttpInput.cs
HttpServer/trunk/HttpServer/HttpInputItem.cs
HttpServer/trunk/HttpServer/HttpListener.cs
HttpServer/trunk/HttpServer/HttpListener2.cs
HttpServer/trunk/HttpServer/HttpListenerBase.cs
HttpServer/trunk/HttpServer/HttpModules/FileModule.cs
HttpServer/trunk/HttpServer/HttpModules/HttpModule.cs
HttpServer/trunk/HttpServer/HttpModules/HttpModuleExceptionEventArgs.cs
HttpServer/trunk/HttpServer/HttpModules/ResourceFileModule.cs
HttpServer/trunk/HttpServer/HttpModules/ReverseProxyModule.cs
HttpServer/trunk/HttpServer/HttpModules/WebSiteModule.cs
HttpServer/trunk/HttpServer/HttpParam.cs
HttpServer/trunk/HttpServer/HttpRequest.cs
HttpServer/trunk/HttpServer/HttpResponse.cs
HttpServer/trunk/HttpServer/HttpResponseImp.cs
HttpServer/trunk/HttpServer/HttpServer.cs
HttpServer/trunk/HttpServer/HttpServer.csproj
HttpServer/trunk/HttpServer/IComponentProvider.cs
HttpServer/trunk/HttpServer/IHttpClientContext.cs
HttpServer/trunk/HttpServer/IHttpContextHandler.cs
HttpServer/trunk/HttpServer/IHttpRequest.cs
HttpServer/trunk/HttpServer/IHttpRequestParser.cs
HttpServer/trunk/HttpServer/IHttpResponse.cs
HttpServer/trunk/HttpServer/ILogWriter.cs
HttpServer/trunk/HttpServer/LogWriter.cs
HttpServer/trunk/HttpServer/Method.cs
HttpServer/trunk/HttpServer/Parser/BodyEventArgs.cs
HttpServer/trunk/HttpServer/Parser/HeaderEventArgs.cs
HttpServer/trunk/HttpServer/Parser/HttpRequestParser.cs
HttpServer/trunk/HttpServer/Parser/RequestLineEventArgs.cs
HttpServer/trunk/HttpServer/Parser/RequestParserFactory.cs
HttpServer/trunk/HttpServer/Properties/AssemblyInfo.cs
HttpServer/trunk/HttpServer/Rendering/CodeGeneratorException.cs
HttpServer/trunk/HttpServer/Rendering/FileTemplateLoader.cs
HttpServer/trunk/HttpServer/Rendering/Haml/HamlGenerator.cs
HttpServer/trunk/HttpServer/Rendering/Haml/LineInfo.cs
HttpServer/trunk/HttpServer/Rendering/Haml/NodeList.cs
HttpServer/trunk/HttpServer/Rendering/Haml/Nodes/AttributeNode.cs
HttpServer/trunk/HttpServer/Rendering/Haml/Nodes/ChildNode.cs
HttpServer/trunk/HttpServer/Rendering/Haml/Nodes/ClassNode.cs
HttpServer/trunk/HttpServer/Rendering/Haml/Nodes/DisplayCodeNode.cs
HttpServer/trunk/HttpServer/Rendering/Haml/Nodes/DocTypeTag.cs
HttpServer/trunk/HttpServer/Rendering/Haml/Nodes/IdNode.cs
HttpServer/trunk/HttpServer/Rendering/Haml/Nodes/Node.cs
HttpServer/trunk/HttpServer/Rendering/Haml/Nodes/PartialNode.cs
HttpServer/trunk/HttpServer/Rendering/Haml/Nodes/SilentCodeNode.cs
HttpServer/trunk/HttpServer/Rendering/Haml/Nodes/TagNode.cs
HttpServer/trunk/HttpServer/Rendering/Haml/Nodes/TextNode.cs
HttpServer/trunk/HttpServer/Rendering/Haml/Rules/AttributesRule.cs
HttpServer/trunk/HttpServer/Rendering/Haml/Rules/NewLineRule.cs
HttpServer/trunk/HttpServer/Rendering/Haml/Rules/Rule.cs
HttpServer/trunk/HttpServer/Rendering/Haml/resourcetest2.haml
HttpServer/trunk/HttpServer/Rendering/ITemplateGenerator.cs
HttpServer/trunk/HttpServer/Rendering/ITemplateInfo.cs
HttpServer/trunk/HttpServer/Rendering/ITemplateLoader.cs
HttpServer/trunk/HttpServer/Rendering/ITinyTemplate.cs
HttpServer/trunk/HttpServer/Rendering/ResourceInfo.cs
HttpServer/trunk/HttpServer/Rendering/ResourceManager.cs
HttpServer/trunk/HttpServer/Rendering/ResourceTemplateLoader.cs
HttpServer/trunk/HttpServer/Rendering/TemplateArguments.cs
HttpServer/trunk/HttpServer/Rendering/TemplateCompiler.cs
HttpServer/trunk/HttpServer/Rendering/TemplateException.cs
HttpServer/trunk/HttpServer/Rendering/TemplateGenerator.cs
HttpServer/trunk/HttpServer/Rendering/TemplateInfo.cs
HttpServer/trunk/HttpServer/Rendering/TemplateLoader.cs
HttpServer/trunk/HttpServer/Rendering/TemplateManager.cs
HttpServer/trunk/HttpServer/Rendering/Tiny/Nodes/CodeNode.cs
HttpServer/trunk/HttpServer/Rendering/Tiny/TinyGenerator.cs
HttpServer/trunk/HttpServer/Rendering/TinyTemplate.cs
HttpServer/trunk/HttpServer/Rendering/resourcetest.haml
HttpServer/trunk/HttpServer/Rendering/resourcetest.xml
HttpServer/trunk/HttpServer/RequestCookie.cs
HttpServer/trunk/HttpServer/RequestCookies.cs
HttpServer/trunk/HttpServer/RequestQueue.cs
HttpServer/trunk/HttpServer/RequestReceivedEventArgs.cs
HttpServer/trunk/HttpServer/ResponseCookie.cs
HttpServer/trunk/HttpServer/ResponseCookies.cs
HttpServer/trunk/HttpServer/Rules/IRule.cs
HttpServer/trunk/HttpServer/Rules/RedirectRule.cs
HttpServer/trunk/HttpServer/Rules/RegexRedirectRule.cs
HttpServer/trunk/HttpServer/Rules/Rule.cs
HttpServer/trunk/HttpServer/Sessions/HttpSession.cs
HttpServer/trunk/HttpServer/Sessions/HttpSessionStore.cs
HttpServer/trunk/HttpServer/Sessions/IHttpSession.cs
HttpServer/trunk/HttpServer/Sessions/IHttpSessionStore.cs
HttpServer/trunk/HttpServer/Sessions/MemorySession.cs
HttpServer/trunk/HttpServer/Sessions/MemorySessionStore.cs
HttpServer/trunk/HttpServer/Templates/TemplateEngine.cs
HttpServer/trunk/HttpServer/Templates/TemplateProvider.cs
HttpServer/trunk/HttpServer/Templates/TinyTemplate.cs
HttpServer/trunk/HttpServer/docproject.shfb
HttpServer/trunk/HttpServer/httpserver.pfx
HttpServer/trunk/HttpServer/test.snk
HttpServer/trunk/HttpServer/webserver.chm
HttpServer/trunk/dlls/Fadd.Globalization.Yaml.dll
HttpServer/trunk/dlls/Fadd.XML
HttpServer/trunk/dlls/Fadd.dll
HttpServer/trunk/dlls/xunit.dll
diff --git a/HttpServer/Apache License 2.0.txt b/HttpServer/Apache License 2.0.txt
deleted file mode 100644
index c4ef158..0000000
--- a/HttpServer/Apache License 2.0.txt
+++ /dev/null
@@ -1,69 +0,0 @@
-Apache License
-Version 2.0, January 2004
-http://www.apache.org/licenses/
-
-TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
-
-1. Definitions.
-
-"License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document.
-
-"Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License.
-
-"Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity.
-
-"You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License.
-
-"Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files.
-
-"Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types.
-
-"Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below).
-
-"Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof.
-
-"Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution."
-
-"Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work.
-
-2. Grant of Copyright License.
-
-Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form.
-
-3. Grant of Patent License.
-
-Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed.
-
-4. Redistribution.
-
-You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions:
-
-1. You must give any other recipients of the Work or Derivative Works a copy of this License; and
-
-2. You must cause any modified files to carry prominent notices stating that You changed the files; and
-
-3. You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and
-
-4. If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License.
-
-You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License.
-
-5. Submission of Contributions.
-
-Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions.
-
-6. Trademarks.
-
-This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file.
-
-7. Disclaimer of Warranty.
-
-Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License.
-
-8. Limitation of Liability.
-
-In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages.
-
-9. Accepting Warranty or Additional Liability.
-
-While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability.
\ No newline at end of file
diff --git a/HttpServer/trunk/HttpServer.4.5.resharper.user b/HttpServer/trunk/HttpServer.4.5.resharper.user
deleted file mode 100644
index e68d0ef..0000000
--- a/HttpServer/trunk/HttpServer.4.5.resharper.user
+++ /dev/null
@@ -1,67 +0,0 @@
-<Configuration>
-  <SettingsComponent>
-    <string />
-    <integer />
-    <boolean>
-      <setting name="SolutionAnalysisEnabled">True</setting>
-    </boolean>
-  </SettingsComponent>
-  <NAntValidationSettings>
-    <NAntPath value="" />
-  </NAntValidationSettings>
-  <CompletionStatisticsManager>
-    <ItemStatistics item="Default">
-      <Item value="private" priority="0" />
-      <Item value="Socket" priority="2" />
-      <Item value="_sock" priority="0" />
-      <Item value="true" priority="0" />
-      <Item value="try" priority="0" />
-      <Item value="catch" priority="0" />
-      <Item value="ObjectDisposedException" priority="0" />
-      <Item value="ILogWriter" priority="0" />
-    </ItemStatistics>
-    <ItemStatistics item="Qualified:System.Net.Sockets.Socket">
-      <Item value="Disconnect" priority="0" />
-    </ItemStatistics>
-  </CompletionStatisticsManager>
-  <RecentFiles>
-    <RecentFiles>
-      <File id="455E7D70-1C85-4D7F-9F01-DC801B8B8C34/f:Check.cs" caret="143" fromTop="7" />
-      <File id="455E7D70-1C85-4D7F-9F01-DC801B8B8C34/f:IHttpResponse.cs" caret="1365" fromTop="19" />
-      <File id="455E7D70-1C85-4D7F-9F01-DC801B8B8C34/d:Parser/f:RequestParserFactory.cs" caret="542" fromTop="16" />
-      <File id="455E7D70-1C85-4D7F-9F01-DC801B8B8C34/f:HttpResponse.cs" caret="12518" fromTop="129" />
-      <File id="455E7D70-1C85-4D7F-9F01-DC801B8B8C34/d:Parser/f:HttpRequestParser.cs" caret="18853" fromTop="16" />
-      <File id="455E7D70-1C85-4D7F-9F01-DC801B8B8C34/f:IHttpRequest.cs" caret="3940" fromTop="16" />
-      <File id="455E7D70-1C85-4D7F-9F01-DC801B8B8C34/f:HttpRequest.cs" caret="1478" fromTop="23" />
-      <File id="455E7D70-1C85-4D7F-9F01-DC801B8B8C34/f:HttpClientContext.cs" caret="7561" fromTop="15" />
-      <File id="455E7D70-1C85-4D7F-9F01-DC801B8B8C34/f:HttpListenerBase.cs" caret="5387" fromTop="27" />
-      <File id="455E7D70-1C85-4D7F-9F01-DC801B8B8C34/f:HttpContextFactory.cs" caret="13436" fromTop="33" />
-    </RecentFiles>
-    <RecentEdits>
-      <File id="455E7D70-1C85-4D7F-9F01-DC801B8B8C34/f:HttpResponse.cs" caret="4833" fromTop="27" />
-      <File id="455E7D70-1C85-4D7F-9F01-DC801B8B8C34/f:HttpResponse.cs" caret="4663" fromTop="25" />
-      <File id="455E7D70-1C85-4D7F-9F01-DC801B8B8C34/f:HttpResponse.cs" caret="1846" fromTop="15" />
-      <File id="455E7D70-1C85-4D7F-9F01-DC801B8B8C34/f:IHttpResponse.cs" caret="1555" fromTop="23" />
-      <File id="455E7D70-1C85-4D7F-9F01-DC801B8B8C34/f:HttpClientContext.cs" caret="2211" fromTop="14" />
-      <File id="455E7D70-1C85-4D7F-9F01-DC801B8B8C34/f:HttpClientContext.cs" caret="2574" fromTop="21" />
-      <File id="455E7D70-1C85-4D7F-9F01-DC801B8B8C34/f:HttpClientContext.cs" caret="869" fromTop="16" />
-      <File id="455E7D70-1C85-4D7F-9F01-DC801B8B8C34/f:HttpResponse.cs" caret="11610" fromTop="15" />
-      <File id="455E7D70-1C85-4D7F-9F01-DC801B8B8C34/f:HttpContextFactory.cs" caret="14802" fromTop="25" />
-      <File id="455E7D70-1C85-4D7F-9F01-DC801B8B8C34/f:HttpContextFactory.cs" caret="14802" fromTop="16" />
-      <File id="455E7D70-1C85-4D7F-9F01-DC801B8B8C34/f:HttpContextFactory.cs" caret="14802" fromTop="25" />
-      <File id="455E7D70-1C85-4D7F-9F01-DC801B8B8C34/f:HttpContextFactory.cs" caret="14802" fromTop="22" />
-      <File id="455E7D70-1C85-4D7F-9F01-DC801B8B8C34/f:HttpContextFactory.cs" caret="14802" fromTop="16" />
-      <File id="455E7D70-1C85-4D7F-9F01-DC801B8B8C34/f:HttpRequest.cs" caret="14651" fromTop="23" />
-      <File id="455E7D70-1C85-4D7F-9F01-DC801B8B8C34/f:HttpContextFactory.cs" caret="13467" fromTop="22" />
-      <File id="455E7D70-1C85-4D7F-9F01-DC801B8B8C34/f:HttpClientContext.cs" caret="7560" fromTop="15" />
-      <File id="455E7D70-1C85-4D7F-9F01-DC801B8B8C34/f:HttpListenerBase.cs" caret="5386" fromTop="27" />
-      <File id="455E7D70-1C85-4D7F-9F01-DC801B8B8C34/f:HttpContextFactory.cs" caret="13467" fromTop="33" />
-    </RecentEdits>
-  </RecentFiles>
-  <UnitTestRunner>
-    <Providers />
-  </UnitTestRunner>
-  <UnitTestRunnerMSTest>
-    <UseTestRunConfigFromMetadataFile>False</UseTestRunConfigFromMetadataFile>
-  </UnitTestRunnerMSTest>
-</Configuration>
\ No newline at end of file
diff --git a/HttpServer/trunk/HttpServer.sln b/HttpServer/trunk/HttpServer.sln
deleted file mode 100644
index a6cef5f..0000000
--- a/HttpServer/trunk/HttpServer.sln
+++ /dev/null
@@ -1,23 +0,0 @@
-
-Microsoft Visual Studio Solution File, Format Version 11.00
-# Visual C# Express 2010
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HttpServer", "HttpServer\HttpServer.csproj", "{455E7D70-1C85-4D7F-9F01-DC801B8B8C34}"
-EndProject
-Global
-	GlobalSection(SolutionConfigurationPlatforms) = preSolution
-		Debug|Any CPU = Debug|Any CPU
-		Release|Any CPU = Release|Any CPU
-		Test|Any CPU = Test|Any CPU
-	EndGlobalSection
-	GlobalSection(ProjectConfigurationPlatforms) = postSolution
-		{455E7D70-1C85-4D7F-9F01-DC801B8B8C34}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
-		{455E7D70-1C85-4D7F-9F01-DC801B8B8C34}.Debug|Any CPU.Build.0 = Debug|Any CPU
-		{455E7D70-1C85-4D7F-9F01-DC801B8B8C34}.Release|Any CPU.ActiveCfg = Release|Any CPU
-		{455E7D70-1C85-4D7F-9F01-DC801B8B8C34}.Release|Any CPU.Build.0 = Release|Any CPU
-		{455E7D70-1C85-4D7F-9F01-DC801B8B8C34}.Test|Any CPU.ActiveCfg = Test|Any CPU
-		{455E7D70-1C85-4D7F-9F01-DC801B8B8C34}.Test|Any CPU.Build.0 = Test|Any CPU
-	EndGlobalSection
-	GlobalSection(SolutionProperties) = preSolution
-		HideSolutionNode = FALSE
-	EndGlobalSection
-EndGlobal
diff --git a/HttpServer/trunk/HttpServer.suo b/HttpServer/trunk/HttpServer.suo
deleted file mode 100644
index fde5504..0000000
Binary files a/HttpServer/trunk/HttpServer.suo and /dev/null differ
diff --git a/HttpServer/trunk/HttpServer/Authentication/AuthenticationModule.cs b/HttpServer/trunk/HttpServer/Authentication/AuthenticationModule.cs
deleted file mode 100644
index abeddd1..0000000
--- a/HttpServer/trunk/HttpServer/Authentication/AuthenticationModule.cs
+++ /dev/null
@@ -1,120 +0,0 @@
-using System;
-using HttpServer.Exceptions;
-
-namespace HttpServer.Authentication
-{
-    /// <summary>
-    /// Delegate used to let authentication modules authenticate the user name and password.
-    /// </summary>
-    /// <param name="realm">Realm that the user want to authenticate in</param>
-    /// <param name="userName">User name specified by client</param>
-	/// <param name="token">Can either be user password or implementation specific token.</param>
-    /// <param name="login">object that will be stored in a session variable called <see cref="AuthenticationModule.AuthenticationTag"/> if authentication was successful.</param>
-    /// <exception cref="ForbiddenException">throw forbidden exception if too many attempts have been made.</exception>
-    /// <remarks>
-    /// <para>
-	/// Use <see cref="DigestAuthentication.TokenIsHA1"/> to specify that the token is a HA1 token. (MD5 generated
-	/// string from realm, user name and password); Md5String(userName + ":" + realm + ":" + password);
-    /// </para>
-    /// </remarks>
-    public delegate void AuthenticationHandler(string realm, string userName, ref string token, out object login);
-
-    /// <summary>
-    /// Let's you decide on a system level if authentication is required.
-    /// </summary>
-    /// <param name="request">HTTP request from client</param>
-    /// <returns>true if user should be authenticated.</returns>
-    /// <remarks>throw <see cref="ForbiddenException"/> if no more attempts are allowed.</remarks>
-    /// <exception cref="ForbiddenException">If no more attempts are allowed</exception>
-    public delegate bool AuthenticationRequiredHandler(IHttpRequest request);
-
-    /// <summary>
-    /// Authentication modules are used to implement different
-    /// kind of HTTP authentication.
-    /// </summary>
-    public abstract class AuthenticationModule
-    {
-        private readonly AuthenticationHandler _authenticator;
-        private readonly AuthenticationRequiredHandler _authenticationRequiredHandler;
-
-        /// <summary>
-        /// Initializes a new instance of the <see cref="AuthenticationModule"/> class.
-        /// </summary>
-        /// <param name="authenticator">Delegate used to provide information used during authentication.</param>
-        /// <param name="authenticationRequiredHandler">Delegate used to determine if authentication is required (may be null).</param>
-        protected AuthenticationModule(AuthenticationHandler authenticator, AuthenticationRequiredHandler authenticationRequiredHandler)
-        {
-            Check.Require(authenticator, "authenticator");
-            _authenticationRequiredHandler = authenticationRequiredHandler;
-            _authenticator = authenticator;
-        }
-
-        /// <summary>
-        /// Initializes a new instance of the <see cref="AuthenticationModule"/> class.
-        /// </summary>
-        /// <param name="authenticator">Delegate used to provide information used during authentication.</param>
-        protected AuthenticationModule(AuthenticationHandler authenticator) : this(authenticator, null)
-        {
-        }
-
-        /// <summary>
-        /// name used in HTTP request.
-        /// </summary>
-        public abstract string Name
-        { get; }
-
-		/// <summary>
-		/// Tag used for authentication.
-		/// </summary>
-        public const string AuthenticationTag = "__authtag";
-
-        /// <summary>
-        /// Create a response that can be sent in the WWW-Authenticate header.
-        /// </summary>
-        /// <param name="realm">Realm that the user should authenticate in</param>
-        /// <param name="options">Array with optional options.</param>
-        /// <returns>A correct authentication request.</returns>
-        /// <exception cref="ArgumentNullException">If realm is empty or null.</exception>
-        public abstract string CreateResponse(string realm, params object[] options);
-
-        /// <summary>
-        /// An authentication response have been received from the web browser.
-        /// Check if it's correct
-        /// </summary>
-        /// <param name="authenticationHeader">Contents from the Authorization header</param>
-        /// <param name="realm">Realm that should be authenticated</param>
-        /// <param name="httpVerb">GET/POST/PUT/DELETE etc.</param>
-        /// <param name="options">options to specific implementations</param>
-        /// <returns>Authentication object that is stored for the request. A user class or something like that.</returns>
-        /// <exception cref="ArgumentException">if <paramref name="authenticationHeader"/> is invalid</exception>
-        /// <exception cref="ArgumentNullException">If any of the parameters is empty or null.</exception>
-        public abstract object Authenticate(string authenticationHeader, string realm, string httpVerb,
-                                            params object[] options);
-
-        /// <summary>
-        /// Used to invoke the authentication delegate that is used to lookup the user name/realm.
-        /// </summary>
-        /// <param name="realm">Realm (domain) that user want to authenticate in</param>
-        /// <param name="userName">User name</param>
-        /// <param name="password">Password used for validation. Some implementations got password in clear text, they are then sent to client.</param>
-        /// <param name="login">object that will be stored in the request to help you identify the user if authentication was successful.</param>
-        /// <returns>true if authentication was successful</returns>
-        protected bool CheckAuthentication(string realm, string userName, ref string password, out object login)
-        {
-            _authenticator(realm, userName, ref password, out login);
-            return true;
-        }
-
-        /// <summary>
-        /// Determines if authentication is required.
-        /// </summary>
-        /// <param name="request">HTTP request from browser</param>
-        /// <returns>true if user should be authenticated.</returns>
-        /// <remarks>throw <see cref="ForbiddenException"/> from your delegate if no more attempts are allowed.</remarks>
-        /// <exception cref="ForbiddenException">If no more attempts are allowed</exception>
-        public bool AuthenticationRequired(IHttpRequest request)
-        {
-        	return _authenticationRequiredHandler != null && _authenticationRequiredHandler(request);
-        }
-    }
-}
diff --git a/HttpServer/trunk/HttpServer/Authentication/BasicAuthentication.cs b/HttpServer/trunk/HttpServer/Authentication/BasicAuthentication.cs
deleted file mode 100644
index 78adb58..0000000
--- a/HttpServer/trunk/HttpServer/Authentication/BasicAuthentication.cs
+++ /dev/null
@@ -1,97 +0,0 @@
-using System;
-using System.Text;
-
-namespace HttpServer.Authentication
-{
-    /// <summary>
-    /// The "basic" authentication scheme is based on the model that the
-   /// client must authenticate itself with a user-ID and a password for
-   /// each realm.  The realm value should be considered an opaque string
-   /// which can only be compared for equality with other realms on that
-   /// server. The server will service the request only if it can validate
-   /// the user-ID and password for the protection space of the Request-URI.
-    /// There are no optional authentication parameters.
-    /// </summary>
-    public class BasicAuthentication : AuthenticationModule
-    {
-
-        /// <summary>
-        /// Initializes a new instance of the <see cref="BasicAuthentication"/> class.
-        /// </summary>
-        /// <param name="authenticator">Delegate used to provide information used during authentication.</param>
-        /// <param name="authenticationRequiredHandler">Delegate used to determine if authentication is required (may be null).</param>
-        public BasicAuthentication(AuthenticationHandler authenticator, AuthenticationRequiredHandler authenticationRequiredHandler)
-            : base(authenticator, authenticationRequiredHandler)
-        {
-        }
-
-        /// <summary>
-        /// Initializes a new instance of the <see cref="BasicAuthentication"/> class.
-        /// </summary>
-        /// <param name="authenticator">Delegate used to provide information used during authentication.</param>
-        public BasicAuthentication(AuthenticationHandler authenticator)
-            : base(authenticator)
-        {
-        }
-
-        /// <summary>
-        /// Create a response that can be sent in the WWW-Authenticate header.
-        /// </summary>
-        /// <param name="realm">Realm that the user should authenticate in</param>
-        /// <param name="options">Not used in basic auth</param>
-        /// <returns>A correct auth request.</returns>
-        public override string CreateResponse(string realm, object[] options)
-        {
-            if (string.IsNullOrEmpty(realm))
-                throw new ArgumentNullException("realm");
-
-            return "Basic realm=\"" + realm + "\"";
-        }
-
-        /// <summary>
-        /// An authentication response have been received from the web browser.
-        /// Check if it's correct
-        /// </summary>
-        /// <param name="authenticationHeader">Contents from the Authorization header</param>
-        /// <param name="realm">Realm that should be authenticated</param>
-        /// <param name="httpVerb">GET/POST/PUT/DELETE etc.</param>
-        /// <param name="options">Not used in basic auth</param>
-        /// <returns>Authentication object that is stored for the request. A user class or something like that.</returns>
-        /// <exception cref="ArgumentException">if authenticationHeader is invalid</exception>
-        /// <exception cref="ArgumentNullException">If any of the paramters is empty or null.</exception>
-        public override object Authenticate(string authenticationHeader, string realm, string httpVerb, object[] options)
-        {
-            if (string.IsNullOrEmpty(authenticationHeader))
-                throw new ArgumentNullException("realm");
-            if (string.IsNullOrEmpty(realm))
-                throw new ArgumentNullException("realm");
-            if (string.IsNullOrEmpty(httpVerb))
-                throw new ArgumentNullException("httpVerb");
-
-            /*
-             * To receive authorization, the client sends the userid and password,
-      separated by a single colon (":") character, within a base64 [7]
-      encoded string in the credentials.*/
-            authenticationHeader = authenticationHeader.Remove(0, 6);
-            string decoded = Encoding.UTF8.GetString(Convert.FromBase64String(authenticationHeader));
-            int pos = decoded.IndexOf(':');
-            if (pos == -1)
-                return null;
-
-            string ourPw = decoded.Substring(pos + 1, decoded.Length - pos - 1);
-            string pw = ourPw;
-            object state;
-            CheckAuthentication(realm, decoded.Substring(0, pos), ref pw, out state);
-
-            return ourPw == pw ? state : null;
-        }
-
-        /// <summary>
-        /// name used in http request.
-        /// </summary>
-        public override string Name
-        {
-            get { return "basic"; }
-        }
-    }
-}
diff --git a/HttpServer/trunk/HttpServer/Authentication/DigestAuthentication.cs b/HttpServer/trunk/HttpServer/Authentication/DigestAuthentication.cs
deleted file mode 100644
index 120bcf1..0000000
--- a/HttpServer/trunk/HttpServer/Authentication/DigestAuthentication.cs
+++ /dev/null
@@ -1,385 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.Collections.Specialized;
-using System.Globalization;
-using System.Security.Cryptography;
-using System.Text;
-using System.Threading;
-
-namespace HttpServer.Authentication
-{
-    /// <summary>
-    /// Implements HTTP Digest authentication. It's more secure than Basic auth since password is
-    /// encrypted with a "key" from the server.
-    /// </summary>
-    /// <remarks>
-    /// Keep in mind that the password is encrypted with MD5. Use a combination of SSL and digest auth to be secure.
-    /// </remarks>
-    public class DigestAuthentication : AuthenticationModule
-    {
-        static readonly Dictionary<string, DateTime> _nonces = new Dictionary<string, DateTime>();
-        private static Timer _timer;
-
-        /// <summary>
-        /// Initializes a new instance of the <see cref="DigestAuthentication"/> class.
-        /// </summary>
-        /// <param name="authenticator">Delegate used to provide information used during authentication.</param>
-        /// <param name="authenticationRequiredHandler">Delegate used to determine if authentication is required (may be null).</param>
-        public DigestAuthentication(AuthenticationHandler authenticator, AuthenticationRequiredHandler authenticationRequiredHandler)
-            : base(authenticator, authenticationRequiredHandler)
-        {
-        }
-
-        /// <summary>
-        /// Initializes a new instance of the <see cref="DigestAuthentication"/> class.
-        /// </summary>
-        /// <param name="authenticator">Delegate used to provide information used during authentication.</param>
-        public DigestAuthentication(AuthenticationHandler authenticator)
-            : base(authenticator)
-        {
-        }
-
-        /// <summary>
-        /// Used by test classes to be able to use hardcoded values
-        /// </summary>
-        public static bool DisableNonceCheck;
-
-        /// <summary>
-        /// name used in http request.
-        /// </summary>
-        public override string Name
-        {
-            get { return "digest"; }
-        }
-
-        /// <summary>
-        /// An authentication response have been received from the web browser.
-        /// Check if it's correct
-        /// </summary>
-        /// <param name="authenticationHeader">Contents from the Authorization header</param>
-        /// <param name="realm">Realm that should be authenticated</param>
-        /// <param name="httpVerb">GET/POST/PUT/DELETE etc.</param>
-        /// <param name="options">First option: true if username/password is correct but not cnonce</param>
-        /// <returns>
-        /// Authentication object that is stored for the request. A user class or something like that.
-        /// </returns>
-        /// <exception cref="ArgumentException">if authenticationHeader is invalid</exception>
-        /// <exception cref="ArgumentNullException">If any of the paramters is empty or null.</exception>
-        public override object Authenticate(string authenticationHeader, string realm, string httpVerb, object[] options)
-        {
-            lock (_nonces)
-            {
-                if (_timer == null)
-                    _timer = new Timer(ManageNonces, null, 15000, 15000);
-            }
-
-            if (!authenticationHeader.StartsWith("Digest", true, CultureInfo.CurrentCulture))
-                return null;
-
-            bool staleNonce;
-            if (options.Length > 0)
-                staleNonce = (bool) options[0];
-            else staleNonce = false;
-
-            NameValueCollection reqInfo = Decode(authenticationHeader, Encoding.UTF8);
-            if (!IsValidNonce(reqInfo["nonce"]) && !DisableNonceCheck)
-                return null;
-
-            string username = reqInfo["username"];
-            string password = string.Empty;
-            object state;
-
-            if (!CheckAuthentication(realm, username, ref password, out state))
-                return null;
-
-        	string HA1;
-			if (!TokenIsHA1)
-			{
-				string A1 = String.Format("{0}:{1}:{2}", username, realm, password);
-				HA1 = GetMD5HashBinHex2(A1);
-			}
-			else
-				HA1 = password;
-
-			string A2 = String.Format("{0}:{1}", httpVerb, reqInfo["uri"]);
-			string HA2 = GetMD5HashBinHex2(A2);
-            string hashedDigest = Encrypt(HA1, HA2, reqInfo["qop"],
-                                          reqInfo["nonce"], reqInfo["nc"], reqInfo["cnonce"]);
-
-            if (reqInfo["response"] == hashedDigest && !staleNonce)
-                return state;
-
-            return null;
-        }
-
-    	/// <summary>
-    	/// Gets or sets whether the token supplied in <see cref="AuthenticationHandler"/> is a
-    	/// HA1 generated string.
-    	/// </summary>
-    	public bool TokenIsHA1 { get; set; }
-
-        /// <summary>
-        /// Encrypts parameters into a Digest string
-        /// </summary>
-        /// <param name="realm">Realm that the user want to log into.</param>
-        /// <param name="userName">User logging in</param>
-        /// <param name="password">Users password.</param>
-        /// <param name="method">HTTP method.</param>
-        /// <param name="uri">Uri/domain that generated the login prompt.</param>
-		/// <param name="qop">Quality of Protection.</param>
-		/// <param name="nonce">"Number used ONCE"</param>
-		/// <param name="nc">Hexadecimal request counter.</param>
-		/// <param name="cnonce">"Client Number used ONCE"</param>
-		/// <returns>Digest encrypted string</returns>
-        public static string Encrypt(string realm, string userName, string password, string method, string uri, string qop, string nonce, string nc, string cnonce)
-        {
-            string A1 = String.Format("{0}:{1}:{2}", userName, realm, password);
-            string HA1 = GetMD5HashBinHex2(A1);
-            string A2 = String.Format("{0}:{1}", method, uri);
-            string HA2 = GetMD5HashBinHex2(A2);
-
-            string unhashedDigest;
-            if (qop != null)
-            {
-                unhashedDigest = String.Format("{0}:{1}:{2}:{3}:{4}:{5}",
-                                               HA1,
-                                               nonce,
-                                               nc,
-                                               cnonce,
-                                               qop,
-                                               HA2);
-            }
-            else
-            {
-                unhashedDigest = String.Format("{0}:{1}:{2}",
-                                               HA1,
-                                               nonce,
-                                               HA2);
-            }
-
-            return GetMD5HashBinHex2(unhashedDigest);
-        }
-
-		/// <summary>
-		///
-		/// </summary>
-		/// <param name="ha1">Md5 hex encoded "userName:realm:password", without the quotes.</param>
-		/// <param name="ha2">Md5 hex encoded "method:uri", without the quotes</param>
-		/// <param name="qop">Quality of Protection</param>
-		/// <param name="nonce">"Number used ONCE"</param>
-		/// <param name="nc">Hexadecimal request counter.</param>
-		/// <param name="cnonce">Client number used once</param>
-		/// <returns></returns>
-		protected virtual string Encrypt(string ha1, string ha2, string qop, string nonce, string nc, string cnonce)
-		{
-			string unhashedDigest;
-			if (qop != null)
-			{
-				unhashedDigest = String.Format("{0}:{1}:{2}:{3}:{4}:{5}",
-											   ha1,
-											   nonce,
-											   nc,
-											   cnonce,
-											   qop,
-											   ha2);
-			}
-			else
-			{
-				unhashedDigest = String.Format("{0}:{1}:{2}",
-											   ha1,
-											   nonce,
-											   ha2);
-			}
-
-			return GetMD5HashBinHex2(unhashedDigest);
-		}
-        private static void ManageNonces(object state)
-        {
-            lock (_nonces)
-            {
-                foreach (KeyValuePair<string, DateTime> pair in _nonces)
-                {
-                    if (pair.Value >= DateTime.Now)
-                        continue;
-
-                    _nonces.Remove(pair.Key);
-                    return;
-                }
-            }
-        }
-
-
-        /// <summary>
-        /// Create a response that can be sent in the WWW-Authenticate header.
-        /// </summary>
-        /// <param name="realm">Realm that the user should authenticate in</param>
-        /// <param name="options">First options specifies if true if username/password is correct but not cnonce.</param>
-        /// <returns>A correct auth request.</returns>
-        /// <exception cref="ArgumentNullException">If realm is empty or null.</exception>
-        public override string CreateResponse(string realm, object[] options)
-        {
-            string nonce = GetCurrentNonce();
-
-            StringBuilder challenge = new StringBuilder("Digest realm=\"");
-            challenge.Append(realm);
-            challenge.Append("\"");
-            challenge.Append(", nonce=\"");
-            challenge.Append(nonce);
-            challenge.Append("\"");
-            challenge.Append(", opaque=\"" + Guid.NewGuid().ToString().Replace("-", string.Empty) + "\"");
-            challenge.Append(", stale=");
-
-            if (options.Length > 0)
-                challenge.Append((bool)options[0] ? "true" : "false");
-            else
-                challenge.Append("false");
-
-            challenge.Append(", algorithm=MD5");
-            challenge.Append(", qop=auth");
-
-            return challenge.ToString();
-        }
-
-        /// <summary>
-        /// Decodes authorization header value
-        /// </summary>
-        /// <param name="buffer">header value</param>
-        /// <param name="encoding">Encoding that the buffer is in</param>
-        /// <returns>All headers and their values if successful; otherwise null</returns>
-        /// <example>
-        /// NameValueCollection header = DigestAuthentication.Decode("response=\"6629fae49393a05397450978507c4ef1\",\r\nc=00001", Encoding.ASCII);
-        /// </example>
-        /// <remarks>Can handle lots of whitespaces and new lines without failing.</remarks>
-        public static NameValueCollection Decode(string buffer, Encoding encoding)
-        {
-            if (string.Compare(buffer.Substring(0, 7), "Digest ", true) == 0)
-                buffer = buffer.Remove(0, 7).Trim(' ');
-
-            NameValueCollection values = new NameValueCollection();
-            int step = 0;
-            bool inQuote = false;
-            string name = string.Empty;
-            int start = 0;
-            for (int i = start; i < buffer.Length; ++i)
-            {
-                char ch = buffer[i];
-                if (ch == '"')
-                    inQuote = !inQuote;
-
-                //find start of name
-                switch (step)
-                {
-                    case 0:
-                        if (!char.IsWhiteSpace(ch))
-                        {
-                            if (!char.IsLetterOrDigit(ch) && ch != '"')
-                                return null;
-                            start = i;
-                            ++step;
-                        }
-                        break;
-                    case 1:
-                        if (char.IsWhiteSpace(ch) || ch == '=')
-                        {
-                            if (start == -1)
-                                return null;
-                            name = buffer.Substring(start, i - start);
-                            start = -1;
-                            ++step;
-                        }
-                        else if (!char.IsLetterOrDigit(ch) && ch != '"')
-                            return null;
-                        break;
-                    case 2:
-                        if (!char.IsWhiteSpace(ch) && ch != '=')
-                        {
-                            start = i;
-                            ++step;
-                        }
-                        break;
-                }
-                // find end of value
-                if (step == 3)
-                {
-                    if (inQuote)
-                        continue;
-
-                    if (ch == ',' || char.IsWhiteSpace(ch) || i == buffer.Length -1)
-                    {
-                        if (start == -1)
-                            return null;
-
-                        int stop = i;
-                        if (buffer[start] == '"')
-                        {
-                            ++start;
-                            --stop;
-                        }
-                        if (i == buffer.Length - 1 || (i == buffer.Length - 2 && buffer[buffer.Length - 1] == '"'))
-                            ++stop;
-
-                        values.Add(name.ToLower(), buffer.Substring(start, stop - start));
-                        name = string.Empty;
-                        start = -1;
-                        step = 0;
-                    }
-                }
-            }
-
-            return values.Count == 0 ? null : values;
-        }
-
-        /// <summary>
-        /// Gets the current nonce.
-        /// </summary>
-        /// <returns></returns>
-        protected virtual string GetCurrentNonce()
-        {
-            string nonce = Guid.NewGuid().ToString().Replace("-", string.Empty);
-            lock (_nonces)
-                _nonces.Add(nonce, DateTime.Now.AddSeconds(30));
-
-            return nonce;
-        }
-
-        /// <summary>
-        /// Gets the Md5 hash bin hex2.
-        /// </summary>
-        /// <param name="toBeHashed">To be hashed.</param>
-        /// <returns></returns>
-        public static string GetMD5HashBinHex2(string toBeHashed)
-        {
-            MD5 md5 = new MD5CryptoServiceProvider();
-            byte[] result = md5.ComputeHash(Encoding.ASCII.GetBytes(toBeHashed));
-
-            StringBuilder sb = new StringBuilder();
-            foreach (byte b in result)
-                sb.Append(b.ToString("x2"));
-            return sb.ToString();
-        }
-
-        /// <summary>
-        /// determines if the nonce is valid or has expired.
-        /// </summary>
-        /// <param name="nonce">nonce value (check wikipedia for info)</param>
-        /// <returns>true if the nonce has not expired.</returns>
-        protected virtual bool IsValidNonce(string nonce)
-        {
-            lock (_nonces)
-            {
-                if (_nonces.ContainsKey(nonce))
-                {
-                    if (_nonces[nonce] < DateTime.Now)
-                    {
-                        _nonces.Remove(nonce);
-                        return false;
-                    }
-
-                    return true;
-                }
-            }
-
-            return false;
-        }
-    }
-}
\ No newline at end of file
diff --git a/HttpServer/trunk/HttpServer/Check.cs b/HttpServer/trunk/HttpServer/Check.cs
deleted file mode 100644
index 04ec10e..0000000
--- a/HttpServer/trunk/HttpServer/Check.cs
+++ /dev/null
@@ -1,64 +0,0 @@
-using System;
-
-namespace HttpServer
-{
-	/// <summary>
-	/// Small design by contract implementation.
-	/// </summary>
-	public static class Check
-	{
-		/// <summary>
-		/// Check whether a parameter is empty.
-		/// </summary>
-		/// <param name="value">Parameter value</param>
-		/// <param name="parameterOrErrorMessage">Parameter name, or error description.</param>
-		/// <exception cref="ArgumentException">value is empty.</exception>
-		public static void NotEmpty(string value, string parameterOrErrorMessage)
-		{
-			if (!string.IsNullOrEmpty(value))
-				return;
-
-			if (parameterOrErrorMessage.IndexOf(' ') == -1)
-				throw new ArgumentException("'" + parameterOrErrorMessage + "' cannot be empty.", parameterOrErrorMessage);
-
-			throw new ArgumentException(parameterOrErrorMessage);
-		}
-
-		/// <summary>
-		/// Checks whether a parameter is null.
-		/// </summary>
-		/// <param name="value">Parameter value</param>
-		/// <param name="parameterOrErrorMessage">Parameter name, or error description.</param>
-		/// <exception cref="ArgumentNullException">value is null.</exception>
-		public static void Require(object value, string parameterOrErrorMessage)
-		{
-			if (value != null)
-				return;
-
-			if (parameterOrErrorMessage.IndexOf(' ') == -1)
-				throw new ArgumentNullException("'" + parameterOrErrorMessage + "' cannot be null.", parameterOrErrorMessage);
-
-			throw new ArgumentNullException(parameterOrErrorMessage);
-
-		}
-
-		/// <summary>
-		/// Checks whether a parameter is null.
-		/// </summary>
-		/// <param name="minValue"></param>
-		/// <param name="value">Parameter value</param>
-		/// <param name="parameterOrErrorMessage">Parameter name, or error description.</param>
-		/// <exception cref="ArgumentException">value is null.</exception>
-		public static void Min(int minValue, object value, string parameterOrErrorMessage)
-		{
-			if (value != null)
-				return;
-
-			if (parameterOrErrorMessage.IndexOf(' ') == -1)
-				throw new ArgumentException("'" + parameterOrErrorMessage + "' must be at least " + minValue + ".", parameterOrErrorMessage);
-
-			throw new ArgumentException(parameterOrErrorMessage);
-
-		}
-	}
-}
diff --git a/HttpServer/trunk/HttpServer/ClientAcceptedEventArgs.cs b/HttpServer/trunk/HttpServer/ClientAcceptedEventArgs.cs
deleted file mode 100644
index e9d0855..0000000
--- a/HttpServer/trunk/HttpServer/ClientAcceptedEventArgs.cs
+++ /dev/null
@@ -1,50 +0,0 @@
-using System;
-using System.Net.Sockets;
-
-namespace HttpServer
-{
-    /// <summary>
-    /// Invoked when a client have been accepted by the <see cref="HttpListener"/>
-    /// </summary>
-    /// <remarks>
-    /// Can be used to revoke incoming connections
-    /// </remarks>
-    public class ClientAcceptedEventArgs : EventArgs
-    {
-        private readonly Socket _socket;
-        private bool _revoke;
-
-        /// <summary>
-        /// Initializes a new instance of the <see cref="ClientAcceptedEventArgs"/> class.
-        /// </summary>
-        /// <param name="socket">The socket.</param>
-        public ClientAcceptedEventArgs(Socket socket)
-        {
-            _socket = socket;
-        }
-
-        /// <summary>
-        /// Accepted socket.
-        /// </summary>
-        public Socket Socket
-        {
-            get { return _socket; }
-        }
-
-        /// <summary>
-        /// Client should be revoked.
-        /// </summary>
-        public bool Revoked
-        {
-            get { return _revoke; }
-        }
-
-        /// <summary>
-        /// Client may not be handled.
-        /// </summary>
-        public void Revoke()
-        {
-            _revoke = true;
-        }
-    }
-}
diff --git a/HttpServer/trunk/HttpServer/ComponentProvider.cs b/HttpServer/trunk/HttpServer/ComponentProvider.cs
deleted file mode 100644
index e02f455..0000000
--- a/HttpServer/trunk/HttpServer/ComponentProvider.cs
+++ /dev/null
@@ -1,169 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.Reflection;
-using System.Text;
-
-namespace HttpServer
-{
-	class ComponentProvider : IComponentProvider
-	{
-		private readonly Dictionary<Type, TypeInformation> _instances = new Dictionary<Type, TypeInformation>();
-
-		/// <summary>
-		/// Add a component instance
-		/// </summary>
-		/// <typeparam name="T">Interface type</typeparam>
-		/// <param name="instance">Instance to add</param>
-		public void AddInstance<T>(object instance)
-		{
-			Type interfaceType = typeof (T);
-			lock (_instances)
-				_instances.Add(interfaceType,
-				               new TypeInformation
-				               	{
-				               		InstanceType = instance.GetType(),
-				               		Instance = instance,
-				               		InterfaceType = interfaceType
-				               	});
-		}
-
-		/// <summary>
-		/// Get a component.
-		/// </summary>
-		/// <typeparam name="T">Interface type</typeparam>
-		/// <returns>Component if registered, otherwise null.</returns>
-		/// <remarks>
-		/// Component will get created if needed.
-		/// </remarks>
-		public T Get<T>() where T : class
-		{
-			Type type = typeof (T);
-			TypeInformation typeInformation;
-			lock (_instances)
-				if (!_instances.TryGetValue(type, out typeInformation))
-					return null;
-
-			if (typeInformation.Instance != null)
-				return (T)typeInformation.Instance;
-
-			return (T)Create(typeInformation);
-		}
-
-		private class ConstructorParameter
-		{
-			public object Instance { get; set; }
-			public ParameterInfo Parameter { get; set; }
-		}
-
-		/// <exception cref="InvalidOperationException">If instance cannot be created.</exception>
-		private object Create(TypeInformation information)
-		{
-			Dictionary<ConstructorInfo, List<ConstructorParameter>> constructors = new Dictionary<ConstructorInfo, List<ConstructorParameter>>();
-			ConstructorInfo[] publicConstructors = information.InstanceType.GetConstructors();
-			if (publicConstructors.Length == 0)
-				throw new InvalidOperationException(information.InstanceType.FullName + " do not have any public constructors.");
-
-			foreach (var constructor in publicConstructors)
-			{
-				constructors.Add(constructor, new List<ConstructorParameter>());
-				foreach (var parameter in constructor.GetParameters())
-				{
-					ConstructorParameter constructorParameter = new ConstructorParameter {Parameter = parameter};
-					constructors[constructor].Add(constructorParameter);
-
-					TypeInformation typeInfo;
-					lock (_instances)
-						if (!_instances.TryGetValue(parameter.ParameterType, out typeInfo))
-							continue; // this constructor wont work, but check what parameters we are missing.
-
-					try
-					{
-						constructorParameter.Instance = typeInfo.Instance ?? Create(typeInfo);
-					}
-					catch(InvalidOperationException err)
-					{
-						throw new InvalidOperationException(
-							"Failed to create '" + typeInfo.InterfaceType.FullName + "' that '" + information.InterfaceType +
-							"' is dependent off. Check inner exception for more details.", err);
-					}
-				}
-
-				// check if all parameters was found.
-				bool allFound = true;
-				foreach (var parameter in constructors[constructor])
-				{
-					if (parameter.Instance != null) continue;
-					allFound = false;
-					break;
-				}
-
-				if (!allFound)
-					continue;
-
-				// now create instance.
-				information.ConstructorArguments = new object[constructors[constructor].Count];
-				int index = 0;
-				foreach (var parameter in constructors[constructor])
-					information.ConstructorArguments[index++] = parameter.Instance;
-				return Activator.CreateInstance(information.InstanceType, information.ConstructorArguments);
-			}
-
-			StringBuilder sb = new StringBuilder();
-			sb.AppendLine("Failed to create '" + information.InstanceType.FullName + "', due to missing constructorparamters.");
-			foreach (var pair in constructors)
-			{
-				sb.Append(pair.Key + " are missing: ");
-				foreach (var parameter in pair.Value)
-				{
-					if (parameter.Instance == null)
-						sb.Append(parameter.Parameter.Name + ", ");
-				}
-				sb.Length -= 2;
-				sb.AppendLine();
-			}
-			throw new InvalidOperationException(sb.ToString());
-		}
-
-		/// <summary>
-		/// Checks if the specified component interface have been added.
-		/// </summary>
-		/// <param name="interfaceType"></param>
-		/// <returns>true if found; otherwise false.</returns>
-		public bool Contains(Type interfaceType)
-		{
-			return _instances.ContainsKey(interfaceType);
-		}
-
-		/// <summary>
-		/// Add a component.
-		/// </summary>
-		/// <typeparam name="InterfaceType">Type being requested.</typeparam>
-		/// <typeparam name="InstanceType">Type being created.</typeparam>
-		/// <exception cref="InvalidOperationException">Type have already been mapped.</exception>
-		public void Add<InterfaceType, InstanceType>()
-		{
-			Type interfaceType = typeof (InterfaceType);
-			TypeInformation typeInformation = new TypeInformation()
-			                                  	{
-			                                  		InstanceType = typeof (InstanceType),
-			                                  		InterfaceType = interfaceType,
-			                                  		Instance = null
-			                                  	};
-			lock (_instances)
-			{
-				if (_instances.ContainsKey(interfaceType))
-					throw new InvalidOperationException("Type '" + interfaceType + "' have already been mapped to '" +
-					                                    typeof (InstanceType).FullName);
-				_instances.Add(interfaceType, typeInformation);
-			}
-		}
-
-		private class TypeInformation
-	{
-			public Type InterfaceType { get; set; }
-			public Type InstanceType { get; set; }
-			public object Instance { get; set; }
-			public object[] ConstructorArguments { get; set; }
-	}
-	}
-}
diff --git a/HttpServer/trunk/HttpServer/ContentTypes.cs b/HttpServer/trunk/HttpServer/ContentTypes.cs
deleted file mode 100644
index 06aefda..0000000
--- a/HttpServer/trunk/HttpServer/ContentTypes.cs
+++ /dev/null
@@ -1,117 +0,0 @@
-using System.Collections;
-
-namespace HttpServer
-{
-    /// <summary>
-    /// Lists content type mime types.
-    /// </summary>
-    public class ContentType
-    {
-        /// <summary>
-        /// text/plain
-        /// </summary>
-        public const string Text = "text/plain";
-
-        /// <summary>
-        /// text/haml
-        /// </summary>
-        public const string Html = "text/html";
-
-        /// <summary>
-        /// content type for javascript documents = application/javascript
-        /// </summary>
-        /// <remarks>
-        /// <para>
-        /// RFC 4329 states that text/javascript have been superseeded by
-        /// application/javascript. You might still want to check browser versions
-        /// since older ones do not support application/javascript.
-        /// </para>
-        /// <para>Browser support: http://krijnhoetmer.nl/stuff/javascript/mime-types/</para>
-        /// </remarks>
-        public const string Javascript = "application/javascript";
-
-        /// <summary>
-        /// text/xml
-        /// </summary>
-        public const string Xml = "text/xml";
-    }
-
-    /// <summary>
-    /// A list of content types
-    /// </summary>
-    public class ContentTypes : IEnumerable
-    {
-        private readonly string[] _contentTypes;
-
-        /// <summary>
-        ///
-        /// </summary>
-        /// <param name="types">Semicolon separated content types.</param>
-        public ContentTypes(string types)
-        {
-            if (types == null)
-                _contentTypes = new string[] { ContentType.Html };
-            else
-                _contentTypes = types.Split(';');
-        }
-
-        /// <summary>
-        /// Get this first content type.
-        /// </summary>
-        public string First
-        {
-            get { return _contentTypes.Length == 0 ? string.Empty : _contentTypes[0]; }
-        }
-
-        /// <summary>
-        /// Fetch a content type
-        /// </summary>
-        /// <param name="type">Part of type ("xml" would return "application/xml")</param>
-        /// <returns></returns>
-        /// <remarks>All content types are in lower case.</remarks>
-        public string this[string type]
-        {
-            get
-            {
-                foreach (string contentType in _contentTypes)
-                {
-                    if (contentType.Contains(type))
-                        return contentType;
-                }
-
-                return string.Empty;
-            }
-        }
-
-        #region IEnumerable Members
-
-        /// <summary>
-        /// Returns an enumerator that iterates through a collection.
-        /// </summary>
-        /// <returns>
-        /// An <see cref="T:System.Collections.IEnumerator"/> object that can be used to iterate through the collection.
-        /// </returns>
-        public IEnumerator GetEnumerator()
-        {
-            return _contentTypes.GetEnumerator();
-        }
-
-        #endregion
-
-        /// <summary>
-        /// Searches for the specified type
-        /// </summary>
-        /// <param name="type">Can also be a part of a type (searching for "xml" would return true for "application/xml").</param>
-        /// <returns>true if type was found.</returns>
-        public bool Contains(string type)
-        {
-            foreach (string contentType in _contentTypes)
-            {
-                if (contentType.Contains(type))
-                    return true;
-            }
-
-            return false;
-        }
-    }
-}
\ No newline at end of file
diff --git a/HttpServer/trunk/HttpServer/ContextTimeoutManager.cs b/HttpServer/trunk/HttpServer/ContextTimeoutManager.cs
deleted file mode 100644
index 5784ebb..0000000
--- a/HttpServer/trunk/HttpServer/ContextTimeoutManager.cs
+++ /dev/null
@@ -1,413 +0,0 @@
-/*
- * Copyright (c) Contributors, http://opensimulator.org/
- * See CONTRIBUTORS.TXT for a full list of copyright holders.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are met:
- *     * Redistributions of source code must retain the above copyright
- *       notice, this list of conditions and the following disclaimer.
- *     * Redistributions in binary form must reproduce the above copyright
- *       notice, this list of conditions and the following disclaimer in the
- *       documentation and/or other materials provided with the distribution.
- *     * Neither the name of the OpenSimulator Project nor the
- *       names of its contributors may be used to endorse or promote products
- *       derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
- * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY
- * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
- * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
- * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
- * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-using System;
-using System.Collections.Concurrent;
-using System.Diagnostics;
-using System.Globalization;
-using System.Net.Sockets;
-using System.Threading;
-using System.Threading.Tasks;
-
-namespace HttpServer
-{
-    /// <summary>
-    /// Timeout Manager.   Checks for dead clients.  Clients with open connections that are not doing anything.   Closes sessions opened with keepalive.
-    /// </summary>
-    public static class ContextTimeoutManager
-    {
-        /// <summary>
-        /// Use a Thread or a Timer to monitor the ugly
-        /// </summary>
-        private static Thread m_internalThread = null;
-        private static object m_threadLock = new object();
-        private static ConcurrentQueue<HttpClientContext> m_contexts = new ConcurrentQueue<HttpClientContext>();
-        private static ConcurrentQueue<HttpClientContext> m_highPrio = new ConcurrentQueue<HttpClientContext>();
-        private static ConcurrentQueue<HttpClientContext> m_midPrio = new ConcurrentQueue<HttpClientContext>();
-        private static ConcurrentQueue<HttpClientContext> m_lowPrio = new ConcurrentQueue<HttpClientContext>();
-        private static AutoResetEvent m_processWaitEven = new AutoResetEvent(false);
-        private static bool m_shuttingDown;
-
-        private static int m_ActiveSendingCount;
-        private static double m_lastTimeOutCheckTime = 0;
-        private static double m_lastSendCheckTime = 0;
-
-        const int m_maxBandWidth = 10485760; //80Mbps
-        const int m_maxConcurrenSend = 32;
-
-        static ContextTimeoutManager()
-        {
-            TimeStampClockPeriod = 1.0 / (double)Stopwatch.Frequency;
-            TimeStampClockPeriodMS = 1e3 / (double)Stopwatch.Frequency;
-        }
-
-        public static void Start()
-        {
-            lock (m_threadLock)
-            {
-                if (m_internalThread != null)
-                    return;
-
-                m_lastTimeOutCheckTime = GetTimeStampMS();
-                m_internalThread = new Thread(ThreadRunProcess);
-                m_internalThread.Priority = ThreadPriority.Normal;
-                m_internalThread.IsBackground = true;
-                m_internalThread.CurrentCulture = new CultureInfo("en-US", false);
-                m_internalThread.Name = "HttpServerMain";
-                m_internalThread.Start();
-            }
-        }
-
-        public static void Stop()
-        {
-            m_shuttingDown = true;
-            m_internalThread.Join();
-            ProcessShutDown();
-        }
-
-        private static void ThreadRunProcess()
-        {
-            while (!m_shuttingDown)
-            {
-                m_processWaitEven.WaitOne(100);
-
-                if(m_shuttingDown)
-                    return;
-
-                double now = GetTimeStampMS();
-                if(m_contexts.Count > 0)
-                {
-                    ProcessSendQueues(now);
-
-                    if (now - m_lastTimeOutCheckTime > 1000)
-                    {
-                        ProcessContextTimeouts();
-                        m_lastTimeOutCheckTime = now;
-                    }
-                }
-                else
-                    m_lastTimeOutCheckTime = now;
-            }
-        }
-
-        public static void ProcessShutDown()
-        {
-            try
-            {
-                SocketError disconnectError = SocketError.HostDown;
-                for (int i = 0; i < m_contexts.Count; i++)
-                {
-                    HttpClientContext context = null;
-                    if (m_contexts.TryDequeue(out context))
-                    {
-                        try
-                        {
-                            context.Disconnect(disconnectError);
-                        }
-                        catch { }
-                    }
-                }
-                m_processWaitEven.Dispose();
-                m_processWaitEven = null;
-            }
-            catch
-            {
-                // We can't let this crash.
-            }
-        }
-
-        public static void ProcessSendQueues(double now)
-        {
-            int inqueues = m_highPrio.Count + m_midPrio.Count + m_lowPrio.Count;
-            if(inqueues == 0)
-                return;
-
-            double dt = now - m_lastSendCheckTime;
-            m_lastSendCheckTime = now;
-
-            int totalSending = m_ActiveSendingCount;
-
-            int curConcurrentLimit = m_maxConcurrenSend - totalSending;
-            if(curConcurrentLimit <= 0)
-                return;
-
-            if(curConcurrentLimit > inqueues)
-                curConcurrentLimit = inqueues;
-
-            if (dt > 0.1)
-                dt = 0.1;
-
-            dt /= curConcurrentLimit;
-            int curbytesLimit = (int)(m_maxBandWidth * dt);
-            if(curbytesLimit < 8192)
-                curbytesLimit = 8192;
-
-            HttpClientContext ctx;
-            int sent;
-            while (curConcurrentLimit > 0)
-            {
-                sent = 0;
-                while (m_highPrio.TryDequeue(out ctx))
-                {
-                    if(TrySend(ctx, curbytesLimit))
-                        m_highPrio.Enqueue(ctx);
-
-                    if (m_shuttingDown)
-                        return;
-                    --curConcurrentLimit;
-                    if (++sent == 4)
-                        break;
-                }
-
-                sent = 0;
-                while(m_midPrio.TryDequeue(out ctx))
-                {
-                    if(TrySend(ctx, curbytesLimit))
-                        m_midPrio.Enqueue(ctx);
-
-                    if (m_shuttingDown)
-                        return;
-                    --curConcurrentLimit;
-                    if (++sent >= 2)
-                        break;
-                }
-
-                if (m_lowPrio.TryDequeue(out ctx))
-                {
-                    --curConcurrentLimit;
-                    if(TrySend(ctx, curbytesLimit))
-                        m_lowPrio.Enqueue(ctx);
-                }
-
-                if (m_shuttingDown)
-                    return;
-            }
-        }
-
-        private static bool TrySend(HttpClientContext ctx, int bytesLimit)
-        {
-            if(!ctx.CanSend())
-                return false;
-
-            return ctx.TrySendResponse(bytesLimit);
-        }
-
-        /// <summary>
-        /// Causes the watcher to immediately check the connections.
-        /// </summary>
-        public static void ProcessContextTimeouts()
-        {
-            try
-            {
-                for (int i = 0; i < m_contexts.Count; i++)
-                {
-                    if (m_shuttingDown)
-                        return;
-                    if (m_contexts.TryDequeue(out HttpClientContext context))
-                    {
-                        if (!ContextTimedOut(context, out SocketError disconnectError))
-                            m_contexts.Enqueue(context);
-                        else if(disconnectError != SocketError.InProgress)
-                            context.Disconnect(disconnectError);
-                    }
-                }
-            }
-            catch
-            {
-                // We can't let this crash.
-            }
-        }
-
-        private static bool ContextTimedOut(HttpClientContext context, out SocketError disconnectError)
-        {
-            disconnectError = SocketError.InProgress;
-
-            // First our error conditions
-            if (context.contextID < 0 || context.StopMonitoring || context.StreamPassedOff)
-                return true;
-
-            // Now we start checking for actual timeouts
-
-            // First we check that we got at least one line within context.TimeoutFirstLine milliseconds
-            if (!context.FirstRequestLineReceived)
-            {
-                if (EnvironmentTickCountAdd(context.TimeoutFirstLine, context.MonitorStartMS) <= EnvironmentTickCount())
-                {
-                    disconnectError = SocketError.TimedOut;
-                    context.MonitorStartMS = 0;
-                    return true;
-                }
-            }
-
-            if (!context.FullRequestReceived)
-            {
-                if (EnvironmentTickCountAdd(context.TimeoutRequestReceived, context.MonitorStartMS) <= EnvironmentTickCount())
-                {
-                    disconnectError = SocketError.TimedOut;
-                    context.MonitorStartMS = 0;
-                    return true;
-                }
-            }
-
-            //
-            if (!context.FullRequestProcessed)
-            {
-                if (EnvironmentTickCountAdd(context.TimeoutFullRequestProcessed, context.MonitorStartMS) <= EnvironmentTickCount())
-                {
-                    disconnectError = SocketError.TimedOut;
-                    context.MonitorStartMS = 0;
-                    return true;
-                }
-            }
-
-            if (context.TriggerKeepalive)
-            {
-                context.TriggerKeepalive = false;
-                context.MonitorKeepaliveMS = EnvironmentTickCount();
-            }
-
-            if (context.FullRequestProcessed && context.MonitorKeepaliveMS == 0)
-                return true;
-
-            if (context.MonitorKeepaliveMS != 0 &&
-                EnvironmentTickCountAdd(context.TimeoutKeepAlive, context.MonitorKeepaliveMS) <= EnvironmentTickCount())
-            {
-                disconnectError = SocketError.TimedOut;
-                context.MonitorStartMS = 0;
-                context.MonitorKeepaliveMS = 0;
-                return true;
-            }
-
-            return false;
-        }
-
-        public static void StartMonitoringContext(HttpClientContext context)
-        {
-            context.MonitorStartMS = EnvironmentTickCount();
-            m_contexts.Enqueue(context);
-        }
-
-        public static void EnqueueSend(HttpClientContext context, int priority)
-        {
-            switch(priority)
-            {
-                case 0:
-                    m_highPrio.Enqueue(context);
-                    break;
-                case 1:
-                    m_midPrio.Enqueue(context);
-                    break;
-                case 2:
-                    m_lowPrio.Enqueue(context);
-                    break;
-                default:
-                    return;
-            }
-            m_processWaitEven.Set();
-        }
-
-        public static void ContextEnterActiveSend()
-        {
-            Interlocked.Increment(ref m_ActiveSendingCount);
-        }
-
-        public static void ContextLeaveActiveSend()
-        {
-            Interlocked.Decrement(ref m_ActiveSendingCount);
-        }
-
-        /// <summary>
-        /// Environment.TickCount is an int but it counts all 32 bits so it goes positive
-        /// and negative every 24.9 days. This trims down TickCount so it doesn't wrap
-        /// for the callers.
-        /// This trims it to a 12 day interval so don't let your frame time get too long.
-        /// </summary>
-        /// <returns></returns>
-        public static int EnvironmentTickCount()
-        {
-            return Environment.TickCount & EnvironmentTickCountMask;
-        }
-        const int EnvironmentTickCountMask = 0x3fffffff;
-
-        /// <summary>
-        /// Environment.TickCount is an int but it counts all 32 bits so it goes positive
-        /// and negative every 24.9 days. Subtracts the passed value (previously fetched by
-        /// 'EnvironmentTickCount()') and accounts for any wrapping.
-        /// </summary>
-        /// <param name="newValue"></param>
-        /// <param name="prevValue"></param>
-        /// <returns>subtraction of passed prevValue from current Environment.TickCount</returns>
-        public static int EnvironmentTickCountSubtract(Int32 newValue, Int32 prevValue)
-        {
-            int diff = newValue - prevValue;
-            return (diff >= 0) ? diff : (diff + EnvironmentTickCountMask + 1);
-        }
-
-        /// <summary>
-        /// Environment.TickCount is an int but it counts all 32 bits so it goes positive
-        /// and negative every 24.9 days. Subtracts the passed value (previously fetched by
-        /// 'EnvironmentTickCount()') and accounts for any wrapping.
-        /// </summary>
-        /// <param name="newValue"></param>
-        /// <param name="prevValue"></param>
-        /// <returns>subtraction of passed prevValue from current Environment.TickCount</returns>
-        public static int EnvironmentTickCountAdd(Int32 newValue, Int32 prevValue)
-        {
-            int ret = newValue + prevValue;
-            return (ret >= 0) ? ret : (ret + EnvironmentTickCountMask + 1);
-        }
-
-        public static double TimeStampClockPeriodMS;
-        public static double TimeStampClockPeriod;
-
-        [System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.AggressiveInlining)]
-        public static double GetTimeStamp()
-        {
-            return Stopwatch.GetTimestamp() * TimeStampClockPeriod;
-        }
-
-        [System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.AggressiveInlining)]
-        public static double GetTimeStampMS()
-        {
-            return Stopwatch.GetTimestamp() * TimeStampClockPeriodMS;
-        }
-
-        // doing math in ticks is usefull to avoid loss of resolution
-        [System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.AggressiveInlining)]
-        public static long GetTimeStampTicks()
-        {
-            return Stopwatch.GetTimestamp();
-        }
-
-        [System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.AggressiveInlining)]
-        public static double TimeStampTicksToMS(long ticks)
-        {
-            return ticks * TimeStampClockPeriodMS;
-        }
-
-    }
-}
diff --git a/HttpServer/trunk/HttpServer/Controllers/AuthRequiredAttribute.cs b/HttpServer/trunk/HttpServer/Controllers/AuthRequiredAttribute.cs
deleted file mode 100644
index 30d4317..0000000
--- a/HttpServer/trunk/HttpServer/Controllers/AuthRequiredAttribute.cs
+++ /dev/null
@@ -1,69 +0,0 @@
-using System;
-
-namespace HttpServer.Controllers
-{
-    /// <summary>
-    /// Marks methods to let framework know that the method is protected
-    /// </summary>
-    /// <seealso cref="AuthValidatorAttribute"/>
-    /// <seealso cref="RequestController"/>
-    public class AuthRequiredAttribute : Attribute
-    {
-        private readonly int _level;
-
-        /// <summary>
-        /// Initializes a new instance of the <see cref="AuthRequiredAttribute"/> class.
-        /// </summary>
-        public AuthRequiredAttribute()
-        {
-            _level = 0;
-        }
-
-        /// <summary>
-        ///
-        /// </summary>
-        /// <param name="level">
-        /// Level is a value defined by you. It should be used to determine the users
-        /// that can access the method tagged with the AuthRequired attribute.
-        /// </param>
-        /// <example>
-        /// <![CDATA[
-        /// public enum UserLevel
-        /// {
-        ///   Guest,
-        ///   User,
-        ///   Admin,
-        ///   SuperAdmin
-        /// }
-        /// public class UserController : RequestController
-        /// {
-        ///   [AuthRequired(UserLevel.User)]
-        ///   public string View()
-        ///   {
-        ///     return "Can also be viewed by users";
-        ///   }
-        ///
-        ///   [AuthValidatorAttribute]
-        ///   public bool ValidateUser(int level)
-        ///   {
-        ///      (User)user = Session["user"];
-        ///      return user != null && user.Status >= level;
-        ///   }
-        /// }
-        /// ]]>
-        /// </example>
-        public AuthRequiredAttribute(int level)
-        {
-            _level = level;
-        }
-
-        /// <summary>
-        /// Level is a value defined by you. It should be used to determine the users
-        /// that can access the method tagged with the AuthRequired attribute.
-        /// </summary>
-        public int Level
-        {
-            get { return _level; }
-        }
-    }
-}
diff --git a/HttpServer/trunk/HttpServer/Controllers/AuthValidatorAttribute.cs b/HttpServer/trunk/HttpServer/Controllers/AuthValidatorAttribute.cs
deleted file mode 100644
index 2b018ee..0000000
--- a/HttpServer/trunk/HttpServer/Controllers/AuthValidatorAttribute.cs
+++ /dev/null
@@ -1,47 +0,0 @@
-using System;
-using HttpServer;
-using HttpServer.HttpModules;
-
-namespace HttpServer.Controllers
-{
-    /// <summary>
-    /// Method marked with this attribute determines if authentication is required.
-    /// </summary>
-    /// <seealso cref="ControllerModule"/>
-    /// <seealso cref="HttpServer"/>
-    /// <seealso cref="AuthRequiredAttribute"/>
-    /// <seealso cref="WebSiteModule"/>
-    /// <remarks>
-    /// <para>The method should take one parameter (int level), return a bool and be protected/private.</para>
-    /// <para>You should throw UnauthorizedException if you are using HTTP authentication.</para>
-    /// </remarks>
-    /// <example>
-    /// <![CDATA[
-    /// public enum UserLevel
-    /// {
-    ///   Guest,
-    ///   User,
-    ///   Admin,
-    ///   SuperAdmin
-    /// }
-    /// public class UserController : RequestController
-    /// {
-    ///   [AuthRequired(UserLevel.User)]
-    ///   public string View()
-    ///   {
-    ///     return "Can also be viewed by users";
-    ///   }
-    ///
-    ///   [AuthValidatorAttribute]
-    ///   public bool ValidateUser(int level)
-    ///   {
-    ///      (User)user = Session["user"];
-    ///      return user != null && user.Status >= level;
-    ///   }
-    /// }
-    /// ]]>
-    /// </example>
-    public class AuthValidatorAttribute : Attribute
-    {
-    }
-}
diff --git a/HttpServer/trunk/HttpServer/Controllers/BeforeFilter.cs b/HttpServer/trunk/HttpServer/Controllers/BeforeFilter.cs
deleted file mode 100644
index 4953026..0000000
--- a/HttpServer/trunk/HttpServer/Controllers/BeforeFilter.cs
+++ /dev/null
@@ -1,70 +0,0 @@
-using System;
-
-namespace HttpServer.Controllers
-{
-    /// <summary>
-    /// Methods marked with BeforeFilter will be invoked before each request.
-    /// </summary>
-    /// <remarks>
-    /// BeforeFilters should take no arguments and return false
-    /// if controller method should not be invoked.
-    /// </remarks>
-    /// <seealso cref="FilterPosition"/>
-    public class BeforeFilterAttribute : Attribute
-    {
-        private readonly FilterPosition _position;
-
-        /// <summary>
-        /// Initializes a new instance of the <see cref="BeforeFilterAttribute"/> class.
-        /// </summary>
-        /// <remarks>
-        /// BeforeFilters should take no arguments and return false
-        /// if controller method should not be invoked.
-        /// </remarks>
-        public BeforeFilterAttribute()
-        {
-            _position = FilterPosition.Between;
-        }
-
-        /// <summary>
-        /// Initializes a new instance of the <see cref="BeforeFilterAttribute"/> class.
-        /// </summary>
-        /// <param name="position">Specify if the filter should be invoked among the first filters, in between or among the last.</param>
-        /// <remarks>
-        /// BeforeFilters should take no arguments and return false
-        /// if controller method should not be invoked.
-        /// </remarks>
-        public BeforeFilterAttribute(FilterPosition position)
-        {
-            _position = position;
-        }
-
-        /// <summary>
-        /// Filters position in before filter queue
-        /// </summary>
-        public FilterPosition Position
-        {
-            get { return _position; }
-        }
-    }
-
-    /// <summary>
-    /// Determins when a before filter is executed.
-    /// </summary>
-    /// <seealso cref="BeforeFilterAttribute"/>
-    public enum FilterPosition
-    {
-        /// <summary>
-        /// Filter will be invoked first (unless another filter is added after this one with the First position)
-        /// </summary>
-        First,
-        /// <summary>
-        /// Invoke after all first filters, and before the last filters.
-        /// </summary>
-        Between,
-        /// <summary>
-        /// Filter will be invoked last (unless another filter is added after this one with the Last position)
-        /// </summary>
-        Last
-    }
-}
\ No newline at end of file
diff --git a/HttpServer/trunk/HttpServer/Controllers/ControllerNameAttribute.cs b/HttpServer/trunk/HttpServer/Controllers/ControllerNameAttribute.cs
deleted file mode 100644
index b8fee2d..0000000
--- a/HttpServer/trunk/HttpServer/Controllers/ControllerNameAttribute.cs
+++ /dev/null
@@ -1,39 +0,0 @@
-using System;
-
-namespace HttpServer.Controllers
-{
-    /// <summary>
-    /// This attribute can be used to map a controller to a specific url without using
-    /// the class name.
-    /// </summary>
-    public class ControllerNameAttribute : Attribute
-    {
-        private readonly string _name;
-
-        /// <summary>
-        /// Maps a controller to a url without using the controller name.
-        /// </summary>
-        /// <remarks>
-        /// <para>Per default the class name is used to determine which url to handle.
-        /// For instance, "class UserController" or "class User" tells the framework that
-        /// the urls that starts with "/user" should be handled by that controller.</para>
-        /// <para>This attribute can be used to circumvent  that.</para>
-        /// </remarks>
-        /// <param name="name">The name.</param>
-        public ControllerNameAttribute(string name)
-        {
-            if (string.IsNullOrEmpty(name))
-                throw new ArgumentNullException("name");
-
-            _name = name;
-        }
-
-        /// <summary>
-        /// The name that the controller should use
-        /// </summary>
-        public string Name
-        {
-            get { return _name; }
-        }
-    }
-}
diff --git a/HttpServer/trunk/HttpServer/Controllers/ControllerTester.cs b/HttpServer/trunk/HttpServer/Controllers/ControllerTester.cs
deleted file mode 100644
index 7c516ad..0000000
--- a/HttpServer/trunk/HttpServer/Controllers/ControllerTester.cs
+++ /dev/null
@@ -1,250 +0,0 @@
-using System;
-using System.IO;
-using System.Net;
-using System.Net.Sockets;
-using HttpServer.Exceptions;
-using HttpServer.Sessions;
-using Xunit;
-
-namespace HttpServer.Controllers
-{
-    /// <summary>
-    /// Used to simply testing of controls.
-    /// </summary>
-    public class ControllerTester
-    {
-        /// <summary>
-        /// Fake host name, default is "http://localhost"
-        /// </summary>
-        public string HostName = "http://localhost";
-
-        private static readonly IHttpClientContext TestContext = new MyContext();
-
-        /// <summary>
-        /// Session used if null have been specified as argument to one of the class methods.
-        /// </summary>
-        public IHttpSession DefaultSession = new MemorySession("abc");
-
-        /// <summary>
-        /// Send a GET request to a controller.
-        /// </summary>
-        /// <param name="controller">Controller receiving the post request.</param>
-        /// <param name="uri">Uri visited.</param>
-        /// <param name="response">Response from the controller.</param>
-        /// <param name="session">Session used during the test. null = <see cref="DefaultSession"/> is used.</param>
-        /// <returns>body posted by the response object</returns>
-        /// <example>
-        /// <code>
-        /// void MyTest()
-        /// {
-        ///     ControllerTester tester = new ControllerTester();
-        ///
-        ///     MyController controller = new MyController();
-        ///     IHttpResponse response;
-        ///     string text = Get(controller, "/my/hello/1?hello=world", out response, null);
-        ///     Assert.Equal("world|1", text);
-        /// }
-        /// </code>
-        /// </example>
-        public string Get(RequestController controller, string uri, out IHttpResponse response, IHttpSession session)
-        {
-            return Invoke(controller, Method.Get, uri, out response, session);
-        }
-
-        /// <summary>
-        /// Send a POST request to a controller.
-        /// </summary>
-        /// <param name="controller">Controller receiving the post request.</param>
-        /// <param name="uri">Uri visited.</param>
-        /// <param name="form">Form being processed by controller.</param>
-        /// <param name="response">Response from the controller.</param>
-        /// <param name="session">Session used during the test. null = <see cref="DefaultSession"/> is used.</param>
-        /// <returns>body posted by the response object</returns>
-        /// <example>
-        /// <code>
-        /// void MyTest()
-        /// {
-        ///     // Create a controller.
-        ///     MyController controller = new MyController();
-        ///
-        ///     // build up a form that is used by the controller.
-        ///     HttpForm form = new HttpForm();
-        ///     form.Add("user[firstName]", "Jonas");
-        ///
-        ///     // Invoke the request
-        ///     ControllerTester tester = new ControllerTester();
-        ///     IHttpResponse response;
-        ///     string text = tester.Get(controller, "/user/create/", form, out response, null);
-        ///
-        ///     // validate response back from controller.
-        ///     Assert.Equal("User 'Jonas' has been created.", text);
-        /// }
-        /// </code>
-        /// </example>
-        public string Post(RequestController controller, string uri, HttpForm form, out IHttpResponse response, IHttpSession session)
-        {
-            return Invoke(controller, Method.Post, uri, form, out response, session);
-        }
-
-
-        private string Invoke(RequestController controller, string httpMetod, string uri, out IHttpResponse response, IHttpSession session)
-        {
-            return Invoke(controller, httpMetod, uri, null, out response, session);
-        }
-
-// ReSharper disable SuggestBaseTypeForParameter
-        private string Invoke(RequestController controller, string httpMetod, string uri, HttpForm form, out IHttpResponse response, IHttpSession session)
-// ReSharper restore SuggestBaseTypeForParameter
-        {
-            HttpRequest request = new HttpRequest
-                                  	{
-                                  		HttpVersion = "HTTP/1.1",
-                                  		UriPath = uri,
-                                  		Method = httpMetod,
-                                  		Uri = new Uri(HostName + uri)
-                                  	};
-        	request.AssignForm(form);
-
-        	response = request.CreateResponse(TestContext);
-            if(!controller.Process(request, response, session))
-                throw new NotFoundException("404 could not find processor for: " + uri);
-
-            response.Body.Seek(0, SeekOrigin.Begin);
-            StreamReader reader = new StreamReader(response.Body);
-            return reader.ReadToEnd();
-        }
-
-        [Fact]
-        private void TestGet()
-        {
-            MyController controller = new MyController();
-            IHttpResponse response;
-            IHttpSession session = DefaultSession;
-            string text = Get(controller, "/my/hello/1?hello=world", out response, session);
-            Assert.Equal("world|1", text);
-        }
-
-        [Fact]
-        private void TestPost()
-        {
-            MyController controller = new MyController();
-            IHttpResponse response;
-            IHttpSession session = DefaultSession;
-            HttpForm form = new HttpForm();
-            form.Add("user[firstName]", "jonas");
-            string text = Post(controller, "/my/hello/id", form, out response, session);
-            Assert.Equal("jonas", text);
-        }
-
-
-        private class MyController : RequestController
-        {
-            //controller method.
-// ReSharper disable UnusedMemberInPrivateClass
-            public string Hello()
-// ReSharper restore UnusedMemberInPrivateClass
-            {
-                Assert.False(string.IsNullOrEmpty(Id));
-                if (Request.Method == Method.Post)
-                    return Request.Form["user"]["firstName"].Value;
-
-                return Request.QueryString["hello"].Value + "|" + Id;
-            }
-
-            public override object Clone()
-            {
-                return new MyController();
-            }
-        }
-
-        private class MyContext : IHttpClientContext
-        {
-            private const bool _secured = false;
-
-            /// <summary>
-            /// Using SSL or other encryption method.
-            /// </summary>
-            public bool Secured
-            {
-                get { return _secured; }
-            }
-
-            /// <summary>
-            /// Using SSL or other encryption method.
-            /// </summary>
-            public bool IsSecured
-            {
-                get { return _secured; }
-            }
-
-            /// <summary>
-            /// Disconnect from client
-            /// </summary>
-            /// <param name="error">error to report in the <see cref="Disconnected"/> event.</param>
-            public void Disconnect(SocketError error)
-            {
-            }
-
-            /// <summary>
-            /// Send a response.
-            /// </summary>
-            /// <param name="httpVersion">Either HttpHelper.HTTP10 or HttpHelper.HTTP11</param>
-            /// <param name="statusCode">http status code</param>
-            /// <param name="reason">reason for the status code.</param>
-            /// <param name="body">html body contents, can be null or empty.</param>
-            /// <param name="contentType">A content type to return the body as, ie 'text/html' or 'text/plain', defaults to 'text/html' if null or empty</param>
-            /// <exception cref="ArgumentException">If httpVersion is invalid.</exception>
-            public void Respond(string httpVersion, HttpStatusCode statusCode, string reason, string body, string contentType)
-            {
-            }
-
-            /// <summary>
-            /// Send a response.
-            /// </summary>
-            /// <param name="httpVersion">Either HttpHelper.HTTP10 or HttpHelper.HTTP11</param>
-            /// <param name="statusCode">http status code</param>
-            /// <param name="reason">reason for the status code.</param>
-            public void Respond(string httpVersion, HttpStatusCode statusCode, string reason)
-            {
-            }
-
-            /// <summary>
-            /// Send a response.
-            /// </summary>
-            /// <exception cref="ArgumentNullException"></exception>
-            public void Respond(string body)
-            {
-            }
-
-            /// <summary>
-            /// send a whole buffer
-            /// </summary>
-            /// <param name="buffer">buffer to send</param>
-            /// <exception cref="ArgumentNullException"></exception>
-            public void Send(byte[] buffer)
-            {
-            }
-
-            /// <summary>
-            /// Send data using the stream
-            /// </summary>
-            /// <param name="buffer">Contains data to send</param>
-            /// <param name="offset">Start position in buffer</param>
-            /// <param name="size">number of bytes to send</param>
-            /// <exception cref="ArgumentNullException"></exception>
-            /// <exception cref="ArgumentOutOfRangeException"></exception>
-            public void Send(byte[] buffer, int offset, int size)
-            {
-            }
-
-            public void ShutupWarnings()
-            {
-                Disconnected(this, null);
-                RequestReceived(this, null);
-            }
-
-            public event EventHandler<DisconnectedEventArgs> Disconnected;
-            public event EventHandler<RequestEventArgs> RequestReceived;
-        }
-    }
-}
diff --git a/HttpServer/trunk/HttpServer/Controllers/RawHandlerAttribute.cs b/HttpServer/trunk/HttpServer/Controllers/RawHandlerAttribute.cs
deleted file mode 100644
index ed6eaf6..0000000
--- a/HttpServer/trunk/HttpServer/Controllers/RawHandlerAttribute.cs
+++ /dev/null
@@ -1,12 +0,0 @@
-using System;
-
-namespace HttpServer.Controllers
-{
-    /// <summary>
-    /// This attribute tells the controller that the method
-    /// uses SendHeader and/or SendBody to handle the request.
-    /// </summary>
-    public class RawHandlerAttribute : Attribute
-    {
-    }
-}
diff --git a/HttpServer/trunk/HttpServer/Controllers/RequestController.cs b/HttpServer/trunk/HttpServer/Controllers/RequestController.cs
deleted file mode 100644
index 8b8607e..0000000
--- a/HttpServer/trunk/HttpServer/Controllers/RequestController.cs
+++ /dev/null
@@ -1,587 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.IO;
-using System.Reflection;
-using System.Web;
-using HttpServer.Authentication;
-using HttpServer.Exceptions;
-using HttpServer.HttpModules;
-using HttpServer.Sessions;
-
-namespace HttpServer.Controllers
-{
-    /// <summary>
-    /// A controller in the Model-View-Controller pattern.
-    ///  Derive this class and add method with one of the following signatures:
-    /// "public string MethodName()" or "public void MyMethod()".
-    ///
-    /// The first should return a string with the response, the latter
-    /// should use SendHeader and SendBody methods to handle the response.
-    /// </summary>
-    /// <remarks>
-    /// Last segment of the path is always broken into the properties Id and RequestedType
-    /// Alhtough note that the RequestedType can also be empty if no file extension have
-    /// been specified. A typical use of file extensions in controllers is to specify which type of
-    /// format to return.
-    /// </remarks>
-    /// <example>
-    /// public class MyController : RequestController
-    /// {
-    ///   public string Hello()
-    ///   {
-    ///       if (RequestedType == "xml")
-    ///           return "&lt;hello&gt;World&lt;hello&gt;";
-    ///       else
-    ///           return "Hello " + Request.QueryString["user"].Value + ", welcome to my world";
-    ///   }
-    ///
-    ///   public void File()
-    ///   {
-    ///     Response.Headers.ContentType = "text/xml";
-    ///     Response.SendHeader();
-    ///   }
-    /// }
-    /// </example>
-    /// <seealso cref="ControllerNameAttribute"/>
-    /// <seealso cref="AuthRequiredAttribute"/>
-    /// <seealso cref="AuthValidatorAttribute"/>
-    public abstract class RequestController : HttpModule, ICloneable
-    {
-        private const string Html = "html";
-        private readonly LinkedList<MethodInfo> _beforeFilters = new LinkedList<MethodInfo>();
-        private readonly Dictionary<string, MethodInfo> _binaryMethods = new Dictionary<string, MethodInfo>();
-        private readonly Dictionary<string, int> _authMethods = new Dictionary<string, int>();
-        private readonly Dictionary<string, MethodInfo> _methods = new Dictionary<string, MethodInfo>();
-        private LinkedListNode<MethodInfo> _lastMiddleFilter;
-        private string _controllerName;
-        private MethodInfo _defaultMethod;
-        private string _defaultMethodStr;
-        private MethodInfo _authValidator;
-
-        //used temp during method mapping.
-        private string _id;
-        private MethodInfo _method;
-        private string _methodName;
-        private IHttpRequest _request;
-        private string _requestedExtension;
-        private IHttpResponse _response;
-        private IHttpSession _session;
-
-        /// <summary>
-        /// create a new request controller
-        /// </summary>
-        /// <param name="controller">prototype to copy information from</param>
-        protected RequestController(RequestController controller)
-        {
-            _beforeFilters = controller._beforeFilters;
-            _binaryMethods = controller._binaryMethods;
-            _authMethods = controller._authMethods;
-            _methods = controller._methods;
-            _controllerName = controller.ControllerName;
-            _defaultMethod = controller._defaultMethod;
-            _defaultMethodStr = controller._defaultMethodStr;
-            _authValidator = controller._authValidator;
-        }
-
-        /// <summary>
-        /// create a new controller
-        /// </summary>
-        protected RequestController()
-        {
-            MapMethods();
-        }
-
-        /// <summary>
-        /// object that was attached during http authentication process.
-        /// </summary>
-        /// <remarks>
-        /// You can also assign this tag yourself if you are using regular
-        /// http page login.
-        /// </remarks>
-        /// <seealso cref="AuthModule"/>
-        protected object AuthenticationTag
-        {
-            get { return _session[AuthModule.AuthenticationTag]; }
-            set { _session[AuthModule.AuthenticationTag] = value; }
-        }
-
-        /// <summary>
-        /// Name of this controller (class name without the "Controller" part)
-        /// </summary>
-        public string ControllerName
-        {
-            get { return _controllerName; }
-        }
-
-        /// <summary>
-        /// Specifies the method to use if no action have been specified.
-        /// </summary>
-        /// <exception cref="ArgumentException">If specified method do not exist.</exception>
-        public string DefaultMethod
-        {
-            get { return _defaultMethodStr; }
-            set
-            {
-                if (_methods.ContainsKey(value.ToLower()))
-                {
-                    _defaultMethodStr = value.ToLower();
-                    _defaultMethod = _methods[_defaultMethodStr];
-                }
-                else if (_binaryMethods.ContainsKey(value.ToLower()))
-                {
-                    _defaultMethodStr = value.ToLower();
-                    _defaultMethod = _binaryMethods[_defaultMethodStr];
-                }
-                else
-                    throw new ArgumentException("New DefaultMethod value is not a valid controller method.");
-            }
-        }
-
-        /// <summary>
-        /// Id is the third part of the uri path.
-        /// </summary>
-        /// <remarks>
-        /// <para>Is extracted as in: /controllername/methodname/id/
-        /// </para>
-        /// <para>string.Empty if not specified.</para>
-        /// </remarks>
-        /// <example></example>
-        public string Id
-        {
-            get { return _id ?? string.Empty; }
-        }
-
-        /// <summary>
-        /// Method currently being invoked.
-        /// Always in lower case.
-        /// </summary>
-        public string MethodName
-        {
-            get { return _methodName; }
-        }
-
-        /// <summary>
-        /// Request information (like Url, form, querystring etc)
-        /// </summary>
-        protected IHttpRequest Request
-        {
-            get { return _request; }
-        }
-
-        /// <summary>
-        /// Extension if a filename was specified.
-        /// </summary>
-        public string RequestedExtension
-        {
-            get { return _requestedExtension; }
-        }
-
-        /// <summary>
-        /// Response information (that is going to be sent back to the browser/client)
-        /// </summary>
-        protected IHttpResponse Response
-        {
-            get { return _response; }
-        }
-
-        /// <summary>
-        /// Session information, is stored between requests as long as the session cookie is valid.
-        /// </summary>
-        protected IHttpSession Session
-        {
-            get { return _session; }
-        }
-
-        /*
-        protected virtual void AddAuthAttribute(string methodName, object attribute)
-        {
-            if (attribute.GetType() == typeof (AuthenticatorAttribute))
-            {
-                AuthenticatorAttribute attrib = (AuthenticatorAttribute) attribute;
-                try
-                {
-                    MethodInfo mi = GetType().GetMethod(attrib.Method);
-                    if (methodName == ClassMethodName)
-                        _classCheckAuthMethod = mi;
-                    else
-                        _authMethods.Add(methodName, mi);
-                }
-                catch (AmbiguousMatchException err)
-                {
-                    if (methodName == "class")
-                        throw new InvalidOperationException(
-                            "Failed to find Authenticator method for class " + GetType().Name, err);
-                    else
-                        throw new InvalidOperationException("Failed to find Authenticator method for " + GetType().Name +
-                                                            "." + methodName);
-                }
-            }
-            else
-                throw new ArgumentException("Attribute is not of type AuthenticatorAttribute");
-        }
-        */
-
-        /// <summary>
-        /// Method that determines if an url should be handled or not by the module
-        /// </summary>
-        /// <param name="request">Url requested by the client.</param>
-        /// <returns>true if module should handle the url.</returns>
-        public virtual bool CanHandle(IHttpRequest request)
-        {
-            if (request.UriParts.Length <= 0)
-                return false;
-
-            // check if controller name is correct. uri segments adds a slash to the segments
-            if (string.Compare(request.UriParts[0], _controllerName, true) != 0)
-                return false;
-
-            // check action
-            if (request.UriParts.Length > 1)
-            {
-                string uriPart = request.UriParts[1];
-                int pos = uriPart.LastIndexOf('.');
-                if (pos != -1)
-                    uriPart = uriPart.Substring(0, pos);
-                if (_methods.ContainsKey(uriPart) || _binaryMethods.ContainsKey(uriPart))
-                    return true;
-            }
-
-            if (request.UriParts.Length == 1)
-                return _defaultMethod != null;
-
-            return false;
-        }
-
-        /// <summary>
-        /// Determines which method to use.
-        /// </summary>
-        /// <param name="request">Requested resource</param>
-        protected virtual MethodInfo GetMethod(IHttpRequest request)
-        {
-            // Check where the default met
-            if (request.UriParts.Length <= 1)
-                return _defaultMethod;
-
-            string uriPart = request.UriParts[1];
-            int pos = uriPart.LastIndexOf('.');
-            if (pos != -1)
-            {
-                _requestedExtension = uriPart.Substring(pos + 1);
-                uriPart = uriPart.Substring(0, pos);
-            }
-
-            if (_methods.ContainsKey(uriPart))
-                return _methods[uriPart];
-
-            if (_binaryMethods.ContainsKey(uriPart))
-                return _binaryMethods[uriPart];
-
-
-            return null;
-        }
-
-        /// <summary>
-        /// Call all before filters
-        /// </summary>
-        /// <returns>true if a before filter wants to abort the processing.</returns>
-        private bool InvokeBeforeFilters()
-        {
-            try
-            {
-                foreach (MethodInfo info in _beforeFilters)
-                    if (!(bool) info.Invoke(this, null))
-                        return true;
-
-                return false;
-            }
-            catch (TargetInvocationException err)
-            {
-#if DEBUG
-                FieldInfo remoteStackTraceString =
-                    typeof(Exception).GetField("_remoteStackTraceString",
-                                                BindingFlags.Instance | BindingFlags.NonPublic);
-                remoteStackTraceString.SetValue(err.InnerException, err.InnerException.StackTrace + Environment.NewLine);
-                throw err.InnerException;
-#else
-                    throw new InternalServerException("Controller filter failure, please try again.", err);
-#endif
-            }
-        }
-
-        /// <summary>
-        /// Override this method to be able to process result
-        /// returned by controller method.
-        /// </summary>
-        protected virtual void InvokeMethod()
-        {
-            try
-            {
-                InvokeMethodInternal();
-            }
-            catch (Exception err)
-            {
-                OnUnhandledException(err);
-            }
-        }
-
-        /// <summary>
-        /// Override this method if you want to be able to
-        /// handle unhanded exceptions
-        /// </summary>
-        /// <param name="err">thrown exception</param>
-        /// <remarks>Don't "eat" exceptions derived from HttpException since
-        /// they are handled by the framework,unless your are sure of what you are
-        /// doing..</remarks>
-        protected virtual void OnUnhandledException(Exception err)
-        {
-            throw err;
-        }
-
-        private void InvokeMethodInternal()
-        {
-            if (_authMethods.ContainsKey(_methodName))
-            {
-                if (_authValidator != null)
-                {
-                    if (_authValidator.GetParameters().Length == 1)
-                    {
-                        if (!(bool) _authValidator.Invoke(this, new object[] {_authMethods[_methodName]}))
-                            return;
-                    }
-                    // backwards compatible.
-                    else
-                        if (!(bool)_authValidator.Invoke(this, null))
-                            throw new UnauthorizedException("Need to authenticate.");
-                }
-            }
-
-            if (_method.ReturnType == typeof (string))
-            {
-                try
-                {
-                    string temp = (string) _method.Invoke(this, null);
-                    if (temp != null)
-                    {
-                        TextWriter writer = new StreamWriter(Response.Body);
-                        writer.Write(temp);
-                        writer.Flush();
-                    }
-                }
-                catch (TargetInvocationException err)
-                {
-#if DEBUG
-                    FieldInfo remoteStackTraceString =
-                        typeof (Exception).GetField("_remoteStackTraceString",
-                                                    BindingFlags.Instance | BindingFlags.NonPublic);
-                    remoteStackTraceString.SetValue(err.InnerException, err.InnerException.StackTrace + Environment.NewLine);
-                    throw err.InnerException;
-#else
-                    throw new InternalServerException("Controller failure, please try again.", err);
-#endif
-                }
-            }
-            else
-            {
-                _method.Invoke(this, null);
-            }
-        }
-        /*
-        /// <summary>
-        /// check authentication attributes for the class
-        /// </summary>
-        protected virtual void MapClassAuth()
-        {
-            object[] attributes = GetType().GetCustomAttributes(true);
-            foreach (object attribute in attributes)
-            {
-                if (attribute.GetType() == typeof (AuthenticatorAttribute))
-                    AddAuthAttribute(ClassMethodName, attribute);
-                if (attribute.GetType() == typeof (AuthenticationRequiredAttribute))
-                    AddCheckAuthAttribute(ClassMethodName, attribute);
-            }
-        }
-        */
-        /// <summary>
-        /// This method goes through all methods in the controller and
-        /// add's them to a dictionary. They are later used to invoke
-        /// the correct method depending on the url
-        /// </summary>
-        private void MapMethods()
-        {
-            lock (_methods)
-            {
-                // already mapped.
-                if (_methods.Count > 0)
-                    return;
-
-                object[] controllerNameAttrs = GetType().GetCustomAttributes(typeof (ControllerNameAttribute), false);
-                if (controllerNameAttrs.Length > 0)
-                    _controllerName = ((ControllerNameAttribute)controllerNameAttrs[0]).Name;
-                else
-                {
-                    _controllerName = GetType().Name;
-                    if (ControllerName.Contains("Controller"))
-                        _controllerName = ControllerName.Replace("Controller", "");
-                    _controllerName = ControllerName.ToLower();
-                }
-
-                MethodInfo[] methods =
-                    GetType().GetMethods(BindingFlags.Public | BindingFlags.InvokeMethod | BindingFlags.Instance);
-                foreach (MethodInfo info in methods)
-                {
-                    ParameterInfo[] parameters = info.GetParameters();
-
-                    // find regular render methods
-                    if (parameters.Length == 0 && info.ReturnType == typeof (string))
-                    {
-                        string name = info.Name.ToLower();
-                        if (name.Length > 3 && (name.Substring(0, 4) == "get_" || name.Substring(0, 4) == "set_"))
-                            continue;
-                        if (name == "tostring")
-                            continue;
-
-                        // Add authenticators
-                        object[] authAttributes = info.GetCustomAttributes(true);
-                        foreach (object attribute in authAttributes)
-                            if (attribute.GetType() == typeof (AuthRequiredAttribute))
-                                _authMethods.Add(info.Name.ToLower(), ((AuthRequiredAttribute)attribute).Level);
-                        _methods.Add(info.Name.ToLower(), info);
-                    }
-
-                    // find raw handlers
-                    object[] attributes = info.GetCustomAttributes(typeof (RawHandlerAttribute), true);
-                    if (attributes.Length >= 1 && info.ReturnType == typeof (void) && parameters.Length == 0)
-                    {
-                        // Add authenticators
-                        object[] authAttributes = info.GetCustomAttributes(true);
-                        foreach (object attribute in authAttributes)
-                            if (attribute.GetType() == typeof(AuthRequiredAttribute))
-                                _authMethods.Add(info.Name.ToLower(), ((AuthRequiredAttribute)attribute).Level);
-                        _binaryMethods.Add(info.Name.ToLower(), info);
-                    }
-                } //foreach
-
-                methods = GetType().GetMethods(BindingFlags.Instance | BindingFlags.NonPublic);
-                foreach (MethodInfo info in methods)
-                {
-                    ParameterInfo[] parameters = info.GetParameters();
-
-                    // find before filters.
-                    if (parameters.Length == 0 && info.ReturnType == typeof (bool))
-                    {
-                        object[] authAttributes = info.GetCustomAttributes(true);
-                        foreach (object attribute in authAttributes)
-                            if (attribute.GetType() == typeof(AuthValidatorAttribute))
-                            {
-                                if (_authValidator != null)
-                                    throw new InvalidOperationException("Auth validator have already been specified.");
-                                _authValidator = info;
-                            }
-                            else if (attribute.GetType() == typeof (BeforeFilterAttribute))
-                            {
-                                BeforeFilterAttribute attr = (BeforeFilterAttribute) attribute;
-                                LinkedListNode<MethodInfo> node = new LinkedListNode<MethodInfo>(info);
-
-
-                                if (attr.Position == FilterPosition.First)
-                                    _beforeFilters.AddFirst(node);
-                                else if (attr.Position == FilterPosition.Last)
-                                    _beforeFilters.AddLast(node);
-                                else
-                                {
-                                    if (_lastMiddleFilter == null)
-                                        _beforeFilters.AddLast(node);
-                                    else
-                                        _beforeFilters.AddAfter(_lastMiddleFilter, node);
-
-                                    _lastMiddleFilter = node;
-                                }
-                            }
-                    }
-                }
-
-                // Map index method.
-                MethodInfo mi = GetType().GetMethod("Index", BindingFlags.Public | BindingFlags.Instance);
-                if (mi != null && mi.ReturnType == typeof(string) && mi.GetParameters().Length == 0)
-                    DefaultMethod = "Index";
-            }
-        }
-
-        /// <summary>
-        /// Method that process the url
-        /// </summary>
-        /// <param name="request">Uses Uri and QueryString to determine method.</param>
-        /// <param name="response">Relays response object to invoked method.</param>
-        /// <param name="session">Relays session object to invoked method. </param>
-        public override bool Process(IHttpRequest request, IHttpResponse response, IHttpSession session)
-        {
-            if (!CanHandle(request))
-                return false;
-
-            SetupRequest(request, response, session);
-
-            if (InvokeBeforeFilters())
-                return true;
-
-            InvokeMethod();
-
-            return true;
-        }
-
-        /// <summary>
-        /// Will assign all variables that are unique for each session
-        /// </summary>
-        /// <param name="request"></param>
-        /// <param name="response"></param>
-        /// <param name="session"></param>
-        protected virtual void SetupRequest(IHttpRequest request, IHttpResponse response, IHttpSession session)
-        {
-            _requestedExtension = Html;
-
-            // extract id
-            if (request.Uri.Segments.Length > 3)
-            {
-                _id = request.Uri.Segments[3];
-                if (_id.EndsWith("/"))
-                    _id = _id.Substring(0, _id.Length - 1);
-                else
-                {
-                    int pos = _id.LastIndexOf('.');
-                    if (pos != -1)
-                    {
-                        _requestedExtension = _id.Substring(pos + 1);
-                        _id = _id.Substring(0, pos);
-                    }
-                }
-                _id = HttpUtility.UrlDecode(_id);
-            }
-            else if (request.QueryString["id"] != HttpInputItem.Empty)
-                _id = HttpUtility.UrlDecode(request.QueryString["id"].Value);
-            else
-                _id = string.Empty;
-
-            _request = request;
-            _response = response;
-            _session = session;
-
-            if (request.Uri.Segments.Length == 2 && _defaultMethod == null)
-                throw new NotFoundException("No default method is specified.");
-
-            _method = GetMethod(request);
-            if (_method == null)
-                throw new NotFoundException("Requested action could not be found.");
-
-            _methodName = _method.Name.ToLower();
-        }
-
-        #region ICloneable Members
-
-        /// <summary>
-        /// Make a clone of this controller
-        /// </summary>
-        /// <returns>a new controller with the same base information as this one.</returns>
-        public abstract object Clone();
-
-        #endregion
-    }
-}
\ No newline at end of file
diff --git a/HttpServer/trunk/HttpServer/Controllers/ViewController.cs b/HttpServer/trunk/HttpServer/Controllers/ViewController.cs
deleted file mode 100644
index c547f11..0000000
--- a/HttpServer/trunk/HttpServer/Controllers/ViewController.cs
+++ /dev/null
@@ -1,303 +0,0 @@
-using System;
-using System.Collections.Specialized;
-using System.IO;
-using System.Text;
-using System.Xml.Serialization;
-using HttpServer.Exceptions;
-using HttpServer.Helpers;
-using HttpServer.Rendering;
-using HttpServer.Sessions;
-
-namespace HttpServer.Controllers
-{
-    /// <summary>
-    /// View controllers integrates the templates, by adding
-    /// Render methods.
-    /// </summary>
-    public abstract class ViewController : RequestController
-    {
-        private readonly TemplateArguments _arguments = new TemplateArguments();
-        private readonly TemplateManager _templateMgr;
-        private NameValueCollection _errors = new NameValueCollection();
-        private bool _includeLayoutInAjaxRequests;
-        private string _layout = "Application";
-        private string _title;
-
-        /// <summary>
-        /// Create a new <see cref="ViewController"/>.
-        /// </summary>
-        protected ViewController(TemplateManager mgr)
-        {
-            _templateMgr = mgr;
-        }
-
-        /// <summary>
-        /// Create a new <see cref="ViewController"/>.
-        /// </summary>
-        /// <param name="controller">prototype to copy information from.</param>
-        protected ViewController(ViewController controller)
-            : base(controller)
-        {
-            _templateMgr = controller._templateMgr;
-        }
-
-        /// <summary>
-        /// Arguments that are being used in the templates.
-        /// </summary>
-        protected TemplateArguments Arguments
-        {
-            get { return _arguments; }
-        }
-
-        /// <summary>
-        /// A set of errors that occurred during request processing.
-        /// Key should be argument name (if argument error, otherwise <see cref="String.Empty"/>), value should be
-        /// the error message.
-        /// </summary>
-        /// <remarks>Errors can be rendered into templates using the <see cref="WebHelper.Errors"/> method.</remarks>
-        /// <seealso cref="WebHelper"/>
-        [XmlElement("Errors")]
-        protected NameValueCollection Errors
-        {
-            get { return _errors; }
-            set { _errors = value; }
-        }
-
-        /// <summary>
-        /// True if we always should render contents inside page layouts when request is Ajax.
-        /// </summary>
-        /// <remarks>default is false.</remarks>
-        public bool IncludeLayoutInAjaxRequests
-        {
-            get { return _includeLayoutInAjaxRequests; }
-            set { _includeLayoutInAjaxRequests = value; }
-        }
-
-        /// <summary>
-        /// Which page layout to use (without file extension)
-        /// </summary>
-        /// <remarks>
-        /// <para>
-        /// Page layouts should be places in the Views\Layouts folder.
-        /// </para>
-        /// <para>
-        /// default is "Application"
-        /// </para>
-        /// </remarks>
-        public string Layout
-        {
-            get { return _layout; }
-            set { _layout = value; }
-        }
-
-        /// <summary>
-        /// Page title (are added as a parameter to the layout template, use it in &lt;title&gt; HTML tag.
-        /// </summary>
-        public string Title
-        {
-            get { return _title; }
-            set { _title = value; }
-        }
-
-        /// <summary>
-        /// Render template for the currently invoked method.
-        /// </summary>
-        /// <param name="args">arguments/parameters used in template</param>
-        /// <returns>template generated content</returns>
-        /// <remarks>calls RenderActionWithErrors</remarks>
-        protected string Render(params object[] args)
-        {
-            return RenderAction(MethodName, args);
-        }
-
-        /// <summary>
-        /// Render contents into a template.
-        /// </summary>
-        /// <param name="method">method/template to generate</param>
-        /// <param name="args">arguments/parameters used in template</param>
-        /// <returns>template generated content</returns>
-        /// <remarks>calls RenderActionWithErrors.</remarks>
-        protected virtual string RenderAction(string method, params object[] args)
-        {
-            if (!Arguments.Contains("Errors"))
-                Arguments.Add("Errors", _errors);
-            string pageTemplate = RenderTemplate(ControllerName, method, args);
-
-            // 1. dont render main layout for ajax requests, since they just update partial
-            // parts of the web page.
-            // 2. Dont render html layout for other stuff than html
-            if (Request.IsAjax && !_includeLayoutInAjaxRequests)
-                return pageTemplate;
-
-            return RenderLayout(_layout, pageTemplate);
-        }
-
-        /// <summary>
-        /// Merge arguments array and Arguments property.
-        /// </summary>
-        /// <param name="args">Arguments array to merge</param>
-        /// <returns>arguments/parameters that can be used in the template.</returns>
-        /// <remarks>Will add Request/Response/Session arguments</remarks>
-        private TemplateArguments MergeArguments(object[] args)
-        {
-            // Create a new argument holder
-            TemplateArguments arguments = new TemplateArguments();
-            arguments.Add("Request", Request, typeof(IHttpRequest));
-            arguments.Add("Response", Response);
-            arguments.Add("Session", Session);
-            arguments.Add("Controller", this, typeof(ViewController));
-			arguments.Update(_arguments);
-			arguments.Update(new TemplateArguments(args));
-
-            return arguments;
-        }
-
-
-        /// <summary>
-        /// Renders errors from the <see cref="Errors"/> property into the
-        /// current method template, or as a JavaScript alert if the request is Ajax.
-        /// </summary>
-        /// <param name="method">name of the currently invoked method.</param>
-        /// <param name="arguments">arguments used in the method template.</param>
-        /// <returns>generated string</returns>
-        /// <remarks>Creates a JavaScript Alert box if request is Ajax.</remarks>
-        protected string RenderErrors(string method, params object[] arguments)
-        {
-            if (_errors.Count > 0)
-            {
-                if (Request.IsAjax)
-                    return RenderJsErrors(_errors);
-            }
-
-            return RenderAction(method, arguments);
-        }
-
-        /// <summary>
-        /// Renders errors from the <see cref="Errors"/> property into the
-        /// current method template, or as a JavaScript alert if the request is Ajax.
-        /// </summary>
-        /// <param name="errors">A collection of errors.</param>
-        /// <param name="method">name of the currently invoked method.</param>
-        /// <param name="arguments">arguments used in the method template.</param>
-        /// <returns>generated string</returns>
-        /// <remarks>Creates a JavaScript Alert box if request is Ajax.</remarks>
-        protected string RenderErrors(NameValueCollection errors, string method, params object[] arguments)
-        {
-            if (_errors.Count > 0)
-            {
-                if (Request.IsAjax)
-                    return RenderJsErrors(_errors);
-            }
-
-            Arguments.Add("Errors", errors);
-            return RenderAction(method, arguments);
-        }
-
-        /// <summary>
-        /// Switches content-type to "text/JavaScript" and returns content.
-        /// </summary>
-        /// <param name="js">JavaScript to send to the client.</param>
-        /// <returns>JavaScript</returns>
-        protected string RenderJavascript(string js)
-        {
-            Response.ContentType = "text/javascript";
-            return js;
-        }
-
-        /// <summary>
-        /// Creates a JavaScript "alert" filled with all errors.
-        /// </summary>
-        /// <param name="errors"></param>
-        /// <returns>a</returns>
-        protected string RenderJsErrors(NameValueCollection errors)
-        {
-            StringBuilder sb = new StringBuilder();
-            sb.Append("alert('");
-            for (int i = 0; i < errors.Count; ++i)
-                sb.Append(errors[i].Replace("'", "\\'") + "\\n");
-            sb.Append("');");
-
-            Response.ContentType = "text/javascript";
-            return sb.ToString();
-        }
-
-        /// <summary>
-        /// renders one of the layouts
-        /// </summary>
-        /// <param name="layoutName">layout to render (should be found in the "views\\layouts" folder).</param>
-        /// <param name="contents">contents will be put in the template variable called "text".</param>
-        /// <returns>generated text/HTML.</returns>
-        protected virtual string RenderLayout(string layoutName, string contents)
-        {
-            // template engine will find all layouts and take the first one with that one.
-            return RenderTemplate("layouts", layoutName, "text", contents,
-                                  "title", Title ?? "The page with no name");
-        }
-
-        /// <summary>
-        /// Render a template.
-        /// </summary>
-        /// <remarks>Merges the Arguments property with the <c>args</c> parameter and pass those to the template.</remarks>
-        /// <param name="controller">controller name are used as a folder name when looking for the template.</param>
-        /// <param name="method">method are used as filename when looking for the template.</param>
-        /// <param name="args">arguments that should be passed to the template.</param>
-        /// <returns></returns>
-        protected string RenderTemplate(string controller, string method, params object[] args)
-        {
-            try
-            {
-                TemplateArguments args2 = MergeArguments(args);
-                _arguments.Clear();
-
-                string result = _templateMgr.Render(controller + "\\" + method + ".*", args2);
-                _errors.Clear();
-                return result;
-            }
-            catch (FileNotFoundException err)
-            {
-                throw new NotFoundException("Failed to find template. Details: " + err.Message, err);
-            }
-            catch (InvalidOperationException err)
-            {
-                throw new InternalServerException("Failed to render template. Details: " + err.Message, err);
-            }
-            catch (Fadd.CompilerException err)
-            {
-				throw new TemplateException("Could not compile template '" + controller + "/" + method + "/'", err);
-            }
-            catch (CodeGeneratorException err)
-            {
-#if DEBUG
-                string error = "Line: " + err.LineNumber + "<br />\r\n" + err.ToString().Replace("\r\n", "<br />\r\n");
-                throw new InternalServerException(error, err);
-#else
-                throw new InternalServerException("Failed to compile template.", err);
-#endif
-            }
-            catch (ArgumentException err)
-            {
-#if DEBUG
-                throw new InternalServerException(
-                    "Failed to render template, reason: " + err.ToString().Replace("\r\n", "<br />\r\n"), err);
-#else
-                throw new InternalServerException("Failed to render templates", err);
-#endif
-            }
-        }
-
-        /// <summary>
-        /// Invoked each time a new request is about to be invoked.
-        /// </summary>
-        /// <remarks>Can be used to clear old data.</remarks>
-        /// <param name="request"></param>
-        /// <param name="response"></param>
-        /// <param name="session"></param>
-        protected override void SetupRequest(IHttpRequest request, IHttpResponse response, IHttpSession session)
-        {
-            _arguments.Clear();
-            _errors.Clear();
-            base.SetupRequest(request, response, session);
-            _layout = Request.Param["layout"].Value ?? Layout;
-        }
-    }
-}
\ No newline at end of file
diff --git a/HttpServer/trunk/HttpServer/ExceptionEventArgs.cs b/HttpServer/trunk/HttpServer/ExceptionEventArgs.cs
deleted file mode 100644
index 39084d5..0000000
--- a/HttpServer/trunk/HttpServer/ExceptionEventArgs.cs
+++ /dev/null
@@ -1,29 +0,0 @@
-using System;
-
-namespace HttpServer
-{
-    /// <summary>
-    /// An unhandled exception have been caught by the system.
-    /// </summary>
-    public class ExceptionEventArgs : EventArgs
-    {
-        private readonly Exception _exception;
-
-        /// <summary>
-        /// Initializes a new instance of the <see cref="ExceptionEventArgs"/> class.
-        /// </summary>
-        /// <param name="exception">Caught exception.</param>
-        public ExceptionEventArgs(Exception exception)
-        {
-            _exception = exception;
-        }
-
-        /// <summary>
-        /// caught exception
-        /// </summary>
-        public Exception Exception
-        {
-            get { return _exception; }
-        }
-    }
-}
diff --git a/HttpServer/trunk/HttpServer/ExceptionHandler.cs b/HttpServer/trunk/HttpServer/ExceptionHandler.cs
deleted file mode 100644
index 07aeaa9..0000000
--- a/HttpServer/trunk/HttpServer/ExceptionHandler.cs
+++ /dev/null
@@ -1,16 +0,0 @@
-using System;
-
-namespace HttpServer
-{
-    /// <summary>
-    /// We dont want to let the server to die due to exceptions thrown in worker threads.
-    /// therefore we use this delegate to give you a change to handle uncaught exceptions.
-    /// </summary>
-    /// <param name="source">Class that the exception was thrown in.</param>
-    /// <param name="exception">Exception</param>
-    /// <remarks>
-    /// Server will throw a InternalServerException in release version if you dont
-    /// handle this delegate.
-    /// </remarks>
-    public delegate void ExceptionHandler(object source, Exception exception);
-}
diff --git a/HttpServer/trunk/HttpServer/Exceptions/BadRequestException.cs b/HttpServer/trunk/HttpServer/Exceptions/BadRequestException.cs
deleted file mode 100644
index 8f4e135..0000000
--- a/HttpServer/trunk/HttpServer/Exceptions/BadRequestException.cs
+++ /dev/null
@@ -1,35 +0,0 @@
-using System;
-using System.Net;
-
-namespace HttpServer.Exceptions
-{
-    /// <summary>
-    /// The request could not be understood by the server due to malformed syntax.
-    /// The client SHOULD NOT repeat the request without modifications.
-    ///
-    /// Text taken from: http://www.submissionchamber.com/help-guides/error-codes.php
-    /// </summary>
-    public class BadRequestException : HttpException
-    {
-        /// <summary>
-        /// Create a new bad request exception.
-        /// </summary>
-        /// <param name="errMsg">reason to why the request was bad.</param>
-        public BadRequestException(string errMsg)
-            : base(HttpStatusCode.BadRequest, errMsg)
-        {
-
-        }
-
-        /// <summary>
-        /// Create a new bad request exception.
-        /// </summary>
-        /// <param name="errMsg">reason to why the request was bad.</param>
-        /// <param name="inner">inner exception</param>
-        public BadRequestException(string errMsg, Exception inner)
-            : base(HttpStatusCode.BadRequest, errMsg, inner)
-        {
-
-        }
-    }
-}
diff --git a/HttpServer/trunk/HttpServer/Exceptions/ForbiddenException.cs b/HttpServer/trunk/HttpServer/Exceptions/ForbiddenException.cs
deleted file mode 100644
index e5aeb85..0000000
--- a/HttpServer/trunk/HttpServer/Exceptions/ForbiddenException.cs
+++ /dev/null
@@ -1,26 +0,0 @@
-using System.Net;
-
-namespace HttpServer.Exceptions
-{
-    /// <summary>
-    /// The server understood the request, but is refusing to fulfill it.
-    /// Authorization will not help and the request SHOULD NOT be repeated.
-    /// If the request method was not HEAD and the server wishes to make public why the request has not been fulfilled,
-    /// it SHOULD describe the reason for the refusal in the entity. If the server does not wish to make this information
-    /// available to the client, the status code 404 (Not Found) can be used instead.
-    ///
-    /// Text taken from: http://www.submissionchamber.com/help-guides/error-codes.php
-    /// </summary>
-    public class ForbiddenException : HttpException
-    {
-        /// <summary>
-        /// Initializes a new instance of the <see cref="ForbiddenException"/> class.
-        /// </summary>
-        /// <param name="errorMsg">error message</param>
-        public ForbiddenException(string errorMsg)
-            : base(HttpStatusCode.Forbidden, errorMsg)
-        {
-
-        }
-    }
-}
diff --git a/HttpServer/trunk/HttpServer/Exceptions/HttpException.cs b/HttpServer/trunk/HttpServer/Exceptions/HttpException.cs
deleted file mode 100644
index e06f9b2..0000000
--- a/HttpServer/trunk/HttpServer/Exceptions/HttpException.cs
+++ /dev/null
@@ -1,43 +0,0 @@
-using System;
-using System.Net;
-
-namespace HttpServer.Exceptions
-{
-    /// <summary>
-    /// All HTTP based exceptions will derive this class.
-    /// </summary>
-    public class HttpException : Exception
-    {
-        private readonly HttpStatusCode _code;
-
-        /// <summary>
-        /// Create a new HttpException
-        /// </summary>
-        /// <param name="code">http status code (sent in the response)</param>
-        /// <param name="message">error description</param>
-        public HttpException(HttpStatusCode code, string message) : base(code + ": " + message)
-        {
-            _code = code;
-        }
-
-        /// <summary>
-        /// Create a new HttpException
-        /// </summary>
-        /// <param name="code">http status code (sent in the response)</param>
-        /// <param name="message">error description</param>
-        /// <param name="inner">inner exception</param>
-        public HttpException(HttpStatusCode code, string message, Exception inner)
-            : base(code + ": " + message, inner)
-        {
-            _code = code;
-        }
-
-        /// <summary>
-        /// status code to use in the response.
-        /// </summary>
-        public HttpStatusCode HttpStatusCode
-        {
-            get { return _code; }
-        }
-    }
-}
\ No newline at end of file
diff --git a/HttpServer/trunk/HttpServer/Exceptions/InternalServerException.cs b/HttpServer/trunk/HttpServer/Exceptions/InternalServerException.cs
deleted file mode 100644
index e555ef5..0000000
--- a/HttpServer/trunk/HttpServer/Exceptions/InternalServerException.cs
+++ /dev/null
@@ -1,38 +0,0 @@
-using System;
-using System.Net;
-
-namespace HttpServer.Exceptions
-{
-    /// <summary>
-    /// The server encountered an unexpected condition which prevented it from fulfilling the request.
-    /// </summary>
-    public class InternalServerException : HttpException
-    {
-        /// <summary>
-        /// Initializes a new instance of the <see cref="InternalServerException"/> class.
-        /// </summary>
-        public InternalServerException()
-            : base(HttpStatusCode.InternalServerError, "The server encountered an unexpected condition which prevented it from fulfilling the request.")
-        {
-        }
-
-        /// <summary>
-        /// Initializes a new instance of the <see cref="InternalServerException"/> class.
-        /// </summary>
-        /// <param name="message">error message.</param>
-        public InternalServerException(string message)
-            : base(HttpStatusCode.InternalServerError, message)
-        {
-        }
-
-        /// <summary>
-        /// Initializes a new instance of the <see cref="InternalServerException"/> class.
-        /// </summary>
-        /// <param name="message">error message.</param>
-        /// <param name="inner">inner exception.</param>
-        public InternalServerException(string message, Exception inner)
-            : base(HttpStatusCode.InternalServerError, message, inner)
-        {
-        }
-    }
-}
diff --git a/HttpServer/trunk/HttpServer/Exceptions/NotFoundException.cs b/HttpServer/trunk/HttpServer/Exceptions/NotFoundException.cs
deleted file mode 100644
index 3a4cd74..0000000
--- a/HttpServer/trunk/HttpServer/Exceptions/NotFoundException.cs
+++ /dev/null
@@ -1,29 +0,0 @@
-using System;
-using System.Net;
-
-namespace HttpServer.Exceptions
-{
-    /// <summary>
-    /// The requested resource was not found in the web server.
-    /// </summary>
-    public class NotFoundException : HttpException
-    {
-        /// <summary>
-        /// Create a new exception
-        /// </summary>
-        /// <param name="message">message describing the error</param>
-        /// <param name="inner">inner exception</param>
-        public NotFoundException(string message, Exception inner) : base(HttpStatusCode.NotFound, message, inner)
-        {
-        }
-
-        /// <summary>
-        /// Create a new exception
-        /// </summary>
-        /// <param name="message">message describing the error</param>
-        public NotFoundException(string message)
-            : base(HttpStatusCode.NotFound, message)
-        {
-        }
-    }
-}
diff --git a/HttpServer/trunk/HttpServer/Exceptions/UnauthorizedException.cs b/HttpServer/trunk/HttpServer/Exceptions/UnauthorizedException.cs
deleted file mode 100644
index 88362b8..0000000
--- a/HttpServer/trunk/HttpServer/Exceptions/UnauthorizedException.cs
+++ /dev/null
@@ -1,56 +0,0 @@
-using System;
-using System.Net;
-
-namespace HttpServer.Exceptions
-{
-    /// <summary>
-    /// The request requires user authentication. The response MUST include a
-    /// WWW-Authenticate header field (section 14.47) containing a challenge
-    /// applicable to the requested resource.
-    ///
-    /// The client MAY repeat the request with a suitable Authorization header
-    /// field (section 14.8). If the request already included Authorization
-    /// credentials, then the 401 response indicates that authorization has been
-    /// refused for those credentials. If the 401 response contains the same challenge
-    /// as the prior response, and the user agent has already attempted authentication
-    /// at least once, then the user SHOULD be presented the entity that was given in the response,
-    /// since that entity might include relevant diagnostic information.
-    ///
-    /// HTTP access authentication is explained in rfc2617:
-    /// http://www.ietf.org/rfc/rfc2617.txt
-    ///
-    /// (description is taken from
-    /// http://www.submissionchamber.com/help-guides/error-codes.php#sec10.4.2)
-    /// </summary>
-    public class UnauthorizedException : HttpException
-    {
-        /// <summary>
-        /// Create a new unauhtorized exception.
-        /// </summary>
-        /// <seealso cref="UnauthorizedException"/>
-        public UnauthorizedException()
-            : base(HttpStatusCode.Unauthorized, "The request requires user authentication.")
-        {
-
-        }
-
-        /// <summary>
-        /// Create a new unauhtorized exception.
-        /// </summary>
-        /// <param name="message">reason to why the request was unauthorized.</param>
-        /// <param name="inner">inner exception</param>
-        public UnauthorizedException(string message, Exception inner)
-            : base(HttpStatusCode.Unauthorized, message, inner)
-        {
-        }
-
-        /// <summary>
-        /// Create a new unauhtorized exception.
-        /// </summary>
-        /// <param name="message">reason to why the request was unauthorized.</param>
-        public UnauthorizedException(string message)
-            : base(HttpStatusCode.Unauthorized, message)
-        {
-        }
-    }
-}
\ No newline at end of file
diff --git a/HttpServer/trunk/HttpServer/FormDecoders/FormDecoder.cs b/HttpServer/trunk/HttpServer/FormDecoders/FormDecoder.cs
deleted file mode 100644
index 4988c1c..0000000
--- a/HttpServer/trunk/HttpServer/FormDecoders/FormDecoder.cs
+++ /dev/null
@@ -1,29 +0,0 @@
-using System.IO;
-using System.Text;
-using HttpServer;
-
-namespace HttpServer.FormDecoders
-{
-    /// <summary>
-    /// Interface for form content decoders.
-    /// </summary>
-    public interface FormDecoder
-    {
-        /// <summary>
-        ///
-        /// </summary>
-        /// <param name="stream">Stream containing the content</param>
-        /// <param name="contentType">Content type (with any additional info like boundry). Content type is always supplied in lower case</param>
-        /// <param name="encoding">Stream enconding</param>
-        /// <returns>A http form, or null if content could not be parsed.</returns>
-        /// <exception cref="InvalidDataException">If contents in the stream is not valid input data.</exception>
-        HttpForm Decode(Stream stream, string contentType, Encoding encoding);
-
-        /// <summary>
-        /// Checks if the decoder can handle the mime type
-        /// </summary>
-        /// <param name="contentType">Content type (with any additional info like boundry). Content type is always supplied in lower case.</param>
-        /// <returns>True if the decoder can parse the specified content type</returns>
-        bool CanParse(string contentType);
-    }
-}
diff --git a/HttpServer/trunk/HttpServer/FormDecoders/FormDecoderProvider.cs b/HttpServer/trunk/HttpServer/FormDecoders/FormDecoderProvider.cs
deleted file mode 100644
index 6549028..0000000
--- a/HttpServer/trunk/HttpServer/FormDecoders/FormDecoderProvider.cs
+++ /dev/null
@@ -1,90 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.IO;
-using System.Text;
-
-namespace HttpServer.FormDecoders
-{
-    /// <summary>
-    /// This provider is used to let us implement any type of form decoding we want without
-    /// having to rewrite anything else in the server.
-    /// </summary>
-    public class FormDecoderProvider
-    {
-        private readonly IList<IFormDecoder> _decoders = new List<IFormDecoder>();
-        private IFormDecoder _defaultDecoder;
-
-        /// <summary>
-        ///
-        /// </summary>
-        /// <param name="contentType">Should contain boundary and type, as in: multipart/form-data; boundary=---------------------------230051238959</param>
-        /// <param name="stream">Stream containing form data.</param>
-        /// <param name="encoding">Encoding used when decoding the stream</param>
-        /// <returns><see cref="HttpInput.Empty"/> if no parser was found.</returns>
-        /// <exception cref="ArgumentException">If stream is null or not readable.</exception>
-        /// <exception cref="InvalidDataException">If stream contents cannot be decoded properly.</exception>
-        public HttpForm Decode(string contentType, Stream stream, Encoding encoding)
-        {
-            if (encoding == null)
-                encoding = Encoding.UTF8;
-            if (stream == null || !stream.CanRead)
-                throw new ArgumentException("Stream is null or not readable.");
-
-            if (string.IsNullOrEmpty(contentType))
-            {
-                return _defaultDecoder != null
-                           ? _defaultDecoder.Decode(stream, contentType, encoding)
-                           : HttpForm.EmptyForm;
-            }
-
-            //multipart/form-data; boundary=---------------------------230051238959
-            foreach (IFormDecoder decoder in _decoders)
-            {
-                if (decoder.CanParse(contentType))
-                    return decoder.Decode(stream, contentType, encoding);
-            }
-
-			return HttpForm.EmptyForm;
-        }
-
-        /// <summary>
-        /// Add a decoder.
-        /// </summary>
-        /// <param name="decoder"></param>
-        /// <exception cref="ArgumentNullException"></exception>
-        public void Add(IFormDecoder decoder)
-        {
-            if (decoder == null)
-                throw new ArgumentNullException("decoder");
-            if (_decoders.Contains(decoder))
-                return;
-
-            _decoders.Add(decoder);
-        }
-
-        /// <summary>
-        /// Number of added decoders.
-        /// </summary>
-        public int Count
-        {
-            get { return _decoders.Count; }
-        }
-
-        /// <summary>
-        /// Use with care.
-        /// </summary>
-        public IList<IFormDecoder> Decoders
-        {
-            get { return _decoders; }
-        }
-
-        /// <summary>
-        /// Decoder used for unknown content types.
-        /// </summary>
-        public IFormDecoder DefaultDecoder
-        {
-            get { return _defaultDecoder; }
-            set { _defaultDecoder = value; }
-        }
-    }
-}
\ No newline at end of file
diff --git a/HttpServer/trunk/HttpServer/FormDecoders/HttpMultipart.cs b/HttpServer/trunk/HttpServer/FormDecoders/HttpMultipart.cs
deleted file mode 100644
index 128da1a..0000000
--- a/HttpServer/trunk/HttpServer/FormDecoders/HttpMultipart.cs
+++ /dev/null
@@ -1,318 +0,0 @@
-//
-// System.Web.IHttpRequest.cs
-//
-//
-// Author:
-//	Miguel de Icaza (miguel@novell.com)
-//	Gonzalo Paniagua Javier (gonzalo@novell.com)
-//
-
-//
-// Copyright (C) 2005 Novell, Inc (http://www.novell.com)
-//
-// Permission is hereby granted, free of charge, to any person obtaining
-// a copy of this software and associated documentation files (the
-// "Software"), to deal in the Software without restriction, including
-// without limitation the rights to use, copy, modify, merge, publish,
-// distribute, sublicense, and/or sell copies of the Software, and to
-// permit persons to whom the Software is furnished to do so, subject to
-// the following conditions:
-//
-// The above copyright notice and this permission notice shall be
-// included in all copies or substantial portions of the Software.
-//
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-//
-using System;
-using System.Globalization;
-using System.Text;
-using System.IO;
-
-namespace HttpServer.FormDecoders
-{
-    class HttpMultipart
-    {
-		/// <summary>Represents a field in a multipart form</summary>
-        public class Element
-        {
-            public string ContentType;
-            public string Name;
-            public string Filename;
-            public long Start;
-            public long Length;
-
-            public override string ToString()
-            {
-                return "ContentType " + ContentType + ", Name " + Name + ", Filename " + Filename + ", Start " +
-                       Start + ", Length " + Length;
-            }
-        }
-
-        readonly Stream _data;
-        readonly string _boundary;
-        readonly byte[] _boundaryBytes;
-        readonly byte[] _buffer;
-        bool _eof;
-        readonly Encoding _encoding;
-        readonly StringBuilder _sb;
-
-        const byte Lf = (byte)'\n', Cr = (byte)'\r';
-
-        // See RFC 2046
-        // In the case of multipart entities, in which one or more different
-        // sets of data are combined in a single body, a "multipart" media type
-        // field must appear in the entity's header.  The body must then contain
-        // one or more body parts, each preceded by a boundary delimiter line,
-        // and the last one followed by a closing boundary delimiter line.
-        // After its boundary delimiter line, each body part then consists of a
-        // header area, a blank line, and a body area.  Thus a body part is
-        // similar to an RFC 822 message in syntax, but different in meaning.
-
-        public HttpMultipart(Stream data, string boundry, Encoding encoding)
-        {
-            _data = data;
-            _boundary = boundry;
-            _boundaryBytes = encoding.GetBytes(boundry);
-            _buffer = new byte[_boundaryBytes.Length + 2]; // CRLF or '--'
-            _encoding = encoding;
-            _sb = new StringBuilder();
-        }
-
-        /// <summary>
-        ///
-        /// </summary>
-        /// <returns></returns>
-        /// <exception cref="ArgumentOutOfRangeException"></exception>
-        /// <exception cref="ObjectDisposedException"></exception>
-        string ReadLine()
-        {
-            // CRLF or Lf are ok as line endings.
-            bool gotCr = false;
-            _sb.Length = 0;
-            while (true)
-            {
-                int b = _data.ReadByte();
-                if (b == -1)
-                    return null;
-
-                if (b == Lf)
-                    break;
-
-                gotCr = (b == Cr);
-                _sb.Append((char)b);
-            }
-
-            if (gotCr)
-                _sb.Length--;
-
-            return _sb.ToString();
-
-        }
-
-        static string GetContentDispositionAttribute(string l, string name)
-        {
-            int idx = l.IndexOf(name + "=\"");
-            if (idx < 0)
-                return null;
-            int begin = idx + name.Length + "=\"".Length;
-            int end = l.IndexOf('"', begin);
-            if (end < 0)
-                return null;
-            if (begin == end)
-                return "";
-            return l.Substring(begin, end - begin);
-        }
-
-        string GetContentDispositionAttributeWithEncoding(string l, string name)
-        {
-            int idx = l.IndexOf(name + "=\"");
-            if (idx < 0)
-                return null;
-            int begin = idx + name.Length + "=\"".Length;
-            int end = l.IndexOf('"', begin);
-            if (end < 0)
-                return null;
-            if (begin == end)
-                return "";
-
-            string temp = l.Substring(begin, end - begin);
-            byte[] source = new byte[temp.Length];
-            for (int i = temp.Length - 1; i >= 0; i--)
-                source[i] = (byte)temp[i];
-
-            return _encoding.GetString(source);
-        }
-
-        bool ReadBoundary()
-        {
-            try
-            {
-                string line = ReadLine();
-                while (line == "")
-                    line = ReadLine();
-                if (line[0] != '-' || line[1] != '-')
-                    return false;
-
-                if (!line.EndsWith(_boundary, false, CultureInfo.InvariantCulture))
-                    return true;
-            }
-            catch (ArgumentException)
-            {}
-            catch (ObjectDisposedException)
-            {}
-
-            return false;
-        }
-
-        string ReadHeaders()
-        {
-            string s = ReadLine();
-            if (s == "")
-                return null;
-
-            return s;
-        }
-
-        public static bool CompareBytes(byte[] orig, byte[] other)
-        {
-            for (int i = orig.Length - 1; i >= 0; i--)
-                if (orig[i] != other[i])
-                    return false;
-
-            return true;
-        }
-
-        long MoveToNextBoundary()
-        {
-            long retval = 0;
-            bool gotCr = false;
-
-            int state = 0;
-            int c = _data.ReadByte();
-            while (true)
-            {
-                if (c == -1)
-                    return -1;
-
-                if (state == 0 && c == Lf)
-                {
-                    retval = _data.Position - 1;
-                    if (gotCr)
-                        retval--;
-                    state = 1;
-                    c = _data.ReadByte();
-                }
-                else if (state == 0)
-                {
-                    gotCr = (c == Cr);
-                    c = _data.ReadByte();
-                }
-                else if (state == 1 && c == '-')
-                {
-                    c = _data.ReadByte();
-                    if (c == -1)
-                        return -1;
-
-                    if (c != '-')
-                    {
-                        state = 0;
-                        gotCr = false;
-                        continue; // no ReadByte() here
-                    }
-
-                    int nread = _data.Read(_buffer, 0, _buffer.Length);
-                    int bl = _buffer.Length;
-                    if (nread != bl)
-                        return -1;
-
-                    if (!CompareBytes(_boundaryBytes, _buffer))
-                    {
-                        state = 0;
-                        _data.Position = retval + 2;
-                        if (gotCr)
-                        {
-                            _data.Position++;
-                            gotCr = false;
-                        }
-                        c = _data.ReadByte();
-                        continue;
-                    }
-
-                    if (_buffer[bl - 2] == '-' && _buffer[bl - 1] == '-')
-                    {
-                        _eof = true;
-                    }
-                    else if (_buffer[bl - 2] != Cr || _buffer[bl - 1] != Lf)
-                    {
-                        state = 0;
-                        _data.Position = retval + 2;
-                        if (gotCr)
-                        {
-                            _data.Position++;
-                            gotCr = false;
-                        }
-                        c = _data.ReadByte();
-                        continue;
-                    }
-                    _data.Position = retval + 2;
-                    if (gotCr)
-                        _data.Position++;
-                    break;
-                }
-                else
-                {
-                    // state == 1
-                    state = 0; // no ReadByte() here
-                }
-            }
-
-            return retval;
-        }
-
-        public Element ReadNextElement()
-        {
-            if (_eof || ReadBoundary())
-                return null;
-
-            Element elem = new Element();
-            string header;
-            while ((header = ReadHeaders()) != null)
-            {
-                if (header.StartsWith("Content-Disposition:", true, CultureInfo.InvariantCulture))
-                {
-                    elem.Name = GetContentDispositionAttribute(header, "name");
-                    elem.Filename = StripPath(GetContentDispositionAttributeWithEncoding(header, "filename"));
-                }
-                else if (header.StartsWith("Content-Type:", true, CultureInfo.InvariantCulture))
-                {
-                    elem.ContentType = header.Substring("Content-Type:".Length).Trim();
-                }
-            }
-
-            long start = _data.Position;
-            elem.Start = start;
-            long pos = MoveToNextBoundary();
-            if (pos == -1)
-                return null;
-
-            elem.Length = pos - start;
-            return elem;
-        }
-
-        static string StripPath(string path)
-        {
-            if (path == null || path.Length == 0)
-                return path;
-
-            if (path.IndexOf(":\\") != 1)
-                return path;
-            return path.Substring(path.LastIndexOf("\\") + 1);
-        }
-    }
-}
\ No newline at end of file
diff --git a/HttpServer/trunk/HttpServer/FormDecoders/IFormDecoder.cs b/HttpServer/trunk/HttpServer/FormDecoders/IFormDecoder.cs
deleted file mode 100644
index 1933182..0000000
--- a/HttpServer/trunk/HttpServer/FormDecoders/IFormDecoder.cs
+++ /dev/null
@@ -1,28 +0,0 @@
-using System.IO;
-using System.Text;
-
-namespace HttpServer.FormDecoders
-{
-    /// <summary>
-    /// Interface for form content decoders.
-    /// </summary>
-    public interface IFormDecoder
-    {
-        /// <summary>
-        ///
-        /// </summary>
-        /// <param name="stream">Stream containing the content</param>
-        /// <param name="contentType">Content type (with any additional info like boundry). Content type is always supplied in lower case</param>
-        /// <param name="encoding">Stream enconding</param>
-        /// <returns>A http form, or null if content could not be parsed.</returns>
-        /// <exception cref="InvalidDataException">If contents in the stream is not valid input data.</exception>
-        HttpForm Decode(Stream stream, string contentType, Encoding encoding);
-
-        /// <summary>
-        /// Checks if the decoder can handle the mime type
-        /// </summary>
-        /// <param name="contentType">Content type (with any additional info like boundry). Content type is always supplied in lower case.</param>
-        /// <returns>True if the decoder can parse the specified content type</returns>
-        bool CanParse(string contentType);
-    }
-}
diff --git a/HttpServer/trunk/HttpServer/FormDecoders/MultipartDecoder.cs b/HttpServer/trunk/HttpServer/FormDecoders/MultipartDecoder.cs
deleted file mode 100644
index e2fcaf4..0000000
--- a/HttpServer/trunk/HttpServer/FormDecoders/MultipartDecoder.cs
+++ /dev/null
@@ -1,117 +0,0 @@
-using System;
-using System.Globalization;
-using System.IO;
-using System.Text;
-
-namespace HttpServer.FormDecoders
-{
-    /// <summary>
-    ///
-    /// </summary>
-    /// <remarks>
-    /// http://www.faqs.org/rfcs/rfc1867.html
-    /// </remarks>
-    public class MultipartDecoder : IFormDecoder
-    {
-        /// <summary>
-        /// multipart/form-data
-        /// </summary>
-        public const string MimeType = "multipart/form-data";
-
-        /// <summary>
-        /// form-data
-        /// </summary>
-        public const string FormData = "form-data";
-        #region IFormDecoder Members
-
-        /// <summary>
-        ///
-        /// </summary>
-        /// <param name="stream">Stream containing the content</param>
-        /// <param name="contentType">Content type (with any additional info like boundry). Content type is always supplied in lower case</param>
-        /// <param name="encoding">Stream enconding</param>
-        /// <returns>A http form, or null if content could not be parsed.</returns>
-        /// <exception cref="InvalidDataException">If contents in the stream is not valid input data.</exception>
-        /// <exception cref="ArgumentNullException">If any parameter is null</exception>
-        public HttpForm Decode(Stream stream, string contentType, Encoding encoding)
-        {
-			if(stream == null)
-				throw new ArgumentNullException("stream");
-			if(string.IsNullOrEmpty(contentType))
-				throw new ArgumentNullException("contentType");
-			if(encoding == null)
-				throw new ArgumentNullException("encoding");
-
-			if(!CanParse(contentType))
-				throw new InvalidOperationException("Cannot parse contentType: " + contentType);
-
-            //multipart/form-data, boundary=AaB03x
-            int pos = contentType.IndexOf("=");
-            if (pos == -1)
-                throw new InvalidDataException("Missing boundry in content type.");
-
-            string boundry = contentType.Substring(pos + 1).Trim();
-            HttpMultipart multipart = new HttpMultipart(stream, boundry, encoding);
-
-			HttpForm form = new HttpForm();
-
-            HttpMultipart.Element element;
-			while ((element = multipart.ReadNextElement()) != null)
-			{
-				if (string.IsNullOrEmpty(element.Name))
-					throw new InvalidDataException("Error parsing request. Missing value name.\nElement: " + element);
-
-				if(!string.IsNullOrEmpty(element.Filename))
-				{
-					if (string.IsNullOrEmpty(element.ContentType))
-						throw new InvalidDataException("Error parsing request. Value '" + element.Name + "' lacks a content type.");
-
-					// Read the file data
-					byte[] buffer = new byte[element.Length];
-					stream.Seek(element.Start, SeekOrigin.Begin);
-					stream.Read(buffer, 0, (int) element.Length);
-
-					// Generate a filename
-					string filename = element.Filename;
-                    string internetCache = Environment.GetFolderPath(Environment.SpecialFolder.InternetCache);
-                    // if the internet path doesn't exist, assume mono and /var/tmp
-                    string path = string.IsNullOrEmpty(internetCache)
-				               ? Path.Combine("var", "tmp")
-				               : Path.Combine(internetCache.Replace("\\\\", "\\"), "tmp");
-                    element.Filename = Path.Combine(path, Math.Abs(element.Filename.GetHashCode()) + ".tmp");
-
-					// If the file exists generate a new filename
-					while(File.Exists(element.Filename))
-                        element.Filename = Path.Combine(path, Math.Abs(element.Filename.GetHashCode() + 1) + ".tmp");
-
-                    if (!Directory.Exists(path))
-                        Directory.CreateDirectory(path);
-
-					File.WriteAllBytes(element.Filename, buffer);
-					form.AddFile(new HttpFile(element.Name, element.Filename, element.ContentType, filename));
-				}
-				else
-				{
-					byte[] buffer = new byte[element.Length];
-					stream.Seek(element.Start, SeekOrigin.Begin);
-					stream.Read(buffer, 0, (int)element.Length);
-					form.Add(element.Name, encoding.GetString(buffer));
-				}
-			}
-
-            return form;
-        }
-
-        /// <summary>
-        /// Checks if the decoder can handle the mime type
-        /// </summary>
-        /// <param name="contentType">Content type (with any additional info like boundry). Content type is always supplied in lower case.</param>
-        /// <returns>True if the decoder can parse the specified content type</returns>
-        public bool CanParse(string contentType)
-        {
-            return contentType.StartsWith(MimeType, true, CultureInfo.InvariantCulture);
-        }
-
-        #endregion
-    }
-}
diff --git a/HttpServer/trunk/HttpServer/FormDecoders/UrlDecoder.cs b/HttpServer/trunk/HttpServer/FormDecoders/UrlDecoder.cs
deleted file mode 100644
index 07f8ae9..0000000
--- a/HttpServer/trunk/HttpServer/FormDecoders/UrlDecoder.cs
+++ /dev/null
@@ -1,57 +0,0 @@
-using System;
-using System.Globalization;
-using System.IO;
-using System.Text;
-
-namespace HttpServer.FormDecoders
-{
-    /// <summary>
-    /// Can handle application/x-www-form-urlencoded
-    /// </summary>
-    public class UrlDecoder : IFormDecoder
-    {
-        #region IFormDecoder Members
-
-        /// <summary>
-        /// </summary>
-        /// <param name="stream">Stream containing the content</param>
-        /// <param name="contentType">Content type (with any additional info like boundry). Content type is always supplied in lower case</param>
-        /// <param name="encoding">Stream encoding</param>
-        /// <returns>
-        /// A HTTP form, or null if content could not be parsed.
-        /// </returns>
-        /// <exception cref="InvalidDataException">If contents in the stream is not valid input data.</exception>
-		public HttpForm Decode(Stream stream, string contentType, Encoding encoding)
-        {
-            if (stream == null || stream.Length == 0)
-                return null;
-            if (!CanParse(contentType))
-                return null;
-            if (encoding == null)
-                encoding = Encoding.UTF8;
-
-            try
-            {
-                StreamReader reader = new StreamReader(stream, encoding);
-                return new HttpForm(HttpHelper.ParseQueryString(reader.ReadToEnd()));
-            }
-            catch(ArgumentException err)
-            {
-                throw new InvalidDataException(err.Message, err);
-            }
-        }
-
-
-        /// <summary>
-        /// Checks if the decoder can handle the mime type
-        /// </summary>
-        /// <param name="contentType">Content type (with any additional info like boundry). Content type is always supplied in lower case.</param>
-        /// <returns>True if the decoder can parse the specified content type</returns>
-        public bool CanParse(string contentType)
-        {
-            return !string.IsNullOrEmpty(contentType) && contentType.StartsWith("application/x-www-form-urlencoded", true, CultureInfo.InvariantCulture);
-        }
-
-        #endregion
-    }
-}
diff --git a/HttpServer/trunk/HttpServer/FormDecoders/XmlDecoder.cs b/HttpServer/trunk/HttpServer/FormDecoders/XmlDecoder.cs
deleted file mode 100644
index 96c3ece..0000000
--- a/HttpServer/trunk/HttpServer/FormDecoders/XmlDecoder.cs
+++ /dev/null
@@ -1,115 +0,0 @@
-using System.Globalization;
-using System.IO;
-using System.Text;
-using System.Xml;
-
-namespace HttpServer.FormDecoders
-{
-    /// <summary>
-    /// This decoder converts XML documents to form items.
-    /// Each element becomes a subitem in the form, and each attribute becomes an item.
-    /// </summary>
-    /// <example>
-    /// // xml: <hello id="1">something<world id="2">data</world></hello>
-    /// // result:
-    /// // form["hello"].Value = "something"
-    /// // form["hello"]["id"].Value = 1
-    /// // form["hello"]["world]["id"].Value = 1
-    /// // form["hello"]["world"].Value = "data"
-    /// </example>
-    /// <remarks>
-    /// The original xml document is stored in form["__xml__"].Value.
-    /// </remarks>
-    public class XmlDecoder : IFormDecoder
-    {
-        #region IFormDecoder Members
-
-        /// <summary>
-        ///
-        /// </summary>
-        /// <param name="stream">Stream containing the content</param>
-        /// <param name="contentType">Content type (with any additional info like boundry). Content type is always supplied in lower case</param>
-        /// <param name="encoding">Stream encoding</param>
-        /// Note: contentType and encoding are not used?
-        /// <returns>A http form, or null if content could not be parsed.</returns>
-        /// <exception cref="InvalidDataException"></exception>
-		public HttpForm Decode(Stream stream, string contentType, Encoding encoding)
-        {
-            if (stream == null || stream.Length == 0)
-                return null;
-            if (!CanParse(contentType))
-                return null;
-            if (encoding == null)
-                encoding = Encoding.UTF8;
-
-			HttpForm form = new HttpForm();
-
-            using (TextReader reader = new StreamReader(stream, encoding))
-            {
-                // let's start with saving the raw xml
-                form.Add("__xml__", reader.ReadToEnd());
-
-                try
-                {
-                    // Now let's process the data.
-                    XmlDocument doc = new XmlDocument();
-                    doc.LoadXml(form["__xml__"].Value);
-                    XmlNode child = doc.FirstChild;
-                    // Skip to next node if the node is an XML Declaration
-                    if (child.NodeType == XmlNodeType.XmlDeclaration)
-                        child = child.NextSibling;
-                    TraverseNode(form, child);
-                }
-                catch (XmlException err)
-                {
-                    throw new InvalidDataException("Failed to traverse XML", err);
-                }
-            }
-
-            return form;
-        }
-
-        /// <summary>
-        /// Recursive function that will go through an xml element and store it's content
-        /// to the form item.
-        /// </summary>
-        /// <param name="item">(parent) Item in form that content should be added to.</param>
-        /// <param name="node">Node that should be parsed.</param>
-        public void TraverseNode(IHttpInput item, XmlNode node)
-        {
-            // Add text node content to previous item
-            if (node.Name == "#text")
-            {
-                HttpInputItem formItem = item as HttpInputItem;
-                if (formItem != null)
-                {
-                    formItem.Add(node.InnerText.Trim());
-                    return;
-                }
-            }
-
-            string name = node.Name.ToLower();
-            item.Add(name, node.Value);
-            IHttpInput myItem = item[name];
-
-            if (node.Attributes != null)
-                foreach (XmlAttribute attribute in node.Attributes)
-                    myItem.Add(attribute.Name.ToLower(), attribute.Value);
-
-            foreach (XmlNode childNode in node.ChildNodes)
-                TraverseNode(myItem, childNode);
-        }
-
-        /// <summary>
-        /// Checks if the decoder can handle the mime type
-        /// </summary>
-        /// <param name="contentType">Content type (with any additional info like boundry). Content type is always supplied in lower case.</param>
-        /// <returns>True if the decoder can parse the specified content type</returns>
-        public bool CanParse(string contentType)
-        {
-            return !string.IsNullOrEmpty(contentType) && contentType.StartsWith("text/xml", true, CultureInfo.InvariantCulture);
-        }
-
-        #endregion
-    }
-}
diff --git a/HttpServer/trunk/HttpServer/Helpers/FormHelper.cs b/HttpServer/trunk/HttpServer/Helpers/FormHelper.cs
deleted file mode 100644
index 4a4fd32..0000000
--- a/HttpServer/trunk/HttpServer/Helpers/FormHelper.cs
+++ /dev/null
@@ -1,396 +0,0 @@
-using System;
-using System.Collections;
-using System.Text;
-
-namespace HttpServer.Helpers
-{
-    /// <summary>
-    /// Helpers making it easier to work with forms.
-    /// </summary>
-    /// <seealso cref="ObjectForm"/>
-    public static class FormHelper
-    {
-        /// <summary>
-        /// Used to let the website use different JavaScript libraries.
-        /// Default is <see cref="Implementations.PrototypeImp"/>
-        /// </summary>
-        public static JavascriptHelperImplementation JSImplementation = WebHelper.JSImplementation;
-
-
-
-        /// <summary>
-        /// Create a &lt;form&gt; tag.
-        /// </summary>
-        /// <param name="id">name of form</param>
-        /// <param name="action">action to invoke on submit</param>
-        /// <param name="isAjax">form should be posted as Ajax</param>
-        /// <returns>HTML code</returns>
-        /// <example>
-        /// <code>
-        /// // without options
-        /// WebHelper.FormStart("frmLogin", "/user/login", Request.IsAjax);
-        ///
-        /// // with options
-        /// WebHelper.FormStart("frmLogin", "/user/login", Request.IsAjax, "style", "display:inline", "class", "greenForm");
-        /// </code>
-        /// </example>
-        /// <param name="options">HTML attributes or JavaScript options.</param>
-        /// <remarks>Method will ALWAYS be POST.</remarks>
-        /// <exception cref="ArgumentException">options must consist of name, value, name, value</exception>
-        public static string Start(string id, string action, bool isAjax, params string[] options)
-        {
-            Check.Require(id, "id");
-            Check.NotEmpty(action, "action");
-            if (options == null || options.Length % 2 != 0)
-                throw new ArgumentException("options must consist of name, value, name, value");
-
-            StringBuilder sb = new StringBuilder();
-            sb.Append("<form action=\"");
-            sb.Append(action);
-            sb.Append("\"");
-
-            if (isAjax)
-            {
-                string onsubmit = JSImplementation.AjaxFormOnSubmit(options) + "return false;";
-                WebHelper.GenerateHtmlAttributes(sb, options, new[]{"onsubmit", onsubmit, "id", id, "method", "post"});
-            }
-            else
-                WebHelper.GenerateHtmlAttributes(sb, options, new[]{"id", id, "method", "post"});
-
-            sb.Append(">");
-            return sb.ToString();
-        }
-
-        /// <summary>
-        /// Creates a select list with the values in a collection.
-        /// </summary>
-        /// <param name="name">Name of the SELECT-tag</param>
-        /// <param name="collection">collection used to generate options.</param>
-        /// <param name="getIdTitle">delegate used to return id and title from objects.</param>
-        /// <param name="selectedValue">value that should be marked as selected.</param>
-        /// <param name="firstEmpty">First row should contain an empty value.</param>
-        /// <returns>string containing a SELECT-tag.</returns>
-        /// <seealso cref="GetIdTitle"/>
-        public static string Select(string name, IEnumerable collection, GetIdTitle getIdTitle, object selectedValue, bool firstEmpty)
-        {
-            return Select(name, name, collection, getIdTitle, selectedValue, firstEmpty);
-        }
-
-
-        /// <summary>
-        /// Creates a select list with the values in a collection.
-        /// </summary>
-        /// <param name="name">Name of the SELECT-tag</param>
-        /// <param name="id">Id of the SELECT-tag</param>
-        /// <param name="collection">collection used to generate options.</param>
-        /// <param name="getIdTitle">delegate used to return id and title from objects.</param>
-        /// <param name="selectedValue">value that should be marked as selected.</param>
-        /// <param name="firstEmpty">First row should contain an empty value.</param>
-        /// <returns>string containing a SELECT-tag.</returns>
-        /// <seealso cref="GetIdTitle"/>
-        /// <example>
-        /// <code>
-        /// // Class that is going to be used in a SELECT-tag.
-        /// public class User
-        /// {
-        ///     private readonly string _realName;
-        ///     private readonly int _id;
-        ///     public User(int id, string realName)
-        ///     {
-        ///         _id = id;
-        ///         _realName = realName;
-        ///     }
-        ///     public string RealName
-        ///     {
-        ///         get { return _realName; }
-        ///     }
-        ///
-        ///     public int Id
-        ///     {
-        ///         get { return _id; }
-        ///     }
-        /// }
-        ///
-        /// // Using an inline delegate to generate the select list
-        /// public void UserInlineDelegate()
-        /// {
-        ///     List&lt;User&gt; items = new List&lt;User&gt;();
-        ///     items.Add(new User(1, "adam"));
-        ///     items.Add(new User(2, "bertial"));
-        ///     items.Add(new User(3, "david"));
-        ///     string htmlSelect = Select("users", "users", items, delegate(object o, out object id, out object value)
-        ///                                                         {
-        ///                                                             User user = (User)o;
-        ///                                                             id = user.Id;
-        ///                                                             value = user.RealName;
-        ///                                                         }, 2, true);
-        /// }
-        ///
-        /// // Using an method as delegate to generate the select list.
-        /// public void UseExternalDelegate()
-        /// {
-        ///     List&lt;User&gt; items = new List&lt;User&gt;();
-        ///     items.Add(new User(1, "adam"));
-        ///     items.Add(new User(2, "bertial"));
-        ///     items.Add(new User(3, "david"));
-        ///     string htmlSelect = Select("users", "users", items, UserOptions, 1, true);
-        /// }
-        ///
-        /// // delegate returning id and title
-        /// public static void UserOptions(object o, out object id, out object title)
-        /// {
-        ///     User user = (User)o;
-        ///     id = user.Id;
-        ///     value = user.RealName;
-        /// }
-        /// </code>
-        /// </example>
-        /// <exception cref="ArgumentNullException"><c>name</c>, <c>id</c>, <c>collection</c> or <c>getIdTitle</c> is null.</exception>
-        public static string Select(string name, string id, IEnumerable collection, GetIdTitle getIdTitle, object selectedValue, bool firstEmpty)
-        {
-            if (name == null)
-                throw new ArgumentNullException("name");
-            if (id == null)
-                throw new ArgumentNullException("id");
-            if (collection == null)
-                throw new ArgumentNullException("collection");
-            if (getIdTitle == null)
-                throw new ArgumentNullException("getIdTitle");
-
-            StringBuilder sb = new StringBuilder();
-            sb.AppendLine("<select name=\"" + name + "\" id=\"" + id + "\">");
-            Options(sb, collection, getIdTitle, selectedValue, firstEmpty);
-            sb.AppendLine("</select>");
-            return sb.ToString();
-        }
-
-        /// <summary>
-        /// Creates a select list with the values in a collection.
-        /// </summary>
-        /// <param name="name">Name of the SELECT-tag</param>
-        /// <param name="id">Id of the SELECT-tag</param>
-        /// <param name="collection">collection used to generate options.</param>
-        /// <param name="getIdTitle">delegate used to return id and title from objects.</param>
-        /// <param name="selectedValue">value that should be marked as selected.</param>
-        /// <param name="firstEmpty">First row should contain an empty value.</param>
-        /// <param name="htmlAttributes">name, value collection of extra HTML attributes.</param>
-        /// <returns>string containing a SELECT-tag.</returns>
-        /// <seealso cref="GetIdTitle"/>
-		/// <exception cref="ArgumentNullException"><c>name</c>, <c>id</c>, <c>collection</c> or <c>getIdTitle</c> is null.</exception>
-		/// <exception cref="ArgumentException">Invalid HTML attribute list.</exception>
-        public static string Select(string name, string id, IEnumerable collection, GetIdTitle getIdTitle, object selectedValue, bool firstEmpty, params string[] htmlAttributes)
-        {
-            if (name == null)
-                throw new ArgumentNullException("name");
-            if (id == null)
-                throw new ArgumentNullException("id");
-            if (collection == null)
-                throw new ArgumentNullException("collection");
-            if (getIdTitle == null)
-                throw new ArgumentNullException("getIdTitle");
-            if (htmlAttributes != null && (htmlAttributes.Length % 2) != 0)
-                throw new ArgumentException("Invalid HTML attribute list.");
-
-            StringBuilder sb = new StringBuilder();
-            sb.Append("<select name=\"" + name + "\" id=\"" + id + "\"");
-            WebHelper.GenerateHtmlAttributes(sb, htmlAttributes);
-            sb.AppendLine(">");
-            Options(sb, collection, getIdTitle, selectedValue, firstEmpty);
-            sb.AppendLine("</select>");
-            return sb.ToString();
-        }
-
-        /// <summary>
-        /// Generate a list of HTML options
-        /// </summary>
-        /// <param name="collection">collection used to generate options.</param>
-        /// <param name="getIdTitle">delegate used to return id and title from objects.</param>
-        /// <param name="selectedValue">value that should be marked as selected.</param>
-        /// <param name="firstEmpty">First row should contain an empty value.</param>
-        /// <returns></returns>
-		/// <exception cref="ArgumentNullException"><c>collection</c> or <c>getIdTitle</c> is null.</exception>
-        public static string Options(IEnumerable collection, GetIdTitle getIdTitle, object selectedValue, bool firstEmpty)
-        {
-            if (collection == null)
-                throw new ArgumentNullException("collection");
-            if (getIdTitle == null)
-                throw new ArgumentNullException("getIdTitle");
-            StringBuilder sb = new StringBuilder();
-            Options(sb, collection, getIdTitle, selectedValue, firstEmpty);
-            return sb.ToString();
-        }
-
-    	/// <exception cref="ArgumentNullException"><c>sb</c> is null.</exception>
-    	private static void Options(StringBuilder sb, IEnumerable collection, GetIdTitle getIdTitle, object selectedValue, bool firstEmpty)
-        {
-            if (sb == null)
-                throw new ArgumentNullException("sb");
-            if (collection == null)
-                throw new ArgumentNullException("collection");
-            if (getIdTitle == null)
-                throw new ArgumentNullException("getIdTitle");
-
-            if (firstEmpty)
-                sb.AppendLine("<option value=\"\">&nbsp;</option>");
-
-
-            foreach (object o in collection)
-            {
-                object value;
-                string title;
-                getIdTitle(o, out value, out title);
-                sb.Append("<option value=\"");
-                if (value != null)
-                    sb.Append(value);
-                sb.Append("\"");
-
-                if (value != null && selectedValue != null && value.Equals(selectedValue))
-                    sb.Append(" selected=\"selected\"");
-
-                sb.Append(">");
-
-                if (title == null)
-                    sb.AppendLine("&nbsp;</option>");
-                else
-                {
-                    sb.Append(title);
-                    sb.AppendLine("</option>");
-                }
-            }
-
-        }
-
-        /// <summary>
-        /// Creates a check box.
-        /// </summary>
-        /// <param name="name">element name</param>
-        /// <param name="value">element value</param>
-        /// <param name="isChecked">determines if the check box is selected or not. This is done differently depending on the
-        /// type of variable. A boolean simply triggers checked or not, all other types are compared with "value" to determine if
-        /// the box is checked or not. </param>
-        /// <param name="htmlAttributes">a list with additional attributes (name, value, name, value).</param>
-        /// <returns>a generated radio button</returns>
-        public static string CheckBox(string name, object value, object isChecked, params string[] htmlAttributes)
-        {
-            return CheckBox(name, null, value, isChecked, htmlAttributes);
-        }
-
-        /// <summary>
-        /// Creates a check box.
-        /// </summary>
-        /// <param name="name">element name</param>
-        /// <param name="id">element id</param>
-        /// <param name="value">element value</param>
-		/// <param name="isChecked">determines if the check box is selected or not. This is done differently depending on the
-        /// type of variable. A boolean simply triggers checked or not, all other types are compared with "value" to determine if
-        /// the box is checked or not. </param>
-        /// <param name="htmlAttributes">a list with additional attributes (name, value, name, value).</param>
-        /// <returns>a generated radio button</returns>
-        /// <remarks>
-        /// value in your business object. (check box will be selected if it matches the element value)
-        /// </remarks>
-        public static string CheckBox(string name, string id, object value, object isChecked, params string[] htmlAttributes)
-        {
-            StringBuilder sb = new StringBuilder();
-            sb.Append("<input type=\"checkbox\" name=\"");
-            sb.Append(name);
-            sb.Append("\"");
-            if (id != null)
-            {
-                sb.Append(" id=\"");
-                sb.Append(id);
-                sb.Append("\"");
-            }
-
-            sb.Append(" value=\"");
-            sb.Append(value);
-            sb.Append("\"");
-
-            if (isChecked is bool && (bool)isChecked)
-                sb.Append("checked=\"checked\"");
-            else if (isChecked == value)
-                sb.Append("checked=\"checked\"");
-
-            WebHelper.GenerateHtmlAttributes(sb, htmlAttributes);
-            sb.Append("/>");
-            return sb.ToString();
-        }
-
-        /// <summary>
-        /// Creates a check box.
-        /// </summary>
-        /// <param name="name">element name</param>
-        /// <param name="id">element id</param>
-		/// <param name="isChecked">determines if the check box is selected or not. This is done differently depending on the
-        /// type of variable. A boolean simply triggers checked or not, all other types are compared with "value" to determine if
-        /// the box is checked or not. </param>
-        /// <param name="htmlAttributes">a list with additional attributes (name, value, name, value).</param>
-        /// <returns>a generated radio button</returns>
-        /// <remarks>will set value to "1".</remarks>
-        public static string CheckBox(string name, string id, object isChecked, params string[] htmlAttributes)
-        {
-            return CheckBox(name, id, 1, isChecked, htmlAttributes);
-        }
-
-        /// <summary>
-        /// Creates a RadioButton.
-        /// </summary>
-        /// <param name="name">element name</param>
-        /// <param name="value">element value</param>
-        /// <param name="isSelected">determines if the radio button is selected or not. This is done differently depending on the
-        /// type of variable. A boolean simply triggers checked or not, all other types are compared with "value" to determine if
-        /// the box is checked or not. </param>
-        /// <param name="htmlAttributes">a list with additional attributes (name, value, name, value).</param>
-        /// <returns>a generated radio button</returns>
-        public static string RadioButton(string name, object value, object isSelected, params string[] htmlAttributes)
-        {
-            return RadioButton(name, null, value, isSelected, htmlAttributes);
-        }
-
-        /// <summary>
-        /// Creates a RadioButton.
-        /// </summary>
-        /// <param name="name">element name</param>
-        /// <param name="id">element id</param>
-        /// <param name="value">element value</param>
-		/// <param name="isSelected">determines if the radio button is selected or not. This is done differently depending on the
-        /// type of variable. A boolean simply triggers checked or not, all other types are compared with "value" to determine if
-        /// the box is checked or not. </param>
-        /// <param name="htmlAttributes">a list with additional attributes (name, value, name, value).</param>
-        /// <returns>a generated radio button</returns>
-        public static string RadioButton(string name, string id, object value, object isSelected, params string[] htmlAttributes)
-        {
-            StringBuilder sb = new StringBuilder();
-            sb.Append("<input type=\"radio\" name=\"");
-            sb.Append(name);
-            sb.Append("\"");
-            if (id != null)
-            {
-                sb.Append(" id=\"");
-                sb.Append(id);
-                sb.Append("\"");
-            }
-            sb.Append(" value=\"");
-            sb.Append(value);
-            sb.Append("\"");
-
-            if (isSelected is bool && (bool)isSelected)
-                sb.Append("checked=\"checked\"");
-            else if (isSelected.Equals(value))
-                sb.Append("checked=\"checked\"");
-
-            WebHelper.GenerateHtmlAttributes(sb, htmlAttributes);
-            sb.Append("/>");
-            return sb.ToString();
-        }
-
-        /// <summary>
-        /// form close tag
-        /// </summary>
-        /// <returns></returns>
-        public static string End()
-        {
-            return "</form>";
-        }
-    }
-}
diff --git a/HttpServer/trunk/HttpServer/Helpers/GetIdTitle.cs b/HttpServer/trunk/HttpServer/Helpers/GetIdTitle.cs
deleted file mode 100644
index 1a18884..0000000
--- a/HttpServer/trunk/HttpServer/Helpers/GetIdTitle.cs
+++ /dev/null
@@ -1,66 +0,0 @@
-using System.Collections;
-
-namespace HttpServer.Helpers
-{
-    /// <summary>
-    /// Delegate used by <see cref="FormHelper.Select(string, System.Collections.IEnumerable, GetIdTitle, object, bool)"/> to populate select options.
-    /// </summary>
-    /// <param name="obj">current object (for instance a User).</param>
-    /// <param name="id">Text that should be displayed in the value part of a &lt;optiongt;-tag.</param>
-    /// <param name="title">Text shown in the select list.</param>
-    /// <example>
-    /// // Class that is going to be used in a SELECT-tag.
-    /// public class User
-    /// {
-    ///     private readonly string _realName;
-    ///     private readonly int _id;
-    ///     public User(int id, string realName)
-    ///     {
-    ///         _id = id;
-    ///         _realName = realName;
-    ///     }
-    ///     public string RealName
-    ///     {
-    ///         get { return _realName; }
-    ///     }
-    ///
-    ///     public int Id
-    ///     {
-    ///         get { return _id; }
-    ///     }
-    /// }
-    ///
-    /// // Using an inline delegate to generate the select list
-    /// public void UserInlineDelegate()
-    /// {
-    ///     List&lt;User&gt; items = new List&lt;User&gt;();
-    ///     items.Add(new User(1, "adam"));
-    ///     items.Add(new User(2, "bertial"));
-    ///     items.Add(new User(3, "david"));
-    ///     string htmlSelect = Select("users", "users", items, delegate(object o, out object id, out object value)
-    ///                                                         {
-    ///                                                             User user = (User)o;
-    ///                                                             id = user.Id;
-    ///                                                             value = user.RealName;
-    ///                                                         }, 2, true);
-    /// }
-    ///
-    /// // Using an method as delegate to generate the select list.
-    /// public void UseExternalDelegate()
-    /// {
-    ///     List&lt;User&gt; items = new List&lt;User&gt;();
-    ///     items.Add(new User(1, "adam"));
-    ///     items.Add(new User(2, "bertial"));
-    ///     items.Add(new User(3, "david"));
-    ///     string htmlSelect = Select("users", "users", items, UserOptions, 1, true);
-    /// }
-    ///
-    /// // delegate returning id and title
-    /// public static void UserOptions(object o, out object id, out object title)
-    /// {
-    ///     User user = (User)o;
-    ///     id = user.Id;
-    ///     value = user.RealName;
-    /// }    /// </example>
-    public delegate void GetIdTitle(object obj, out object id, out string title);
-}
diff --git a/HttpServer/trunk/HttpServer/Helpers/Implementations/PrototypeImp.cs b/HttpServer/trunk/HttpServer/Helpers/Implementations/PrototypeImp.cs
deleted file mode 100644
index ceeb43b..0000000
--- a/HttpServer/trunk/HttpServer/Helpers/Implementations/PrototypeImp.cs
+++ /dev/null
@@ -1,201 +0,0 @@
-using System.Collections.Generic;
-using System.Text;
-
-namespace HttpServer.Helpers.Implementations
-{
-    /// <summary>
-    /// PrototypeJS implementation of the javascript functions.
-    /// </summary>
-	public class PrototypeImp : JavascriptHelperImplementation
-	{
-		/// <summary>
-		/// Requests a url through ajax
-		/// </summary>
-		/// <param name="url">url to fetch. Url is NOT enclosed in quotes by the implementation. You need to do that yourself.</param>
-        /// <param name="options">optional options in format "key, value, key, value", used in JS request object. All keys should end with colon.</param>
-		/// <returns>a link tag</returns>
-		/// <remarks>onclick attribute is used by this method.</remarks>
-		/// <example>
-		/// <code>
-		/// // plain text
-		/// JSHelper.AjaxRequest("'/user/show/1'");
-		///
-		/// // ajax request using this.href
-		/// string link = "&lt;a href=\"/user/call/1\" onclick=\"" + JSHelper.AjaxRequest("this.href") + "/&lt;call user&lt;/a&gt;";
-		/// </code>
-		/// </example>
-		public override string AjaxRequest(string url, params string[] options)
-		{
-			// For each parameter ending with : push it into the Ajax script as a javascript parameter
-			StringBuilder sb = new StringBuilder();
-			sb.Append("new Ajax.Request(");
-			sb.Append(url);
-			sb.Append(", { ");
-		    bool startWithComma = false;
-			if (!Contains(options, "method:"))
-			{
-				sb.Append("method: 'get'");
-				startWithComma = true;
-			}
-			if(!Contains(options, "evalScripts:"))
-			{
-				sb.Append(startWithComma ? ",evalScripts: true" : "evalScripts: true");
-				startWithComma = true;
-			}
-			GenerateOptions(sb, options, startWithComma);
-			sb.Append(" });");
-			return sb.ToString();
-		}
-
-        /// <summary>
-        /// Determins if a list of strings contains a specific value
-        /// </summary>
-        /// <param name="options">options to check in</param>
-        /// <param name="value">value to find</param>
-        /// <returns>true if value was found</returns>
-        /// <remarks>case insensitive</remarks>
-        private static bool Contains(IEnumerable<string> options, string value)
-        {
-            foreach (string s in options)
-            {
-                if (string.Compare(value, s, true) == 0)
-                    return true;
-            }
-
-            return false;
-        }
-
-		/// <summary>
-		/// Ajax requests that updates an element with
-		/// the fetched content
-		/// </summary>
-        /// <param name="url">URL to fetch. URL is NOT enclosed in quotes by the implementation. You need to do that yourself.</param>
-        /// <param name="targetId">element to update</param>
-		/// <param name="options">options in format "key, value, key, value". All keys should end with colon.</param>
-		/// <returns>A link tag.</returns>
-		/// <example>
-		/// <code>
-		/// JSHelper.AjaxUpdater("'/user/show/1'", "user", "onsuccess:", "alert('hello');", "asynchronous:", "true");
-		/// </code>
-		/// </example>
-		public override string AjaxUpdater(string url, string targetId, params string[] options)
-		{
-			// For each parameter ending with : push it into the Ajax script as a javascript parameter
-			StringBuilder sb = new StringBuilder();
-			sb.Append("new Ajax.Updater('");
-            sb.Append(targetId);
-			sb.Append("', ");
-            sb.Append(url);
-			sb.Append(", { ");
-			bool startWithComma = false;
-			if (!Contains(options, "method:"))
-			{
-				sb.Append("method: 'get'");
-				startWithComma = true;
-			}
-			if (!Contains(options, "evalScripts:"))
-			{
-				sb.Append(startWithComma ? ",evalScripts: true" : "evalScripts: true");
-				startWithComma = true;
-			}
-			GenerateOptions(sb, options, startWithComma);
-			sb.Append(" });");
-			return sb.ToString();
-		}
-
-		/// <summary>
-		/// A link that pop ups a Dialog (overlay div)
-		/// </summary>
-		/// <param name="url">URL to contents of dialog</param>
-		/// <param name="title">link title</param>
-		/// <param name="htmlAttributes">name, value, name, value</param>
-		/// <returns>
-		/// A "a"-tag that popups a dialog when clicked
-		/// </returns>
-		/// <remarks><para>Requires Control.Modal found here: http://livepipe.net/projects/control_modal/</para>
-		/// And the following JavaScript (load it in application.js):
-		/// <code>
-		/// Event.observe(window, 'load',
-		///   function() {
-		///     document.getElementsByClassName('modal').each(function(link){  new Control.Modal(link);  });
-		///   }
-		/// );
-		/// </code>
-		/// </remarks>
-		/// <example>
-		/// WebHelper.DialogLink("/user/show/1", "show user", "onmouseover", "alert('booh!');");
-		/// </example>
-		public override string DialogLink(string url, string title, params string[] htmlAttributes)
-		{
-			return WebHelper.BuildLink(url, title, htmlAttributes, "class", "modal");
-		}
-
-		#region JavascriptImplementation Members
-
-        /// <summary>
-        /// create a modal dialog (usually using DIVs)
-        /// </summary>
-        /// <param name="url">url to fetch</param>
-        /// <param name="title">dialog title</param>
-        /// <param name="options">javascript/html attributes. javascript options ends with colon ':'.</param>
-        /// <returns></returns>
-		public override string CreateDialog(string url, string title, params string[] options)
-		{
-			return string.Format("new Control.Modal('{0}');", url);
-		}
-
-		/// <summary>
-		/// Close a javascript dialog window/div.
-		/// </summary>
-		/// <returns>javascript for closing a dialog.</returns>
-		/// <see cref="DialogLink" />
-		public override string CloseDialog()
-		{
-			return "Control.Modal.close();";
-		}
-
-
-        /// <summary>
-        /// javascript action that should be added to the "onsubmit" event in the form tag.
-        /// </summary>
-        /// <param name="options">remember to encapsulate strings in ''</param>
-        /// <returns></returns>
-        /// <remarks>All javascript option names should end with colon.</remarks>
-        /// <example>
-        /// 	<code>
-        /// JSHelper.AjaxRequest("/user/show/1", "onsuccess:", "$('userInfo').update(result);");
-        /// </code>
-        /// </example>
-		public override string AjaxFormOnSubmit(params string[] options)
-		{
-			StringBuilder sb = new StringBuilder();
-			sb.Append("new Ajax.Request(this.action, { parameters: Form.serialize(this)");
-
-            // copy all javascript options
-            string[] theOptions = new string[options.Length + 6];
-            //options.CopyTo(theOptions, 0); todo: is this faster or slower?
-            for (int i = 0; i < options.Length; i += 2 )
-            {
-                if (options[i][options[i].Length-1] == ':')
-                {
-                    theOptions[i] = options[i];
-                    theOptions[i + 1] = options[i + 1];
-                }
-            }
-
-            int index = options.Length;
-            theOptions[index++] = "method:";
-            theOptions[index++] = "'post'";
-            theOptions[index++] = "asynchronous:";
-            theOptions[index++] = "true";
-            theOptions[index++] = "evalScripts:";
-            theOptions[index] = "true";
-
-            GenerateOptions(sb, theOptions, true);
-			sb.Append(" });");
-			return sb.ToString();
-		}
-
-		#endregion
-	}
-}
diff --git a/HttpServer/trunk/HttpServer/Helpers/JSHelper.cs b/HttpServer/trunk/HttpServer/Helpers/JSHelper.cs
deleted file mode 100644
index 17522b8..0000000
--- a/HttpServer/trunk/HttpServer/Helpers/JSHelper.cs
+++ /dev/null
@@ -1,71 +0,0 @@
-namespace HttpServer.Helpers
-{
-    /// <summary>
-    /// Will contain helper functions for javascript.
-    /// </summary>
-    public static class JSHelper
-    {
-		/// <summary>
-		/// Requests a url through ajax
-		/// </summary>
-		/// <param name="url">url to fetch. Url is NOT enclosed in quotes by the implementation. You need to do that yourself.</param>
-		/// <param name="options">optional options in format "key, value, key, value", used in JS request object. All keys should end with colon.</param>
-		/// <returns>a link tag</returns>
-		/// <remarks>onclick attribute is used by this method.</remarks>
-		/// <example>
-		/// <code>
-		/// // plain text
-		/// JSHelper.AjaxRequest("'/user/show/1'");
-		///
-		/// // ajax request using this.href
-		/// string link = "&lt;a href=\"/user/call/1\" onclick=\"" + JSHelper.AjaxRequest("this.href") + "/&lt;call user&lt;/a&gt;";
-		/// </code>
-		/// </example>
-		public static string AjaxRequest(string url, params string[] options)
-        {
-            return WebHelper.JSImplementation.AjaxRequest(url, options);
-        }
-
-
-        /// <summary>
-        /// Ajax requests that updates an element with
-        /// the fetched content
-        /// </summary>
-        /// <param name="url">url to fetch. Url is NOT enclosed in quotes by the implementation. You need to do that yourself.</param>
-        /// <param name="targetId">element to update</param>
-        /// <param name="options">options in format "key, value, key, value". All keys should end with colon.</param>
-        /// <returns>A link tag.</returns>
-        /// <example>
-        /// <code>
-        /// JSHelper.AjaxUpdater("'/user/show/1'", "user", "onsuccess:", "alert('hello');", "asynchronous:", "true");
-        /// </code>
-        /// </example>
-        public static string AjaxUpdater(string url, string targetId, params string[] options)
-        {
-            return WebHelper.JSImplementation.AjaxUpdater(url, targetId, options);
-        }
-
-        /// <summary>
-        /// Opens contents in a dialog window.
-        /// </summary>
-        /// <param name="url">url to contents of dialog</param>
-        /// <param name="title">link title</param>
-        /// <param name="options">name, value, name, value, all parameter names should end with colon.</param>
-        public static string CreateDialog(string url, string title, params string[] options)
-        {
-            return WebHelper.JSImplementation.CreateDialog(url, title, options);
-
-        }
-
-        /// <summary>
-        /// Close a javascript dialog window/div.
-        /// </summary>
-        /// <returns>javascript for closing a dialog.</returns>
-        /// <see cref="CreateDialog" />
-        public static string CloseDialog()
-        {
-            return WebHelper.JSImplementation.CloseDialog();
-        }
-
-    }
-}
diff --git a/HttpServer/trunk/HttpServer/Helpers/ObjectForm.cs b/HttpServer/trunk/HttpServer/Helpers/ObjectForm.cs
deleted file mode 100644
index 2318c5e..0000000
--- a/HttpServer/trunk/HttpServer/Helpers/ObjectForm.cs
+++ /dev/null
@@ -1,251 +0,0 @@
-using System;
-using System.Collections;
-using System.Reflection;
-using System.Text;
-
-namespace HttpServer.Helpers
-{
-    /// <summary>
-    /// The object form class takes an object and creates form items for it.
-    /// </summary>
-    public class ObjectForm
-    {
-        private readonly object _object;
-        private readonly string _action;
-        private readonly string _name = string.Empty;
-        private readonly string _method = "post";
-
-        /// <summary>
-        /// Initializes a new instance of the <see cref="ObjectForm"/> class.
-        /// </summary>
-        /// <param name="method"></param>
-        /// <param name="name">form name *and* id.</param>
-        /// <param name="action">action to do when form is posted.</param>
-        /// <param name="obj"></param>
-        public ObjectForm(string action, string name, object obj, string method)
-            : this(name, action, obj)
-        {
-            if (string.IsNullOrEmpty(method))
-                throw new ArgumentNullException("method");
-
-            _method = method.ToLower();
-        }
-
-        /// <summary>
-        /// Initializes a new instance of the <see cref="ObjectForm"/> class.
-        /// </summary>
-        /// <param name="name">form name *and* id.</param>
-        /// <param name="action">action to do when form is posted.</param>
-        /// <param name="obj">object to get values from</param>
-        public ObjectForm(string action, string name, object obj)
-            : this(action, obj)
-        {
-            if (string.IsNullOrEmpty(name))
-                throw new ArgumentNullException("name");
-
-            _name = name;
-        }
-
-        /// <summary>
-        /// Initializes a new instance of the <see cref="ObjectForm"/> class.
-        /// </summary>
-        /// <param name="action">form action.</param>
-        /// <param name="obj">object to get values from.</param>
-        public ObjectForm(string action, object obj)
-        {
-            if (string.IsNullOrEmpty(action))
-                throw new ArgumentNullException("action");
-            if (obj == null)
-                throw new ArgumentNullException("obj");
-
-            _object = obj;
-            _action = action;
-        }
-
-        /// <summary>
-        /// write out the FORM-tag.
-        /// </summary>
-        /// <returns>generated html code</returns>
-        public string Begin()
-        {
-            return Begin(false);
-        }
-
-        /// <summary>
-        /// Writeout the form tag
-        /// </summary>
-        /// <param name="isAjax">form should be posted through ajax.</param>
-        /// <returns>generated html code</returns>
-        public string Begin(bool isAjax)
-        {
-            string ajaxCode;
-            if (isAjax)
-                ajaxCode = "onsubmit=\"" + WebHelper.JSImplementation.AjaxFormOnSubmit() + "\"";
-            else
-                ajaxCode = string.Empty;
-
-            if (!string.IsNullOrEmpty(_name))
-                return string.Format("<form method=\"{0}\" id=\"{1}\" name=\"{1}\" {3} action=\"{2}\">", _method, _name, _action, ajaxCode);
-            else
-                return string.Format("<form method=\"{0}\" action=\"{1}\" {2}>", _method, _action, ajaxCode);
-        }
-
-
-        /// <summary>
-        /// Generates a text box.
-        /// </summary>
-        /// <param name="propertyName"></param>
-        /// <param name="options"></param>
-        /// <returns>generated html code</returns>
-        public string Tb(string propertyName, params object[] options)
-        {
-            if (options.Length % 2 != 0)
-                throw new ArgumentException("Options must consist of string, object, ... as key/value couple(s).");
-
-            if (options.Length == 0)
-                return string.Format("<input type=\"text\" name=\"{0}[{1}]\" id=\"{0}_{1}\" value=\"{2}\" />", _name, propertyName, GetValue(propertyName));
-
-            StringBuilder sb = new StringBuilder();
-            for (int i = 0; i < options.Length; i += 2)
-            {
-                sb.Append(options[i]);
-                sb.Append("=\"");
-                sb.Append(options[i + 1].ToString());
-                sb.Append("\"");
-            }
-
-            return string.Format("<input type=\"text\" name=\"{0}[{1}]\" id=\"{0}_{1}\" {3} value=\"{2}\" />", _name, propertyName, GetValue(propertyName), sb);
-
-        }
-
-        /// <summary>
-        /// password box
-        /// </summary>
-        /// <param name="propertyName"></param>
-        /// <param name="options"></param>
-        /// <returns>generated html code</returns>
-        public string Pb(string propertyName, params object[] options)
-        {
-            return string.Format("<input type=\"password\" name=\"{0}[{1}]\" id=\"{0}_{1}\" />", _name, propertyName);
-        }
-
-        /// <summary>
-        /// Hiddens the specified property name.
-        /// </summary>
-        /// <param name="propertyName">Name of the property.</param>
-        /// <param name="options">The options.</param>
-        /// <returns>generated html code</returns>
-        public string Hidden(string propertyName, params object[] options)
-        {
-            return string.Format("<input type=\"hidden\" name=\"{0}[{1}]\" id=\"{0}_{1}\" value=\"{2}\" />", _name, propertyName, GetValue(propertyName));
-        }
-
-        /// <summary>
-        /// Labels the specified property name.
-        /// </summary>
-        /// <param name="propertyName">property in object.</param>
-        /// <param name="label">caption</param>
-        /// <returns>generated html code</returns>
-        public string Label(string propertyName, string label)
-        {
-            return string.Format("<label for=\"{0}_{1}\">{2}</label>", _name, propertyName, label);
-        }
-        /// <summary>
-        /// Generate a checkbox
-        /// </summary>
-        /// <param name="propertyName">property in object</param>
-        /// <param name="value">checkbox value</param>
-        /// <param name="options">additional html attributes.</param>
-        /// <returns>generated html code</returns>
-        public string Cb(string propertyName, string value, params object[] options)
-        {
-            string isChecked = string.Empty;
-
-            object o = GetValue(propertyName);
-            if (o.GetType() == typeof(bool) && (bool)o)
-                isChecked = "checked=\"checked\"";
-            else
-            {
-                int i;
-                int.TryParse(o.ToString(), out i);
-                if (i != 0)
-                    isChecked = "checked=\"checked\"";
-            }
-
-            return string.Format("<input type=\"hidden\" name=\"{0}\" id=\"{0}_{1}\" value=\"0\" /><input type=\"checkbox\" name=\"{0}[{1}]\" id=\"{0}_{1}\" value=\"{2}\" {3} />", _name, propertyName, value, isChecked);
-        }
-
-        /// <summary>
-        /// Write a html select tag
-        /// </summary>
-        /// <param name="propertyName">object property.</param>
-        /// <param name="idColumn">id column</param>
-        /// <param name="titleColumn">The title column.</param>
-        /// <param name="options">The options.</param>
-        /// <returns></returns>
-        public string Select(string propertyName, string idColumn, string titleColumn, params object[] options)
-        {
-            object o = _object.GetType().GetProperty(propertyName).GetValue(_object, null);
-            return Select(propertyName, o as IEnumerable, idColumn, titleColumn, options);
-        }
-
-        /// <summary>
-        /// Selects the specified property name.
-        /// </summary>
-        /// <param name="propertyName">Name of the property.</param>
-        /// <param name="items">The items.</param>
-        /// <param name="idColumn">The id column.</param>
-        /// <param name="titleColumn">The title column.</param>
-        /// <param name="options">The options.</param>
-        /// <returns></returns>
-        public string Select(string propertyName, IEnumerable items, string idColumn, string titleColumn, params object[] options)
-        {
-            //object o = _object.GetType().GetProperty(propertyName).GetValue(_object, null);
-
-            StringBuilder sb = new StringBuilder();
-            sb.AppendFormat("<select name=\"{0}[{1}]\">{2}", _name, propertyName, Environment.NewLine);
-
-            if (items != null)
-                foreach (object o1 in items)
-                {
-                    sb.AppendFormat("<option value=\"{0}\">{1}</option>{2}",
-                                    o1.GetType().GetProperty(idColumn).GetValue(o1, null),
-                                    o1.GetType().GetProperty(titleColumn).GetValue(o1, null), Environment.NewLine);
-
-                }
-            sb.AppendLine("</select>");
-            return sb.ToString();
-        }
-
-        /// <summary>
-        /// Write a submit tag.
-        /// </summary>
-        /// <param name="value">button caption</param>
-        /// <returns>html submit tag</returns>
-        public string Submit(string value)
-        {
-            return string.Format("<input type=\"submit\" value=\"{0}\" />", value);
-        }
-
-        /// <summary>
-        /// html end form tag
-        /// </summary>
-        /// <returns>html</returns>
-        public string End()
-        {
-            return "</form>";
-        }
-
-        private string GetValue(string propertyName)
-        {
-            Type type = _object.GetType();
-            PropertyInfo pi = type.GetProperty(propertyName);
-            if (pi == null) throw new ArgumentException("Property " + propertyName + " not found for type " + type);
-            object o = pi.GetValue(_object, null);
-            if (o == null)
-                return string.Empty;
-            else
-                return o.ToString();
-        }
-    }
-}
\ No newline at end of file
diff --git a/HttpServer/trunk/HttpServer/Helpers/ResourceInfo.cs b/HttpServer/trunk/HttpServer/Helpers/ResourceInfo.cs
deleted file mode 100644
index 2829e5b..0000000
--- a/HttpServer/trunk/HttpServer/Helpers/ResourceInfo.cs
+++ /dev/null
@@ -1,67 +0,0 @@
-using System.IO;
-using System.Reflection;
-
-namespace HttpServer.Helpers
-{
-	/// <summary>
-	/// Container to bind resource names to assemblies
-	/// </summary>
-	internal class ResourceInfo
-	{
-		/// <summary>
-		/// Instantiates an instance of <see cref="ResourceInfo"/>
-		/// </summary>
-		/// <param name="uri">The dot seperated uri the resource maps to</param>
-		/// <param name="resourceName">The full resource name</param>
-		/// <param name="assembly">The assembly the resource exists in</param>
-		public ResourceInfo(string resourceName, string uri, Assembly assembly)
-		{
-			Check.NotEmpty(resourceName, "resourceName");
-			Check.NotEmpty(uri, "uri");
-			Check.Require(assembly, "assembly");
-
-			ResourceName = resourceName;
-			Assembly = assembly;
-			Uri = uri;
-
-			int dotIndex = Uri.LastIndexOf('.');
-			if (dotIndex != -1)
-			{
-				Extension = Uri.Substring(dotIndex + 1);
-				ExtensionLessUri = Uri.Substring(0, Uri.Length - Extension.Length - 1);
-			}
-			else
-				Extension = string.Empty;
-		}
-
-		/// <summary>
-		/// Retrieves the assembly the resource resides in
-		/// </summary>
-		public Assembly Assembly { get; private set; }
-
-		/// <summary>
-		/// Retrieves the full name/path of the assembly
-		/// </summary>
-		public string Uri { get; private set; }
-
-		/// <summary>
-		/// Retrieves the extension of the resource
-		/// </summary>
-		public string Extension { get; private set; }
-
-		/// <summary>Returns the Uri without extension</summary>
-		public string ExtensionLessUri { get; private set; }
-
-		/// <summary>Retrieves the full path name to the resource file</summary>
-		public string ResourceName { get; private set; }
-
-		/// <summary>
-		/// Retrieves a stream to the resource
-		/// </summary>
-		/// <returns>Null if the resource couldn't be located somehow</returns>
-		public Stream GetStream()
-		{
-			return Assembly.GetManifestResourceStream(ResourceName);
-		}
-	}
-}
\ No newline at end of file
diff --git a/HttpServer/trunk/HttpServer/Helpers/ResourceManager.cs b/HttpServer/trunk/HttpServer/Helpers/ResourceManager.cs
deleted file mode 100644
index 61c84ba..0000000
--- a/HttpServer/trunk/HttpServer/Helpers/ResourceManager.cs
+++ /dev/null
@@ -1,168 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.IO;
-using System.Reflection;
-
-namespace HttpServer.Helpers
-{
-	/// <summary>Class to handle loading of resource files</summary>
-	public class ResourceManager
-	{
-		private readonly ILogWriter _logger;
-
-		private readonly Dictionary<string, ResourceInfo> _resources = new Dictionary<string, ResourceInfo>();
-
-		private readonly Dictionary<string, List<ResourceInfo>> _mappedResources = new Dictionary<string, List<ResourceInfo>>();
-
-		/// <summary>
-		/// Initializes a new instance of the <see cref="ResourceManager"/> class.
-		/// </summary>
-		public ResourceManager()
-		{
-			_logger = NullLogWriter.Instance;
-		}
-
-		/// <summary>
-		/// Initializes a new instance of the <see cref="ResourceManager"/> class.
-		/// </summary>
-		/// <param name="writer">logger.</param>
-		public ResourceManager(ILogWriter writer)
-		{
-			_logger = writer ?? NullLogWriter.Instance;
-		}
-
-		/// <summary>
-		/// Loads resources from a namespace in the given assembly to an URI
-		/// </summary>
-		/// <param name="toUri">The URI to map the resources to</param>
-		/// <param name="fromAssembly">The assembly in which the resources reside</param>
-		/// <param name="fromNamespace">The namespace from which to load the resources</param>
-		/// <usage>
-		/// <code>
-		/// resourceLoader.LoadResources("/user/", typeof(User).Assembly, "MyLib.Models.User.Views");
-		/// </code>
-		/// Will make the resource MyLib.Models.User.Views.list.Haml accessible via /user/list.haml or /user/list/
-		/// </usage>
-		/// <returns>The amount of loaded files, giving you the possibility of making sure the resources needed gets loaded</returns>
-		/// <exception cref="InvalidOperationException">If a resource has already been mapped to an uri</exception>
-		public int LoadResources(string toUri, Assembly fromAssembly, string fromNamespace)
-		{
-			// We'll save all uri's point seperated to be able to retrieve files with dots in 'em (like /user/oblata.exe which would be mapped to user.oblata.exe)
-			toUri = toUri.ToLower().Replace('/', '.').Trim('.');
-			if (!string.IsNullOrEmpty(toUri))
-				toUri += ".";
-
-			fromNamespace = fromNamespace.ToLower();
-			if (!fromNamespace.EndsWith("."))
-				fromNamespace += ".";
-
-			int added = 0;
-			foreach (string resourceName in fromAssembly.GetManifestResourceNames())
-			{
-				string name = resourceName.ToLower();
-				if (!name.StartsWith(fromNamespace))
-					continue;
-
-				// Create a search name for the resource file, aka just strip the from namespace from resource path and add uri
-				string uri = toUri + name.Substring(fromNamespace.Length);
-				ResourceInfo info = new ResourceInfo(resourceName, uri, fromAssembly);
-
-				// If a resource has previously been added to the exact url we need to throw an exception
-				if(_resources.ContainsKey(info.Uri))
-					throw new InvalidOperationException("A resource has already been mapped to the uri: " + info.Uri);
-
-				List<ResourceInfo> mapped;
-				if(!_mappedResources.TryGetValue(info.ExtensionLessUri + ".*", out mapped))
-					_mappedResources.Add(info.ExtensionLessUri + ".*", new List<ResourceInfo>{info});
-				else
-					mapped.Add(info);
-
-				_resources.Add(info.Uri, info);
-				added++;
-
-				_logger.Write(this, LogPrio.Info, "Resource '" + info.ResourceName + "' loaded to uri: " + uri);
-			}
-
-			return added;
-		}
-
-		private string FormatPath(string path)
-		{
-			return path.ToLower().Replace('/', '.').Replace('\\', '.').Trim('.');
-		}
-
-		/// <summary>
-		/// Retrieves a stream for the specified resource path if loaded otherwise null
-		/// </summary>
-		/// <param name="path">Path to the resource to retrieve a stream for</param>
-		/// <returns>A stream or null if the resource couldn't be found</returns>
-		public Stream GetResourceStream(string path)
-		{
-			ResourceInfo info;
-			if(!_resources.TryGetValue(FormatPath(path), out info))
-				return null;
-
-			return info.GetStream();
-		}
-
-		/// <summary>
-		/// Fetch all files from the resource that matches the specified arguments.
-		/// </summary>
-		/// <param name="path">The path to the resource to extract</param>
-		/// <returns>
-		/// a list of files if found; or an empty array if no files are found.
-		/// </returns>
-		/// <exception cref="ArgumentException">Search path must end with an asterisk for finding arbitrary files</exception>
-		public string[] GetFiles(string path)
-		{
-			Check.NotEmpty(path, "path");
-			if(!path.EndsWith(".*"))
-			{
-				ResourceInfo info;
-				return _resources.TryGetValue(FormatPath(path), out info) ? new []{path} : new string[]{};
-			}
-
-			List<ResourceInfo> resources;
-			if(!_mappedResources.TryGetValue(FormatPath(path), out resources))
-				return new string[]{};
-
-			path = path.TrimEnd('*');
-			List<string> files = new List<string>();
-			foreach (ResourceInfo info in resources)
-				files.Add(path + info.Extension);
-
-			return files.ToArray();
-		}
-
-		/// <summary>
-		/// Fetch all files from the resource that matches the specified arguments.
-		/// </summary>
-		/// <param name="path">Where the file should reside.</param>
-		/// <param name="filename">Files to check</param>
-		/// <returns>
-		/// a list of files if found; or an empty array if no files are found.
-		/// </returns>
-		public string[] GetFiles(string path, string filename)
-		{
-			Check.NotEmpty(path, "path");
-			Check.NotEmpty(filename, "filename");
-
-			path = path.EndsWith(".") ? path : (path + ".");
-			return GetFiles(path + filename);
-		}
-
-		/// <summary>
-		/// Returns whether or not the loader has an instance of the file requested
-		/// </summary>
-		/// <param name="filename">The name of the template/file</param>
-		/// <returns>True if the loader can provide the file</returns>
-		public bool ContainsResource(string filename)
-		{
-			filename = FormatPath(filename);
-			if (filename.EndsWith("*"))
-				return _mappedResources.ContainsKey(filename);
-
-			return _resources.ContainsKey(filename);
-		}
-	}
-}
\ No newline at end of file
diff --git a/HttpServer/trunk/HttpServer/Helpers/WebHelper.cs b/HttpServer/trunk/HttpServer/Helpers/WebHelper.cs
deleted file mode 100644
index b049255..0000000
--- a/HttpServer/trunk/HttpServer/Helpers/WebHelper.cs
+++ /dev/null
@@ -1,488 +0,0 @@
-using System;
-using System.Collections;
-using System.Collections.Generic;
-using System.Collections.Specialized;
-using System.Text;
-using HttpServer.Helpers.Implementations;
-
-namespace HttpServer.Helpers
-{
-
-    /// <summary>
-    /// Webhelper provides helpers for common tasks in HTML.
-    /// </summary>
-    public static class WebHelper
-    {
-        /// <summary>
-        /// Used to let the website use different javascript libraries.
-        /// Default is <see cref="PrototypeImp"/>
-        /// </summary>
-        public static JavascriptHelperImplementation JSImplementation = new PrototypeImp();
-
-        /// <summary>
-        /// Creates a link that invokes through ajax.
-        /// </summary>
-        /// <param name="url">url to fetch</param>
-        /// <param name="title">link title</param>
-        /// <param name="options">
-        /// optional options in format "key, value, key, value".
-        /// Javascript options starts with ':'.
-        /// </param>
-        /// <returns>a link tag</returns>
-        /// <example>
-        /// WebHelper.AjaxRequest("/users/add/", "Add user", "method:", "post", "onclick", "validate('this');");
-        /// </example>
-        public static string AjaxRequest(string url, string title, params string[] options)
-        {
-            string text = JSImplementation.AjaxRequest("this.href", options) + "return false;";
-        	options = JSImplementation.RemoveJavascriptOptions(options);
-            return BuildLink(url, title, options, "onclick", text);
-        }
-
-        /// <summary>
-        /// Builds a link that updates an element with the fetched ajax content.
-        /// </summary>
-        /// <param name="url">Url to fetch content from</param>
-        /// <param name="title">link title</param>
-        /// <param name="targetId">html element to update with the results of the ajax request.</param>
-        /// <param name="options">optional options in format "key, value, key, value"</param>
-        /// <returns>A link tag.</returns>
-        public static string AjaxUpdater(string url, string title, string targetId, params string[] options)
-        {
-            string text = JSImplementation.AjaxUpdater("this.href", targetId, options) + "return false;";
-			options = JSImplementation.RemoveJavascriptOptions(options);
-            return BuildLink(url, title, options, "onclick", text);
-        }
-
-        /// <summary>
-        /// A link that pop ups a Dialog (overlay div)
-        /// </summary>
-        /// <param name="url">url to contents of dialog</param>
-        /// <param name="title">link title</param>
-        /// <param name="htmlAttributes">name/value of html attributes.</param>
-        /// <returns>A "a"-tag that popups a dialog when clicked</returns>
-        /// <example>
-        /// WebHelper.DialogLink("/user/show/1", "show user", "onmouseover", "alert('booh!');");
-        /// </example>
-        public static string DialogLink(string url, string title, params string[] htmlAttributes)
-        {
-            return JSImplementation.DialogLink(url, title, htmlAttributes);
-        }
-
-		/// <summary>
-		/// Create/Open a dialog box using ajax
-		/// </summary>
-		/// <param name="url"></param>
-		/// <param name="title"></param>
-		/// <param name="parameters"></param>
-		/// <returns></returns>
-		public static string CreateDialog(string url, string title, params string[] parameters)
-		{
-			return JSImplementation.CreateDialog(url, title, parameters);
-		}
-
-        /// <summary>
-        /// Close a javascript dialog window/div.
-        /// </summary>
-        /// <returns>javascript for closing a dialog.</returns>
-        /// <see cref="DialogLink"/>
-        public static string CloseDialog()
-        {
-            return JSImplementation.CloseDialog();
-        }
-
-        /// <summary>
-        /// Create a &lt;form&gt; tag.
-        /// </summary>
-        /// <param name="name">name of form</param>
-        /// <param name="action">action to invoke on submit</param>
-        /// <param name="isAjax">form should be posted as ajax</param>
-        /// <returns>html code</returns>
-        /// <example>
-        /// WebHelper.FormStart("frmLogin", "/user/login", Request.IsAjax);
-        /// </example>
-        [Obsolete("Moved to FormHelper")]
-        public static string FormStart(string name, string action, bool isAjax)
-        {
-            string formStart = "<form method=\"post\" name=\"" + name + "\" id=\"" + name + "\" action=\"" + action +
-                               "\"";
-            if (isAjax)
-                return
-                    formStart +
-                    "onsubmit=\"" + JSImplementation.AjaxFormOnSubmit() + "\">";
-
-            return formStart + ">";
-        }
-
-        /// <summary>
-        /// Create a link tag.
-        /// </summary>
-        /// <param name="url">url to go to</param>
-        /// <param name="title">link title (text that is displayed)</param>
-        /// <param name="htmlAttributes">html attributes, name, value, name, value</param>
-        /// <returns>html code</returns>
-        /// <example>
-        /// WebHelper.Link("/user/show/1", "Show user", "id", "showUser", "onclick", "return confirm('Are you shure?');");
-        /// </example>
-        public static string Link(string url, string title, params string[] htmlAttributes)
-        {
-            return BuildLink(url, title, htmlAttributes);
-        }
-
-        /// <summary>
-        /// Build a link
-        /// </summary>
-        /// <param name="url">url to go to.</param>
-        /// <param name="title">title of link (displayed text)</param>
-        /// <param name="htmlAttributes">extra html attributes.</param>
-        /// <returns>a complete link</returns>
-        public static string BuildLink(string url, string title, params string[] htmlAttributes)
-        {
-            StringBuilder sb = new StringBuilder();
-            sb.Append("<a href=\"");
-            sb.Append(url);
-            sb.Append("\"");
-            GenerateHtmlAttributes(sb, htmlAttributes);
-            sb.Append(">");
-            sb.Append(title);
-            sb.Append("</a>");
-            return sb.ToString();
-        }
-
-        /// <summary>
-        /// Build a link
-        /// </summary>
-        /// <param name="url">url to go to.</param>
-        /// <param name="title">title of link (displayed text)</param>
-        /// <param name="htmlAttributes">extra html attributes.</param>
-        /// <returns>a complete link</returns>
-        /// <param name="options">more options</param>
-        internal static string BuildLink(string url, string title, string[] htmlAttributes, params string[] options)
-        {
-            StringBuilder sb = new StringBuilder();
-            sb.Append("<a href=\"");
-            sb.Append(url);
-            sb.Append("\"");
-            GenerateHtmlAttributes(sb, htmlAttributes, options);
-            sb.Append(">");
-            sb.Append(title);
-            sb.Append("</a>");
-            return sb.ToString();
-        }
-
-        /// <summary>
-        /// Obsolete
-        /// </summary>
-        /// <param name="name">Obsolete</param>
-        /// <param name="collection">Obsolete</param>
-        /// <param name="getIdTitle">Obsolete</param>
-        /// <param name="selectedValue">Obsolete</param>
-        /// <param name="firstEmpty">Obsolete</param>
-        /// <returns>Obsolete</returns>
-       [Obsolete("Moved to FormHelper")]
-        public static string Select(string name, ICollection collection, GetIdTitle getIdTitle, object selectedValue, bool firstEmpty)
-        {
-            return FormHelper.Select(name, name, collection, getIdTitle, selectedValue, firstEmpty);
-        }
-
-        /// <summary>
-        /// Obsolete
-        /// </summary>
-        /// <param name="name">Obsolete</param>
-        /// <param name="id">Obsolete</param>
-        /// <param name="collection">Obsolete</param>
-        /// <param name="getIdTitle">Obsolete</param>
-        /// <param name="selectedValue">Obsolete</param>
-        /// <param name="firstEmpty">Obsolete</param>
-        /// <returns>Obsolete</returns>
-        [Obsolete("Moved to FormHelper")]
-        public static string Select(string name, string id, ICollection collection, GetIdTitle getIdTitle, object selectedValue, bool firstEmpty)
-        {
-            StringBuilder sb = new StringBuilder();
-            sb.AppendLine("<select name=\"" + name + "\" id=\"" + id + "\">");
-            if (firstEmpty)
-                sb.AppendLine("<option value=\"\">&nbsp;</option>");
-
-
-            foreach (object o in collection)
-            {
-                object value;
-                string title;
-                getIdTitle(o, out value, out title);
-                sb.Append("<option value=\"");
-                if (value != null)
-                    sb.Append(value);
-                sb.Append("\"");
-
-                if (value != null && value.Equals(selectedValue))
-                    sb.Append(" selected=\"selected\"");
-
-                sb.Append(">");
-
-                if (title == null)
-                    sb.AppendLine("&nbsp;</option>");
-                else
-                {
-                    sb.Append(value);
-                    sb.AppendLine("</option>");
-                }
-            }
-
-            sb.AppendLine("</select>");
-            return sb.ToString();
-        }
-
-        /// <summary>
-        /// Render errors into a UL with class "errors"
-        /// </summary>
-        /// <param name="className">class used by UL-tag.</param>
-        /// <param name="theList">items to list</param>
-        /// <returns>an unordered html list.</returns>
-        public static string List(IEnumerable<object> theList, string className)
-        {
-            if (theList.GetEnumerator().Current == null)
-                return string.Empty;
-
-            StringBuilder sb = new StringBuilder();
-            sb.Append("<ul class=\"");
-            sb.Append(className);
-            sb.AppendLine("\">");
-            foreach (string error in theList)
-            {
-                sb.Append("<li>");
-                sb.Append(error);
-                sb.AppendLine("</li>");
-            }
-
-            sb.AppendLine("</ul>");
-            return sb.ToString();
-        }
-
-
-        /// <summary>
-        /// Render errors into a UL with class "errors"
-        /// </summary>
-        /// <param name="className">class used by UL-tag.</param>
-        /// <param name="theList">items to list</param>
-        /// <returns>an unordered html list.</returns>
-        public static string List(NameValueCollection theList, string className)
-        {
-            if (theList.Count == 0)
-                return string.Empty;
-
-            StringBuilder sb = new StringBuilder();
-            sb.Append("<ul class=\"");
-            sb.Append(className);
-            sb.AppendLine("\">");
-            foreach (string key in theList.AllKeys)
-            {
-                sb.Append("<li>");
-                sb.Append(theList[key]);
-                sb.AppendLine("</li>");
-            }
-
-            sb.AppendLine("</ul>");
-            return sb.ToString();
-        }
-
-
-        /// <summary>
-        /// Render errors into a UL with class "errors"
-        /// </summary>
-        /// <param name="errors"></param>
-        /// <returns></returns>
-        public static string Errors(NameValueCollection errors)
-        {
-            return List(errors, "error");
-        }
-
-        /// <summary>
-        /// Generates a list with html attributes.
-        /// </summary>
-        /// <param name="sb">StringBuilder that the options should be added to.</param>
-        /// <param name="firstOptions">attributes set by user.</param>
-        /// <param name="secondOptions">attributes set by any of the helper classes.</param>
-        internal static void GenerateHtmlAttributes(StringBuilder sb, string[] firstOptions, string[] secondOptions)
-        {
-			if (firstOptions.Length % 2 == 1)
-				throw new ArgumentException("Options must be in pairs [key,value]", "firstOptions");
-			if (secondOptions.Length % 2 == 1)
-				throw new ArgumentException("Options must be in pairs [key,value]", "secondOptions");
-
-			Dictionary<string, List<string>> options = new Dictionary<string, List<string>>();
-			for (int i = 0; i < firstOptions.Length; i += 2)
-			{
-				if(!options.ContainsKey(firstOptions[i]))
-					options.Add(firstOptions[i], new List<string>());
-				options[firstOptions[i]].Add(firstOptions[i + 1]);
-			}
-        	for (int i = 0; i < secondOptions.Length; i += 2)
-			{
-				if (!options.ContainsKey(secondOptions[i]))
-					options.Add(secondOptions[i], new List<string>());
-				options[secondOptions[i]].Add(secondOptions[i + 1]);
-			}
-
-			foreach (KeyValuePair<string, List<string>> option in options)
-        	{
-        		sb.Append(" ");
-        		sb.Append(option.Key);
-        		sb.Append("=\"");
-				for (int i = 0; i < option.Value.Count; ++i )
-					sb.Append(i != option.Value.Count - 1 ? option.Value[i] + " " : option.Value[i]);
-
-        		sb.Append("\" ");
-        	}
-        }
-
-        /// <summary>
-        /// Generates a list with html attributes.
-        /// </summary>
-        /// <param name="sb">StringBuilder that the options should be added to.</param>
-        /// <param name="options"></param>
-        internal static void GenerateHtmlAttributes(StringBuilder sb, string[] options)
-        {
-            for (int i = 0; i < options.Length; i += 2)
-            {
-                if (string.IsNullOrEmpty(options[i]) || options[i][options[i].Length - 1] == ':')
-                    continue;
-
-                sb.Append(" ");
-                sb.Append(options[i]);
-                sb.Append("=\"");
-                sb.Append(options[i + 1]);
-                sb.Append("\"");
-            }
-        }
-    }
-
-    /// <summary>
-    /// Purpose of this class is to create a javascript toolkit independent javascript helper.
-    /// </summary>
-    public abstract class JavascriptHelperImplementation
-    {
-        /// <summary>
-        /// Generates a list with JS options.
-        /// </summary>
-        /// <param name="sb">StringBuilder that the options should be added to.</param>
-        /// <param name="options">the javascript options. name, value pairs. each string value should be escaped by YOU!</param>
-        /// <param name="startWithComma">true if we should start with a comma.</param>
-        internal virtual void GenerateOptions(StringBuilder sb, string[] options, bool startWithComma)
-        {
-            if (startWithComma)
-                sb.Append(", ");
-
-            long len = sb.Length;
-            for (int i = 0; i < options.Length; i += 2)
-            {
-                if (string.IsNullOrEmpty(options[i]) || options[i][options[i].Length - 1] != ':')
-                    continue;
-
-                sb.Append(options[i]);
-                sb.Append(" ");
-                sb.Append(options[i + 1]);
-                sb.Append(", ");
-            }
-
-            // remove the last comma.
-            if (sb.Length != len || startWithComma)
-                sb.Length -= 2;
-        }
-
-		/// <summary>
-		/// Removes any javascript parameters from an array of parameters
-		/// </summary>
-		/// <param name="options">The array of parameters to remove javascript params from</param>
-		/// <returns>An array of html parameters</returns>
-		internal virtual string[] RemoveJavascriptOptions(string[] options)
-		{
-			if(options == null)
-				throw new ArgumentNullException("options");
-			if(options.Length%2 == 1)
-				throw new ArgumentException("Options must be in pairs [key,value]", "options");
-
-			List<string> saveParams = new List<string>();
-			for(int i = 0; i < options.Length; i += 2)
-			{
-				if(!options[i].TrimEnd().EndsWith(":"))
-				{
-					saveParams.Add(options[i]);
-					saveParams.Add(options[i+1]);
-				}
-			}
-
-			return saveParams.ToArray();
-		}
-
-		/// <summary>
-		/// javascript action that should be added to the "onsubmit" event in the form tag.
-		/// </summary>
-		/// <returns></returns>
-		/// <remarks>All javascript option names should end with colon.</remarks>
-		/// <example>
-		/// <code>
-		/// JSHelper.AjaxRequest("/user/show/1", "onsuccess:", "$('userInfo').update(result);");
-		/// </code>
-		/// </example>
-		public abstract string AjaxFormOnSubmit(params string[] options);
-
-        /// <summary>
-        /// Requests a url through ajax
-        /// </summary>
-        /// <param name="url">url to fetch</param>
-        /// <param name="options">optional options in format "key, value, key, value", used in JS request object.</param>
-        /// <returns>a link tag</returns>
-        /// <remarks>All javascript option names should end with colon.</remarks>
-        /// <example>
-        /// <code>
-        /// JSHelper.AjaxRequest("/user/show/1", "onsuccess:", "$('userInfo').update(result);");
-        /// </code>
-        /// </example>
-        public abstract string AjaxRequest(string url, params string[] options);
-
-        /// <summary>
-        /// Ajax requests that updates an element with
-        /// the fetched content
-        /// </summary>
-        /// <param name="url">Url to fetch content from</param>
-        /// <param name="targetId">element to update</param>
-        /// <param name="options">optional options in format "key, value, key, value", used in JS updater object.</param>
-        /// <returns>A link tag.</returns>
-        /// <remarks>All javascript option names should end with colon.</remarks>
-        /// <example>
-        /// <code>
-        /// JSHelper.AjaxUpdater("/user/show/1", "userInfo", "onsuccess:", "alert('Successful!');");
-        /// </code>
-        /// </example>
-        public abstract string AjaxUpdater(string url, string targetId, params string[] options);
-
-        /// <summary>
-        /// A link that pop ups a Dialog (overlay div)
-        /// </summary>
-        /// <param name="url">url to contents of dialog</param>
-        /// <param name="title">link title</param>
-        /// <returns>A "a"-tag that popups a dialog when clicked</returns>
-        /// <param name="htmlAttributes">name/value of html attributes</param>
-        /// <example>
-        /// WebHelper.DialogLink("/user/show/1", "show user", "onmouseover", "alert('booh!');");
-        /// </example>
-        public abstract string DialogLink(string url, string title, params string[] htmlAttributes);
-
-        /// <summary>
-        /// Close a javascript dialog window/div.
-        /// </summary>
-        /// <returns>javascript for closing a dialog.</returns>
-        /// <see cref="DialogLink"/>
-        public abstract string CloseDialog();
-
-        /// <summary>
-        /// Creates a new modal dialog window
-        /// </summary>
-        /// <param name="url">url to open in window.</param>
-        /// <param name="title">window title (may not be supported by all js implementations)</param>
-        /// <param name="options"></param>
-        /// <returns></returns>
-        public abstract string CreateDialog(string url, string title, params string[] options);
-    }
-
-}
diff --git a/HttpServer/trunk/HttpServer/Helpers/XmlHelper.cs b/HttpServer/trunk/HttpServer/Helpers/XmlHelper.cs
deleted file mode 100644
index f67a3e8..0000000
--- a/HttpServer/trunk/HttpServer/Helpers/XmlHelper.cs
+++ /dev/null
@@ -1,62 +0,0 @@
-using System.IO;
-using System.Text;
-using System.Xml;
-using System.Xml.Serialization;
-
-namespace HttpServer.Helpers
-{
-    /// <summary>
-    /// Helpers to make XML handling easier
-    /// </summary>
-    public static class XmlHelper
-    {
-
-        /// <summary>
-        /// Serializes object to XML.
-        /// </summary>
-        /// <param name="value">object to serialize.</param>
-        /// <returns>XML</returns>
-        /// <remarks>
-        /// Removes name spaces and adds indentation
-        /// </remarks>
-        public static string Serialize(object value)
-        {
-            Check.Require(value, "value");
-
-            //These to lines are nessacary to get rid of the default namespaces.
-            XmlSerializerNamespaces ns = new XmlSerializerNamespaces();
-            ns.Add(string.Empty, string.Empty);
-
-            // removing XML declaration, the default is false
-            XmlWriterSettings xmlSettings = new XmlWriterSettings();
-            xmlSettings.Indent = true;
-            xmlSettings.IndentChars = "\t";
-            xmlSettings.OmitXmlDeclaration = true;
-
-            StringBuilder sb = new StringBuilder();
-            using (XmlWriter writer = XmlWriter.Create(sb, xmlSettings))
-            {
-                XmlSerializer serializer = new XmlSerializer(value.GetType());
-                serializer.Serialize(writer, value, ns);
-                return sb.ToString();
-            }
-        }
-
-        /// <summary>
-        /// Create an object from a XML string
-        /// </summary>
-        /// <typeparam name="T">Type of object</typeparam>
-        /// <param name="xml">XML string</param>
-        /// <returns>object</returns>
-        public static T Deserialize<T>(string xml)
-        {
-            Check.NotEmpty(xml, "xml");
-
-            XmlSerializer serializer = new XmlSerializer(typeof(T));
-            using (Stream stream = new MemoryStream(Encoding.UTF8.GetBytes(xml)))
-            {
-                return (T)serializer.Deserialize(stream);
-            }
-        }
-    }
-}
diff --git a/HttpServer/trunk/HttpServer/HttpClientContext.cs b/HttpServer/trunk/HttpServer/HttpClientContext.cs
deleted file mode 100644
index cc325d0..0000000
--- a/HttpServer/trunk/HttpServer/HttpClientContext.cs
+++ /dev/null
@@ -1,808 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.IO;
-using System.Net;
-using System.Net.Sockets;
-using System.Text;
-using System.Threading.Tasks;
-using HttpServer.Exceptions;
-using HttpServer.Parser;
-using System.Net.Security;
-using System.Security.Cryptography.X509Certificates;
-
-namespace HttpServer
-{
-    /// <summary>
-    /// Contains a connection to a browser/client.
-    /// </summary>
-    /// <remarks>
-    /// Remember to <see cref="Start"/> after you have hooked the <see cref="RequestReceived"/> event.
-    /// </remarks>
-    /// TODO: Maybe this class should be broken up into HttpClientChannel and HttpClientContext?
-    public class HttpClientContext : IHttpClientContext, IDisposable
-    {
-        const int MAXREQUESTS = 20;
-        const int MAXKEEPALIVE = 60000;
-
-        static private int basecontextID;
-
-        private readonly byte[] m_ReceiveBuffer;
-        private int m_ReceiveBytesLeft;
-        private ILogWriter _log;
-        private readonly IHttpRequestParser m_parser;
-        private readonly int m_bufferSize;
-        private HashSet<uint> requestsInServiceIDs;
-        private Socket m_sock;
-
-        public bool Available = true;
-        public bool StreamPassedOff = false;
-
-        public int MonitorStartMS = 0;
-        public int MonitorKeepaliveMS = 0;
-        public bool TriggerKeepalive = false;
-        public int TimeoutFirstLine = 70000; // 70 seconds
-        public int TimeoutRequestReceived = 180000; // 180 seconds
-
-        // The difference between this and request received is on POST more time is needed before we get the full request.
-        public int TimeoutFullRequestProcessed = 600000; // 10 minutes
-        public int m_TimeoutKeepAlive = MAXKEEPALIVE; // 400 seconds before keepalive timeout
-        // public int TimeoutKeepAlive = 120000; // 400 seconds before keepalive timeout
-
-        public int m_maxRequests = MAXREQUESTS;
-
-        public bool FirstRequestLineReceived;
-        public bool FullRequestReceived;
-        public bool FullRequestProcessed;
-
-        private bool isSendingResponse = false;
-
-        private HttpRequest m_currentRequest;
-        private HttpResponse m_currentResponse;
-
-        public int contextID { get; private set; }
-        public int TimeoutKeepAlive
-        {
-            get { return m_TimeoutKeepAlive; }
-            set
-            {
-                m_TimeoutKeepAlive = (value > MAXKEEPALIVE) ? MAXKEEPALIVE : value;
-            }
-        }
-
-        public int MAXRequests
-        {
-            get { return m_maxRequests; }
-            set
-            {
-                m_maxRequests = value > MAXREQUESTS ? MAXREQUESTS : value;
-            }
-        }
-
-        public bool IsSending()
-        {
-            return isSendingResponse;
-        }
-
-        public bool StopMonitoring;
-
-        /// <summary>
-        /// Context have been started (a new client have connected)
-        /// </summary>
-        public event EventHandler Started;
-
-        /// <summary>
-        /// Initializes a new instance of the <see cref="HttpClientContext"/> class.
-        /// </summary>
-        /// <param name="secured">true if the connection is secured (SSL/TLS)</param>
-        /// <param name="remoteEndPoint">client that connected.</param>
-        /// <param name="stream">Stream used for communication</param>
-        /// <param name="parserFactory">Used to create a <see cref="IHttpRequestParser"/>.</param>
-        /// <param name="bufferSize">Size of buffer to use when reading data. Must be at least 4096 bytes.</param>
-        /// <exception cref="SocketException">If <see cref="Socket.BeginReceive(byte[],int,int,SocketFlags,AsyncCallback,object)"/> fails</exception>
-        /// <exception cref="ArgumentException">Stream must be writable and readable.</exception>
-        public HttpClientContext(bool secured, IPEndPoint remoteEndPoint,
-                                    Stream stream, IRequestParserFactory parserFactory, Socket sock)
-        {
-            Check.Require(remoteEndPoint, "remoteEndPoint");
-            Check.NotEmpty(remoteEndPoint.Address.ToString(), "remoteEndPoint.Address");
-            Check.Require(stream, "stream");
-            Check.Require(parserFactory, "parser");
-            Check.Require(sock, "socket");
-
-            if (!stream.CanWrite || !stream.CanRead)
-                throw new ArgumentException("Stream must be writable and readable.");
-
-            RemoteAddress = remoteEndPoint.Address.ToString();
-            RemotePort = remoteEndPoint.Port.ToString();
-            _log = NullLogWriter.Instance;
-            m_parser = parserFactory.CreateParser(_log);
-            m_parser.RequestCompleted += OnRequestCompleted;
-            m_parser.RequestLineReceived += OnRequestLine;
-            m_parser.HeaderReceived += OnHeaderReceived;
-            m_parser.BodyBytesReceived += OnBodyBytesReceived;
-            m_currentRequest = new HttpRequest(this);
-            IsSecured = secured;
-            _stream = stream;
-            m_sock = sock;
-
-            m_bufferSize = 8196;
-            m_ReceiveBuffer = new byte[m_bufferSize];
-            requestsInServiceIDs = new HashSet<uint>();
-
-            SSLCommonName = "";
-            if (secured)
-            {
-                SslStream _ssl = (SslStream)_stream;
-                X509Certificate _cert1 = _ssl.RemoteCertificate;
-                if (_cert1 != null)
-                {
-                    X509Certificate2 _cert2 = new X509Certificate2(_cert1);
-                    if (_cert2 != null)
-                        SSLCommonName = _cert2.GetNameInfo(X509NameType.SimpleName, false);
-                }
-            }
-
-            ++basecontextID;
-            if (basecontextID <= 0)
-                basecontextID = 1;
-
-            contextID = basecontextID;
-        }
-
-        public bool CanSend()
-        {
-            if (contextID < 0)
-                return false;
-
-            if (Stream == null || m_sock == null || !m_sock.Connected)
-                return false;
-
-            return true;
-        }
-
-        /// <summary>
-        /// Process incoming body bytes.
-        /// </summary>
-        /// <param name="sender"><see cref="IHttpRequestParser"/></param>
-        /// <param name="e">Bytes</param>
-        protected virtual void OnBodyBytesReceived(object sender, BodyEventArgs e)
-        {
-            m_currentRequest.AddToBody(e.Buffer, e.Offset, e.Count);
-        }
-
-        /// <summary>
-        ///
-        /// </summary>
-        /// <param name="sender"></param>
-        /// <param name="e"></param>
-        protected virtual void OnHeaderReceived(object sender, HeaderEventArgs e)
-        {
-            if (string.Compare(e.Name, "expect", true) == 0 && e.Value.Contains("100-continue"))
-            {
-                lock (requestsInServiceIDs)
-                {
-                    if (requestsInServiceIDs.Count == 0)
-                        Respond("HTTP/1.1", HttpStatusCode.Continue, "Please continue.");
-                }
-            }
-            m_currentRequest.AddHeader(e.Name, e.Value);
-        }
-
-        private void OnRequestLine(object sender, RequestLineEventArgs e)
-        {
-            m_currentRequest.Method = e.HttpMethod;
-            m_currentRequest.HttpVersion = e.HttpVersion;
-            m_currentRequest.UriPath = e.UriPath;
-            m_currentRequest.AddHeader("remote_addr", RemoteAddress);
-            m_currentRequest.AddHeader("remote_port", RemotePort);
-            FirstRequestLineReceived = true;
-            TriggerKeepalive = false;
-            MonitorKeepaliveMS = 0;
-        }
-
-        /// <summary>
-        /// Start reading content.
-        /// </summary>
-        /// <remarks>
-        /// Make sure to call base.Start() if you override this method.
-        /// </remarks>
-        public virtual void Start()
-        {
-            ReceiveLoop();
-            Started?.Invoke(this, EventArgs.Empty);
-        }
-
-        /// <summary>
-        /// Clean up context.
-        /// </summary>
-        /// <remarks>
-        /// Make sure to call base.Cleanup() if you override the method.
-        /// </remarks>
-        public virtual void Cleanup()
-        {
-            if (StreamPassedOff)
-                return;
-
-            if (Stream != null)
-            {
-                Stream.Close();
-                Stream = null;
-                m_sock = null;
-            }
-
-            m_currentRequest?.Clear();
-            m_currentRequest = null;
-            m_currentResponse?.Clear();
-            m_currentResponse = null;
-            requestsInServiceIDs.Clear();
-
-            FirstRequestLineReceived = false;
-            FullRequestReceived = false;
-            FullRequestProcessed = false;
-            MonitorStartMS = 0;
-            StopMonitoring = true;
-            MonitorKeepaliveMS = 0;
-            TriggerKeepalive = false;
-
-            isSendingResponse = false;
-
-            m_ReceiveBytesLeft = 0;
-
-            contextID = -100;
-            m_parser.Clear();
-        }
-
-        public void Close()
-        {
-            Cleanup();
-        }
-
-        /// <summary>
-        /// Using SSL or other encryption method.
-        /// </summary>
-        [Obsolete("Use IsSecured instead.")]
-        public bool Secured
-        {
-            get { return IsSecured; }
-        }
-
-        /// <summary>
-        /// Using SSL or other encryption method.
-        /// </summary>
-        public bool IsSecured { get; internal set; }
-
-
-        // returns the SSL commonName of remote Certificate
-        public string SSLCommonName { get; internal set; }
-
-        /// <summary>
-        /// Specify which logger to use.
-        /// </summary>
-        public ILogWriter LogWriter
-        {
-            get { return _log; }
-            set
-            {
-                _log = value ?? NullLogWriter.Instance;
-                m_parser.LogWriter = _log;
-            }
-        }
-
-        private Stream _stream;
-
-        /// <summary>
-        /// Gets or sets the network stream.
-        /// </summary>
-        internal Stream Stream
-        {
-            get { return _stream; }
-            set { _stream = value; }
-        }
-
-        /// <summary>
-        /// Gets or sets IP address that the client connected from.
-        /// </summary>
-        internal string RemoteAddress { get; set; }
-
-        /// <summary>
-        /// Gets or sets port that the client connected from.
-        /// </summary>
-        internal string RemotePort { get; set; }
-
-        /// <summary>
-        /// Disconnect from client
-        /// </summary>
-        /// <param name="error">error to report in the <see cref="Disconnected"/> event.</param>
-        public void Disconnect(SocketError error)
-        {
-            // disconnect may not throw any exceptions
-            try
-            {
-                try
-                {
-                    if (Stream != null)
-                    {
-                        if (error == SocketError.Success)
-                            Stream.Flush();
-                        Stream.Close();
-                        Stream = null;
-                    }
-                    m_sock = null;
-                }
-                catch { }
-
-                Disconnected(this, new DisconnectedEventArgs(error));
-            }
-            catch (Exception err)
-            {
-                LogWriter.Write(this, LogPrio.Error, "Disconnect threw an exception: " + err);
-            }
-        }
-
-        private void OnReceive(IAsyncResult ar)
-        {
-            try
-            {
-                int bytesRead = 0;
-                if (Stream == null)
-                    return;
-                try
-                {
-                    bytesRead = Stream.EndRead(ar);
-                }
-                catch (NullReferenceException)
-                {
-                    Disconnect(SocketError.ConnectionReset);
-                    return;
-                }
-
-                if (bytesRead == 0)
-                {
-                    Disconnect(SocketError.ConnectionReset);
-                    return;
-                }
-
-                m_ReceiveBytesLeft += bytesRead;
-                if (m_ReceiveBytesLeft > m_ReceiveBuffer.Length)
-                {
-                    throw new BadRequestException("HTTP header Too large: " + m_ReceiveBytesLeft);
-                }
-
-                int offset = m_parser.Parse(m_ReceiveBuffer, 0, m_ReceiveBytesLeft);
-                if (Stream == null)
-                    return; // "Connection: Close" in effect.
-
-                // try again to see if we can parse another message (check parser to see if it is looking for a new message)
-                int nextOffset;
-                int nextBytesleft = m_ReceiveBytesLeft - offset;
-
-                while (offset != 0 && nextBytesleft > 0)
-                {
-                    nextOffset = m_parser.Parse(m_ReceiveBuffer, offset, nextBytesleft);
-
-                    if (Stream == null)
-                        return; // "Connection: Close" in effect.
-
-                    if (nextOffset == 0)
-                        break;
-
-                    offset = nextOffset;
-                    nextBytesleft = m_ReceiveBytesLeft - offset;
-                }
-
-                // copy unused bytes to the beginning of the array
-                if (offset > 0 && m_ReceiveBytesLeft > offset)
-                    Buffer.BlockCopy(m_ReceiveBuffer, offset, m_ReceiveBuffer, 0, m_ReceiveBytesLeft - offset);
-
-                m_ReceiveBytesLeft -= offset;
-                if (Stream != null && Stream.CanRead)
-                {
-                    if (!StreamPassedOff)
-                        Stream.BeginRead(m_ReceiveBuffer, m_ReceiveBytesLeft, m_ReceiveBuffer.Length - m_ReceiveBytesLeft, OnReceive, null);
-                    else
-                    {
-                        _log.Write(this, LogPrio.Warning, "Could not read any more from the socket.");
-                        Disconnect(SocketError.Success);
-                    }
-                }
-            }
-            catch (BadRequestException err)
-            {
-                LogWriter.Write(this, LogPrio.Warning, "Bad request, responding with it. Error: " + err);
-                try
-                {
-                    Respond("HTTP/1.0", HttpStatusCode.BadRequest, err.Message);
-                }
-                catch (Exception err2)
-                {
-                    LogWriter.Write(this, LogPrio.Fatal, "Failed to reply to a bad request. " + err2);
-                }
-                Disconnect(SocketError.NoRecovery);
-            }
-            catch (IOException err)
-            {
-                LogWriter.Write(this, LogPrio.Debug, "Failed to end receive: " + err.Message);
-                if (err.InnerException is SocketException)
-                    Disconnect((SocketError)((SocketException)err.InnerException).ErrorCode);
-                else
-                    Disconnect(SocketError.ConnectionReset);
-            }
-            catch (ObjectDisposedException err)
-            {
-                LogWriter.Write(this, LogPrio.Debug, "Failed to end receive : " + err.Message);
-                Disconnect(SocketError.NotSocket);
-            }
-            catch (NullReferenceException err)
-            {
-                LogWriter.Write(this, LogPrio.Debug, "Failed to end receive : NullRef: " + err.Message);
-                Disconnect(SocketError.NoRecovery);
-            }
-            catch (Exception err)
-            {
-                LogWriter.Write(this, LogPrio.Debug, "Failed to end receive: " + err.Message);
-                Disconnect(SocketError.NoRecovery);
-            }
-        }
-
-        private async void ReceiveLoop()
-        {
-            m_ReceiveBytesLeft = 0;
-            try
-            {
-                while(true)
-                {
-                    if (_stream == null || !_stream.CanRead)
-                        return;
-
-                    int bytesRead = await _stream.ReadAsync(m_ReceiveBuffer, m_ReceiveBytesLeft, m_ReceiveBuffer.Length - m_ReceiveBytesLeft).ConfigureAwait(false);
-
-                    if (bytesRead == 0)
-                    {
-                        Disconnect(SocketError.ConnectionReset);
-                        return;
-                    }
-
-                    m_ReceiveBytesLeft += bytesRead;
-                    if (m_ReceiveBytesLeft > m_ReceiveBuffer.Length)
-                        throw new BadRequestException("HTTP header Too large: " + m_ReceiveBytesLeft);
-
-                    int offset = m_parser.Parse(m_ReceiveBuffer, 0, m_ReceiveBytesLeft);
-                    if (Stream == null)
-                        return; // "Connection: Close" in effect.
-
-                    // try again to see if we can parse another message (check parser to see if it is looking for a new message)
-                    int nextOffset;
-                    int nextBytesleft = m_ReceiveBytesLeft - offset;
-
-                    while (offset != 0 && nextBytesleft > 0)
-                    {
-                        nextOffset = m_parser.Parse(m_ReceiveBuffer, offset, nextBytesleft);
-
-                        if (Stream == null)
-                            return; // "Connection: Close" in effect.
-
-                        if (nextOffset == 0)
-                            break;
-
-                        offset = nextOffset;
-                        nextBytesleft = m_ReceiveBytesLeft - offset;
-                    }
-
-                    // copy unused bytes to the beginning of the array
-                    if (offset > 0 && m_ReceiveBytesLeft > offset)
-                        Buffer.BlockCopy(m_ReceiveBuffer, offset, m_ReceiveBuffer, 0, m_ReceiveBytesLeft - offset);
-
-                    m_ReceiveBytesLeft -= offset;
-                    if (StreamPassedOff)
-                        return; //?
-                }
-            }
-            catch (BadRequestException err)
-            {
-                LogWriter.Write(this, LogPrio.Warning, "Bad request, responding with it. Error: " + err);
-                try
-                {
-                    Respond("HTTP/1.0", HttpStatusCode.BadRequest, err.Message);
-                }
-                catch (Exception err2)
-                {
-                    LogWriter.Write(this, LogPrio.Fatal, "Failed to reply to a bad request. " + err2);
-                }
-                Disconnect(SocketError.NoRecovery);
-            }
-            catch (IOException err)
-            {
-                LogWriter.Write(this, LogPrio.Debug, "Failed to end receive: " + err.Message);
-                if (err.InnerException is SocketException)
-                    Disconnect((SocketError)((SocketException)err.InnerException).ErrorCode);
-                else
-                    Disconnect(SocketError.ConnectionReset);
-            }
-            catch (ObjectDisposedException err)
-            {
-                LogWriter.Write(this, LogPrio.Debug, "Failed to end receive : " + err.Message);
-                Disconnect(SocketError.NotSocket);
-            }
-            catch (NullReferenceException err)
-            {
-                LogWriter.Write(this, LogPrio.Debug, "Failed to end receive : NullRef: " + err.Message);
-                Disconnect(SocketError.NoRecovery);
-            }
-            catch (Exception err)
-            {
-                LogWriter.Write(this, LogPrio.Debug, "Failed to end receive: " + err.Message);
-                Disconnect(SocketError.NoRecovery);
-            }
-        }
-
-        private void OnRequestCompleted(object source, EventArgs args)
-        {
-            TriggerKeepalive = false;
-            MonitorKeepaliveMS = 0;
-
-            // load cookies if they exist
-            RequestCookies cookies = m_currentRequest.Headers["cookie"] != null
-                ? new RequestCookies(m_currentRequest.Headers["cookie"])
-                : new RequestCookies(String.Empty);
-            m_currentRequest.SetCookies(cookies);
-
-            m_currentRequest.Body.Seek(0, SeekOrigin.Begin);
-
-            FullRequestReceived = true;
-
-            int nreqs;
-            lock (requestsInServiceIDs)
-            {
-                nreqs = requestsInServiceIDs.Count;
-                requestsInServiceIDs.Add(m_currentRequest.ID);
-                if (m_maxRequests > 0)
-                    m_maxRequests--;
-            }
-
-            // for now pipeline requests need to be serialized by opensim
-            RequestReceived(this, new RequestEventArgs(m_currentRequest));
-
-            m_currentRequest = new HttpRequest(this);
-
-            int nreqsnow;
-            lock (requestsInServiceIDs)
-            {
-                nreqsnow = requestsInServiceIDs.Count;
-            }
-            if (nreqs != nreqsnow)
-            {
-                // request was not done by us
-            }
-        }
-
-        public void ReqResponseAboutToSend(uint requestID)
-        {
-            isSendingResponse = true;
-        }
-
-        public void StartSendResponse(HttpResponse response)
-        {
-            isSendingResponse = true;
-            m_currentResponse = response;
-            ContextTimeoutManager.EnqueueSend(this, response.Priority);
-        }
-
-        public bool TrySendResponse(int bytesLimit)
-        {
-            if(m_currentResponse == null)
-                return false;
-            if (m_currentResponse.Sent)
-                return false;
-
-            if(!CanSend())
-                return false;
-
-            m_currentResponse?.SendNextAsync(bytesLimit);
-            return false;
-        }
-
-        public void ContinueSendResponse()
-        {
-            if(m_currentResponse == null)
-                return;
-            ContextTimeoutManager.EnqueueSend(this, m_currentResponse.Priority);
-        }
-
-        public void ReqResponseSent(uint requestID, ConnectionType ctype)
-        {
-            isSendingResponse = false;
-            m_currentResponse?.Clear();
-            m_currentResponse = null;
-
-            bool doclose = ctype == ConnectionType.Close;
-            lock (requestsInServiceIDs)
-            {
-                requestsInServiceIDs.Remove(requestID);
-//                doclose = doclose && requestsInServiceIDs.Count == 0;
-                if (requestsInServiceIDs.Count > 1)
-                {
-
-                }
-            }
-
-            if (doclose)
-                Disconnect(SocketError.Success);
-            else
-            {
-                lock (requestsInServiceIDs)
-                {
-                    if (requestsInServiceIDs.Count == 0)
-                        TriggerKeepalive = true;
-                }
-            }
-        }
-
-        /// <summary>
-        /// Send a response.
-        /// </summary>
-        /// <param name="httpVersion">Either <see cref="HttpHelper.HTTP10"/> or <see cref="HttpHelper.HTTP11"/></param>
-        /// <param name="statusCode">HTTP status code</param>
-        /// <param name="reason">reason for the status code.</param>
-        /// <param name="body">HTML body contents, can be null or empty.</param>
-        /// <param name="contentType">A content type to return the body as, i.e. 'text/html' or 'text/plain', defaults to 'text/html' if null or empty</param>
-        /// <exception cref="ArgumentException">If <paramref name="httpVersion"/> is invalid.</exception>
-        public void Respond(string httpVersion, HttpStatusCode statusCode, string reason, string body, string contentType)
-        {
-            if (string.IsNullOrEmpty(contentType))
-                contentType = "text/html";
-
-            if (string.IsNullOrEmpty(httpVersion) || !httpVersion.StartsWith("HTTP/1"))
-                throw new ArgumentException("Invalid HTTP version");
-
-            if (string.IsNullOrEmpty(reason))
-                reason = statusCode.ToString();
-
-            string response = string.IsNullOrEmpty(body)
-                                  ? httpVersion + " " + (int)statusCode + " " + reason + "\r\n\r\n"
-                                  : string.Format("{0} {1} {2}\r\nContent-Type: {5}\r\nContent-Length: {3}\r\n\r\n{4}",
-                                                  httpVersion, (int)statusCode, reason ?? statusCode.ToString(),
-                                                  body.Length, body, contentType);
-            byte[] buffer = Encoding.ASCII.GetBytes(response);
-
-            Send(buffer);
-            if (m_currentRequest.Connection == ConnectionType.Close)
-                FullRequestProcessed = true;
-
-        }
-
-        /// <summary>
-        /// Send a response.
-        /// </summary>
-        /// <param name="httpVersion">Either <see cref="HttpHelper.HTTP10"/> or <see cref="HttpHelper.HTTP11"/></param>
-        /// <param name="statusCode">HTTP status code</param>
-        /// <param name="reason">reason for the status code.</param>
-        public void Respond(string httpVersion, HttpStatusCode statusCode, string reason)
-        {
-            Respond(httpVersion, statusCode, reason, null, null);
-        }
-
-        /// <summary>
-        /// Send a response.
-        /// </summary>
-        /// <exception cref="ArgumentNullException"></exception>
-        public void Respond(string body)
-        {
-            if (body == null)
-                throw new ArgumentNullException("body");
-            Respond("HTTP/1.1", HttpStatusCode.OK, HttpStatusCode.OK.ToString(), body, null);
-        }
-
-        /// <summary>
-        /// send a whole buffer
-        /// </summary>
-        /// <param name="buffer">buffer to send</param>
-        /// <exception cref="ArgumentNullException"></exception>
-        public bool Send(byte[] buffer)
-        {
-            if (buffer == null)
-                throw new ArgumentNullException("buffer");
-            return Send(buffer, 0, buffer.Length);
-        }
-
-        /// <summary>
-        /// Send data using the stream
-        /// </summary>
-        /// <param name="buffer">Contains data to send</param>
-        /// <param name="offset">Start position in buffer</param>
-        /// <param name="size">number of bytes to send</param>
-        /// <exception cref="ArgumentNullException"></exception>
-        /// <exception cref="ArgumentOutOfRangeException"></exception>
-
-        private object sendLock = new object();
-
-        public bool Send(byte[] buffer, int offset, int size)
-        {
-            if (Stream == null || m_sock == null || !m_sock.Connected)
-                return false;
-
-            if (offset + size > buffer.Length)
-                throw new ArgumentOutOfRangeException("offset", offset, "offset + size is beyond end of buffer.");
-
-            bool ok = true;
-            lock (sendLock) // can't have overlaps here
-            {
-                try
-                {
-                    Stream.Write(buffer, offset, size);
-                }
-                catch
-                {
-                    ok = false;
-                }
-
-                if (!ok && Stream != null)
-                    Disconnect(SocketError.NoRecovery);
-                return ok;
-            }
-        }
-
-        public async Task<bool> SendAsync(byte[] buffer, int offset, int size)
-        {
-            if (Stream == null || m_sock == null || !m_sock.Connected)
-                return false;
-
-            if (offset + size > buffer.Length)
-                throw new ArgumentOutOfRangeException("offset", offset, "offset + size is beyond end of buffer.");
-
-            bool ok = true;
-            ContextTimeoutManager.ContextEnterActiveSend();
-            try
-            {
-                await Stream.WriteAsync(buffer, offset, size).ConfigureAwait(false);
-            }
-            catch
-            {
-                ok = false;
-            }
-
-            ContextTimeoutManager.ContextLeaveActiveSend();
-
-            if (!ok && Stream != null)
-                Disconnect(SocketError.NoRecovery);
-            return ok;
-        }
-
-        /// <summary>
-        /// The context have been disconnected.
-        /// </summary>
-        /// <remarks>
-        /// Event can be used to clean up a context, or to reuse it.
-        /// </remarks>
-        public event EventHandler<DisconnectedEventArgs> Disconnected = delegate { };
-        /// <summary>
-        /// A request have been received in the context.
-        /// </summary>
-        public event EventHandler<RequestEventArgs> RequestReceived = delegate { };
-
-        public HTTPNetworkContext GiveMeTheNetworkStreamIKnowWhatImDoing()
-        {
-            StreamPassedOff = true;
-            m_parser.RequestCompleted -= OnRequestCompleted;
-            m_parser.RequestLineReceived -= OnRequestLine;
-            m_parser.HeaderReceived -= OnHeaderReceived;
-            m_parser.BodyBytesReceived -= OnBodyBytesReceived;
-            m_parser.Clear();
-
-            return new HTTPNetworkContext() { Socket = m_sock, Stream = _stream as NetworkStream };
-        }
-
-        public void Dispose()
-        {
-            if (contextID >= 0)
-            {
-                StreamPassedOff = false;
-                Cleanup();
-            }
-        }
-
-        ~HttpClientContext()
-        {
-            Dispose();
-        }
-    }
-}
\ No newline at end of file
diff --git a/HttpServer/trunk/HttpServer/HttpContextFactory.cs b/HttpServer/trunk/HttpServer/HttpContextFactory.cs
deleted file mode 100644
index 646c6e8..0000000
--- a/HttpServer/trunk/HttpServer/HttpContextFactory.cs
+++ /dev/null
@@ -1,202 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.Collections.Concurrent;
-using System.IO;
-using System.Net;
-using System.Net.Security;
-using System.Net.Sockets;
-using System.Security.Authentication;
-using System.Security.Cryptography.X509Certificates;
-
-namespace HttpServer
-{
-    /// <summary>
-    /// Used to create and reuse contexts.
-    /// </summary>
-    public class HttpContextFactory : IHttpContextFactory
-    {
-        private readonly ConcurrentDictionary<int, HttpClientContext> m_activeContexts = new ConcurrentDictionary<int, HttpClientContext>();
-        private readonly IRequestParserFactory _factory;
-        private readonly ILogWriter _logWriter;
-
-        /// <summary>
-        /// Initializes a new instance of the <see cref="HttpContextFactory"/> class.
-        /// </summary>
-        /// <param name="writer">The writer.</param>
-        /// <param name="bufferSize">Amount of bytes to read from the incoming socket stream.</param>
-        /// <param name="factory">Used to create a request parser.</param>
-        public HttpContextFactory(ILogWriter writer, IRequestParserFactory factory)
-        {
-            _logWriter = writer;
-            _factory = factory;
-            ContextTimeoutManager.Start();
-        }
-
-        ///<summary>
-        /// True if detailed trace logs should be written.
-        ///</summary>
-        public bool UseTraceLogs { get; set; }
-
-        /// <summary>
-        /// Create a new context.
-        /// </summary>
-        /// <param name="isSecured">true if socket is running HTTPS.</param>
-        /// <param name="endPoint">Client that connected</param>
-        /// <param name="stream">Network/SSL stream.</param>
-        /// <returns>A context.</returns>
-        protected HttpClientContext CreateContext(bool isSecured, IPEndPoint endPoint, Stream stream, Socket sock)
-        {
-            HttpClientContext context;
-
-            context = CreateNewContext(isSecured, endPoint, stream, sock);
-            context.Disconnected += OnFreeContext;
-            context.RequestReceived += OnRequestReceived;
-
-            context.Stream = stream;
-            context.IsSecured = isSecured;
-            context.RemotePort = endPoint.Port.ToString();
-            context.RemoteAddress = endPoint.Address.ToString();
-            ContextTimeoutManager.StartMonitoringContext(context);
-            m_activeContexts[context.contextID] = context;
-            context.Start();
-            return context;
-        }
-
-        /// <summary>
-        /// Create a new context.
-        /// </summary>
-        /// <param name="isSecured">true if HTTPS is used.</param>
-        /// <param name="endPoint">Remote client</param>
-        /// <param name="stream">Network stream, <see cref="HttpClientContext"/></param>
-        /// <returns>A new context (always).</returns>
-        protected virtual HttpClientContext CreateNewContext(bool isSecured, IPEndPoint endPoint, Stream stream, Socket sock)
-        {
-            return new HttpClientContext(isSecured, endPoint, stream, _factory, sock);
-        }
-
-        private void OnRequestReceived(object sender, RequestEventArgs e)
-        {
-            RequestReceived(sender, e);
-        }
-
-        private void OnFreeContext(object sender, DisconnectedEventArgs e)
-        {
-            var imp = sender as HttpClientContext;
-            if (imp == null || imp.contextID < 0)
-                return;
-
-            m_activeContexts.TryRemove(imp.contextID, out HttpClientContext dummy);
-
-            imp.Close();
-        }
-
-
-        #region IHttpContextFactory Members
-
-        /// <summary>
-        /// Create a secure <see cref="IHttpClientContext"/>.
-        /// </summary>
-        /// <param name="socket">Client socket (accepted by the <see cref="HttpListener"/>).</param>
-        /// <param name="certificate">HTTPS certificate to use.</param>
-        /// <param name="protocol">Kind of HTTPS protocol. Usually TLS or SSL.</param>
-        /// <returns>
-        /// A created <see cref="IHttpClientContext"/>.
-        /// </returns>
-        public IHttpClientContext CreateSecureContext(Socket socket, X509Certificate certificate,
-             SslProtocols protocol, RemoteCertificateValidationCallback _clientCallback = null)
-        {
-            socket.NoDelay = true;
-            var networkStream = new NetworkStream(socket, true);
-            var remoteEndPoint = (IPEndPoint)socket.RemoteEndPoint;
-
-            SslStream sslStream = null;
-            try
-            {
-                if (_clientCallback == null)
-                {
-                    sslStream = new SslStream(networkStream, false);
-                    sslStream.AuthenticateAsServer(certificate, false, protocol, false);
-                }
-                else
-                {
-                    sslStream = new SslStream(networkStream, false,
-                            new RemoteCertificateValidationCallback(_clientCallback));
-                    sslStream.AuthenticateAsServer(certificate, true, protocol, false);
-                }
-            }
-            catch (Exception e)
-            {
-                if (UseTraceLogs)
-                    _logWriter.Write(this, LogPrio.Trace, e.Message);
-                sslStream.Close();
-                return null;
-            }
-
-            return CreateContext(true, remoteEndPoint, sslStream, socket);
-        }
-
-
-        /// <summary>
-        /// A request have been received from one of the contexts.
-        /// </summary>
-        public event EventHandler<RequestEventArgs> RequestReceived = delegate { };
-
-        /// <summary>
-        /// Creates a <see cref="IHttpClientContext"/> that handles a connected client.
-        /// </summary>
-        /// <param name="socket">Client socket (accepted by the <see cref="HttpListener"/>).</param>
-        /// <returns>
-        /// A creates <see cref="IHttpClientContext"/>.
-        /// </returns>
-        public IHttpClientContext CreateContext(Socket socket)
-        {
-            socket.NoDelay = true;
-            var networkStream = new NetworkStream(socket, true);
-            var remoteEndPoint = (IPEndPoint)socket.RemoteEndPoint;
-            return CreateContext(false, remoteEndPoint, networkStream, socket);
-        }
-
-        #endregion
-
-        /// <summary>
-        /// Server is shutting down so shut down the factory
-        /// </summary>
-        public void Shutdown()
-        {
-            ContextTimeoutManager.Stop();
-        }
-    }
-
-    /// <summary>
-    /// Used to create <see cref="IHttpClientContext"/>es.
-    /// </summary>
-    public interface IHttpContextFactory
-    {
-        /// <summary>
-        /// Creates a <see cref="IHttpClientContext"/> that handles a connected client.
-        /// </summary>
-        /// <param name="socket">Client socket (accepted by the <see cref="HttpListener"/>).</param>
-        /// <returns>A creates <see cref="IHttpClientContext"/>.</returns>
-        IHttpClientContext CreateContext(Socket socket);
-
-        /// <summary>
-        /// Create a secure <see cref="IHttpClientContext"/>.
-        /// </summary>
-        /// <param name="socket">Client socket (accepted by the <see cref="HttpListener"/>).</param>
-        /// <param name="certificate">HTTPS certificate to use.</param>
-        /// <param name="protocol">Kind of HTTPS protocol. Usually TLS or SSL.</param>
-        /// <returns>A created <see cref="IHttpClientContext"/>.</returns>
-        IHttpClientContext CreateSecureContext(Socket socket, X509Certificate certificate,
-             SslProtocols protocol, RemoteCertificateValidationCallback _clientCallback = null);
-
-        /// <summary>
-        /// A request have been received from one of the contexts.
-        /// </summary>
-        event EventHandler<RequestEventArgs> RequestReceived;
-
-        /// <summary>
-        /// Server is shutting down so shut down the factory
-        /// </summary>
-        void Shutdown();
-    }
-}
\ No newline at end of file
diff --git a/HttpServer/trunk/HttpServer/HttpFile.cs b/HttpServer/trunk/HttpServer/HttpFile.cs
deleted file mode 100644
index 7b781f8..0000000
--- a/HttpServer/trunk/HttpServer/HttpFile.cs
+++ /dev/null
@@ -1,141 +0,0 @@
-using System;
-using System.IO;
-
-namespace HttpServer
-{
-	/// <summary>
-	/// Container class for posted files
-	/// </summary>
-	public class HttpFile : IDisposable
-	{
-		private string _name;
-		private string _filename;
-		private string _uploadFilename;
-		private string _contentType;
-		private bool _disposed;
-
-		/// <summary>
-		/// Creates a container for a posted file
-		/// </summary>
-		/// <param name="name">The identifier of the post field</param>
-		/// <param name="filename">The file path</param>
-		/// <param name="contentType">The content type of the file</param>
-		/// <param name="uploadFilename">The name of the file uploaded</param>
-		/// <exception cref="ArgumentNullException">If any parameter is null or empty</exception>
-		public HttpFile(string name, string filename, string contentType, string uploadFilename)
-		{
-			if(string.IsNullOrEmpty(name))
-				throw new ArgumentNullException("name");
-			if (string.IsNullOrEmpty(filename))
-				throw new ArgumentNullException("filename");
-			if(string.IsNullOrEmpty(contentType))
-				throw new ArgumentNullException("contentType");
-			if(string.IsNullOrEmpty(uploadFilename))
-				throw new ArgumentNullException("uploadFilename");
-
-			_name = name;
-			_filename = filename;
-			_contentType = contentType;
-			_uploadFilename = uploadFilename;
-		}
-
-		/// <summary>
-		/// Creates a container for a posted file <see cref="HttpFile(string, string, string, string)"/>
-		/// </summary>
-		/// <exception cref="ArgumentNullException">If any parameter is null or empty</exception>
-		public HttpFile(string name, string filename, string contentType) : this(name, filename, contentType, "Undefined")
-		{
-		}
-
-		/// <summary>Destructor disposing the file</summary>
-		~HttpFile()
-		{
-			Dispose(false);
-		}
-
-		/// <summary>
-		/// The name/id of the file
-		/// </summary>
-		public string Name
-		{
-			get
-			{
-				AssertDisposed();
-				return _name;
-			}
-			set { _name = value; }
-		}
-
-		/// <summary>
-		/// The full file path
-		/// </summary>
-		public string Filename
-		{
-			get
-			{
-				AssertDisposed();
-				return _filename;
-			}
-			set { _filename = value; }
-		}
-
-		/// <summary>
-		/// The name of the uploaded file
-		/// </summary>
-		public string UploadFilename
-		{
-			get { return _uploadFilename; }
-			set { _uploadFilename = value; }
-		}
-
-		/// <summary>
-		/// The type of file
-		/// </summary>
-		public string ContentType
-		{
-			get
-			{
-				AssertDisposed();
-				return _contentType;
-			}
-			set { _contentType = value; }
-		}
-
-		private void AssertDisposed()
-		{
-			if(_disposed)
-				throw new ObjectDisposedException("Object has been disposed");
-		}
-
-		/// <summary>
-		/// Deletes the temporary file
-		/// </summary>
-		/// <param name="disposing">True if manual dispose</param>
-		protected void Dispose(bool disposing)
-		{
-			if (File.Exists(_filename))
-			{
-				try
-				{
-					File.Delete(_filename);
-				}
-				catch(Exception err)
-				{
-					// todo, write logging code
-					throw new Exception("Error deleting temporary file!", err);
-				}
-			}
-
-			_disposed = true;
-		}
-
-		/// <summary>
-		/// Disposing interface, cleans up managed resources (the temporary file) and suppresses finalization
-		/// </summary>
-		public void Dispose()
-		{
-			Dispose(true);
-			GC.SuppressFinalize(this);
-		}
-	}
-}
diff --git a/HttpServer/trunk/HttpServer/HttpForm.cs b/HttpServer/trunk/HttpServer/HttpForm.cs
deleted file mode 100644
index 69744e8..0000000
--- a/HttpServer/trunk/HttpServer/HttpForm.cs
+++ /dev/null
@@ -1,137 +0,0 @@
-using System;
-using System.Collections.Generic;
-
-namespace HttpServer
-{
-	/// <summary>Container for posted form data</summary>
-	public class HttpForm : HttpInput
-	{
-		/// <summary>Instance to help mark a non-initialized form</summary>
-		public static readonly HttpForm EmptyForm = new HttpForm("EmptyForm", true);
-
-		private readonly Dictionary<string, HttpFile> _files = new Dictionary<string, HttpFile>();
-
-		/// <summary>Initializes a form container with the specified name</summary>
-		public HttpForm() : base("form")
-        {
-        }
-
-		/// <summary>
-		/// Makes a deep copy of the input
-		/// </summary>
-		/// <param name="input">The input to copy</param>
-		public HttpForm(HttpInput input) : base(input)
-		{
-		}
-
-        private HttpForm(string name, bool ignoreChanges) : base(name, ignoreChanges)
-        {
-        }
-
-		/// <summary>
-		/// Adds a file to the collection of posted files
-		/// </summary>
-		/// <param name="file">The file to add</param>
-		/// <exception cref="ArgumentException">If the file is already added</exception>
-		/// <exception cref="ArgumentNullException">If file is null</exception>
-		/// <exception cref="InvalidOperationException">If the instance is HttpForm.EmptyForm which cannot be modified</exception>
-		public void AddFile(HttpFile file)
-		{
-			if (_ignoreChanges)
-				throw new InvalidOperationException("Cannot add files to instance HttpForm.EmptyForm.");
-			if(file == null)
-				throw new ArgumentNullException("file");
-
-            lock (_files)
-            {
-                if(_files.ContainsKey(file.Name))
-                    throw new ArgumentException("File named '" + file.Name + "' already exists!");
-
-                _files.Add(file.Name, file);
-            }
-		}
-
-		/// <summary>
-		/// Checks if the form contains a specified file
-		/// </summary>
-		/// <param name="name">Field name of the file parameter</param>
-		/// <returns>True if the file exists</returns>
-		/// <exception cref="InvalidOperationException">If the instance is HttpForm.EmptyForm which cannot be modified</exception>
-		public bool ContainsFile(string name)
-		{
-			if (_ignoreChanges)
-				throw new InvalidOperationException("Cannot request information from instance HttpForm.EmptyForm.");
-			if (string.IsNullOrEmpty(name))
-				throw new ArgumentNullException("name");
-
-			bool res;
-            lock (_files)
-            {
-                res = _files.ContainsKey(name);
-            }
-            return res;
-		}
-
-		/// <summary>
-		/// Retrieves a file held by by the form
-		/// </summary>
-		/// <param name="name">The identifier of the file</param>
-		/// <returns>The requested file or null if the file was not found</returns>
-		/// <exception cref="ArgumentNullException">If name is null or empty</exception>
-		/// <exception cref="InvalidOperationException">If the instance is HttpForm.EmptyForm which cannot be modified</exception>
-		public HttpFile GetFile(string name)
-		{
-			if (_ignoreChanges)
-				throw new InvalidOperationException("Cannot retrieve files from instance HttpForm.EmptyForm.");
-			if(string.IsNullOrEmpty(name))
-				throw new ArgumentNullException("name");
-
-            HttpFile res;
-
-            lock (_files)
-            {
-                if(!_files.ContainsKey(name))
-                    return null;
-				res = _files[name];
-            }
-			return res;
-		}
-
-        /// <summary>
-        /// Retrieves the number of files added to the <see cref="HttpForm"/>
-        /// </summary>
-        /// <returns>0 if no files are added</returns>
-        public IList<HttpFile> Files
-        {
-            get
-            {
-                lock (_files)
-                {
-                    if (_files.Count == 0)
-                        return EmptyFileCollection;
-
-                    List<HttpFile> files = new List<HttpFile>();
-                    foreach (HttpFile file in _files.Values)
-                        files.Add(file);
-                    return files.AsReadOnly();
-                }
-            }
-        }
-
-        private static readonly IList<HttpFile> EmptyFileCollection = new List<HttpFile>().AsReadOnly();
-
-		/// <summary>Disposes all held HttpFile's and resets values</summary>
-		public override void Clear()
-		{
-			base.Clear();
-
-            lock (_files)
-            {
-                foreach (KeyValuePair<string, HttpFile> pair in _files)
-                    pair.Value.Dispose();
-
-                _files.Clear();
-            }
-		}
-	}
-}
diff --git a/HttpServer/trunk/HttpServer/HttpHelper.cs b/HttpServer/trunk/HttpServer/HttpHelper.cs
deleted file mode 100644
index c3e0ff7..0000000
--- a/HttpServer/trunk/HttpServer/HttpHelper.cs
+++ /dev/null
@@ -1,129 +0,0 @@
-using System;
-using System.Web;
-
-namespace HttpServer
-{
-    /// <summary>
-    /// Generic helper functions for HTTP
-    /// </summary>
-    public static class HttpHelper
-    {
-        /// <summary>
-        /// Version string for HTTP v1.0
-        /// </summary>
-        public const string HTTP10 = "HTTP/1.0";
-
-        /// <summary>
-        /// Version string for HTTP v1.1
-        /// </summary>
-        public const string HTTP11 = "HTTP/1.1";
-
-        /// <summary>
-        /// An empty URI
-        /// </summary>
-        public static readonly Uri EmptyUri = new Uri("http://localhost/");
-
-        /// <summary>
-        /// Parses a query string.
-        /// </summary>
-        /// <param name="queryString">Query string (URI encoded)</param>
-        /// <returns>A <see cref="HttpInput"/> object if successful; otherwise <see cref="HttpInput.Empty"/></returns>
-        /// <exception cref="ArgumentNullException"><c>queryString</c> is null.</exception>
-		/// <exception cref="FormatException">If string cannot be parsed.</exception>
-        public static HttpInput ParseQueryString(string queryString)
-        {
-            if (queryString == null)
-                throw new ArgumentNullException("queryString");
-            if (queryString == string.Empty)
-                return HttpInput.Empty;
-
-            HttpInput input = new HttpInput("QueryString");
-
-            queryString = queryString.TrimStart('?', '&');
-
-            // a simple value.
-            if (queryString.IndexOf("&") == -1 && !queryString.Contains("%3d") && !queryString.Contains("%3D") && !queryString.Contains("="))
-            {
-                input.Add(string.Empty, queryString);
-                return input;
-            }
-
-            int state = 0;
-            int startpos = 0;
-            string name = null;
-            for (int i = 0; i < queryString.Length; ++i)
-            {
-                int newIndexPos;
-                if (state == 0 && IsEqual(queryString, ref i, out newIndexPos))
-                {
-                    name = queryString.Substring(startpos, i - startpos);
-                    i = newIndexPos;
-                    startpos = i + 1;
-                    ++state;
-                }
-                else if (state == 1 && IsAmp(queryString, ref i, out newIndexPos))
-                {
-                    Add(input, name, queryString.Substring(startpos, i - startpos));
-                    i = newIndexPos;
-                    startpos = i + 1;
-                    state = 0;
-                    name = null;
-                }
-            }
-
-            if (state == 0 && !input.GetEnumerator().MoveNext())
-                throw new FormatException("Not a valid query string: " + queryString);
-
-            if (startpos <= queryString.Length)
-            {
-                if (name != null)
-                    Add(input, name, queryString.Substring(startpos, queryString.Length - startpos));
-                else
-                    Add(input, string.Empty, queryString.Substring(startpos, queryString.Length - startpos));
-            }
-
-
-            return input;
-        }
-
-        private static bool IsEqual(string queryStr, ref int index, out int outIndex)
-        {
-            outIndex = index;
-            if (queryStr[index] == '=')
-                return true;
-            if (queryStr[index] == '%' && queryStr.Length > index + 2 && queryStr[index + 1] == '3'
-                && (queryStr[index + 2] == 'd' || queryStr[index + 2] == 'D'))
-            {
-                outIndex += 2;
-                return true;
-            }
-            return false;
-        }
-
-        private static bool IsAmp(string queryStr, ref int index, out int outIndex)
-        {
-            outIndex = index;
-            if (queryStr[index] == '%' && queryStr.Length > index + 2 && queryStr[index + 1] == '2' &&
-                queryStr[index + 2] == '6')
-                outIndex += 2;
-            else if (queryStr[index] == '&')
-            {
-                if (queryStr.Length > index + 4
-                    && (queryStr[index + 1] == 'a' || queryStr[index + 1] == 'A')
-                    && (queryStr[index + 2] == 'm' || queryStr[index + 2] == 'M')
-                    && (queryStr[index + 3] == 'p' || queryStr[index + 3] == 'P')
-                    && queryStr[index + 4] == ';')
-                    outIndex += 4;
-            }
-            else
-                return false;
-
-            return true;
-        }
-
-        private static void Add(IHttpInput input, string name, string value)
-        {
-            input.Add(HttpUtility.UrlDecode(name), HttpUtility.UrlDecode(value));
-        }
-    }
-}
diff --git a/HttpServer/trunk/HttpServer/HttpInput.cs b/HttpServer/trunk/HttpServer/HttpInput.cs
deleted file mode 100644
index 11dcc69..0000000
--- a/HttpServer/trunk/HttpServer/HttpInput.cs
+++ /dev/null
@@ -1,262 +0,0 @@
-using System;
-using System.Collections;
-using System.Collections.Generic;
-
-namespace HttpServer
-{
-    /// <summary>
-    /// Contains some kind of input from the browser/client.
-    /// can be QueryString, form data or any other request body content.
-    /// </summary>
-    public class HttpInput : IHttpInput
-    {
-		/// <summary> Representation of a non-initialized class instance </summary>
-        public static readonly HttpInput Empty = new HttpInput("Empty", true);
-        private readonly IDictionary<string, HttpInputItem> _items = new Dictionary<string, HttpInputItem>();
-        private string _name;
-
-		/// <summary> Variable telling the class that it is non-initialized <see cref="Empty"/> </summary>
-        protected readonly bool _ignoreChanges;
-
-        /// <summary>
-        /// Initializes a new instance of the <see cref="HttpInput"/> class.
-        /// </summary>
-        /// <param name="name">form name.</param>
-        public HttpInput(string name)
-        {
-        	Name = name;
-        }
-
-        /// <summary>
-        /// Initializes a new instance of the <see cref="HttpInput"/> class.
-        /// </summary>
-        /// <param name="name">form name.</param>
-        /// <param name="ignoreChanges">if set to <c>true</c> all changes will be ignored. </param>
-        /// <remarks>this constructor should only be used by Empty</remarks>
-		protected HttpInput(string name, bool ignoreChanges)
-        {
-            _name = name;
-            _ignoreChanges = ignoreChanges;
-        }
-
-		/// <summary>Creates a deep copy of the HttpInput class</summary>
-		/// <param name="input">The object to copy</param>
-		/// <remarks>The function makes a deep copy of quite a lot which can be slow</remarks>
-		protected HttpInput(HttpInput input)
-		{
-            foreach (HttpInputItem item in input)
-                _items.Add(item.Name, new HttpInputItem(item));
-
-			_name = input._name;
-			_ignoreChanges = input._ignoreChanges;
-		}
-
-        /// <summary>
-        /// Form name as lower case
-        /// </summary>
-        public string Name
-        {
-            get { return _name; }
-            set { _name = value; }
-        }
-
-        /// <summary>
-        /// Add a new element. Form array elements are parsed
-        /// and added in a correct hierarchy.
-        /// </summary>
-        /// <param name="name">Name is converted to lower case.</param>
-        /// <param name="value"></param>
-        /// <exception cref="ArgumentNullException"><c>name</c> is null.</exception>
-        /// <exception cref="InvalidOperationException">Cannot add stuff to <see cref="HttpInput.Empty"/>.</exception>
-        public void Add(string name, string value)
-        {
-            if (name == null)
-                throw new ArgumentNullException("name");
-            if (_ignoreChanges)
-                throw new InvalidOperationException("Cannot add stuff to HttpInput.Empty.");
-
-            // Check if it's a sub item.
-            // we can have multiple levels of sub items as in user[extension[id]] => user -> extension -> id
-            int pos = name.IndexOf('[');
-            if (pos != -1)
-            {
-                string name1 = name.Substring(0, pos);
-                string name2 = ExtractOne(name);
-                if (!_items.ContainsKey(name1))
-                    _items.Add(name1, new HttpInputItem(name1, null));
-                _items[name1].Add(name2, value);
-            }
-            else
-            {
-                if (_items.ContainsKey(name))
-                    _items[name].Add(value);
-                else
-                    _items.Add(name, new HttpInputItem(name, value));
-            }
-        }
-
-        /// <summary>
-        /// Get a form item.
-        /// </summary>
-        /// <param name="name"></param>
-        /// <returns>Returns <see cref="HttpInputItem.Empty"/> if item was not found.</returns>
-        public HttpInputItem this[string name]
-        {
-            get {
-                return _items.ContainsKey(name) ? _items[name] : HttpInputItem.Empty;
-            }
-        }
-
-		/// <summary>
-		/// Returns true if the class contains a <see cref="HttpInput"/> with the corresponding name.
-		/// </summary>
-		/// <param name="name">The field/query string name</param>
-		/// <returns>True if the value exists</returns>
-        public bool Contains(string name)
-        {
-            return _items.ContainsKey(name) && _items[name].Value != null;
-        }
-
-        /// <summary>
-        /// Parses an item and returns it.
-        /// This function is primarily used to parse array items as in user[name].
-        /// </summary>
-        /// <param name="name"></param>
-        /// <param name="value"></param>
-        /// <returns></returns>
-        public static HttpInputItem ParseItem(string name, string value)
-        {
-            HttpInputItem item;
-
-            // Check if it's a sub item.
-            // we can have multiple levels of sub items as in user[extension[id]]] => user -> extension -> id
-            int pos = name.IndexOf('[');
-            if (pos != -1)
-            {
-                string name1 = name.Substring(0, pos);
-                string name2 = ExtractOne(name);
-                item = new HttpInputItem(name1, null);
-                item.Add(name2, value);
-            }
-            else
-                item = new HttpInputItem(name, value);
-
-            return item;
-        }
-
-		/// <summary> Outputs the instance representing all its values joined together </summary>
-		/// <returns></returns>
-        public override string ToString()
-        {
-            string temp = string.Empty;
-            foreach (KeyValuePair<string, HttpInputItem> item in _items)
-                temp += item.Value.ToString(Name);
-            return temp;
-        }
-
-        /// <summary>Returns all items as an unescaped query string.</summary>
-        /// <returns></returns>
-        public string ToString(bool asQueryString)
-        {
-            if (!asQueryString)
-                return ToString();
-
-            string temp = string.Empty;
-            foreach (KeyValuePair<string, HttpInputItem> item in _items)
-                temp += item.Value.ToString(null, true) + '&';
-
-            return temp.Length > 0 ? temp.Substring(0, temp.Length - 1) : string.Empty;
-        }
-
-        /// <summary>
-        /// Extracts one parameter from an array
-        /// </summary>
-        /// <param name="value">Containing the string array</param>
-        /// <returns>All but the first value</returns>
-        /// <example>
-        /// string test1 = ExtractOne("system[user][extension][id]");
-        /// string test2 = ExtractOne(test1);
-        /// string test3 = ExtractOne(test2);
-        /// // test1 = user[extension][id]
-        /// // test2 = extension[id]
-        /// // test3 = id
-        /// </example>
-        public static string ExtractOne(string value)
-        {
-            int pos = value.IndexOf('[');
-            if (pos != -1)
-            {
-                ++pos;
-                int gotMore = value.IndexOf('[', pos + 1);
-                if (gotMore != -1)
-                    value = value.Substring(pos, gotMore - pos - 1) + value.Substring(gotMore);
-                else
-                    value = value.Substring(pos, value.Length - pos - 1);
-            }
-            return value;
-        }
-
-		/// <summary>Resets all data contained by class</summary>
-		virtual public void Clear()
-		{
-			_name = string.Empty;
-			_items.Clear();
-		}
-
-        ///<summary>
-        ///Returns an enumerator that iterates through the collection.
-        ///</summary>
-        ///
-        ///<returns>
-        ///A <see cref="T:System.Collections.Generic.IEnumerator`1"></see> that can be used to iterate through the collection.
-        ///</returns>
-        ///<filterpriority>1</filterpriority>
-        IEnumerator<HttpInputItem> IEnumerable<HttpInputItem>.GetEnumerator()
-        {
-            return _items.Values.GetEnumerator();
-        }
-
-
-        ///<summary>
-        ///Returns an enumerator that iterates through a collection.
-        ///</summary>
-        ///
-        ///<returns>
-        ///An <see cref="T:System.Collections.IEnumerator"></see> object that can be used to iterate through the collection.
-        ///</returns>
-        ///<filterpriority>2</filterpriority>
-        public IEnumerator GetEnumerator()
-        {
-            return _items.Values.GetEnumerator();
-        }
-
-    }
-
-	/// <summary>
-	/// Base class for request data containers
-	/// </summary>
-    public interface IHttpInput : IEnumerable<HttpInputItem>
-    {
-		/// <summary>
-		/// Adds a parameter mapped to the presented name
-		/// </summary>
-		/// <param name="name">The name to map the parameter to</param>
-		/// <param name="value">The parameter value</param>
-        void Add(string name, string value);
-
-		/// <summary>
-		/// Returns a request parameter
-		/// </summary>
-		/// <param name="name">The name associated with the parameter</param>
-		/// <returns></returns>
-        HttpInputItem this[string name]
-        { get; }
-
-		/// <summary>
-		/// Returns true if the container contains the requested parameter
-		/// </summary>
-		/// <param name="name">Parameter id</param>
-		/// <returns>True if parameter exists</returns>
-        bool Contains(string name);
-    }
-}
diff --git a/HttpServer/trunk/HttpServer/HttpInputItem.cs b/HttpServer/trunk/HttpServer/HttpInputItem.cs
deleted file mode 100644
index db48ead..0000000
--- a/HttpServer/trunk/HttpServer/HttpInputItem.cs
+++ /dev/null
@@ -1,309 +0,0 @@
-using System;
-using System.Collections;
-using System.Collections.Generic;
-
-namespace HttpServer
-{
-    /// <summary>
-    /// represents a HTTP input item. Each item can have multiple sub items, a sub item
-    /// is made in a HTML form by using square brackets
-    /// </summary>
-    /// <example>
-    ///   // <input type="text" name="user[FirstName]" value="jonas" /> becomes:
-    ///   Console.WriteLine("Value: {0}", form["user"]["FirstName"].Value);
-    /// </example>
-    /// <remarks>
-    /// All names in a form SHOULD be in lowercase.
-    /// </remarks>
-    public class HttpInputItem : IHttpInput
-    {
-		/// <summary> Representation of a non-initialized <see cref="HttpInputItem"/>.</summary>
-        public static readonly HttpInputItem Empty = new HttpInputItem(string.Empty, true);
-        private readonly IDictionary<string, HttpInputItem> _items = new Dictionary<string, HttpInputItem>();
-        private readonly List<string> _values = new List<string>();
-        private string _name;
-        private readonly bool _ignoreChanges;
-
-		/// <summary>
-		/// Initializes an input item setting its name/identifier and value
-		/// </summary>
-		/// <param name="name">Parameter name/id</param>
-		/// <param name="value">Parameter value</param>
-        public HttpInputItem(string name, string value)
-        {
-            Name = name;
-            Add(value);
-        }
-
-        private HttpInputItem(string name, bool ignore)
-        {
-            Name = name;
-            _ignoreChanges = ignore;
-        }
-
-		/// <summary>Creates a deep copy of the item specified</summary>
-		/// <param name="item">The item to copy</param>
-		/// <remarks>The function makes a deep copy of quite a lot which can be slow</remarks>
-		public HttpInputItem(HttpInputItem item)
-		{
-			foreach (KeyValuePair<string, HttpInputItem> pair in item._items)
-				_items.Add(pair.Key, pair.Value);
-
-			foreach (string value in item._values)
-				_values.Add(value);
-
-			_ignoreChanges = item._ignoreChanges;
-			_name = item.Name;
-		}
-
-        /// <summary>
-        /// Number of values
-        /// </summary>
-        public int Count
-        {
-            get { return _values.Count; }
-        }
-
-        /// <summary>
-        /// Get a sub item
-        /// </summary>
-        /// <param name="name">name in lower case.</param>
-        /// <returns><see cref="HttpInputItem.Empty"/> if no item was found.</returns>
-        public HttpInputItem this[string name]
-        {
-            get {
-                return _items.ContainsKey(name) ? _items[name] : Empty;
-            }
-        }
-
-        /// <summary>
-        /// Name of item (in lower case).
-        /// </summary>
-        public string Name
-        {
-            get { return _name; }
-            set { _name = value; }
-        }
-
-        /// <summary>
-        /// Returns the first value, or null if no value exist.
-        /// </summary>
-        public string Value
-        {
-            get {
-                return _values.Count == 0 ? null : _values[0];
-            }
-            set
-            {
-                if (_values.Count == 0)
-                    _values.Add(value);
-                else
-                    _values[0] = value;
-            }
-        }
-
-        /// <summary>
-        /// Returns the last value, or null if no value exist.
-        /// </summary>
-        public string LastValue
-        {
-            get
-            {
-                return _values.Count == 0 ? null : _values[_values.Count - 1];
-            }
-        }
-
-        /// <summary>
-        /// Returns the list with values.
-        /// </summary>
-        public IList<string> Values
-        {
-            get { return _values.AsReadOnly(); }
-        }
-
-
-        /// <summary>
-        /// Add another value to this item
-        /// </summary>
-        /// <param name="value">Value to add.</param>
-        /// <exception cref="InvalidOperationException">Cannot add stuff to <see cref="HttpInput.Empty"/>.</exception>
-        public void Add(string value)
-        {
-            if (value == null)
-                return;
-            if (_ignoreChanges)
-                throw new InvalidOperationException("Cannot add stuff to HttpInput.Empty.");
-
-            _values.Add(value);
-        }
-
-        /// <summary>
-        /// checks if a sub-item exists (and has a value).
-        /// </summary>
-        /// <param name="name">name in lower case</param>
-        /// <returns>true if the sub-item exists and has a value; otherwise false.</returns>
-        public bool Contains(string name)
-        {
-            return _items.ContainsKey(name) && _items[name].Value != null;
-        }
-
-		/// <summary> Returns a formatted representation of the instance with the values of all contained parameters </summary>
-        public override string ToString()
-        {
-            return ToString(string.Empty);
-        }
-
-		/// <summary>
-		/// Outputs the string in a formatted manner
-		/// </summary>
-		/// <param name="prefix">A prefix to append, used internally</param>
-        /// <param name="asQuerySting">produce a query string</param>
-        public string ToString(string prefix, bool asQuerySting)
-        {
-            string name;
-            if (string.IsNullOrEmpty(prefix))
-                name = Name;
-            else
-                name = prefix + "[" + Name + "]";
-
-            if (asQuerySting)
-            {
-                string temp;
-                if (_values.Count == 0 && _items.Count > 0)
-                    temp = string.Empty;
-                else
-                    temp = name;
-
-                if (_values.Count > 0)
-                {
-                    temp += '=';
-                    foreach (string value in _values)
-                        temp += value + ',';
-                    temp = temp.Remove(temp.Length - 1, 1);
-                }
-
-                foreach (KeyValuePair<string, HttpInputItem> item in _items)
-                    temp += item.Value.ToString(name, true) + '&';
-
-                return _items.Count > 0 ? temp.Substring(0, temp.Length - 1) : temp;
-            }
-            else
-            {
-                string temp = name;
-                if (_values.Count > 0)
-                {
-                    temp += " = ";
-                    foreach (string value in _values)
-                        temp += value + ", ";
-                    temp = temp.Remove(temp.Length - 2, 2);
-                }
-                temp += Environment.NewLine;
-
-                foreach (KeyValuePair<string, HttpInputItem> item in _items)
-                    temp += item.Value.ToString(name, false);
-                return temp;
-            }
-        }
-
-        #region IHttpInput Members
-
-        /// <summary>
-        ///
-        /// </summary>
-        /// <param name="name">name in lower case</param>
-        /// <returns></returns>
-        HttpInputItem IHttpInput.this[string name]
-        {
-            get
-            {
-                return _items.ContainsKey(name) ? _items[name] : Empty;
-            }
-        }
-
-        /// <summary>
-        /// Add a sub item.
-        /// </summary>
-        /// <param name="name">Can contain array formatting, the item is then parsed and added in multiple levels</param>
-        /// <param name="value">Value to add.</param>
-        /// <exception cref="ArgumentNullException">Argument is null.</exception>
-        /// <exception cref="InvalidOperationException">Cannot add stuff to <see cref="HttpInput.Empty"/>.</exception>
-        public void Add(string name, string value)
-        {
-            if (name == null && value != null)
-                throw new ArgumentNullException("name");
-            if (name == null)
-                return;
-            if (_ignoreChanges)
-                throw new InvalidOperationException("Cannot add stuff to HttpInput.Empty.");
-
-            int pos = name.IndexOf('[');
-            if (pos != -1)
-            {
-                string name1 = name.Substring(0, pos);
-                string name2 = HttpInput.ExtractOne(name);
-                if (!_items.ContainsKey(name1))
-                    _items.Add(name1, new HttpInputItem(name1, null));
-                _items[name1].Add(name2, value);
-                /*
-                HttpInputItem item = HttpInput.ParseItem(name, value);
-
-                // Add the value to an existing sub item
-                if (_items.ContainsKey(item.Name))
-                    _items[item.Name].Add(item.Value);
-                else
-                    _items.Add(item.Name, item);
-                 */
-            }
-            else
-            {
-                if (_items.ContainsKey(name))
-                    _items[name].Add(value);
-                else
-                    _items.Add(name, new HttpInputItem(name, value));
-            }
-        }
-
-        #endregion
-
-        ///<summary>
-        ///Returns an enumerator that iterates through the collection.
-        ///</summary>
-        ///
-        ///<returns>
-        ///A <see cref="T:System.Collections.Generic.IEnumerator`1"></see> that can be used to iterate through the collection.
-        ///</returns>
-        ///<filterpriority>1</filterpriority>
-        IEnumerator<HttpInputItem> IEnumerable<HttpInputItem>.GetEnumerator()
-        {
-            return _items.Values.GetEnumerator();
-        }
-
-
-        #region IEnumerable Members
-
-        ///<summary>
-        ///Returns an enumerator that iterates through a collection.
-        ///</summary>
-        ///
-        ///<returns>
-        ///An <see cref="T:System.Collections.IEnumerator"></see> object that can be used to iterate through the collection.
-        ///</returns>
-        ///<filterpriority>2</filterpriority>
-        public IEnumerator GetEnumerator()
-        {
-            return _items.Values.GetEnumerator();
-        }
-
-        #endregion
-
-        /// <summary>
-        /// Outputs the string in a formatted manner
-        /// </summary>
-        /// <param name="prefix">A prefix to append, used internally</param>
-        /// <returns></returns>
-        public string ToString(string prefix)
-        {
-            return ToString(prefix, false);
-        }
-    }
-}
diff --git a/HttpServer/trunk/HttpServer/HttpListener.cs b/HttpServer/trunk/HttpServer/HttpListener.cs
deleted file mode 100644
index 05303e4..0000000
--- a/HttpServer/trunk/HttpServer/HttpListener.cs
+++ /dev/null
@@ -1,117 +0,0 @@
-using System;
-using System.Net;
-using System.Net.Sockets;
-using System.Security.Authentication;
-using System.Security.Cryptography.X509Certificates;
-
-namespace HttpServer
-{
-    /// <summary>
-    /// New implementation of the HTTP listener.
-    /// </summary>
-    /// <remarks>
-    /// Use the <c>Create</c> methods to create a default listener.
-    /// </remarks>
-    public class HttpListener : HttpListenerBase
-    {
-        /// <summary>
-        /// A client have been accepted, but not handled, by the listener.
-        /// </summary>
-        public event EventHandler<ClientAcceptedEventArgs> Accepted = delegate{};
-
-
-        /// <summary>
-        /// Initializes a new instance of the <see cref="HttpListener"/> class.
-        /// </summary>
-        /// <param name="address">IP Address to accept connections on</param>
-        /// <param name="port">TCP Port to listen on, default HTTP port is 80.</param>
-        /// <param name="factory">Factory used to create <see cref="IHttpClientContext"/>es.</param>
-        /// <exception cref="ArgumentNullException"><c>address</c> is null.</exception>
-        /// <exception cref="ArgumentException">Port must be a positive number.</exception>
-        public HttpListener(IPAddress address, int port, IHttpContextFactory factory)
-            : base(address, port, factory)
-        {
-        }
-
-        /// <summary>
-        /// Initializes a new instance of the <see cref="HttpListener"/> class.
-        /// </summary>
-        /// <param name="address">The address.</param>
-        /// <param name="port">The port.</param>
-        /// <param name="factory">The factory.</param>
-        /// <param name="certificate">The certificate.</param>
-        public HttpListener(IPAddress address, int port, IHttpContextFactory factory, X509Certificate certificate)
-            : base(address, port, factory, certificate)
-        {
-        }
-
-        /// <summary>
-        /// Initializes a new instance of the <see cref="HttpListener"/> class.
-        /// </summary>
-        /// <param name="address">The address.</param>
-        /// <param name="port">The port.</param>
-        /// <param name="factory">The factory.</param>
-        /// <param name="certificate">The certificate.</param>
-        /// <param name="protocol">The protocol.</param>
-        public HttpListener(IPAddress address, int port, IHttpContextFactory factory, X509Certificate certificate, SslProtocols protocol)
-            : base(address, port, factory, certificate, protocol)
-        {
-        }
-
-        /// <summary>
-        /// Creates a new <see cref="HttpListener"/> instance with default factories.
-        /// </summary>
-        /// <param name="address">Address that the listener should accept connections on.</param>
-        /// <param name="port">Port that listener should accept connections on.</param>
-		/// <returns>Created HTTP listener.</returns>
-        public static HttpListener Create(IPAddress address, int port)
-        {
-            RequestParserFactory requestFactory = new RequestParserFactory();
-            HttpContextFactory factory = new HttpContextFactory(NullLogWriter.Instance, requestFactory);
-            return new HttpListener(address, port, factory);
-        }
-
-        /// <summary>
-        /// Creates a new <see cref="HttpListener"/> instance with default factories.
-        /// </summary>
-        /// <param name="address">Address that the listener should accept connections on.</param>
-        /// <param name="port">Port that listener should accept connections on.</param>
-        /// <param name="certificate">Certificate to use</param>
-		/// <returns>Created HTTP listener.</returns>
-        public static HttpListener Create(IPAddress address, int port, X509Certificate certificate)
-        {
-            RequestParserFactory requestFactory = new RequestParserFactory();
-            HttpContextFactory factory = new HttpContextFactory(NullLogWriter.Instance, requestFactory);
-            return new HttpListener(address, port, factory, certificate);
-        }
-
-        /// <summary>
-        /// Creates a new <see cref="HttpListener"/> instance with default factories.
-        /// </summary>
-        /// <param name="address">Address that the listener should accept connections on.</param>
-        /// <param name="port">Port that listener should accept connections on.</param>
-        /// <param name="certificate">Certificate to use</param>
-        /// <param name="protocol">which HTTPS protocol to use, default is TLS.</param>
-        /// <returns>Created HTTP listener.</returns>
-        public static HttpListener Create(IPAddress address, int port, X509Certificate certificate, SslProtocols protocol)
-        {
-            RequestParserFactory requestFactory = new RequestParserFactory();
-            HttpContextFactory factory = new HttpContextFactory(NullLogWriter.Instance, requestFactory);
-            return new HttpListener(address, port, factory, certificate, protocol);
-        }
-
-        /// <summary>
-        /// Can be used to create filtering of new connections.
-        /// </summary>
-        /// <param name="socket">Accepted socket</param>
-        /// <returns>
-        /// true if connection can be accepted; otherwise false.
-        /// </returns>
-        protected override bool OnAcceptingSocket(Socket socket)
-        {
-            ClientAcceptedEventArgs args = new ClientAcceptedEventArgs(socket);
-            Accepted(this, args);
-            return !args.Revoked;
-        }
-    }
-}
\ No newline at end of file
diff --git a/HttpServer/trunk/HttpServer/HttpListener2.cs b/HttpServer/trunk/HttpServer/HttpListener2.cs
deleted file mode 100644
index ba60cc8..0000000
--- a/HttpServer/trunk/HttpServer/HttpListener2.cs
+++ /dev/null
@@ -1,238 +0,0 @@
-using System;
-using System.Net;
-using System.Net.Sockets;
-using System.Security.Authentication;
-using System.Security.Cryptography.X509Certificates;
-
-namespace HttpServer
-{
-    public class HttpListener2
-    {
-        /// <summary>
-        /// HTTP Listener waits for HTTP connections and provide us with <see cref="HttpListenerContext"/>s using the
-        /// <see cref="RequestHandler"/> delegate.
-        /// </summary>
-        public class HttpListener
-        {
-            private readonly IPAddress _address;
-            private readonly X509Certificate _certificate;
-            private readonly int _port;
-            private readonly SslProtocols _sslProtocol = SslProtocols.Tls;
-            private ClientDisconnectedHandler _disconnectHandler;
-            private TcpListener _listener;
-            private ILogWriter _logWriter = NullLogWriter.Instance;
-            private RequestReceivedHandler _requestHandler;
-            private readonly object _listenLock = new object();
-            private bool _canListen;
-            private bool _useTraceLogs;
-
-            /// <summary>
-            /// This event should be used to validate the incoming connection, i.e. to determine
-            /// if it can be handled or not.
-            /// </summary>
-            public event EventHandler<ClientAcceptedEventArgs> SocketAccepted = delegate { };
-
-
-            /// <summary>
-            /// Listen for regular HTTP connections
-            /// </summary>
-            /// <param name="address">IP Address to accept connections on</param>
-            /// <param name="port">TCP Port to listen on, default HTTP port is 80.</param>
-            public HttpListener(IPAddress address, int port)
-            {
-                if (address == null)
-                    throw new ArgumentNullException("address");
-                if (port <= 0)
-                    throw new ArgumentException("Port must be a positive number.");
-
-                _address = address;
-                _port = port;
-            }
-
-            /// <summary>
-            /// Launch HttpListener in SSL mode
-            /// </summary>
-            /// <param name="address">IP Address to accept connections on</param>
-            /// <param name="port">TCP Port to listen on, default HTTPS port is 443</param>
-            /// <param name="certificate">Certificate to use</param>
-            public HttpListener(IPAddress address, int port, X509Certificate certificate)
-                : this(address, port)
-            {
-                _certificate = certificate;
-            }
-
-            /// <summary>
-            /// Launch HttpListener in SSL mode
-            /// </summary>
-            /// <param name="address">IP Address to accept connections on</param>
-            /// <param name="port">TCP Port to listen on, default HTTPS port is 443</param>
-            /// <param name="certificate">Certificate to use</param>
-            /// <param name="protocol">which HTTPS protocol to use, default is TLS.</param>
-            public HttpListener(IPAddress address, int port, X509Certificate certificate, SslProtocols protocol)
-                : this(address, port, certificate)
-            {
-                _sslProtocol = protocol;
-            }
-
-            /// <summary>
-            /// Gives you a change to receive log entries for all internals of the HTTP library.
-            /// </summary>
-            /// <remarks>
-            /// You may not switch log writer after starting the listener.
-            /// </remarks>
-            public ILogWriter LogWriter
-            {
-                get { return _logWriter; }
-                set
-                {
-                    _logWriter = value ?? NullLogWriter.Instance;
-                    if (_certificate != null)
-                        _logWriter.Write(this, LogPrio.Info,
-                                         "HTTPS(" + _sslProtocol + ") listening on " + _address + ":" + _port);
-                    else
-                        _logWriter.Write(this, LogPrio.Info, "HTTP listening on " + _address + ":" + _port);
-                }
-            }
-
-            /// <summary>
-            /// This handler will be invoked each time a new connection is accepted.
-            /// </summary>
-            public RequestReceivedHandler RequestHandler
-            {
-                get { return _requestHandler; }
-                set
-                {
-                    if (value == null)
-                        throw new ArgumentNullException("value");
-
-                    _requestHandler = value;
-                }
-            }
-
-            /// <summary>
-            /// True if we should turn on trace logs.
-            /// </summary>
-            public bool UseTraceLogs
-            {
-                get { return _useTraceLogs; }
-                set { _useTraceLogs = value; }
-            }
-
-
-            private void OnAccept(IAsyncResult ar)
-            {
-                try
-                {
-                    // i'm not trying to avoid ALL cases here. but just the most simple ones.
-                    // doing a lock would defeat the purpose since only one socket could be accepted at once.
-
-                    // the lock kills performance and that's why I temporarly disabled it.
-                    // right now it's up to the exception block to handle Stop()
-                    /*lock (_listenLock)
-                        if (!_canListen)
-                            return;
-                    */
-                    Socket socket = _listener.EndAcceptSocket(ar);
-                    _listener.BeginAcceptSocket(OnAccept, null);
-
-                    ClientAcceptedEventArgs args = new ClientAcceptedEventArgs(socket);
-                    Accepted(this, args);
-                    if (args.Revoked)
-                    {
-                        _logWriter.Write(this, LogPrio.Debug, "Socket was revoked by event handler.");
-                        socket.Close();
-                        return;
-                    }
-
-                    _logWriter.Write(this, LogPrio.Debug, "Accepted connection from: " + socket.RemoteEndPoint);
-
-                    NetworkStream stream = new NetworkStream(socket, true);
-                    IPEndPoint remoteEndPoint = (IPEndPoint)socket.RemoteEndPoint;
-
-                    if (_certificate != null)
-                        CreateSecureContext(stream, remoteEndPoint);
-                    else
-                        new HttpClientContextImp(false, remoteEndPoint, _requestHandler, _disconnectHandler, stream,
-                                                 LogWriter);
-                }
-                catch (Exception err)
-                {
-                    if (err is ObjectDisposedException || err is NullReferenceException) // occurs when we shut down the listener.
-                    {
-                        if (UseTraceLogs)
-                            _logWriter.Write(this, LogPrio.Trace, err.Message);
-                        return;
-                    }
-
-                    _logWriter.Write(this, LogPrio.Debug, err.Message);
-                    if (ExceptionThrown == null)
-#if DEBUG
-                    throw;
-#else
-                        _logWriter.Write(this, LogPrio.Fatal, err.Message);
-                    // we can't really do anything but close the connection
-#endif
-                    if (ExceptionThrown != null)
-                        ExceptionThrown(this, err);
-                }
-            }
-
-            private void CreateSecureContext(Stream stream, IPEndPoint remoteEndPoint)
-            {
-                SslStream sslStream = new SslStream(stream, false);
-                try
-                {
-                    sslStream.AuthenticateAsServer(_certificate, false, _sslProtocol, false); //todo: this may fail
-                    new HttpClientContextImp(true, remoteEndPoint, _requestHandler, _disconnectHandler, sslStream,
-                                                       LogWriter);
-                }
-                catch (IOException err)
-                {
-                    if (UseTraceLogs)
-                        _logWriter.Write(this, LogPrio.Trace, err.Message);
-                }
-                catch (ObjectDisposedException err)
-                {
-                    if (UseTraceLogs)
-                        _logWriter.Write(this, LogPrio.Trace, err.Message);
-                }
-            }
-            /// <summary>
-            /// Start listen for new connections
-            /// </summary>
-            /// <param name="backlog">Number of connections that can stand in a queue to be accepted.</param>
-            public void Start(int backlog)
-            {
-                if (_listener == null)
-                {
-                    _listener = new TcpListener(_address, _port);
-                    _listener.Start(backlog);
-                    _canListen = true;
-                }
-                _listener.BeginAcceptSocket(OnAccept, null);
-            }
-
-
-            /// <summary>
-            /// Stop the listener
-            /// </summary>
-            /// <exception cref="SocketException"></exception>
-            public void Stop()
-            {
-                lock (_listenLock)
-                    _canListen = false;
-                _listener.Stop();
-                _listener = null;
-            }
-
-            /// <summary>
-            /// Let's to receive unhandled exceptions from the threads.
-            /// </summary>
-            /// <remarks>
-            /// Exceptions will be thrown during debug mode if this event is not used,
-            /// exceptions will be printed to console and suppressed during release mode.
-            /// </remarks>
-            public event ExceptionHandler ExceptionThrown;
-        }
-    }
-}
\ No newline at end of file
diff --git a/HttpServer/trunk/HttpServer/HttpListenerBase.cs b/HttpServer/trunk/HttpServer/HttpListenerBase.cs
deleted file mode 100644
index 1fdf282..0000000
--- a/HttpServer/trunk/HttpServer/HttpListenerBase.cs
+++ /dev/null
@@ -1,243 +0,0 @@
-using System;
-using System.Net;
-using System.Net.Sockets;
-using System.Net.Security;
-using System.Security.Authentication;
-using System.Security.Cryptography.X509Certificates;
-using System.Threading;
-
-namespace HttpServer
-{
-    /// <summary>
-    /// Contains a listener that doesn't do anything with the connections.
-    /// </summary>
-    public abstract class HttpListenerBase
-    {
-        private readonly IPAddress _address;
-        private readonly X509Certificate _certificate;
-        private readonly IHttpContextFactory _factory;
-        private readonly int _port;
-        private readonly ManualResetEvent _shutdownEvent = new ManualResetEvent(false);
-        private readonly SslProtocols _sslProtocol = SslProtocols.Tls | SslProtocols.Ssl3 |SslProtocols.Ssl2;
-        private TcpListener _listener;
-        private ILogWriter _logWriter = NullLogWriter.Instance;
-        private int _pendingAccepts;
-        private bool _shutdown;
-        protected RemoteCertificateValidationCallback _clientCallback = null;
-
-        /// <summary>
-        /// Listen for regular HTTP connections
-        /// </summary>
-        /// <param name="address">IP Address to accept connections on</param>
-        /// <param name="port">TCP Port to listen on, default HTTP port is 80.</param>
-        /// <param name="factory">Factory used to create <see cref="IHttpClientContext"/>es.</param>
-        /// <exception cref="ArgumentNullException"><c>address</c> is null.</exception>
-        /// <exception cref="ArgumentException">Port must be a positive number.</exception>
-        protected HttpListenerBase(IPAddress address, int port, IHttpContextFactory factory)
-        {
-            Check.Require(address, "address");
-            Check.Min(1, port, "port");
-            Check.Require(factory, "factory");
-
-            _address = address;
-            _port = port;
-            _factory = factory;
-            _factory.RequestReceived += OnRequestReceived;
-        }
-
-        private void OnRequestReceived(object sender, RequestEventArgs e)
-        {
-            RequestReceived(sender, e);
-        }
-
-        /// <summary>
-        /// Initializes a new instance of the <see cref="HttpListenerBase"/> class.
-        /// </summary>
-        /// <param name="address">IP Address to accept connections on</param>
-        /// <param name="port">TCP Port to listen on, default HTTPS port is 443</param>
-        /// <param name="factory">Factory used to create <see cref="IHttpClientContext"/>es.</param>
-        /// <param name="certificate">Certificate to use</param>
-        protected HttpListenerBase(IPAddress address, int port, IHttpContextFactory factory, X509Certificate certificate)
-            : this(address, port, factory)
-        {
-            Check.Require(certificate, "certificate");
-
-            _certificate = certificate;
-        }
-
-        /// <summary>
-        /// Initializes a new instance of the <see cref="HttpListenerBase"/> class.
-        /// </summary>
-        /// <param name="address">IP Address to accept connections on</param>
-        /// <param name="port">TCP Port to listen on, default HTTPS port is 443</param>
-        /// <param name="factory">Factory used to create <see cref="IHttpClientContext"/>es.</param>
-        /// <param name="certificate">Certificate to use</param>
-        /// <param name="protocol">which HTTPS protocol to use, default is TLS.</param>
-        protected HttpListenerBase(IPAddress address, int port, IHttpContextFactory factory, X509Certificate certificate,
-                                   SslProtocols protocol)
-            : this(address, port, factory, certificate)
-        {
-            _sslProtocol = protocol;
-        }
-
-
-        public RemoteCertificateValidationCallback CertificateValidationCallback
-        {
-            set {_clientCallback = value; }
-        }
-
-        /// <summary>
-        /// Gives you a change to receive log entries for all internals of the HTTP library.
-        /// </summary>
-        /// <remarks>
-        /// You may not switch log writer after starting the listener.
-        /// </remarks>
-        public ILogWriter LogWriter
-        {
-            get { return _logWriter; }
-            set
-            {
-                _logWriter = value ?? NullLogWriter.Instance;
-                if (_certificate != null)
-                    _logWriter.Write(this, LogPrio.Info,
-                                     "HTTPS(" + _sslProtocol + ") listening on " + _address + ":" + _port);
-                else
-                    _logWriter.Write(this, LogPrio.Info, "HTTP listening on " + _address + ":" + _port);
-            }
-        }
-
-        /// <summary>
-        /// True if we should turn on trace logs.
-        /// </summary>
-        public bool UseTraceLogs { get; set; }
-
-
-        /// <exception cref="Exception"><c>Exception</c>.</exception>
-        private void OnAccept(IAsyncResult ar)
-        {
-        	bool beginAcceptCalled = false;
-            try
-            {
-                int count = Interlocked.Decrement(ref _pendingAccepts);
-                if (_shutdown)
-                {
-                    if (count == 0)
-                        _shutdownEvent.Set();
-                    return;
-                }
-
-                Interlocked.Increment(ref _pendingAccepts);
-                _listener.BeginAcceptSocket(OnAccept, null);
-				beginAcceptCalled = true;
-				Socket socket = _listener.EndAcceptSocket(ar);
-
-                if (!OnAcceptingSocket(socket))
-                {
-                    socket.Disconnect(true);
-                    return;
-                }
-
-                _logWriter.Write(this, LogPrio.Debug, "Accepted connection from: " + socket.RemoteEndPoint);
-
-                if (_certificate != null)
-                    _factory.CreateSecureContext(socket, _certificate, _sslProtocol, _clientCallback);
-                else
-                    _factory.CreateContext(socket);
-            }
-            catch (Exception err)
-            {
-                _logWriter.Write(this, LogPrio.Debug, err.Message);
-                if (ExceptionThrown == null)
-#if DEBUG
-                    throw;
-#else
-                   _logWriter.Write(this, LogPrio.Fatal, err.Message);
-                // we can't really do anything but close the connection
-#endif
-                if (ExceptionThrown != null)
-                    ExceptionThrown(this, err);
-
-				if (!beginAcceptCalled)
-            		RetryBeginAccept();
-            }
-        }
-
-		/// <summary>
-		/// Will try to accept connections one more time.
-		/// </summary>
-		/// <exception cref="Exception">If any exceptions is thrown.</exception>
-    	private void RetryBeginAccept()
-    	{
-    		try
-    		{
-				_logWriter.Write(this, LogPrio.Error, "Trying to accept connections again.");
-				_listener.BeginAcceptSocket(OnAccept, null);
-    		}
-			catch (Exception err)
-			{
-				_logWriter.Write(this, LogPrio.Fatal, err.Message);
-				if (ExceptionThrown == null)
-#if DEBUG
-					throw;
-#else
-                   _logWriter.Write(this, LogPrio.Fatal, err.Message);
-                // we can't really do anything but close the connection
-#endif
-				if (ExceptionThrown != null)
-					ExceptionThrown(this, err);
-			}
-		}
-
-    	/// <summary>
-        /// Can be used to create filtering of new connections.
-        /// </summary>
-        /// <param name="socket">Accepted socket</param>
-        /// <returns>true if connection can be accepted; otherwise false.</returns>
-        protected abstract bool OnAcceptingSocket(Socket socket);
-
-        /// <summary>
-        /// Start listen for new connections
-        /// </summary>
-        /// <param name="backlog">Number of connections that can stand in a queue to be accepted.</param>
-        /// <exception cref="InvalidOperationException">Listener have already been started.</exception>
-        public void Start(int backlog)
-        {
-            if (_listener != null)
-                throw new InvalidOperationException("Listener have already been started.");
-
-            _listener = new TcpListener(_address, _port);
-            _listener.Start(backlog);
-            Interlocked.Increment(ref _pendingAccepts);
-            _listener.BeginAcceptSocket(OnAccept, null);
-        }
-
-
-        /// <summary>
-        /// Stop the listener
-        /// </summary>
-        /// <exception cref="SocketException"></exception>
-        public void Stop()
-        {
-            _shutdown = true;
-            _factory.Shutdown();
-            _listener.Stop();
-            if (!_shutdownEvent.WaitOne())
-                _logWriter.Write(this, LogPrio.Error, "Failed to shutdown listener properly.");
-            _listener = null;
-        }
-
-        /// <summary>
-        /// Catch exceptions not handled by the listener.
-        /// </summary>
-        /// <remarks>
-        /// Exceptions will be thrown during debug mode if this event is not used,
-        /// exceptions will be printed to console and suppressed during release mode.
-        /// </remarks>
-        public event ExceptionHandler ExceptionThrown = delegate { };
-
-        /// <summary>
-        /// A request have been received from a <see cref="IHttpClientContext"/>.
-        /// </summary>
-        public event EventHandler<RequestEventArgs> RequestReceived = delegate{};
-    }
-}
\ No newline at end of file
diff --git a/HttpServer/trunk/HttpServer/HttpModules/FileModule.cs b/HttpServer/trunk/HttpServer/HttpModules/FileModule.cs
deleted file mode 100644
index 15c9ed8..0000000
--- a/HttpServer/trunk/HttpServer/HttpModules/FileModule.cs
+++ /dev/null
@@ -1,224 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.IO;
-using System.Net;
-using HttpServer.Exceptions;
-using HttpServer.Sessions;
-
-namespace HttpServer.HttpModules
-{
-    /// <summary>
-    /// The purpose of this module is to serve files.
-    /// </summary>
-    public class FileModule : HttpModule
-    {
-        private readonly string _baseUri;
-        private readonly string _basePath;
-    	private readonly bool _useLastModifiedHeader;
-        private readonly IDictionary<string, string> _mimeTypes = new Dictionary<string, string>();
-        private static readonly string[] DefaultForbiddenChars = new[]{ "\\", "..", ":" };
-        private string[] _forbiddenChars;
-    	private static readonly string PathSeparator = Path.DirectorySeparatorChar.ToString();
-
-        /// <summary>
-        /// Initializes a new instance of the <see cref="FileModule"/> class.
-        /// </summary>
-        /// <param name="baseUri">Uri to serve, for instance "/files/"</param>
-        /// <param name="basePath">Path on hard drive where we should start looking for files</param>
-        /// <param name="useLastModifiedHeader">If true a Last-Modifed header will be sent upon requests urging web browser to cache files</param>
-        public FileModule(string baseUri, string basePath, bool useLastModifiedHeader)
-        {
-            Check.Require(baseUri, "baseUri");
-            Check.Require(basePath, "basePath");
-
-        	_useLastModifiedHeader = useLastModifiedHeader;
-            _baseUri = baseUri;
-            _basePath = basePath;
-			if (!_basePath.EndsWith(PathSeparator))
-				_basePath += PathSeparator;
-            ForbiddenChars = DefaultForbiddenChars;
-        }
-
-        /// <summary>
-        /// Initializes a new instance of the <see cref="FileModule"/> class.
-        /// </summary>
-        /// <param name="baseUri">Uri to serve, for instance "/files/"</param>
-        /// <param name="basePath">Path on hard drive where we should start looking for files</param>
-        public FileModule(string baseUri, string basePath)
-            : this(baseUri, basePath, false)
-		{}
-
-        /// <summary>
-        /// List with all mime-type that are allowed.
-        /// </summary>
-        /// <remarks>All other mime types will result in a Forbidden http status code.</remarks>
-        public IDictionary<string, string> MimeTypes
-        {
-            get { return _mimeTypes; }
-        }
-
-        /// <summary>
-        /// characters that may not  exist in a path.
-        /// </summary>
-        /// <example>
-        /// fileMod.ForbiddenChars = new string[]{ "\\", "..", ":" };
-        /// </example>
-        public string[] ForbiddenChars
-        {
-            get { return _forbiddenChars; }
-            set { _forbiddenChars = value; }
-        }
-
-
-        /// <summary>
-        /// Mimtypes that this class can handle per default
-        /// </summary>
-        public void AddDefaultMimeTypes()
-        {
-            MimeTypes.Add("default", "application/octet-stream");
-            MimeTypes.Add("txt", "text/plain");
-            MimeTypes.Add("html", "text/html");
-            MimeTypes.Add("htm", "text/html");
-            MimeTypes.Add("jpg", "image/jpg");
-            MimeTypes.Add("jpeg", "image/jpg");
-            MimeTypes.Add("bmp", "image/bmp");
-            MimeTypes.Add("gif", "image/gif");
-            MimeTypes.Add("png", "image/png");
-
-			MimeTypes.Add("ico", "image/vnd.microsoft.icon");
-            MimeTypes.Add("css", "text/css");
-            MimeTypes.Add("gzip", "application/x-gzip");
-            MimeTypes.Add("zip", "multipart/x-zip");
-            MimeTypes.Add("tar", "application/x-tar");
-            MimeTypes.Add("pdf", "application/pdf");
-            MimeTypes.Add("rtf", "application/rtf");
-            MimeTypes.Add("xls", "application/vnd.ms-excel");
-            MimeTypes.Add("ppt", "application/vnd.ms-powerpoint");
-            MimeTypes.Add("doc", "application/application/msword");
-            MimeTypes.Add("js", "application/javascript");
-            MimeTypes.Add("au", "audio/basic");
-            MimeTypes.Add("snd", "audio/basic");
-            MimeTypes.Add("es", "audio/echospeech");
-            MimeTypes.Add("mp3", "audio/mpeg");
-            MimeTypes.Add("mp2", "audio/mpeg");
-            MimeTypes.Add("mid", "audio/midi");
-            MimeTypes.Add("wav", "audio/x-wav");
-            MimeTypes.Add("swf", "application/x-shockwave-flash");
-            MimeTypes.Add("avi", "video/avi");
-            MimeTypes.Add("rm", "audio/x-pn-realaudio");
-            MimeTypes.Add("ram", "audio/x-pn-realaudio");
-            MimeTypes.Add("aif", "audio/x-aiff");
-        }
-
-        /// <summary>
-        /// Determines if the request should be handled by this module.
-        /// Invoked by the <see cref="HttpServer"/>
-        /// </summary>
-        /// <param name="uri"></param>
-        /// <returns>true if this module should handle it.</returns>
-        public bool CanHandle(Uri uri)
-        {
-            if (Contains(uri.AbsolutePath, _forbiddenChars))
-                return false;
-
-            return uri.AbsolutePath.StartsWith(_baseUri) && File.Exists(GetPath(uri));
-        }
-
-    	/// <exception cref="BadRequestException">Illegal path</exception>
-    	private string GetPath(Uri uri)
-        {
-            if (Contains(uri.AbsolutePath, _forbiddenChars))
-                throw new BadRequestException("Illegal path");
-
-            string path = _basePath + uri.AbsolutePath.Substring(_baseUri.Length);
-			return path.Replace('/', Path.DirectorySeparatorChar);
-        }
-
-        /// <summary>
-        /// check if source contains any of the chars.
-        /// </summary>
-        /// <param name="source"></param>
-        /// <param name="chars"></param>
-        /// <returns></returns>
-        private static bool Contains(string source, IEnumerable<string> chars)
-        {
-            foreach (string s in chars)
-            {
-                if (source.Contains(s))
-                    return true;
-            }
-
-            return false;
-        }
-
-        /// <summary>
-        /// Method that process the Uri.
-        /// </summary>
-        /// <param name="request">Information sent by the browser about the request</param>
-        /// <param name="response">Information that is being sent back to the client.</param>
-        /// <param name="session">Session used to </param>
-        /// <exception cref="InternalServerException">Failed to find file extension</exception>
-        /// <exception cref="ForbiddenException">File type is forbidden.</exception>
-        public override bool Process(IHttpRequest request, IHttpResponse response, IHttpSession session)
-        {
-            if (!CanHandle(request.Uri))
-                return false;
-
-            try
-            {
-                string path = GetPath(request.Uri);
-                string extension = GetFileExtension(path);
-                if (extension == null)
-                    throw new InternalServerException("Failed to find file extension");
-
-                if (MimeTypes.ContainsKey(extension))
-                    response.ContentType = MimeTypes[extension];
-                else
-                    throw new ForbiddenException("Forbidden file type: " + extension);
-
-				using (FileStream stream = new FileStream(path, FileMode.Open, FileAccess.Read, FileShare.ReadWrite))
-				{
-					if (!string.IsNullOrEmpty(request.Headers["if-modified-since"]))
-					{
-						DateTime lastRequest = DateTime.Parse(request.Headers["if-modified-since"]);
-						if (lastRequest.CompareTo(File.GetLastWriteTime(path)) <= 0)
-							response.Status = HttpStatusCode.NotModified;
-					}
-
-                    if (_useLastModifiedHeader)
-					    response.AddHeader("Last-modified", File.GetLastWriteTime(path).ToString("r"));
-					response.ContentLength = stream.Length;
-					response.SendHeaders();
-
-					if (request.Method != "Headers" && response.Status != HttpStatusCode.NotModified)
-					{
-						byte[] buffer = new byte[8192];
-						int bytesRead = stream.Read(buffer, 0, 8192);
-						while (bytesRead > 0)
-						{
-							response.SendBody(buffer, 0, bytesRead);
-							bytesRead = stream.Read(buffer, 0, 8192);
-						}
-					}
-				}
-            }
-            catch (FileNotFoundException err)
-            {
-                throw new InternalServerException("Failed to proccess file.", err);
-            }
-
-            return true;
-        }
-
-        /// <summary>
-        /// return a file extension from an absolute Uri path (or plain filename)
-        /// </summary>
-        /// <param name="uri"></param>
-        /// <returns></returns>
-        public static string GetFileExtension(string uri)
-        {
-            int pos = uri.LastIndexOf('.');
-            return pos == -1 ? null : uri.Substring(pos + 1);
-        }
-    }
-}
diff --git a/HttpServer/trunk/HttpServer/HttpModules/HttpModule.cs b/HttpServer/trunk/HttpServer/HttpModules/HttpModule.cs
deleted file mode 100644
index 2a5c3dc..0000000
--- a/HttpServer/trunk/HttpServer/HttpModules/HttpModule.cs
+++ /dev/null
@@ -1,69 +0,0 @@
-using HttpServer.Authentication;
-using HttpServer.Exceptions;
-using HttpServer.Sessions;
-
-namespace HttpServer.HttpModules
-{
-    /// <summary>
-    /// A HttpModule can be used to serve Uri's. The module itself
-    /// decides if it should serve a Uri or not. In this way, you can
-    /// get a very flexible http application since you can let multiple modules
-    /// serve almost similar urls.
-    /// </summary>
-    /// <remarks>
-    /// Throw <see cref="UnauthorizedException"/> if you are using a <see cref="AuthenticationModule"/> and want to prompt for user name/password.
-    /// </remarks>
-    public abstract class HttpModule
-    {
-        private ILogWriter _log = NullLogWriter.Instance;
-
-        /// <summary>
-        /// Method that process the url
-        /// </summary>
-        /// <param name="request">Information sent by the browser about the request</param>
-        /// <param name="response">Information that is being sent back to the client.</param>
-        /// <param name="session">Session used to </param>
-        /// <returns>true if this module handled the request.</returns>
-        public abstract bool Process(IHttpRequest request, IHttpResponse response, IHttpSession session);
-        /*
-        /// <summary>
-        /// Checks if authentication is required by the module.
-        /// </summary>
-        /// <param name="request">Information sent by the browser about the request</param>
-        /// <param name="response">Information that is being sent back to the client.</param>
-        /// <param name="session">Session used to </param>
-        /// <param name="cookies">Incoming/outgoing cookies. If you modify a cookie, make sure that you also set a expire date. Modified cookies will automatically be sent.</param>
-        /// <returns>true authentication should be used.</returns>
-        public abstract bool IsAuthenticationRequired(IHttpRequest request, IHttpResponse response, IHttpSession session,
-                                                      HttpCookies cookies);
-         * */
-
-        /// <summary>
-        /// Set the log writer to use.
-        /// </summary>
-        /// <param name="writer">logwriter to use.</param>
-        public void SetLogWriter(ILogWriter writer)
-        {
-            _log = writer ?? NullLogWriter.Instance;
-        }
-
-        /// <summary>
-        /// Log something.
-        /// </summary>
-        /// <param name="prio">importance of log message</param>
-        /// <param name="message">message</param>
-        protected virtual void Write(LogPrio prio, string message)
-        {
-            _log.Write(this, prio, message);
-        }
-
-		/// <summary>
-		/// If true specifies that the module doesn't consume the processing of a request so that subsequent modules
-		/// can continue processing afterwards. Default is false.
-		/// </summary>
-		public virtual bool AllowSecondaryProcessing
-		{
-			get { return false; }
-		}
-    }
-}
diff --git a/HttpServer/trunk/HttpServer/HttpModules/HttpModuleExceptionEventArgs.cs b/HttpServer/trunk/HttpServer/HttpModules/HttpModuleExceptionEventArgs.cs
deleted file mode 100644
index df0e046..0000000
--- a/HttpServer/trunk/HttpServer/HttpModules/HttpModuleExceptionEventArgs.cs
+++ /dev/null
@@ -1,29 +0,0 @@
-using System;
-
-namespace HttpServer.HttpModules
-{
-    /// <summary>
-    /// Used to inform http server that
-    /// </summary>
-    public class HttpModuleExceptionEventArgs : EventArgs
-    {
-        private readonly Exception _exception;
-
-        /// <summary>
-        /// Eventarguments used when an exception is thrown by a module
-        /// </summary>
-        /// <param name="e">the exception</param>
-        public HttpModuleExceptionEventArgs(Exception e)
-        {
-            _exception = e;
-        }
-
-        /// <summary>
-        /// Exception thrown in a module
-        /// </summary>
-        public Exception Exception
-        {
-            get { return _exception; }
-        }
-    }
-}
diff --git a/HttpServer/trunk/HttpServer/HttpModules/ResourceFileModule.cs b/HttpServer/trunk/HttpServer/HttpModules/ResourceFileModule.cs
deleted file mode 100644
index 3511092..0000000
--- a/HttpServer/trunk/HttpServer/HttpModules/ResourceFileModule.cs
+++ /dev/null
@@ -1,180 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.IO;
-using System.Net;
-using System.Reflection;
-using HttpServer.Exceptions;
-using HttpServer.Helpers;
-using HttpServer.Sessions;
-
-namespace HttpServer.HttpModules
-{
-    /// <summary>
-    /// Serves files that are stored in embedded resources.
-    /// </summary>
-    public class ResourceFileModule : HttpModule
-    {
-    	private readonly ResourceManager _resourceManager;
-
-        private readonly IDictionary<string, string> _mimeTypes = new Dictionary<string, string>();
-
-		/// <summary>
-		/// Initializes a new instance of the <see cref="ResourceFileModule"/> class.
-		/// Runs <see cref="AddDefaultMimeTypes"/> to make sure the basic mime types are available, they can be cleared later
-		/// through the use of <see cref="MimeTypes"/> if desired.
-		/// </summary>
-		public ResourceFileModule()
-		{
-			AddDefaultMimeTypes();
-			_resourceManager = new ResourceManager();
-		}
-
-		/// <summary>
-		/// Initializes a new instance of the <see cref="ResourceFileModule"/> class.
-		/// Runs <see cref="AddDefaultMimeTypes"/> to make sure the basic mime types are available, they can be cleared later
-		/// through the use of <see cref="MimeTypes"/> if desired.
-		/// </summary>
-		/// <param name="logWriter">The log writer to use when logging events</param>
-		public ResourceFileModule(ILogWriter logWriter)
-		{
-			_resourceManager = new ResourceManager(logWriter);
-		}
-
-        /// <summary>
-        /// List with all mime-type that are allowed.
-        /// </summary>
-        /// <remarks>All other mime types will result in a Forbidden http status code.</remarks>
-        public IDictionary<string, string> MimeTypes
-        {
-            get { return _mimeTypes; }
-        }
-
-        /// <summary>
-        /// Mimtypes that this class can handle per default
-        /// </summary>
-        public void AddDefaultMimeTypes()
-        {
-            MimeTypes.Add("default", "application/octet-stream");
-            MimeTypes.Add("txt", "text/plain");
-            MimeTypes.Add("html", "text/html");
-            MimeTypes.Add("htm", "text/html");
-            MimeTypes.Add("jpg", "image/jpg");
-            MimeTypes.Add("jpeg", "image/jpg");
-            MimeTypes.Add("bmp", "image/bmp");
-            MimeTypes.Add("gif", "image/gif");
-            MimeTypes.Add("png", "image/png");
-
-            MimeTypes.Add("css", "text/css");
-            MimeTypes.Add("gzip", "application/x-gzip");
-            MimeTypes.Add("zip", "multipart/x-zip");
-            MimeTypes.Add("tar", "application/x-tar");
-            MimeTypes.Add("pdf", "application/pdf");
-            MimeTypes.Add("rtf", "application/rtf");
-            MimeTypes.Add("xls", "application/vnd.ms-excel");
-            MimeTypes.Add("ppt", "application/vnd.ms-powerpoint");
-            MimeTypes.Add("doc", "application/application/msword");
-            MimeTypes.Add("js", "application/javascript");
-            MimeTypes.Add("au", "audio/basic");
-            MimeTypes.Add("snd", "audio/basic");
-            MimeTypes.Add("es", "audio/echospeech");
-            MimeTypes.Add("mp3", "audio/mpeg");
-            MimeTypes.Add("mp2", "audio/mpeg");
-            MimeTypes.Add("mid", "audio/midi");
-            MimeTypes.Add("wav", "audio/x-wav");
-            MimeTypes.Add("swf", "application/x-shockwave-flash");
-            MimeTypes.Add("avi", "video/avi");
-            MimeTypes.Add("rm", "audio/x-pn-realaudio");
-            MimeTypes.Add("ram", "audio/x-pn-realaudio");
-            MimeTypes.Add("aif", "audio/x-aiff");
-        }
-
-		/// <summary>
-		/// Loads resources from a namespace in the given assembly to an uri
-		/// </summary>
-		/// <param name="toUri">The uri to map the resources to</param>
-		/// <param name="fromAssembly">The assembly in which the resources reside</param>
-		/// <param name="fromNamespace">The namespace from which to load the resources</param>
-		/// <usage>
-		/// resourceLoader.LoadResources("/user/", typeof(User).Assembly, "MyLib.Models.User.Views");
-		///
-		/// will make ie the resource MyLib.Models.User.Views.stylesheet.css accessible via /user/stylesheet.css
-		/// </usage>
-		/// <returns>The amount of loaded files, giving you the possibility of making sure the resources needed gets loaded</returns>
-		public int AddResources(string toUri, Assembly fromAssembly, string fromNamespace)
-		{
-			return _resourceManager.LoadResources(toUri, fromAssembly, fromNamespace);
-		}
-
-		/// <summary>
-		/// Returns true if the module can handle the request
-		/// </summary>
-		private bool CanHandle(IHttpRequest request)
-		{
-			return !request.Uri.AbsolutePath.EndsWith("*") && _resourceManager.ContainsResource(request.Uri.AbsolutePath);
-		}
-
-    	#region Overrides of HttpModule
-
-		/// <summary>
-        /// Method that process the url
-        /// </summary>
-        /// <param name="request">Information sent by the browser about the request</param>
-        /// <param name="response">Information that is being sent back to the client.</param>
-        /// <param name="session">Session used to </param>
-        /// <returns>true if this module handled the request.</returns>
-        public override bool Process(IHttpRequest request, IHttpResponse response, IHttpSession session)
-		{
-			if(!CanHandle(request))
-				return false;
-
-			string path = request.Uri.AbsolutePath;
-			string contentType;
-			Stream resourceStream = GetResourceStream(path, out contentType);
-			if(resourceStream == null)
-				return false;
-
-			response.ContentType = contentType;
-			DateTime modifiedTime = DateTime.MinValue;
-			if (!string.IsNullOrEmpty(request.Headers["if-modified-since"]))
-			{
-				DateTime lastRequest = DateTime.Parse(request.Headers["if-modified-since"]);
-				if (lastRequest.CompareTo(modifiedTime) <= 0)
-					response.Status = HttpStatusCode.NotModified;
-			}
-
-			response.AddHeader("Last-modified", modifiedTime.ToString("r"));
-			response.ContentLength = resourceStream.Length;
-			response.SendHeaders();
-
-			if (request.Method != "Headers" && response.Status != HttpStatusCode.NotModified)
-			{
-				byte[] buffer = new byte[8192];
-				int bytesRead = resourceStream.Read(buffer, 0, 8192);
-				while (bytesRead > 0)
-				{
-					response.SendBody(buffer, 0, bytesRead);
-					bytesRead = resourceStream.Read(buffer, 0, 8192);
-				}
-			}
-
-			return true;
-		}
-
-		#endregion
-
-		private Stream GetResourceStream(string path, out string contentType)
-		{
-			int extensionPosition = path.LastIndexOf('.');
-			string extension = extensionPosition == -1 ? null : path.Substring(extensionPosition + 1);
-			if (extension == null)
-				throw new InternalServerException("Failed to find file extension");
-
-			if (MimeTypes.ContainsKey(extension))
-				contentType = MimeTypes[extension];
-			else
-				throw new ForbiddenException("Forbidden file type: " + extension);
-
-			return _resourceManager.GetResourceStream(path);
-		}
-	}
-}
\ No newline at end of file
diff --git a/HttpServer/trunk/HttpServer/HttpModules/ReverseProxyModule.cs b/HttpServer/trunk/HttpServer/HttpModules/ReverseProxyModule.cs
deleted file mode 100644
index 10f86df..0000000
--- a/HttpServer/trunk/HttpServer/HttpModules/ReverseProxyModule.cs
+++ /dev/null
@@ -1,123 +0,0 @@
-using System;
-using System.IO;
-using System.Net;
-using HttpServer.Exceptions;
-using HttpServer;
-using HttpServer.Sessions;
-
-namespace HttpServer.HttpModules
-{
-    /// <summary>
-    /// A reverse proxy are used to act as a bridge between local (protected/hidden) websites
-    /// and public clients.
-    ///
-    /// A typical usage is to allow web servers on non standard ports to still be available
-    /// to the public clients, or allow web servers on private ips to be available.
-    /// </summary>
-    public class ReverseProxyModule : HttpModule
-    {
-        private readonly string _destinationUrl;
-        private readonly string _sourceUrl;
-
-        /// <summary>
-        ///
-        /// </summary>
-        /// <param name="source">Base url requested from browser</param>
-        /// <param name="destination">Base url on private web server</param>
-        /// <example>
-        /// // this will return contents from http://192.168.1.128/view/jonas when client requests http://www.gauffin.com/user/view/jonas
-        /// _server.Add(new ReverseProxyModule("http://www.gauffin.com/user/", "http://192.168.1.128/");
-        /// </example>
-        public ReverseProxyModule(string source, string destination)
-        {
-            if (destination == null)
-                throw new ArgumentNullException("destination");
-            if (source == null)
-                throw new ArgumentNullException("source");
-
-            _destinationUrl = destination;
-            if (!_destinationUrl.EndsWith("/"))
-                _destinationUrl += "/";
-            _sourceUrl = source;
-        }
-
-        /// <summary>
-        /// Method that determines if an url should be handled or not by the module
-        /// </summary>
-        /// <param name="uri">Url requested by the client.</param>
-        /// <returns>true if module should handle the url.</returns>
-        private  bool CanHandle(Uri uri)
-        {
-            return uri.AbsolutePath.StartsWith(_sourceUrl);
-        }
-
-        /// <summary>
-        /// Method that process the url
-        /// </summary>
-        /// <param name="request">Information sent by the browser about the request</param>
-        /// <param name="response">Information that is being sent back to the client.</param>
-        /// <param name="session">Session used to </param>
-        public override bool Process(IHttpRequest request, IHttpResponse response, IHttpSession session)
-        {
-            if (!CanHandle(request.Uri))
-                return false;
-
-            int pos = request.Uri.OriginalString.IndexOf(_sourceUrl);
-            if (pos == -1)
-                throw new InternalServerException("Failed to find source url '" + _sourceUrl + "' for proxy.");
-
-            string sourceUrl = request.Uri.OriginalString.Substring(0, pos + _sourceUrl.Length);
-            string newUrl = request.Uri.OriginalString.Replace(sourceUrl, _destinationUrl);
-            Uri url = new Uri(newUrl);
-
-            WebClient client = new WebClient();
-            try
-            {
-                byte[] bytes = client.DownloadData(url);
-                string content = client.ResponseHeaders[HttpResponseHeader.ContentType];
-                response.ContentType = content;
-
-                string contentLengthStr = client.ResponseHeaders[HttpResponseHeader.ContentLength];
-                int contentLength;
-                int.TryParse(contentLengthStr, out contentLength);
-                response.ContentLength = contentLength;
-
-                if (content.StartsWith("text/html"))
-                {
-                    string data = client.Encoding.GetString(bytes);
-                    StreamWriter writer = new StreamWriter(response.Body, client.Encoding);
-                    writer.Write(data.Replace(_destinationUrl, sourceUrl).Replace("href=\"/", "href=\"" + _sourceUrl));
-                    writer.Write(data.Replace(_destinationUrl, sourceUrl).Replace("src=\"/", "src=\"" + _sourceUrl));
-                }
-                else
-                    response.Body.Write(bytes, 0, bytes.Length);
-            }
-            catch (WebException err)
-            {
-                throw new InternalServerException("Failed to proxy " + url, err);
-            }
-            catch (NotSupportedException err)
-            {
-                throw new InternalServerException("Failed to proxy " + url, err);
-            }
-            catch (IOException err)
-            {
-                throw new InternalServerException("Failed to proxy " + url, err);
-            }
-            catch (FormatException err)
-            {
-                throw new InternalServerException("Failed to proxy " + url, err);
-            }
-            catch (ObjectDisposedException err)
-            {
-                throw new InternalServerException("Failed to proxy " + url, err);
-            }
-            catch (ArgumentNullException err)
-            {
-                throw new InternalServerException("Failed to proxy " + url, err);
-            }
-
-            return true;
-        }
-    }
-}
\ No newline at end of file
diff --git a/HttpServer/trunk/HttpServer/HttpModules/WebSiteModule.cs b/HttpServer/trunk/HttpServer/HttpModules/WebSiteModule.cs
deleted file mode 100644
index aad1eb7..0000000
--- a/HttpServer/trunk/HttpServer/HttpModules/WebSiteModule.cs
+++ /dev/null
@@ -1,70 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.Net;
-using HttpServer;
-using HttpServer.Sessions;
-
-namespace HttpServer.HttpModules
-{
-    /// <summary>
-    /// The website module let's you handle multiple websites in the same server.
-    /// It uses the "Host" header to check which site you want.
-    /// </summary>
-    /// <remarks>It's recommended that you do not
-    /// add any other modules to HttpServer if you are using the website module. Instead,
-    /// add all wanted modules to each website.</remarks>
-    class WebSiteModule : HttpModule
-    {
-        private readonly string _host;
-        readonly List<HttpModule> _modules = new List<HttpModule>();
-        private readonly string _siteName;
-
-        /// <summary>
-        ///
-        /// </summary>
-        /// <param name="host">domain name that should be handled.</param>
-        /// <param name="name"></param>
-        public WebSiteModule(string host, string name)
-        {
-            _host = host;
-            _siteName = name;
-        }
-
-        /// <summary>
-        /// Name of site.
-        /// </summary>
-        public string SiteName
-        {
-            get { return _siteName; }
-        }
-
-        public bool CanHandle(Uri uri)
-        {
-            return string.Compare(uri.Host, _host, true) == 0;
-        }
-
-        /// <summary>
-        /// Method that process the url
-        /// </summary>
-        /// <param name="request">Information sent by the browser about the request</param>
-        /// <param name="response">Information that is being sent back to the client.</param>
-        /// <param name="session">Session used to </param>
-        public override bool Process(IHttpRequest request, IHttpResponse response, IHttpSession session)
-        {
-            if (!CanHandle(request.Uri))
-                return false;
-
-            bool handled = false;
-            foreach (HttpModule module in _modules)
-            {
-                if (module.Process(request, response, session))
-                    handled = true;
-            }
-
-            if (!handled)
-                response.Status = HttpStatusCode.NotFound;
-
-            return true;
-        }
-    }
-}
diff --git a/HttpServer/trunk/HttpServer/HttpParam.cs b/HttpServer/trunk/HttpServer/HttpParam.cs
deleted file mode 100644
index b389020..0000000
--- a/HttpServer/trunk/HttpServer/HttpParam.cs
+++ /dev/null
@@ -1,114 +0,0 @@
-using System;
-using System.Collections;
-using System.Collections.Generic;
-
-namespace HttpServer
-{
-    /// <summary>
-    /// Returns item either from a form or a query string (checks them in that order)
-    /// </summary>
-    public class HttpParam : IHttpInput
-    {
-		/// <summary> Representation of a non-initialized HttpParam </summary>
-        public static readonly HttpParam Empty = new HttpParam(HttpInput.Empty, HttpInput.Empty);
-
-        private IHttpInput _form;
-        private IHttpInput _query;
-
-    	private List<HttpInputItem> _items = new List<HttpInputItem>();
-
-		/// <summary>Initialises the class to hold a value either from a post request or a querystring request</summary>
-        public HttpParam(IHttpInput form, IHttpInput query)
-        {
-            _form = form;
-            _query = query;
-        }
-
-        #region IHttpInput Members
-
-        /// <summary>
-        /// The add method is not availible for HttpParam
-        /// since HttpParam checks both Request.Form and Request.QueryString
-        /// </summary>
-        /// <param name="name">name identifying the value</param>
-        /// <param name="value">value to add</param>
-        /// <exception cref="NotImplementedException"></exception>
-        [Obsolete("Not implemented for HttpParam")]
-        public void Add(string name, string value)
-        {
-            throw new NotImplementedException();
-        }
-
-        /// <summary>
-        /// Checks whether the form or querystring has the specified value
-        /// </summary>
-        /// <param name="name">Name, case sensitive</param>
-        /// <returns>true if found; otherwise false.</returns>
-        public bool Contains(string name)
-        {
-            return _form.Contains(name) || _query.Contains(name);
-        }
-
-        /// <summary>
-        /// Fetch an item from the form or querystring (in that order).
-        /// </summary>
-        /// <param name="name"></param>
-        /// <returns>Item if found; otherwise HttpInputItem.EmptyLanguageNode</returns>
-        public HttpInputItem this[string name]
-        {
-            get
-            {
-                if (_form[name] != HttpInputItem.Empty)
-                    return _form[name];
-                else
-                    return _query[name];
-            }
-        }
-
-        #endregion
-
-        internal void SetQueryString(HttpInput query)
-        {
-            _query = query;
-        }
-
-		internal void SetForm(HttpInput form)
-        {
-            _form = form;
-        }
-
-        ///<summary>
-        ///Returns an enumerator that iterates through the collection.
-        ///</summary>
-        ///
-        ///<returns>
-        ///A <see cref="T:System.Collections.Generic.IEnumerator`1"></see> that can be used to iterate through the collection.
-        ///</returns>
-        ///<filterpriority>1</filterpriority>
-        IEnumerator<HttpInputItem> IEnumerable<HttpInputItem>.GetEnumerator()
-        {
-			List<HttpInputItem> items = new List<HttpInputItem>(_query);
-			items.AddRange(_form);
-			return items.GetEnumerator();
-        }
-
-        #region IEnumerable Members
-
-        ///<summary>
-        ///Returns an enumerator that iterates through a collection.
-        ///</summary>
-        ///
-        ///<returns>
-        ///An <see cref="T:System.Collections.IEnumerator"></see> object that can be used to iterate through the collection.
-        ///</returns>
-        ///<filterpriority>2</filterpriority>
-        public IEnumerator GetEnumerator()
-        {
-			List<HttpInputItem> items = new List<HttpInputItem>(_query);
-			items.AddRange(_form);
-        	return items.GetEnumerator();
-        }
-
-        #endregion
-    }
-}
diff --git a/HttpServer/trunk/HttpServer/HttpRequest.cs b/HttpServer/trunk/HttpServer/HttpRequest.cs
deleted file mode 100644
index 4758779..0000000
--- a/HttpServer/trunk/HttpServer/HttpRequest.cs
+++ /dev/null
@@ -1,439 +0,0 @@
-using System;
-using System.Collections.Specialized;
-using System.IO;
-using System.Text;
-using HttpServer.Exceptions;
-using HttpServer.FormDecoders;
-
-namespace HttpServer
-{
-    /// <summary>
-    /// Contains server side HTTP request information.
-    /// </summary>
-    public class HttpRequest : IHttpRequest
-    {
-        /// <summary>
-        /// Chars used to split an URL path into multiple parts.
-        /// </summary>
-        public static readonly char[] UriSplitters = new[] { '/' };
-        public static uint baseID = 0;
-
-        private readonly NameValueCollection _headers = new NameValueCollection();
-        private readonly HttpParam _param = new HttpParam(HttpInput.Empty, HttpInput.Empty);
-        private Stream _body = new MemoryStream();
-        private int _bodyBytesLeft;
-        private ConnectionType _connection = ConnectionType.KeepAlive;
-        private int _contentLength;
-        private HttpForm _form = HttpForm.EmptyForm;
-        private string _httpVersion = string.Empty;
-        private string _method = string.Empty;
-        private HttpInput _queryString = HttpInput.Empty;
-        private Uri _uri = HttpHelper.EmptyUri;
-        private string _uriPath;
-        public readonly IHttpClientContext _context;
-
-        public HttpRequest(IHttpClientContext pContext)
-        {
-            ID = baseID++;
-            _context = pContext;
-        }
-
-        public uint ID { get; private set; }
-
-        /// <summary>
-        /// Gets or sets a value indicating whether this <see cref="HttpRequest"/> is secure.
-        /// </summary>
-        public bool Secure { get; internal set; }
-
-        public IHttpClientContext Context { get { return _context; } }
-        /// <summary>
-        /// Path and query (will be merged with the host header) and put in Uri
-        /// </summary>
-        /// <see cref="Uri"/>
-        public string UriPath
-        {
-            get { return _uriPath; }
-            set
-            {
-                _uriPath = value;
-                int pos = _uriPath.IndexOf('?');
-                if (pos != -1)
-                {
-                    _queryString = HttpHelper.ParseQueryString(_uriPath.Substring(pos + 1));
-                    _param.SetQueryString(_queryString);
-                    string path = _uriPath.Substring(0, pos);
-                    _uriPath = System.Web.HttpUtility.UrlDecode(path) + "?" + _uriPath.Substring(pos + 1);
-                    UriParts = value.Substring(0, pos).Split(UriSplitters, StringSplitOptions.RemoveEmptyEntries);
-                }
-                else
-                {
-                    _uriPath = System.Web.HttpUtility.UrlDecode(_uriPath);
-                    UriParts = value.Split(UriSplitters, StringSplitOptions.RemoveEmptyEntries);
-                }
-            }
-        }
-
-        /// <summary>
-        /// Assign a form.
-        /// </summary>
-        /// <param name="form"></param>
-        internal void AssignForm(HttpForm form)
-        {
-            _form = form;
-        }
-
-        internal static bool ShouldReplyTo100Continue(IHttpRequest request)
-        {
-            string expectHeader = request.Headers["expect"];
-            return expectHeader != null && expectHeader.Contains("100-continue");
-        }
-
-        #region IHttpRequest Members
-
-        /// <summary>
-        /// Gets whether the body is complete.
-        /// </summary>
-        public bool BodyIsComplete
-        {
-            get { return _bodyBytesLeft == 0; }
-        }
-
-        /// <summary>
-        /// Gets kind of types accepted by the client.
-        /// </summary>
-        public string[] AcceptTypes { get; private set; }
-
-        /// <summary>
-        /// Gets or sets body stream.
-        /// </summary>
-        public Stream Body
-        {
-            get { return _body; }
-            set { _body = value; }
-        }
-
-        /// <summary>
-        /// Gets or sets kind of connection used for the session.
-        /// </summary>
-        public ConnectionType Connection
-        {
-            get { return _connection; }
-            set { _connection = value; }
-        }
-
-        /// <summary>
-        /// Gets or sets number of bytes in the body.
-        /// </summary>
-        public int ContentLength
-        {
-            get { return _contentLength; }
-            set
-            {
-                _contentLength = value;
-                _bodyBytesLeft = value;
-            }
-        }
-
-        /// <summary>
-        /// Gets headers sent by the client.
-        /// </summary>
-        public NameValueCollection Headers
-        {
-            get { return _headers; }
-        }
-
-        /// <summary>
-        /// Gets or sets version of HTTP protocol that's used.
-        /// </summary>
-        /// <remarks>
-        /// Probably <see cref="HttpHelper.HTTP10"/> or <see cref="HttpHelper.HTTP11"/>.
-        /// </remarks>
-        /// <seealso cref="HttpHelper"/>
-        public string HttpVersion
-        {
-            get { return _httpVersion; }
-            set { _httpVersion = value; }
-        }
-
-
-        /// <summary>
-        /// Gets or sets requested method.
-        /// </summary>
-        /// <value></value>
-        /// <remarks>
-        /// Will always be in upper case.
-        /// </remarks>
-        /// <see cref="HttpServer.Method"/>
-        public string Method
-        {
-            get { return _method; }
-            set { _method = value; }
-        }
-
-        /// <summary>
-        /// Gets variables sent in the query string
-        /// </summary>
-        public HttpInput QueryString
-        {
-            get { return _queryString; }
-        }
-
-
-        /// <summary>
-        /// Gets or sets requested URI.
-        /// </summary>
-        public Uri Uri
-        {
-            get { return _uri; }
-            set
-            {
-                _uri = value ?? HttpHelper.EmptyUri;
-                UriParts = _uri.AbsolutePath.Split(UriSplitters, StringSplitOptions.RemoveEmptyEntries);
-            }
-        }
-
-        /// <summary>
-        /// Uri absolute path splitted into parts.
-        /// </summary>
-        /// <example>
-        /// // uri is: http://gauffin.com/code/tiny/
-        /// Console.WriteLine(request.UriParts[0]); // result: code
-        /// Console.WriteLine(request.UriParts[1]); // result: tiny
-        /// </example>
-        /// <remarks>
-        /// If you're using controllers than the first part is controller name,
-        /// the second part is method name and the third part is Id property.
-        /// </remarks>
-        /// <seealso cref="Uri"/>
-        public string[] UriParts { get; private set; }
-
-        /// <summary>
-        /// Gets parameter from <see cref="QueryString"/> or <see cref="Form"/>.
-        /// </summary>
-        public HttpParam Param
-        {
-            get { return _param; }
-        }
-
-        /// <summary>
-        /// Gets form parameters.
-        /// </summary>
-        public HttpForm Form
-        {
-            get { return _form; }
-        }
-
-        /// <summary>
-        /// Gets whether the request was made by Ajax (Asynchronous JavaScript)
-        /// </summary>
-        public bool IsAjax { get; private set; }
-
-        /// <summary>
-        /// Gets cookies that was sent with the request.
-        /// </summary>
-        public RequestCookies Cookies { get; private set; }
-
-        ///<summary>
-        ///Creates a new object that is a copy of the current instance.
-        ///</summary>
-        ///
-        ///<returns>
-        ///A new object that is a copy of this instance.
-        ///</returns>
-        ///<filterpriority>2</filterpriority>
-        public object Clone()
-        {
-            // this method was mainly created for testing.
-            // dont use it that much...
-            var request = new HttpRequest(Context);
-            request.Method = _method;
-            if (AcceptTypes != null)
-            {
-                request.AcceptTypes = new string[AcceptTypes.Length];
-                AcceptTypes.CopyTo(request.AcceptTypes, 0);
-            }
-            request._httpVersion = _httpVersion;
-            request._queryString = _queryString;
-            request.Uri = _uri;
-
-            var buffer = new byte[_body.Length];
-            _body.Read(buffer, 0, (int)_body.Length);
-            request.Body = new MemoryStream();
-            request.Body.Write(buffer, 0, buffer.Length);
-            request.Body.Seek(0, SeekOrigin.Begin);
-            request.Body.Flush();
-
-            request._headers.Clear();
-            foreach (string key in _headers)
-            {
-                string[] values = _headers.GetValues(key);
-                if (values != null)
-                    foreach (string value in values)
-                        request.AddHeader(key, value);
-            }
-            return request;
-        }
-
-        /// <summary>
-        /// Decode body into a form.
-        /// </summary>
-        /// <param name="providers">A list with form decoders.</param>
-        /// <exception cref="InvalidDataException">If body contents is not valid for the chosen decoder.</exception>
-        /// <exception cref="InvalidOperationException">If body is still being transferred.</exception>
-        public void DecodeBody(FormDecoderProvider providers)
-        {
-            if (_bodyBytesLeft > 0)
-                throw new InvalidOperationException("Body have not yet been completed.");
-
-            _form = providers.Decode(_headers["content-type"], _body, Encoding.UTF8);
-            if (_form != HttpInput.Empty)
-                _param.SetForm(_form);
-        }
-
-        ///<summary>
-        /// Cookies
-        ///</summary>
-        ///<param name="cookies">the cookies</param>
-        public void SetCookies(RequestCookies cookies)
-        {
-            Cookies = cookies;
-        }
-
-        /// <summary>
-        /// Create a response object.
-        /// </summary>
-        /// <returns>A new <see cref="IHttpResponse"/>.</returns>
-        public IHttpResponse CreateResponse(IHttpClientContext context)
-        {
-            return new HttpResponse(context, this);
-        }
-
-        /// <summary>
-        /// Called during parsing of a <see cref="IHttpRequest"/>.
-        /// </summary>
-        /// <param name="name">Name of the header, should not be URL encoded</param>
-        /// <param name="value">Value of the header, should not be URL encoded</param>
-        /// <exception cref="BadRequestException">If a header is incorrect.</exception>
-        public void AddHeader(string name, string value)
-        {
-            if (string.IsNullOrEmpty(name))
-                throw new BadRequestException("Invalid header name: " + name ?? "<null>");
-            if (string.IsNullOrEmpty(value))
-                throw new BadRequestException("Header '" + name + "' do not contain a value.");
-
-            name = name.ToLowerInvariant();
-
-            switch (name)
-            {
-                case "http_x_requested_with":
-                case "x-requested-with":
-                    if (string.Compare(value, "XMLHttpRequest", true) == 0)
-                        IsAjax = true;
-                    break;
-                case "accept":
-                    AcceptTypes = value.Split(',');
-                    for (int i = 0; i < AcceptTypes.Length; ++i)
-                        AcceptTypes[i] = AcceptTypes[i].Trim();
-                    break;
-                case "content-length":
-                    int t;
-                    if (!int.TryParse(value, out t))
-                        throw new BadRequestException("Invalid content length.");
-                    ContentLength = t;
-                    break; //todo: maybe throw an exception
-                case "host":
-                    try
-                    {
-                        _uri = new Uri(Secure ? "https://" : "http://" + value + _uriPath);
-                        UriParts = _uri.AbsolutePath.Split(UriSplitters, StringSplitOptions.RemoveEmptyEntries);
-                    }
-                    catch (UriFormatException err)
-                    {
-                        throw new BadRequestException("Failed to parse uri: " + value + _uriPath, err);
-                    }
-                    break;
-                case "remote_addr":
-                    // to prevent hacking (since it's added by IHttpClientContext before parsing).
-                    if (_headers[name] == null)
-                        _headers.Add(name, value);
-                    break;
-
-                case "connection":
-                    if (string.Compare(value, "close", true) == 0)
-                        Connection = ConnectionType.Close;
-                    else if (value.StartsWith("keep-alive", StringComparison.CurrentCultureIgnoreCase))
-                        Connection = ConnectionType.KeepAlive;
-                    else if (value.StartsWith("Upgrade", StringComparison.CurrentCultureIgnoreCase))
-                        Connection = ConnectionType.KeepAlive;
-                    else
-                        throw new BadRequestException("Unknown 'Connection' header type.");
-                    break;
-
-                case "expect":
-                    if (value.Contains("100-continue"))
-                    {
-
-                    }
-                    _headers.Add(name, value);
-                    break;
-
-                default:
-                    _headers.Add(name, value);
-                    break;
-            }
-        }
-
-        /// <summary>
-        /// Add bytes to the body
-        /// </summary>
-        /// <param name="bytes">buffer to read bytes from</param>
-        /// <param name="offset">where to start read</param>
-        /// <param name="length">number of bytes to read</param>
-        /// <returns>Number of bytes actually read (same as length unless we got all body bytes).</returns>
-        /// <exception cref="InvalidOperationException">If body is not writable</exception>
-        /// <exception cref="ArgumentNullException"><c>bytes</c> is null.</exception>
-        /// <exception cref="ArgumentOutOfRangeException"><c>offset</c> is out of range.</exception>
-        public int AddToBody(byte[] bytes, int offset, int length)
-        {
-            if (bytes == null)
-                throw new ArgumentNullException("bytes");
-            if (offset + length > bytes.Length)
-                throw new ArgumentOutOfRangeException("offset");
-            if (length == 0)
-                return 0;
-            if (!_body.CanWrite)
-                throw new InvalidOperationException("Body is not writable.");
-
-            if (length > _bodyBytesLeft)
-            {
-                length = _bodyBytesLeft;
-            }
-
-            _body.Write(bytes, offset, length);
-            _bodyBytesLeft -= length;
-
-            return length;
-        }
-
-        /// <summary>
-        /// Clear everything in the request
-        /// </summary>
-        public void Clear()
-        {
-            if (_body != null && _body.CanRead)
-                _body.Dispose();
-            _body = null;
-            _contentLength = 0;
-            _method = string.Empty;
-            _uri = HttpHelper.EmptyUri;
-            _queryString = HttpInput.Empty;
-            _bodyBytesLeft = 0;
-            _headers.Clear();
-            _connection = ConnectionType.KeepAlive;
-            IsAjax = false;
-            _form.Clear();
-        }
-
-        #endregion
-    }
-}
\ No newline at end of file
diff --git a/HttpServer/trunk/HttpServer/HttpResponse.cs b/HttpServer/trunk/HttpServer/HttpResponse.cs
deleted file mode 100644
index 41b357f..0000000
--- a/HttpServer/trunk/HttpServer/HttpResponse.cs
+++ /dev/null
@@ -1,675 +0,0 @@
-using System;
-using System.Collections.Specialized;
-using System.IO;
-using System.Net;
-using System.Net.Sockets;
-using System.Text;
-using System.Threading.Tasks;
-
-namespace HttpServer
-{
-    public class HttpResponse : IHttpResponse
-    {
-        private const string DefaultContentType = "text/html;charset=UTF-8";
-        private readonly IHttpClientContext m_context;
-        private readonly ResponseCookies _cookies = new ResponseCookies();
-        private readonly NameValueCollection m_headers = new NameValueCollection();
-        private string _httpVersion;
-        private Stream _body;
-        private long _contentLength;
-        private string _contentType;
-        private Encoding _encoding = Encoding.UTF8;
-        private int _keepAlive = 60;
-        public uint requestID { get; private set; }
-        public byte[] RawBuffer { get; set; }
-        public int RawBufferStart { get; set; }
-        public int RawBufferLen { get; set; }
-
-        internal byte[] m_headerBytes = null;
-
-        /// <summary>
-        /// Initializes a new instance of the <see cref="IHttpResponse"/> class.
-        /// </summary>
-        /// <param name="context">Client that send the <see cref="IHttpRequest"/>.</param>
-        /// <param name="request">Contains information of what the client want to receive.</param>
-        /// <exception cref="ArgumentException"><see cref="IHttpRequest.HttpVersion"/> cannot be empty.</exception>
-        public HttpResponse(IHttpClientContext context, IHttpRequest request)
-        {
-            Check.Require(context, "context");
-            Check.Require(request, "request");
-
-            _httpVersion = request.HttpVersion;
-            if (string.IsNullOrEmpty(_httpVersion))
-                _httpVersion = "HTTP/1.0";
-
-            Status = HttpStatusCode.OK;
-            m_context = context;
-            m_Connetion = request.Connection;
-            requestID = request.ID;
-            RawBufferStart = -1;
-            RawBufferLen = -1;
-        }
-
-        /// <summary>
-        /// Initializes a new instance of the <see cref="IHttpResponse"/> class.
-        /// </summary>
-        /// <param name="context">Client that send the <see cref="IHttpRequest"/>.</param>
-        /// <param name="httpVersion">Version of HTTP protocol that the client uses.</param>
-        /// <param name="connectionType">Type of HTTP connection used.</param>
-        internal HttpResponse(IHttpClientContext context, string httpVersion, ConnectionType connectionType)
-        {
-            Check.NotEmpty(httpVersion, "httpVersion");
-
-            Status = HttpStatusCode.OK;
-            m_context = context;
-            _httpVersion = httpVersion;
-            m_Connetion = connectionType;
-        }
-        private ConnectionType m_Connetion;
-        public ConnectionType Connection
-        {
-            get { return m_Connetion; }
-            set { return; }
-        }
-
-        private int m_priority = 0;
-        public int Priority
-        {
-            get { return m_priority;}
-            set { m_priority = (value > 0 && m_priority < 3)? value : 0;}
-        }
-
-        #region IHttpResponse Members
-
-        /// <summary>
-        /// The body stream is used to cache the body contents
-        /// before sending everything to the client. It's the simplest
-        /// way to serve documents.
-        /// </summary>
-        public Stream Body
-        {
-            get
-            {
-                if(_body == null)
-                    _body = new MemoryStream();
-                return _body;
-            }
-            set { _body = value; }
-        }
-
-        /// <summary>
-        /// The chunked encoding modifies the body of a message in order to
-        /// transfer it as a series of chunks, each with its own size indicator,
-        /// followed by an OPTIONAL trailer containing entity-header fields. This
-        /// allows dynamically produced content to be transferred along with the
-        /// information necessary for the recipient to verify that it has
-        /// received the full message.
-        /// </summary>
-        public bool Chunked { get; set; }
-
-
-        /// <summary>
-        /// Defines the version of the HTTP Response for applications where it's required
-        /// for this to be forced.
-        /// </summary>
-        public string ProtocolVersion
-        {
-            get { return _httpVersion; }
-            set { _httpVersion = value; }
-        }
-
-        /// <summary>
-        /// Encoding to use when sending stuff to the client.
-        /// </summary>
-        /// <remarks>Default is UTF8</remarks>
-        public Encoding Encoding
-        {
-            get { return _encoding; }
-            set { _encoding = value; }
-        }
-
-
-        /// <summary>
-        /// Number of seconds to keep connection alive
-        /// </summary>
-        /// <remarks>Only used if Connection property is set to <see cref="ConnectionType.KeepAlive"/>.</remarks>
-        public int KeepAlive
-        {
-            get { return _keepAlive; }
-            set
-            {
-                if (value > 400)
-                    _keepAlive = 400;
-                else if (value <= 0)
-                    _keepAlive = 0;
-                else
-                    _keepAlive = value;
-            }
-        }
-
-        /// <summary>
-        /// Status code that is sent to the client.
-        /// </summary>
-        /// <remarks>Default is <see cref="HttpStatusCode.OK"/></remarks>
-        public HttpStatusCode Status { get; set; }
-
-        /// <summary>
-        /// Information about why a specific status code was used.
-        /// </summary>
-        public string Reason { get; set; }
-
-        /// <summary>
-        /// Size of the body. MUST be specified before sending the header,
-        /// unless property Chunked is set to true.
-        /// </summary>
-        public long ContentLength
-        {
-            get { return _contentLength; }
-            set { _contentLength = value; }
-        }
-
-        /// <summary>
-        /// Kind of content in the body
-        /// </summary>
-        /// <remarks>Default type is "text/html"</remarks>
-        public string ContentType
-        {
-            get { return _contentType; }
-            set { _contentType = value; }
-        }
-
-        /// <summary>
-        /// Headers have been sent to the client-
-        /// </summary>
-        /// <remarks>You can not send any additional headers if they have already been sent.</remarks>
-        public bool HeadersSent { get; private set; }
-
-        /// <summary>
-        /// The whole response have been sent.
-        /// </summary>
-        public bool Sent { get; private set; }
-
-        /// <summary>
-        /// Cookies that should be created/changed.
-        /// </summary>
-        public ResponseCookies Cookies
-        {
-            get { return _cookies; }
-        }
-
-        /// <summary>
-        /// Add another header to the document.
-        /// </summary>
-        /// <param name="name">Name of the header, case sensitive, use lower cases.</param>
-        /// <param name="value">Header values can span over multiple lines as long as each line starts with a white space. New line chars should be \r\n</param>
-        /// <exception cref="InvalidOperationException">If headers already been sent.</exception>
-        /// <exception cref="ArgumentException">If value conditions have not been met.</exception>
-        /// <remarks>Adding any header will override the default ones and those specified by properties.</remarks>
-        public void AddHeader(string name, string value)
-        {
-            if (HeadersSent)
-                throw new InvalidOperationException("Headers have already been sent.");
-
-            for (int i = 1; i < value.Length; ++i)
-            {
-                if (value[i] == '\r' && !char.IsWhiteSpace(value[i - 1]))
-                    throw new ArgumentException("New line in value do not start with a white space.");
-                if (value[i] == '\n' && value[i - 1] != '\r')
-                    throw new ArgumentException("Invalid new line sequence, should be \\r\\n (crlf).");
-            }
-
-            m_headers[name] = value;
-        }
-
-        /// <summary>
-        /// Send headers and body to the browser.
-        /// </summary>
-        /// <exception cref="InvalidOperationException">If content have already been sent.</exception>
-        public void SendOri()
-        {
-            if (Sent)
-                throw new InvalidOperationException("Everything have already been sent.");
-
-            m_context.ReqResponseAboutToSend(requestID);
-            if (m_context.MAXRequests == 0 || _keepAlive == 0)
-            {
-                Connection = ConnectionType.Close;
-                m_context.TimeoutKeepAlive = 0;
-            }
-            else
-            {
-                if (_keepAlive > 0)
-                    m_context.TimeoutKeepAlive = _keepAlive * 1000;
-            }
-
-            if (!HeadersSent)
-            {
-                if (!SendHeaders())
-                {
-                    _body.Dispose();
-                    Sent = true;
-                    return;
-                }
-            }
-
-            if(RawBuffer != null)
-            {
-                if(RawBufferStart >= 0 && RawBufferLen > 0)
-                {
-                    if (RawBufferStart > RawBuffer.Length)
-                        RawBufferStart = 0;
-
-                    if (RawBufferLen + RawBufferStart > RawBuffer.Length)
-                        RawBufferLen = RawBuffer.Length - RawBufferStart;
-
-                    /*
-                    int curlen;
-                    while(RawBufferLen > 0)
-                    {
-                        curlen = RawBufferLen;
-                        if(curlen > 8192)
-                            curlen = 8192;
-                        if (!_context.Send(RawBuffer, RawBufferStart, curlen))
-                        {
-                            RawBuffer = null;
-                            RawBufferStart = -1;
-                            RawBufferLen = -1;
-                            Body.Dispose();
-                            return;
-                        }
-                        RawBufferLen -= curlen;
-                        RawBufferStart += curlen;
-                    }
-                    */
-                    if(RawBufferLen > 0)
-                    {
-                        if (!m_context.Send(RawBuffer, RawBufferStart, RawBufferLen))
-                        {
-                            RawBuffer = null;
-                            RawBufferStart = -1;
-                            RawBufferLen = -1;
-                            if(_body != null)
-                                _body.Dispose();
-                            Sent = true;
-                            return;
-                        }
-                    }
-                }
-
-                RawBuffer = null;
-                RawBufferStart = -1;
-                RawBufferLen = -1;
-            }
-
-            if(_body != null && _body.Length > 0)
-            {
-                _body.Flush();
-                _body.Seek(0, SeekOrigin.Begin);
-
-                var buffer = new byte[8192];
-                int bytesRead = _body.Read(buffer, 0, 8192);
-                while (bytesRead > 0)
-                {
-                    if (!m_context.Send(buffer, 0, bytesRead))
-                        break;
-                    bytesRead = _body.Read(buffer, 0, 8192);
-                }
-
-                _body.Dispose();
-            }
-            Sent = true;
-            m_context.ReqResponseSent(requestID, Connection);
-        }
-
-
-        /// <summary>
-        /// Make sure that you have specified <see cref="ContentLength"/> and sent the headers first.
-        /// </summary>
-        /// <param name="buffer"></param>
-        /// <exception cref="InvalidOperationException">If headers have not been sent.</exception>
-        /// <see cref="SendHeaders"/>
-        /// <param name="offset">offset of first byte to send</param>
-        /// <param name="count">number of bytes to send.</param>
-        /// <seealso cref="Send"/>
-        /// <seealso cref="SendHeaders"/>
-        /// <remarks>This method can be used if you want to send body contents without caching them first. This
-        /// is recommended for larger files to keep the memory usage low.</remarks>
-        public bool SendBody(byte[] buffer, int offset, int count)
-        {
-            if (!HeadersSent)
-                throw new InvalidOperationException("Send headers, and remember to specify ContentLength first.");
-
-            bool sent = m_context.Send(buffer, offset, count);
-            Sent = true;
-            if (sent)
-                m_context.ReqResponseSent(requestID, Connection);
-            return sent;
-        }
-
-        /// <summary>
-        /// Make sure that you have specified <see cref="ContentLength"/> and sent the headers first.
-        /// </summary>
-        /// <param name="buffer"></param>
-        /// <exception cref="InvalidOperationException">If headers have not been sent.</exception>
-        /// <see cref="SendHeaders"/>
-        /// <seealso cref="Send"/>
-        /// <seealso cref="SendHeaders"/>
-        /// <remarks>This method can be used if you want to send body contents without caching them first. This
-        /// is recommended for larger files to keep the memory usage low.</remarks>
-        public bool SendBody(byte[] buffer)
-        {
-            if (!HeadersSent)
-                throw new InvalidOperationException("Send headers, and remember to specify ContentLength first.");
-
-            bool sent = m_context.Send(buffer);
-            if (sent)
-                m_context.ReqResponseSent(requestID, Connection);
-            Sent = true;
-            return sent;
-        }
-
-        /// <summary>
-        /// Send headers to the client.
-        /// </summary>
-        /// <exception cref="InvalidOperationException">If headers already been sent.</exception>
-        /// <seealso cref="AddHeader"/>
-        /// <seealso cref="Send"/>
-        /// <seealso cref="SendBody(byte[])"/>
-        public bool SendHeaders()
-        {
-            if (HeadersSent)
-                throw new InvalidOperationException("Header have already been sent.");
-
-            HeadersSent = true;
-
-            if (m_headers["Date"] == null)
-                m_headers["Date"] = DateTime.Now.ToString("r");
-            if (m_headers["Content-Length"] == null)
-            {
-                int len = (int)_contentLength;
-                if(len == 0)
-                {
-                    if(_body != null)
-                        len = (int)_body.Length;
-                    if(RawBuffer != null)
-                        len += RawBufferLen;
-                }
-                m_headers["Content-Length"] = len.ToString();
-            }
-            if (m_headers["Content-Type"] == null)
-                m_headers["Content-Type"] = _contentType ?? DefaultContentType;
-            if (m_headers["Server"] == null)
-                m_headers["Server"] = "Tiny WebServer";
-
-            int keepaliveS = m_context.TimeoutKeepAlive / 1000;
-            if (Connection == ConnectionType.KeepAlive && keepaliveS > 0 && m_context.MAXRequests > 0)
-            {
-                m_headers["Keep-Alive"] = "timeout=" + keepaliveS + ", max=" + m_context.MAXRequests;
-                m_headers["Connection"] = "Keep-Alive";
-            }
-            else
-                m_headers["Connection"] = "close";
-
-            var sb = new StringBuilder();
-            sb.AppendFormat("{0} {1} {2}\r\n", _httpVersion, (int)Status,
-                            string.IsNullOrEmpty(Reason) ? Status.ToString() : Reason);
-
-            for (int i = 0; i < m_headers.Count; ++i)
-            {
-                string headerName = m_headers.AllKeys[i];
-                string[] values = m_headers.GetValues(i);
-                if (values == null) continue;
-                foreach (string value in values)
-                    sb.AppendFormat("{0}: {1}\r\n", headerName, value);
-            }
-
-            foreach (ResponseCookie cookie in Cookies)
-                sb.AppendFormat("Set-Cookie: {0}\r\n", cookie);
-
-            sb.Append("\r\n");
-
-            m_headers.Clear();
-
-            return m_context.Send(Encoding.GetBytes(sb.ToString()));
-        }
-
-        public byte[] GetHeaders()
-        {
-            HeadersSent = true;
-
-            var sb = new StringBuilder();
-            if(string.IsNullOrWhiteSpace(_httpVersion))
-                sb.AppendFormat("HTTP1/0 {0} {1}\r\n", (int)Status,
-                                string.IsNullOrEmpty(Reason) ? Status.ToString() : Reason);
-            else
-                sb.AppendFormat("{0} {1} {2}\r\n", _httpVersion, (int)Status,
-                                string.IsNullOrEmpty(Reason) ? Status.ToString() : Reason);
-
-            if (m_headers["Date"] == null)
-                sb.AppendFormat("Date: {0}\r\n", DateTime.Now.ToString("r"));
-            if (m_headers["Content-Length"] == null)
-            {
-                long len = _contentLength;
-                if (len == 0)
-                {
-                    len = Body.Length;
-                    if (RawBuffer != null && RawBufferLen > 0)
-                        len += RawBufferLen;
-                }
-                sb.AppendFormat("Content-Length: {0}\r\n", len);
-            }
-            if (m_headers["Content-Type"] == null)
-                sb.AppendFormat("Content-Type: {0}\r\n", _contentType ?? DefaultContentType);
-            if (m_headers["Server"] == null)
-                sb.Append("Server: OSWebServer\r\n");
-
-            int keepaliveS = m_context.TimeoutKeepAlive / 1000;
-            if (Connection == ConnectionType.KeepAlive && keepaliveS > 0 && m_context.MAXRequests > 0)
-            {
-                sb.AppendFormat("Keep-Alive:timeout={0}, max={1}\r\n", keepaliveS, m_context.MAXRequests);
-                sb.Append("Connection: Keep-Alive\r\n");
-            }
-            else
-                sb.Append("Connection: close\r\n");
-
-            if (m_headers["Connection"] != null)
-                m_headers["Connection"] = null;
-            if (m_headers["Keep-Alive"] != null)
-                m_headers["Keep-Alive"] = null;
-
-            for (int i = 0; i < m_headers.Count; ++i)
-            {
-                string headerName = m_headers.AllKeys[i];
-                string[] values = m_headers.GetValues(i);
-                if (values == null) continue;
-                foreach (string value in values)
-                    sb.AppendFormat("{0}: {1}\r\n", headerName, value);
-            }
-
-            foreach (ResponseCookie cookie in Cookies)
-                sb.AppendFormat("Set-Cookie: {0}\r\n", cookie);
-
-            sb.Append("\r\n");
-
-            m_headers.Clear();
-
-            return Encoding.GetBytes(sb.ToString());
-        }
-
-        public void Send()
-        {
-            if (Sent)
-                throw new InvalidOperationException("Everything have already been sent.");
-
-            if (m_context.MAXRequests == 0 || _keepAlive == 0)
-            {
-                Connection = ConnectionType.Close;
-                m_context.TimeoutKeepAlive = 0;
-            }
-            else
-            {
-                if (_keepAlive > 0)
-                    m_context.TimeoutKeepAlive = _keepAlive * 1000;
-            }
-
-            m_headerBytes = GetHeaders();
-            if (RawBuffer != null)
-            {
-                if (RawBufferStart < 0 || RawBufferStart > RawBuffer.Length)
-                    return;
-
-                if (RawBufferLen < 0)
-                    RawBufferLen = RawBuffer.Length;
-
-                if (RawBufferLen + RawBufferStart > RawBuffer.Length)
-                    RawBufferLen = RawBuffer.Length - RawBufferStart;
-
-                int tlen = m_headerBytes.Length + RawBufferLen;
-                if(RawBufferLen > 0 && tlen < 16384)
-                {
-                    byte[] tmp = new byte[tlen];
-                    Array.Copy(m_headerBytes, tmp, m_headerBytes.Length);
-                    Array.Copy(RawBuffer, RawBufferStart, tmp, m_headerBytes.Length, RawBufferLen);
-                    m_headerBytes = null;
-                    RawBuffer = tmp;
-                    RawBufferStart = 0;
-                    RawBufferLen = tlen;
-                }
-            }
-            m_context.StartSendResponse(this);
-        }
-
-        public async Task SendNextAsync(int bytesLimit)
-        {
-            if (m_headerBytes != null)
-            {
-                if(!await m_context.SendAsync(m_headerBytes, 0, m_headerBytes.Length).ConfigureAwait(false))
-                {
-                    if(_body != null)
-                        _body.Dispose();
-                    RawBuffer = null;
-                    Sent = true;
-                    return;
-                }
-                bytesLimit -= m_headerBytes.Length;
-                m_headerBytes = null;
-                if(bytesLimit <= 0)
-                {
-                    m_context.ContinueSendResponse();
-                    return;
-                }
-            }
-
-            if (RawBuffer != null)
-            {
-                if (RawBufferLen > 0)
-                {
-                    bool sendRes;
-                    if(RawBufferLen > bytesLimit)
-                    {
-                        sendRes = await m_context.SendAsync(RawBuffer, RawBufferStart, bytesLimit).ConfigureAwait(false);
-                        RawBufferLen -= bytesLimit;
-                        RawBufferStart += bytesLimit;
-                    }
-                    else
-                    {
-                        sendRes = await m_context.SendAsync(RawBuffer, RawBufferStart, RawBufferLen).ConfigureAwait(false);
-                        RawBufferLen = 0;
-                    }
-
-                    if (!sendRes)
-                    {
-                        RawBuffer = null;
-                        if(_body != null)
-                            Body.Dispose();
-                        Sent = true;
-                        return;
-                    }
-                }
-                if (RawBufferLen <= 0)
-                    RawBuffer = null;
-                else
-                {
-                    m_context.ContinueSendResponse();
-                    return;
-                }
-            }
-
-            if (_body != null && _body.Length != 0)
-            {
-                _body.Flush();
-                _body.Seek(0, SeekOrigin.Begin);
-
-                RawBuffer = new byte[_body.Length];
-                RawBufferLen = _body.Read(RawBuffer, 0, (int)_body.Length);
-                _body.Dispose();
-
-                if(RawBufferLen > 0)
-                {
-                    bool sendRes;
-                    if (RawBufferLen > bytesLimit)
-                    {
-                        sendRes = await m_context.SendAsync(RawBuffer, RawBufferStart, bytesLimit).ConfigureAwait(false);
-                        RawBufferLen -= bytesLimit;
-                        RawBufferStart += bytesLimit;
-                    }
-                    else
-                    {
-                        sendRes = await m_context.SendAsync(RawBuffer, RawBufferStart, RawBufferLen).ConfigureAwait(false);
-                        RawBufferLen = 0;
-                    }
-
-                    if (!sendRes)
-                    {
-                        RawBuffer = null;
-                        Sent = true;
-                        return;
-                    }
-                }
-                if (RawBufferLen > 0)
-                {
-                    m_context.ContinueSendResponse();
-                    return;
-                }
-            }
-
-            if (_body != null)
-                _body.Dispose();
-            Sent = true;
-            m_context.ReqResponseSent(requestID, Connection);
-        }
-
-        /// <summary>
-        /// Redirect client to somewhere else using the 302 status code.
-        /// </summary>
-        /// <param name="uri">Destination of the redirect</param>
-        /// <exception cref="InvalidOperationException">If headers already been sent.</exception>
-        /// <remarks>You can not do anything more with the request when a redirect have been done. This should be your last
-        /// action.</remarks>
-        public void Redirect(Uri uri)
-        {
-            Status = HttpStatusCode.Redirect;
-            m_headers["location"] = uri.ToString();
-        }
-
-        /// <summary>
-        /// redirect to somewhere
-        /// </summary>
-        /// <param name="url">where the redirect should go</param>
-        /// <remarks>
-        /// No body are allowed when doing redirects.
-        /// </remarks>
-        public void Redirect(string url)
-        {
-            Status = HttpStatusCode.Redirect;
-            m_headers["location"] = url;
-        }
-
-        public void Clear()
-        {
-            if(Body != null && Body.CanRead)
-                Body.Dispose();
-        }
-        #endregion
-    }
-}
\ No newline at end of file
diff --git a/HttpServer/trunk/HttpServer/HttpResponseImp.cs b/HttpServer/trunk/HttpServer/HttpResponseImp.cs
deleted file mode 100644
index f3d2f2c..0000000
--- a/HttpServer/trunk/HttpServer/HttpResponseImp.cs
+++ /dev/null
@@ -1,375 +0,0 @@
-using System;
-using System.Collections.Specialized;
-using System.IO;
-using System.Net;
-using System.Net.Sockets;
-using System.Text;
-
-namespace HttpServer
-{
-    /// <summary>
-    /// Response that is sent back to the web browser / client.
-    ///
-    /// A response can be sent if different ways. The easiest one is
-    /// to just fill the Body stream with content, everything else
-    /// will then be taken care of by the framework. The default content-type
-    /// is text/html, you should change it if you send anything else.
-    ///
-    /// The second and slighty more complex way is to send the response
-    /// as parts. Start with sending the header using the SendHeaders method and
-    /// then you can send the body using SendBody method, but do not forget
-    /// to set ContentType and ContentLength before doing so.
-    /// </summary>
-    /// <example>
-    /// public void MyHandler(HttpRequest request, HttpResponse response)
-    /// {
-    ///
-    /// }
-    /// </example>
-    /// todo: add two examples, using SendHeaders/SendBody and just the Body stream.
-    public class HttpResponse
-    {
-        private Stream _body = new MemoryStream();
-        private bool _chunked;
-        private ConnectionType _connection;
-        private readonly HttpClientContext _context;
-        private Encoding _encoding = Encoding.UTF8;
-        private readonly NameValueCollection _headers = new NameValueCollection();
-        private bool _headersSent;
-        private bool _sent;
-        private readonly string _httpVersion;
-        private int _keepAlive = 20;
-        private string _reason;
-        private HttpStatusCode _status;
-        private long _contentLength;
-        private string _contentType;
-        private bool _contentTypeChangedByCode;
-        private readonly ResponseCookies _cookies = new ResponseCookies();
-
-        /// <summary>
-        /// Initializes a new instance of the <see cref="HttpResponse"/> class.
-        /// </summary>
-        /// <param name="context">The context.</param>
-        /// <param name="request">The request.</param>
-        public HttpResponse(HttpClientContext context, HttpRequest request)
-        {
-            _httpVersion = request.HttpVersion;
-            if (string.IsNullOrEmpty(_httpVersion))
-                throw new ArgumentException("HttpVersion in HttpRequest cannot be empty.");
-
-            Status = HttpStatusCode.OK;
-            _context = context;
-            Connection = request.Connection;
-        }
-
-        /// <summary>
-        /// The body stream is used to cache the body contents
-        /// before sending everything to the client. It's the simplest
-        /// way to serve documents.
-        /// </summary>
-        public Stream Body
-        {
-            get { return _body; }
-            set { _body = value; }
-        }
-
-        /// <summary>
-        /// The chunked encoding modifies the body of a message in order to
-        /// transfer it as a series of chunks, each with its own size indicator,
-        /// followed by an OPTIONAL trailer containing entity-header fields. This
-        /// allows dynamically produced content to be transferred along with the
-        /// information necessary for the recipient to verify that it has
-        /// received the full message.
-        /// </summary>
-        public bool Chunked
-        {
-            get { return _chunked; }
-            set { _chunked = value; }
-        }
-
-        /// <summary>
-        /// Kind of connection
-        /// </summary>
-        public ConnectionType Connection
-        {
-            get { return _connection; }
-            set { _connection = value; }
-        }
-
-        /// <summary>
-        /// Encoding to use when sending stuff to the client.
-        /// </summary>
-        /// <remarks>Default is UTF8</remarks>
-        public Encoding Encoding
-        {
-            get { return _encoding; }
-            set { _encoding = value; }
-        }
-
-        /// <summary>
-        /// Number of seconds to keep connection alive
-        /// </summary>
-        /// <remarks>Only used if Connection property is set to ConnectionType.KeepAlive</remarks>
-        public int KeepAlive
-        {
-            get { return _keepAlive; }
-            set { _keepAlive = value; }
-        }
-
-        /// <summary>
-        /// Status code that is sent to the client.
-        /// </summary>
-        /// <remarks>Default is HttpStatusCode.Ok</remarks>
-        public HttpStatusCode Status
-        {
-            get { return _status; }
-            set { _status = value; }
-        }
-
-        /// <summary>
-        /// Information about why a specific status code was used.
-        /// </summary>
-        public string Reason
-        {
-            get { return _reason; }
-            set { _reason = value; }
-        }
-
-        /// <summary>
-        /// Size of the body. MUST be specified before sending the header,
-        /// unless property Chunked is set to true.
-        /// </summary>
-        public long ContentLength
-        {
-            get { return _contentLength; }
-            set { _contentLength = value; }
-        }
-
-        /// <summary>
-        /// Kind of content in the body
-        /// </summary>
-        /// <remarks>Default is text/html</remarks>
-        public string ContentType
-        {
-            get { return _contentType; }
-            set
-            {
-                _contentType = value;
-                _contentTypeChangedByCode = true;
-            }
-        }
-
-        /// <summary>
-        /// Headers have been sent to the client-
-        /// </summary>
-        /// <remarks>You can not send any additional headers if they have already been sent.</remarks>
-        public bool HeadersSent
-        {
-            get { return _headersSent; }
-        }
-
-        /// <summary>
-        /// The whole response have been sent.
-        /// </summary>
-        public bool Sent
-        {
-            get { return _sent; }
-        }
-
-        internal bool ContentTypeChangedByCode
-        {
-            get { return _contentTypeChangedByCode; }
-            set { _contentTypeChangedByCode = value; }
-        }
-
-        /// <summary>
-        /// Cookies that should be created/changed.
-        /// </summary>
-        public ResponseCookies Cookies
-        {
-            get { return _cookies; }
-        }
-
-        /// <summary>
-        /// Add another header to the document.
-        /// </summary>
-        /// <param name="name">Name of the header, case sensitive, use lower cases.</param>
-        /// <param name="value">Header values can span over multiple lines as long as each line starts with a white space. New line chars should be \r\n</param>
-        /// <exception cref="InvalidOperationException">If headers already been sent.</exception>
-        /// <exception cref="ArgumentException">If value conditions have not been met.</exception>
-        /// <remarks>Adding any header will override the default ones and those specified by properties.</remarks>
-        public void AddHeader(string name, string value)
-        {
-            if (HeadersSent)
-                throw new InvalidOperationException("Headers have already been sent.");
-
-            for (int i = 1; i < value.Length; ++i )
-            {
-                if (value[i] == '\r' && !char.IsWhiteSpace(value[i-1]))
-                    throw new ArgumentException("New line in value do not start with a white space.");
-                if (value[i] == '\n' && value[i-1] != '\r')
-                    throw new ArgumentException("Invalid new line sequence, should be \\r\\n (crlf).");
-            }
-                _headers[name.ToLower()] = value;
-        }
-
-        /// <summary>
-        /// Send headers and body to the browser.
-        /// </summary>
-        /// <exception cref="InvalidOperationException">If content have already been sent.</exception>
-        public void Send()
-        {
-            if (!_headersSent)
-                SendHeaders();
-            if (_sent)
-                throw new InvalidOperationException("Everyting have already been sent.");
-            if (Body.Length == 0)
-            {
-                if (Connection == ConnectionType.Close)
-                    _context.Disconnect(SocketError.Success);
-                return;
-            }
-
-            Body.Flush();
-            Body.Seek(0, SeekOrigin.Begin);
-            byte[] buffer = new byte[4196];
-            int bytesRead = Body.Read(buffer, 0, 4196);
-            while (bytesRead > 0)
-            {
-                _context.Send(buffer, 0, bytesRead);
-                bytesRead = Body.Read(buffer, 0, 4196);
-            }
-
-            if (Connection == ConnectionType.Close)
-                _context.Disconnect(SocketError.Success);
-
-            _sent = true;
-        }
-
-        /// <summary>
-        /// Make sure that you have specified ContentLength and sent the headers first.
-        /// </summary>
-        /// <param name="buffer"></param>
-        /// <exception cref="InvalidOperationException">If headers have not been sent.</exception>
-        /// <see cref="SendHeaders"/>
-        /// <param name="offset">offest of first byte to send</param>
-        /// <param name="count">number of bytes to send.</param>
-        /// <seealso cref="Send"/>
-        /// <seealso cref="SendHeaders"/>
-        /// <remarks>This method can be used if you want to send body contents without caching them first. This
-        /// is recommended for larger files to keep the memory usage low.</remarks>
-        public void SendBody(byte[] buffer, int offset, int count)
-        {
-            if (!HeadersSent)
-                throw new InvalidOperationException("Send headers, and remember to specify ContentLength first.");
-
-            _sent = true;
-            _context.Send(buffer, offset, count);
-        }
-
-        /// <summary>
-        /// Make sure that you have specified ContentLength and sent the headers first.
-        /// </summary>
-        /// <param name="buffer"></param>
-        /// <exception cref="InvalidOperationException">If headers have not been sent.</exception>
-        /// <see cref="SendHeaders"/>
-        /// <seealso cref="Send"/>
-        /// <seealso cref="SendHeaders"/>
-        /// <remarks>This method can be used if you want to send body contents without caching them first. This
-        /// is recommended for larger files to keep the memory usage low.</remarks>
-        public void SendBody(byte[] buffer)
-        {
-            if (!HeadersSent)
-                throw new InvalidOperationException("Send headers, and remember to specify ContentLength first.");
-
-            _sent = true;
-            _context.Send(buffer);
-        }
-
-        /// <summary>
-        /// Send headers to the client.
-        /// </summary>
-        /// <exception cref="InvalidOperationException">If headers already been sent.</exception>
-        /// <seealso cref="AddHeader"/>
-        /// <seealso cref="Send"/>
-        /// <seealso cref="SendBody(byte[])"/>
-        public void SendHeaders()
-        {
-            if (HeadersSent)
-                throw new InvalidOperationException("Header have already been sent.");
-
-            _headersSent = true;
-
-            if (_headers["date"] == null)
-                _headers["date"] = DateTime.Now.ToString("r");
-            if (_headers["content-length"] == null)
-                _headers["content-length"] = _contentLength == 0 ? Body.Length.ToString() : _contentLength.ToString();
-            if (_headers["content-type"] == null)
-                _headers["content-type"] = _contentType;
-            if (_headers["server"] == null)
-                _headers["server"] = "Tiny WebServer";
-
-            if (Connection == ConnectionType.KeepAlive)
-            {
-                _headers["keep-alive"] = "timeout=" + _keepAlive + ", max=" + _keepAlive*20;
-                _headers["connection"] = "keep-alive";
-            }
-            else
-                _headers["connection"] = "close";
-
-            if (Body.Length != 0)
-            {
-                if (_headers["content-type"] == null)
-                    _headers["content-type"] = _contentType ?? "text/html;charset=UTF-8";
-            }
-
-            StringBuilder sb = new StringBuilder();
-            sb.AppendFormat("{0} {1} {2}\r\n", _httpVersion, (int) Status,
-                            string.IsNullOrEmpty(Reason) ? Status.ToString() : Reason);
-
-            for (int i = 0; i < _headers.Count; ++i)
-                sb.AppendFormat("{0}: {1}\r\n", _headers.AllKeys[i], _headers[i]);
-
-            foreach (ResponseCookie cookie in Cookies)
-                sb.AppendFormat("Set-Cookie: {0}\r\n", cookie);
-
-            sb.AppendLine();
-
-            _context.Send(Encoding.GetBytes(sb.ToString()));
-        }
-
-        /// <summary>
-        /// Redirect client to somewhere else using the 302 status code.
-        /// </summary>
-        /// <param name="uri">Destination of the redirect</param>
-        /// <exception cref="InvalidOperationException">If headers already been sent.</exception>
-        /// <remarks>You can not do anything more with the request when a redirect have been done. This should be your last
-        /// action.</remarks>
-        public void Redirect(Uri uri)
-        {
-            Status = HttpStatusCode.Redirect;
-            _headers["location"] = uri.ToString();
-        }
-
-        /// <summary>
-        /// redirect to somewhere
-        /// </summary>
-        /// <param name="url">where the redirect should go</param>
-        /// <remarks>
-        /// No body are allowed when doing redirects.
-        /// </remarks>
-        public void Redirect(string url)
-        {
-            Status = HttpStatusCode.Redirect;
-            _headers["location"] = url;
-        }
-
-        /*
-         * HTTP/1.1 200 OK
-Date: Sun, 16 Mar 2008 08:01:36 GMT
-Server: Apache/2.2.6 (Win32) PHP/5.2.4
-Content-Length: 685
-Connection: close
-Content-Type: text/html;charset=UTF-8*/
-    }
-}
\ No newline at end of file
diff --git a/HttpServer/trunk/HttpServer/HttpServer.cs b/HttpServer/trunk/HttpServer/HttpServer.cs
deleted file mode 100644
index f3bbcc6..0000000
--- a/HttpServer/trunk/HttpServer/HttpServer.cs
+++ /dev/null
@@ -1,824 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.IO;
-using System.Net;
-using System.Net.Sockets;
-using System.Security.Cryptography.X509Certificates;
-using HttpServer.Authentication;
-using HttpServer.Exceptions;
-using HttpServer.FormDecoders;
-using HttpServer.HttpModules;
-using HttpServer.Rules;
-using HttpServer.Sessions;
-
-namespace HttpServer
-{
-	/// <summary>
-	/// Delegate used to find a realm/domain.
-	/// </summary>
-	/// <param name="domain"></param>
-	/// <returns></returns>
-	/// <remarks>
-	/// Realms are used during HTTP Authentication
-	/// </remarks>
-	/// <seealso cref="AuthenticationModule"/>
-	/// <seealso cref="AuthenticationHandler"/>
-	public delegate string RealmHandler(string domain);
-
-    /// <summary>
-    /// A complete HTTP server, you need to add a module to it to be able to handle incoming requests.
-    /// </summary>
-    /// <example>
-    /// <code>
-    /// // this small example will add two web site modules, thus handling
-    /// // two different sites. In reality you should add Controller modules or something
-    /// // two the website modules to be able to handle different requests.
-    /// HttpServer server = new HttpServer();
-    /// server.Add(new WebSiteModule("www.gauffin.com", "Gauffin Telecom AB"));
-    /// server.Add(new WebSiteModule("www.vapadi.se", "Remote PBX"));
-    ///
-    /// // start regular http
-    /// server.Start(IPAddress.Any, 80);
-    ///
-    /// // start https
-    /// server.Start(IPAddress.Any, 443, myCertificate);
-    /// </code>
-    /// </example>
-    /// <seealso cref="HttpModule"/>
-    /// <seealso cref="FileModule"/>
-    /// <seealso cref="HttpListener"/>
-    public class HttpServer
-    {
-        private FormDecoderProvider _formDecodersProvider;
-        private readonly List<HttpModule> _modules = new List<HttpModule>();
-		private readonly List<IRule> _rules = new List<IRule>();
-		private readonly List<AuthenticationModule> _authModules = new List<AuthenticationModule>();
-        private HttpListener _httpListener;
-        private HttpListener _httpsListener;
-        private string _serverName = "SeeSharpWebServer";
-        private string _sessionCookieName = "__tiny_sessid";
-        private IHttpSessionStore _sessionStore;
-        private ILogWriter _logWriter = NullLogWriter.Instance;
-        private int _backLog = 10;
-		private ExceptionHandler _exceptionHandler;
-        private readonly IComponentProvider _components;
-    	private RequestQueue _requestQueue;
-		[ThreadStatic]
-    	private static HttpServer _current;
-
-		/// <summary>
-		/// Server that is handling the current request.
-		/// </summary>
-		/// <remarks>
-		/// Will be set as soon as a request arrives to the <see cref="HttpServer"/> object.
-		/// </remarks>
-    	public static HttpServer Current
-    	{
-			get { return _current; }
-    	}
-
-        /// <summary>
-        /// Initializes a new instance of the <see cref="HttpServer"/> class.
-        /// </summary>
-        /// <param name="provider">Used to get all components used in the server..</param>
-        public HttpServer(IComponentProvider provider)
-        {
-            _components = provider;
-			_requestQueue = new RequestQueue(ProcessRequestWrapper);
-		}
-		/// <summary>
-		/// Initializes a new instance of the <see cref="HttpServer"/> class.
-		/// </summary>
-		public HttpServer()
-		{
-		    _components = new ComponentProvider();
-			_requestQueue = new RequestQueue(ProcessRequestWrapper);
-		}
-
-		/// <summary>
-		/// Initializes a new instance of the <see cref="HttpServer"/> class.
-		/// </summary>
-		/// <param name="decoderProvider">Form decoders are used to convert different types of posted data to the <see cref="HttpInput"/> object types.</param>
-		/// <seealso cref="IFormDecoder"/>
-		/// <seealso cref="FormDecoderProviders"/>
-		public HttpServer(FormDecoderProvider decoderProvider)
-		{
-		    Check.Require(decoderProvider, "decoderProvider");
-			_components = new ComponentProvider();
-            _components.AddInstance<FormDecoderProvider>(decoderProvider);
-			_requestQueue = new RequestQueue(ProcessRequestWrapper);
-		}
-
-		/// <summary>
-		/// Initializes a new instance of the <see cref="HttpServer"/> class.
-		/// </summary>
-		/// <param name="sessionStore">A session store is used to save and retrieve sessions</param>
-		/// <seealso cref="IHttpSessionStore"/>
-		public HttpServer(IHttpSessionStore sessionStore)
-		{
-		    Check.Require(sessionStore, "sessionStore");
-			_components = new ComponentProvider();
-            _components.AddInstance<IHttpSessionStore>(sessionStore);
-			_requestQueue = new RequestQueue(ProcessRequestWrapper);
-		}
-
-		/// <summary>
-		/// Initializes a new instance of the <see cref="HttpServer"/> class.
-		/// </summary>
-		/// <param name="logWriter">The log writer.</param>
-		/// <seealso cref="LogWriter"/>
-		public HttpServer(ILogWriter logWriter)
-		{
-		    Check.Require(logWriter, "logWriter");
-			_components = new ComponentProvider();
-            _components.AddInstance<ILogWriter>(logWriter);
-			_requestQueue = new RequestQueue(ProcessRequestWrapper);
-		}
-
-		/// <summary>
-		/// Initializes a new instance of the <see cref="HttpServer"/> class.
-		/// </summary>
-		/// <param name="decoderProvider">Form decoders are used to convert different types of posted data to the <see cref="HttpInput"/> object types.</param>
-		/// <param name="logWriter">The log writer.</param>
-		/// <seealso cref="IFormDecoder"/>
-		/// <seealso cref="FormDecoderProviders"/>
-		/// <seealso cref="LogWriter"/>
-		public HttpServer(FormDecoderProvider decoderProvider, ILogWriter logWriter)
-		{
-			Check.Require(decoderProvider, "decoderProvider");
-		    Check.Require(logWriter, "logWriter");
-			_components = new ComponentProvider();
-            _components.AddInstance<FormDecoderProvider>(decoderProvider);
-			_requestQueue = new RequestQueue(ProcessRequestWrapper);
-		}
-
-		/// <summary>
-		/// Initializes a new instance of the <see cref="HttpServer"/> class.
-		/// </summary>
-		/// <param name="decoderProvider">Form decoders are used to convert different types of posted data to the <see cref="HttpInput"/> object types.</param>
-		/// <param name="sessionStore">A session store is used to save and retrieve sessions</param>
-		/// <param name="logWriter">The log writer.</param>
-		/// <seealso cref="IFormDecoder"/>
-		/// <seealso cref="FormDecoderProviders"/>
-		/// <seealso cref="LogWriter"/>
-		/// <seealso cref="IHttpSessionStore"/>
-		public HttpServer(FormDecoderProvider decoderProvider, IHttpSessionStore sessionStore, ILogWriter logWriter)
-		{
-			Check.Require(decoderProvider, "decoderProvider");
-			Check.Require(sessionStore, "sessionStore");
-			_components = new ComponentProvider();
-            _components.AddInstance<FormDecoderProvider>(sessionStore);
-            _components.AddInstance<IHttpSessionStore>(sessionStore);
-            if (logWriter != null)
-                _components.AddInstance<ILogWriter>(logWriter);
-			_requestQueue = new RequestQueue(ProcessRequestWrapper);
-		}
-
-		/// <summary>
-		/// Modules used for authentication. The module that is is added first is used as
-		/// the default authentication module.
-		/// </summary>
-		/// <remarks>Use the corresponding property
-		/// in the <see cref="WebSiteModule"/> if you are using multiple websites.</remarks>
-		public IList<AuthenticationModule> AuthenticationModules
-		{
-			get { return _authModules; }
-		}
-
-		/// <summary>
-		/// Form decoder providers are used to decode request body (which normally contains form data).
-		/// </summary>
-		public FormDecoderProvider FormDecoderProviders
-		{
-			get
-			{
-                if (_formDecodersProvider == null)
-                    _formDecodersProvider = _components.Get<FormDecoderProvider>() ?? new FormDecoderProvider();
-			    return _formDecodersProvider;
-			}
-		}
-
-		/// <summary>
-		/// Server name sent in HTTP responses.
-		/// </summary>
-		/// <remarks>
-		/// Do NOT include version in name, since it makes it
-		/// easier for hackers.
-		/// </remarks>
-		public string ServerName
-		{
-			get { return _serverName; }
-			set { _serverName = value; }
-		}
-
-		/// <summary>
-		/// Name of cookie where session id is stored.
-		/// </summary>
-		public string SessionCookieName
-		{
-			get { return _sessionCookieName; }
-			set { _sessionCookieName = value; }
-		}
-
-		/// <summary>
-		/// Specified where logging should go.
-		/// </summary>
-		/// <seealso cref="NullLogWriter"/>
-		/// <seealso cref="ConsoleLogWriter"/>
-		/// <seealso cref="LogWriter"/>
-		public ILogWriter LogWriter
-		{
-			get { return _logWriter; }
-			set
-			{
-				_logWriter = value ?? NullLogWriter.Instance;
-				foreach (HttpModule module in _modules)
-					module.SetLogWriter(_logWriter);
-			}
-		}
-
-		/// <summary>
-		/// Number of connections that can wait to be accepted by the server.
-		/// </summary>
-		/// <remarks>Default is 10.</remarks>
-		public int BackLog
-		{
-			get { return _backLog; }
-			set { _backLog = value; }
-		}
-
-		/// <summary>
-		/// Gets or sets maximum number of allowed simultaneous requests.
-		/// </summary>
-		/// <remarks>
-		/// <para>
-		/// This property is useful in busy systems. The HTTP server
-		/// will start queuing new requests if this limit is hit, instead
-		/// of trying to process all incoming requests directly.
-		/// </para>
-		/// <para>
-		/// The default number if allowed simultaneous requests are 10.
-		/// </para>
-		/// </remarks>
-		public int MaxRequestCount
-		{
-			get { return _requestQueue.MaxRequestCount; }
-			set { _requestQueue.MaxRequestCount = value; }
-		}
-
-		/// <summary>
-		/// Gets or sets maximum number of requests queuing to be handled.
-		/// </summary>
-		/// <remarks>
-		/// <para>
-		/// The WebServer will start turning requests away if response code
-		/// <see cref="HttpStatusCode.ServiceUnavailable"/> to indicate that the server
-		/// is too busy to be able to handle the request.
-		/// </para>
-		/// </remarks>
-		public int MaxQueueSize
-		{
-			get { return _requestQueue.MaxQueueSize; }
-			set { _requestQueue.MaxQueueSize = value; }
-		}
-
-
-
-    	/// <summary>
-        /// Adds the specified rule.
-        /// </summary>
-        /// <param name="rule">The rule.</param>
-        public void Add(IRule rule)
-        {
-            _rules.Add(rule);
-        }
-
-		/// <summary>
-		/// Add a <see cref="HttpModule"/> to the server.
-		/// </summary>
-		/// <param name="module">mode to add</param>
-		public void Add(HttpModule module)
-		{
-			_modules.Add(module);
-		}
-
-        /// <summary>
-        /// Decodes the request body.
-        /// </summary>
-        /// <param name="request">The request.</param>
-        /// <exception cref="InternalServerException">Failed to decode form data.</exception>
-        protected virtual void DecodeBody(IHttpRequest request)
-        {
-            try
-            {
-                if (request.Body.Length > 0)
-                    request.DecodeBody(_formDecodersProvider);
-            }
-            catch (InvalidOperationException err)
-            {
-                throw new InternalServerException("Failed to decode form data.", err);
-            }
-            catch (InvalidDataException err)
-            {
-                throw new InternalServerException("Form contains invalid format.", err);
-            }
-        }
-
-		/// <summary>
-		/// Generate a HTTP error page (that will be added to the response body).
-		/// response status code is also set.
-		/// </summary>
-		/// <param name="response">Response that the page will be generated in.</param>
-		/// <param name="error"><see cref="HttpStatusCode"/>.</param>
-		/// <param name="body">response body contents.</param>
-		protected virtual void ErrorPage(IHttpResponse response, HttpStatusCode error, string body)
-		{
-			response.Reason = "Internal server error";
-			response.Status = error;
-			response.ContentType = "text/plain";
-
-			StreamWriter writer = new StreamWriter(response.Body);
-			writer.WriteLine(body);
-			writer.Flush();
-		}
-
-		/// <summary>
-		/// Generate a HTTP error page (that will be added to the response body).
-		/// response status code is also set.
-		/// </summary>
-		/// <param name="response">Response that the page will be generated in.</param>
-		/// <param name="err">exception.</param>
-		protected virtual void ErrorPage(IHttpResponse response, HttpException err)
-		{
-			response.Reason = err.GetType().Name;
-			response.Status = err.HttpStatusCode;
-			response.ContentType = "text/plain";
-			StreamWriter writer = new StreamWriter(response.Body);
-#if DEBUG
-            writer.WriteLine(err);
-#else
-			writer.WriteLine(err.Message);
-#endif
-			writer.Flush();
-		}
-
-		/// <summary>
-		/// Realms are used by the <see cref="AuthenticationModule"/>s.
-		/// </summary>
-		/// <param name="request">HTTP request</param>
-		/// <returns>domain/realm.</returns>
-		protected virtual string GetRealm(IHttpRequest request)
-		{
-		    return RealmWanted != null ? RealmWanted(request.Headers["host"] ?? "localhost") : ServerName;
-		}
-
-		/// <summary>
-		/// Process an incoming request.
-		/// </summary>
-		/// <param name="context">connection to client</param>
-		/// <param name="request">request information</param>
-		/// <param name="response">response that should be filled</param>
-		/// <param name="session">session information</param>
-		protected virtual void HandleRequest(IHttpClientContext context, IHttpRequest request, IHttpResponse response,
-											 IHttpSession session)
-		{
-			_logWriter.Write(this, LogPrio.Trace, "Processing request....");
-			bool handled = false;
-			try
-			{
-				DecodeBody(request);
-				if (ProcessAuthentication(request, response, session))
-				{
-					foreach (HttpModule module in _modules)
-					{
-						if (!module.Process(request, response, session))
-							continue;
-
-						handled = true;
-						if (!module.AllowSecondaryProcessing)
-							break;
-					}
-				}
-			}
-			catch (HttpException err)
-			{
-				if (err.HttpStatusCode == HttpStatusCode.Unauthorized)
-				{
-					AuthenticationModule mod;
-					lock (_authModules)
-						mod = _authModules.Count > 0 ? _authModules[0] : null;
-
-					if (mod != null)
-						RequestAuthentication(mod, request, response);
-				}
-				else
-					ErrorPage(response, err);
-			}
-
-			if (!handled && response.Status == HttpStatusCode.OK)
-				ErrorPage(response, HttpStatusCode.NotFound, "Resource not found: " + request.Uri);
-
-			if (!response.HeadersSent)
-			{
-				// Dispose session if it was not used.
-				if (session.Count > 0)
-				{
-					_sessionStore.Save(session);
-					// only set session cookie if it have not been sent in the request.
-					if (request.Cookies[_sessionCookieName] == null)
-						response.Cookies.Add(new ResponseCookie(_sessionCookieName, session.Id, DateTime.MinValue));//DateTime.Now.AddMinutes(20).AddDays(1)));
-				}
-				else
-					_sessionStore.AddUnused(session);
-			}
-
-			if (!response.Sent)
-				response.Send();
-
-			_logWriter.Write(this, LogPrio.Trace, "....done.");
-		}
-
-		private void Init()
-		{
-
-		    _sessionStore = _components.Get<IHttpSessionStore>();
-			if (_sessionStore == null)
-			{
-				WriteLog(this, LogPrio.Info, "Defaulting to memory session store.");
-				_sessionStore = new MemorySessionStore();
-			}
-
-			// add default decoders if none have been added.
-            if (FormDecoderProviders.Count == 0)
-			{
-				WriteLog(this, LogPrio.Info, "Loading UrlDecoder, XmlDecoder and MultipartDecoder, since no decoders have been added.");
-				_formDecodersProvider.Add(new UrlDecoder());
-				_formDecodersProvider.Add(new MultipartDecoder());
-                _formDecodersProvider.Add(new XmlDecoder());
-			}
-
-            // Components for building requests.
-            if (!_components.Contains(typeof(IRequestParserFactory)))
-                _components.Add<IRequestParserFactory, RequestParserFactory>();
-            if (!_components.Contains(typeof(IHttpContextFactory)))
-                _components.AddInstance<IHttpContextFactory>(new HttpContextFactory(LogWriter, _components.Get<IRequestParserFactory>()));
-
-			// the special folder does not exist on mono
-			string tempPath = Environment.GetFolderPath(Environment.SpecialFolder.InternetCache);
-			if (string.IsNullOrEmpty(tempPath))
-				tempPath = "/var/tmp/";
-			if (!Directory.Exists(tempPath))
-			{
-				WriteLog(this, LogPrio.Warning, "Temp path do not exist: " + tempPath);
-				return;
-			}
-			DirectoryInfo info = new DirectoryInfo(tempPath);
-			foreach (FileInfo file in info.GetFiles("*.tmp"))
-				file.Delete();
-
-			_requestQueue.Start();
-		}
-
-
-		/// <summary>
-		/// Can be overloaded to implement stuff when a client have been connected.
-		/// </summary>
-		/// <remarks>
-		/// Default implementation does nothing.
-		/// </remarks>
-		/// <param name="client">client that disconnected</param>
-		/// <param name="error">disconnect reason</param>
-		protected virtual void OnClientDisconnected(IHttpClientContext client, SocketError error)
-		{
-		}
-
-        /// <summary>
-        /// Handle authentication
-        /// </summary>
-        /// <param name="request"></param>
-        /// <param name="response"></param>
-        /// <param name="session"></param>
-        /// <returns>true if request can be handled; false if not.</returns>
-        /// <exception cref="BadRequestException">Invalid authorization header</exception>
-        protected virtual bool ProcessAuthentication(IHttpRequest request, IHttpResponse response, IHttpSession session)
-        {
-            if (_authModules.Count > 0)
-            {
-                bool authenticate = false;
-                object authTag = null;
-                if (request.Headers["authorization"] != null)
-                {
-                    authenticate = true;
-                    string authHeader = request.Headers["authorization"];
-                    int pos = authHeader.IndexOf(' ');
-                    if (pos == -1)
-                        throw new BadRequestException("Invalid authorization header");
-					// first word identifies the type of authentication to use.
-					string word = authHeader.Substring(0, pos).ToLower();
-
-					// find the mod to use.
-					AuthenticationModule mod = null;
-					lock (_authModules)
-					{
-						foreach (AuthenticationModule aModule in _authModules)
-						{
-							if (aModule.Name != word)
-								continue;
-							mod = aModule;
-							break;
-						}
-					}
-					if (mod != null)
-					{
-						authTag = mod.Authenticate(authHeader, GetRealm(request), request.Method);
-						session[AuthenticationModule.AuthenticationTag] = authTag;
-					}
-				}
-
-
-				// Check if auth is needed.
-				if (authTag == null)
-				{
-					lock (_authModules)
-					{
-						foreach (AuthenticationModule module in _authModules)
-						{
-							if (!module.AuthenticationRequired(request))
-								continue;
-
-							RequestAuthentication(module, request, response);
-							return false;
-						}
-
-						// modules can have inited the authentication
-						// and then the module.AuthenticationRequired method will not have been used.
-						if (authenticate && _authModules.Count > 0)
-						{
-							RequestAuthentication(_authModules[0], request, response);
-							return false;
-						}
-					}
-				}
-
-			}
-
-			return true;
-		}
-
-		/// <summary>
-		/// Will request authentication.
-		/// </summary>
-		/// <remarks>
-		/// Sends respond to client, nothing else can be done with the response after this.
-		/// </remarks>
-		/// <param name="mod"></param>
-		/// <param name="request"></param>
-		/// <param name="response"></param>
-		protected virtual void RequestAuthentication(AuthenticationModule mod, IHttpRequest request, IHttpResponse response)
-		{
-			string theResponse = mod.CreateResponse(GetRealm(request));
-			response.AddHeader("www-authenticate", theResponse);
-			response.Reason = "Authentication required.";
-			response.Status = HttpStatusCode.Unauthorized;
-		}
-
-		/// <summary>
-		/// Received from a <see cref="IHttpClientContext"/> when a request have been parsed successfully.
-		/// </summary>
-		/// <param name="source"><see cref="IHttpClientContext"/> that received the request.</param>
-		/// <param name="args">The request.</param>
-		private void OnRequest(object source, RequestEventArgs args)
-		{
-			_current = this;
-		    IHttpClientContext context = (IHttpClientContext) source;
-		    IHttpRequest request = args.Request;
-			if (_requestQueue.ShouldQueue)
-			{
-				_requestQueue.Enqueue(context, request);
-				return;
-			}
-
-			ProcessRequestWrapper(context, request);
-
-			// no need to lock, if all threads are busy,
-			// someone is bound to trigger the thread correctly =)
-			_requestQueue.Trigger();
-		}
-
-		/// <summary>
-		/// To be able to track request count.
-		/// </summary>
-		/// <param name="context"></param>
-		/// <param name="request"></param>
-		private void ProcessRequestWrapper(IHttpClientContext context, IHttpRequest request)
-		{
-			_requestQueue.CurrentRequestCount += 1;
-			ProcessRequest(context, request);
-			_requestQueue.CurrentRequestCount -= 1;
-		}
-
-		private void ProcessRequest(IHttpClientContext context, IHttpRequest request)
-		{
-			IHttpResponse response = request.CreateResponse(context);
-			try
-			{
-				foreach (IRule rule in _rules)
-				{
-					if (!rule.Process(request, response))
-						continue;
-					response.Send();
-					return;
-				}
-
-				// load cookies if the exist.
-				RequestCookies cookies = request.Headers["cookie"] != null
-											 ? new RequestCookies(request.Headers["cookie"])
-											 : new RequestCookies(string.Empty);
-
-				request.SetCookies(cookies);
-
-				IHttpSession session;
-				if (cookies[_sessionCookieName] != null)
-				{
-					string sessionCookie = cookies[_sessionCookieName].Value;
-
-					// there's a bug somewhere which fucks up headers which can render the session cookie useless.
-					// therefore let's consider the session cookie as not set if that have happened.
-					if (sessionCookie.Length > 40)
-					{
-						_logWriter.Write(this, LogPrio.Error, "Session cookie is invalid: " + sessionCookie);
-						cookies.Remove(_sessionCookieName);
-						_sessionStore.Remove(sessionCookie); // free the session cookie (and thus generating a new one).
-						session = _sessionStore.Create();
-					}
-					else
-						session = _sessionStore.Load(sessionCookie) ??
-								  _sessionStore.Create(sessionCookie);
-				}
-				else
-					session = _sessionStore.Create();
-
-				HandleRequest(context, request, response, session);
-			}
-			catch (Exception err)
-			{
-				if (_exceptionHandler == null)
-#if DEBUG
-					throw;
-#else
-				{
-					WriteLog(LogPrio.Fatal, err.Message);
-					return;
-				}
-#endif
-				_exceptionHandler(this, err);
-
-				Exception e = err;
-				while (e != null)
-				{
-					if (e is SocketException)
-						return;
-
-					e = e.InnerException;
-				}
-
-				try
-				{
-#if DEBUG
-					context.Respond("HTTP/1.0", HttpStatusCode.InternalServerError, "Internal server error", err.ToString(), "text/plain");
-#else
-					context.Respond("HTTP/1.0", HttpStatusCode.InternalServerError, "Internal server error");
-#endif
-				}
-				catch (Exception err2)
-				{
-					LogWriter.Write(this, LogPrio.Fatal, "Failed to respond on message with Internal Server Error: " + err2);
-				}
-
-
-			}
-		}
-
-		/// <summary>
-		/// Start the web server using regular HTTP.
-		/// </summary>
-        /// <param name="address">IP Address to listen on, use <c>IpAddress.Any </c>to accept connections on all IP addresses/network cards.</param>
-		/// <param name="port">Port to listen on. 80 can be a good idea =)</param>
-		/// <exception cref="ArgumentNullException"><c>address</c> is null.</exception>
-		/// <exception cref="ArgumentException">Port must be a positive number.</exception>
-		public void Start(IPAddress address, int port)
-		{
-			if (address == null)
-				throw new ArgumentNullException("address");
-			if (port <= 0)
-				throw new ArgumentException("Port must be a positive number.");
-			if (_httpListener != null)
-				return;
-
-
-            Init();
-            _httpListener = new HttpListener(address, port, _components.Get<IHttpContextFactory>()) { LogWriter = LogWriter };
-		    _httpListener.RequestReceived += OnRequest;
-		    _httpListener.Start(Int32.MaxValue);
-		    _httpListener.ExceptionThrown += _exceptionHandler;
-		}
-
-        /// <summary>
-        /// Accept secure connections.
-        /// </summary>
-		/// <param name="address">IP Address to listen on, use <see cref="IPAddress.Any"/> to accept connections on all IP Addresses / network cards.</param>
-        /// <param name="port">Port to listen on. 80 can be a good idea =)</param>
-        /// <param name="certificate">Certificate to use</param>
-        /// <exception cref="ArgumentNullException"><c>address</c> is null.</exception>
-        /// <exception cref="ArgumentException">Port must be a positive number.</exception>
-        public void Start(IPAddress address, int port, X509Certificate certificate)
-        {
-            if (address == null)
-                throw new ArgumentNullException("address");
-            if (port <= 0)
-                throw new ArgumentException("Port must be a positive number.");
-            if (_httpsListener != null)
-                return;
-
-            Init();
-            _httpsListener = new HttpListener(address, port, _components.Get<IHttpContextFactory>(), certificate);
-			_httpsListener.LogWriter = LogWriter;
-            _httpsListener.RequestReceived += OnRequest;
-			_httpsListener.Start(Int32.MaxValue);
-		    _httpsListener.ExceptionThrown += _exceptionHandler;
-		}
-
-		/// <summary>
-		/// shut down the server and listeners
-		/// </summary>
-		public void Stop()
-		{
-			if (_httpListener != null)
-			{
-				_httpListener.Stop();
-				_httpListener = null;
-			}
-			if (_httpsListener != null)
-			{
-				_httpsListener.Stop();
-				_httpsListener = null;
-			}
-
-			_requestQueue.Stop();
-		}
-
-		/// <summary>
-		/// write an entry to the log file
-		/// </summary>
-		/// <param name="prio">importance of the message</param>
-		/// <param name="message">log message</param>
-		protected virtual void WriteLog(LogPrio prio, string message)
-		{
-			LogWriter.Write(this, prio, message);
-		}
-
-		/// <summary>
-		/// write an entry to the log file
-		/// </summary>
-		/// <param name="source">object that wrote the message</param>
-		/// <param name="prio">importance of the message</param>
-		/// <param name="message">log message</param>
-		public void WriteLog(object source, LogPrio prio, string message)
-		{
-			LogWriter.Write(source, prio, message);
-		}
-
-		/// <summary>
-		/// Realms are used during HTTP authentication.
-		/// Default realm is same as server name.
-		/// </summary>
-		public event RealmHandler RealmWanted;
-
-		/// <summary>
-		/// Let's to receive unhandled exceptions from the threads.
-		/// </summary>
-		/// <remarks>
-		/// Exceptions will be thrown during debug mode if this event is not used,
-		/// exceptions will be printed to console and suppressed during release mode.
-		/// </remarks>
-		public event ExceptionHandler ExceptionThrown
-		{
-            add
-            {
-                _exceptionHandler += value;
-                if (_httpListener != null)
-                    _httpListener.ExceptionThrown += value;
-                if (_httpsListener != null)
-                    _httpsListener.ExceptionThrown += value;
-            }
-            remove
-            {
-                _exceptionHandler -= value;
-                if (_httpListener != null)
-                    _httpListener.ExceptionThrown -= value;
-                if (_httpsListener != null)
-                    _httpsListener.ExceptionThrown -= value;
-            }
-		}
-	}
-}
diff --git a/HttpServer/trunk/HttpServer/HttpServer.csproj b/HttpServer/trunk/HttpServer/HttpServer.csproj
deleted file mode 100644
index 0f15cdd..0000000
--- a/HttpServer/trunk/HttpServer/HttpServer.csproj
+++ /dev/null
@@ -1,155 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion="12.0">
-  <PropertyGroup>
-    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
-    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
-    <ProductVersion>9.0.30729</ProductVersion>
-    <SchemaVersion>2.0</SchemaVersion>
-    <ProjectGuid>{455E7D70-1C85-4D7F-9F01-DC801B8B8C34}</ProjectGuid>
-    <OutputType>Library</OutputType>
-    <AppDesignerFolder>Properties</AppDesignerFolder>
-    <RootNamespace>HttpServer_OpenSim</RootNamespace>
-    <AssemblyName>HttpServer_OpenSim</AssemblyName>
-    <StartupObject>
-    </StartupObject>
-    <SignAssembly>true</SignAssembly>
-    <AssemblyOriginatorKeyFile>test.snk</AssemblyOriginatorKeyFile>
-    <FileUpgradeFlags>
-    </FileUpgradeFlags>
-    <UpgradeBackupLocation>
-    </UpgradeBackupLocation>
-    <OldToolsVersion>3.5</OldToolsVersion>
-    <TargetFrameworkVersion>v4.6</TargetFrameworkVersion>
-    <TargetFrameworkProfile />
-  </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>
-    <DocumentationFile>
-    </DocumentationFile>
-    <Prefer32Bit>false</Prefer32Bit>
-  </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>
-    <DocumentationFile>
-    </DocumentationFile>
-    <AllowUnsafeBlocks>false</AllowUnsafeBlocks>
-    <PlatformTarget>AnyCPU</PlatformTarget>
-    <Prefer32Bit>false</Prefer32Bit>
-  </PropertyGroup>
-  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Test|AnyCPU' ">
-    <DebugSymbols>true</DebugSymbols>
-    <OutputPath>bin\Test\</OutputPath>
-    <DefineConstants>TRACE;DEBUG;TEST</DefineConstants>
-    <DocumentationFile>bin\Debug\HttpServer.XML</DocumentationFile>
-    <DebugType>full</DebugType>
-    <PlatformTarget>AnyCPU</PlatformTarget>
-    <ErrorReport>prompt</ErrorReport>
-    <Prefer32Bit>false</Prefer32Bit>
-  </PropertyGroup>
-  <ItemGroup>
-    <Reference Include="System" />
-    <Reference Include="System.Data" />
-    <Reference Include="System.Web" />
-    <Reference Include="System.Xml" />
-  </ItemGroup>
-  <ItemGroup>
-    <Compile Include="Authentication\AuthenticationModule.cs" />
-    <Compile Include="Authentication\BasicAuthentication.cs" />
-    <Compile Include="Authentication\DigestAuthentication.cs" />
-    <Compile Include="Check.cs" />
-    <Compile Include="ClientAcceptedEventArgs.cs" />
-    <Compile Include="ComponentProvider.cs" />
-    <Compile Include="ContentTypes.cs" />
-    <Compile Include="ContextTimeoutManager.cs" />
-    <Compile Include="ExceptionHandler.cs" />
-    <Compile Include="Exceptions\BadRequestException.cs" />
-    <Compile Include="Exceptions\ForbiddenException.cs" />
-    <Compile Include="Exceptions\HttpException.cs" />
-    <Compile Include="Exceptions\InternalServerException.cs" />
-    <Compile Include="Exceptions\NotFoundException.cs" />
-    <Compile Include="Exceptions\UnauthorizedException.cs" />
-    <Compile Include="FormDecoders\FormDecoderProvider.cs" />
-    <Compile Include="FormDecoders\HttpMultipart.cs" />
-    <Compile Include="FormDecoders\IFormDecoder.cs" />
-    <Compile Include="FormDecoders\MultipartDecoder.cs" />
-    <Compile Include="FormDecoders\UrlDecoder.cs" />
-    <Compile Include="FormDecoders\XmlDecoder.cs" />
-    <Compile Include="Helpers\FormHelper.cs" />
-    <Compile Include="Helpers\GetIdTitle.cs" />
-    <Compile Include="Helpers\Implementations\PrototypeImp.cs" />
-    <Compile Include="Helpers\JSHelper.cs" />
-    <Compile Include="Helpers\ObjectForm.cs" />
-    <Compile Include="Helpers\ResourceInfo.cs" />
-    <Compile Include="Helpers\ResourceManager.cs" />
-    <Compile Include="Helpers\WebHelper.cs" />
-    <Compile Include="Helpers\XmlHelper.cs" />
-    <Compile Include="HttpClientContext.cs" />
-    <Compile Include="HttpContextFactory.cs" />
-    <Compile Include="HttpFile.cs" />
-    <Compile Include="HttpForm.cs" />
-    <Compile Include="HttpHelper.cs" />
-    <Compile Include="HttpInput.cs" />
-    <Compile Include="HttpInputItem.cs" />
-    <Compile Include="HttpListener.cs" />
-    <Compile Include="HttpListenerBase.cs" />
-    <Compile Include="HttpModules\FileModule.cs" />
-    <Compile Include="HttpModules\HttpModule.cs" />
-    <Compile Include="HttpModules\HttpModuleExceptionEventArgs.cs" />
-    <Compile Include="HttpModules\ResourceFileModule.cs" />
-    <Compile Include="HttpModules\ReverseProxyModule.cs" />
-    <Compile Include="HttpModules\WebSiteModule.cs" />
-    <Compile Include="HttpParam.cs" />
-    <Compile Include="HttpRequest.cs" />
-    <Compile Include="HttpResponse.cs" />
-    <Compile Include="HttpServer.cs" />
-    <Compile Include="IComponentProvider.cs" />
-    <Compile Include="IHttpClientContext.cs" />
-    <Compile Include="IHttpContextHandler.cs" />
-    <Compile Include="IHttpRequest.cs" />
-    <Compile Include="IHttpRequestParser.cs" />
-    <Compile Include="IHttpResponse.cs" />
-    <Compile Include="ILogWriter.cs" />
-    <Compile Include="Method.cs" />
-    <Compile Include="Parser\BodyEventArgs.cs" />
-    <Compile Include="Parser\HeaderEventArgs.cs" />
-    <Compile Include="Parser\HttpRequestParser.cs" />
-    <Compile Include="Parser\RequestLineEventArgs.cs" />
-    <Compile Include="Parser\RequestParserFactory.cs" />
-    <Compile Include="Properties\AssemblyInfo.cs" />
-    <Compile Include="RequestCookie.cs" />
-    <Compile Include="RequestCookies.cs" />
-    <Compile Include="RequestQueue.cs" />
-    <Compile Include="ResponseCookie.cs" />
-    <Compile Include="ResponseCookies.cs" />
-    <Compile Include="Rules\IRule.cs" />
-    <Compile Include="Rules\RedirectRule.cs" />
-    <Compile Include="Rules\RegexRedirectRule.cs" />
-    <Compile Include="Sessions\IHttpSession.cs" />
-    <Compile Include="Sessions\IHttpSessionStore.cs" />
-    <Compile Include="Sessions\MemorySession.cs" />
-    <Compile Include="Sessions\MemorySessionStore.cs" />
-  </ItemGroup>
-  <ItemGroup>
-    <None Include="httpserver.pfx" />
-    <None Include="test.snk" />
-  </ItemGroup>
-  <Import Project="$(MSBuildBinPath)\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
diff --git a/HttpServer/trunk/HttpServer/IComponentProvider.cs b/HttpServer/trunk/HttpServer/IComponentProvider.cs
deleted file mode 100644
index b583557..0000000
--- a/HttpServer/trunk/HttpServer/IComponentProvider.cs
+++ /dev/null
@@ -1,41 +0,0 @@
-using System;
-
-namespace HttpServer
-{
-	/// <summary>
-	/// Inversion of control interface.
-	/// </summary>
-	public interface IComponentProvider
-	{
-		/// <summary>
-		/// Add a component instance
-		/// </summary>
-		/// <typeparam name="T">Interface type</typeparam>
-		/// <param name="instance">Instance to add</param>
-		void AddInstance<T>(object instance);
-
-		/// <summary>
-		/// Get a component.
-		/// </summary>
-		/// <typeparam name="T">Interface type</typeparam>
-		/// <returns>Component if registered, otherwise null.</returns>
-		/// <remarks>
-		/// Component will get created if needed.
-		/// </remarks>
-		T Get<T>() where T : class;
-
-		/// <summary>
-		/// Checks if the specified component interface have been added.
-		/// </summary>
-		/// <param name="interfaceType"></param>
-		/// <returns>true if found; otherwise false.</returns>
-		bool Contains(Type interfaceType);
-
-		/// <summary>
-		/// Add a component.
-		/// </summary>
-		/// <typeparam name="InterfaceType">Type being requested.</typeparam>
-		/// <typeparam name="InstanceType">Type being created.</typeparam>
-		void Add<InterfaceType, InstanceType>();
-	}
-}
diff --git a/HttpServer/trunk/HttpServer/IHttpClientContext.cs b/HttpServer/trunk/HttpServer/IHttpClientContext.cs
deleted file mode 100644
index 3d4eb5c..0000000
--- a/HttpServer/trunk/HttpServer/IHttpClientContext.cs
+++ /dev/null
@@ -1,162 +0,0 @@
-using System;
-using System.Net;
-using System.Net.Sockets;
-using System.Threading.Tasks;
-
-namespace HttpServer
-{
-    /// <summary>
-    /// Contains a connection to a browser/client.
-    /// </summary>
-    public interface IHttpClientContext
-    {
-
-        /// <summary>
-        /// Get SSL commonName of remote peer
-        /// </summary>
-        string SSLCommonName { get; }
-
-        /// <summary>
-        /// Using SSL or other encryption method.
-        /// </summary>
-        [Obsolete("Use IsSecured instead.")]
-        bool Secured { get; }
-
-        /// <summary>
-        /// Using SSL or other encryption method.
-        /// </summary>
-        bool IsSecured { get; }
-
-        int contextID {get;}
-        int TimeoutKeepAlive {get; set; }
-        int MAXRequests{get; set; }
-
-        bool CanSend();
-        bool IsSending();
-
-        /// <summary>
-        /// Disconnect from client
-        /// </summary>
-        /// <param name="error">error to report in the <see cref="Disconnected"/> event.</param>
-        void Disconnect(SocketError error);
-
-        /// <summary>
-        /// Send a response.
-        /// </summary>
-        /// <param name="httpVersion">Either <see cref="HttpHelper.HTTP10"/> or <see cref="HttpHelper.HTTP11"/></param>
-        /// <param name="statusCode">HTTP status code</param>
-        /// <param name="reason">reason for the status code.</param>
-        /// <param name="body">HTML body contents, can be null or empty.</param>
-        /// <param name="contentType">A content type to return the body as, i.e. 'text/html' or 'text/plain', defaults to 'text/html' if null or empty</param>
-        /// <exception cref="ArgumentException">If <paramref name="httpVersion"/> is invalid.</exception>
-        void Respond(string httpVersion, HttpStatusCode statusCode, string reason, string body, string contentType);
-
-        /// <summary>
-        /// Send a response.
-        /// </summary>
-        /// <param name="httpVersion">Either <see cref="HttpHelper.HTTP10"/> or <see cref="HttpHelper.HTTP11"/></param>
-        /// <param name="statusCode">HTTP status code</param>
-        /// <param name="reason">reason for the status code.</param>
-        void Respond(string httpVersion, HttpStatusCode statusCode, string reason);
-
-        /// <summary>
-        /// Send a response.
-        /// </summary>
-        /// <exception cref="ArgumentNullException"></exception>
-        void Respond(string body);
-
-        /// <summary>
-        /// send a whole buffer
-        /// </summary>
-        /// <param name="buffer">buffer to send</param>
-        /// <exception cref="ArgumentNullException"></exception>
-        bool Send(byte[] buffer);
-
-        /// <summary>
-        /// Send data using the stream
-        /// </summary>
-        /// <param name="buffer">Contains data to send</param>
-        /// <param name="offset">Start position in buffer</param>
-        /// <param name="size">number of bytes to send</param>
-        /// <exception cref="ArgumentNullException"></exception>
-        /// <exception cref="ArgumentOutOfRangeException"></exception>
-        bool Send(byte[] buffer, int offset, int size);
-        Task<bool> SendAsync(byte[] buffer, int offset, int size);
-
-        /// <summary>
-        /// Closes the streams and disposes of the unmanaged resources
-        /// </summary>
-        void Close();
-
-        /// <summary>
-        /// The context have been disconnected.
-        /// </summary>
-        /// <remarks>
-        /// Event can be used to clean up a context, or to reuse it.
-        /// </remarks>
-        event EventHandler<DisconnectedEventArgs> Disconnected;
-
-        /// <summary>
-        /// A request have been received in the context.
-        /// </summary>
-        event EventHandler<RequestEventArgs> RequestReceived;
-
-        HTTPNetworkContext GiveMeTheNetworkStreamIKnowWhatImDoing();
-
-        void StartSendResponse(HttpResponse response);
-        void ContinueSendResponse();
-        void ReqResponseAboutToSend(uint requestID);
-        void ReqResponseSent(uint requestID, ConnectionType connection);
-        bool TrySendResponse(int limit);
-    }
-    public class HTTPNetworkContext
-    {
-        public NetworkStream Stream;
-        public Socket Socket;
-    }
-
-    /// <summary>
-    /// A <see cref="IHttpClientContext"/> have been disconnected.
-    /// </summary>
-    public class DisconnectedEventArgs : EventArgs
-    {
-        /// <summary>
-        /// Gets reason to why client disconnected.
-        /// </summary>
-        public SocketError Error { get; private set; }
-
-        /// <summary>
-        /// Initializes a new instance of the <see cref="DisconnectedEventArgs"/> class.
-        /// </summary>
-        /// <param name="error">Reason to disconnection.</param>
-        public DisconnectedEventArgs(SocketError error)
-        {
-            Check.Require(error, "error");
-
-            Error = error;
-        }
-    }
-
-    /// <summary>
-    ///
-    /// </summary>
-    public class RequestEventArgs : EventArgs
-    {
-        /// <summary>
-        /// Gets received request.
-        /// </summary>
-        public IHttpRequest Request { get; private set; }
-
-        /// <summary>
-        /// Initializes a new instance of the <see cref="RequestEventArgs"/> class.
-        /// </summary>
-        /// <param name="request">The request.</param>
-        public RequestEventArgs(IHttpRequest request)
-        {
-            Check.Require(request, "request");
-
-            Request = request;
-        }
-    }
-
-}
diff --git a/HttpServer/trunk/HttpServer/IHttpContextHandler.cs b/HttpServer/trunk/HttpServer/IHttpContextHandler.cs
deleted file mode 100644
index f6aa0b0..0000000
--- a/HttpServer/trunk/HttpServer/IHttpContextHandler.cs
+++ /dev/null
@@ -1,26 +0,0 @@
-using System.Net.Sockets;
-
-namespace HttpServer
-{
-    /// <summary>
-    /// Class that receives Requests from a <see cref="IHttpClientContext"/>.
-    /// </summary>
-    public interface IHttpContextHandler
-    {
-        /// <summary>
-        /// Client have been disconnected.
-        /// </summary>
-        /// <param name="client">Client that was disconnected.</param>
-        /// <param name="error">Reason</param>
-        /// <see cref="IHttpClientContext"/>
-        void ClientDisconnected(IHttpClientContext client, SocketError error);
-
-        /// <summary>
-        /// Invoked when a client context have received a new HTTP request
-        /// </summary>
-        /// <param name="client">Client that received the request.</param>
-        /// <param name="request">Request that was received.</param>
-        /// <see cref="IHttpClientContext"/>
-        void RequestReceived(IHttpClientContext client, IHttpRequest request);
-    }
-}
diff --git a/HttpServer/trunk/HttpServer/IHttpRequest.cs b/HttpServer/trunk/HttpServer/IHttpRequest.cs
deleted file mode 100644
index 80862a1..0000000
--- a/HttpServer/trunk/HttpServer/IHttpRequest.cs
+++ /dev/null
@@ -1,165 +0,0 @@
-using System;
-using System.Collections.Specialized;
-using System.IO;
-using HttpServer.Exceptions;
-using HttpServer.FormDecoders;
-
-namespace HttpServer
-{
-    /// <summary>
-    /// Contains server side HTTP request information.
-    /// </summary>
-    public interface IHttpRequest : ICloneable
-    {
-        /// <summary>
-        /// Gets kind of types accepted by the client.
-        /// </summary>
-        string[] AcceptTypes { get; }
-
-        uint ID {get; }
-        /// <summary>
-        /// Gets or sets body stream.
-        /// </summary>
-        Stream Body { get; set; }
-
-        /// <summary>
-        /// Gets whether the body is complete.
-        /// </summary>
-        bool BodyIsComplete { get; }
-
-        /// <summary>
-        /// Gets or sets kind of connection used for the session.
-        /// </summary>
-        ConnectionType Connection { get; set; }
-
-        IHttpClientContext Context { get; }
-        /// <summary>
-        /// Gets or sets number of bytes in the body.
-        /// </summary>
-        int ContentLength { get; set; }
-
-        /// <summary>
-        /// Gets cookies that was sent with the request.
-        /// </summary>
-        RequestCookies Cookies { get; }
-
-        /// <summary>
-        /// Gets form parameters.
-        /// </summary>
-        HttpForm Form { get; }
-
-        /// <summary>
-        /// Gets headers sent by the client.
-        /// </summary>
-        NameValueCollection Headers { get; }
-
-        /// <summary>
-        /// Gets or sets version of HTTP protocol that's used.
-        /// </summary>
-        /// <remarks>
-        /// Probably <see cref="HttpHelper.HTTP10"/> or <see cref="HttpHelper.HTTP11"/>.
-        /// </remarks>
-        /// <seealso cref="HttpHelper"/>
-        string HttpVersion { get; set; }
-
-        /// <summary>
-        /// Gets whether the request was made by Ajax (Asynchronous JavaScript)
-        /// </summary>
-        bool IsAjax { get; }
-
-        /// <summary>
-        /// Gets or sets requested method.
-        /// </summary>
-        /// <remarks>
-        /// Will always be in upper case.
-        /// </remarks>
-        /// <see cref="Method"/>
-        string Method { get; set; }
-
-        /// <summary>
-        /// Gets parameter from <see cref="QueryString"/> or <see cref="Form"/>.
-        /// </summary>
-        HttpParam Param { get; }
-
-        /// <summary>
-        /// Gets variables sent in the query string
-        /// </summary>
-        HttpInput QueryString { get; }
-
-        /// <summary>
-        /// Gets or sets requested URI.
-        /// </summary>
-        Uri Uri { get; set; }
-
-        /// <summary>
-        /// Gets URI absolute path divided into parts.
-        /// </summary>
-        /// <example>
-        /// // URI is: http://gauffin.com/code/tiny/
-        /// Console.WriteLine(request.UriParts[0]); // result: code
-        /// Console.WriteLine(request.UriParts[1]); // result: tiny
-        /// </example>
-        /// <remarks>
-        /// If you're using controllers than the first part is controller name,
-        /// the second part is method name and the third part is Id property.
-        /// </remarks>
-        /// <seealso cref="Uri"/>
-        string[] UriParts { get; }
-
-        /// <summary>
-        /// Gets or sets path and query.
-        /// </summary>
-        /// <see cref="Uri"/>
-        /// <remarks>
-        /// Are only used during request parsing. Cannot be set after "Host" header have been
-        /// added.
-        /// </remarks>
-        string UriPath { get; set; }
-
-        /// <summary>
-        /// Called during parsing of a <see cref="IHttpRequest"/>.
-        /// </summary>
-        /// <param name="name">Name of the header, should not be URL encoded</param>
-        /// <param name="value">Value of the header, should not be URL encoded</param>
-        /// <exception cref="BadRequestException">If a header is incorrect.</exception>
-        void AddHeader(string name, string value);
-
-        /// <summary>
-        /// Add bytes to the body
-        /// </summary>
-        /// <param name="bytes">buffer to read bytes from</param>
-        /// <param name="offset">where to start read</param>
-        /// <param name="length">number of bytes to read</param>
-        /// <returns>Number of bytes actually read (same as length unless we got all body bytes).</returns>
-        /// <exception cref="InvalidOperationException">If body is not writable</exception>
-        /// <exception cref="ArgumentNullException"><c>bytes</c> is null.</exception>
-        /// <exception cref="ArgumentOutOfRangeException"><c>offset</c> is out of range.</exception>
-        int AddToBody(byte[] bytes, int offset, int length);
-
-        /// <summary>
-        /// Clear everything in the request
-        /// </summary>
-        void Clear();
-
-        /// <summary>
-        /// Decode body into a form.
-        /// </summary>
-        /// <param name="providers">A list with form decoders.</param>
-        /// <exception cref="InvalidDataException">If body contents is not valid for the chosen decoder.</exception>
-        /// <exception cref="InvalidOperationException">If body is still being transferred.</exception>
-        void DecodeBody(FormDecoderProvider providers);
-
-        /// <summary>
-        /// Sets the cookies.
-        /// </summary>
-        /// <param name="cookies">The cookies.</param>
-        void SetCookies(RequestCookies cookies);
-
-		/// <summary>
-		/// Create a response object.
-		/// </summary>
-		/// <param name="context">Context for the connected client.</param>
-		/// <returns>A new <see cref="IHttpResponse"/>.</returns>
-		IHttpResponse CreateResponse(IHttpClientContext context);
-    }
-}
\ No newline at end of file
diff --git a/HttpServer/trunk/HttpServer/IHttpRequestParser.cs b/HttpServer/trunk/HttpServer/IHttpRequestParser.cs
deleted file mode 100644
index 3e97f1c..0000000
--- a/HttpServer/trunk/HttpServer/IHttpRequestParser.cs
+++ /dev/null
@@ -1,94 +0,0 @@
-using System;
-using HttpServer.Exceptions;
-using HttpServer.Parser;
-
-namespace HttpServer
-{
-    /// <summary>
-    /// Event driven parser used to parse incoming HTTP requests.
-    /// </summary>
-    /// <remarks>
-    /// The parser supports partial messages and keeps the states between
-    /// each parsed buffer. It's therefore important that the parser gets
-    /// <see cref="Clear"/>ed if a client disconnects.
-    /// </remarks>
-    public interface IHttpRequestParser
-    {
-        /// <summary>
-        /// Current state in parser.
-        /// </summary>
-        RequestParserState CurrentState { get; }
-
-        /// <summary>
-        /// Parse partial or complete message.
-        /// </summary>
-        /// <param name="buffer">buffer containing incoming bytes</param>
-        /// <param name="offset">where in buffer that parsing should start</param>
-        /// <param name="count">number of bytes to parse</param>
-        /// <returns>Unparsed bytes left in buffer.</returns>
-        /// <exception cref="BadRequestException"><c>BadRequestException</c>.</exception>
-        int Parse(byte[] buffer, int offset, int count);
-
-        /// <summary>
-        /// A request have been successfully parsed.
-        /// </summary>
-        event EventHandler RequestCompleted;
-
-        /// <summary>
-        /// More body bytes have been received.
-        /// </summary>
-        event EventHandler<BodyEventArgs> BodyBytesReceived;
-
-        /// <summary>
-        /// Request line have been received.
-        /// </summary>
-        event EventHandler<RequestLineEventArgs> RequestLineReceived;
-
-        /// <summary>
-        /// A header have been received.
-        /// </summary>
-        event EventHandler<HeaderEventArgs> HeaderReceived;
-
-		/// <summary>
-		/// Clear parser state.
-		/// </summary>
-    	void Clear();
-
-		/// <summary>
-		/// Gets or sets the log writer.
-		/// </summary>
-    	ILogWriter LogWriter { get; set; }
-    }
-
-    /// <summary>
-    /// Current state in the parsing.
-    /// </summary>
-    public enum RequestParserState
-    {
-        /// <summary>
-        /// Should parse the request line
-        /// </summary>
-        FirstLine,
-        /// <summary>
-        /// Searching for a complete header name
-        /// </summary>
-        HeaderName,
-        /// <summary>
-        /// Searching for colon after header name (ignoring white spaces)
-        /// </summary>
-        AfterName,
-        /// <summary>
-        /// Searching for start of header value (ignoring white spaces)
-        /// </summary>
-        Between,
-        /// <summary>
-        /// Searching for a complete header value (can span over multiple lines, as long as they are prefixed with one/more whitespaces)
-        /// </summary>
-        HeaderValue,
-
-        /// <summary>
-        /// Adding bytes to body
-        /// </summary>
-        Body
-    }
-}
\ No newline at end of file
diff --git a/HttpServer/trunk/HttpServer/IHttpResponse.cs b/HttpServer/trunk/HttpServer/IHttpResponse.cs
deleted file mode 100644
index 1693dc5..0000000
--- a/HttpServer/trunk/HttpServer/IHttpResponse.cs
+++ /dev/null
@@ -1,180 +0,0 @@
-using System;
-using System.IO;
-using System.Net;
-using System.Text;
-
-namespace HttpServer
-{
-    /// <summary>
-    /// Response that is sent back to the web browser / client.
-    ///
-    /// A response can be sent if different ways. The easiest one is
-    /// to just fill the Body stream with content, everything else
-    /// will then be taken care of by the framework. The default content-type
-    /// is text/html, you should change it if you send anything else.
-    ///
-    /// The second and slighty more complex way is to send the response
-    /// as parts. Start with sending the header using the SendHeaders method and
-    /// then you can send the body using SendBody method, but do not forget
-    /// to set ContentType and ContentLength before doing so.
-    /// </summary>
-    /// <example>
-    /// public void MyHandler(IHttpRequest request, IHttpResponse response)
-    /// {
-    ///
-    /// }
-    /// </example>
-    public interface IHttpResponse
-    {
-        /// <summary>
-        /// The body stream is used to cache the body contents
-        /// before sending everything to the client. It's the simplest
-        /// way to serve documents.
-        /// </summary>
-        Stream Body { get; set; }
-        byte[] RawBuffer { get; set; }
-        int RawBufferStart { get; set; }
-        int RawBufferLen { get; set; }
-        uint requestID { get; }
-
-        /// <summary>
-        /// Defines the version of the HTTP Response for applications where it's required
-        /// for this to be forced.
-        /// </summary>
-        string ProtocolVersion { get; set; }
-        int Priority { get; set; }
-
-        /// <summary>
-        /// The chunked encoding modifies the body of a message in order to
-        /// transfer it as a series of chunks, each with its own size indicator,
-        /// followed by an OPTIONAL trailer containing entity-header fields. This
-        /// allows dynamically produced content to be transferred along with the
-        /// information necessary for the recipient to verify that it has
-        /// received the full message.
-        /// </summary>
-        bool Chunked { get; set; }
-
-        /// <summary>
-        /// Kind of connection
-        /// </summary>
-        ConnectionType Connection { get; set; }
-
-        /// <summary>
-        /// Encoding to use when sending stuff to the client.
-        /// </summary>
-        /// <remarks>Default is UTF8</remarks>
-        Encoding Encoding { get; set; }
-
-        /// <summary>
-        /// Number of seconds to keep connection alive
-        /// </summary>
-        /// <remarks>Only used if Connection property is set to ConnectionType.KeepAlive</remarks>
-        int KeepAlive { get; set; }
-
-        /// <summary>
-        /// Status code that is sent to the client.
-        /// </summary>
-        /// <remarks>Default is HttpStatusCode.Ok</remarks>
-        HttpStatusCode Status { get; set; }
-
-        /// <summary>
-        /// Information about why a specific status code was used.
-        /// </summary>
-        string Reason { get; set; }
-
-        /// <summary>
-        /// Size of the body. MUST be specified before sending the header,
-        /// unless property Chunked is set to true.
-        /// </summary>
-        long ContentLength { get; set; }
-
-        /// <summary>
-        /// Kind of content in the body
-        /// </summary>
-        /// <remarks>Default is text/html</remarks>
-        string ContentType { get; set; }
-
-        /// <summary>
-        /// Headers have been sent to the client-
-        /// </summary>
-        /// <remarks>You can not send any additional headers if they have already been sent.</remarks>
-        bool HeadersSent { get; }
-
-        /// <summary>
-        /// The whole response have been sent.
-        /// </summary>
-        bool Sent { get; }
-
-        /// <summary>
-        /// Cookies that should be created/changed.
-        /// </summary>
-        ResponseCookies Cookies { get; }
-
-        /// <summary>
-        /// Add another header to the document.
-        /// </summary>
-        /// <param name="name">Name of the header, case sensitive, use lower cases.</param>
-        /// <param name="value">Header values can span over multiple lines as long as each line starts with a white space. New line chars should be \r\n</param>
-        /// <exception cref="InvalidOperationException">If headers already been sent.</exception>
-        /// <exception cref="ArgumentException">If value conditions have not been met.</exception>
-        /// <remarks>Adding any header will override the default ones and those specified by properties.</remarks>
-        void AddHeader(string name, string value);
-
-        /// <summary>
-        /// Send headers and body to the browser.
-        /// </summary>
-        /// <exception cref="InvalidOperationException">If content have already been sent.</exception>
-        void Send();
-
-        /// <summary>
-        /// Make sure that you have specified ContentLength and sent the headers first.
-        /// </summary>
-        /// <param name="buffer"></param>
-        /// <exception cref="InvalidOperationException">If headers have not been sent.</exception>
-        /// <see cref="IHttpResponse.SendHeaders"/>
-        /// <param name="offset">offest of first byte to send</param>
-        /// <param name="count">number of bytes to send.</param>
-        /// <seealso cref="IHttpResponse.Send"/>
-        /// <seealso cref="IHttpResponse.SendHeaders"/>
-        /// <remarks>This method can be used if you want to send body contents without caching them first. This
-        /// is recommended for larger files to keep the memory usage low.</remarks>
-        bool SendBody(byte[] buffer, int offset, int count);
-
-        /// <summary>
-        /// Make sure that you have specified ContentLength and sent the headers first.
-        /// </summary>
-        /// <param name="buffer"></param>
-        /// <exception cref="InvalidOperationException">If headers have not been sent.</exception>
-        /// <see cref="IHttpResponse.SendHeaders"/>
-        /// <seealso cref="IHttpResponse.Send"/>
-        /// <seealso cref="IHttpResponse.SendHeaders"/>
-        /// <remarks>This method can be used if you want to send body contents without caching them first. This
-        /// is recommended for larger files to keep the memory usage low.</remarks>
-        bool SendBody(byte[] buffer);
-
-        /// <summary>
-        /// Send headers to the client.
-        /// </summary>
-        /// <exception cref="InvalidOperationException">If headers already been sent.</exception>
-        /// <seealso cref="IHttpResponse.AddHeader"/>
-        /// <seealso cref="IHttpResponse.Send"/>
-        /// <seealso cref="IHttpResponse.SendBody(byte[])"/>
-        bool SendHeaders();
-    }
-
-    /// <summary>
-    /// Type of HTTP connection
-    /// </summary>
-    public enum ConnectionType
-    {
-        /// <summary>
-        /// Connection is closed after each request-response
-        /// </summary>
-        Close,
-
-        /// <summary>
-        /// Connection is kept alive for X seconds (unless another request have been made)
-        /// </summary>
-        KeepAlive
-    }
-}
diff --git a/HttpServer/trunk/HttpServer/ILogWriter.cs b/HttpServer/trunk/HttpServer/ILogWriter.cs
deleted file mode 100644
index bf0b52c..0000000
--- a/HttpServer/trunk/HttpServer/ILogWriter.cs
+++ /dev/null
@@ -1,151 +0,0 @@
-using System;
-using System.Diagnostics;
-using System.Text;
-
-namespace HttpServer
-{
-    /// <summary>
-    /// Priority for log entries
-    /// </summary>
-    /// <seealso cref="ILogWriter"/>
-    public enum LogPrio
-    {
-        /// <summary>
-        /// Very detailed logs to be able to follow the flow of the program.
-        /// </summary>
-        Trace,
-
-        /// <summary>
-        /// Logs to help debug errors in the application
-        /// </summary>
-        Debug,
-
-        /// <summary>
-        /// Information to be able to keep track of state changes etc.
-        /// </summary>
-        Info,
-
-        /// <summary>
-        /// Something did not go as we expected, but it's no problem.
-        /// </summary>
-        Warning,
-
-        /// <summary>
-        /// Something that should not fail failed, but we can still keep
-        /// on going.
-        /// </summary>
-        Error,
-
-        /// <summary>
-        /// Something failed, and we cannot handle it properly.
-        /// </summary>
-        Fatal
-    }
-
-    /// <summary>
-    /// Interface used to write to log files.
-    /// </summary>
-    public interface ILogWriter
-    {
-        /// <summary>
-        /// Write an entry to the log file.
-        /// </summary>
-        /// <param name="source">object that is writing to the log</param>
-        /// <param name="priority">importance of the log message</param>
-        /// <param name="message">the message</param>
-        void Write(object source, LogPrio priority, string message);
-    }
-
-    /// <summary>
-    /// This class writes to the console. It colors the output depending on the logprio and includes a 3-level stacktrace (in debug mode)
-    /// </summary>
-    /// <seealso cref="ILogWriter"/>
-    public sealed class ConsoleLogWriter : ILogWriter
-    {
-        /// <summary>
-        /// The actual instance of this class.
-        /// </summary>
-        public static readonly ConsoleLogWriter Instance = new ConsoleLogWriter();
-
-        /// <summary>
-        /// Logwriters the specified source.
-        /// </summary>
-        /// <param name="source">object that wrote the logentry.</param>
-        /// <param name="prio">Importance of the log message</param>
-        /// <param name="message">The message.</param>
-        public void Write(object source, LogPrio prio, string message)
-        {
-            StringBuilder sb = new StringBuilder();
-            sb.Append(DateTime.Now.ToString());
-            sb.Append(" ");
-            sb.Append(prio.ToString().PadRight(10));
-            sb.Append(" | ");
-#if DEBUG
-            StackTrace trace = new StackTrace();
-            StackFrame[] frames = trace.GetFrames();
-            int endFrame = frames.Length > 4 ? 4 : frames.Length;
-            int startFrame = frames.Length > 0 ? 1 : 0;
-            for (int i = startFrame; i < endFrame; ++i)
-            {
-                sb.Append(frames[i].GetMethod().Name);
-                sb.Append(" -> ");
-            }
-#else
-            sb.Append(System.Reflection.MethodBase.GetCurrentMethod().Name);
-            sb.Append(" | ");
-#endif
-            sb.Append(message);
-
-            Console.ForegroundColor = GetColor(prio);
-            Console.WriteLine(sb.ToString());
-            Console.ForegroundColor = ConsoleColor.Gray;
-        }
-
-        /// <summary>
-        /// Get color for the specified logprio
-        /// </summary>
-        /// <param name="prio">prio for the log entry</param>
-        /// <returns>A <see cref="ConsoleColor"/> for the prio</returns>
-        public static ConsoleColor GetColor(LogPrio prio)
-        {
-            switch (prio)
-            {
-                case LogPrio.Trace:
-                    return ConsoleColor.DarkGray;
-                case LogPrio.Debug:
-                    return ConsoleColor.Gray;
-                case LogPrio.Info:
-                    return ConsoleColor.White;
-                case LogPrio.Warning:
-                    return ConsoleColor.DarkMagenta;
-                case LogPrio.Error:
-                    return ConsoleColor.Magenta;
-                case LogPrio.Fatal:
-                    return ConsoleColor.Red;
-            }
-
-            return ConsoleColor.Yellow;
-        }
-    }
-
-    /// <summary>
-    /// Default log writer, writes everything to null (nowhere).
-    /// </summary>
-    /// <seealso cref="ILogWriter"/>
-    public sealed class NullLogWriter : ILogWriter
-    {
-        /// <summary>
-        /// The logging instance.
-        /// </summary>
-        public static readonly NullLogWriter Instance = new NullLogWriter();
-
-        /// <summary>
-        /// Writes everything to null
-        /// </summary>
-        /// <param name="source">object that wrote the log entry.</param>
-        /// <param name="prio">Importance of the log message</param>
-        /// <param name="message">The message.</param>
-        public void Write(object source, LogPrio prio, string message)
-        {}
-    }
-}
diff --git a/HttpServer/trunk/HttpServer/LogWriter.cs b/HttpServer/trunk/HttpServer/LogWriter.cs
deleted file mode 100644
index 934f0ec..0000000
--- a/HttpServer/trunk/HttpServer/LogWriter.cs
+++ /dev/null
@@ -1,151 +0,0 @@
-using System;
-using System.Diagnostics;
-using System.Text;
-
-namespace HttpServer
-{
-    /// <summary>
-    /// Priority for log entries
-    /// </summary>
-    /// <seealso cref="LogWriter"/>
-    public enum LogPrio
-    {
-        /// <summary>
-        /// Very detailed logs to be able to follow the flow of the program.
-        /// </summary>
-        Trace,
-
-        /// <summary>
-        /// Logs to help debug errors in the application
-        /// </summary>
-        Debug,
-
-        /// <summary>
-        /// Information to be able to keep track of state changes etc.
-        /// </summary>
-        Info,
-
-        /// <summary>
-        /// Something did not go as we expected, but it's no problem.
-        /// </summary>
-        Warning,
-
-        /// <summary>
-        /// Something that should not fail failed, but we can still keep
-        /// on going.
-        /// </summary>
-        Error,
-
-        /// <summary>
-        /// Something failed, and we cannot handle it properly.
-        /// </summary>
-        Fatal
-    }
-
-    /// <summary>
-    /// Interface used to write to log files.
-    /// </summary>
-    public interface LogWriter
-    {
-        /// <summary>
-        /// Write an entry to the log file.
-        /// </summary>
-        /// <param name="source">object that is writing to the log</param>
-        /// <param name="priority">importance of the log message</param>
-        /// <param name="message">the message</param>
-        void Write(object source, LogPrio priority, string message);
-    }
-
-    /// <summary>
-    /// This class writes to the console. It colors the output depending on the logprio and includes a 3-level stacktrace (in debug mode)
-    /// </summary>
-    /// <seealso cref="LogWriter"/>
-    public sealed class ConsoleLogWriter : LogWriter
-    {
-        /// <summary>
-        /// The actual instance of this class.
-        /// </summary>
-        public static readonly ConsoleLogWriter Instance = new ConsoleLogWriter();
-
-        /// <summary>
-        /// Logwriters the specified source.
-        /// </summary>
-        /// <param name="source">object that wrote the logentry.</param>
-        /// <param name="prio">Importance of the log message</param>
-        /// <param name="message">The message.</param>
-        public void Write(object source, LogPrio prio, string message)
-        {
-            StringBuilder sb = new StringBuilder();
-            sb.Append(DateTime.Now.ToString());
-            sb.Append(" ");
-            sb.Append(prio.ToString().PadRight(10));
-            sb.Append(" | ");
-#if DEBUG
-            StackTrace trace = new StackTrace();
-            StackFrame[] frames = trace.GetFrames();
-            int endFrame = frames.Length > 4 ? 4 : frames.Length;
-            int startFrame = frames.Length > 0 ? 1 : 0;
-            for (int i = startFrame; i < endFrame; ++i)
-            {
-                sb.Append(frames[i].GetMethod().Name);
-                sb.Append(" -> ");
-            }
-#else
-            sb.Append(System.Reflection.MethodBase.GetCurrentMethod().Name);
-            sb.Append(" | ");
-#endif
-            sb.Append(message);
-
-            Console.ForegroundColor = GetColor(prio);
-            Console.WriteLine(sb.ToString());
-            Console.ForegroundColor = ConsoleColor.Gray;
-        }
-
-        /// <summary>
-        /// Get color for the specified logprio
-        /// </summary>
-        /// <param name="prio">prio for the log entry</param>
-        /// <returns>A <see cref="ConsoleColor"/> for the prio</returns>
-        public static ConsoleColor GetColor(LogPrio prio)
-        {
-            switch (prio)
-            {
-                case LogPrio.Trace:
-                    return ConsoleColor.DarkGray;
-                case LogPrio.Debug:
-                    return ConsoleColor.Gray;
-                case LogPrio.Info:
-                    return ConsoleColor.White;
-                case LogPrio.Warning:
-                    return ConsoleColor.DarkMagenta;
-                case LogPrio.Error:
-                    return ConsoleColor.Magenta;
-                case LogPrio.Fatal:
-                    return ConsoleColor.Red;
-            }
-
-            return ConsoleColor.Yellow;
-        }
-    }
-
-    /// <summary>
-    /// Default log writer, writes everything to null (nowhere).
-    /// </summary>
-    /// <seealso cref="LogWriter"/>
-    public sealed class NullLogWriter : LogWriter
-    {
-        /// <summary>
-        /// The logging instance.
-        /// </summary>
-        public static readonly NullLogWriter Instance = new NullLogWriter();
-
-        /// <summary>
-        /// Writes everything to null
-        /// </summary>
-        /// <param name="source">object that wrote the logentry.</param>
-        /// <param name="prio">Importance of the log message</param>
-        /// <param name="message">The message.</param>
-        public void Write(object source, LogPrio prio, string message)
-        {}
-    }
-}
diff --git a/HttpServer/trunk/HttpServer/Method.cs b/HttpServer/trunk/HttpServer/Method.cs
deleted file mode 100644
index c648f30..0000000
--- a/HttpServer/trunk/HttpServer/Method.cs
+++ /dev/null
@@ -1,285 +0,0 @@
-using System;
-
-namespace HttpServer
-{
-    /// <summary>
-    /// Contains all HTTP Methods (according to the HTTP 1.1 specification)
-    /// <para>
-    /// See: http://www.w3.org/Protocols/rfc2616/rfc2616-sec9.html
-    /// </para>
-    /// </summary>
-    public static class Method
-    {
-        /// <summary>
-        /// The DELETE method requests that the origin server delete the resource identified by the Request-URI.
-        /// </summary>
-        /// <remarks>
-        /// <para>
-        /// This method MAY be overridden by human intervention (or other means) on the origin server.
-        /// The client cannot be guaranteed that the operation has been carried out, even if the status code
-        /// returned from the origin server indicates that the action has been completed successfully.
-        /// </para>
-        /// <para>
-        /// However, the server SHOULD NOT indicate success unless, at the time the response is given,
-        /// it intends to delete the resource or move it to an inaccessible location.
-        /// </para>
-        /// <para>
-        /// A successful response SHOULD be 200 (OK) if the response includes an entity describing the status,
-        /// 202 (Accepted) if the action has not yet been enacted,
-        /// or 204 (No Content) if the action has been enacted but the response does not include an entity.
-        /// </para>
-        /// <para>
-        /// If the request passes through a cache and the Request-URI identifies one or more currently cached entities,
-        /// those entries SHOULD be treated as stale. Responses to this method are not cacheable.
-        /// </para>
-        /// </remarks>
-        public const string Delete = "DELETE";
-
-        /// <summary>
-        /// The GET method means retrieve whatever information (in the form of an entity) is identified by the Request-URI.
-        /// </summary>
-        /// <remarks>
-        /// <para>
-        /// If the Request-URI refers to a data-producing process, it is the produced data which shall be returned as the
-        /// entity in the response and not the source text of the process, unless that text happens to be the output of the process.
-        /// </para>
-        /// <para>
-        /// The semantics of the GET method change to a "conditional GET" if the request message includes an
-        /// If-Modified-Since, If-Unmodified-Since, If-Match, If-None-Match, or If-Range header field.
-        /// A conditional GET method requests that the entity be transferred only under the circumstances described
-        /// by the conditional header field(s). The conditional GET method is intended to reduce unnecessary network
-        /// usage by allowing cached entities to be refreshed without requiring multiple requests or transferring
-        /// data already held by the client.
-        /// </para>
-        /// </remarks>
-        public const string Get = "GET";
-
-        /// <summary>
-        /// The HEAD method is identical to GET except that the server MUST NOT return a message-body in the response.
-        /// </summary>
-        /// <remarks>
-        /// The meta information contained in the HTTP headers in response to a HEAD request SHOULD be identical to the
-        ///  information sent in response to a GET request. This method can be used for obtaining meta information about
-        /// the entity implied by the request without transferring the entity-body itself.
-        ///
-        /// This method is often used for testing hypertext links for validity, accessibility, and recent modification.
-        /// </remarks>
-        public const string Header = "HEAD";
-
-        /// <summary>
-        /// <para>The OPTIONS method represents a request for information about the communication options available on the request/response chain identified by the Request-URI.</para>
-        /// </summary>
-        /// <remarks>
-        /// <para>This method allows the client to determine the options and/or requirements associated with a resource, or the capabilities of a server, without implying a resource action or initiating a resource retrieval.</para>
-        /// </remarks>
-        public const string Options = "OPTIONS";
-
-        /// <summary>
-        /// The POST method is used to request that the origin server accept the entity enclosed
-        /// in the request as a new subordinate of the resource identified by the Request-URI in the Request-Line.
-        /// </summary>
-        /// <remarks>
-        /// POST is designed to allow a uniform method to cover the following functions:
-        /// <list type="bullet">
-        /// <item>
-        /// Annotation of existing resources;
-        /// </item><item>
-        /// Posting a message to a bulletin board, newsgroup, mailing list, or similar group of articles;
-        /// </item><item>
-        /// Providing a block of data, such as the result of submitting a form, to a data-handling process;
-        /// </item><item>
-        /// Extending a database through an append operation.
-        /// </item>
-        /// </list>
-        /// <para>
-        /// If a resource has been created on the origin server, the response SHOULD be 201 (Created) and
-        /// contain an entity which describes the status of the request and refers to the new resource, and a
-        /// Location header (see section 14.30).
-        /// </para>
-        /// <para>
-        ///  The action performed by the POST method might not result in a resource that can be identified by a URI.
-        /// In this case, either 200 (OK) or 204 (No Content) is the appropriate response status, depending on
-        /// whether or not the response includes an entity that describes the result.
-        /// </para><para>
-        /// Responses to this method are not cacheable, unless the response includes appropriate Cache-Control
-        /// or Expires header fields. However, the 303 (See Other) response can be used to direct the user agent
-        /// to retrieve a cacheable resource.
-        /// </para>
-        /// </remarks>
-        public const string Post = "POST";
-
-        /// <summary>
-        /// The PUT method requests that the enclosed entity be stored under the supplied Request-URI.
-        /// </summary>
-        /// <remarks>
-        /// <list type="bullet">
-        /// <item>
-        /// If the Request-URI refers to an already existing resource, the enclosed entity SHOULD be considered as a
-        /// modified version of the one residing on the origin server.
-        /// </item><item>
-        /// If the Request-URI does not point to an existing resource, and that URI is capable of being defined as a new
-        /// resource by the requesting user agent, the origin server can create the resource with that URI.
-        /// </item><item>
-        /// If a new resource is created, the origin server MUST inform the user agent via the 201 (Created) response.
-        /// </item><item>
-        /// If an existing resource is modified, either the 200 (OK) or 204 (No Content) response codes SHOULD be sent to
-        /// indicate successful completion of the request.
-        /// </item><item>
-        /// If the resource could not be created or modified with the Request-URI, an appropriate error response SHOULD be
-        /// given that reflects the nature of the problem.
-        /// </item>
-        /// </list>
-        /// <para>
-        /// The recipient of the entity MUST NOT ignore any Content-* (e.g. Content-Range) headers that it does not
-        /// understand or implement and MUST return a 501 (Not Implemented) response in such cases.
-        /// </para>
-        /// </remarks>
-        public const string Put = "PUT";
-
-        /// <summary>
-        /// The TRACE method is used to invoke a remote, application-layer loop- back of the request message.
-        /// </summary>
-        public const string Trace = "TRACE";
-    }
-
-    /// <summary>
-    /// Contains all HTTP Methods (according to the HTTP 1.1 specification)
-    /// <para>
-    /// See: http://www.w3.org/Protocols/rfc2616/rfc2616-sec9.html
-    /// </para>
-    /// </summary>
-    [Obsolete("Use Method.XXX instead.")]
-    public static class Methods
-    {
-        /// <summary>
-        /// The DELETE method requests that the origin server delete the resource identified by the Request-URI.
-        /// </summary>
-        /// <remarks>
-        /// <para>
-        /// This method MAY be overridden by human intervention (or other means) on the origin server.
-        /// The client cannot be guaranteed that the operation has been carried out, even if the status code
-        /// returned from the origin server indicates that the action has been completed successfully.
-        /// </para>
-        /// <para>
-        /// However, the server SHOULD NOT indicate success unless, at the time the response is given,
-        /// it intends to delete the resource or move it to an inaccessible location.
-        /// </para>
-        /// <para>
-        /// A successful response SHOULD be 200 (OK) if the response includes an entity describing the status,
-        /// 202 (Accepted) if the action has not yet been enacted,
-        /// or 204 (No Content) if the action has been enacted but the response does not include an entity.
-        /// </para>
-        /// <para>
-        /// If the request passes through a cache and the Request-URI identifies one or more currently cached entities,
-        /// those entries SHOULD be treated as stale. Responses to this method are not cacheable.
-        /// </para>
-        /// </remarks>
-        public const string Delete = "DELETE";
-
-        /// <summary>
-        /// The GET method means retrieve whatever information (in the form of an entity) is identified by the Request-URI.
-        /// </summary>
-        /// <remarks>
-        /// <para>
-        /// If the Request-URI refers to a data-producing process, it is the produced data which shall be returned as the
-        /// entity in the response and not the source text of the process, unless that text happens to be the output of the process.
-        /// </para>
-        /// <para>
-        /// The semantics of the GET method change to a "conditional GET" if the request message includes an
-        /// If-Modified-Since, If-Unmodified-Since, If-Match, If-None-Match, or If-Range header field.
-        /// A conditional GET method requests that the entity be transferred only under the circumstances described
-        /// by the conditional header field(s). The conditional GET method is intended to reduce unnecessary network
-        /// usage by allowing cached entities to be refreshed without requiring multiple requests or transferring
-        /// data already held by the client.
-        /// </para>
-        /// </remarks>
-        public const string Get = "GET";
-
-        /// <summary>
-        /// The HEAD method is identical to GET except that the server MUST NOT return a message-body in the response.
-        /// </summary>
-        /// <remarks>
-        /// The meta information contained in the HTTP headers in response to a HEAD request SHOULD be identical to the
-        ///  information sent in response to a GET request. This method can be used for obtaining meta information about
-        /// the entity implied by the request without transferring the entity-body itself.
-        ///
-        /// This method is often used for testing hypertext links for validity, accessibility, and recent modification.
-        /// </remarks>
-        public const string Header = "HEAD";
-
-        /// <summary>
-        /// <para>The OPTIONS method represents a request for information about the communication options available on the request/response chain identified by the Request-URI.</para>
-        /// </summary>
-        /// <remarks>
-        /// <para>This method allows the client to determine the options and/or requirements associated with a resource, or the capabilities of a server, without implying a resource action or initiating a resource retrieval.</para>
-        /// </remarks>
-        public const string Options = "OPTIONS";
-
-        /// <summary>
-        /// The POST method is used to request that the origin server accept the entity enclosed
-        /// in the request as a new subordinate of the resource identified by the Request-URI in the Request-Line.
-        /// </summary>
-        /// <remarks>
-        /// POST is designed to allow a uniform method to cover the following functions:
-        /// <list type="bullet">
-        /// <item>
-        /// Annotation of existing resources;
-        /// </item><item>
-        /// Posting a message to a bulletin board, newsgroup, mailing list, or similar group of articles;
-        /// </item><item>
-        /// Providing a block of data, such as the result of submitting a form, to a data-handling process;
-        /// </item><item>
-        /// Extending a database through an append operation.
-        /// </item>
-        /// </list>
-        /// <para>
-        /// If a resource has been created on the origin server, the response SHOULD be 201 (Created) and
-        /// contain an entity which describes the status of the request and refers to the new resource, and a
-        /// Location header (see section 14.30).
-        /// </para>
-        /// <para>
-        ///  The action performed by the POST method might not result in a resource that can be identified by a URI.
-        /// In this case, either 200 (OK) or 204 (No Content) is the appropriate response status, depending on
-        /// whether or not the response includes an entity that describes the result.
-        /// </para><para>
-        /// Responses to this method are not cacheable, unless the response includes appropriate Cache-Control
-        /// or Expires header fields. However, the 303 (See Other) response can be used to direct the user agent
-        /// to retrieve a cacheable resource.
-        /// </para>
-        /// </remarks>
-        public const string Post = "POST";
-
-        /// <summary>
-        /// The PUT method requests that the enclosed entity be stored under the supplied Request-URI.
-        /// </summary>
-        /// <remarks>
-        /// <list type="bullet">
-        /// <item>
-        /// If the Request-URI refers to an already existing resource, the enclosed entity SHOULD be considered as a
-        /// modified version of the one residing on the origin server.
-        /// </item><item>
-        /// If the Request-URI does not point to an existing resource, and that URI is capable of being defined as a new
-        /// resource by the requesting user agent, the origin server can create the resource with that URI.
-        /// </item><item>
-        /// If a new resource is created, the origin server MUST inform the user agent via the 201 (Created) response.
-        /// </item><item>
-        /// If an existing resource is modified, either the 200 (OK) or 204 (No Content) response codes SHOULD be sent to
-        /// indicate successful completion of the request.
-        /// </item><item>
-        /// If the resource could not be created or modified with the Request-URI, an appropriate error response SHOULD be
-        /// given that reflects the nature of the problem.
-        /// </item>
-        /// </list>
-        /// <para>
-        /// The recipient of the entity MUST NOT ignore any Content-* (e.g. Content-Range) headers that it does not
-        /// understand or implement and MUST return a 501 (Not Implemented) response in such cases.
-        /// </para>
-        /// </remarks>
-        public const string Put = "PUT";
-
-        /// <summary>
-        /// The TRACE method is used to invoke a remote, application-layer loop- back of the request message.
-        /// </summary>
-        public const string Trace = "TRACE";
-    }
-}
diff --git a/HttpServer/trunk/HttpServer/Parser/BodyEventArgs.cs b/HttpServer/trunk/HttpServer/Parser/BodyEventArgs.cs
deleted file mode 100644
index 09f0f51..0000000
--- a/HttpServer/trunk/HttpServer/Parser/BodyEventArgs.cs
+++ /dev/null
@@ -1,59 +0,0 @@
-using System;
-
-namespace HttpServer.Parser
-{
-    /// <summary>
-    /// Arguments used when more body bytes have come.
-    /// </summary>
-    public class BodyEventArgs : EventArgs
-    {
-        /// <summary>
-        /// Initializes a new instance of the <see cref="BodyEventArgs"/> class.
-        /// </summary>
-        /// <param name="buffer">buffer that contains the received bytes.</param>
-        /// <param name="offset">offset in buffer where to start processing.</param>
-        /// <param name="count">number of bytes from <paramref name="offset"/> that should be parsed.</param>
-        public BodyEventArgs(byte[] buffer, int offset, int count)
-        {
-            Check.Require(buffer, "buffer");
-            Check.Min(1, offset, "offset");
-            Check.Min(1, count, "count");
-
-            Buffer = buffer;
-            Offset = offset;
-            Count = count;
-        }
-
-        /// <summary>
-        /// Initializes a new instance of the <see cref="BodyEventArgs"/> class.
-        /// </summary>
-        public BodyEventArgs()
-        {
-        }
-
-        /// <summary>
-        /// Gets or sets buffer that contains the received bytes.
-        /// </summary>
-        public byte[] Buffer { get; set; }
-        /*
-        /// <summary>
-        /// Gets or sets number of bytes used by the request.
-        /// </summary>
-        public int BytesUsed { get; set; }
-        */
-        /// <summary>
-        /// Gets or sets number of bytes from <see cref="Offset"/> that should be parsed.
-        /// </summary>
-        public int Count { get; set; }
-        /*
-        /// <summary>
-        /// Gets or sets whether the body is complete.
-        /// </summary>
-        public bool IsBodyComplete { get; set; }
-        */
-        /// <summary>
-        /// Gets or sets offset in buffer where to start processing.
-        /// </summary>
-        public int Offset { get; set; }
-    }
-}
\ No newline at end of file
diff --git a/HttpServer/trunk/HttpServer/Parser/HeaderEventArgs.cs b/HttpServer/trunk/HttpServer/Parser/HeaderEventArgs.cs
deleted file mode 100644
index 286058e..0000000
--- a/HttpServer/trunk/HttpServer/Parser/HeaderEventArgs.cs
+++ /dev/null
@@ -1,41 +0,0 @@
-using System;
-
-namespace HttpServer.Parser
-{
-    /// <summary>
-    /// Event arguments used when a new header have been parsed.
-    /// </summary>
-    public class HeaderEventArgs : EventArgs
-    {
-        /// <summary>
-        /// Initializes a new instance of the <see cref="HeaderEventArgs"/> class.
-        /// </summary>
-        /// <param name="name">Name of header.</param>
-        /// <param name="value">Header value.</param>
-        public HeaderEventArgs(string name, string value)
-        {
-            Check.NotEmpty(name, "name");
-            Check.NotEmpty(value, "value");
-
-            Name = name;
-            Value = value;
-        }
-
-        /// <summary>
-        /// Initializes a new instance of the <see cref="HeaderEventArgs"/> class.
-        /// </summary>
-        public HeaderEventArgs()
-        {
-        }
-
-        /// <summary>
-        /// Gets or sets header name.
-        /// </summary>
-        public string Name { get; set; }
-
-        /// <summary>
-        /// Gets or sets header value.
-        /// </summary>
-        public string Value { get; set; }
-    }
-}
\ No newline at end of file
diff --git a/HttpServer/trunk/HttpServer/Parser/HttpRequestParser.cs b/HttpServer/trunk/HttpServer/Parser/HttpRequestParser.cs
deleted file mode 100644
index 9af9e63..0000000
--- a/HttpServer/trunk/HttpServer/Parser/HttpRequestParser.cs
+++ /dev/null
@@ -1,416 +0,0 @@
-using System;
-using System.Text;
-using HttpServer.Exceptions;
-
-namespace HttpServer.Parser
-{
-    /// <summary>
-    /// Parses a HTTP request directly from a stream
-    /// </summary>
-    public class HttpRequestParser : IHttpRequestParser
-    {
-        private readonly BodyEventArgs _bodyArgs = new BodyEventArgs();
-        private readonly HeaderEventArgs _headerArgs = new HeaderEventArgs();
-        private ILogWriter _log;
-        private readonly RequestLineEventArgs _requestLineArgs = new RequestLineEventArgs();
-        private int _bodyBytesLeft;
-        private string _curHeaderName = string.Empty;
-        private string _curHeaderValue = string.Empty;
-
-        /// <summary>
-        /// Create a new request parser
-        /// </summary>
-        /// <param name="logWriter">delegate receiving log entries.</param>
-        public HttpRequestParser(ILogWriter logWriter)
-        {
-            _log = logWriter ?? NullLogWriter.Instance;
-        }
-
-        /// <summary>
-        /// Add a number of bytes to the body
-        /// </summary>
-        /// <param name="buffer">buffer containing more body bytes.</param>
-        /// <param name="offset">starting offset in buffer</param>
-        /// <param name="count">number of bytes, from offset, to read.</param>
-        /// <returns>offset to continue from.</returns>
-        private int AddToBody(byte[] buffer, int offset, int count)
-        {
-            // got all bytes we need, or just a few of them?
-            int bytesUsed = count > _bodyBytesLeft ? _bodyBytesLeft : count;
-            _bodyArgs.Buffer = buffer;
-            _bodyArgs.Offset = offset;
-            _bodyArgs.Count = bytesUsed;
-            BodyBytesReceived(this, _bodyArgs);
-
-            _bodyBytesLeft -= bytesUsed;
-            if (_bodyBytesLeft == 0)
-            {
-                // got a complete request.
-                _log.Write(this, LogPrio.Trace, "Request parsed successfully.");
-                OnRequestCompleted();
-                Clear();
-            }
-
-            return offset + bytesUsed;
-        }
-
-        /// <summary>
-        /// Remove all state information for the request.
-        /// </summary>
-        public void Clear()
-        {
-            _bodyBytesLeft = 0;
-            _curHeaderName = string.Empty;
-            _curHeaderValue = string.Empty;
-            CurrentState = RequestParserState.FirstLine;
-        }
-
-        /// <summary>
-        /// Gets or sets the log writer.
-        /// </summary>
-        public ILogWriter LogWriter
-        {
-            get { return _log; }
-            set { _log = value ?? NullLogWriter.Instance; }
-        }
-
-        /// <summary>
-        /// Parse request line
-        /// </summary>
-        /// <param name="value"></param>
-        /// <exception cref="BadRequestException">If line is incorrect</exception>
-        /// <remarks>Expects the following format: "Method SP Request-URI SP HTTP-Version CRLF"</remarks>
-        protected void OnFirstLine(string value)
-        {
-            //
-            //todo: In the interest of robustness, servers SHOULD ignore any empty line(s) received where a Request-Line is expected.
-            // In other words, if the server is reading the protocol stream at the beginning of a message and receives a CRLF first, it should ignore the CRLF.
-            //
-            _log.Write(this, LogPrio.Debug, "Got request: " + value);
-
-            //Request-Line   = Method SP Request-URI SP HTTP-Version CRLF
-            int pos = value.IndexOf(' ');
-            if (pos == -1 || pos + 1 >= value.Length)
-            {
-                _log.Write(this, LogPrio.Warning, "Invalid request line, missing Method. Line: " + value);
-                throw new BadRequestException("Invalid request line, missing Method. Line: " + value);
-            }
-
-            string method = value.Substring(0, pos).ToUpper();
-            int oldPos = pos + 1;
-            pos = value.IndexOf(' ', oldPos);
-            if (pos == -1)
-            {
-                _log.Write(this, LogPrio.Warning, "Invalid request line, missing URI. Line: " + value);
-                throw new BadRequestException("Invalid request line, missing URI. Line: " + value);
-            }
-            string path = value.Substring(oldPos, pos - oldPos);
-            if (path.Length > 4196)
-                throw new BadRequestException("Too long URI.");
-
-            if (pos + 1 >= value.Length)
-            {
-                _log.Write(this, LogPrio.Warning, "Invalid request line, missing HTTP-Version. Line: " + value);
-                throw new BadRequestException("Invalid request line, missing HTTP-Version. Line: " + value);
-            }
-            string version = value.Substring(pos + 1);
-            if (version.Length < 4 || string.Compare(version.Substring(0, 4), "HTTP", true) != 0)
-            {
-                _log.Write(this, LogPrio.Warning, "Invalid HTTP version in request line. Line: " + value);
-                throw new BadRequestException("Invalid HTTP version in Request line. Line: " + value);
-            }
-
-            _requestLineArgs.HttpMethod = method;
-            _requestLineArgs.HttpVersion = version;
-            _requestLineArgs.UriPath = path;
-            RequestLineReceived(this, _requestLineArgs);
-        }
-
-        /// <summary>
-        /// We've parsed a new header.
-        /// </summary>
-        /// <param name="name">Name in lower case</param>
-        /// <param name="value">Value, unmodified.</param>
-        /// <exception cref="BadRequestException">If content length cannot be parsed.</exception>
-        protected void OnHeader(string name, string value)
-        {
-            _headerArgs.Name = name;
-            _headerArgs.Value = value;
-            if (string.Compare(name, "content-length", true) == 0)
-            {
-                if (!int.TryParse(value, out _bodyBytesLeft))
-                    throw new BadRequestException("Content length is not a number.");
-            }
-
-            HeaderReceived(this, _headerArgs);
-        }
-
-        private void OnRequestCompleted()
-        {
-            RequestCompleted(this, EventArgs.Empty);
-        }
-
-        #region IHttpRequestParser Members
-
-        /// <summary>
-        /// Current state in parser.
-        /// </summary>
-        public RequestParserState CurrentState { get; private set; }
-
-        /// <summary>
-        /// Parse a message
-        /// </summary>
-        /// <param name="buffer">bytes to parse.</param>
-        /// <param name="offset">where in buffer that parsing should start</param>
-        /// <param name="count">number of bytes to parse, starting on <paramref name="offset"/>.</param>
-        /// <returns>offset (where to start parsing next).</returns>
-        /// <exception cref="BadRequestException"><c>BadRequestException</c>.</exception>
-        public int Parse(byte[] buffer, int offset, int count)
-        {
-            // add body bytes
-            if (CurrentState == RequestParserState.Body)
-            {
-                return AddToBody(buffer, offset, count);
-            }
-
-#if DEBUG
-            string temp = Encoding.ASCII.GetString(buffer, offset, count);
-            _log.Write(this, LogPrio.Trace, "\r\n\r\n HTTP MESSAGE: " + temp + "\r\n");
-#endif
-
-            int currentLine = 1;
-            int startPos = -1;
-
-            // set start pos since this is from an partial request
-            if (CurrentState == RequestParserState.HeaderValue)
-                startPos = 0;
-
-            int endOfBufferPos = offset + count;
-
-            //<summary>
-            // Handled bytes are used to keep track of the number of bytes processed.
-            // We do this since we can handle partial requests (to be able to check headers and abort
-            // invalid requests directly without having to process the whole header / body).
-            // </summary>
-            int handledBytes = 0;
-
-            for (int currentPos = offset; currentPos < endOfBufferPos; ++currentPos)
-            {
-                var ch = (char)buffer[currentPos];
-                char nextCh = endOfBufferPos > currentPos + 1 ? (char)buffer[currentPos + 1] : char.MinValue;
-
-                if (ch == '\r')
-                    ++currentLine;
-
-                switch (CurrentState)
-                {
-                    case RequestParserState.FirstLine:
-                        if (currentPos == 8191)
-                        {
-                            _log.Write(this, LogPrio.Warning, "HTTP Request is too large.");
-                            throw new BadRequestException("Too large request line.");
-                        }
-                        if (char.IsLetterOrDigit(ch) && startPos == -1)
-                            startPos = currentPos;
-                        if (startPos == -1 && (ch != '\r' || nextCh != '\n'))
-                        {
-                            _log.Write(this, LogPrio.Warning, "Request line is not found.");
-                            throw new BadRequestException("Invalid request line.");
-                        }
-                        if (startPos != -1 && (ch == '\r' || ch == '\n'))
-                        {
-                            int size = GetLineBreakSize(buffer, currentPos);
-                            OnFirstLine(Encoding.UTF8.GetString(buffer, startPos, currentPos - startPos));
-                            CurrentState = CurrentState + 1;
-                            currentPos += size - 1;
-                            handledBytes = currentPos + size - 1;
-                            startPos = -1;
-                        }
-                        break;
-                    case RequestParserState.HeaderName:
-                        if (ch == '\r' || ch == '\n')
-                        {
-                            currentPos += GetLineBreakSize(buffer, currentPos);
-                            if (_bodyBytesLeft == 0)
-                            {
-                                CurrentState = RequestParserState.FirstLine;
-                                _log.Write(this, LogPrio.Trace, "Request parsed successfully (no content).");
-                                OnRequestCompleted();
-                                Clear();
-                                return currentPos;
-                            }
-
-                            CurrentState = RequestParserState.Body;
-                            if (currentPos + 1 < endOfBufferPos)
-                            {
-                                _log.Write(this, LogPrio.Trace, "Adding bytes to the body");
-                                return AddToBody(buffer, currentPos, endOfBufferPos - currentPos);
-                            }
-
-                            return currentPos;
-                        }
-                        if (char.IsWhiteSpace(ch) || ch == ':')
-                        {
-                            if (startPos == -1)
-                            {
-                                _log.Write(this, LogPrio.Warning,
-                                           "Expected header name, got colon on line " + currentLine);
-                                throw new BadRequestException("Expected header name, got colon on line " + currentLine);
-                            }
-                            _curHeaderName = Encoding.UTF8.GetString(buffer, startPos, currentPos - startPos);
-                            handledBytes = currentPos + 1;
-                            startPos = -1;
-                            CurrentState = CurrentState + 1;
-                            if (ch == ':')
-                                CurrentState = CurrentState + 1;
-                        }
-                        else if (startPos == -1)
-                            startPos = currentPos;
-                        else if (!char.IsLetterOrDigit(ch) && ch != '-')
-                        {
-                            _log.Write(this, LogPrio.Warning, "Invalid character in header name on line " + currentLine);
-                            throw new BadRequestException("Invalid character in header name on line " + currentLine);
-                        }
-                        if (startPos != -1 && currentPos - startPos > 200)
-                        {
-                            _log.Write(this, LogPrio.Warning, "Invalid header name on line " + currentLine);
-                            throw new BadRequestException("Invalid header name on line " + currentLine);
-                        }
-                        break;
-                    case RequestParserState.AfterName:
-                        if (ch == ':')
-                        {
-                            handledBytes = currentPos + 1;
-                            CurrentState = CurrentState + 1;
-                        }
-                        break;
-                    case RequestParserState.Between:
-                    {
-                        if (ch == ' ' || ch == '\t')
-                            continue;
-                        int newLineSize = GetLineBreakSize(buffer, currentPos);
-                        if (newLineSize > 0 && currentPos + newLineSize < endOfBufferPos &&
-                            char.IsWhiteSpace((char)buffer[currentPos + newLineSize]))
-                        {
-                            ++currentPos;
-                            continue;
-                        }
-                        startPos = currentPos;
-                        CurrentState = CurrentState + 1;
-                        handledBytes = currentPos;
-                        continue;
-                    }
-                    case RequestParserState.HeaderValue:
-                    {
-                        if (ch != '\r' && ch != '\n')
-                            continue;
-                        int newLineSize = GetLineBreakSize(buffer, currentPos);
-                        if (startPos == -1)
-                            continue; // allow new lines before start of value
-
-                        if (_curHeaderName == string.Empty)
-                            throw new BadRequestException("Missing header on line " + currentLine);
-                        if (startPos == -1)
-                        {
-                            _log.Write(this, LogPrio.Warning, "Missing header value for '" + _curHeaderName);
-                            throw new BadRequestException("Missing header value for '" + _curHeaderName);
-                        }
-                        if (currentPos - startPos > 8190)
-                        {
-                            _log.Write(this, LogPrio.Warning, "Too large header value on line " + currentLine);
-                            throw new BadRequestException("Too large header value on line " + currentLine);
-                        }
-
-                        // Header fields can be extended over multiple lines by preceding each extra line with at
-                        // least one SP or HT.
-                        if (endOfBufferPos > currentPos + newLineSize
-                            && (buffer[currentPos + newLineSize] == ' ' || buffer[currentPos + newLineSize] == '\t'))
-                        {
-                            if (startPos != -1)
-                                _curHeaderValue = Encoding.UTF8.GetString(buffer, startPos, currentPos - startPos);
-
-                            _log.Write(this, LogPrio.Trace, "Header value is on multiple lines.");
-                            CurrentState = RequestParserState.Between;
-                            startPos = -1;
-                            currentPos += newLineSize - 1;
-                            handledBytes = currentPos + newLineSize - 1;
-                            continue;
-                        }
-
-                        _curHeaderValue += Encoding.UTF8.GetString(buffer, startPos, currentPos - startPos);
-                        _log.Write(this, LogPrio.Trace, "Header [" + _curHeaderName + ": " + _curHeaderValue + "]");
-                        OnHeader(_curHeaderName, _curHeaderValue);
-
-                        startPos = -1;
-                        CurrentState = RequestParserState.HeaderName;
-                        _curHeaderValue = string.Empty;
-                        _curHeaderName = string.Empty;
-                        ++currentPos;
-                        handledBytes = currentPos + 1;
-
-                        // Check if we got a colon so we can cut header name, or crlf for end of header.
-                        bool canContinue = false;
-                        for (int j = currentPos; j < endOfBufferPos; ++j)
-                        {
-                            if (buffer[j] != ':' && buffer[j] != '\r' && buffer[j] != '\n') continue;
-                            canContinue = true;
-                            break;
-                        }
-                        if (!canContinue)
-                        {
-                            _log.Write(this, LogPrio.Trace, "Cant continue, no colon.");
-                            return currentPos + 1;
-                        }
-                    }
-                    break;
-                }
-            }
-
-            return handledBytes;
-        }
-
-        int GetLineBreakSize(byte[] buffer, int offset)
-        {
-            if (buffer[offset] == '\r')
-            {
-                if (buffer.Length > offset + 1 && buffer[offset + 1] == '\n')
-                    return 2;
-                else
-                    throw new BadRequestException("Got invalid linefeed.");
-            }
-            else if (buffer[offset] == '\n')
-            {
-                if (buffer.Length == offset + 1)
-                    return 1;   // linux line feed
-                if (buffer[offset + 1] != '\r')
-                    return 1;   // linux line feed
-                else
-                    return 2;   // win line feed
-            }
-            else
-                return 0;
-        }
-
-        /// <summary>
-        /// A request have been successfully parsed.
-        /// </summary>
-        public event EventHandler RequestCompleted = delegate { };
-
-        /// <summary>
-        /// More body bytes have been received.
-        /// </summary>
-        public event EventHandler<BodyEventArgs> BodyBytesReceived = delegate { };
-
-        /// <summary>
-        /// Request line have been received.
-        /// </summary>
-        public event EventHandler<RequestLineEventArgs> RequestLineReceived = delegate { };
-
-        /// <summary>
-        /// A header have been received.
-        /// </summary>
-        public event EventHandler<HeaderEventArgs> HeaderReceived = delegate { };
-
-        #endregion
-    }
-}
\ No newline at end of file
diff --git a/HttpServer/trunk/HttpServer/Parser/RequestLineEventArgs.cs b/HttpServer/trunk/HttpServer/Parser/RequestLineEventArgs.cs
deleted file mode 100644
index 4230f64..0000000
--- a/HttpServer/trunk/HttpServer/Parser/RequestLineEventArgs.cs
+++ /dev/null
@@ -1,48 +0,0 @@
-using System;
-
-namespace HttpServer.Parser
-{
-    /// <summary>
-    /// Used when the request line have been successfully parsed.
-    /// </summary>
-    public class RequestLineEventArgs : EventArgs
-    {
-        /// <summary>
-        /// Initializes a new instance of the <see cref="RequestLineEventArgs"/> class.
-        /// </summary>
-        /// <param name="httpMethod">The HTTP method.</param>
-        /// <param name="uriPath">The URI path.</param>
-        /// <param name="httpVersion">The HTTP version.</param>
-        public RequestLineEventArgs(string httpMethod, string uriPath, string httpVersion)
-        {
-            HttpMethod = httpMethod;
-            UriPath = uriPath;
-            HttpVersion = httpVersion;
-        }
-
-        /// <summary>
-        /// Initializes a new instance of the <see cref="RequestLineEventArgs"/> class.
-        /// </summary>
-        public RequestLineEventArgs()
-        {
-        }
-
-        /// <summary>
-        /// Gets or sets http method.
-        /// </summary>
-        /// <remarks>
-        /// Should be one of the methods declared in <see cref="Method"/>.
-        /// </remarks>
-        public string HttpMethod { get; set; }
-
-        /// <summary>
-        /// Gets or sets the version of the HTTP protocol that the client want to use.
-        /// </summary>
-        public string HttpVersion { get; set; }
-
-        /// <summary>
-        /// Gets or sets requested URI path.
-        /// </summary>
-        public string UriPath { get; set; }
-    }
-}
\ No newline at end of file
diff --git a/HttpServer/trunk/HttpServer/Parser/RequestParserFactory.cs b/HttpServer/trunk/HttpServer/Parser/RequestParserFactory.cs
deleted file mode 100644
index 6f6f2e6..0000000
--- a/HttpServer/trunk/HttpServer/Parser/RequestParserFactory.cs
+++ /dev/null
@@ -1,33 +0,0 @@
-using HttpServer.Parser;
-
-namespace HttpServer
-{
-    /// <summary>
-    /// Creates request parsers when needed.
-    /// </summary>
-    public class RequestParserFactory : IRequestParserFactory
-    {
-        /// <summary>
-        /// Create a new request parser.
-        /// </summary>
-        /// <param name="logWriter">Used when logging should be enabled.</param>
-        /// <returns>A new request parser.</returns>
-        public IHttpRequestParser CreateParser(ILogWriter logWriter)
-        {
-            return new HttpRequestParser(logWriter);
-        }
-    }
-
-    /// <summary>
-    /// Creates request parsers when needed.
-    /// </summary>
-    public interface IRequestParserFactory
-    {
-        /// <summary>
-        /// Create a new request parser.
-        /// </summary>
-        /// <param name="logWriter">Used when logging should be enabled.</param>
-        /// <returns>A new request parser.</returns>
-        IHttpRequestParser CreateParser(ILogWriter logWriter);
-    }
-}
diff --git a/HttpServer/trunk/HttpServer/Properties/AssemblyInfo.cs b/HttpServer/trunk/HttpServer/Properties/AssemblyInfo.cs
deleted file mode 100644
index 6d6b21f..0000000
--- a/HttpServer/trunk/HttpServer/Properties/AssemblyInfo.cs
+++ /dev/null
@@ -1,33 +0,0 @@
-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("Opensim HttpServer")]
-[assembly: AssemblyDescription("Gauffin Telecom AB HttpServer modified for OpenSim")]
-[assembly: AssemblyConfiguration("")]
-[assembly: AssemblyCompany("Gauffin Telecom AB, OpenSimulator")]
-[assembly: AssemblyProduct("HttpServer")]
-[assembly: AssemblyCopyright("Copyright © Gauffin Telecom AB 2008, OpenSimulator")]
-[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("9c7f48af-1db2-42df-bdc8-84644a21fc65")]
-
-// Version information for an assembly consists of the following four values:
-//
-//      Major Version
-//      Minor Version
-//      Build Number
-//      Revision
-//
-[assembly: AssemblyVersion("1.0.0.0")]
-[assembly: AssemblyFileVersion("1.0.0.0")]
diff --git a/HttpServer/trunk/HttpServer/Rendering/CodeGeneratorException.cs b/HttpServer/trunk/HttpServer/Rendering/CodeGeneratorException.cs
deleted file mode 100644
index bd45429..0000000
--- a/HttpServer/trunk/HttpServer/Rendering/CodeGeneratorException.cs
+++ /dev/null
@@ -1,51 +0,0 @@
-using System;
-
-namespace HttpServer.Rendering
-{
-    /// <summary>
-    /// Contains information on where in the template the error occurred, and what the error was.
-    /// </summary>
-    public class CodeGeneratorException : Exception
-    {
-        private readonly int _lineNumber;
-    	private readonly string _line = string.Empty;
-
-        /// <summary>
-        /// Initializes a new instance of the <see cref="CodeGeneratorException"/> class.
-        /// </summary>
-        /// <param name="lineNumber">Line that the error appeared on.</param>
-        /// <param name="error">error description.</param>
-        public CodeGeneratorException(int lineNumber, string error) : base(error)
-        {
-            _lineNumber = lineNumber;
-        }
-
-        /// <summary>
-        /// Initializes a new instance of the <see cref="CodeGeneratorException"/> class.
-        /// </summary>
-        /// <param name="lineNumber">Line that the error appeared on.</param>
-        /// <param name="error">error description.</param>
-        /// <param name="line">line contents.</param>
-		public CodeGeneratorException(int lineNumber, string line, string error) : base(error + "\nLine: " + line)
-		{
-			_lineNumber = lineNumber;
-			_line = line;
-		}
-
-		/// <summary>
-		/// Returns the actual line where the error originated
-		/// </summary>
-    	public string Line
-    	{
-			get { return _line; }
-    	}
-
-        /// <summary>
-        /// Line number in template
-        /// </summary>
-        public int LineNumber
-        {
-            get { return _lineNumber; }
-        }
-    }
-}
\ No newline at end of file
diff --git a/HttpServer/trunk/HttpServer/Rendering/FileTemplateLoader.cs b/HttpServer/trunk/HttpServer/Rendering/FileTemplateLoader.cs
deleted file mode 100644
index eda388d..0000000
--- a/HttpServer/trunk/HttpServer/Rendering/FileTemplateLoader.cs
+++ /dev/null
@@ -1,136 +0,0 @@
-using System;
-using System.IO;
-using Fadd;
-
-namespace HttpServer.Rendering
-{
-
-    /// <summary>
-    /// This template loader loads all templates from a folder on the hard drive.
-    /// </summary>
-    public class FileTemplateLoader : ITemplateLoader
-    {
-        private string _pathPrefix = "views\\";
-
-        /// <summary>
-        /// Initializes a new instance of the <see cref="FileTemplateLoader"/> class.
-        /// </summary>
-        /// <param name="pathPrefix">A prefix that is prepended to all requested files.</param>
-        /// <seealso cref="PathPrefix"/>
-        public FileTemplateLoader(string pathPrefix)
-        {
-            Check.Require(pathPrefix, "pathPrefix");
-            _pathPrefix = pathPrefix;
-        }
-
-        /// <summary>
-        /// Initializes a new instance of the <see cref="FileTemplateLoader"/> class.
-        /// </summary>
-        public FileTemplateLoader()
-        {
-            _pathPrefix = Directory.Exists("..\\..\\views\\") ? "..\\..\\views\\" : "views\\";
-        }
-
-        /// <summary>
-        /// A prefix that is prepended to all requested files.
-        /// </summary>
-        /// <example>
-        /// <code>
-        /// <![CDATA[
-        /// // will look after template in Environment.CurrentDirectory + "views\\<ControllerName>\\templateName.*"
-        /// mgr.PathPrefix = "views\\";
-        /// ]]>
-        /// </code>
-        /// </example>
-        /// <remarks>PathPrefix may not be null, only string.Empty
-        /// </remarks>
-        public string PathPrefix
-        {
-            get { return _pathPrefix; }
-            set
-            {
-
-                if (value == null)
-                    throw new ArgumentNullException("value");
-
-                if (!string.IsNullOrEmpty(_pathPrefix) && _pathPrefix[_pathPrefix.Length - 1] != '\\')
-                    _pathPrefix = value + "\\";
-                else
-                    _pathPrefix = value;
-            }
-        }
-
-        /// <summary>
-        /// Load a template into a <see cref="TextReader"/> and return it.
-        /// </summary>
-        /// <param name="path">Relative path (and filename) to template.</param>
-        /// <returns>
-        /// a <see cref="TextReader"/> if file was found; otherwise null.
-        /// </returns>
-        public TextReader LoadTemplate(string path)
-        {
-			if(!File.Exists(_pathPrefix + path))
-				return null;
-
-            try
-            {
-                Stream stream = File.OpenRead(_pathPrefix + path);
-                TextReader reader = new StreamReader(stream);
-                return reader;
-            }
-            catch (DirectoryNotFoundException err)
-            {
-                throw new FileNotFoundException("Directory not found for: " + path, err);
-            }
-            catch (PathTooLongException err)
-            {
-                throw new FileNotFoundException("Path too long: " + path, err);
-            }
-            catch (UnauthorizedAccessException err)
-            {
-                throw new UnauthorizedAccessException("Failed to access: " + path, err);
-            }
-        }
-
-        /// <summary>
-        /// Fetch all files from the resource that matches the specified arguments.
-        /// </summary>
-        /// <param name="path">Where the file should reside.</param>
-        /// <param name="filename">Files to check</param>
-        /// <returns>
-        /// a list of files if found; or an empty array if no files are found.
-        /// </returns>
-        public string[] GetFiles(string path, string filename)
-        {
-			if(Directory.Exists(_pathPrefix + path))
-                return Directory.GetFiles(_pathPrefix + path, filename);
-
-        	return new string[]{};
-        }
-
-		/// <summary>
-		/// Returns whether or not the loader has an instance of the file requested
-		/// </summary>
-		/// <param name="filename">The name of the template/file</param>
-		/// <returns>True if the loader can provide the file</returns>
-		public bool HasTemplate(string filename)
-		{
-			return File.Exists(_pathPrefix + filename);
-		}
-
-        /// <summary>
-        /// Check's whether a template should be reloaded or not.
-        /// </summary>
-        /// <param name="info">template information</param>
-        /// <returns>
-        /// true if template is OK; false if it do not exist or are old.
-        /// </returns>
-        public bool CheckTemplate(ITemplateInfo info)
-        {
-			if(HasTemplate(info.Filename))
-                return File.GetLastWriteTime(_pathPrefix + info.Filename) <= info.CompiledWhen;
-
-            return false;
-        }
-    }
-}
diff --git a/HttpServer/trunk/HttpServer/Rendering/Haml/HamlGenerator.cs b/HttpServer/trunk/HttpServer/Rendering/Haml/HamlGenerator.cs
deleted file mode 100644
index e4c3d02..0000000
--- a/HttpServer/trunk/HttpServer/Rendering/Haml/HamlGenerator.cs
+++ /dev/null
@@ -1,457 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.IO;
-using HttpServer.Rendering.Haml.Nodes;
-using HttpServer.Rendering.Haml.Rules;
-
-namespace HttpServer.Rendering.Haml
-{
-    /// <summary>
-    /// Generates C#/HTML from HAML code.
-    /// </summary>
-    /// <remarks>HAML documentation: http://haml.hamptoncatlin.com/docs/rdoc/classes/Haml.html</remarks>
-    public class HamlGenerator : ITemplateGenerator
-    {
-        private LineInfo _currentLine;
-        private int _lineNo = -1;
-        private LineInfo _mother;
-        private Node _parentNode;
-        private LineInfo _prevLine;
-        private TextReader _reader;
-        private readonly List<Rule> _rules = new List<Rule>();
-        private readonly ILogWriter _log;
-
-
-        /// <summary>
-        /// Initializes a new instance of the <see cref="HamlGenerator"/> class.
-        /// </summary>
-        public HamlGenerator()
-        {
-            _rules.Add(new NewLineRule());
-            _rules.Add(new AttributesRule());
-            _log = NullLogWriter.Instance;
-        }
-
-
-        /// <summary>
-        /// Initializes a new instance of the <see cref="HamlGenerator"/> class.
-        /// </summary>
-        /// <param name="logWriter">The log writer.</param>
-        public HamlGenerator(ILogWriter logWriter)
-        {
-            _rules.Add(new NewLineRule());
-            _rules.Add(new AttributesRule());
-            _log = logWriter ?? NullLogWriter.Instance;
-        }
-
-		/// <summary>
-		/// Property to retrieve the root node for the latest parsed document
-		/// </summary>
-		public Node RootNode
-		{
-			get { return _parentNode; }
-		}
-
-        /// <summary>
-        /// Check and validate indentation
-        /// </summary>
-        /// <param name="line">line to check</param>
-        /// <param name="ws">number of white spaces</param>
-        /// <param name="intendation">number of indentations (2 white spaces = 1 intend, 1 tab = 1 intend)</param>
-        protected static void CheckIntendation(LineInfo line, out int ws, out int intendation)
-        {
-            intendation = 0;
-            ws = -1;
-
-            char prevUnusedCh = line.UnparsedData[0];
-            if (prevUnusedCh == '\t')
-            {
-                ++intendation;
-                prevUnusedCh = char.MinValue;
-            }
-            else if (prevUnusedCh != ' ')
-            {
-                ws = 0;
-                return;
-            }
-
-            for (int i = 1; i < line.UnparsedData.Length; ++i)
-            {
-                char ch = line.UnparsedData[i];
-
-                if (ch == ' ')
-                {
-                    if (prevUnusedCh == '\t')
-                    {
-                        ++intendation;
-                        prevUnusedCh = ' ';
-                        continue;
-                    }
-                    if (prevUnusedCh == ' ')
-                    {
-                        prevUnusedCh = char.MinValue;
-                        ++intendation;
-                        continue;
-                    }
-
-                    prevUnusedCh = ' ';
-                }
-                else if (ch == '\t')
-                {
-                    if (prevUnusedCh == ' ')
-                        throw new CodeGeneratorException(line.LineNumber, line.Data,
-                                                         "Invalid intendation sequence: One space + one tab. Should either be one tab or two spaces.");
-                    if (prevUnusedCh == char.MinValue)
-                    {
-                        ++intendation;
-                        prevUnusedCh = char.MinValue;
-                        continue;
-                    }
-                }
-                else
-                {
-                    if (prevUnusedCh != char.MinValue)
-                        throw new CodeGeneratorException(line.LineNumber, line.Data,
-                                                         "Invalid intendation at char " + i + ", expected a space.");
-
-                    if (i == 1 && !char.IsWhiteSpace(line.UnparsedData[0]))
-                        ws = 0;
-                    else
-                        ws = i;
-                    return;
-                }
-            }
-        }
-
-        /// <summary>
-        /// Check indentation
-        /// </summary>
-        /// <param name="line">fills line with intend info</param>
-        protected static void CheckIntendation(LineInfo line)
-        {
-            int ws, intendation;
-            CheckIntendation(line, out ws, out intendation);
-            if (ws == -1)
-                throw new CodeGeneratorException(line.LineNumber, line.Data,
-                                                 "Failed to find indentation on line #" + line.LineNumber);
-
-            line.Set(ws, intendation);
-        }
-
-        /// <summary>
-        /// check if current line is a multi line
-        /// </summary>
-        /// <param name="prevLine">previous line</param>
-        /// <param name="line">current line</param>
-        protected void CheckMultiLine(LineInfo prevLine, LineInfo line)
-        {
-            if (prevLine != null && prevLine.UnfinishedRule != null)
-            {
-                if (prevLine.UnfinishedRule.IsMultiLine(line, true))
-                {
-                    _log.Write(this, LogPrio.Trace, line.LineNumber + ": " + prevLine.UnfinishedRule.GetType().Name +
-                                      " says that the next line should be appended.");
-                    line.AppendNextLine = true;
-                    return;
-                }
-            }
-
-            foreach (Rule rule in _rules)
-            {
-                if (rule.IsMultiLine(line, false))
-                {
-                    _log.Write(this, LogPrio.Trace, line.LineNumber + ": " + rule.GetType().Name +
-                                      " says that the next line should be appended.");
-                    line.AppendNextLine = true;
-                    continue;
-                }
-            }
-        }
-
-        /// <summary>
-        /// Generate HTML code from the template.
-        /// Code is encapsulated in &lt;% and &lt;%=
-        /// </summary>
-        /// <param name="writer">A <see cref="TextWriter"/> that the generated code will be written to.</param>
-        /// <exception cref="InvalidOperationException">If the template have not been parsed first.</exception>
-        /// <exception cref="CodeGeneratorException">If template is incorrect</exception>
-        public void GenerateHtml(TextWriter writer)
-        {
-            foreach (Node child in _parentNode.Children)
-                writer.Write(child.ToHtml());
-        }
-
-        /// <summary>
-        /// Get the first word (letters and digits only) from the specified offset.
-        /// </summary>
-        /// <param name="data"></param>
-        /// <param name="offset"></param>
-        /// <returns></returns>
-        public static string GetWord(string data, int offset)
-        {
-            for (int i = offset; i < data.Length; ++i)
-            {
-                if (!char.IsLetterOrDigit(data[i]) && data[i] != '!')
-                    return data.Substring(offset, i - offset + 1);
-            }
-
-            return data;
-        }
-
-        /// <summary>
-        /// Check indentation / node placement
-        /// </summary>
-        protected void HandlePlacement()
-        {
-            // Check intendation so that we know where to place the line
-
-            // Larger intendation = child
-            if (_currentLine.Intendation > _prevLine.Intendation)
-            {
-                if (_currentLine.Intendation != _prevLine.Intendation + 1)
-                    throw new CodeGeneratorException(_currentLine.LineNumber,
-                                                     "Too large indentation, " + (_currentLine.Intendation -
-                                                                                  _prevLine.Intendation) +
-                                                     " steps instead of 1.");
-
-                _currentLine.Parent = _prevLine;
-            }
-                // same intendation = same parent.
-            else if (_currentLine.Intendation == _prevLine.Intendation)
-                _currentLine.Parent = _prevLine.Parent;
-
-                // Node should be placed on a node up the chain.
-            else
-            {
-                // go back until we find someone at the same level
-                LineInfo sameLevelNode = _prevLine;
-                while (sameLevelNode != null && sameLevelNode.Intendation > _currentLine.Intendation)
-                    sameLevelNode = sameLevelNode.Parent;
-
-                if (sameLevelNode == null)
-                {
-                    if (_currentLine.Intendation > 0)
-                        throw new CodeGeneratorException(_currentLine.LineNumber, "Failed to find parent.");
-
-                    _currentLine.Parent = _mother;
-                }
-                else
-                    _currentLine.Parent = sameLevelNode.Parent;
-            }
-        }
-
-
-        /// <summary>
-        /// Parse a node
-        /// todo: improve doc
-        /// </summary>
-        /// <param name="theLine"></param>
-        /// <param name="prototypes"></param>
-        /// <param name="parent"></param>
-        /// <param name="textNode"></param>
-        protected static void ParseNode(LineInfo theLine, NodeList prototypes, Node parent, TextNode textNode)
-        {
-            Node curNode = null;
-            int offset = 0;
-
-            // parse each part of a line
-            while (offset <= theLine.Data.Length - 1)
-            {
-                Node node = prototypes.GetPrototype(GetWord(theLine.Data, offset), curNode == null) ?? textNode;
-                node = node.Parse(prototypes, curNode, theLine, ref offset);
-
-                // first node on line, set it as current
-                if (curNode == null)
-                {
-                    curNode = node;
-                    curNode.LineInfo = theLine;
-                    parent.Children.AddLast(node);
-                }
-                else
-                    curNode.AddModifier(node); // append attributes etc.
-            }
-
-            foreach (LineInfo child in theLine.Children)
-                ParseNode(child, prototypes, curNode, textNode);
-        }
-
-        /// <summary>
-        /// PreParse goes through the text add handles indentation
-        /// and all multi line cases.
-        /// </summary>
-        /// <param name="reader">Reader containing the text</param>
-        protected void PreParse(TextReader reader)
-        {
-            if (reader == null)
-                throw new ArgumentNullException("reader");
-
-            // Read first line to be able to assign it to the mother.
-            if (!ReadLine())
-                throw new CodeGeneratorException(1, "No data.");
-
-            if (_currentLine.Intendation != 0)
-                throw new CodeGeneratorException(1, "Invalid indentation, should be 0.");
-            _currentLine.Parent = _mother;
-            CheckIntendation(_currentLine);
-            CheckMultiLine(_prevLine, _currentLine);
-
-            while (ReadLine())
-            {
-                if (_currentLine.UnparsedData.Length == 0)
-                    continue;
-
-                CheckIntendation(_currentLine);
-                CheckMultiLine(_prevLine, _currentLine);
-                if (_prevLine.AppendNextLine)
-                {
-                    _prevLine.Append(_currentLine);
-					if(_currentLine.AppendNextLine)
-						_prevLine.AppendNextLine = true;
-                    _currentLine = _prevLine;
-                    continue;
-                }
-
-                HandlePlacement();
-            }
-        }
-
-        /// <summary>
-        /// print the entire document
-        /// </summary>
-        public void PrintDocument()
-        {
-            PrintNode(_mother);
-        }
-
-        /// <summary>
-        /// Print line information to the console
-        /// </summary>
-        /// <param name="line"></param>
-        public void PrintNode(LineInfo line)
-        {
-            _log.Write(this, LogPrio.Debug, Spaces(line.Intendation) + line.Data);
-            foreach (LineInfo info in line.Children)
-                PrintNode(info);
-        }
-
-        /// <summary>
-        /// Read next line from file
-        /// </summary>
-        /// <returns>true if line could be read; false if EOF.</returns>
-        protected bool ReadLine()
-        {
-            string line = _reader.ReadLine();
-            string trimmedLine = (line != null) ? line.Trim(new char[] {' ', '\t'}) : string.Empty;
-
-            while (line != null && (trimmedLine == string.Empty
-                                    || (trimmedLine.Length > 0 && trimmedLine[0] == '-' && trimmedLine[1] == '/')
-                                   ))
-            {
-                ++_lineNo;
-                line = _reader.ReadLine();
-                trimmedLine = (line != null) ? line.Trim(new char[] {' ', '\t'}) : string.Empty;
-            }
-            if (line == null)
-                return false;
-
-            ++_lineNo;
-            _prevLine = _currentLine;
-            _currentLine = new LineInfo(_lineNo, line);
-            return true;
-        }
-
-        /// <summary>
-        /// Generates a string with spaces.
-        /// </summary>
-        /// <param name="count">number of spaces.</param>
-        /// <returns>string of spaces.</returns>
-        public string Spaces(int count)
-        {
-            return "".PadLeft(count);
-        }
-
-        #region ITemplateGenerator Members
-
-        /// <summary>
-        /// Parse a file and convert into to our own template object code.
-        /// </summary>
-        /// <param name="fullPath">Path and filename to a template</param>
-        /// <exception cref="CodeGeneratorException">If something is incorrect in the template.</exception>
-        /// <exception cref="FileNotFoundException"></exception>
-        /// <exception cref="DirectoryNotFoundException"></exception>
-        /// <exception cref="UnauthorizedAccessException"></exception>
-        /// <exception cref="PathTooLongException"></exception>
-        /// <exception cref="NotSupportedException"></exception>
-        /// <exception cref="ArgumentException"></exception>
-        public void Parse(string fullPath)
-        {
-            if (string.IsNullOrEmpty(fullPath))
-                throw new ArgumentException("Path must be specified.", "fullPath");
-
-            Stream stream = null;
-            try
-            {
-                stream = File.OpenRead(fullPath);
-                TextReader reader = new StreamReader(stream);
-                Parse(reader);
-                reader.Close();
-                reader.Dispose();
-                stream.Dispose();
-            }
-            finally
-            {
-                if (stream != null)
-                    stream.Close();
-            }
-        }
-
-        /// <summary>
-        /// Parse a file and convert into to our own template object code.
-        /// </summary>
-        /// <param name="reader">A <see cref="TextReader"/> containing our template</param>
-        /// <exception cref="CodeGeneratorException">If something is incorrect in the template.</exception>
-        public void Parse(TextReader reader)
-        {
-            _lineNo = -1;
-            _reader = reader;
-            _mother = new LineInfo(-1, string.Empty);
-            _prevLine = null;
-            _currentLine = null;
-
-            PreParse(reader);
-
-            NodeList prototypes = new NodeList();
-            prototypes.Add(new AttributeNode(null));
-            prototypes.Add(new TagNode(null));
-            prototypes.Add(new IdNode(null));
-            prototypes.Add(new SilentCodeNode(null));
-            prototypes.Add(new ClassNode(null));
-            prototypes.Add(new DisplayCodeNode(null));
-            prototypes.Add(new DocTypeTag(null, null));
-			prototypes.Add(new PartialNode(null));
-            TextNode textNode = new TextNode(null, "prototype");
-            _parentNode = new TextNode(null, string.Empty);
-
-            foreach (LineInfo info in _mother.Children)
-                ParseNode(info, prototypes, _parentNode, textNode);
-        }
-
-        /// <summary>
-        /// Generate C# code from the template.
-        /// </summary>
-        /// <param name="writer">A <see cref="TextWriter"/> that the generated code will be written to.</param>
-        /// <exception cref="InvalidOperationException">If the template have not been parsed first.</exception>
-        /// <exception cref="CodeGeneratorException">If template is incorrect</exception>
-        public void GenerateCode(TextWriter writer)
-        {
-            writer.Write("sb.Append(@\"");
-            bool inString = true;
-            foreach (Node child in _parentNode.Children)
-                writer.Write(child.ToCode(ref inString));
-            if (inString)
-                writer.Write("\");");
-        }
-
-        #endregion
-    }
-}
\ No newline at end of file
diff --git a/HttpServer/trunk/HttpServer/Rendering/Haml/LineInfo.cs b/HttpServer/trunk/HttpServer/Rendering/Haml/LineInfo.cs
deleted file mode 100644
index 84d169e..0000000
--- a/HttpServer/trunk/HttpServer/Rendering/Haml/LineInfo.cs
+++ /dev/null
@@ -1,242 +0,0 @@
-using System;
-using System.Collections.Generic;
-using HttpServer.Rendering.Haml.Rules;
-
-namespace HttpServer.Rendering.Haml
-{
-    /// <summary>
-    /// Contains line text and state information about a line in a HAML template.
-    /// </summary>
-    public class LineInfo
-    {
-        private bool _appendNextLine;
-        private readonly LinkedList<LineInfo> _children = new LinkedList<LineInfo>();
-        private string _unparsedData;
-        private readonly LinkedList<LineInfo> _extraLines = new LinkedList<LineInfo>();
-        private int _intendation;
-        private readonly int _lineNumber;
-        private LineInfo _parent;
-        private string _data;
-        private Rule _unfinishedRule;
-        private int _whiteSpaces;
-        private bool _selfClosed ;
-
-        /// <summary>
-        /// Initializes a new instance of the <see cref="LineInfo"/> class.
-        /// </summary>
-        /// <param name="lineNumber">The line number.</param>
-        /// <param name="unparsedData">The unparsed data (line contents).</param>
-        public LineInfo(int lineNumber, string unparsedData)
-        {
-            _lineNumber = lineNumber;
-            _unparsedData = unparsedData;
-        }
-
-        /// <summary>
-        /// If the next line should be appended to us (multi line)
-        /// </summary>
-        public bool AppendNextLine
-        {
-            get
-            {
-                if (_appendNextLine || _unfinishedRule != null)
-                    return true;
-
-                foreach (LineInfo line in _extraLines)
-                    if (line.UnfinishedRule != null)
-                        return true;
-
-                return false;
-            }
-            set
-            {
-                if (value == false)
-                    throw new ArgumentException("Can only set AppendNextLine to true, false is set internally.");
-                _appendNextLine = value;
-            }
-        }
-
-        /// <summary>
-        /// Will check that all rule conditions have been met.
-        /// Will also remove the rules if they are done.
-        /// </summary>
-        /// <param name="line"></param>
-        /// <returns></returns>
-        private bool CheckUnfinishedRule(LineInfo line)
-        {
-            if (_unfinishedRule != null)
-            {
-                // rule is done, remove it.
-                // we can exit extra lines may have rules that are done too.
-                if (!_unfinishedRule.IsMultiLine(line, false))
-                    _unfinishedRule = null;
-                else
-                    return true;
-            }
-
-            bool res = false;
-            foreach (LineInfo subLine in _extraLines)
-            {
-                if (subLine.CheckUnfinishedRule(line))
-                    res = true;
-            }
-
-            return res;
-        }
-
-        /// <summary>
-        /// Do NOT add yourself using the Add methods of the linkedList.
-        /// Parent property will add node.
-        /// </summary>
-        public LinkedList<LineInfo> Children
-        {
-            get { return _children; }
-        }
-
-        /// <summary>
-        /// Untouched line text
-        /// </summary>
-        public string UnparsedData
-        {
-            get { return _unparsedData; }
-        }
-
-        /// <summary>
-        /// Has one or more children (intented more that this one)
-        /// </summary>
-        public bool HasChildren
-        {
-            get { return _children.Count > 0; }
-        }
-
-        /// <summary>
-        /// Number of intends (two spaces = 1, one tab = 1)
-        /// </summary>
-        public int Intendation
-        {
-            get { return _intendation; }
-        }
-
-        /// <summary>
-        /// Line number
-        /// </summary>
-        public int LineNumber
-        {
-            get { return _lineNumber; }
-        }
-
-        /// <summary>
-        /// Parent node (one level up in intendation)
-        /// </summary>
-        public LineInfo Parent
-        {
-            get { return _parent; }
-            set
-            {
-                _parent = value;
-                _parent.Children.AddLast(this);
-            }
-        }
-
-        /// <summary>
-        /// All line data generated on one line
-        /// </summary>
-        public string Data
-        {
-            get { return _data; }
-        }
-
-        /// <summary>
-        /// IRule have not got all needed information yet,
-        /// keep appending lines to this LineInfo until rule says that it's done.
-        /// </summary>
-        public Rule UnfinishedRule
-        {
-            get { return _unfinishedRule; }
-            set { _unfinishedRule = value; }
-        }
-
-        /// <summary>
-        /// Number of whitespaces before actual entry beings.
-        /// </summary>
-        public int WhiteSpaces
-        {
-            get { return _whiteSpaces; }
-        }
-
-        /// <summary>
-        /// True if node is selfclosed (i.e. &lt;br /&gt;)
-        /// </summary>
-        public bool SelfClosed
-        {
-            get { return _selfClosed; }
-            set { _selfClosed = value; }
-        }
-
-        /// <summary>
-        /// Append another line
-        /// </summary>
-        /// <param name="line"></param>
-        public void Append(LineInfo line)
-        {
-            SetParsedData(_data + line.Data);
-            _extraLines.AddLast(line);
-
-            if (CheckUnfinishedRule(this))
-                _appendNextLine = true;
-            else
-                _appendNextLine = false;
-        }
-
-        /// <summary>
-        /// Parsed line contents (without whitespaces in the beginning)
-        /// </summary>
-        /// <param name="data">text contents</param>
-        protected void SetParsedData(string data)
-        {
-            _data = data;
-            if (_data[_data.Length - 1] == '/')
-                _selfClosed = true;
-        }
-
-        /// <summary>
-        /// Set intendation info to previously added line text.
-        /// </summary>
-        /// <param name="whiteSpaces"></param>
-        /// <param name="intendation"></param>
-        public void Set(int whiteSpaces, int intendation)
-        {
-            _whiteSpaces = whiteSpaces;
-            _intendation = intendation;
-            SetParsedData(_unparsedData.Substring(whiteSpaces));
-        }
-
-        /// <summary>
-        /// Assign line text
-        /// </summary>
-        /// <param name="line"></param>
-        /// <param name="whiteSpaces"></param>
-        /// <param name="intendation"></param>
-        public void Set(string line, int whiteSpaces, int intendation)
-        {
-            _unparsedData = line;
-            Set(whiteSpaces, intendation);
-        }
-
-        /// <summary>
-        ///
-        /// </summary>
-        /// <param name="count"></param>
-        /// <exception cref="InvalidOperationException">If extra lines have been added.</exception>
-        public void TrimRight(int count)
-        {
-            if (_extraLines.Count > 0)
-                throw new InvalidOperationException("Have added other lines, cant trim.");
-            if (_data.Length < count + 1 || _unparsedData.Length < count + 1)
-                throw new InvalidOperationException("To little data left.");
-
-            _unparsedData = _unparsedData.Substring(0, _unparsedData.Length - count);
-            SetParsedData(_data.Substring(0, _data.Length - count));
-        }
-    }
-}
\ No newline at end of file
diff --git a/HttpServer/trunk/HttpServer/Rendering/Haml/NodeList.cs b/HttpServer/trunk/HttpServer/Rendering/Haml/NodeList.cs
deleted file mode 100644
index 3f4e8c9..0000000
--- a/HttpServer/trunk/HttpServer/Rendering/Haml/NodeList.cs
+++ /dev/null
@@ -1,58 +0,0 @@
-using System;
-using System.Collections.Generic;
-using HttpServer.Rendering.Haml.Nodes;
-
-namespace HttpServer.Rendering.Haml
-{
-    /// <summary>
-    /// A list of prototype nodes.
-    /// </summary>
-    public class NodeList
-    {
-        private readonly List<Node> _nodes = new List<Node>();
-
-        /// <summary>
-        /// Creates the node.
-        /// </summary>
-        /// <param name="word">node identifier.</param>
-        /// <param name="parent">parent node.</param>
-        /// <returns>created node if identifier was found; otherwise null.</returns>
-        public Node CreateNode(string word, Node parent)
-        {
-            foreach (Node node in _nodes)
-            {
-                if (node.CanHandle(word, parent == null))
-                    return (Node) Activator.CreateInstance(node.GetType(), new object[]{parent});
-            }
-
-            return null;
-        }
-
-        /// <summary>
-        ///
-        /// </summary>
-        /// <param name="word"></param>
-        /// <param name="firstNode">first node on line</param>
-        /// <returns></returns>
-        public Node GetPrototype(string word, bool firstNode)
-        {
-            foreach (Node node in _nodes)
-            {
-                if (node.CanHandle(word, firstNode))
-                    return node;
-            }
-
-            return null;
-        }
-
-        /// <summary>
-        /// Add a prototype
-        /// </summary>
-        /// <param name="node">prototype node</param>
-        public void Add(Node node)
-        {
-            //todo: Replace types.
-            _nodes.Add(node);
-        }
-    }
-}
diff --git a/HttpServer/trunk/HttpServer/Rendering/Haml/Nodes/AttributeNode.cs b/HttpServer/trunk/HttpServer/Rendering/Haml/Nodes/AttributeNode.cs
deleted file mode 100644
index b11807a..0000000
--- a/HttpServer/trunk/HttpServer/Rendering/Haml/Nodes/AttributeNode.cs
+++ /dev/null
@@ -1,298 +0,0 @@
-using System.Collections.Generic;
-using System.Text;
-using HttpServer.Rendering;
-using HttpServer.Rendering.Haml.Nodes;
-using HttpServer.Rendering.Haml;
-
-namespace HttpServer.Rendering.Haml.Nodes
-{
-    /// <summary>
-    /// Contains HTML attributes.
-    /// </summary>
-    public class AttributeNode : ChildNode
-    {
-        /// <summary>
-        /// A attribute
-        /// </summary>
-        public class Attribute
-        {
-            /// <summary>
-            /// value is a simple word or quoted text
-            /// </summary>
-            public bool Simple;
-            /// <summary>
-            /// Name of the attribute
-            /// </summary>
-            public string Name;
-            /// <summary>
-            /// Value, can be a statement, variable or quoted text.
-            /// </summary>
-            public string Value;
-        }
-        private List<Attribute> _attributes;
-
-        /// <summary>
-        /// Create a new node
-        /// </summary>
-        /// <param name="parent">parent node</param>
-        /// <param name="col">collection of attributes</param>
-        public AttributeNode(Node parent, List<Attribute> col)
-            : base(parent)
-        {
-            _attributes = col;
-        }
-
-        /// <summary>
-        /// create an attribute node
-        /// </summary>
-        /// <param name="parent">parent node</param>
-        public AttributeNode(Node parent) : base(parent)
-        {
-            _attributes = new List<Attribute>();
-        }
-
-        /// <summary>
-        /// Get an attribute
-        /// </summary>
-        /// <param name="name">name of the attribute (case sensitive)</param>
-        /// <returns>attribute if found; otherwise null.</returns>
-        public Attribute GetAttribute(string name)
-        {
-            foreach (Attribute attribute in _attributes)
-            {
-                if (attribute.Name == name)
-                    return attribute;
-            }
-
-            return null;
-        }
-
-        /// <summary>
-        /// html attributes
-        /// </summary>
-        public List<Attribute> Attributes
-        {
-            get { return _attributes; }
-        }
-
-        /// <summary>
-        /// Parse node contents add return a fresh node.
-        /// </summary>
-        /// <param name="prototypes">List containing all node types</param>
-        /// <param name="parent">Node that this is a subnode to. Can be null</param>
-        /// <param name="line">Line to parse</param>
-        /// <param name="offset">Where to start the parsing. Should be set to where the next node should start parsing.</param>
-        /// <returns>A node corresponding to the bla bla; null if parsing failed.</returns>
-        /// <exception cref="CodeGeneratorException"></exception>
-        public override Node Parse(NodeList prototypes, Node parent, LineInfo line, ref int offset)
-        {
-            if (line.Data[offset] != '{')
-                throw new CodeGeneratorException(line.LineNumber, line.Data, "Attribute cant handle info at char " + offset + 1);
-
-            int endPos = GetEndPos(offset, line.Data, '}');
-            if (endPos == -1)
-                throw new CodeGeneratorException(line.LineNumber, line.Data, "Failed to find end of attribute list: '" + line.UnparsedData + "'.");
-
-            List<Attribute> col = new List<Attribute>();
-            string attributes = line.Data.Substring(offset + 1, endPos - offset - 1);
-            ParseAttributes(line, attributes, col);
-            offset = endPos + 1;
-
-
-            AttributeNode node = (AttributeNode)prototypes.CreateNode("{", parent);
-            node._attributes = col;
-            return AddMe(prototypes, parent, line, node);
-        }
-
-        private static void ParseAttributes(LineInfo line, string attributes, List<Attribute> col)
-        {
-            bool inQuote = false;
-            int parenthisCount = 0;
-            string name = null;
-            int start = -1;
-            int step = 0; //0 = start of name, 1 = end of name, 2 = equal sign, 3 = start of value, 4 = end of value, 5 = comma
-            for (int i = 0; i < attributes.Length; ++i)
-            {
-                char ch = attributes[i];
-
-                if (ch == '"')
-                {
-                    inQuote = !inQuote;
-                    if (inQuote && step == 3)
-                    {
-                        ++step;
-                        start = i;
-                    }
-                }
-
-                if (inQuote)
-                    continue;
-
-                if (ch == '(')
-                    ++parenthisCount;
-                if (ch == ')')
-                    --parenthisCount;
-                if (parenthisCount > 0)
-                    continue;
-
-                // find start of name
-                if (step == 0)
-                {
-                    if (!char.IsWhiteSpace(ch))
-                    {
-                        start = i;
-                        ++step;
-                    }
-                }
-                    // find end of name
-                else if (step == 1)
-                {
-                    if (char.IsWhiteSpace(ch) || ch == '=')
-                    {
-                        name = attributes.Substring(start, i - start);
-                        start = -1;
-                        ++step;
-                    }
-                }
-
-                // find equal
-                if (step == 2)
-                {
-                    if (ch == '=')
-                        ++step;
-                    continue;
-                }
-
-                // start of value
-                if (step == 3)
-                {
-                    if (!char.IsWhiteSpace(ch))
-                    {
-                        start = i;
-                        ++step;
-                    }
-                }
-
-                    // end of value
-                else if (step == 4)
-                {
-                    if (ch == ',')
-                    {
-                        AddAttribute(col, name, attributes.Substring(start, i - start).Trim());
-                        start = -1;
-                        ++step;
-                    }
-                }
-
-                // find comma
-                if (step == 5)
-                {
-                    if (ch == ',')
-                        step = 0;
-
-                    continue;
-                }
-            }
-
-            if (step > 0 && step < 4)
-                throw new CodeGeneratorException(line.LineNumber, line.Data, "Invalid attributes");
-
-            if (step == 4)
-                AddAttribute(col, name, attributes.Substring(start, attributes.Length - start));
-        }
-
-        private static void AddAttribute(List<Attribute> col, string name, string value)
-        {
-            if (string.IsNullOrEmpty(value))
-                return;
-
-            // need to end with a ", else parsing will fail.
-/*
-if (value[0] == '\"' && value[value.Length -1] != '\"')
-                col.Add(name, value + "+ @\"\"");            else
-            {*/
-            bool complex = false;
-            bool inStr = false;
-            for (int i = 0; i < value.Length; ++i )
-            {
-                if (value[i] == '"')
-                {
-                    inStr = !inStr;
-                    continue;
-                }
-                if (!inStr)
-                {
-                    complex = true;
-                    break;
-                }
-            }
-
-                //if (pos != -1)
-                  //  value = value.Insert(pos, "@");
-
-            Attribute attr = new Attribute();
-            attr.Simple = !complex;
-            attr.Name = name;
-            attr.Value = value;
-            col.Add(attr);
-            //}
-        }
-
-        /// <summary>
-        /// determines if this node can handle the line (by checking the first word);
-        /// </summary>
-        /// <param name="word">Controller char (word)</param>
-        /// <returns>true if text belongs to this node type</returns>
-        /// <param name="firstNode">first node on line</param>
-        public override bool CanHandle(string word, bool firstNode)
-        {
-            if (word.Length >= 1 && word[0] == '{' && !firstNode)
-                return true;
-
-            return false;
-        }
-
-        /// <summary>
-        /// Convert node to HTML (with ASP-tags)
-        /// </summary>
-        /// <returns>HTML string</returns>
-        public override string ToHtml()
-        {
-            StringBuilder attrs = new StringBuilder();
-            for (int i = 0; i < Attributes.Count; ++i)
-            {
-                if (!Attributes[i].Simple)
-                    attrs.AppendFormat("{0}=<%= {1} %> ", Attributes[i].Name, Attributes[i].Value);
-                else
-                    attrs.AppendFormat("{0}={1} ", Attributes[i].Name, Attributes[i].Value);
-            }
-
-            return attrs.ToString();
-        }
-
-        /// <summary>
-        /// Convert the node to c# code
-        /// </summary>
-        /// <param name="inString">True if we are inside the internal stringbuilder</param>
-        /// <param name="smallEnough">true if all subnodes fit on one line</param>
-        /// <param name="smallEnoughIsDefaultValue">smallEnough is a default value, recalc it</param>
-        /// <returns>c# code</returns>
-        protected override string ToCode(ref bool inString, bool smallEnough, bool smallEnoughIsDefaultValue)
-        {
-            StringBuilder attrs = new StringBuilder();
-            for (int i = 0; i < Attributes.Count; ++i)
-            {
-                if (!Attributes[i].Simple)
-                    attrs.AppendFormat("{0}=\"\"\"); sb.Append({1}); sb.Append(@\"\"\" ", Attributes[i].Name,
-                                       Attributes[i].Value);
-                else
-                    attrs.AppendFormat("{0}=\"{1}\" ", Attributes[i].Name, Attributes[i].Value);
-            }
-
-            if (attrs.Length > 1)
-                attrs.Length = attrs.Length - 1;
-            return attrs.ToString();
-        }
-
-    }
-}
\ No newline at end of file
diff --git a/HttpServer/trunk/HttpServer/Rendering/Haml/Nodes/ChildNode.cs b/HttpServer/trunk/HttpServer/Rendering/Haml/Nodes/ChildNode.cs
deleted file mode 100644
index 132985d..0000000
--- a/HttpServer/trunk/HttpServer/Rendering/Haml/Nodes/ChildNode.cs
+++ /dev/null
@@ -1,95 +0,0 @@
-using HttpServer.Rendering.Haml.Nodes;
-using HttpServer.Rendering.Haml;
-
-namespace HttpServer.Rendering.Haml.Nodes
-{
-    /// <summary>
-    /// Child nodes may not be the first node on a line
-    /// </summary>
-    public abstract class ChildNode : Node
-    {
-        /// <summary>
-        /// Child nodes may not be the first node on a line
-        /// </summary>
-        /// <param name="parent">parent node</param>
-        public ChildNode(Node parent) : base(parent)
-        {
-
-        }
-
-        /// <summary>
-        /// Creates a DIV node and add's the specified node to it.
-        /// </summary>
-        /// <param name="prototypes">Contains all prototypes for each control char. used to instanciate new nodes.</param>
-        /// <param name="parent">parent node</param>
-        /// <param name="line">current line information</param>
-        /// <param name="me">node to add to the DIV node</param>
-        /// <returns>current node</returns>
-        public Node AddMe(NodeList prototypes, Node parent, LineInfo line, Node me)
-        {
-            if (parent == null)
-            {
-                TagNode tag = (TagNode)prototypes.CreateNode("%", parent);
-                tag.Name = "div";
-                tag.LineInfo = line;
-                tag.AddModifier(me);
-                return tag;
-            }
-
-            return me;
-        }
-
-        /// <summary>
-        /// Get endposition for this modifier.
-        /// </summary>
-        /// <param name="offset">where to start searching</param>
-        /// <param name="line">contents of the current line</param>
-        /// <param name="terminator">char that tells us that this is the end position</param>
-        /// <returns>index on the current line</returns>
-        protected int GetEndPos(int offset, string line, char terminator)
-        {
-            // find string to parse
-            bool inQuote = false;
-            for (int i = offset + 1; i < line.Length; ++i)
-            {
-                char ch = line[i];
-                if (ch == '"')
-                    inQuote = !inQuote;
-                else if (ch == terminator && !inQuote)
-                    return i;
-            }
-
-            return -1;
-        }
-
-        /// <summary>
-        /// This is a plain text node
-        /// </summary>
-        public override bool IsTextNode
-        {
-            get { return false; }
-        }
-
-        /// <summary>
-        /// Get endposition for this modifier.
-        /// </summary>
-        /// <param name="offset">where to start searching</param>
-        /// <param name="line">contents of the current line</param>
-        /// <returns>index on the current line</returns>
-        protected int GetEndPos(int offset, string line)
-        {
-            // find string to parse
-            bool inQuote = false;
-            for (int i = offset + 1; i < line.Length; ++i)
-            {
-                char ch = line[i];
-                if (ch == '"')
-                    inQuote = !inQuote;
-                else if (!char.IsLetterOrDigit(ch) && !inQuote && ch != '_' && !(ch == '[' || ch == ']'))
-                    return i;
-            }
-
-            return -1;
-        }
-    }
-}
\ No newline at end of file
diff --git a/HttpServer/trunk/HttpServer/Rendering/Haml/Nodes/ClassNode.cs b/HttpServer/trunk/HttpServer/Rendering/Haml/Nodes/ClassNode.cs
deleted file mode 100644
index a79650a..0000000
--- a/HttpServer/trunk/HttpServer/Rendering/Haml/Nodes/ClassNode.cs
+++ /dev/null
@@ -1,77 +0,0 @@
-using HttpServer.Rendering;
-using HttpServer.Rendering.Haml.Nodes;
-using HttpServer.Rendering.Haml;
-
-namespace HttpServer.Rendering.Haml.Nodes
-{
-    /// <summary>
-    /// Represents a html class node.
-    /// </summary>
-    class ClassNode : ChildNode
-    {
-        private string _name;
-
-        public ClassNode(Node parent) : base(parent)
-        {
-        }
-
-        /// <summary>
-        /// Parse node contents add return a fresh node.
-        /// </summary>
-        /// <param name="prototypes">List containing all node types</param>
-        /// <param name="parent">Node that this is a subnode to. Can be null</param>
-        /// <param name="line">Line to parse</param>
-        /// <param name="offset">Where to start the parsing. Should be set to where the next node should start parsing.</param>
-        /// <returns>A node corresponding to the bla bla; null if parsing failed.</returns>
-        /// <exception cref="CodeGeneratorException"></exception>
-        public override Node Parse(NodeList prototypes, Node parent, LineInfo line, ref int offset)
-        {
-            if (offset > line.Data.Length - 1)
-                throw new CodeGeneratorException(line.LineNumber, line.Data, "Too little data");
-
-            int pos = GetEndPos(offset, line.Data);
-            if (pos == -1)
-                pos = line.Data.Length;
-
-            ++offset;
-            string name = line.Data.Substring(offset, pos - offset);
-            offset = pos;
-
-            ClassNode node = (ClassNode) prototypes.CreateNode(".", parent);
-            node._name = name;
-            return AddMe(prototypes, parent, line, node);
-        }
-
-        /// <summary>
-        /// determines if this node can handle the line (by checking the first word);
-        /// </summary>
-        /// <param name="word">Controller char (word)</param>
-        /// <returns>true if text belongs to this node type</returns>
-        /// <param name="firstNode">first node on line</param>
-        public override bool CanHandle(string word, bool firstNode)
-        {
-            return word.Length > 0 && word[0] == '.';
-        }
-
-        /// <summary>
-        /// Convert node to HTML (with ASP-tags)
-        /// </summary>
-        /// <returns>HTML string</returns>
-        public override string ToHtml()
-        {
-            return "class=\"" + _name + "\" ";
-        }
-
-        /// <summary>
-        /// Convert the node to c# code
-        /// </summary>
-        /// <param name="inString">True if we are inside the internal stringbuilder</param>
-        /// <param name="smallEnough">true if all subnodes fit on one line</param>
-        /// <param name="smallEnoughIsDefaultValue">smallEnough is a default value, recalc it</param>
-        /// <returns>c# code</returns>
-        protected override string ToCode(ref bool inString, bool smallEnough, bool smallEnoughIsDefaultValue)
-        {
-            return "class=\"\"" + _name + "\"\"";
-        }
-    }
-}
\ No newline at end of file
diff --git a/HttpServer/trunk/HttpServer/Rendering/Haml/Nodes/DisplayCodeNode.cs b/HttpServer/trunk/HttpServer/Rendering/Haml/Nodes/DisplayCodeNode.cs
deleted file mode 100644
index b441d9c..0000000
--- a/HttpServer/trunk/HttpServer/Rendering/Haml/Nodes/DisplayCodeNode.cs
+++ /dev/null
@@ -1,164 +0,0 @@
-using System.Text;
-using HttpServer.Rendering;
-using HttpServer.Rendering.Haml.Nodes;
-using HttpServer.Rendering.Haml;
-
-namespace HttpServer.Rendering.Haml.Nodes
-{
-    /// <summary>
-    /// The follow node allows users to display code in a haml document
-    /// </summary>
-    /// <example>
-    /// #main Welcome =user.FirstName
-    /// </example>
-    public class DisplayCodeNode : ChildNode
-    {
-        private string _code;
-
-        /// <summary>
-        /// Contains C# code that will be rendered into the view.
-        /// </summary>
-        /// <param name="parent">Parent node</param>
-        public DisplayCodeNode(Node parent) : base(parent)
-        {}
-
-        /// <summary>
-        /// Parse node contents add return a fresh node.
-        /// </summary>
-        /// <param name="prototypes">List containing all node types</param>
-        /// <param name="parent">Node that this is a subnode to. Can be null</param>
-        /// <param name="line">Line to parse</param>
-        /// <param name="offset">Where to start the parsing. Should be set to where the next node should start parsing.</param>
-        /// <returns>A node corresponding to the bla bla; null if parsing failed.</returns>
-        /// <exception cref="CodeGeneratorException"></exception>
-        public override Node Parse(NodeList prototypes, Node parent, LineInfo line, ref int offset)
-        {
-            if (offset >= line.Data.Length)
-                throw new CodeGeneratorException(line.LineNumber, line.Data, "Too little data");
-
-            int pos = line.Data.Length;
-
-            ++offset;
-            string name = line.Data.Substring(offset, pos - offset);
-            offset = pos;
-
-            string trimmedData = line.Data.Trim();
-            if (trimmedData.Length > 0 && trimmedData[trimmedData.Length-1] == ';')
-                throw new CodeGeneratorException(line.LineNumber, line.Data, "Displayed code should not end with semicolon.");
-
-            DisplayCodeNode node = (DisplayCodeNode)prototypes.CreateNode("=", parent);
-            node._code = name;
-            if (parent == null)
-                node.LineInfo = line;
-            return node;
-        }
-
-        /// <summary>
-        /// determines if this node can handle the line (by checking the first word);
-        /// </summary>
-        /// <param name="word">Controller char (word)</param>
-        /// <returns>true if text belongs to this node type</returns>
-        /// <param name="firstNode">first node on line</param>
-        public override bool CanHandle(string word, bool firstNode)
-        {
-            return word.Length > 0 && word[0] == '=';
-        }
-
-        /// <summary>
-        /// Determines if this is a textnode (containg plain text)
-        /// </summary>
-        public override bool IsTextNode
-        {
-            get
-            {
-                return true;
-            }
-        }
-
-        /// <summary>
-        /// Generate HTML for this node (with asp tags for code)
-        /// </summary>
-        /// <returns></returns>
-        public override string ToHtml()
-        {
-            if (Parent == null || (Parent.Children.Last.Value != this && LineInfo == null))
-                return string.Format("<%= {0} %>", _code);
-
-            StringBuilder sb = new StringBuilder();
-            string intend = LineInfo == null ? string.Empty : string.Empty.PadLeft(LineInfo.Intendation, '\t');
-            sb.Append(intend);
-            sb.Append("<%=");
-            sb.Append(_code);
-
-            if (Children.Count == 0)
-                sb.AppendLine();
-
-            foreach (Node node in Children)
-                sb.Append(node.ToHtml());
-
-            sb.Append(intend);
-            sb.AppendLine("%>");
-
-            return sb.ToString();
-        }
-
-        /// <summary>
-        /// = is placed at the end of a tag definition, after class, id, and attribute declarations.
-        /// ItÂ’s just a shortcut for inserting Ruby code into an element. It works the same as = without a tag:
-        /// it inserts the result of the Ruby code into the template.
-        /// However, if the result is short enough, it is displayed entirely on one line.
-        /// </summary>
-        /// <param name="inString">True if we are inside the internal stringbuilder</param>
-        /// <param name="smallEnough">true if all subnodes fit on one line</param>
-        /// <param name="smallEnoughIsDefaultValue">smallEnough is a default value, recalc it</param>
-        /// <returns>c# code</returns>
-        protected override string ToCode(ref bool inString, bool smallEnough, bool smallEnoughIsDefaultValue)
-        {
-            if (LineInfo == null)
-            {
-                if (inString)
-                    return string.Format("\");sb.Append({0});sb.Append(@\"", _code);
-                else
-                    return "sb.Append(" + _code + ");";
-            }
-
-            StringBuilder sb = new StringBuilder();
-            string intend = LineInfo == null ? string.Empty : string.Empty.PadLeft(LineInfo.Intendation, '\t');
-            if (inString)
-            {
-                sb.Append("\");");
-                inString = false;
-            }
-
-            if (smallEnough)
-                sb.Append("sb.Append(");
-            else
-            {
-                sb.Append("sb.AppendLine(");
-                sb.Append(intend);
-            }
-
-            // on same line
-            sb.Append(_code);
-            sb.Append(");");
-
-            foreach (Node node in Children)
-                sb.Append(node.ToCode(ref inString, smallEnough));
-
-            if (!smallEnough)
-                sb.AppendLine();
-
-            return sb.ToString();
-        }
-
-        bool IsLastNode(Node parent)
-        {
-            if (parent == null)
-                return false;
-            if (parent.ModifierCount == 0)
-                return false;
-            return parent.LastModifier == this;
-        }
-
-    }
-}
\ No newline at end of file
diff --git a/HttpServer/trunk/HttpServer/Rendering/Haml/Nodes/DocTypeTag.cs b/HttpServer/trunk/HttpServer/Rendering/Haml/Nodes/DocTypeTag.cs
deleted file mode 100644
index 6710161..0000000
--- a/HttpServer/trunk/HttpServer/Rendering/Haml/Nodes/DocTypeTag.cs
+++ /dev/null
@@ -1,75 +0,0 @@
-using System;
-using HttpServer.Rendering.Haml;
-using HttpServer.Rendering.Haml.Nodes;
-
-namespace HttpServer.Rendering.Haml.Nodes
-{
-    internal class DocTypeTag : Node
-    {
-        private readonly string _docType;
-
-        public DocTypeTag(string docType, Node parent) : base(parent)
-        {
-            _docType = docType;
-        }
-
-        /// <summary>
-        /// Text nodes should be added as child.
-        /// </summary>
-        public override bool IsTextNode
-        {
-            get { return false; }
-        }
-
-        /// <summary>
-        /// Parse node contents add return a fresh node.
-        /// </summary>
-        /// <param name="prototypes">List containing all node types</param>
-        /// <param name="parent">Node that this is a subnode to. Can be null</param>
-        /// <param name="line">Line to parse</param>
-        /// <param name="offset">Where to start the parsing. Should be set to where the next node should start parsing.</param>
-        /// <returns>A node corresponding to the bla bla; null if parsing failed.</returns>
-        /// <exception cref="CodeGeneratorException"></exception>
-        public override Node Parse(NodeList prototypes, Node parent, LineInfo line, ref int offset)
-        {
-            offset = line.Data.Length;
-            return new DocTypeTag(
-                @"<!DOCTYPE html PUBLIC ""-//W3C//DTD XHTML 1.0 Strict//EN"" ""http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"">".Replace("\"", "\"\""),
-                parent);
-
-        }
-
-        /// <summary>
-        /// determines if this node can handle the line (by checking the first word);
-        /// </summary>
-        /// <param name="word">Controller char (word)</param>
-        /// <returns>true if text belongs to this node type</returns>
-        /// <param name="firstNode">First node on line, used since some nodes cannot exist on their own on a line.</param>
-        public override bool CanHandle(string word, bool firstNode)
-        {
-            return word.Length >= 3 && word.Substring(0, 3) == "!!!" && firstNode;
-        }
-
-        /// <summary>
-        /// Convert node to HTML (with ASP-tags)
-        /// </summary>
-        /// <returns>HTML string</returns>
-        /// <exception cref="NotImplementedException"></exception>
-        public override string ToHtml()
-        {
-            throw new NotImplementedException();
-        }
-
-        /// <summary>
-        /// Convert the node to c# code
-        /// </summary>
-        /// <param name="inString">True if we are inside the internal stringbuilder</param>
-        /// <param name="smallEnough">true if all subnodes fit on one line</param>
-        /// <param name="smallEnoughIsDefaultValue">smallEnough is a default value, recalc it</param>
-        /// <returns>c# code</returns>
-        protected override string ToCode(ref bool inString, bool smallEnough, bool smallEnoughIsDefaultValue)
-        {
-            return _docType + Environment.NewLine;
-        }
-    }
-}
diff --git a/HttpServer/trunk/HttpServer/Rendering/Haml/Nodes/IdNode.cs b/HttpServer/trunk/HttpServer/Rendering/Haml/Nodes/IdNode.cs
deleted file mode 100644
index dfb549c..0000000
--- a/HttpServer/trunk/HttpServer/Rendering/Haml/Nodes/IdNode.cs
+++ /dev/null
@@ -1,74 +0,0 @@
-using HttpServer.Rendering;
-using HttpServer.Rendering.Haml.Nodes;
-using HttpServer.Rendering.Haml;
-
-namespace HttpServer.Rendering.Haml.Nodes
-{
-    class IdNode : ChildNode
-    {
-        private string _id;
-
-        public IdNode(Node parent) : base(parent)
-        {}
-
-        /// <summary>
-        /// Parse node contents add return a fresh node.
-        /// </summary>
-        /// <param name="prototypes">List containing all node types</param>
-        /// <param name="parent">Node that this is a subnode to. Can be null</param>
-        /// <param name="line">Line to parse</param>
-        /// <param name="offset">Where to start the parsing. Should be set to where the next node should start parsing.</param>
-        /// <returns>A node corresponding to the bla bla; null if parsing failed.</returns>
-        /// <exception cref="CodeGeneratorException"></exception>
-        public override Node Parse(NodeList prototypes, Node parent, LineInfo line, ref int offset)
-        {
-            if (line.Data[offset] != '#')
-                throw new CodeGeneratorException(line.LineNumber, line.Data, "Node is not an id node.");
-
-            int endPos = GetEndPos(offset, line.Data);
-            if (endPos == -1)
-                endPos = line.Data.Length;
-
-            ++offset;
-            string id = line.Data.Substring(offset, endPos - offset);
-            offset = endPos;
-
-            IdNode node = (IdNode)prototypes.CreateNode("#", parent);
-            node._id = id;
-            return AddMe(prototypes, parent, line, node);
-        }
-
-        /// <summary>
-        /// determines if this node can handle the line (by checking the first word);
-        /// </summary>
-        /// <param name="word">Controller char (word)</param>
-        /// <returns>true if text belongs to this node type</returns>
-        /// <param name="firstNode">first node on line</param>
-        public override bool CanHandle(string word, bool firstNode)
-        {
-            return word.Length > 0 && word[0] == '#';
-        }
-
-        /// <summary>
-        /// Convert node to HTML (with ASP-tags)
-        /// </summary>
-        /// <returns>HTML string</returns>
-        public override string ToHtml()
-        {
-            return "id=\"" + _id + "\" ";
-        }
-
-        /// <summary>
-        /// Convert the node to c# code
-        /// </summary>
-        /// <param name="inString">True if we are inside the internal stringbuilder</param>
-        /// <param name="smallEnough">true if all subnodes fit on one line</param>
-        /// <param name="smallEnoughIsDefaultValue">smallEnough is a default value, recalc it</param>
-        /// <returns>c# code</returns>
-        protected override string ToCode(ref bool inString, bool smallEnough, bool smallEnoughIsDefaultValue)
-        {
-            return "id=\"\"" + _id + "\"\" ";
-        }
-
-    }
-}
\ No newline at end of file
diff --git a/HttpServer/trunk/HttpServer/Rendering/Haml/Nodes/Node.cs b/HttpServer/trunk/HttpServer/Rendering/Haml/Nodes/Node.cs
deleted file mode 100644
index 29e13fb..0000000
--- a/HttpServer/trunk/HttpServer/Rendering/Haml/Nodes/Node.cs
+++ /dev/null
@@ -1,187 +0,0 @@
-using System.Collections.Generic;
-using HttpServer.Rendering;
-using HttpServer.Rendering.Haml;
-
-namespace HttpServer.Rendering.Haml.Nodes
-{
-    /// <summary>
-    /// A node represents a controller code and contents. For example a html tag, an attribute list or something else.
-    /// </summary>
-    public abstract class Node
-    {
-        private readonly LinkedList<Node> _children = new LinkedList<Node>();
-        private readonly LinkedList<Node> _modifiers = new LinkedList<Node>();
-        private LineInfo _lineInfo;
-        private readonly Node _parent;
-
-        /// <summary>
-        /// Add a new node
-        /// </summary>
-        /// <param name="parent">parent node.</param>
-        public Node(Node parent)
-        {
-            _parent = parent;
-        }
-
-        /// <summary>
-        /// Returns true if the node is applicable after another node as text instead of being applied as a modifier
-        /// </summary>
-        public abstract bool IsTextNode
-    {
-        get;
-    }
-
-        /// <summary>
-        /// Count our children and our childrens children and so on...
-        /// </summary>
-        public int AllChildrenCount
-        {
-            get
-            {
-                int count = _children.Count;
-
-                foreach (Node node in _children)
-                    count += node.AllChildrenCount;
-
-                return count;
-            }
-        }
-
-        /// <summary>
-        /// All child nodes for this node.
-        /// </summary>
-        public LinkedList<Node> Children
-        {
-            get { return _children; }
-        }
-
-        /// <summary>
-        /// Should only be set for each parent.
-        /// </summary>
-        public LineInfo LineInfo
-        {
-            get { return _lineInfo; }
-            set { _lineInfo = value; }
-        }
-
-        /// <summary>
-        /// Modifiers are used to modify the first node on the line.
-        /// Typical modifiers are attribute lists, class names and IDs.
-        /// </summary>
-        protected LinkedList<Node> Modifiers
-        {
-            get { return _modifiers; }
-        }
-
-        /// <summary>
-        /// Modifiers are used to modify the first node on the line.
-        /// Typical modifiers are attribute lists, class names and IDs.
-        /// </summary>
-        /// <param name="node">Modifier node</param>
-        public void AddModifier(Node node)
-        {
-            if (node.IsTextNode)
-                _children.AddLast(node);
-            else
-                _modifiers.AddLast(node);
-        }
-
-        /// <summary>
-        /// Last modifier for this node
-        /// </summary>
-        /// <seealso cref="Modifiers"/>
-        public Node LastModifier
-        {
-            get { return _modifiers.Last.Value; }
-        }
-
-        /// <summary>
-        /// Number of modifiers for this line.
-        /// </summary>
-        public int ModifierCount
-        {
-            get { return _modifiers.Count; }
-        }
-
-        /// <summary>
-        /// Parent node.
-        /// </summary>
-        public Node Parent
-        {
-            get { return _parent; }
-        }
-
-        /// <summary>
-        /// Parse node contents add return a fresh node.
-        /// </summary>
-        /// <param name="prototypes">List containing all node types</param>
-        /// <param name="parent">Node that this is a subnode to. Can be null</param>
-        /// <param name="line">Line to parse</param>
-        /// <param name="offset">Where to start the parsing. Should be set to where the next node should start parsing.</param>
-        /// <returns>A node corresponding to the bla bla; null if parsing failed.</returns>
-        /// <exception cref="CodeGeneratorException"></exception>
-        public abstract Node Parse(NodeList prototypes, Node parent, LineInfo line, ref int offset);
-
-        /// <summary>
-        /// determines if this node can handle the line (by checking the first word);
-        /// </summary>
-        /// <param name="word">Controller char (word)</param>
-        /// <returns>true if text belongs to this node type</returns>
-        /// <param name="firstNode">First node on line, used since some nodes cannot exist on their own on a line.</param>
-        public abstract bool CanHandle(string word, bool firstNode);
-
-        /// <summary>
-        /// Generate HTML code (with ASP tags)
-        /// </summary>
-        /// <returns></returns>
-        public abstract string ToHtml();
-
-        /// <summary>
-        /// Converts the node to c# code
-        /// </summary>
-        /// <param name="inString">true if we are inside the internal stringbuilder</param>
-        /// <returns>c# code</returns>
-        public virtual string ToCode(ref bool inString)
-        {
-            return ToCode(ref inString, false, true);
-        }
-
-        /// <summary>
-        /// Convert the node to c# code
-        /// </summary>
-        /// <param name="inString">True if we are inside the internal stringbuilder</param>
-        /// <param name="smallEnough">true if all subnodes fit on one line</param>
-        /// <returns>c# code</returns>
-        public virtual string ToCode(ref bool inString, bool smallEnough)
-        {
-            return ToCode(ref inString, smallEnough, false);
-        }
-
-        /// <summary>
-        /// Generate C# code of the node
-        /// </summary>
-        /// <param name="inString">true if we are inside the internal stringbuilder</param>
-        /// <param name="smallEnough">code is small enough to fit on one row.</param>
-        /// <param name="smallEnoughIsDefaultValue">smallEnough is a default value, recalc it</param>
-        /// <returns>c# code</returns>
-        protected abstract string ToCode(ref bool inString, bool smallEnough, bool smallEnoughIsDefaultValue);
-
-        /// <summary>
-        /// Get intendation level for this node.
-        /// </summary>
-        /// <returns></returns>
-        protected int GetIntendation()
-        {
-            if (LineInfo == null)
-            {
-                if (Parent == null)
-                    return 0;
-                else
-                    return Parent.GetIntendation() + 1;
-            }
-            else
-                return LineInfo.Intendation;
-        }
-
-    }
-}
diff --git a/HttpServer/trunk/HttpServer/Rendering/Haml/Nodes/PartialNode.cs b/HttpServer/trunk/HttpServer/Rendering/Haml/Nodes/PartialNode.cs
deleted file mode 100644
index b015ff3..0000000
--- a/HttpServer/trunk/HttpServer/Rendering/Haml/Nodes/PartialNode.cs
+++ /dev/null
@@ -1,202 +0,0 @@
-using System.Text;
-
-namespace HttpServer.Rendering.Haml.Nodes
-{
-    /// <summary>
-    /// A partial is a HAML template that is inserted into other HAML templates.
-    /// </summary>
-	public class PartialNode : Node
-	{
-		/// <summary>
-		/// Contains the page/controller target for the partial.
-		/// The PartialNode should be written as follows:
-		/// ex.
-		///
-		/// _"requestedpage"{parametername="parametervalue",parametername2=parameter2,parametername3=parameter3:typeof(parameter3type)}
-		/// </summary>
-		private string _target;
-
-        /// <summary>
-        /// create  a new partial node.
-        /// </summary>
-        /// <param name="parent">parent node</param>
-		public PartialNode(Node parent) : base(parent)
-        {
-        }
-
-        /// <summary>
-        /// This is a plain text node
-        /// </summary>
-        public override bool IsTextNode
-		{
-			get { return false; }
-		}
-
-
-		/// <summary>
-		/// Returns the page/controller target for the node
-		/// </summary>
-		public string Target
-		{
-			get { return _target; }
-		}
-
-		/// <summary>
-		/// Determines if this node can handle the line (by checking the first word);
-		/// </summary>
-		/// <param name="word">Controller char (word)</param>
-		/// <returns>True if text belongs to this node type</returns>
-		/// <param name="firstNode">First node on line.</param>
-		public override bool CanHandle(string word, bool firstNode)
-		{
-			if(firstNode == false)
-				return false;
-
-			if (word.Length >= 1 && word[0] == '_')
-				return true;
-
-			return false;
-		}
-
-		/// <summary>
-		/// Parse node contents add return a fresh node.
-		/// </summary>
-		/// <param name="parent">Node that this is a subnode to. Can be null</param>
-		/// <param name="prototypes">A list with node types</param>
-		/// <param name="line">Line to parse</param>
-		/// <param name="offset">Where to start the parsing. Will be set to where the next node should start parsing</param>
-		/// <returns>A node corresponding to the bla bla; null if parsing failed.</returns>
-		/// <exception cref="CodeGeneratorException"></exception>
-		public override Node Parse(NodeList prototypes, Node parent, LineInfo line, ref int offset)
-		{
-			if (offset > line.Data.Length - 1)
-				throw new CodeGeneratorException(line.LineNumber, line.Data, "Tried to parse after end of line");
-
-			if (line.Data[offset] != '_')
-				throw new CodeGeneratorException(line.LineNumber, line.Data, "Not a PartialNode");
-
-			// From the first " sign (offset + 2) find the next " sign
-			int pos = -1;
-			for (int i = offset + 2; i < line.Data.Length; ++i)
-			{
-				if (line.Data[i] == '\"')
-				{
-					pos = i;
-					break;
-				}
-			}
-			if (pos == -1)
-				throw new CodeGeneratorException(line.LineNumber, line.Data, "PartialNode does not contain an end paranthesis.");
-
-			// Cut out the data between the two above found " signs and then start processing the address
-			// The address is converted from the format /example/example/ to \\example\\example.haml
-			PartialNode node = (PartialNode)prototypes.CreateNode("_", parent);
-			node._target = line.Data.Substring(offset + 2, pos - offset - 2);
-			if (node._target[node._target.Length - 1] == '/')
-				node._target = node._target.Substring(0, node._target.Length - 1);
-			if (node._target[0] == '/')
-				node._target = node._target.Substring(1);
-			node._target = node._target.Replace("/", "\\\\");
-			node._target += ".haml";
-
-			offset = pos + 1;
-			return node;
-		}
-
-        /// <summary>
-        /// Convert the node to c# code
-        /// </summary>
-        /// <param name="inString">True if we are inside the internal stringbuilder</param>
-        /// <param name="smallEnough">true if all subnodes fit on one line</param>
-        /// <param name="smallEnoughIsDefaultValue">smallEnough is a default value, recalc it</param>
-        /// <returns>c# code</returns>
-		protected override string ToCode(ref bool inString, bool smallEnough, bool smallEnoughIsDefaultValue)
-		{
-			if(Children.Count > 0)
-				ThrowError(" must not contain children.");
-
-			string code = GetCode();
-
-			StringBuilder sb = new StringBuilder();
-			string intend = LineInfo == null ? string.Empty : string.Empty.PadLeft(LineInfo.Intendation, '\t');
-
-			if (inString)
-			{
-				sb.Append("\");");
-				inString = false;
-			}
-
-			sb.Append(intend);
-			sb.Append("sb.Append(");
-			sb.Append(code);
-			sb.Append(");");
-
-			return sb.ToString();
-		}
-
-        /// <summary>
-        /// Convert node to HTML (with ASP-tags)
-        /// </summary>
-        /// <returns>HTML string</returns>
-        public override string ToHtml()
-		{
-			string code = GetCode();
-
-			string intend = LineInfo == null ? string.Empty : string.Empty.PadLeft(LineInfo.Intendation, '\t');
-			return string.Format("{1}<% {0} %>", intend, code);
-		}
-
-		/// <summary>
-		/// Helper function to retrieve the code for the partial request
-		/// </summary>
-		/// <returns>A string representing the code for invocating a render of the partial</returns>
-		protected string GetCode()
-		{
-			string argumentString = string.Empty;
-			if (Modifiers.Count == 1 && Modifiers.First.Value is AttributeNode)
-			{
-				foreach (AttributeNode.Attribute attrib in ((AttributeNode)Modifiers.First.Value).Attributes)
-				{
-					// Put the argument name within parenthesis
-					argumentString += "\"" + attrib.Name + "\", ";
-
-					// If the value contains a colon the part after the colon is extracted and used as a typeinfo argument
-					if (attrib.Value.Contains(":"))
-					{
-						string[] parts = attrib.Value.Split(':');
-						if (parts.Length > 2)
-							ThrowError(" must only contain one colon(:) per attribute to define type.");
-
-						argumentString += parts[0] + ", " + parts[1];
-					}
-					else
-						argumentString += attrib.Value;
-
-					argumentString += ", ";
-				}
-			}
-			else if (Modifiers.Count > 1)
-				ThrowError(" can at most contain one AttributeNode.");
-			else if (Modifiers.Count == 1 && !(Modifiers.First.Value is AttributeNode))
-				ThrowError(" can only contain an AttributeNode.");
-
-			// Remove last comma if arguments were passed
-			if (!string.IsNullOrEmpty(argumentString))
-				argumentString = argumentString.Substring(0, argumentString.Length - 2);
-
-			return "hiddenTemplateManager.RenderPartial(\"" + _target + "\", args, new TemplateArguments(" + argumentString + "))";
-		}
-
-        /// <summary>
-        /// Throw an exception with predefined information
-        /// </summary>
-        /// <param name="reason">why the exception was thrown</param>
-		protected void ThrowError(string reason)
-		{
-			if (LineInfo == null)
-                throw new CodeGeneratorException(0, "PartialNode with target '" + _target + "'" + reason);
-
-            throw new CodeGeneratorException(LineInfo.LineNumber, LineInfo.Data, "PartialNode with target '" + _target + "'" + reason);
-		}
-	}
-}
diff --git a/HttpServer/trunk/HttpServer/Rendering/Haml/Nodes/SilentCodeNode.cs b/HttpServer/trunk/HttpServer/Rendering/Haml/Nodes/SilentCodeNode.cs
deleted file mode 100644
index e4e4e82..0000000
--- a/HttpServer/trunk/HttpServer/Rendering/Haml/Nodes/SilentCodeNode.cs
+++ /dev/null
@@ -1,152 +0,0 @@
-using System.Text;
-using HttpServer.Rendering;
-using HttpServer.Rendering.Haml.Nodes;
-using HttpServer.Rendering.Haml;
-
-namespace HttpServer.Rendering.Haml.Nodes
-{
-    /// <summary>
-    /// The ’-’ character makes the text following it into “silent” code: C# code that is evaluated, but not output.
-    /// It is not recommended that you use this widely; almost all processing code and logic should be restricted to the Controller, Helpers, or partials.
-    ///
-    /// For example
-    /// <code>
-    /// - string foo = "hello"
-    /// - foo += " there"
-    /// - foo += " you!"
-    /// %p= foo
-    /// </code>
-    ///
-    /// Is compiled to
-    /// <example>
-    /// <p>
-    ///  hello there you!
-    ///</p>
-    /// </example>
-    /// </summary>
-    internal class SilentCodeNode : ChildNode
-    {
-        private string _code = string.Empty;
-
-        public SilentCodeNode(Node parent) : base(parent)
-        {}
-
-        /// <summary>
-        /// determines if this node can handle the line (by checking the first word);
-        /// </summary>
-        /// <param name="word">Controller char (word)</param>
-        /// <returns>true if text belongs to this node type</returns>
-        /// <param name="firstNode">first node on line</param>
-        public override bool CanHandle(string word, bool firstNode)
-        {
-            return word.Length > 0 && word[0] == '-';
-        }
-
-        /// <summary>
-        /// Parse node contents add return a fresh node.
-        /// </summary>
-        /// <param name="prototypes">List containing all node types</param>
-        /// <param name="parent">Node that this is a subnode to. Can be null</param>
-        /// <param name="line">Line to parse</param>
-        /// <param name="offset">Where to start the parsing. Should be set to where the next node should start parsing.</param>
-        /// <returns>A node corresponding to the bla bla; null if parsing failed.</returns>
-        /// <exception cref="CodeGeneratorException"></exception>
-        public override Node Parse(NodeList prototypes, Node parent, LineInfo line, ref int offset)
-        {
-            if (offset > line.Data.Length)
-				throw new CodeGeneratorException(line.LineNumber, line.Data, "Too little data");
-
-            int pos = line.Data.Length;
-            ++offset;
-            string code = line.Data.Substring(offset, pos - offset);
-            offset = pos;
-
-            SilentCodeNode node = (SilentCodeNode) prototypes.CreateNode("-", parent);
-            node._code = code;
-            if (parent != null)
-                node.LineInfo = line;
-            return node;
-        }
-
-        /// <summary>
-        /// Convert the node to c# code
-        /// </summary>
-        /// <param name="inString">True if we are inside the internal stringbuilder</param>
-        /// <param name="smallEnough">true if all subnodes fit on one line</param>
-        /// <param name="smallEnoughIsDefaultValue">smallEnough is a default value, recalc it</param>
-        /// <returns>c# code</returns>
-        protected override string ToCode(ref bool inString, bool smallEnough, bool smallEnoughIsDefaultValue)
-        {
-
-            //if (LineInfo == null)
-            if ((Parent != null && Parent.Children.Last != null && Parent.Children.Last.Value != this) && LineInfo == null)
-            {
-                if (inString)
-                    return string.Format("\"); {0} sb.Append(@\"", _code);
-                else
-                    return _code;
-            }
-
-            StringBuilder sb = new StringBuilder();
-            string intend = LineInfo == null ? string.Empty : string.Empty.PadLeft(LineInfo.Intendation, '\t');
-            if (inString)
-            {
-                sb.Append("\");");
-                inString = false;
-            }
-
-            sb.Append(intend);
-            sb.Append(_code);
-
-            if (AllChildrenCount > 0)
-            {
-                sb.Append("{");
-                if (Modifiers.Count != 0)
-					throw new CodeGeneratorException(LineInfo.LineNumber, LineInfo.Data, "Code tags should not have any modifiers.");
-
-                foreach (Node node in Children)
-                    sb.Append(node.ToCode(ref inString));
-
-                if (inString)
-                {
-                    sb.Append("\");");
-                    inString = false;
-                }
-
-                sb.Append("}" + intend);
-            }
-
-            return sb.ToString();
-        }
-
-        /// <summary>
-        /// Convert node to HTML (with ASP-tags)
-        /// </summary>
-        /// <returns>HTML string</returns>
-        public override string ToHtml()
-        {
-            if (LineInfo == null)
-                return string.Format("<% {0} %>", _code);
-
-            StringBuilder sb = new StringBuilder();
-            string intend = LineInfo == null ? string.Empty : string.Empty.PadLeft(LineInfo.Intendation, '\t');
-            sb.Append(intend);
-            sb.Append("<%");
-            sb.Append(_code);
-
-            if (Children.Count != 0)
-                sb.AppendLine();
-
-            if (Modifiers.Count != 0)
-				throw new CodeGeneratorException(LineInfo.LineNumber, LineInfo.Data, "Code tags should not have any modifiers.");
-
-            foreach (Node node in Children)
-                sb.Append(node.ToHtml());
-
-            sb.Append(intend);
-            sb.AppendLine("%>");
-
-            return sb.ToString();
-        }
-    }
-}
\ No newline at end of file
diff --git a/HttpServer/trunk/HttpServer/Rendering/Haml/Nodes/TagNode.cs b/HttpServer/trunk/HttpServer/Rendering/Haml/Nodes/TagNode.cs
deleted file mode 100644
index 878e1c4..0000000
--- a/HttpServer/trunk/HttpServer/Rendering/Haml/Nodes/TagNode.cs
+++ /dev/null
@@ -1,229 +0,0 @@
-using System.Text;
-using HttpServer.Rendering;
-using HttpServer.Rendering.Haml;
-using HttpServer.Rendering.Haml.Nodes;
-
-namespace HttpServer.Rendering.Haml.Nodes
-{
-    /// <summary>
-    /// Represents a HTML tag.
-    /// </summary>
-    public class TagNode : Node
-    {
-        private string _name;
-
-        /// <summary>
-        /// Create a new HTML tag node.
-        /// </summary>
-        /// <param name="parent">parent node</param>
-        public TagNode(Node parent) : base(parent)
-        {
-        }
-
-        /// <summary>
-        /// This is a plain text node
-        /// </summary>
-        public override bool IsTextNode
-        {
-            get { return false; }
-        }
-
-        /// <summary>
-        /// tag name
-        /// </summary>
-        public string Name
-        {
-            get { return _name; }
-            set {
-                _name = value;
-            }
-        }
-
-        /// <summary>
-        /// determines if this node can handle the line (by checking the first word);
-        /// </summary>
-        /// <param name="word">Controller char (word)</param>
-        /// <returns>true if text belongs to this node type</returns>
-        /// <param name="firstNode">first node on line.</param>
-        public override bool CanHandle(string word, bool firstNode)
-        {
-            if (word.Length >= 1 && word[0] == '%')
-                return true;
-
-            return false;
-        }
-
-        /// <summary>
-        /// Parse node contents add return a fresh node.
-        /// </summary>
-        /// <param name="parent">Node that this is a subnode to. Can be null</param>
-        /// <param name="prototypes">A list with node types</param>
-        /// <param name="line">Line to parse</param>
-        /// <param name="offset">Where to start the parsing. Will be set to where the next node should start parsing</param>
-        /// <returns>A node corresponding to the bla bla; null if parsing failed.</returns>
-        /// <exception cref="CodeGeneratorException"></exception>
-        public override Node Parse(NodeList prototypes, Node parent, LineInfo line, ref int offset)
-        {
-            if (offset > line.Data.Length - 1)
-				throw new CodeGeneratorException(line.LineNumber, line.Data, "Tried to parse after end of line");
-
-            if (line.Data[offset] != '%')
-				throw new CodeGeneratorException(line.LineNumber, line.Data, "Not a tag node");
-
-            int pos = -1;
-            for (int i = offset + 1; i < line.Data.Length; ++i)
-            {
-                if (!char.IsLetterOrDigit(line.Data[i]))
-                {
-                    pos = i;
-                    break;
-                }
-            }
-            if (pos == -1)
-                pos = line.Data.Length;
-
-            TagNode node = (TagNode) prototypes.CreateNode("%", parent);
-            node.Name = line.Data.Substring(offset + 1, pos - offset - 1);
-			if (node._name == "br" || node._name == "input" || node._name == "style" || node._name == "img")
-            {
-                line.SelfClosed = true;
-            	node.LineInfo = line;
-                node.LineInfo.SelfClosed = true;
-            }
-
-            offset = pos;
-            return node;
-        }
-
-        /// <summary>
-        /// Convert the node to c# code
-        /// </summary>
-        /// <param name="inString">True if we are inside the internal stringbuilder</param>
-        /// <param name="smallEnough">true if all subnodes fit on one line</param>
-        /// <param name="smallEnoughIsDefaultValue">smallEnough is a default value, recalc it</param>
-        /// <returns>c# code</returns>
-        protected override string ToCode(ref bool inString, bool smallEnough, bool smallEnoughIsDefaultValue)
-        {
-            StringBuilder sb = new StringBuilder();
-            string intend = LineInfo == null ? string.Empty : string.Empty.PadLeft(LineInfo.Intendation, '\t');
-
-            bool tempStr = inString;
-            bool childSmallEnough = Children.Count == 0 ||
-                (Children.Count == 1 && Children.First.Value.ToCode(ref tempStr).Length < 60 && AllChildrenCount <= 2);
-            /*smallEnough = AllChildrenCount < 1 ||
-                          (Children.Count <= 2 &&
-                           Children.First.Value.ToCode(ref tempStr).Length < 40);
-            */
-            //smallEnough = false; // small enough needs a lot of love.
-            if (!inString)
-            {
-                sb.Append("sb.Append(@\"");
-                inString = true;
-            }
-
-            if (!smallEnough || LineInfo.Parent.Data == null)
-                sb.Append(intend);
-            sb.Append("<");
-            sb.Append(_name);
-
-            if (Modifiers.Count > 0)
-                sb.Append(' ');
-
-            // = is placed at the end of a tag definition, after class, id, and attribute declarations.
-            // ItÂ’s just a shortcut for inserting Ruby code into an element. It works the same as = without a tag:
-            // it inserts the result of the Ruby code into the template.
-
-            foreach (Node node in Modifiers)
-                sb.Append(node.ToCode(ref inString, smallEnough));
-
-            if (LineInfo.SelfClosed)
-            {
-                sb.Append("/>");
-				if (!childSmallEnough)
-                    sb.AppendLine();
-                return sb.ToString();
-            }
-
-            if (childSmallEnough)
-                sb.Append(">");
-            else
-                sb.AppendLine(">");
-
-            foreach (Node node in Children)
-                sb.Append(node.ToCode(ref inString, childSmallEnough));
-
-            if (!inString)
-            {
-                sb.Append("sb.Append(@\"");
-                inString = true;
-            }
-
-            if (!childSmallEnough)
-            {
-                // seems to be done by children
-                //sb.AppendLine();
-                // Quick fix for textareas (that'll otherwise include the indentation in the textarea content) until next haml parser is done
-                if(_name != "textarea")
-                    sb.Append(intend);
-            }
-
-            sb.Append("</");
-            sb.Append(_name);
-            sb.Append(">");
-            if (!smallEnough || LineInfo.Parent.Data == null)
-                sb.AppendLine();
-
-            return sb.ToString();
-        }
-
-        /// <summary>
-        /// Convert node to HTML (with ASP-tags)
-        /// </summary>
-        /// <returns>HTML string</returns>
-        public override string ToHtml()
-        {
-            StringBuilder sb = new StringBuilder();
-            string intend = LineInfo == null ? string.Empty : string.Empty.PadLeft(LineInfo.Intendation, '\t');
-            sb.Append(intend);
-            sb.Append("<");
-            sb.Append(_name);
-
-            if (Modifiers.Count != 0)
-                sb.Append(' ');
-
-            TextNode textNode = null;
-            foreach (Node node in Modifiers)
-            {
-                if (node.IsTextNode)
-                    textNode = node as TextNode;
-                else
-                    sb.Append(node.ToHtml());
-            }
-
-            if (LineInfo.SelfClosed)
-            {
-                sb.Append("/>");
-                return sb.ToString();
-            }
-            else
-                sb.Append(">");
-
-            if (textNode != null)
-                sb.Append(textNode.ToHtml());
-
-            if (Children.Count != 0)
-                sb.AppendLine();
-
-            foreach (Node node in Children)
-                sb.Append(node.ToHtml());
-
-
-            sb.Append(intend);
-            sb.Append("</");
-            sb.Append(_name);
-            sb.AppendLine(">");
-
-            return sb.ToString();
-        }
-    }
-}
\ No newline at end of file
diff --git a/HttpServer/trunk/HttpServer/Rendering/Haml/Nodes/TextNode.cs b/HttpServer/trunk/HttpServer/Rendering/Haml/Nodes/TextNode.cs
deleted file mode 100644
index 6c5c3bf..0000000
--- a/HttpServer/trunk/HttpServer/Rendering/Haml/Nodes/TextNode.cs
+++ /dev/null
@@ -1,136 +0,0 @@
-using System;
-using System.Text;
-using HttpServer.Rendering;
-using HttpServer.Rendering.Haml;
-
-namespace HttpServer.Rendering.Haml.Nodes
-{
-    /// <summary>
-    /// A text only node.
-    /// </summary>
-    public class TextNode : Node
-    {
-        private string _text;
-
-        /// <summary>
-        ///
-        /// </summary>
-        /// <param name="parent">parent node</param>
-        /// <param name="text">plain text</param>
-        public TextNode(Node parent, string text) : base(parent)
-        {
-            Text = text;
-        }
-
-        /// <summary>
-        /// The text.
-        /// </summary>
-        public string Text
-        {
-            get { return _text; }
-            set { _text = value; }
-        }
-
-        /// <summary>
-        /// Is this a text node (containing plain text)?
-        /// </summary>
-        public override bool IsTextNode
-        {
-            get { return true; }
-        }
-
-        /// <summary>
-        /// Parse node contents add return a fresh node.
-        /// </summary>
-        /// <param name="prototypes">List containing all node types</param>
-        /// <param name="parent">Node that this is a subnode to. Can be null</param>
-        /// <param name="line">Line to parse</param>
-        /// <param name="offset">Where to start the parsing. Should be set to where the next node should start parsing.</param>
-        /// <returns>A node corresponding to the bla bla; null if parsing failed.</returns>
-        /// <exception cref="CodeGeneratorException"></exception>
-        public override Node Parse(NodeList prototypes, Node parent, LineInfo line, ref int offset)
-        {
-            // text on tag rows are identified by a single space.
-            if (parent != null && line.Data[offset] == ' ')
-                ++offset;
-
-            TextNode node = new TextNode(parent, line.Data.Substring(offset));
-            if (parent == null)
-                node.LineInfo = line;
-            offset = line.Data.Length;
-            return node;
-        }
-
-        /// <summary>
-        /// determines if this node can handle the line (by checking the first word);
-        /// </summary>
-        /// <param name="word">Controller char (word)</param>
-        /// <returns>true if text belongs to this node type</returns>
-        /// <param name="firstNode">true if this is the first node on the line.</param>
-        public override bool CanHandle(string word, bool firstNode)
-        {
-            return word.Length > 0 && (char.IsWhiteSpace(word[0]));
-        }
-
-        /// <summary>
-        /// Generate HTML for this node.
-        /// </summary>
-        /// <returns></returns>
-        public override string ToHtml()
-        {
-            // lineinfo = first node on line
-            if (LineInfo != null)
-                return string.Empty.PadLeft(GetIntendation(), '\t') + _text + Environment.NewLine;
-            else
-                return _text;
-        }
-
-        /// <summary>
-        /// Convert the node to c# code
-        /// </summary>
-        /// <param name="inString">True if we are inside the internal stringbuilder</param>
-        /// <param name="smallEnough">true if all subnodes fit on one line</param>
-        /// <param name="smallEnoughIsDefaultValue">todo: add description</param>
-        /// <returns>c# code</returns>
-        protected override string ToCode(ref bool inString, bool smallEnough, bool smallEnoughIsDefaultValue)
-        {
-            int intendCount = GetIntendation();
-            string intend = string.Empty.PadLeft(intendCount, '\t');
-            string text = _text.Replace("\"", "\"\"");
-
-            StringBuilder sb = new StringBuilder();
-            if (!inString)
-            {
-                sb.Append("sb.Append(@\"");
-                inString = true;
-            }
-
-            if (Children.Count > 0)
-            {
-                if (smallEnough)
-                    sb.Append(text);
-                else
-                {
-                    sb.Append(intend);
-                    sb.AppendLine(text);
-                }
-
-                foreach (Node node in Children)
-                    sb.Append(node.ToCode(ref inString, smallEnough));
-
-            }
-            else
-            {
-                // lineinfo = first node on line
-                if (LineInfo != null && !smallEnough)
-                    sb.AppendLine(intend + text);
-                else
-                    sb.Append(text);
-
-            }
-
-            return sb.ToString();
-        }
-
-    }
-}
diff --git a/HttpServer/trunk/HttpServer/Rendering/Haml/Rules/AttributesRule.cs b/HttpServer/trunk/HttpServer/Rendering/Haml/Rules/AttributesRule.cs
deleted file mode 100644
index 6a4def0..0000000
--- a/HttpServer/trunk/HttpServer/Rendering/Haml/Rules/AttributesRule.cs
+++ /dev/null
@@ -1,68 +0,0 @@
-using System;
-using HttpServer.Rendering;
-
-namespace HttpServer.Rendering.Haml.Rules
-{
-    /// <summary>
-    /// Contains an (html) attribute list.
-    /// </summary>
-    public class AttributesRule : Rule
-    {
-        /// <summary>
-        /// Determines if this node spans over multiple lines.
-        /// </summary>
-        /// <param name="line">contains line information (and text)</param>
-        /// <param name="isContinued">true if the previous line was continued.</param>
-        /// <returns>true if this line continues onto the next.</returns>
-        public override bool IsMultiLine(LineInfo line, bool isContinued)
-        {
-            // hack to dont include code
-            // a more proper way would have bene to scan after each tag
-            if (!isContinued)
-            {
-                char ch = line.Data[0];
-                if (ch != '#' && ch != '%' && ch != '.')
-                    return false;
-            }
-
-            bool inQuote = false;
-            bool inAttribute = false;
-            if (isContinued && line.Data.IndexOf('{') == -1)
-                inAttribute = true;
-            foreach (char ch in line.Data)
-            {
-                if (ch == '"')
-                    inQuote = !inQuote;
-                else if (ch == '{' && !inQuote)
-                {
-                    if (inAttribute)
-						throw new CodeGeneratorException(line.LineNumber, line.Data,
-                            "Found another start of attributes, but no close tag. Have you forgot one '}'?");
-                    inAttribute = true;
-                }
-                else if (ch == '}' && !inQuote)
-                    inAttribute = false;
-            }
-
-            if (inQuote)
-				throw new CodeGeneratorException(line.LineNumber, line.Data, "Attribute quotes can not span over multiple lines.");
-
-            if (inAttribute)
-            {
-                //todo: Attach a log writer.
-                //Console.WriteLine("Attribute is not closed, setting unfinished rule");
-                line.UnfinishedRule = this;
-
-            	line.Data.TrimEnd();
-				if (line.Data.EndsWith("|"))
-					line.TrimRight(1);
-
-				return true;
-            }
-
-            return inAttribute;
-        }
-
-
-    }
-}
diff --git a/HttpServer/trunk/HttpServer/Rendering/Haml/Rules/NewLineRule.cs b/HttpServer/trunk/HttpServer/Rendering/Haml/Rules/NewLineRule.cs
deleted file mode 100644
index 00375de..0000000
--- a/HttpServer/trunk/HttpServer/Rendering/Haml/Rules/NewLineRule.cs
+++ /dev/null
@@ -1,29 +0,0 @@
-namespace HttpServer.Rendering.Haml.Rules
-{
-    /// <summary>
-    /// IRule that says that something :)
-    /// </summary>
-    public class NewLineRule : Rule
-    {
-        /// <summary>
-        /// Determines if this node spans over multiple lines.
-        /// </summary>
-        /// <param name="line">contains line information (and text)</param>
-        /// <param name="isContinued">true if the previous line was continued.</param>
-        /// <returns>true if this line continues onto the next.</returns>
-        public override bool IsMultiLine(LineInfo line, bool isContinued)
-        {
-            string trimmed = line.Data.TrimEnd();
-            if (trimmed.Length == 0)
-                return false;
-
-            if (trimmed.EndsWith("|"))
-            {
-                line.TrimRight(1);
-                return true;
-            }
-
-            return false;
-        }
-    }
-}
diff --git a/HttpServer/trunk/HttpServer/Rendering/Haml/Rules/Rule.cs b/HttpServer/trunk/HttpServer/Rendering/Haml/Rules/Rule.cs
deleted file mode 100644
index 4af5b00..0000000
--- a/HttpServer/trunk/HttpServer/Rendering/Haml/Rules/Rule.cs
+++ /dev/null
@@ -1,16 +0,0 @@
-namespace HttpServer.Rendering.Haml.Rules
-{
-    /// <summary>
-    /// Rules are used during preparse
-    /// </summary>
-    public abstract class Rule
-    {
-        /// <summary>
-        /// Determines if this node spans over multiple lines.
-        /// </summary>
-        /// <param name="line">contains line information (and text)</param>
-        /// <param name="isContinued">true if rule have previously inited a multiline.</param>
-        /// <returns>true if this line continues onto the next.</returns>///
-        public abstract bool IsMultiLine(LineInfo line, bool isContinued);
-    }
-}
\ No newline at end of file
diff --git a/HttpServer/trunk/HttpServer/Rendering/Haml/resourcetest2.haml b/HttpServer/trunk/HttpServer/Rendering/Haml/resourcetest2.haml
deleted file mode 100644
index ee2fb42..0000000
--- a/HttpServer/trunk/HttpServer/Rendering/Haml/resourcetest2.haml
+++ /dev/null
@@ -1,5 +0,0 @@
-%br
-%h1
-	This is a test resource file
-
-%a{href="http://www.google.com", onclick="alert('hä hä jä baré sköjje!');"}
\ No newline at end of file
diff --git a/HttpServer/trunk/HttpServer/Rendering/ITemplateGenerator.cs b/HttpServer/trunk/HttpServer/Rendering/ITemplateGenerator.cs
deleted file mode 100644
index 154cae5..0000000
--- a/HttpServer/trunk/HttpServer/Rendering/ITemplateGenerator.cs
+++ /dev/null
@@ -1,41 +0,0 @@
-using System;
-using System.IO;
-
-namespace HttpServer.Rendering
-{
-    /// <summary>
-    /// A code generator is used to convert template code to something that we can
-    /// work with, as HTML or c# code.
-    /// </summary>
-    /// <seealso cref="TemplateManager"/>
-    public interface ITemplateGenerator
-    {
-        /// <summary>
-        /// Generate C# code from the template.
-        /// </summary>
-        /// <param name="writer">A <see cref="TextWriter"/> that the generated code will be written to.</param>
-        /// <exception cref="InvalidOperationException">If the template have not been parsed first.</exception>
-        /// <exception cref="CodeGeneratorException">If template is incorrect</exception>
-        void GenerateCode(TextWriter writer);
-
-        /// <summary>
-        /// Parse a file and convert into to our own template object code.
-        /// </summary>
-        /// <param name="fullPath">Path and filename to a template</param>
-        /// <exception cref="CodeGeneratorException">If something is incorrect in the template.</exception>
-        /// <exception cref="FileNotFoundException"></exception>
-        /// <exception cref="DirectoryNotFoundException"></exception>
-        /// <exception cref="UnauthorizedAccessException"></exception>
-        /// <exception cref="PathTooLongException"></exception>
-        /// <exception cref="NotSupportedException"></exception>
-        [Obsolete("Use the TextReader overload instead.")]
-        void Parse(string fullPath);
-
-        /// <summary>
-        /// Parse a file and convert into to our own template object code.
-        /// </summary>
-        /// <param name="reader">A <see cref="TextReader"/> containing our template</param>
-        /// <exception cref="CodeGeneratorException">If something is incorrect in the template.</exception>
-        void Parse(TextReader reader);
-    }
-}
\ No newline at end of file
diff --git a/HttpServer/trunk/HttpServer/Rendering/ITemplateInfo.cs b/HttpServer/trunk/HttpServer/Rendering/ITemplateInfo.cs
deleted file mode 100644
index ccd72a7..0000000
--- a/HttpServer/trunk/HttpServer/Rendering/ITemplateInfo.cs
+++ /dev/null
@@ -1,29 +0,0 @@
-using System;
-
-namespace HttpServer.Rendering
-{
-    /// <summary>
-    /// Keeps information about templates, so we know when to regenerate it.
-    /// </summary>
-    public interface ITemplateInfo
-    {
-        /// <summary>
-        /// When the template was compiled.
-        /// </summary>
-        /// <remarks>Use this date to determine if the template is old and needs to be recompiled.</remarks>
-        DateTime CompiledWhen
-        { get; }
-
-        /// <summary>
-        /// Template file name.
-        /// </summary>
-        string Filename
-        { get; }
-
-        /// <summary>
-        /// The actual template.
-        /// </summary>
-        ITinyTemplate Template
-        { get; }
-    }
-}
diff --git a/HttpServer/trunk/HttpServer/Rendering/ITemplateLoader.cs b/HttpServer/trunk/HttpServer/Rendering/ITemplateLoader.cs
deleted file mode 100644
index 37546c4..0000000
--- a/HttpServer/trunk/HttpServer/Rendering/ITemplateLoader.cs
+++ /dev/null
@@ -1,39 +0,0 @@
-using System.IO;
-
-namespace HttpServer.Rendering
-{
-    /// <summary>
-    /// Interface used to load templates from different sources.
-    /// </summary>
-    public interface ITemplateLoader
-    {
-        /// <summary>
-        /// Load a template into a <see cref="TextReader"/> and return it.
-        /// </summary>
-        /// <param name="path">Relative path (and filename) to template.</param>
-        /// <returns>a <see cref="TextReader"/> if file was found; otherwise null.</returns>
-        TextReader LoadTemplate(string path);
-
-        /// <summary>
-        /// Fetch all files from the resource that matches the specified arguments.
-        /// </summary>
-        /// <param name="path">Where the file should reside.</param>
-        /// <param name="filename">Files to check</param>
-        /// <returns>a list of files if found; or an empty array if no files are found.</returns>
-        string[] GetFiles(string path, string filename);
-
-        /// <summary>
-        /// Check's whether a template should be reloaded or not.
-        /// </summary>
-        /// <param name="info">template information</param>
-        /// <returns>true if template is OK; false if it do not exist or are old.</returns>
-        bool CheckTemplate(ITemplateInfo info);
-
-		/// <summary>
-		/// Returns whether or not the loader has an instance of the file requested
-		/// </summary>
-		/// <param name="filename">The name of the template/file</param>
-		/// <returns>True if the loader can provide the file</returns>
-    	bool HasTemplate(string filename);
-    }
-}
diff --git a/HttpServer/trunk/HttpServer/Rendering/ITinyTemplate.cs b/HttpServer/trunk/HttpServer/Rendering/ITinyTemplate.cs
deleted file mode 100644
index d305f94..0000000
--- a/HttpServer/trunk/HttpServer/Rendering/ITinyTemplate.cs
+++ /dev/null
@@ -1,17 +0,0 @@
-namespace HttpServer.Rendering
-{
-    /// <summary>
-    /// Interface for dynamically generated templates.
-    /// </summary>
-    /// <seealso cref="TemplateManager"/>
-    public interface ITinyTemplate
-    {
-        /// <summary>
-        /// Run the template to generate HTML code.
-        /// </summary>
-        /// <param name="args">arguments passed to the template</param>
-        /// <param name="hiddenTemplateManager">template manager (a manager is used to generate templates)</param>
-        /// <returns>HTML code.</returns>
-        string Invoke(TemplateArguments args, TemplateManager hiddenTemplateManager);
-    }
-}
diff --git a/HttpServer/trunk/HttpServer/Rendering/ResourceInfo.cs b/HttpServer/trunk/HttpServer/Rendering/ResourceInfo.cs
deleted file mode 100644
index 277f8f3..0000000
--- a/HttpServer/trunk/HttpServer/Rendering/ResourceInfo.cs
+++ /dev/null
@@ -1,65 +0,0 @@
-using System.IO;
-using System.Reflection;
-
-namespace HttpServer.Rendering
-{
-	/// <summary>
-	/// Container to bind resource names to assemblies
-	/// </summary>
-	internal class ResourceInfo
-	{
-		private readonly string _resourceExtension;
-		private readonly Assembly _assembly;
-		private readonly string _resourceName;
-
-		/// <summary>
-		/// Instantiates an instance of <see cref="ResourceInfo"/>
-		/// </summary>
-		/// <param name="fullname">The full name/path of the resource</param>
-		/// <param name="assembly">The assembly the resource exists in</param>
-		public ResourceInfo(string fullname, Assembly assembly)
-		{
-			_resourceName = fullname;
-			_assembly = assembly;
-
-			int dotIndex = fullname.LastIndexOf('.');
-			if (dotIndex != -1)
-				_resourceExtension = _resourceName.Substring(dotIndex + 1);
-			else
-				_resourceExtension = string.Empty;
-		}
-
-		/// <summary>
-		/// Retrieves the assembly the resource resides in
-		/// </summary>
-		public Assembly Assembly
-		{
-			get { return _assembly; }
-		}
-
-		/// <summary>
-		/// Retrieves the full name/path of the assembly
-		/// </summary>
-		public string Name
-		{
-			get { return _resourceName; }
-		}
-
-		/// <summary>
-		/// Retrieves the extension of the resource
-		/// </summary>
-		public string Extension
-		{
-			get { return _resourceExtension; }
-		}
-
-		/// <summary>
-		/// Retrieves a stream to the resouce
-		/// </summary>
-		/// <returns>Null if the resource couldn't be located somehow</returns>
-		public Stream GetStream()
-		{
-			return _assembly.GetManifestResourceStream(Name);
-		}
-	}
-}
diff --git a/HttpServer/trunk/HttpServer/Rendering/ResourceManager.cs b/HttpServer/trunk/HttpServer/Rendering/ResourceManager.cs
deleted file mode 100644
index 26b6895..0000000
--- a/HttpServer/trunk/HttpServer/Rendering/ResourceManager.cs
+++ /dev/null
@@ -1,324 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.IO;
-using System.Reflection;
-using Fadd;
-using Fadd.Logging;
-using Xunit;
-
-namespace HttpServer.Rendering
-{
-	/// <summary>
-	/// Class to handle loading of resource files
-	/// </summary>
-	public class ResourceManager
-	{
-		/// <summary><![CDATA[
-		/// Maps uri's to resources, Dictionary<uri, resource>
-		/// ]]></summary>
-		private readonly Dictionary<string, List<ResourceInfo>> _loadedResources = new Dictionary<string, List<ResourceInfo>>();
-
-		private readonly ILogWriter _logWriter;
-
-		/// <summary>
-		/// Initializes the <see cref="ResourceManager"/>
-		/// </summary>
-		/// <param name="logWriter">The log writer to use for outputting loaded resource</param>
-		public ResourceManager(ILogWriter logWriter)
-		{
-			_logWriter = logWriter;
-		}
-
-		/// <summary>
-		/// Parses a filename and sets it to the extensionless name in lowercase. The extension is cut out without the dot.
-		/// </summary>
-		/// <param name="filename"></param>
-		/// <param name="extension"></param>
-		/// <usage>
-		/// string ext;
-		/// string filename = "/uSeR/teSt.haMl";
-		/// ParseName(ref filename, out ext);
-		/// Console.WriteLine("File: " + filename);
-		/// Console.WriteLine("Ext: " + ext);
-		/// -> user/test
-		/// -> haml
-		/// </usage>
-		private static void ParseName(ref string filename, out string extension)
-		{
-			Check.NotEmpty(filename, "filename");
-
-			filename = filename.ToLower();
-			int indexOfExtension = filename.LastIndexOf('.');
-			if (indexOfExtension == -1)
-			{
-				extension = string.Empty;
-				filename = filename.TrimStart('/');
-			}
-			else
-			{
-				extension = filename.Substring(indexOfExtension + 1);
-				filename = filename.Substring(0, indexOfExtension).TrimStart('/');
-			}
-		}
-
-		#region Test for ParseName
-
-		[Fact]
-		private static void TestParseName()
-		{
-			string extension;
-			string filename = "/uSEr/test/hej.*";
-			ParseName(ref filename, out extension);
-			Assert.Equal("*", extension);
-			Assert.Equal("user/test/hej", filename);
-
-			filename = "test/teSt.xMl";
-			ParseName(ref filename, out extension);
-			Assert.Equal("xml", extension);
-			Assert.Equal("test/test", filename);
-
-			filename = "test/TeSt";
-			ParseName(ref filename, out extension);
-			Assert.Equal(string.Empty, extension);
-			Assert.Equal("test/test", filename);
-		}
-
-		#endregion
-
-		/// <summary>
-		/// Add a resource to a specified uri without extension, ie user/test
-		/// </summary>
-		/// <param name="uri">The uri to add the resource to</param>
-		/// <param name="info">The <see cref="ResourceInfo"/> instance describing the resource</param>
-		private void AddResource(string uri, ResourceInfo info)
-		{
-			List<ResourceInfo> resources;
-			if (!_loadedResources.TryGetValue(uri, out resources))
-			{
-				resources = new List<ResourceInfo>();
-				_loadedResources.Add(uri, resources);
-			}
-
-			if (resources.Find(delegate(ResourceInfo resource) { return resource.Extension == info.Extension; }) != null)
-				throw new InvalidOperationException(string.Format("A resource with the name '{0}.{1}' has already been added.", uri, info.Extension));
-
-			resources.Add(info);
-		}
-
-		/// <summary>
-		/// Loads resources from a namespace in the given assembly to an uri
-		/// </summary>
-		/// <param name="toUri">The uri to map the resources to</param>
-		/// <param name="fromAssembly">The assembly in which the resources reside</param>
-		/// <param name="fromNamespace">The namespace from which to load the resources</param>
-		/// <usage>
-		/// resourceLoader.LoadResources("/user/", typeof(User).Assembly, "MyLib.Models.User.Views");
-		///
-		/// will make ie the resource MyLib.Models.User.Views.list.Haml accessible via /user/list.haml or /user/list/
-		/// </usage>
-		public void LoadResources(string toUri, Assembly fromAssembly, string fromNamespace)
-		{
-			toUri = toUri.ToLower().TrimEnd('/');
-			fromNamespace = fromNamespace.ToLower();
-			if (!fromNamespace.EndsWith("."))
-				fromNamespace += ".";
-
-			foreach (string resourceName in fromAssembly.GetManifestResourceNames())
-			{
-				if (resourceName.ToLower().StartsWith(fromNamespace))
-				{
-					ResourceInfo info = new ResourceInfo(resourceName, fromAssembly);
-					string uri = toUri + "/" + resourceName.Substring(fromNamespace.Length).ToLower().Replace('.', '/');
-					uri = uri.TrimStart('/');
-					if (!string.IsNullOrEmpty(info.Extension))
-						uri = uri.Substring(0, uri.Length - info.Extension.Length - 1);
-
-					AddResource(uri, info);
-					_logWriter.Write(this, LogPrio.Info, "Resource '" + info.Name + "' loaded to uri: " + uri);
-				}
-			}
-		}
-
-		#region Test for LoadResources
-
-		[Fact]
-		private static void TestLoadTemplates()
-		{
-			LogManager.SetProvider(new NullLogProvider());
-
-			ResourceManager resourceManager = new ResourceManager(new NullLogWriter());
-			resourceManager.LoadResources("/test/", resourceManager.GetType().Assembly, resourceManager.GetType().Namespace);
-			Assert.NotNull(resourceManager._loadedResources["test/resourcetest"]);
-			Assert.Equal("haml", resourceManager._loadedResources["test/resourcetest"][0].Extension);
-			Assert.Equal(resourceManager.GetType().Namespace + ".resourcetest.haml", resourceManager._loadedResources["test/resourcetest"][0].Name);
-
-			resourceManager._loadedResources.Clear();
-			resourceManager.LoadResources("/user", resourceManager.GetType().Assembly, resourceManager.GetType().Namespace);
-			Assert.Equal(resourceManager.GetType().Namespace + ".resourcetest.haml", resourceManager._loadedResources["user/resourcetest"][0].Name);
-
-			resourceManager._loadedResources.Clear();
-			resourceManager.LoadResources("/user/test/", resourceManager.GetType().Assembly, resourceManager.GetType().Namespace);
-			Assert.Equal(resourceManager.GetType().Namespace + ".resourcetest.haml", resourceManager._loadedResources["user/test/resourcetest"][0].Name);
-
-			resourceManager._loadedResources.Clear();
-			resourceManager.LoadResources("/", resourceManager.GetType().Assembly, resourceManager.GetType().Namespace);
-			Assert.Equal(resourceManager.GetType().Namespace + ".resourcetest.haml", resourceManager._loadedResources["resourcetest"][0].Name);
-		}
-
-		#endregion
-
-		/// <summary>
-		/// Retrieves a stream for the specified resource path if loaded otherwise null
-		/// </summary>
-		/// <param name="path">Path to the resource to retrieve a stream for</param>
-		/// <returns>A stream or null if the resource couldn't be found</returns>
-		public Stream GetResourceStream(string path)
-		{
-			path = path.Replace('\\', '/');
-			if(!ContainsResource(path))
-				return null;
-
-			string ext;
-			ParseName(ref path, out ext);
-
-			List<ResourceInfo> resources = _loadedResources[path];
-			ResourceInfo info = resources.Find(delegate(ResourceInfo resInfo) { return resInfo.Extension == ext; });
-
-			return info != null ? info.GetStream() : null;
-		}
-
-		#region Test for GetResourceStream
-
-		[Fact]
-		private static void TestGetResourceStream()
-		{
-			ResourceManager resources = new ResourceManager(new NullLogWriter());
-			resources.LoadResources("/", resources.GetType().Assembly, "HttpServer.Rendering");
-			Assert.NotNull(resources.GetResourceStream("resourcetest.haml"));
-			Assert.NotNull(resources.GetResourceStream("\\resourcetest.haml"));
-		}
-
-		#endregion
-
-		/// <summary>
-		/// Fetch all files from the resource that matches the specified arguments.
-		/// </summary>
-		/// <param name="path">The path to the resource to extract</param>
-		/// <returns>
-		/// a list of files if found; or an empty array if no files are found.
-		/// </returns>
-		public string[] GetFiles(string path)
-		{
-			Check.NotEmpty(path, "path");
-			path = path.Replace('\\', '/');
-
-			List<string> files = new List<string>();
-
-			string ext;
-			ParseName(ref path, out ext);
-
-			List<ResourceInfo> resources;
-			if (!_loadedResources.TryGetValue(path, out resources))
-				return new string[] { };
-
-			foreach (ResourceInfo resource in resources)
-				if (resource.Extension == ext || ext == "*")
-					files.Add(path + "." + resource.Extension);
-
-			return files.ToArray();
-		}
-
-		/// <summary>
-		/// Fetch all files from the resource that matches the specified arguments.
-		/// </summary>
-		/// <param name="path">Where the file should reside.</param>
-		/// <param name="filename">Files to check</param>
-		/// <returns>
-		/// a list of files if found; or an empty array if no files are found.
-		/// </returns>
-		public string[] GetFiles(string path, string filename)
-		{
-			Check.NotEmpty(path, "path");
-			Check.NotEmpty(filename, "filename");
-
-			path = path.EndsWith("/") ? path : path + "/";
-			return GetFiles(path + filename);
-		}
-
-		#region Test GetFiles
-
-		[Fact]
-		private static void TestGetFiles()
-		{
-			ResourceManager resourceManager = new ResourceManager(new NullLogWriter());
-			resourceManager.LoadResources("/test/", resourceManager.GetType().Assembly, resourceManager.GetType().Namespace);
-			string[] files = resourceManager.GetFiles("/test/", "resourcetest.xml");
-			Assert.Equal(1, files.Length);
-			Assert.Equal("test/resourcetest.xml", files[0]);
-
-			files = resourceManager.GetFiles("/test/", "resourcetest.*");
-			Assert.Equal(2, files.Length);
-
-			files = resourceManager.GetFiles("/test/haml/", "resourcetest2.haml");
-			Assert.Equal(1, files.Length);
-
-			files = resourceManager.GetFiles("/test/haml/resourcetest2.haml");
-			Assert.Equal(1, files.Length);
-
-			files = resourceManager.GetFiles("/test/resourcetest.*");
-			Assert.Equal(2, files.Length);
-		}
-
-		#endregion
-
-		/// <summary>
-		/// Returns whether or not the loader has an instance of the file requested
-		/// </summary>
-		/// <param name="filename">The name of the template/file</param>
-		/// <returns>True if the loader can provide the file</returns>
-		public bool ContainsResource(string filename)
-		{
-			filename = filename.Replace('\\', '/');
-
-			string ext;
-			ParseName(ref filename, out ext);
-
-			List<ResourceInfo> resources;
-			if (!_loadedResources.TryGetValue(filename, out resources))
-				return false;
-
-			foreach (ResourceInfo resource in resources)
-				if (resource.Extension == ext || ext == "*")
-					return true;
-
-			return false;
-		}
-
-		#region Test ContainsResource
-
-		[Fact]
-		private static void TestContainsResource()
-		{
-			ResourceManager resourceManager = new ResourceManager(new NullLogWriter());
-			resourceManager.LoadResources("/test/", resourceManager.GetType().Assembly, resourceManager.GetType().Namespace);
-			Assert.True(resourceManager.ContainsResource("/test/resourcetest.xml"));
-			Assert.True(resourceManager.ContainsResource("/test/resourcetest.haml"));
-			Assert.True(resourceManager.ContainsResource("/test/resourcetest.*"));
-			Assert.True(resourceManager.ContainsResource("/test/haml/resourcetest2.*"));
-			Assert.True(resourceManager.ContainsResource("/test/haml/resourcetest2.haml"));
-
-			Assert.False(resourceManager.ContainsResource("/test/resourcetest"));
-			Assert.False(resourceManager.ContainsResource("/test/rwerourcetest.xml"));
-			Assert.False(resourceManager.ContainsResource("/test/resourcetest.qaml"));
-			Assert.False(resourceManager.ContainsResource("/wrong/rwerourcetest.xml"));
-			Assert.False(resourceManager.ContainsResource("/test/haml/resourcetest2.xml"));
-
-			resourceManager._loadedResources.Clear();
-			resourceManager.LoadResources("/", resourceManager.GetType().Assembly, resourceManager.GetType().Namespace);
-			Assert.True(resourceManager.ContainsResource("/resourcetest.*"));
-			Assert.True(resourceManager.ContainsResource("resourcetest.haml"));
-		}
-
-		#endregion
-	}
-}
diff --git a/HttpServer/trunk/HttpServer/Rendering/ResourceTemplateLoader.cs b/HttpServer/trunk/HttpServer/Rendering/ResourceTemplateLoader.cs
deleted file mode 100644
index b5b42ae..0000000
--- a/HttpServer/trunk/HttpServer/Rendering/ResourceTemplateLoader.cs
+++ /dev/null
@@ -1,118 +0,0 @@
-using System.IO;
-using System.Reflection;
-using Xunit;
-
-namespace HttpServer.Rendering
-{
-    /// <summary>
-    /// Loads templates from embedded resources.
-    /// </summary>
-    public class ResourceTemplateLoader : ITemplateLoader
-    {
-    	private readonly ResourceManager _resourceManager;
-
-		/// <summary>
-		/// Initializes the <see cref="ResourceTemplateLoader"/>
-		/// </summary>
-		public ResourceTemplateLoader() : this(new NullLogWriter())
-		{}
-
-		/// <summary>
-		/// Initializes the <see cref="ResourceTemplateLoader"/>
-		/// </summary>
-		/// <param name="logWriter">Log writer to use when logging events and loaded templates</param>
-		public ResourceTemplateLoader(ILogWriter logWriter)
-		{
-			_resourceManager = new ResourceManager(logWriter);
-		}
-
-		/// <summary>
-		/// Loads templates from a namespace in the given assembly to an uri
-		/// </summary>
-		/// <param name="toUri">The uri to map the resources to</param>
-		/// <param name="fromAssembly">The assembly in which the resources reside</param>
-		/// <param name="fromNamespace">The namespace from which to load the resources</param>
-		/// <usage>
-		/// resourceLoader.LoadResources("/user/", typeof(User).Assembly, "MyLib.Models.User.Views");
-		///
-		/// will make ie the resource MyLib.Models.User.Views.list.Haml accessible via /user/list.haml or /user/list/
-		/// </usage>
-		public void LoadTemplates(string toUri, Assembly fromAssembly, string fromNamespace)
-		{
-			_resourceManager.LoadResources(toUri, fromAssembly, fromNamespace);
-		}
-
-		/// <summary>
-		/// Load a template into a <see cref="TextReader"/> and return it.
-		/// </summary>
-		/// <param name="path">Relative path (and filename) to template.</param>
-		/// <returns>
-		/// a <see cref="TextReader"/> if file was found; otherwise null.
-		/// </returns>
-		public TextReader LoadTemplate(string path)
-    	{
-			if(path.EndsWith("*"))
-			{
-				string[] files = _resourceManager.GetFiles(path);
-				if(files.Length == 0)
-					return null;
-
-				path = files[0];
-			}
-
-			Stream stream = _resourceManager.GetResourceStream(path);
-
-			if (stream != null)
-				return new StreamReader(stream);
-
-			return null;
-		}
-
-		#region Test LoadTemplate
-
-		[Fact]
-		private static void TestLoadTemplate()
-		{
-			ResourceTemplateLoader loader = new ResourceTemplateLoader();
-			loader.LoadTemplates("/test/", loader.GetType().Assembly, loader.GetType().Namespace);
-			TextReader reader = loader.LoadTemplate("test\\resourcetest.haml");
-			Assert.NotNull(reader);
-			reader.Dispose();
-		}
-
-    	#endregion
-
-		/// <summary>
-		/// Fetch all files from the resource that matches the specified arguments.
-		/// </summary>
-		/// <param name="path">Where the file should reside.</param>
-		/// <param name="filename">Files to check</param>
-		/// <returns>
-		/// a list of files if found; or an empty array if no files are found.
-		/// </returns>
-    	public string[] GetFiles(string path, string filename)
-    	{
-			return _resourceManager.GetFiles(path, filename);
-		}
-
-		/// <summary>
-		/// Always returns true since a resource won't be updated during execution
-		/// </summary>
-		/// <param name="info"></param>
-		/// <returns></returns>
-    	public bool CheckTemplate(ITemplateInfo info)
-    	{
-    		return true;
-    	}
-
-		/// <summary>
-		/// Returns whether or not the loader has an instance of the file requested
-		/// </summary>
-		/// <param name="filename">The name of the template/file</param>
-		/// <returns>True if the loader can provide the file</returns>
-    	public bool HasTemplate(string filename)
-    	{
-			return _resourceManager.ContainsResource(filename);
-		}
-	}
-}
diff --git a/HttpServer/trunk/HttpServer/Rendering/TemplateArguments.cs b/HttpServer/trunk/HttpServer/Rendering/TemplateArguments.cs
deleted file mode 100644
index a9350b7..0000000
--- a/HttpServer/trunk/HttpServer/Rendering/TemplateArguments.cs
+++ /dev/null
@@ -1,377 +0,0 @@
-using System;
-using System.Collections.Generic;
-
-namespace HttpServer.Rendering
-{
-    /// <summary>
-    /// Arguments being used in a template.
-    /// </summary>
-    /// <seealso cref="TemplateManager"/>
-    /// <seealso cref="ITinyTemplate"/>
-    public class TemplateArguments
-    {
-        /// <summary>
-        /// Holds the arguments connected to their names for quick access.
-        /// (since the ArgumentContainer also holds the name for the argument the mapping with strings is somewhat redundant
-        /// but since the data do 'belong' to the ArgumentContainer this solution was chosen to speed up access)
-        /// </summary>
-        private Dictionary<string, ArgumentContainer> _arguments;
-
-        /// <summary>
-        /// Initializes the class without any set arguments.
-        /// </summary>
-        public TemplateArguments()
-        {
-            _arguments = new Dictionary<string, ArgumentContainer>();
-        }
-
-        /// <summary>
-        /// Initializes the class with all the arguments of the parameter class.
-        /// </summary>
-        /// <param name="arguments">Cannot be null</param>
-        /// <exception cref="ArgumentNullException">If arguments is null</exception>
-        public TemplateArguments(TemplateArguments arguments)
-        {
-            if(arguments == null)
-                throw new ArgumentNullException("arguments");
-
-            _arguments = new Dictionary<string, ArgumentContainer>(arguments._arguments);
-        }
-
-        /// <summary>
-        /// Initializes the class with the objects in the parameterlist.
-        /// Note that each object that is null must be followed by a type.
-        /// </summary>
-        /// <param name="arguments">Should contain ordered pairs/truples of string, object and type where type is optional if the object isn´t null</param>
-        /// <example>new TemplateArguments("Dir", "\", "Users", null, typeof(User));</example>
-        /// <exception cref="ArgumentException">If optional type differs from type of object (if object != null) or argument name is duplicate</exception>
-        /// <exception cref="ArgumentException">If the order of objects is incorrect</exception>
-        /// <exception cref="ArgumentNullException">If any argument name or type is null</exception>
-        public TemplateArguments(params object[] arguments)
-        {
-            _arguments = new Dictionary<string, ArgumentContainer>();
-
-            int index = 0;
-            while(index < arguments.Length)
-            {
-                if (arguments[index] == null)
-                    throw new ArgumentNullException("arguments");
-                if (arguments[index].GetType() != typeof(string))
-                    throw new ArgumentException("Identifier of argument must be a string.");
-                if(arguments.Length - index < 2)
-                    throw new ArgumentException("Incorrect number of parameters passed, must be in two's and three's");
-
-                if (index + 2 < arguments.Length && arguments[index + 2] == typeof(Type))
-                    Add((string)arguments[index++], arguments[index++], (Type)arguments[index++]);
-                else
-                    Add((string)arguments[index++], arguments[index++]);
-            }
-        }
-
-        /// <summary>
-        /// A function that merges two argument holders updating and adding values
-        /// </summary>
-        /// <param name="arguments"></param>
-        /// <exception cref="ArgumentNullException">If arguments is null</exception>
-        public void Update(TemplateArguments arguments)
-        {
-            if(arguments == null)
-                throw new ArgumentNullException("arguments");
-
-            foreach (ArgumentContainer argument in arguments.GetArguments())
-            {
-                if(_arguments.ContainsKey(argument.Name))
-                    _arguments[argument.Name] = argument;
-                else
-                    _arguments.Add(argument.Name, argument);
-            }
-        }
-
-        /// <summary>
-        /// Clears added arguments
-        /// </summary>
-        ~TemplateArguments()
-        {
-            _arguments.Clear();
-            _arguments = null;
-        }
-
-        /// <summary>
-        /// Adds an argument.
-        /// (Will throw ArgumentException on duplicates since adding an argument twice points to incorrect code, for ways around
-        /// this <see cref="Update(string,object)" />
-        /// </summary>
-        /// <param name="argumentName">Cannot be null</param>
-        /// <param name="argumentObject">Cannot be null</param>
-        /// <exception cref="NullReferenceException">If argumentName or argumentObject is null</exception>
-        /// <exception cref="ArgumentException">If an argument named argumentName already exists</exception>
-        public void Add(string argumentName, object argumentObject)
-        {
-            if(argumentObject == null)
-                throw new ArgumentNullException("argumentObject", "Trying to add Null argument to key '" + argumentName + "'");
-
-            Add(argumentName, argumentObject, argumentObject.GetType());
-        }
-
-        /// <summary>
-        /// Adds an argument. Allows for argumentObject to be null
-        /// (Will throw ArgumentException <see cref="Add(string,object)" />
-        /// </summary>
-        /// <param name="argumentName">Cannot be null</param>
-        /// <param name="argumentObject"></param>
-        /// <param name="argumentType">Cannot be null</param>
-        /// <exception cref="NullReferenceException">If argumentName or argumentType is null</exception>
-        /// <exception cref="ArgumentException">If an argument named argumentName already exists or argumentObject != null and typeof(argumentObject) differs from argumentType</exception>
-        public void Add(string argumentName, object argumentObject, Type argumentType)
-        {
-            if (_arguments.ContainsKey(argumentName))
-                throw new ArgumentException("Argument named '" + argumentName + "' already exists");
-
-            _arguments.Add(argumentName, new ArgumentContainer(argumentName, argumentObject, argumentType));
-        }
-
-        /// <summary>
-        /// Updates an already added argument
-        /// </summary>
-        /// <param name="argumentName">Cannot be null</param>
-        /// <param name="argumentObject">Cannot be null</param>
-        /// <exception cref="ArgumentException">If no argument named argumentName exists</exception>
-        /// <exception cref="ArgumentNullException">If argumentName or argumentObject is null</exception>
-        public void Update(string argumentName, object argumentObject)
-        {
-            if(argumentObject == null)
-				throw new ArgumentNullException("argumentObject", "Trying to add Null argument to key '" + argumentName + "'");
-
-            Update(argumentName, argumentObject, argumentObject.GetType());
-        }
-
-        /// <summary>
-        /// Updates an already added argument, allows for argumentObject to be null
-        /// </summary>
-        /// <param name="argumentName">Cannot be null</param>
-        /// <param name="argumentObject"></param>
-        /// <param name="argumentType">Cannot be null</param>
-        /// <exception cref="ArgumentNullException">If argumentName or argumentType is null</exception>
-        /// <exception cref="ArgumentException">If an argument named argumentName doesn´t exists or argumentObject != null and typeof(argumentObject) differs from argumentType</exception>
-        public void Update(string argumentName, object argumentObject, Type argumentType)
-        {
-            if (string.IsNullOrEmpty(argumentName))
-                throw new ArgumentNullException("argumentName");
-
-            if (_arguments.ContainsKey(argumentName) == false)
-                throw new ArgumentException("No argument named '" + argumentName + "' exists.");
-
-            _arguments[argumentName].SetObject(argumentObject, argumentType);
-        }
-
-        /// <summary>
-        /// Clears all added arguments
-        /// </summary>
-        public void Clear()
-        {
-            _arguments.Clear();
-        }
-
-        /// <summary>
-        /// Retrieves the arguments
-        /// (Does so now by copying the values to a new array, could be optimized?)
-        /// </summary>
-        /// <returns>An array containing arguments with name, object and type</returns>
-        public ArgumentContainer[] GetArguments()
-        {
-            List<ArgumentContainer> arguments = new List<ArgumentContainer>();
-            foreach (KeyValuePair<string, ArgumentContainer> pair in _arguments)
-                arguments.Add(pair.Value);
-
-            return arguments.ToArray();
-        }
-
-        /// <summary>
-        /// Function to make it possible to index out known arguments
-        /// </summary>
-        /// <param name="name">The name of an added argument</param>
-        /// <returns>Null if no ArgumentContainer by name was found</returns>
-        public ArgumentContainer this[string name]
-        {
-            get { return _arguments[name]; }
-        }
-
-		/// <summary>
-		/// Returns a individual hashcode built upon the specified types the class is holding
-		/// </summary>
-		/// <remarks>The hashcode is made by joining the typenames of all held arguments and making a string hashcode from them</remarks>
-		/// <returns></returns>
-		public override int GetHashCode()
-		{
-			string hash = string.Empty;
-			foreach (KeyValuePair<string, ArgumentContainer> pair in _arguments)
-				hash += GetFullTypeName(pair.Value.Type);
-
-			return hash.GetHashCode();
-		}
-
-		/// <summary>
-		/// Retrieves a concated typename ie DictinaryInt32String
-		/// </summary>
-		/// <param name="type">The type to retrieve the name for</param>
-		private static string GetFullTypeName(Type type)
-		{
-			string name = type.Namespace + "." + type.Name.Replace("`" + type.GetGenericArguments().Length, string.Empty);
-			foreach (Type genericArgument in type.GetGenericArguments())
-				name += GetFullTypeName(genericArgument);
-
-			return name;
-		}
-
-        /// <summary>
-        /// Checks whether a specific argument is specified or not.
-        /// </summary>
-        /// <param name="name">Argument name</param>
-        /// <returns>true if argument is specified; otherwise false.</returns>
-        public bool Contains(string name)
-        {
-            return _arguments.ContainsKey(name);
-        }
-    }
-
-    #region ArgumentContainer, container class for the arguments
-    /// <summary>
-    /// A container class grouping mapping name, argument type and the argument object
-    /// </summary>
-    public class ArgumentContainer
-    {
-        #region Members _argumentName, _argumentType and _argumentObject
-        /// <summary>
-        /// Contains the name mapped to the argument
-        /// </summary>
-        private readonly string _argumentName = string.Empty;
-
-        /// <summary>
-        /// Contains the type of the argument, this must be valid if _argumentObject is null
-        /// </summary>
-        private Type _argumentType = null;
-
-        /// <summary>
-        /// Holds the actual object
-        /// </summary>
-        private object _argumentObject = null;
-        #endregion
-
-        #region Constructors ArgumentContainer(string, object) and ArgumentContainer(string, object, type)
-        /// <summary>
-        /// Constructor to initiate an ArgumentContainer, will set the ArgumentType to the value of the argumentObject's type
-        /// </summary>
-        /// <param name="argumentName">Cannot be null</param>
-        /// <param name="argumentObject">Cannot be null</param>
-        /// <exception cref="ArgumentNullException">If argumentName or argumentObject is null</exception>
-        public ArgumentContainer(string argumentName, object argumentObject)
-        {
-            if (string.IsNullOrEmpty(argumentName))
-                throw new ArgumentNullException("argumentName");
-
-            if(_argumentObject == null)
-				throw new ArgumentNullException("argumentObject", "Trying to add Null argument to key '" + argumentName + "'");
-
-            _argumentName = argumentName;
-            _argumentType = argumentObject.GetType();
-            _argumentObject = argumentObject;
-        }
-
-        /// <summary>
-        /// Alternative constructor allowing argumentObject parameter to be null
-        /// </summary>
-        /// <param name="argumentName">Cannot be null</param>
-        /// <param name="argumentObject"></param>
-        /// <param name="argumentType">Cannot be null</param>
-        /// <exception cref="NullReferenceException">If argumentName or argumentType is null</exception>
-        /// <exception cref="ArgumentException">If argumentObject != null and argumentType != typeof(argumentObject)</exception>
-        public ArgumentContainer(string argumentName, object argumentObject, Type argumentType)
-        {
-            if (string.IsNullOrEmpty(argumentName))
-                throw new ArgumentException("Parameter argumentName cannot be null or empty.");
-
-            if (argumentType == null)
-				throw new ArgumentNullException("argumentType", "Trying to add Null argument to key '" + argumentName + "'");
-
-            if (argumentObject != null)
-				if (!argumentType.IsAssignableFrom(argumentObject.GetType()))
-                    throw new ArgumentException("Argument with key '" + argumentName + "' must be assignable to argumentType '" + argumentType + "'", "argumentObject");
-
-            _argumentName = argumentName;
-            _argumentObject = argumentObject;
-            _argumentType = argumentType;
-        }
-        #endregion
-
-        /// <summary>
-        /// Attribute for retrieving the name. The name cannot be set however because an argument is defined by its name
-        /// changing the name would be changing the arguments meaning, thus an argument needing a name change should rather
-        /// be recreated
-        /// </summary>
-        public string Name
-        {
-            get { return _argumentName; }
-        }
-
-        /// <summary>
-        /// Returns the type of the argument object. The property cannot be set since the type depends on and must correspond to
-        /// the type of the object
-        /// </summary>
-        public Type Type
-        {
-            get { return _argumentType; }
-        }
-
-        /// <summary>
-        /// Returns or changes the argument object. If the object is to be changed to null the type must be passed aswell,
-        /// in that case <see cref="SetObject(object,System.Type)" />
-        /// </summary>
-        /// <exception cref="ArgumentNullException">If set value is null</exception>
-        public object Object
-        {
-            get { return _argumentObject; }
-            set
-            {
-                if (value == null)
-                    throw new ArgumentNullException("value");
-                _argumentObject = value;
-                _argumentType = _argumentObject.GetType();
-            }
-        }
-
-        /// <summary>
-        /// Sets the object and type of the argument, equal to ArgumentContainer.Object = ...
-        /// </summary>
-        /// <param name="argumentObject">Cannot be null</param>
-        /// <exception cref="ArgumentNullException">If argumentObject is null</exception>
-        public void SetObject(object argumentObject)
-        {
-            if (argumentObject == null)
-				throw new ArgumentNullException("argumentObject", "Trying to add Null argument to key '" + _argumentName + "'");
-
-            _argumentObject = argumentObject;
-            _argumentType = _argumentObject.GetType();
-        }
-
-        /// <summary>
-        /// Sets the argument object and type. Type of the object and argumentType must correspond.
-        /// </summary>
-        /// <param name="argumentObject"></param>
-        /// <param name="argumentType">Cannot be null</param>
-        /// <exception cref="ArgumentNullException">If argumentType is null</exception>
-        /// <exception cref="ArgumentException">If typeof(argumentObject) differs from argumentType and object != null</exception>
-        public void SetObject(object argumentObject, Type argumentType)
-        {
-            if (argumentType == null)
-                throw new NullReferenceException("Parameter argumentType cannot be null for argumentObject with key '" + _argumentName + "'.");
-
-            if (argumentObject != null)
-				if (!argumentType.IsAssignableFrom(argumentObject.GetType()))
-					throw new ArgumentException("Argument with key '" + _argumentName + "' must be assignable to argumentType '" + argumentType + "'", "argumentObject");
-
-            _argumentObject = argumentObject;
-            _argumentType = argumentType;
-        }
-    }
-    #endregion
-}
diff --git a/HttpServer/trunk/HttpServer/Rendering/TemplateCompiler.cs b/HttpServer/trunk/HttpServer/Rendering/TemplateCompiler.cs
deleted file mode 100644
index 318e492..0000000
--- a/HttpServer/trunk/HttpServer/Rendering/TemplateCompiler.cs
+++ /dev/null
@@ -1,91 +0,0 @@
-using System;
-using Fadd;
-
-namespace HttpServer.Rendering
-{
-    /// <summary>
-    /// The compiler is responsible of creating a render object which can be
-    /// cached and used over and over again.
-    /// </summary>
-    /// <seealso cref="TemplateManager"/>
-    /// <seealso cref="ITemplateGenerator"/>
-    public class TemplateCompiler
-    {
-        /// <summary>
-        /// Base c# code for a template object.
-        /// </summary>
-        public static string TemplateBase =
-            @"namespace Tiny.Templates {
-    class {id} :  ITinyTemplate
-    {
-        {members}
-
-        public string Invoke(TemplateArguments args, TemplateManager hiddenTemplateManager)
-        {
-            System.Text.StringBuilder sb = new System.Text.StringBuilder();
-
-            {body}
-
-            return sb.ToString();
-        }
-    }
-}";
-        private readonly Compiler _compiler;
-        private string _generatedTemplate;
-
-        /// <summary>
-        /// Create a new template compiler
-        /// </summary>
-        public TemplateCompiler()
-        {
-            _compiler = new Compiler();
-            _compiler.Add(GetType());
-            _compiler.Add(typeof(ITinyTemplate));
-        }
-
-        /// <summary>
-        /// Adds the specified type.
-        /// </summary>
-        /// <param name="type">The type.</param>
-        public void Add(Type type)
-        {
-            _compiler.Add(type);
-        }
-
-        /// <summary>
-        /// Compiles the specified args.
-        /// </summary>
-        /// <param name="args">Arguments, should contain "name, value, name, value" etc.</param>
-        /// <param name="template">c# code that will be included in the generated template class</param>
-        /// <param name="templateId">Id of the template class</param>
-        /// <returns>Tiny template if successful; otherwise null.</returns>
-        /// <exception cref="CompilerException">If compilation fails</exception>
-        /// <exception cref="ArgumentException">If args are incorrect</exception>
-        public ITinyTemplate Compile(TemplateArguments args, string template, string templateId)
-        {
-            ArgumentContainer[] arguments = args.GetArguments();
-            foreach (ArgumentContainer arg in arguments)
-                _compiler.Add(arg.Type);
-
-            string members = string.Empty;
-            string body = string.Empty;
-            foreach (ArgumentContainer arg in arguments)
-            {
-                members += Compiler.GetTypeName(arg.Type) + " " + arg.Name + ";" + Environment.NewLine;
-                body += "this." + arg.Name + " = (" + Compiler.GetTypeName(arg.Type) + ")args[\"" + arg.Name + "\"].Object;" + Environment.NewLine;
-            }
-
-            body += template;
-
-            _generatedTemplate =
-				TemplateBase.Replace("{id}", templateId).Replace("{members}", members).Replace("{body}", body);
-
-            _compiler.Compile(_generatedTemplate);
-            return _compiler.CreateInstance<ITinyTemplate>();
-        }
-
-
-    }
-
-
-}
\ No newline at end of file
diff --git a/HttpServer/trunk/HttpServer/Rendering/TemplateException.cs b/HttpServer/trunk/HttpServer/Rendering/TemplateException.cs
deleted file mode 100644
index 1196a44..0000000
--- a/HttpServer/trunk/HttpServer/Rendering/TemplateException.cs
+++ /dev/null
@@ -1,66 +0,0 @@
-using System;
-using System.CodeDom.Compiler;
-using Fadd;
-
-namespace HttpServer.Rendering
-{
-    /// <summary>
-    /// Thrown when a template cannot be compiled.
-    /// </summary>
-    public class TemplateException : Exception
-    {
-        private readonly CompilerException _err;
-        private readonly string _templateName;
-
-        /// <summary>
-        /// Initializes a new instance of the <see cref="TemplateException"/> class.
-        /// </summary>
-        /// <param name="templateName">Template that failed compilation.</param>
-        /// <param name="err">Exception thrown by the compiler.</param>
-        public TemplateException(string templateName, CompilerException err) : base(string.Empty, err)
-        {
-            _err = err;
-            _templateName = templateName;
-        }
-
-        /// <summary>
-        /// Gets a message that describes the current exception.
-        /// </summary>
-        /// <value></value>
-        /// <returns>
-        /// The error message that explains the reason for the exception, or an empty string("").
-        /// </returns>
-        public override string Message
-        {
-            get
-            {
-                string msg = "Failed to compile '" + _templateName + "'\r\n";
-                foreach (CompilerError error in _err.Errors)
-                {
-                    if (error.IsWarning)
-                        continue;
-                    msg += "Line: " + error.Line + " " + error.ErrorText;
-                }
-
-                return msg;
-            }
-        }
-        /// <summary>
-        /// Creates and returns a string representation of the current exception.
-        /// </summary>
-        /// <returns>
-        /// A string representation of the current exception.
-        /// </returns>
-        /// <PermissionSet>
-        /// 	<IPermission class="System.Security.Permissions.FileIOPermission, mscorlib, Version=2.0.3600.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" version="1" PathDiscovery="*AllFiles*"/>
-        /// </PermissionSet>
-        public override string ToString()
-        {
-#if DEBUG
-            return Message + "\r\n" + _err.Data["code"];
-#else
-            return Message + "\r\n";
-#endif
-        }
-    }
-}
diff --git a/HttpServer/trunk/HttpServer/Rendering/TemplateGenerator.cs b/HttpServer/trunk/HttpServer/Rendering/TemplateGenerator.cs
deleted file mode 100644
index 8c36afe..0000000
--- a/HttpServer/trunk/HttpServer/Rendering/TemplateGenerator.cs
+++ /dev/null
@@ -1,41 +0,0 @@
-using System;
-using System.IO;
-
-namespace HttpServer.Rendering
-{
-    /// <summary>
-    /// A code generator is used to convert template code to something that we can
-    /// work with, as HTML or c# code.
-    /// </summary>
-    /// <seealso cref="TemplateManager"/>
-    public interface TemplateGenerator
-    {
-        /// <summary>
-        /// Generate C# code from the template.
-        /// </summary>
-        /// <param name="writer">A <see cref="TextWriter"/> that the generated code will be written to.</param>
-        /// <exception cref="InvalidOperationException">If the template have not been parsed first.</exception>
-        /// <exception cref="CodeGeneratorException">If template is incorrect</exception>
-        void GenerateCode(TextWriter writer);
-
-        /// <summary>
-        /// Parse a file and convert into to our own template object code.
-        /// </summary>
-        /// <param name="fullPath">Path and filename to a template</param>
-        /// <exception cref="CodeGeneratorException">If something is incorrect in the template.</exception>
-        /// <exception cref="FileNotFoundException"></exception>
-        /// <exception cref="DirectoryNotFoundException"></exception>
-        /// <exception cref="UnauthorizedAccessException"></exception>
-        /// <exception cref="PathTooLongException"></exception>
-        /// <exception cref="NotSupportedException"></exception>
-        [Obsolete("Use the TextReader overload instead.")]
-        void Parse(string fullPath);
-
-        /// <summary>
-        /// Parse a file and convert into to our own template object code.
-        /// </summary>
-        /// <param name="reader">A <see cref="TextReader"/> containing our template</param>
-        /// <exception cref="CodeGeneratorException">If something is incorrect in the template.</exception>
-        void Parse(TextReader reader);
-    }
-}
\ No newline at end of file
diff --git a/HttpServer/trunk/HttpServer/Rendering/TemplateInfo.cs b/HttpServer/trunk/HttpServer/Rendering/TemplateInfo.cs
deleted file mode 100644
index febab07..0000000
--- a/HttpServer/trunk/HttpServer/Rendering/TemplateInfo.cs
+++ /dev/null
@@ -1,31 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.Text;
-
-namespace HttpServer.Rendering
-{
-    /// <summary>
-    /// Keeps information about templates, so we know when to regenerate it.
-    /// </summary>
-    public interface TemplateInfo
-    {
-        /// <summary>
-        /// When the template was compiled.
-        /// </summary>
-        /// <remarks>Use this date to determine if the template is old and needs to be recompiled.</remarks>
-        DateTime CompiledWhen
-        { get; }
-
-        /// <summary>
-        /// Template file name.
-        /// </summary>
-        string Filename
-        { get; }
-
-        /// <summary>
-        /// The actual template.
-        /// </summary>
-        TinyTemplate Template
-        { get; }
-    }
-}
diff --git a/HttpServer/trunk/HttpServer/Rendering/TemplateLoader.cs b/HttpServer/trunk/HttpServer/Rendering/TemplateLoader.cs
deleted file mode 100644
index 7dbba54..0000000
--- a/HttpServer/trunk/HttpServer/Rendering/TemplateLoader.cs
+++ /dev/null
@@ -1,32 +0,0 @@
-using System.IO;
-
-namespace HttpServer.Rendering
-{
-    /// <summary>
-    /// Interface used to load templates from different sources.
-    /// </summary>
-    public interface TemplateLoader
-    {
-        /// <summary>
-        /// Load a template into a <see cref="TextReader"/> and return it.
-        /// </summary>
-        /// <param name="path">Relative path (and filename) to template.</param>
-        /// <returns>a <see cref="TextReader"/> if file was found; otherwise null.</returns>
-        TextReader LoadTemplate(string path);
-
-        /// <summary>
-        /// Fetch all files from the resource that matches the specified arguments.
-        /// </summary>
-        /// <param name="path">Where the file should reside.</param>
-        /// <param name="filename">Files to check</param>
-        /// <returns>a list of files if found; or an empty array if no files are found.</returns>
-        string[] GetFiles(string path, string filename);
-
-        /// <summary>
-        /// Check's whether a template should be reloaded or not.
-        /// </summary>
-        /// <param name="info">template information</param>
-        /// <returns>true if template is OK; false if it do not exist or are old.</returns>
-        bool CheckTemplate(TemplateInfo info);
-    }
-}
diff --git a/HttpServer/trunk/HttpServer/Rendering/TemplateManager.cs b/HttpServer/trunk/HttpServer/Rendering/TemplateManager.cs
deleted file mode 100644
index 4ed3f63..0000000
--- a/HttpServer/trunk/HttpServer/Rendering/TemplateManager.cs
+++ /dev/null
@@ -1,391 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.IO;
-using System.Text;
-using Fadd;
-#if DEBUG
-using HttpServer.Rendering.Haml;
-using Xunit;
-#endif
-
-namespace HttpServer.Rendering
-{
-    /// <summary>
-    /// Purpose if this class is to take template objects and keep them in
-    /// memory. It will also take a filename and the code generator to use
-    /// if when the template have been changed on disk.
-    /// </summary>
-    public class TemplateManager
-    {
-        private readonly Dictionary<string, TemplateInfoImp> _compiledTemplates = new Dictionary<string, TemplateInfoImp>();
-        private readonly Dictionary<string, ITemplateGenerator> _generators = new Dictionary<string, ITemplateGenerator>();
-        private readonly List<Type> _includedTypes = new List<Type>();
-        private readonly List<ITemplateLoader> _templateLoaders = new List<ITemplateLoader>();
-        //TODO: Create a path/template index (to avoid unnecessary IO).
-
-        /// <summary>
-        /// Initializes a new instance of the <see cref="TemplateManager"/> class.
-        /// </summary>
-        /// <param name="loaders">
-        /// Template loaders used to load templates from any source.
-        /// The loaders will be invoked in the order they are given, that is the first loader will always be asked to give a template
-        /// first.
-        /// </param>
-        public TemplateManager(params ITemplateLoader[] loaders)
-        {
-			Check.Require(loaders.Length, "Parameter loaders must contain at least one ITemplateLoader.");
-            _templateLoaders.AddRange(loaders);
-        }
-
-        /// <summary>
-        /// Initializes a new instance of the <see cref="TemplateManager"/> class.
-        /// </summary>
-        /// <remarks>Uses the file template loader.</remarks>
-        public TemplateManager()
-        {
-			_templateLoaders.Add(new FileTemplateLoader());
-        }
-
-        /// <summary>
-        /// Add a template generator
-        /// </summary>
-        /// <param name="fileExtension">File extension without the dot.</param>
-        /// <param name="generator">Generator to handle the extension</param>
-        /// <exception cref="InvalidOperationException">If the generator already exists.</exception>
-        /// <exception cref="ArgumentException">If file extension is incorrect</exception>
-        /// <exception cref="ArgumentNullException">If generator is not specified.</exception>
-        /// <example>
-        /// <code>
-        /// cache.Add("haml", new HamlGenerator());
-        /// </code>
-        /// </example>
-        public void Add(string fileExtension, ITemplateGenerator generator)
-        {
-            if (string.IsNullOrEmpty(fileExtension) || fileExtension.Contains("."))
-                throw new ArgumentException("Invalid file extension.");
-            if (generator == null)
-                throw new ArgumentNullException("generator");
-
-            if (_generators.ContainsKey(fileExtension))
-                throw new InvalidOperationException("A generator already exists for " + fileExtension);
-
-            _generators.Add(fileExtension, generator);
-        }
-
-        /// <summary>
-        /// This type should be included, so it may be called from the scripts (name space and assembly).
-        /// </summary>
-        /// <param name="type"></param>
-        public void AddType(Type type)
-        {
-            bool assemblyExists = false;
-            bool nsExists = false;
-            foreach (Type includedType in _includedTypes)
-            {
-                if (includedType.Namespace == type.Namespace)
-                    nsExists = true;
-                if (includedType.Assembly == type.Assembly)
-                    assemblyExists = true;
-                if (nsExists && assemblyExists)
-                    break;
-            }
-
-            if (!assemblyExists || !nsExists)
-                _includedTypes.Add(type);
-        }
-
-        /// <summary>
-        /// Checks the template.
-        /// </summary>
-        /// <param name="info">Template information, filename must be set.</param>
-        /// <returns>true if template exists and have been compiled.</returns>
-        private bool CheckTemplate(ITemplateInfo info)
-        {
-            if (info == null)
-                return false;
-
-			foreach (ITemplateLoader loader in _templateLoaders)
-				if (loader.HasTemplate(info.Filename))
-					return loader.CheckTemplate(info);
-
-        	return false;
-        }
-
-        /// <summary>
-        /// Compiles the specified code.
-        /// </summary>
-        /// <param name="fileName">Name of template.</param>
-        /// <param name="code">c# code generated from a template.</param>
-        /// <param name="arguments">Arguments as in name, value, name, value, name, value</param>
-        /// <param name="templateId">
-        /// An id to specify the exact instance of a template. Made from joining the 'TemplateClass' with the hashcode of the filename
-        /// and the hashcode of the supplied arguments
-        /// </param>
-        /// <returns>Template</returns>
-        /// <exception cref="TemplateException">If compilation fails</exception>
-        protected ITinyTemplate Compile(string fileName, string code, TemplateArguments arguments, string templateId)
-        {
-            if (string.IsNullOrEmpty(code))
-                throw new ArgumentException("Code is not specified.");
-
-            TemplateCompiler compiler = new TemplateCompiler();
-            foreach (Type type in _includedTypes)
-                compiler.Add(type);
-
-            try
-            {
-                return compiler.Compile(arguments, code, templateId);
-            }
-            catch(CompilerException err)
-            {
-                throw new TemplateException(fileName, err);
-            }
-        }
-
-        /// <summary>
-        /// Will generate code from the template.
-        /// Next step is to compile the code.
-        /// </summary>
-        /// <param name="path">Path and filename to template.</param>
-        /// <exception cref="ArgumentException"></exception>
-        /// <exception cref="InvalidOperationException">If no template generator exists for the specified extension.</exception>
-        /// <exception cref="CodeGeneratorException">If parsing/compiling fails</exception>
-        /// <see cref="Render(string, TemplateArguments)"/>
-        private string GenerateCode(ref string path)
-        {
-            if (string.IsNullOrEmpty(path))
-                throw new ArgumentException("No filename was specified.");
-
-            int pos = path.LastIndexOf('.');
-            if (pos == -1)
-                throw new ArgumentException("Filename do not contain a file extension.");
-            if (pos == path.Length - 1)
-                throw new ArgumentException("Invalid filename '" + path + "', should not end with a dot.");
-
-            string extension = path.Substring(pos + 1);
-
-
-            lock (_generators)
-            {
-                ITemplateGenerator generator = null;
-                if (extension == "*")
-                    generator = GetGeneratorForWildCard(ref path);
-                else
-                {
-                    if (_generators.ContainsKey(extension))
-                        generator = _generators[extension];
-                }
-
-                if (generator == null)
-                    throw new InvalidOperationException("No template generator exists for '" + path + "'.");
-
-                TextReader reader = null;
-                try
-                {
-                    foreach (ITemplateLoader loader in _templateLoaders)
-            	    {
-            		    reader = loader.LoadTemplate(path);
-					    if (reader != null)
-						    break;
-            	    }
-
-                    if (reader == null)
-                        throw new FileNotFoundException("Did not find template: " + path);
-
-                    generator.Parse(reader);
-                    reader.Close();
-                }
-                finally
-                {
-                    if (reader != null)
-                        reader.Dispose();
-                }
-
-                StringBuilder sb = new StringBuilder();
-                using (TextWriter writer = new StringWriter(sb))
-                {
-                    generator.GenerateCode(writer);
-                    return sb.ToString();
-                }
-            }
-        }
-
-        /// <summary>
-        /// Find a template using wildcards in filename.
-        /// </summary>
-        /// <param name="filePath">Full path (including wildcards in filename) to where we should find a template.</param>
-        /// <returns>First found generator if an extension was matched; otherwise null.</returns>
-        /// <remarks>method is not thread safe</remarks>
-        private ITemplateGenerator GetGeneratorForWildCard(ref string filePath)
-        {
-            int pos = filePath.LastIndexOf('\\');
-            if (pos == -1)
-                throw new InvalidOperationException("Failed to find path in filename.");
-
-            string path = filePath.Substring(0, pos);
-            string filename = filePath.Substring(pos + 1);
-
-			List<string> files = new List<string>();
-        	foreach (ITemplateLoader loader in _templateLoaders)
-				files.AddRange(loader.GetFiles(path, filename));
-
-            for (int i = 0; i < files.Count; ++i)
-            {
-                pos = files[i].LastIndexOf('.');
-                string extension = files[i].Substring(pos + 1);
-
-                if (!_generators.ContainsKey(extension))
-                    continue;
-
-                if(filePath.EndsWith("*"))
-                    filePath = filePath.TrimEnd('*') + extension;
-
-                return _generators[extension] ;
-            }
-
-            return null;
-        }
-
-#if DEBUG
-        [Fact]
-        private void TestGetGeneratorForWildCard()
-        {
-            string resource = "rendering\\resourcetest.*";
-            Add("haml", new HamlGenerator());
-            Add("tiny", new Tiny.TinyGenerator());
-			_templateLoaders.Clear();
-        	ResourceTemplateLoader loader = new ResourceTemplateLoader();
-			loader.LoadTemplates("rendering/", loader.GetType().Assembly, "HttpServer.Rendering");
-            _templateLoaders.Add(loader);
-            ITemplateGenerator gen = GetGeneratorForWildCard(ref resource);
-            Assert.NotNull(gen);
-            Assert.IsType(typeof (HamlGenerator), gen);
-        }
-
-		[Fact]
-		private void TestMultipleLoaders()
-		{
-			const string resource = "rendering\\resourcetest.*";
-			Add("haml", new HamlGenerator());
-			Add("tiny", new Tiny.TinyGenerator());
-			if (_templateLoaders.Count == 0)
-				_templateLoaders.Add(new FileTemplateLoader());
-			ResourceTemplateLoader loader = new ResourceTemplateLoader();
-			loader.LoadTemplates("rendering/", loader.GetType().Assembly, "HttpServer.Rendering");
-			_templateLoaders.Add(loader);
-			string result = Render(resource, null);
-
-			Assert.NotNull(result);
-			Assert.True(result.StartsWith("This file is used to test the resource template loader"));
-
-			((FileTemplateLoader)_templateLoaders[0]).PathPrefix = "..\\..\\";
-			result = Render(resource, null);
-
-			Assert.NotNull(result);
-			Assert.True(result.StartsWith("This file is used to test the resource template loader"));
-		}
-#endif
-		/// <summary>
-		/// Render a partial
-		/// </summary>
-		/// <param name="filename">Path and filename</param>
-		/// <param name="templateArguments">Variables used in the template. Should be specified as "name, value, name, value" where name is variable name and value is variable contents.</param>
-		/// <param name="partialArguments">Arguments passed from parent template</param>
-		/// <returns></returns>
-		/// <exception cref="InvalidOperationException"></exception>
-        /// <exception cref="TemplateException"></exception>
-		/// <exception cref="ArgumentException"></exception>
-		public string RenderPartial(string filename, TemplateArguments templateArguments, TemplateArguments partialArguments)
-		{
-			templateArguments.Update(partialArguments);
-			return Render(filename, templateArguments);
-		}
-
-		/// <summary>
-		/// Generate HTML from a template.
-		/// </summary>
-		/// <param name="filename">Path and filename</param>
-		/// <param name="args">Variables used in the template. Should be specified as "name, value, name, value" where name is variable name and value is variable contents.</param>
-		/// <exception cref="InvalidOperationException"></exception>
-        /// <exception cref="CompilerException"></exception>
-		/// <exception cref="ArgumentException"></exception>
-		/// <example>
-		/// <code>
-		/// string html = cache.Generate("views\\users\\view.haml", new TemplateArguments("user", dbUser, "isAdmin", dbUser.IsAdmin), null);
-        /// </code>
-		/// </example>
-        public string Render(string filename, TemplateArguments args)
-        {
-			if (args == null)
-				args = new TemplateArguments();
-
-			// Generate a new proper filename (the generator gets saved aswell) : todo, this works perfectly but isnt so good looking, is it?
-			GetGeneratorForWildCard(ref filename);
-
-			// Generate a name identifying the template
-			string templateName = "TemplateClass" + filename.GetHashCode() + args.GetHashCode();
-			templateName = templateName.Replace('-', 'N');
-
-            TemplateInfoImp info;
-            lock (_compiledTemplates)
-            {
-				if (_compiledTemplates.ContainsKey(templateName))
-					info = _compiledTemplates[templateName];
-                else
-                {
-                    info = new TemplateInfoImp();
-                    info.Filename = filename;
-                    info.Template = null;
-                    info.CompiledWhen = DateTime.MinValue;
-					_compiledTemplates.Add(templateName, info);
-                }
-            }
-
-            lock (info)
-            {
-                if (!CheckTemplate(info) || info.Template == null)
-                {
-                    string code = GenerateCode(ref filename);
-                    info.Template = Compile(filename, code, args, templateName);
-                    info.CompiledWhen = DateTime.Now;
-                	info.Filename = filename;
-                }
-
-                return info.Template.Invoke(args, this);
-            }
-        }
-
-        #region Nested type: TemplateInfoImp
-
-        /// <summary>
-        /// Keeps information about templates, so we know when to regenerate it.
-        /// </summary>
-        private class TemplateInfoImp : ITemplateInfo
-        {
-            private DateTime _compiledWhen;
-            private string _filename;
-            private ITinyTemplate _template;
-
-            public DateTime CompiledWhen
-            {
-                get { return _compiledWhen; }
-                set { _compiledWhen = value; }
-            }
-
-            public string Filename
-            {
-                get { return _filename; }
-                set { _filename = value; }
-            }
-
-            public ITinyTemplate Template
-            {
-                get { return _template; }
-                set { _template = value; }
-            }
-        }
-
-
-        #endregion
-    }
-}
diff --git a/HttpServer/trunk/HttpServer/Rendering/Tiny/Nodes/CodeNode.cs b/HttpServer/trunk/HttpServer/Rendering/Tiny/Nodes/CodeNode.cs
deleted file mode 100644
index c3dfa8d..0000000
--- a/HttpServer/trunk/HttpServer/Rendering/Tiny/Nodes/CodeNode.cs
+++ /dev/null
@@ -1,11 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.Text;
-
-namespace HttpServer.Rendering.Tiny
-{
-    public class CodeNode : Node
-    {
-
-    }
-}
diff --git a/HttpServer/trunk/HttpServer/Rendering/Tiny/TinyGenerator.cs b/HttpServer/trunk/HttpServer/Rendering/Tiny/TinyGenerator.cs
deleted file mode 100644
index 44379f7..0000000
--- a/HttpServer/trunk/HttpServer/Rendering/Tiny/TinyGenerator.cs
+++ /dev/null
@@ -1,152 +0,0 @@
-using System;
-using System.IO;
-using System.Text;
-
-namespace HttpServer.Rendering.Tiny
-{
-    /// <summary>
-    /// Generates C# rendering object using ASP similiar tags in the HTML code.
-    /// </summary>
-    public class TinyGenerator : ITemplateGenerator
-    {
-        readonly StringBuilder _sb = new StringBuilder();
-
-        #region ITemplateGenerator Members
-
-        /// <summary>
-        /// Generate C# code from the template.
-        /// </summary>
-        /// <param name="writer">A textwriter that the generated code will be written to.</param>
-        /// <exception cref="InvalidOperationException">If the template have not been parsed first.</exception>
-        /// <exception cref="CodeGeneratorException">If template is incorrect</exception>
-        public void GenerateCode(TextWriter writer)
-        {
-            writer.Write(_sb.ToString());
-        }
-
-        /// <summary>
-        /// Parse a file and convert into to our own template object code.
-        /// </summary>
-        /// <param name="fullPath">Path and filename to a template</param>
-        /// <exception cref="CodeGeneratorException">If something is incorrect in the template.</exception>
-        /// <exception cref="FileNotFoundException"></exception>
-        /// <exception cref="DirectoryNotFoundException"></exception>
-        /// <exception cref="UnauthorizedAccessException"></exception>
-        /// <exception cref="PathTooLongException"></exception>
-        /// <exception cref="NotSupportedException"></exception>
-        public void Parse(string fullPath)
-        {
-            FileStream fs = new FileStream(fullPath, FileMode.Open, FileAccess.Read, FileShare.ReadWrite);
-            TextReader reader = new StreamReader(fs);
-            Parse(reader);
-        }
-
-        /// <summary>
-        /// Parse a file and convert into to our own template object code.
-        /// </summary>
-        /// <param name="reader">A textreader containing our template</param>
-        /// <exception cref="CodeGeneratorException">If something is incorrect in the template.</exception>
-        public void Parse(TextReader reader)
-        {
-            bool inCode = false;
-            bool isOutput = false;
-
-            _sb.Length = 0;
-            StringBuilder sb = _sb;
-            sb.Append("sb.Append(@\"");
-
-            //bool quoteStarted = false;
-            //bool inQuote = false;
-            string line = reader.ReadLine();
-            while(line != null)
-            {
-                for (int i = 0; i < line.Length; ++i)
-                {
-                    char ch = line[i];
-                    char nextCh = i < line.Length - 1 ? line[i + 1] : char.MinValue;
-                    /*
-                    if (isOutput && inCode && !quoteStarted && !char.IsWhiteSpace(ch))
-                    {
-                        sb.Append("\"");
-                        quoteStarted = true;
-                    }
-                    else if (quoteStarted)
-                    {
-                        if (ch == '\"')
-                        {
-                            sb.Append("\\");
-                            inQuote = !inQuote;
-                        }
-
-                        // We are in a <%= %> tag, we need to scan after end
-                        // to be able to insert " directly after the statement (and before whitespaces)
-                        if (!inQuote)
-                        {
-                            for (int j = i; j < line.Length; ++j)
-                            {
-                                if (line[j] == '%')
-                                {
-                                    if (j < line.Length && line[j+1] == '>')
-                                    {
-                                        sb.Append("\"");
-                                        ch = line[j];
-                                        nextCh = line[j + 1];
-                                        i = j;
-                                        break;
-                                    }
-                                }
-                                if (!char.IsWhiteSpace(line[j]))
-                                    break;
-                            }
-                        }
-                    }*/
-
-                    if (ch == '"')
-                    {
-                        sb.Append(ch);
-                        if (!inCode)
-                            sb.Append(ch);
-                    }
-                    else if (ch == '<' && nextCh == '%')
-                    {
-                        char thirdCh = i < line.Length - 2 ? line[i + 2] : char.MinValue;
-                        ++i;
-
-                        sb.Append("\");");
-                        if (thirdCh == '=')
-                        {
-                            ++i;
-                            isOutput = true;
-                            sb.Append("sb.Append(");
-                        }
-
-                        inCode = true;
-                    }
-                    else if (ch == '%' && nextCh == '>')
-                    {
-                        ++i;
-                        if (isOutput)
-                            sb.Append(");");
-
-                        sb.Append("sb.Append(@\"");
-                        inCode = false;
-                        isOutput = false;
-                    }
-                    else
-                        sb.Append(ch);
-                }
-
-                sb.AppendLine();
-                line = reader.ReadLine();
-            } //while
-
-            // to avoid compile errors.
-            if (inCode && isOutput)
-                    sb.Append(");");
-            else
-                sb.Append("\");");
-        }
-
-        #endregion
-    }
-}
diff --git a/HttpServer/trunk/HttpServer/Rendering/TinyTemplate.cs b/HttpServer/trunk/HttpServer/Rendering/TinyTemplate.cs
deleted file mode 100644
index a701aed..0000000
--- a/HttpServer/trunk/HttpServer/Rendering/TinyTemplate.cs
+++ /dev/null
@@ -1,17 +0,0 @@
-namespace HttpServer.Rendering
-{
-    /// <summary>
-    /// Interface for dynamically generated templates.
-    /// </summary>
-    /// <seealso cref="TemplateManager"/>
-    public interface TinyTemplate
-    {
-        /// <summary>
-        /// Run the template to generate HTML code.
-        /// </summary>
-        /// <param name="args">arguments passed to the template</param>
-        /// <param name="hiddenTemplateManager">template manager (a manager is used to generate templates)</param>
-        /// <returns>HTML code.</returns>
-        string Invoke(TemplateArguments args, TemplateManager hiddenTemplateManager);
-    }
-}
diff --git a/HttpServer/trunk/HttpServer/Rendering/resourcetest.haml b/HttpServer/trunk/HttpServer/Rendering/resourcetest.haml
deleted file mode 100644
index 43c61bb..0000000
--- a/HttpServer/trunk/HttpServer/Rendering/resourcetest.haml
+++ /dev/null
@@ -1 +0,0 @@
-This file is used to test the resource template loader. Never remove it (unless you want a test to fail).
\ No newline at end of file
diff --git a/HttpServer/trunk/HttpServer/Rendering/resourcetest.xml b/HttpServer/trunk/HttpServer/Rendering/resourcetest.xml
deleted file mode 100644
index a86bcc5..0000000
--- a/HttpServer/trunk/HttpServer/Rendering/resourcetest.xml
+++ /dev/null
@@ -1,4 +0,0 @@
-<?xml version="1.0" encoding="utf-8" ?>
-<property>
-	<item type="description" value="this is a test file" />
-</property>
\ No newline at end of file
diff --git a/HttpServer/trunk/HttpServer/RequestCookie.cs b/HttpServer/trunk/HttpServer/RequestCookie.cs
deleted file mode 100644
index e2cec0d..0000000
--- a/HttpServer/trunk/HttpServer/RequestCookie.cs
+++ /dev/null
@@ -1,70 +0,0 @@
-using System;
-using System.Web;
-
-namespace HttpServer
-{
-    /// <summary>
-    /// cookie sent by the client/browser
-    /// </summary>
-    /// <seealso cref="ResponseCookie"/>
-    public class RequestCookie
-    {
-        private readonly string _name = null;
-        private string _value = null;
-
-        /// <summary>
-        /// Constructor.
-        /// </summary>
-        /// <param name="id">cookie identifier</param>
-        /// <param name="content">cookie content</param>
-        /// <exception cref="ArgumentNullException">id or content is null</exception>
-        /// <exception cref="ArgumentException">id is empty</exception>
-        public RequestCookie(string id, string content)
-        {
-            if (string.IsNullOrEmpty(id)) throw new ArgumentNullException("id");
-            if (content == null) throw new ArgumentNullException("content");
-
-            _name = id;
-            _value = content;
-        }
-
-
-        #region inherited methods
-
-        /// <summary>
-        /// Gets the cookie HTML representation.
-        /// </summary>
-        /// <returns>cookie string</returns>
-        public override string ToString()
-        {
-            return string.Format("{0}={1}; ", HttpUtility.UrlEncode(_name), HttpUtility.UrlEncode(_value));
-        }
-
-        #endregion
-
-        #region public properties
-
-        /// <summary>
-        /// Gets the cookie identifier.
-        /// </summary>
-        public string Name
-        {
-            get { return _name; }
-        }
-
-
-        /// <summary>
-        /// Cookie value. Set to null to remove cookie.
-        /// </summary>
-        public string Value
-        {
-            get { return _value; }
-            set
-            {
-                _value = value;
-            }
-        }
-
-        #endregion
-    }
-}
diff --git a/HttpServer/trunk/HttpServer/RequestCookies.cs b/HttpServer/trunk/HttpServer/RequestCookies.cs
deleted file mode 100644
index aea8cf4..0000000
--- a/HttpServer/trunk/HttpServer/RequestCookies.cs
+++ /dev/null
@@ -1,164 +0,0 @@
-using System;
-using System.Collections;
-using System.Collections.Generic;
-
-namespace HttpServer
-{
-    /// <summary>
-    /// This class is created as a wrapper, since there are two different cookie types in .Net (Cookie and HttpCookie).
-    /// The framework might switch class in the future and we dont want to have to replace all instances
-    /// </summary>
-    public sealed class RequestCookies : IEnumerable<RequestCookie>
-    {
-        private readonly IDictionary<string, RequestCookie> _items = new Dictionary<string, RequestCookie>();
-
-        /// <summary>
-        /// Let's copy all the cookies.
-        /// </summary>
-        /// <param name="cookies">value from cookie header.</param>
-        public RequestCookies(string cookies)
-        {
-            if (string.IsNullOrEmpty(cookies))
-                return;
-
-            string name = string.Empty;
-            int state = 0;
-            int start = -1;
-            for (int i = 0; i < cookies.Length; ++i)
-            {
-                char ch = cookies[i];
-
-                // searching for start of cookie name
-                switch (state)
-                {
-                    case 0:
-                        if (char.IsWhiteSpace(ch))
-                            continue;
-                        start = i;
-                        ++state;
-                        break;
-                    case 1:
-                        if (char.IsWhiteSpace(ch) || ch == '=')
-                        {
-                            if (start == -1)
-                                return; // todo: decide if an exception should be thrown.
-                            name = cookies.Substring(start, i - start);
-                            start = -1;
-                            ++state;
-                        }
-                        break;
-                    case 2:
-                        if (!char.IsWhiteSpace(ch) && ch != '=')
-                        {
-                            start = i;
-                            ++state;
-                        }
-                        break;
-                    case 3:
-                        if (ch == ';')
-                        {
-                            if (start >= -1)
-                                Add(new RequestCookie(name, cookies.Substring(start, i - start)));
-                            start = -1;
-                            state = 0;
-                            name = string.Empty;
-                        }
-                        break;
-                }
-            }
-
-            // last cookie
-            if (name != string.Empty)
-                Add(new RequestCookie(name, cookies.Substring(start, cookies.Length - start)));
-        }
-
-        /// <summary>
-        /// Adds a cookie in the collection.
-        /// </summary>
-        /// <param name="cookie">cookie to add</param>
-        /// <exception cref="ArgumentNullException">cookie is null</exception>
-        internal void Add(RequestCookie cookie)
-        {
-            // Verifies the parameter
-            if (cookie == null)
-                throw new ArgumentNullException("cookie");
-            if (cookie.Name == null || cookie.Name.Trim() == string.Empty)
-                throw new ArgumentException("Name must be specified.");
-            if (cookie.Value == null || cookie.Value.Trim() == string.Empty)
-                throw new ArgumentException("Content must be specified.");
-
-            if (_items.ContainsKey(cookie.Name))
-                _items[cookie.Name] = cookie;
-            else _items.Add(cookie.Name, cookie);
-        }
-
-        /// <summary>
-        /// Gets the count of cookies in the collection.
-        /// </summary>
-        public int Count
-        {
-            get { return _items.Count; }
-        }
-
-
-        /// <summary>
-        /// Gets the cookie of a given identifier (null if not existing).
-        /// </summary>
-        public RequestCookie this[string id]
-        {
-            get
-            {
-                return _items.ContainsKey(id) ? _items[id] : null;
-            }
-        }
-        /// <summary>
-        /// Gets a collection enumerator on the cookie list.
-        /// </summary>
-        /// <returns>collection enumerator</returns>
-        public IEnumerator GetEnumerator()
-        {
-            return _items.Values.GetEnumerator();
-        }
-
-
-        /// <summary>
-        /// Remove all cookies.
-        /// </summary>
-        public void Clear()
-        {
-            _items.Clear();
-        }
-
-        #region IEnumerable<RequestCookie> Members
-
-        ///<summary>
-        ///Returns an enumerator that iterates through the collection.
-        ///</summary>
-        ///
-        ///<returns>
-        ///A <see cref="T:System.Collections.Generic.IEnumerator`1"></see> that can be used to iterate through the collection.
-        ///</returns>
-        ///<filterpriority>1</filterpriority>
-        IEnumerator<RequestCookie> IEnumerable<RequestCookie>.GetEnumerator()
-        {
-            return _items.Values.GetEnumerator();
-        }
-
-        #endregion
-
-		/// <summary>
-		/// Remove a cookie from the collection.
-		/// </summary>
-		/// <param name="cookieName">Name of cookie.</param>
-        public void Remove(string cookieName)
-        {
-            lock (_items)
-            {
-                if (!_items.ContainsKey(cookieName))
-                    return;
-
-                _items.Remove(cookieName);
-            }
-        }
-    }
-}
diff --git a/HttpServer/trunk/HttpServer/RequestQueue.cs b/HttpServer/trunk/HttpServer/RequestQueue.cs
deleted file mode 100644
index 8ef93bb..0000000
--- a/HttpServer/trunk/HttpServer/RequestQueue.cs
+++ /dev/null
@@ -1,160 +0,0 @@
-using System.Collections.Generic;
-using System.Threading;
-
-namespace HttpServer
-{
-	/// <summary>
-	/// Used to queue incoming requests.
-	/// </summary>
-	class RequestQueue
-	{
-		private int _maxRequestCount = 100;
-		private int _currentRequestCount;
-		private int _maxQueueSize = 1024;
-		private readonly Queue<QueueItem> _queue = new Queue<QueueItem>();
-		private readonly ManualResetEvent _event = new ManualResetEvent(false);
-		private bool _canRun;
-		private Thread _workerThread;
-		private readonly ProcessRequestHandler _handler;
-
-		/// <summary>
-		/// Initializes a new instance of the <see cref="RequestQueue"/> class.
-		/// </summary>
-		/// <param name="handler">Called when a request should be processed.</param>
-		public RequestQueue(ProcessRequestHandler handler)
-		{
-			_handler = handler;
-
-		}
-		/// <summary>
-		/// Used two queue incoming requests to avoid
-		/// thread starvation.
-		/// </summary>
-		private class QueueItem
-		{
-			public IHttpClientContext Context { get; set; }
-			public IHttpRequest Request { get; set; }
-		}
-
-		/// <summary>
-		/// Gets or sets maximum number of allowed simultaneous requests.
-		/// </summary>
-		public int MaxRequestCount
-		{
-			get { return _maxRequestCount; }
-			set { _maxRequestCount = value; }
-		}
-
-		/// <summary>
-		/// Gets or sets maximum number of requests queuing to be handled.
-		/// </summary>
-		public int MaxQueueSize
-		{
-			get { return _maxQueueSize; }
-			set { _maxQueueSize = value; }
-		}
-
-		/// <summary>
-		/// Specifies how many requests the HTTP server is currently processing.
-		/// </summary>
-		internal int CurrentRequestCount
-		{
-			get { return _currentRequestCount; }
-			set { _currentRequestCount = value; }
-		}
-
-		internal bool ShouldQueue
-		{
-			get
-			{
-				return _currentRequestCount > _maxRequestCount;
-			}
-		}
-		public void Enqueue(IHttpClientContext context, IHttpRequest request)
-		{
-			QueueItem item = new QueueItem { Context = context, Request = request };
-			lock (_queue)
-				_queue.Enqueue(item);
-		}
-
-		public void Trigger()
-		{
-
-		}
-
-		public void Start()
-		{
-			_canRun = true;
-			if (_workerThread == null)
-				_workerThread = new Thread(QueueThread);
-
-			if (!_workerThread.IsAlive)
-				_workerThread.Start();
-		}
-
-		public void Stop()
-		{
-			// shut down worker thread.
-			_canRun = false;
-			_event.Set();
-			if (!_workerThread.Join(5000))
-				_workerThread.Abort();
-			_workerThread = null;
-		}
-
-
-		/// <summary>
-		/// Used to process queued requests.
-		/// </summary>
-		private void QueueThread()
-		{
-			try
-			{
-				while (_canRun)
-				{
-					_event.WaitOne(Timeout.Infinite, true);
-					if (!_canRun)
-						break;
-
-					if (CurrentRequestCount > MaxRequestCount)
-					{
-						_event.Reset();
-						continue;
-					}
-
-					QueueItem item;
-					lock (_queue)
-					{
-						if (_queue.Count == 0)
-						{
-							_event.Reset();
-							continue;
-						}
-
-						item = _queue.Dequeue();
-					}
-
-					ThreadPool.QueueUserWorkItem(ProcessRequest, item);
-				}
-			}
-			catch (ThreadAbortException)
-			{
-
-			}
-		}
-
-		private void ProcessRequest(object state)
-		{
-			QueueItem item = (QueueItem)state;
-			_handler(item.Context, item.Request);
-		}
-
-	}
-
-	/// <summary>
-	/// Method used to process a queued request
-	/// </summary>
-	/// <param name="context">Context that the request was received from.</param>
-	/// <param name="request">Request to process.</param>
-	public delegate void ProcessRequestHandler(IHttpClientContext context, IHttpRequest request);
-}
diff --git a/HttpServer/trunk/HttpServer/RequestReceivedEventArgs.cs b/HttpServer/trunk/HttpServer/RequestReceivedEventArgs.cs
deleted file mode 100644
index 0af1497..0000000
--- a/HttpServer/trunk/HttpServer/RequestReceivedEventArgs.cs
+++ /dev/null
@@ -1,10 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.Text;
-
-namespace HttpServer
-{
-    class RequestReceivedEventArgs
-    {
-    }
-}
diff --git a/HttpServer/trunk/HttpServer/ResponseCookie.cs b/HttpServer/trunk/HttpServer/ResponseCookie.cs
deleted file mode 100644
index 8ad0de5..0000000
--- a/HttpServer/trunk/HttpServer/ResponseCookie.cs
+++ /dev/null
@@ -1,123 +0,0 @@
-using System;
-using System.Web;
-
-namespace HttpServer
-{
-    /// <summary>
-    /// cookie being sent back to the browser.
-    /// </summary>
-    /// <seealso cref="ResponseCookie"/>
-    public class ResponseCookie : RequestCookie
-    {
-        private const string _nullPath = "/";
-        private bool _persistant = false;
-        private DateTime _expires;
-        private string _path = "/";
-        private readonly string _domain;
-
-        #region constructors
-
-
-        /// <summary>
-        /// Constructor.
-        /// </summary>
-        /// <param name="id">cookie identifier</param>
-        /// <param name="content">cookie content</param>
-        /// <param name="expiresAt">cookie expiration date. Use DateTime.MinValue for session cookie.</param>
-        /// <exception cref="ArgumentNullException">id or content is null</exception>
-        /// <exception cref="ArgumentException">id is empty</exception>
-        public ResponseCookie(string id, string content, DateTime expiresAt)
-            : base(id, content)
-        {
-            if (expiresAt != DateTime.MinValue)
-            {
-                _expires = expiresAt;
-                _persistant = true;
-            }
-        }
-
-        /// <summary>
-        /// Create a new cookie
-        /// </summary>
-        /// <param name="name">name identifying the cookie</param>
-        /// <param name="value">cookie value</param>
-        /// <param name="expires">when the cookie expires. Setting DateTime.MinValue will delete the cookie when the session is closed.</param>
-        /// <param name="path">Path to where the cookie is valid</param>
-        /// <param name="domain">Domain that the cookie is valid for.</param>
-        public ResponseCookie(string name, string value, DateTime expires, string path, string domain)
-            : this(name, value, expires)
-        {
-            _domain = domain;
-            _path = path;
-        }
-
-        /// <summary>
-        /// Create a new cookie
-        /// </summary>
-        /// <param name="cookie">Name and value will be used</param>
-        /// <param name="expires">when the cookie expires.</param>
-        public ResponseCookie(RequestCookie cookie, DateTime expires)
-            : this(cookie.Name, cookie.Value, expires)
-        {}
-
-        #endregion
-
-        #region inherited methods
-
-        /// <summary>
-        /// Gets the cookie HTML representation.
-        /// </summary>
-        /// <returns>cookie string</returns>
-        public override string ToString()
-        {
-            string temp = string.Format("{0}={1}; ", HttpUtility.UrlEncode(Name), HttpUtility.UrlEncode(Value));
-            if (_persistant)
-            {
-                TimeSpan span = DateTime.Now - DateTime.UtcNow;
-                DateTime utc = _expires.Subtract(span);
-                temp += string.Format("expires={0};", utc.ToString("r"));
-            }
-            if (!string.IsNullOrEmpty(_path))
-                temp += string.Format("path={0}; ", _path);
-            if (!string.IsNullOrEmpty(_domain))
-                temp += string.Format("domain={0}; ", _domain);
-
-            return temp;
-        }
-
-        #endregion
-
-        #region public properties
-
-        /// <summary>
-        /// When the cookie expires.
-        /// DateTime.MinValue means that the cookie expires when the session do so.
-        /// </summary>
-        public DateTime Expires
-        {
-            get { return _expires; }
-            set
-            {
-                _expires = value;
-                _persistant = value != DateTime.MinValue;
-            }
-        }
-
-        /// <summary>
-        /// Cookie is only valid under this path.
-        /// </summary>
-        public string Path
-        {
-            get { return _path; }
-            set
-            {
-                if (!string.IsNullOrEmpty(value))
-                    _path = value;
-                else
-                    _path = _nullPath;
-            }
-        }
-
-        #endregion
-    }
-}
diff --git a/HttpServer/trunk/HttpServer/ResponseCookies.cs b/HttpServer/trunk/HttpServer/ResponseCookies.cs
deleted file mode 100644
index 6a80b11..0000000
--- a/HttpServer/trunk/HttpServer/ResponseCookies.cs
+++ /dev/null
@@ -1,108 +0,0 @@
-using System;
-using System.Collections;
-using System.Collections.Generic;
-
-namespace HttpServer
-{
-    /// <summary>
-    /// Cookies that should be set.
-    /// </summary>
-    public sealed class ResponseCookies : IEnumerable<ResponseCookie>
-    {
-        private readonly IDictionary<string, ResponseCookie> _items = new Dictionary<string, ResponseCookie>();
-
-        /// <summary>
-        /// Adds a cookie in the collection.
-        /// </summary>
-        /// <param name="cookie">cookie to add</param>
-        /// <exception cref="ArgumentNullException">cookie is null</exception>
-        public void Add(ResponseCookie cookie)
-        {
-            // Verifies the parameter
-            if (cookie == null)
-                throw new ArgumentNullException("cookie");
-            if (cookie.Name == null || cookie.Name.Trim() == string.Empty)
-                throw new ArgumentException("Name must be specified.");
-            if (cookie.Value == null || cookie.Value.Trim() == string.Empty)
-                throw new ArgumentException("Content must be specified.");
-
-            if (_items.ContainsKey(cookie.Name))
-                _items[cookie.Name] = cookie;
-            else _items.Add(cookie.Name, cookie);
-        }
-
-        /// <summary>
-        /// Copy a request cookie
-        /// </summary>
-        /// <param name="cookie"></param>
-        /// <param name="expires">When the cookie should expire</param>
-        public void Add(RequestCookie cookie, DateTime expires)
-        {
-            Add(new ResponseCookie(cookie, expires));
-        }
-
-        /// <summary>
-        /// Gets the count of cookies in the collection.
-        /// </summary>
-        public int Count
-        {
-            get { return _items.Count; }
-        }
-
-
-        /// <summary>
-        /// Gets the cookie of a given identifier (null if not existing).
-        /// </summary>
-        public ResponseCookie this[string id]
-        {
-            get
-            {
-                if (_items.ContainsKey(id))
-                    return _items[id];
-                else
-                    return null;
-            }
-            set
-            {
-                if (_items.ContainsKey(id))
-                    _items[id] = value;
-                else
-                    Add(value);
-            }
-        }
-        /// <summary>
-        /// Gets a collection enumerator on the cookie list.
-        /// </summary>
-        /// <returns>collection enumerator</returns>
-        public IEnumerator GetEnumerator()
-        {
-            return _items.Values.GetEnumerator();
-        }
-
-
-        /// <summary>
-        /// Remove all cookies
-        /// </summary>
-        public void Clear()
-        {
-            _items.Clear();
-        }
-
-        #region IEnumerable<ResponseCookie> Members
-
-        ///<summary>
-        ///Returns an enumerator that iterates through the collection.
-        ///</summary>
-        ///
-        ///<returns>
-        ///A <see cref="T:System.Collections.Generic.IEnumerator`1"></see> that can be used to iterate through the collection.
-        ///</returns>
-        ///<filterpriority>1</filterpriority>
-        IEnumerator<ResponseCookie> IEnumerable<ResponseCookie>.GetEnumerator()
-        {
-            return _items.Values.GetEnumerator();
-        }
-
-        #endregion
-    }
-}
diff --git a/HttpServer/trunk/HttpServer/Rules/IRule.cs b/HttpServer/trunk/HttpServer/Rules/IRule.cs
deleted file mode 100644
index a30cfca..0000000
--- a/HttpServer/trunk/HttpServer/Rules/IRule.cs
+++ /dev/null
@@ -1,24 +0,0 @@
-using System;
-
-namespace HttpServer.Rules
-{
-    /// <summary>
-    /// Rules are used to perform operations before a request is being handled.
-    /// Rules can be used to create routing etc.
-    /// </summary>
-    public interface IRule
-    {
-        /// <summary>
-        /// Process the incoming request.
-        /// </summary>
-        /// <param name="request">incoming HTTP request</param>
-        /// <param name="response">outgoing HTTP response</param>
-        /// <returns>true if response should be sent to the browser directly (no other rules or modules will be processed).</returns>
-        /// <remarks>
-        /// returning true means that no modules will get the request. Returning true is typically being done
-        /// for redirects.
-        /// </remarks>
-        /// <exception cref="ArgumentNullException">If request or response is null.</exception>
-        bool Process(IHttpRequest request, IHttpResponse response);
-    }
-}
\ No newline at end of file
diff --git a/HttpServer/trunk/HttpServer/Rules/RedirectRule.cs b/HttpServer/trunk/HttpServer/Rules/RedirectRule.cs
deleted file mode 100644
index f41c994..0000000
--- a/HttpServer/trunk/HttpServer/Rules/RedirectRule.cs
+++ /dev/null
@@ -1,101 +0,0 @@
-using System;
-
-namespace HttpServer.Rules
-{
-    /// <summary>
-    /// redirects from one URL to another.
-    /// </summary>
-    public class RedirectRule : IRule
-    {
-        private readonly string _fromUrl;
-        private readonly string _toUrl;
-        private readonly bool _shouldRedirect = false;
-
-        /// <summary>
-        /// Initializes a new instance of the <see cref="RedirectRule"/> class.
-        /// </summary>
-        /// <param name="fromUrl">Absolute path (no server name)</param>
-        /// <param name="toUrl">Absolute path (no server name)</param>
-        /// <example>
-        /// server.Add(new RedirectRule("/", "/user/index"));
-        /// </example>
-        public RedirectRule(string fromUrl, string toUrl)
-        {
-            _fromUrl = fromUrl;
-            _toUrl = toUrl;
-        }
-
-        /// <summary>
-        /// Initializes a new instance of the <see cref="RedirectRule"/> class.
-        /// </summary>
-        /// <param name="fromUrl">Absolute path (no server name)</param>
-        /// <param name="toUrl">Absolute path (no server name)</param>
-        /// <param name="shouldRedirect">true if request should be redirected, false if the request URI should be replaced.</param>
-        /// <example>
-        /// server.Add(new RedirectRule("/", "/user/index"));
-        /// </example>
-        public RedirectRule(string fromUrl, string toUrl, bool shouldRedirect)
-        {
-            _fromUrl = fromUrl;
-            _toUrl = toUrl;
-            _shouldRedirect = shouldRedirect;
-        }
-
-        /// <summary>
-        /// Gets string to match request URI with.
-        /// </summary>
-        /// <remarks>Is compared to request.Uri.AbsolutePath</remarks>
-        public string FromUrl
-        {
-            get { return _fromUrl; }
-        }
-
-        /// <summary>
-        /// Gets where to redirect.
-        /// </summary>
-        public string ToUrl
-        {
-            get { return _toUrl; }
-        }
-
-        /// <summary>
-        /// Gets whether server should redirect client.
-        /// </summary>
-        /// <remarks>
-        /// <c>false</c> means that the rule will replace
-        /// the current request URI with the new one from this class.
-        /// <c>true</c> means that a redirect response is sent to the client.
-        /// </remarks>
-        public bool ShouldRedirect
-        {
-            get { return _shouldRedirect; }
-        }
-
-        /// <summary>
-        /// Process the incoming request.
-        /// </summary>
-        /// <param name="request">incoming HTTP request</param>
-        /// <param name="response">outgoing HTTP response</param>
-        /// <returns>true if response should be sent to the browser directly (no other rules or modules will be processed).</returns>
-        /// <remarks>
-        /// returning true means that no modules will get the request. Returning true is typically being done
-        /// for redirects.
-        /// </remarks>
-        public virtual bool Process(IHttpRequest request, IHttpResponse response)
-        {
-            if (request.Uri.AbsolutePath == FromUrl)
-            {
-                if (!ShouldRedirect)
-                {
-                	request.Uri = new Uri(request.Uri, ToUrl);
-                	return false;
-                }
-
-            	response.Redirect(ToUrl);
-                return true;
-            }
-
-            return false;
-        }
-    }
-}
\ No newline at end of file
diff --git a/HttpServer/trunk/HttpServer/Rules/RegexRedirectRule.cs b/HttpServer/trunk/HttpServer/Rules/RegexRedirectRule.cs
deleted file mode 100644
index 7e3e53b..0000000
--- a/HttpServer/trunk/HttpServer/Rules/RegexRedirectRule.cs
+++ /dev/null
@@ -1,117 +0,0 @@
-using System;
-using System.Text.RegularExpressions;
-
-namespace HttpServer.Rules
-{
-    /// <summary>
-    /// Class to make dynamic binding of redirects. Instead of having to specify a number of similar redirect rules
-    /// a regular expression can be used to identify redirect URLs and their targets.
-    /// </summary>
-    /// <example>
-    /// <![CDATA[
-    /// new RegexRedirectRule("/(?<target>[a-z0-9]+)", "/users/${target}?find=true", RegexOptions.IgnoreCase)
-    /// ]]>
-    /// </example>
-    public class RegexRedirectRule : RedirectRule
-    {
-        private readonly Regex _matchUrl = null;
-
-        /// <summary>
-        /// Initializes a new instance of the <see cref="RegexRedirectRule"/> class.
-        /// </summary>
-        /// <param name="fromUrlExpression">Expression to match URL</param>
-        /// <param name="toUrlExpression">Expression to generate URL</param>
-        /// <example>
-        /// <![CDATA[
-        /// server.Add(new RegexRedirectRule("/(?<first>[a-zA-Z0-9]+)", "/user/${first}"));
-        /// Result of ie. /employee1 will then be /user/employee1
-        /// ]]>
-        /// </example>
-        public RegexRedirectRule(string fromUrlExpression, string toUrlExpression) : this(fromUrlExpression, toUrlExpression, RegexOptions.None, true)
-        {
-        }
-
-        #region public RegexRedirectRule(string fromUrlExpression, string toUrlExpression, RegexOptions options)
-        /// <summary>
-        /// Initializes a new instance of the <see cref="RegexRedirectRule"/> class.
-        /// </summary>
-        /// <param name="fromUrlExpression">Expression to match URL</param>
-		/// <param name="toUrlExpression">Expression to generate URL</param>
-        /// <param name="options">Regular expression options to use, can be null</param>
-        /// <example>
-        /// <![CDATA[
-        /// server.Add(new RegexRedirectRule("/(?<first>[a-zA-Z0-9]+)", "/user/{first}", RegexOptions.IgnoreCase));
-        /// Result of ie. /employee1 will then be /user/employee1
-        /// ]]>
-        /// </example>
-        public RegexRedirectRule(string fromUrlExpression, string toUrlExpression, RegexOptions options)
-            : this(fromUrlExpression, toUrlExpression, options, true)
-        {
-        }
-        #endregion
-
-        #region public RegexRedirectRule(string fromUrlExpression, string toUrlExpression, RegexOptions options, bool shouldRedirect)
-        /// <summary>
-        /// Initializes a new instance of the <see cref="RegexRedirectRule"/> class.
-        /// </summary>
-        /// <param name="fromUrlExpression">Expression to match URL</param>
-        /// <param name="toUrlExpression">Expression to generate URL</param>
-        /// <param name="options">Regular expression options to apply</param>
-		/// <param name="shouldRedirect"><c>true</c> if request should be redirected, <c>false</c> if the request URI should be replaced.</param>
-        /// <example>
-        /// <![CDATA[
-        /// server.Add(new RegexRedirectRule("/(?<first>[a-zA-Z0-9]+)", "/user/${first}", RegexOptions.None));
-        /// Result of ie. /employee1 will then be /user/employee1
-        /// ]]>
-        /// </example>
-        /// <exception cref="ArgumentNullException">Argument is null.</exception>
-        /// <seealso cref="RedirectRule.ShouldRedirect"/>
-        public RegexRedirectRule(string fromUrlExpression, string toUrlExpression, RegexOptions options, bool shouldRedirect) :
-            base(fromUrlExpression, toUrlExpression, shouldRedirect)
-        {
-            if(string.IsNullOrEmpty(fromUrlExpression))
-                throw new ArgumentNullException("fromUrlExpression");
-            if (string.IsNullOrEmpty(toUrlExpression))
-                throw new ArgumentNullException("toUrlExpression");
-
-            _matchUrl = new Regex(fromUrlExpression, options);
-        }
-        #endregion
-
-        /// <summary>
-        /// Process the incoming request.
-        /// </summary>
-        /// <param name="request">incoming HTTP request</param>
-        /// <param name="response">outgoing HTTP response</param>
-        /// <returns>true if response should be sent to the browser directly (no other rules or modules will be processed).</returns>
-        /// <remarks>
-        /// returning true means that no modules will get the request. Returning true is typically being done
-        /// for redirects.
-        /// </remarks>
-        /// <exception cref="ArgumentNullException">If request or response is null</exception>
-        public override bool Process(IHttpRequest request, IHttpResponse response)
-        {
-            if (request == null)
-                throw new ArgumentNullException("request");
-            if (response == null)
-                throw new ArgumentNullException("response");
-
-            // If a match is found
-            if (_matchUrl.IsMatch(request.Uri.AbsolutePath))
-            {
-                // Return the replace result
-                string resultUrl = _matchUrl.Replace(request.Uri.AbsolutePath, ToUrl);
-                if (!ShouldRedirect)
-            	{
-            		request.Uri = new Uri(request.Uri, resultUrl);
-            		return false;
-            	}
-
-                response.Redirect(resultUrl);
-                return true;
-            }
-
-            return false;
-        }
-    }
-}
\ No newline at end of file
diff --git a/HttpServer/trunk/HttpServer/Rules/Rule.cs b/HttpServer/trunk/HttpServer/Rules/Rule.cs
deleted file mode 100644
index 41b28ec..0000000
--- a/HttpServer/trunk/HttpServer/Rules/Rule.cs
+++ /dev/null
@@ -1,24 +0,0 @@
-using System;
-
-namespace HttpServer.Rules
-{
-    /// <summary>
-    /// Rules are used to perform operations before a request is being handled.
-    /// Rules can be used to create routing etc.
-    /// </summary>
-    public interface Rule
-    {
-        /// <summary>
-        /// Process the incoming request.
-        /// </summary>
-        /// <param name="request">incoming http request</param>
-        /// <param name="response">outgoing http response</param>
-        /// <returns>true if response should be sent to the browser directly (no other rules or modules will be processed).</returns>
-        /// <remarks>
-        /// returning true means that no modules will get the request. Returning true is typically being done
-        /// for redirects.
-        /// </remarks>
-        /// <exception cref="ArgumentNullException">If request or response is null.</exception>
-        bool Process(HttpRequest request, HttpResponse response);
-    }
-}
\ No newline at end of file
diff --git a/HttpServer/trunk/HttpServer/Sessions/HttpSession.cs b/HttpServer/trunk/HttpServer/Sessions/HttpSession.cs
deleted file mode 100644
index 50175a2..0000000
--- a/HttpServer/trunk/HttpServer/Sessions/HttpSession.cs
+++ /dev/null
@@ -1,84 +0,0 @@
-using System;
-using System.Runtime.Serialization;
-
-namespace HttpServer
-{
-    /// <summary>
-    /// Interface for sessions
-    /// </summary>
-    public interface HttpSession : IDisposable
-    {
-        /// <summary>
-        /// Session id
-        /// </summary>
-        string Id { get; }
-
-        /// <summary>
-        /// Should
-        /// </summary>
-        /// <param name="name">Name of the session variable</param>
-        /// <returns>null if it's not set</returns>
-        /// <exception cref="SerializationException">If the object cant be serialized.</exception>
-        object this[string name] { get; set; }
-
-        /// <summary>
-        /// When the session was last accessed.
-        /// This property is touched by the http server each time the
-        /// session is requested.
-        /// </summary>
-        DateTime Accessed { get; set; }
-
-        /// <summary>
-        /// Number of session variables.
-        /// </summary>
-        int Count { get; }
-
-        /// <summary>
-        /// Remove everything from the session
-        /// </summary>
-        void Clear();
-
-		/// <summary>
-		/// Remove everything from the session
-		/// </summary>
-		/// <param name="expires">True if the session is cleared due to expiration</param>
-		void Clear(bool expires);
-
-		/// <summary>
-		/// Event triggered upon clearing the session
-		/// </summary>
-		event HttpSessionClearedHandler BeforeClear;
-    }
-
-	/// <summary>
-	/// Arguments sent when a <see cref="HttpSession" /> is cleared
-	/// </summary>
-	public class HttpSessionClearedArgs
-	{
-		private readonly bool _expired;
-
-		/// <summary>
-		/// Instantiates the arguments for the event
-		/// </summary>
-		/// <param name="expired">True if the session is cleared due to expiration</param>
-		public HttpSessionClearedArgs(bool expired)
-		{
-			_expired = expired;
-		}
-
-		/// <summary>
-		/// Returns true if the session is cleared due to expiration
-		/// </summary>
-		public bool Expired
-		{
-			get { return _expired; }
-		}
-	}
-
-	/// <summary>
-	/// Delegate for when a HttpSession is cleared
-	/// </summary>
-	/// <param name="session">The session that is being cleared</param>
-	/// <param name="args">Arguments for the clearing</param>
-	public delegate void HttpSessionClearedHandler(HttpSession session, HttpSessionClearedArgs args);
-}
\ No newline at end of file
diff --git a/HttpServer/trunk/HttpServer/Sessions/HttpSessionStore.cs b/HttpServer/trunk/HttpServer/Sessions/HttpSessionStore.cs
deleted file mode 100644
index 529ddaa..0000000
--- a/HttpServer/trunk/HttpServer/Sessions/HttpSessionStore.cs
+++ /dev/null
@@ -1,62 +0,0 @@
-using System;
-
-namespace HttpServer.Sessions
-{
-    /// <summary>
-    /// The session store is used to manage sessions, the store itself
-    /// can save it to any place it like as a database, memory or something else.
-    /// </summary>
-    public interface HttpSessionStore
-    {
-        /// <summary>
-        /// Load a session from the store
-        /// </summary>
-        /// <param name="sessionId"></param>
-        /// <returns>null if session is not found.</returns>
-        HttpSession this[string sessionId] { get; }
-
-        /// <summary>
-        /// Number of minutes before a session expires.
-        /// Default is 20 minutes.
-        /// </summary>
-        int ExpireTime { get; set; }
-
-        /// <summary>
-        /// Creates a new http session
-        /// </summary>
-        /// <returns>A HttpSession object</returns>
-        HttpSession Create();
-
-        /// <summary>
-        /// Creates a new http session with a specific id
-        /// </summary>
-        /// <returns>A HttpSession object.</returns>
-        HttpSession Create(string id);
-
-        /// <summary>
-        /// Load an existing session.
-        /// </summary>
-        /// <param name="sessionId"></param>
-        /// <returns>A session if found; otherwise null.</returns>
-        HttpSession Load(string sessionId);
-
-        /// <summary>
-        /// Save an updated session to the store.
-        /// </summary>
-        /// <param name="session"></param>
-        /// <exception cref="ArgumentException">If Id property have not been specified.</exception>
-        void Save(HttpSession session);
-
-        /// <summary>
-        /// We use the flyweight pattern which reuses small objects
-        /// instead of creating new each time.
-        /// </summary>
-        /// <param name="session">EmptyLanguageNode (unused) session that should be reused next time Create is called.</param>
-        void AddUnused(HttpSession session);
-
-        /// <summary>
-        /// Remove expired sessions
-        /// </summary>
-        void Cleanup();
-    }
-}
\ No newline at end of file
diff --git a/HttpServer/trunk/HttpServer/Sessions/IHttpSession.cs b/HttpServer/trunk/HttpServer/Sessions/IHttpSession.cs
deleted file mode 100644
index 7303dc6..0000000
--- a/HttpServer/trunk/HttpServer/Sessions/IHttpSession.cs
+++ /dev/null
@@ -1,84 +0,0 @@
-using System;
-using System.Runtime.Serialization;
-
-namespace HttpServer.Sessions
-{
-    /// <summary>
-    /// Interface for sessions
-    /// </summary>
-    public interface IHttpSession : IDisposable
-    {
-        /// <summary>
-        /// Session id
-        /// </summary>
-        string Id { get; }
-
-        /// <summary>
-        /// Should
-        /// </summary>
-        /// <param name="name">Name of the session variable</param>
-        /// <returns>null if it's not set</returns>
-        /// <exception cref="SerializationException">If the object cant be serialized.</exception>
-        object this[string name] { get; set; }
-
-        /// <summary>
-        /// When the session was last accessed.
-        /// This property is touched by the http server each time the
-        /// session is requested.
-        /// </summary>
-        DateTime Accessed { get; set; }
-
-        /// <summary>
-        /// Number of session variables.
-        /// </summary>
-        int Count { get; }
-
-        /// <summary>
-        /// Remove everything from the session
-        /// </summary>
-        void Clear();
-
-        /// <summary>
-        /// Remove everything from the session
-        /// </summary>
-        /// <param name="expires">True if the session is cleared due to expiration</param>
-        void Clear(bool expires);
-
-        /// <summary>
-        /// Event triggered upon clearing the session
-        /// </summary>
-        event HttpSessionClearedHandler BeforeClear;
-    }
-
-    /// <summary>
-    /// Arguments sent when a <see cref="IHttpSession" /> is cleared
-    /// </summary>
-    public class HttpSessionClearedArgs
-    {
-        private readonly bool _expired;
-
-        /// <summary>
-        /// Instantiates the arguments for the event
-        /// </summary>
-        /// <param name="expired">True if the session is cleared due to expiration</param>
-        public HttpSessionClearedArgs(bool expired)
-        {
-            _expired = expired;
-        }
-
-        /// <summary>
-        /// Returns true if the session is cleared due to expiration
-        /// </summary>
-        public bool Expired
-        {
-            get { return _expired; }
-        }
-    }
-
-    /// <summary>
-    /// Delegate for when a IHttpSession is cleared
-    /// </summary>
-    /// <param name="session"><see cref="IHttpSession"/> this is being cleared.</param>
-    /// <param name="args">Arguments for the clearing</param>
-    public delegate void HttpSessionClearedHandler(object session, HttpSessionClearedArgs args);
-}
\ No newline at end of file
diff --git a/HttpServer/trunk/HttpServer/Sessions/IHttpSessionStore.cs b/HttpServer/trunk/HttpServer/Sessions/IHttpSessionStore.cs
deleted file mode 100644
index a660c31..0000000
--- a/HttpServer/trunk/HttpServer/Sessions/IHttpSessionStore.cs
+++ /dev/null
@@ -1,72 +0,0 @@
-using System;
-
-namespace HttpServer.Sessions
-{
-    /// <summary>
-    /// A session store is used to store and load sessions on a media.
-    /// The default implementation (<see cref="MemorySessionStore"/>) saves/retrieves sessions from memory.
-    /// </summary>
-    public interface IHttpSessionStore
-    {
-        /// <summary>
-        /// Load a session from the store
-        /// </summary>
-        /// <param name="sessionId"></param>
-        /// <returns>null if session is not found.</returns>
-        IHttpSession this[string sessionId] { get; }
-
-        /// <summary>
-        /// Number of minutes before a session expires.
-        /// </summary>
-        /// <value>Default time is 20 minutes.</value>
-        int ExpireTime { get; set; }
-
-        /// <summary>
-        /// Creates a new http session with a generated id.
-        /// </summary>
-        /// <returns>A <see cref="IHttpSession"/> object</returns>
-        IHttpSession Create();
-
-        /// <summary>
-        /// Creates a new http session with a specific id
-        /// </summary>
-        /// <param name="id">Id used to identify the new cookie..</param>
-        /// <returns>A <see cref="IHttpSession"/> object.</returns>
-        /// <remarks>
-        /// Id should be generated by the store implementation if it's null or <see cref="string.Empty"/>.
-        /// </remarks>
-        IHttpSession Create(string id);
-
-        /// <summary>
-        /// Load an existing session.
-        /// </summary>
-        /// <param name="sessionId">Session id (usually retrieved from a client side cookie).</param>
-        /// <returns>A session if found; otherwise null.</returns>
-        IHttpSession Load(string sessionId);
-
-        /// <summary>
-        /// Save an updated session to the store.
-        /// </summary>
-        /// <param name="session">Session id (usually retrieved from a client side cookie).</param>
-        /// <exception cref="ArgumentException">If Id property have not been specified.</exception>
-        void Save(IHttpSession session);
-
-        /// <summary>
-        /// We use the flyweight pattern which reuses small objects
-        /// instead of creating new each time.
-        /// </summary>
-        /// <param name="session">Unused session that should be reused next time Create is called.</param>
-        void AddUnused(IHttpSession session);
-
-        /// <summary>
-        /// Remove expired sessions
-        /// </summary>
-        void Cleanup();
-
-        /// <summary>
-        /// Remove a session
-        /// </summary>
-        /// <param name="sessionId">id of the session.</param>
-        void Remove(string sessionId);
-    }
-}
\ No newline at end of file
diff --git a/HttpServer/trunk/HttpServer/Sessions/MemorySession.cs b/HttpServer/trunk/HttpServer/Sessions/MemorySession.cs
deleted file mode 100644
index 099f743..0000000
--- a/HttpServer/trunk/HttpServer/Sessions/MemorySession.cs
+++ /dev/null
@@ -1,138 +0,0 @@
-using System;
-using System.Collections.Generic;
-
-namespace HttpServer.Sessions
-{
-    /// <summary>
-    /// A session stored in memory.
-    /// </summary>
-    public class MemorySession : IHttpSession
-    {
-        private string _id;
-        private DateTime _accessed;
-        private readonly IDictionary<string, object> _vars = new Dictionary<string, object>();
-        private bool _changed = false;
-
-        /// <summary>
-        ///
-        /// </summary>
-        /// <param name="id">A unique id used by the sessions store to identify the session</param>
-        public MemorySession(string id)
-        {
-            _id = id;
-        }
-
-        /// <summary>
-        /// Id
-        /// </summary>
-        /// <param name="id"></param>
-        internal void SetId(string id)
-        {
-            _id = id;
-        }
-        #region IHttpSession Members
-
-        /// <summary>
-        /// Session id
-        /// </summary>
-        public string Id
-        {
-            get { return _id; }
-        }
-
-        /// <summary>
-        /// Should
-        /// </summary>
-        /// <param name="name">Name of the session variable</param>
-        /// <returns>null if it's not set</returns>
-        public object this[string name]
-        {
-            get
-            {
-				if (_vars.ContainsKey(name))
-				{
-					_accessed = DateTime.Now;
-					return _vars[name];
-				}
-
-				return null;
-            }
-            set
-            {
-                if (_vars.ContainsKey(name))
-                    _vars[name] = value;
-                else
-                    _vars.Add(name, value);
-
-                _changed = true;
-                _accessed = DateTime.Now;
-            }
-        }
-
-        /// <summary>
-        /// when the session was last accessed.
-        /// </summary>
-        /// <remarks>
-        /// Used to determine when the session should be removed.
-        /// </remarks>
-        public DateTime Accessed
-        {
-            get { return _accessed; }
-            set { _accessed = value; }
-        }
-
-        /// <summary>
-        /// Number of values in the session
-        /// </summary>
-        public int Count
-        {
-            get { return _vars.Count; }
-        }
-
-        /// <summary>
-        /// Flag to indicate that the session have been changed
-        /// and should be saved into the session store.
-        /// </summary>
-        public bool Changed
-        {
-            get { return _changed; }
-            set { _changed = value; }
-        }
-
-        /// <summary>
-        /// Remove everything from the session
-        /// </summary>
-        public void Clear()
-        {
-			Clear(false);
-        }
-
-		/// <summary>
-		/// Clears the specified expire.
-		/// </summary>
-		/// <param name="expires">True if the session is cleared due to expiration</param>
-		public void Clear(bool expires)
-		{
-			BeforeClear(this, new HttpSessionClearedArgs(expires));
-
-			_vars.Clear();
-			_accessed = DateTime.Now;
-			_changed = true;
-		}
-
-    	///<summary>
-        ///Performs application-defined tasks associated with freeing, releasing, or resetting unmanaged resources.
-        ///</summary>
-        ///<filterpriority>2</filterpriority>
-        public void Dispose()
-        {
-        }
-
-    	/// <summary>
-    	/// Event triggered upon clearing the session
-    	/// </summary>
-    	public event HttpSessionClearedHandler BeforeClear = delegate{};
-
-        #endregion
-    }
-}
\ No newline at end of file
diff --git a/HttpServer/trunk/HttpServer/Sessions/MemorySessionStore.cs b/HttpServer/trunk/HttpServer/Sessions/MemorySessionStore.cs
deleted file mode 100644
index 402447b..0000000
--- a/HttpServer/trunk/HttpServer/Sessions/MemorySessionStore.cs
+++ /dev/null
@@ -1,191 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.Threading;
-
-namespace HttpServer.Sessions
-{
-    /// <summary>
-    /// Session store using memory for each session.
-    /// </summary>
-    public class MemorySessionStore : IHttpSessionStore
-    {
-        private readonly IDictionary<string, IHttpSession> _sessions = new Dictionary<string, IHttpSession>();
-        private readonly Queue<IHttpSession> _unusedSessions = new Queue<IHttpSession>();
-        private int _expireTime = 20;
-    	private Timer _expireTimer;
-
-		/// <summary>
-		/// Initializes the class setting the expirationtimer to clean the session every minute
-		/// </summary>
-		public MemorySessionStore()
-		{
-			 _expireTimer = new Timer(Cleanup, null, 60000, 60000);
-		}
-
-		/// <summary>
-		/// Delegate for the cleanup timer
-		/// </summary>
-		private void Cleanup(object o)
-		{
-			Cleanup();
-		}
-
-        #region IHttpSessionStore Members
-
-        /// <summary>
-        /// Load a session from the store
-        /// </summary>
-        /// <param name="sessionId"></param>
-        /// <returns>null if session is not found.</returns>
-        public IHttpSession this[string sessionId]
-        {
-            get
-            {
-                lock (_sessions)
-                {
-                    if (!_sessions.ContainsKey(sessionId))
-                        return null;
-
-                	_sessions[sessionId].Accessed = DateTime.Now;
-                    if (sessionId.Length > 0)
-                        ((MemorySession)_sessions[sessionId]).SetId(Guid.NewGuid().ToString());
-                    return _sessions[sessionId];
-                }
-            }
-        }
-
-        /// <summary>
-        /// Creates a new http session
-        /// </summary>
-        /// <returns></returns>
-        public IHttpSession Create()
-        {
-            return Create(Guid.NewGuid().ToString());
-        }
-
-
-        /// <summary>
-        /// Creates a new http session with a specific id
-        /// </summary>
-        /// <param name="id">Id used to identify the new cookie..</param>
-        /// <returns>A <see cref="IHttpSession"/> object.</returns>
-        /// <remarks>
-        /// Id should be generated by the store implementation if it's null or <see cref="string.Empty"/>.
-        /// </remarks>
-        public IHttpSession Create(string id)
-        {
-            if (string.IsNullOrEmpty(id))
-                id = Guid.NewGuid().ToString();
-
-            lock (_unusedSessions)
-            {
-                if (_unusedSessions.Count > 0)
-                {
-                    MemorySession session = _unusedSessions.Dequeue() as MemorySession;
-                    if (session != null)
-                    {
-                        session.SetId(id);
-                        return session;
-                    }
-                }
-            }
-
-            return new MemorySession(id);
-        }
-
-        /// <summary>
-        /// Load an existing session.
-        /// </summary>
-        /// <param name="sessionId"></param>
-        /// <returns></returns>
-        public IHttpSession Load(string sessionId)
-        {
-            if (_sessions.ContainsKey(sessionId))
-                return _sessions[sessionId];
-
-            return null;
-        }
-
-        /// <summary>
-        /// Save an updated session to the store.
-        /// </summary>
-        /// <param name="session"></param>
-        public void Save(IHttpSession session)
-        {
-            lock (_sessions)
-            {
-                if (_sessions.ContainsKey(session.Id))
-                    _sessions[session.Id] = session;
-                else
-                    _sessions.Add(session.Id, session);
-            }
-        }
-
-        /// <summary>
-        /// We use the flyweight pattern which reuses small objects
-        /// instead of creating new each time.
-        /// </summary>
-        /// <param name="session">EmptyLanguageNode (unused) session that should be reused next time Create is called.</param>
-        public void AddUnused(IHttpSession session)
-        {
-            lock (_unusedSessions)
-                _unusedSessions.Enqueue(session);
-        }
-
-        /// <summary>
-        /// Remove expired sessions
-        /// </summary>
-        public void Cleanup()
-        {
-            lock (_sessions)
-            {
-                foreach (KeyValuePair<string, IHttpSession> pair in _sessions)
-                {
-                    // don't reuse used sessions since they may be in use when we remove them from the list.
-                    TimeSpan liveTime = DateTime.Now.Subtract(pair.Value.Accessed);
-                    if (liveTime.TotalMinutes > _expireTime)
-                    {
-						pair.Value.Clear(true);
-                        _sessions.Remove(pair.Key);
-                        break;
-                    }
-                }
-            }
-        }
-
-        /// <summary>
-        /// Remove a session
-        /// </summary>
-        /// <param name="sessionId">id of the session.</param>
-        public void Remove(string sessionId)
-        {
-            IHttpSession session;
-            lock (_sessions)
-            {
-                if (!_sessions.ContainsKey(sessionId))
-                    return;
-
-                session = _sessions[sessionId];
-                _sessions.Remove(sessionId);
-            }
-
-            session.Clear();
-            lock (_unusedSessions)
-                _unusedSessions.Enqueue(session);
-        }
-
-        /// <summary>
-        /// Number of minutes before a session expires.
-        /// Default is 20 minutes.
-        /// </summary>
-        public int ExpireTime
-        {
-            get { return _expireTime; }
-            set { _expireTime = value; }
-        }
-
-        #endregion
-
-
-    }
-}
\ No newline at end of file
diff --git a/HttpServer/trunk/HttpServer/Templates/TemplateEngine.cs b/HttpServer/trunk/HttpServer/Templates/TemplateEngine.cs
deleted file mode 100644
index 8759b83..0000000
--- a/HttpServer/trunk/HttpServer/Templates/TemplateEngine.cs
+++ /dev/null
@@ -1,19 +0,0 @@
-using System.Collections.Generic;
-using System.IO;
-
-namespace Tiny.Web.Templates
-{
-    public interface TemplateEngine
-    {
-        /// <summary>
-        /// Render the template
-        /// </summary>
-        /// <param name="variables"></param>
-        /// <param name="fileName"></param>
-        /// <returns>A generated file</returns>
-        /// <exception cref="FileNotFoundException">If template is not found.</exception>
-        string Render(string fileName, IDictionary<string, object> variables);
-
-        string Render(string fileName, params object[] args);
-    }
-}
\ No newline at end of file
diff --git a/HttpServer/trunk/HttpServer/Templates/TemplateProvider.cs b/HttpServer/trunk/HttpServer/Templates/TemplateProvider.cs
deleted file mode 100644
index 3a4329d..0000000
--- a/HttpServer/trunk/HttpServer/Templates/TemplateProvider.cs
+++ /dev/null
@@ -1,47 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.Text;
-
-namespace Tiny.Web.Templates
-{
-    /// <summary>
-    /// The purpose of this class is to provide template engines
-    /// to the controllers.
-    /// </summary>
-    public class TemplateProvider
-    {
-        private IDictionary<string, TemplateEngine> _engines = new Dictionary<string, TemplateEngine>();
-        private TemplateEngine _defaultEngine = new TinyTemplate();
-
-        public TemplateEngine DefaultEngine
-        {
-            get { return _defaultEngine; }
-            set { _defaultEngine = value; }
-        }
-
-        public void Add(string extension, TemplateEngine engine)
-        {
-            if (!extension.Equals("tm"))
-                Console.WriteLine("Warning: key is set to 'tm' regardless of the value of extension");
-            _engines.Add("tm", engine);
-        }
-
-        /// <summary>
-        /// Get a template engine.
-        /// The default template engine is TemplateMachine and it's extension is "tm".
-        /// </summary>
-        /// <param name="extension">File type that we want to get an engine for</param>
-        /// <returns></returns>
-        /// <example>
-        /// ITemplateEngine engine = server.GetEngine("tm");
-        /// </example>
-        public TemplateEngine GetEngine(string extension)
-        {
-            if (_engines.ContainsKey(extension))
-                return _engines[extension];
-            else
-                return DefaultEngine;
-        }
-
-    }
-}
diff --git a/HttpServer/trunk/HttpServer/Templates/TinyTemplate.cs b/HttpServer/trunk/HttpServer/Templates/TinyTemplate.cs
deleted file mode 100644
index 45ede5b..0000000
--- a/HttpServer/trunk/HttpServer/Templates/TinyTemplate.cs
+++ /dev/null
@@ -1,360 +0,0 @@
-using System;
-using System.CodeDom.Compiler;
-using System.Collections.Generic;
-using System.IO;
-using System.Reflection;
-using System.Text;
-using System.Text.RegularExpressions;
-using Microsoft.CSharp;
-
-namespace Tiny.Web.Templates
-{
-    /// <summary>
-    /// Simple template engine.
-    /// This engine turns the templates into valid C# code and compile it at runtime
-    /// to valid .Net objects. This makes the templates blazing fast, the templates
-    /// are only reparsed / recompiles if they have been changed on disk.
-    /// </summary>
-    public class TinyTemplate : TemplateEngine
-    {
-        class TemplateInfo
-        {
-            public string fileName;
-            public DateTime Changed;
-            public object compiledTemplate;
-        }
-        private IDictionary<string, TemplateInfo> _compiledTemplates =new Dictionary<string, TemplateInfo>();
-
-
-        public string Render(string fileName, IDictionary<string, object> variables)
-        {
-            object[] args = DictionaryToArray(variables);
-            return Render(fileName, args);
-        }
-
-        public string Render(string fileName, params object[] args)
-        {
-            // Validate the args
-            if (args.Length % 2 != 0)
-                throw new ArgumentException("args must consist of key/value pairs, where the key is a string", "args");
-            for (int i = 0; i < args.Length; i += 2 )
-            {
-                if (args[i].GetType() != typeof(string))
-                    throw new ArgumentException("Args array must be string, object, string, object ...., where the strings are the argument names", "args");
-            }
-
-            TemplateInfo template = null;
-            // Template exists, invoke it if have not been changed on disk.
-            if (_compiledTemplates.ContainsKey(fileName))
-            {
-                TemplateInfo ti = _compiledTemplates[fileName];
-
-                // Template have changed, let's reload it
-                if (ti.Changed < File.GetLastWriteTime(fileName))
-                {
-                    object templateClass = BuildTemplate(args, fileName);
-                    if (templateClass == null)
-                        return null;
-
-                    ti.compiledTemplate = templateClass;
-                    ti.Changed = DateTime.Now;
-                }
-                template = ti;
-            }
-            else
-            {
-                object templateClass = BuildTemplate(args, fileName);
-                if (templateClass == null)
-                    return null;
-                template = new TemplateInfo();
-                template.compiledTemplate = templateClass;
-                template.fileName = fileName;
-                template.Changed = DateTime.Now;
-                _compiledTemplates.Add(fileName, template);
-            }
-
-            object o = template.compiledTemplate;
-            return (string)o.GetType().InvokeMember("RunTemplate", BindingFlags.Instance | BindingFlags.Public | BindingFlags.InvokeMethod, null, o, new object[] { args });
-        }
-
-        private object[] DictionaryToArray(IDictionary<string, object> variables)
-        {
-            object[] args = new object[variables.Count];
-            int index = 0;
-            foreach (KeyValuePair<string, object> pair in variables)
-            {
-                args[index] = pair.Value;
-                ++index;
-            }
-
-            return args;
-        }
-
-        private object BuildTemplate(object[] args, string fileName)
-        {
-            if (args.Length % 2 != 0)
-                throw new ArgumentException("Args must consist of string, object, string, object, string, object as key/value couple.");
-
-            string text = File.ReadAllText(fileName);
-            StringBuilder sb = new StringBuilder(text.Length * 2);
-
-            IList<string> assemblies = new List<string>();
-            IList<string> namespaces = new List<string>();
-
-            AddNameSpace(namespaces,typeof(Forms.ObjectForm));
-
-            for (int i = 0; i < args.Length; i += 2)
-            {
-                AddAssembly(assemblies, args[i+1].GetType());
-                AddNameSpace(namespaces, args[i+1].GetType());
-            }
-
-            foreach (string s in namespaces)
-                sb.AppendLine("using " + s + ";");
-
-            sb.Append("namespace Tiny.Templates { class TemplateClass {\r\n");
-
-            for (int i = 0; i < args.Length; i += 2)
-                sb.Append(GetTypeName(args[i + 1].GetType()) + " " + args[i] + ";\r\n");
-            sb.Append("public string RunTemplate(object[] args) {\r\n");
-            sb.Append("System.Text.StringBuilder sb = new System.Text.StringBuilder();\r\n");
-
-            for (int i = 1; i < args.Length; i += 2)
-                sb.Append("this." + args[i-1] + " = (" + GetTypeName(args[i].GetType()) + ")args[" + i  + "];\r\n");
-
-            BuildTemplateString(sb, text);
-            sb.Append("\r\nreturn sb.ToString(); }}}");
-
-            return CompileTemplate(assemblies, sb);
-        }
-
-
-        private void AddNameSpace(IList<string> _namespaces, Type type)
-        {
-            string ns = type.Namespace;
-            bool found = false;
-            foreach (string s in _namespaces)
-            {
-                if (string.Compare(s, ns, true) == 0)
-                {
-                    found = true;
-                    break;
-                }
-            }
-
-            if (!found)
-                _namespaces.Add(ns);
-
-            foreach (Type argument in type.GetGenericArguments())
-                AddNameSpace(_namespaces, argument);
-        }
-
-        private void AddAssembly(IList<string> _assemblies, Type type)
-        {
-            string path = type.Assembly.Location;
-            bool found = false;
-            foreach (string s in _assemblies)
-            {
-                if (string.Compare(s, path, true) == 0)
-                {
-                    found = true;
-                    break;
-                }
-            }
-            if (!found)
-                _assemblies.Add(path);
-
-            foreach (Type argument in type.GetGenericArguments())
-                AddNameSpace(_assemblies, argument);
-        }
-
-        /// <summary>
-        /// Used to get correct names for generics.
-        /// </summary>
-        /// <param name="type"></param>
-        /// <returns></returns>
-        public string GetTypeName(Type type)
-        {
-            string typeName = type.Name;
-            if (type.IsGenericType && !type.IsGenericTypeDefinition)
-            {
-                StringBuilder sb = new StringBuilder();
-                sb.AppendFormat(typeName.Substring(0, typeName.IndexOf('`')));
-                sb.Append("<");
-                bool first = true;
-                foreach (Type genericArgumentType in type.GetGenericArguments())
-                {
-                    if (!first)
-                        sb.Append(", ");
-                    first = false;
-                    sb.Append(GetTypeName(genericArgumentType));
-                }
-                sb.Append(">");
-                return sb.ToString();
-            }
-            else
-                return typeName;
-        }
-
-        private object CompileTemplate(IList<string> _assemblies, StringBuilder classText)
-        {
-            CSharpCodeProvider codeProvider = new CSharpCodeProvider();
-            CompilerParameters parameters = new CompilerParameters();
-            parameters.GenerateExecutable = false;
-            parameters.GenerateInMemory = true;
-            parameters.ReferencedAssemblies.Add("System.dll");
-            parameters.ReferencedAssemblies.Add(Assembly.GetExecutingAssembly().Location);
-            foreach (string assembly in _assemblies)
-                parameters.ReferencedAssemblies.Add(ResolveAssemblyPath(assembly));
-
-            CompilerResults results = codeProvider.CompileAssemblyFromSource(parameters, classText.ToString());
-            if (results.Errors.Count > 0)
-            {
-                string errs = "";
-
-                foreach (CompilerError CompErr in results.Errors)
-                {
-                    errs += "Template: " + CompErr.FileName + Environment.NewLine +
-                        "Line number: " + CompErr.Line + Environment.NewLine +
-                        "Error: " + CompErr.ErrorNumber + " '" + CompErr.ErrorText + "'";
-                }
-                Console.WriteLine(errs);
-                return null;
-            }
-            else
-            {
-                Assembly generatorAssembly = results.CompiledAssembly;
-                object classObj = generatorAssembly.CreateInstance("Tiny.Templates.TemplateClass", false, BindingFlags.CreateInstance, null, null, null, null);
-                return classObj;
-            }
-
-        }
-
-        private string ResolveAssemblyPath(string name)
-        {
-            if (name.EndsWith(".dll", StringComparison.InvariantCultureIgnoreCase))
-                return name;
-
-            name = name.ToLower();
-
-            foreach (Assembly assembly in AppDomain.CurrentDomain.GetAssemblies())
-            {
-                if (IsDynamicAssembly(assembly))
-                {
-                    continue;
-                }
-
-                if (Path.GetFileNameWithoutExtension(assembly.Location).ToLower().Equals(name))
-                {
-                    return assembly.Location;
-                }
-            }
-
-            string foo = name.Substring(name.Length-4,1);
-            if (!(foo.Equals(".")))
-                name += ".dll";
-                //return Path.GetFullPath(name);
-            return Path.GetFullPath(name);
-        }
-
-        private void ParseInstructions(string code)
-        {
-            string tempcode = code;
-            //Modify this part if you want to read the
-
-            //<%@ tags also you can implement your own tags here.
-
-            tempcode = Regex.Replace(tempcode,
-                       "(?i)<%@\\s*Property.*?%>", string.Empty);
-            tempcode = Regex.Replace(tempcode,
-                       "(?i)<%@\\s*Assembly.*?%>", string.Empty);
-            tempcode = Regex.Replace(tempcode,
-                       "(?i)<%@\\s*Import.*?%>", string.Empty);
-            tempcode = Regex.Replace(tempcode,
-                       "(?i)<%@\\s*CodeTemplate.*?%>", string.Empty);
-            //For the demo I am only dealing with the <%= and <% tags
-        }
-
-        private bool IsDynamicAssembly(Assembly assembly)
-        {
-            return assembly.ManifestModule.Name.StartsWith("<");
-        }
-
-        private string BuildTemplateString(StringBuilder sb, string data)
-        {
-            /*sb.Append("sb.Append(@\"");
-            data = data.Replace("-%>" + Environment.NewLine, "%>");
-            data = Regex.Replace(data, @"<%=.*?%>", new MatchEvaluator(RefineCalls), RegexOptions.Singleline);
-            data = Regex.Replace(data, @"<%.*?%>", new MatchEvaluator(RefineCalls2), RegexOptions.Singleline);
-            sb.Append(data);
-            sb.Append("\");");
-            return sb.ToString();*/
-
-            // First replace string versions
-
-            //StringBuilder sb = new StringBuilder();
-            string substring;
-            int lastStartPos = 0;
-            int startTagPos = data.IndexOf("<%");
-            int endPos = 0;
-            sb.Append("sb.Append(@\"");
-            while (startTagPos != -1)
-            {
-                endPos = data.IndexOf("%>", startTagPos);
-
-                substring = data.Substring(lastStartPos, startTagPos - lastStartPos);
-                string data2 = substring.Replace("\"", "\"\"");
-                sb.Append(data2);
-
-                //1. Is it an echo?
-                if (data[startTagPos + 2] == '=')
-                {
-                    sb.Append("\");\r\n");
-                    sb.Append("sb.Append(");
-                    //sb.Append("sb.Append(;\r\n";
-                    sb.Append(data.Substring(startTagPos + 3, endPos - startTagPos - 3));
-                    //sb.Append("\");\r\n sb.Append(@\"");
-                    sb.Append(");\r\n sb.Append(@\"");
-                }
-                else
-                {
-                    //1. Copy everything before our pos
-                    sb.Append("\");\r\n");
-                    //substring = ;
-                    //data2 = substring.Replace("\"", "\"\"");
-                    data2 = data.Substring(startTagPos + 2, endPos - startTagPos - 2);
-                    sb.Append(data2);
-                    sb.Append("\r\nsb.Append(@\"");
-                }
-
-                lastStartPos = endPos + 2;
-                startTagPos = data.IndexOf("<%", endPos);
-            }
-            sb.Append(data.Substring(lastStartPos).Replace("\"", "\"\""));
-            sb.Append("\");\r\n");
-            //sb0.Append(sb);
-            return sb.ToString();
-        }
-
-        private string RefineCalls(Match m)
-        {
-            // Get the matched string.
-            string x = m.ToString();
-            // If the first char is lower case...
-            x = Regex.Replace(x, "<%=", "\");\r\nsb.Append(");
-            x = Regex.Replace(x, "%>", ");\r\nsb.Append(@\"");
-
-            return x;
-        }
-        private string RefineCalls2(Match m)
-        {
-            // Get the matched string.
-            string x = m.ToString();
-            // If the first char is lower case...
-            x = Regex.Replace(x, "<%", "\");\r\n");
-            x = Regex.Replace(x, "%>", "sb.Append(@\"");
-
-            return x;
-        }
-    }
-}
diff --git a/HttpServer/trunk/HttpServer/docproject.shfb b/HttpServer/trunk/HttpServer/docproject.shfb
deleted file mode 100644
index 879c048..0000000
--- a/HttpServer/trunk/HttpServer/docproject.shfb
+++ /dev/null
@@ -1,71 +0,0 @@
-<project schemaVersion="1.6.0.7">
-    <assemblies>
-        <assembly assemblyPath=".\bin\Debug\HttpServer.dll" xmlCommentsPath=".\bin\Debug\HttpServer.xml" commentsOnly="False" />
-    </assemblies>
-    <namespaceSummaries>
-        <namespaceSummaryItem name="" isDocumented="False" />
-        <namespaceSummaryItem name="HttpServer" isDocumented="True">You ca either use the &lt;see cref="HttpListener" /&gt; directly or build a more complete webserver by using &lt;see cref="HttpServer" /&gt;.</namespaceSummaryItem>
-        <namespaceSummaryItem name="HttpServer.Authentication" isDocumented="True">This namespace contains the authentication modules used for HTTP Authentication.</namespaceSummaryItem>
-        <namespaceSummaryItem name="HttpServer.Controllers" isDocumented="True">Classes used for C in the MVC pattern. The &lt;see cref="RequestController" /&gt; gives you most power, while the &lt;see cref="ViewController" /&gt; makes it easier to use templates.</namespaceSummaryItem>
-        <namespaceSummaryItem name="HttpServer.Exceptions" isDocumented="True">All exceptions thrown by the framework.</namespaceSummaryItem>
-        <namespaceSummaryItem name="HttpServer.FormDecoders" isDocumented="True">Form decoders are used to convert content posted by the client/webbrowser. The decoders convert the data into &lt;see cref="HttpInput" /&gt; objects.</namespaceSummaryItem>
-        <namespaceSummaryItem name="HttpServer.Helpers" isDocumented="True">General helpers to make the weblife easier.</namespaceSummaryItem>
-        <namespaceSummaryItem name="HttpServer.Helpers.Implementations" isDocumented="True">Javascript library implementations</namespaceSummaryItem>
-        <namespaceSummaryItem name="HttpServer.HttpModules" isDocumented="True">HttpModules are used to extend the functionality of the webserver. Take a look at &lt;see cref="HttpModule" /&gt; if you want to create your own.</namespaceSummaryItem>
-        <namespaceSummaryItem name="HttpServer.Rendering" isDocumented="True">This namespace contains all template implementations. Templates (also called "views") are used to generate HTML.</namespaceSummaryItem>
-        <namespaceSummaryItem name="HttpServer.Rendering.Haml" isDocumented="True">HAML templates, see the original &lt;a href="http://haml.hamptoncatlin.com/"&gt;implementation&lt;/a&gt; for more infomration.</namespaceSummaryItem>
-        <namespaceSummaryItem name="HttpServer.Rendering.Haml.Nodes" isDocumented="True">HAML node elements</namespaceSummaryItem>
-        <namespaceSummaryItem name="HttpServer.Rendering.Haml.Rules" isDocumented="True">Rules while pre processing HAML.</namespaceSummaryItem>
-        <namespaceSummaryItem name="HttpServer.Rendering.Tiny" isDocumented="True">Tiny templates uses ASP style tags.</namespaceSummaryItem>
-        <namespaceSummaryItem name="HttpServer.Rules" isDocumented="True">Rules are processed by the webserver before any of the modules are invoked. That makes them ideal for pre processing, like redirecting or modifying the Request url</namespaceSummaryItem>
-        <namespaceSummaryItem name="HttpServer.Sessions" isDocumented="True">Sessions are used to keep track of information between requests. The webserver currently have a Memory session store implemented.</namespaceSummaryItem>
-    </namespaceSummaries>
-    <dependencies>
-        <dependencyItem depPath=".\bin\Debug\Fadd.Globalization.Yaml.dll" />
-        <dependencyItem depPath=".\bin\Debug\Fadd.dll" />
-    </dependencies>
-    <componentConfigurations>
-        <component id="Code Block Component" enabled="True" configuration="&lt;component id=&quot;Code Block Component&quot; type=&quot;SandcastleBuilder.Components.CodeBlockComponent&quot; assembly=&quot;{@SHFBFolder}SandcastleBuilder.Components.dll&quot;&gt;&#xD;&#xA;&lt;!-- Base path for relative filenames in source attributes&#xD;&#xA;                 (optional) --&gt;&#xD;&#xA;&lt;basePath value=&quot;{@ProjectFolder}&quot; /&gt;&#xD;&#xA;&lt;!-- Connect to language filter (optional).  If omitted,&#xD;&#xA;                 language filtering is enabled by default. --&gt;&#xD;&#xA;&lt;languageFilter value=&quot;true&quot; /&gt;&#xD;&#xA;&lt;!-- Code colorizer options (required).&#xD;&#xA;                 Attributes:&#xD;&#xA;                    Language syntax configuration file (required)&#xD;&#xA;                    XSLT style file (required)&#xD;&#xA;                    &quot;Copy&quot; image file URL (required)&#xD;&#xA;                    Default language (optional)&#xD;&#xA;                    Enable line numbering (optional)&#xD;&#xA;                    Enable outlining (optional)&#xD;&#xA;                    Keep XML comment &quot;see&quot; tags within the code (optional)&#xD;&#xA;                    Tab size override (optional, 0 = Use syntax file setting)&#xD;&#xA;                    Use language name as default title (optional) --&gt;&#xD;&#xA;&lt;colorizer syntaxFile=&quot;{@SHFBFolder}Colorizer\highlight.xml&quot; styleFile=&quot;{@SHFBFolder}Colorizer\highlight.xsl&quot; copyImageUrl=&quot;../icons/CopyCode.gif&quot; language=&quot;cs&quot; numberLines=&quot;false&quot; outlining=&quot;false&quot; keepSeeTags=&quot;false&quot; tabSize=&quot;0&quot; defaultTitle=&quot;true&quot; /&gt;&#xD;&#xA;&lt;/component&gt;" />
-    </componentConfigurations>
-    <ProjectSummary>C# WebServer is an webserver which runs in the current appdomain. It's module based, which means that you can either use a minimal fast webserver designed after your needs, or add built in modules to get a fully blown MVC webserver.</ProjectSummary>
-    <MissingTags>Summary, Parameter, Returns, AutoDocumentCtors, Namespace, TypeParameter</MissingTags>
-    <VisibleItems>InheritedMembers, InheritedFrameworkMembers, Protected, SealedProtected</VisibleItems>
-    <HtmlHelp1xCompilerPath path="" />
-    <HtmlHelp2xCompilerPath path="" />
-    <OutputPath>Help\</OutputPath>
-    <SandcastlePath path="" />
-    <WorkingPath path=".\Working\" />
-    <CleanIntermediates>True</CleanIntermediates>
-    <KeepLogFile>True</KeepLogFile>
-    <BuildLogFile path="" />
-    <HelpFileFormat>Help1xAndWebsite</HelpFileFormat>
-    <CppCommentsFixup>False</CppCommentsFixup>
-    <FrameworkVersion>2.0.50727</FrameworkVersion>
-    <IndentHtml>False</IndentHtml>
-    <Preliminary>False</Preliminary>
-    <RootNamespaceContainer>False</RootNamespaceContainer>
-    <RootNamespaceTitle />
-    <HelpTitle>C# Webserver</HelpTitle>
-    <HtmlHelpName>webserver</HtmlHelpName>
-    <Language>en-US</Language>
-    <CopyrightHref>http://www.gauffin.com</CopyrightHref>
-    <CopyrightText>(c) 2008 Gauffin Telecom AB</CopyrightText>
-    <FeedbackEMailAddress />
-    <FeedbackEMailLinkText />
-    <HeaderText />
-    <FooterText>http://www.codeplex.com/webserver | LGPL Licensed.</FooterText>
-    <ProjectLinkType>Local</ProjectLinkType>
-    <SdkLinkType>Msdn</SdkLinkType>
-    <SdkLinkTarget>Blank</SdkLinkTarget>
-    <PresentationStyle>vs2005</PresentationStyle>
-    <NamingMethod>MemberName</NamingMethod>
-    <SyntaxFilters>Standard</SyntaxFilters>
-    <ShowFeedbackControl>False</ShowFeedbackControl>
-    <BinaryTOC>True</BinaryTOC>
-    <IncludeFavorites>False</IncludeFavorites>
-    <CollectionTocStyle>Hierarchical</CollectionTocStyle>
-    <IncludeStopWordList>True</IncludeStopWordList>
-    <PlugInNamespaces>ms.vsipcc+, ms.vsexpresscc+</PlugInNamespaces>
-    <HelpFileVersion>1.0.0.0</HelpFileVersion>
-    <ContentPlacement>AboveNamespaces</ContentPlacement>
-</project>
\ No newline at end of file
diff --git a/HttpServer/trunk/HttpServer/httpserver.pfx b/HttpServer/trunk/HttpServer/httpserver.pfx
deleted file mode 100644
index 2ba3308..0000000
Binary files a/HttpServer/trunk/HttpServer/httpserver.pfx and /dev/null differ
diff --git a/HttpServer/trunk/HttpServer/test.snk b/HttpServer/trunk/HttpServer/test.snk
deleted file mode 100644
index 8da3182..0000000
Binary files a/HttpServer/trunk/HttpServer/test.snk and /dev/null differ
diff --git a/HttpServer/trunk/HttpServer/webserver.chm b/HttpServer/trunk/HttpServer/webserver.chm
deleted file mode 100644
index 730828c..0000000
Binary files a/HttpServer/trunk/HttpServer/webserver.chm and /dev/null differ
diff --git a/HttpServer/trunk/dlls/Fadd.Globalization.Yaml.dll b/HttpServer/trunk/dlls/Fadd.Globalization.Yaml.dll
deleted file mode 100644
index 8aca9dc..0000000
Binary files a/HttpServer/trunk/dlls/Fadd.Globalization.Yaml.dll and /dev/null differ
diff --git a/HttpServer/trunk/dlls/Fadd.XML b/HttpServer/trunk/dlls/Fadd.XML
deleted file mode 100644
index 2b33b91..0000000
--- a/HttpServer/trunk/dlls/Fadd.XML
+++ /dev/null
@@ -1,10201 +0,0 @@
-<?xml version="1.0"?>
-<doc>
-    <assembly>
-        <name>Fadd</name>
-    </assembly>
-    <members>
-        <member name="T:Fadd.Validation.ValidateBetweenAttribute">
-            <summary>
-            Checks if a primitive type is between min and max.
-            </summary>
-            <para>
-            Language file items:
-            <list type="table">
-                <listheader>
-                    <term>ItemName</term>
-                    <description>Language text</description>
-                </listheader>
-                <item>
-                    <term>Between</term>
-                    <description>'{0}' must be between {1} and {2}.</description>
-                </item>
-                <item>
-                    <term>BetweenString</term>
-                    <description>'{0}' may only have {1} up to {2} letters.</description>
-                </item>
-            </list>
-            </para>
-        </member>
-        <member name="T:Fadd.Validation.ValidateAttribute">
-            <summary>
-            Base class for all Fadd validation attributes.
-            </summary>
-            <remarks>
-            <para>
-            Each validation class should document what their language entries should say, and their names.
-            This should be done in the remarks section using a table list, example:
-            <list type="table">
-                <listheader>
-                    <term>ItemName</term>
-                    <description>Language text</description>
-                </listheader>
-                <item>
-                    <term>ValidateLetters</term>
-                    <description>'{0}' may only contain letters.</description>
-                </item>
-                <item>
-                    <term>ValidateLettersExtra</term>
-                    <description>'{0}' may only contain letters and one of the following characters: {1}</description>
-                </item>
-            </list>
-            It's recommended that the item names (or terms in the table above) equals the validation class name.
-            i.e. ValidateEmailAttributes adds a language item called "Email".
-            </para>
-            </remarks>
-        </member>
-        <member name="M:Fadd.Validation.ValidateAttribute.Validate(System.Object,System.Object)">
-            <summary>
-            Validate value
-            </summary>
-            <param name="context">Can be used to send a context object to the validation class. Useful if you provide your own validation classes which need to get information from your application. <seealso cref="T:Fadd.Validation.BeforeValidationEventArgs"/></param>
-            <param name="value">value to validate</param>
-            <returns>
-            true if value passed the validation; otherwise false.
-            </returns>
-        </member>
-        <member name="M:Fadd.Validation.ValidateAttribute.Format(System.String,Fadd.Globalization.ILanguageNode)">
-            <summary>
-            Localize error if validation failed.
-            </summary>
-            <param name="fieldName">Localized field name.</param>
-            <param name="validationLanguage">Language node with all validation translations.</param>
-            <returns>A localized error message if the validation failed; otherwise null.</returns>
-            <example>
-            <code>
-            attribute.Localize("FirstName", "'{0}' is required");
-            // will return "'{0}' is required" if the validation failed, else null.
-            </code>
-            </example>
-        </member>
-        <member name="M:Fadd.Validation.ValidateAttribute.SupportsType(System.Type)">
-            <summary>
-            Determines if the validation class support the specified type.
-            </summary>
-            <param name="type">Property/Value type.</param>
-            <returns>true if the type is supported.</returns>
-        </member>
-        <member name="M:Fadd.Validation.ValidateAttribute.IsEmpty(System.Object)">
-            <summary>
-            Check's whether a value is empty or not.
-            </summary>
-            <param name="value">value to check.</param>
-            <returns>true if the value is empty.</returns>
-        </member>
-        <member name="M:Fadd.Validation.ValidateAttribute.IsEmpty(System.Object,System.Object)">
-            <summary>
-            Check's whether a value is empty or not.
-            </summary>
-            <param name="value">value to check.</param>
-            <param name="emptyValue">value is considered to be not specified if the value matches this parameter</param>
-            <returns>true if the value is empty.</returns>
-        </member>
-        <member name="M:Fadd.Validation.ValidateBetweenAttribute.#ctor(System.Object,System.Object)">
-            <summary>
-            Initializes a new instance of the <see cref="T:Fadd.Validation.ValidateAttribute"/> class.
-            </summary>
-            <param name="min">Value must be equal to this or larger.</param>
-            <param name="max">Value must be equal or less than this.</param>
-        </member>
-        <member name="M:Fadd.Validation.ValidateBetweenAttribute.Validate(System.Object,System.Object)">
-            <summary>
-            Validate value
-            </summary>
-            <param name="context">Can be used to send a context object to the validation class. Useful if you provide your own validation classes which need to get information from your application. <seealso cref="T:Fadd.Validation.BeforeValidationEventArgs"/></param>
-            <param name="value">value to validate</param>
-            <returns>
-            true if value passed the validation; otherwise false.
-            </returns>
-        </member>
-        <member name="M:Fadd.Validation.ValidateBetweenAttribute.Format(System.String,Fadd.Globalization.ILanguageNode)">
-            <summary>
-            Localize error if validation failed.
-            </summary>
-            <param name="fieldName">Localized field name.</param>
-            <param name="validationLanguage">Language node with all validation translations.</param>
-            <returns>A localized error message if the validation failed; otherwise null.</returns>
-            <example>
-            <code>
-            attribute.Localize("FirstName", "'{0}' is required");
-            // will return "'{0}' is required" if the validation failed, else null.
-            </code>
-            </example>
-        </member>
-        <member name="M:Fadd.Validation.ValidateBetweenAttribute.SupportsType(System.Type)">
-            <summary>
-            Determines if the validation class support the specified type.
-            </summary>
-            <param name="type">Property/Value type.</param>
-            <returns>true if the type is supported.</returns>
-        </member>
-        <member name="P:Fadd.Validation.ValidateBetweenAttribute.Min">
-            <summary>
-            Min value
-            </summary>
-        </member>
-        <member name="P:Fadd.Validation.ValidateBetweenAttribute.Max">
-            <summary>
-            Max value
-            </summary>
-        </member>
-        <member name="T:Fadd.Logging.NullLogProvider">
-            <summary>
-            Temporary class (before transaction where <see cref="T:Fadd.Logging.ILogProvider"/>'s will be removed) to disable logging totally
-            </summary>
-        </member>
-        <member name="T:Fadd.Logging.ILogProvider">
-            <summary>
-            Provides different logger implementations.
-            </summary>
-        </member>
-        <member name="M:Fadd.Logging.ILogProvider.GetLogger(System.String)">
-            <summary>
-            Get a logger with the specified name.
-            </summary>
-            <param name="name"></param>
-            <returns></returns>
-        </member>
-        <member name="M:Fadd.Logging.ILogProvider.GetCurrentClassLogger">
-            <summary>
-            Get logger for current class.
-            </summary>
-            <returns></returns>
-        </member>
-        <member name="M:Fadd.Logging.NullLogProvider.GetLogger(System.String)">
-            <summary>Returns a <see cref="T:Fadd.Logging.NullLogger"/></summary>
-        </member>
-        <member name="M:Fadd.Logging.NullLogProvider.GetCurrentClassLogger">
-            <summary>Returns a <see cref="T:Fadd.Logging.NullLogger"/></summary>
-        </member>
-        <member name="T:Fadd.Logging.LogManager">
-            <summary>
-            Manager that provides logs to the classes.
-            </summary>
-        </member>
-        <member name="F:Fadd.Logging.LogManager.NullLogger">
-            <summary>
-            Logger that is logging to nothing.
-            </summary>
-        </member>
-        <member name="M:Fadd.Logging.LogManager.GetLogger(System.String)">
-            <summary>
-            Gets the logger.
-            </summary>
-            <param name="name">The name.</param>
-            <returns>A <see cref="T:Fadd.Logging.ILogger"/>.</returns>
-        </member>
-        <member name="M:Fadd.Logging.LogManager.GetCurrentClassLogger">
-            <summary>
-            Get logger for the current class.
-            </summary>
-            <returns>A <see cref="T:Fadd.Logging.ILogger"/>.</returns>
-        </member>
-        <member name="M:Fadd.Logging.LogManager.SetProvider(Fadd.Logging.ILogProvider)">
-            <summary>
-            Set the provider used to get loggers.
-            </summary>
-            <param name="provider"></param>
-        </member>
-        <member name="T:Fadd.Components.Parameter">
-            <summary>
-            A parameter to a component constructor.
-            </summary>
-        </member>
-        <member name="M:Fadd.Components.Parameter.#ctor(System.String,System.Object)">
-            <summary>
-            Initializes a new instance of the <see cref="T:Fadd.Components.Parameter"/> class.
-            </summary>
-            <param name="name">name of constructor parameter.</param>
-            <param name="value">parameter value.</param>
-        </member>
-        <member name="P:Fadd.Components.Parameter.Value">
-            <summary>
-            parameter value
-            </summary>
-        </member>
-        <member name="P:Fadd.Components.Parameter.Name">
-            <summary>
-            name of constructor parameter.
-            </summary>
-        </member>
-        <member name="T:Fadd.Commands.Tests.TestObject">
-            <summary>
-
-            </summary>
-        </member>
-        <member name="T:Fadd.Commands.Tests.ITestObject">
-            <summary>
-
-            </summary>
-        </member>
-        <member name="M:Fadd.Commands.Tests.ITestObject.TestIt(System.String,System.Int32)">
-            <summary>
-            Tests it.
-            </summary>
-            <param name="myArg">My arg.</param>
-            <param name="value">The value.</param>
-            <returns></returns>
-        </member>
-        <member name="M:Fadd.Commands.Tests.ITestObject.TestIt(System.String,System.Boolean)">
-            <summary>
-            Tests it.
-            </summary>
-            <param name="myArg">My arg.</param>
-            <param name="value">The value.</param>
-            <returns></returns>
-        </member>
-        <member name="M:Fadd.Commands.Tests.ITestObject.DoThis">
-            <summary>
-            Does the this.
-            </summary>
-        </member>
-        <member name="P:Fadd.Commands.Tests.ITestObject.Id">
-            <summary>
-            Modify the id of the testobject
-            </summary>
-        </member>
-        <member name="M:Fadd.Commands.Tests.TestObject.TestIt(System.String,System.Int32)">
-            <summary>
-            Tests it.
-            </summary>
-            <param name="myArg">My arg.</param>
-            <param name="value">The value.</param>
-            <returns></returns>
-        </member>
-        <member name="M:Fadd.Commands.Tests.TestObject.TestIt(System.String,System.Boolean)">
-            <summary>
-            Tests it.
-            </summary>
-            <param name="myArg">My arg.</param>
-            <param name="value">The value.</param>
-            <returns></returns>
-        </member>
-        <member name="M:Fadd.Commands.Tests.TestObject.DoThis">
-            <summary>
-            Does the this.
-            </summary>
-        </member>
-        <member name="P:Fadd.Commands.Tests.TestObject.Id">
-            <summary>
-            Modify the id of the testobject
-            </summary>
-        </member>
-        <member name="T:Fadd.Commands.Net.CommandChannel">
-            <summary>
-            This class creates a command channel which can be used to send a command to a remote end point.
-            </summary>
-        </member>
-        <member name="F:Fadd.Commands.Net.CommandChannel.DefaultPort">
-            <summary>
-            Try to use this port if it's not occupied.
-            </summary>
-        </member>
-        <member name="M:Fadd.Commands.Net.CommandChannel.#ctor(Fadd.Commands.ICommandDispatcher)">
-            <summary>
-            Initializes a new instance of the <see cref="T:Fadd.Commands.Net.CommandChannel"/> class.
-            </summary>
-            <param name="dispatcher">Dispatcher used to invoke commands comming through the channel.</param>
-        </member>
-        <member name="M:Fadd.Commands.Net.CommandChannel.#ctor(Fadd.Commands.ICommandDispatcher,System.Net.Sockets.Socket)">
-            <summary>
-            Initializes a new instance of the <see cref="T:Fadd.Commands.Net.CommandChannel"/> class.
-            </summary>
-            <param name="dispatcher">Dispatcher used to invoke commands comming through the channel.</param>
-            <param name="socket">Socket used to transport commands.</param>
-        </member>
-        <member name="M:Fadd.Commands.Net.CommandChannel.#ctor(Fadd.Commands.ICommandDispatcher,Fadd.Commands.Net.BinaryChannel)">
-            <summary>
-            Initializes a new instance of the <see cref="T:Fadd.Commands.Net.CommandChannel"/> class.
-            </summary>
-            <param name="dispatcher">Dispatcher used to invoke commands comming through the channel.</param>
-            <param name="channel">Channel used to tranport commands.</param>
-        </member>
-        <member name="M:Fadd.Commands.Net.CommandChannel.Finalize">
-            <summary>
-            Releases unmanaged resources and performs other cleanup operations before the
-            <see cref="T:Fadd.Commands.Net.CommandChannel"/> is reclaimed by garbage collection.
-            </summary>
-        </member>
-        <member name="M:Fadd.Commands.Net.CommandChannel.ProcessUnhandledCommands(System.Boolean)">
-            <summary>
-            Send unhandled commands through the tunnel.
-            </summary>
-            <remarks>
-            Off by defualt.
-            </remarks>
-            <param name="value"></param>
-        </member>
-        <member name="M:Fadd.Commands.Net.CommandChannel.ProcessRemoteCommands(System.Boolean)">
-            <summary>
-            Handle commands tagged with the <see cref="T:Fadd.Commands.IRemote"/> interface.
-            </summary>
-            <param name="value"></param>
-            <remarks>Off by default.</remarks>
-        </member>
-        <member name="M:Fadd.Commands.Net.CommandChannel.Dispose">
-            <summary>
-            Performs application-defined tasks associated with freeing, releasing, or resetting unmanaged resources.
-            </summary>
-            <filterpriority>2</filterpriority>
-        </member>
-        <member name="M:Fadd.Commands.Net.CommandChannel.Open(System.Net.IPEndPoint)">
-            <summary>
-            Connect to other side.
-            </summary>
-            <param name="endPoint"></param>
-            <exception cref="T:System.InvalidOperationException"></exception>
-        </member>
-        <member name="M:Fadd.Commands.Net.CommandChannel.Close">
-            <summary>
-            Close command tunnel
-            </summary>
-        </member>
-        <member name="M:Fadd.Commands.Net.CommandChannel.Stop">
-            <summary>
-            Stops this instance.
-            </summary>
-        </member>
-        <member name="E:Fadd.Commands.Net.CommandChannel.Disconnected">
-            <summary>
-            Invoked when client disconnects
-            </summary>
-        </member>
-        <member name="P:Fadd.Commands.Net.CommandChannel.AutoReconnect">
-            <summary>
-            True if socket should auto reconnect connection is closed due to any network error.
-            </summary>
-        </member>
-        <member name="T:Fadd.Parser.SimpleSQL.ParseTreeTokens.AndToken">
-            <summary>
-            Parse 'AND'
-            </summary>
-        </member>
-        <member name="T:Fadd.Parser.ParseTreeToken">
-            <summary>
-            Tokens are used to parse a specific part of the text.
-            </summary>
-        </member>
-        <member name="M:Fadd.Parser.ParseTreeToken.Match(Fadd.Parser.Tokenizer,Fadd.Parser.ParseTree)">
-            <summary>
-            Check if the current position is the start of this token
-            </summary>
-            <returns>true if our token is the next one.</returns>
-        </member>
-        <member name="M:Fadd.Parser.ParseTreeToken.Parse(Fadd.Parser.Tokenizer,Fadd.Parser.ParseTree)">
-            <summary>
-            Parses the data in the specified <see cref="T:Fadd.Parser.Tokenizer"/>.
-            </summary>
-            <param name="tokenizer">The <see cref="T:Fadd.Parser.Tokenizer"/> containing the data to parse.</param>
-            <param name="tree"><see cref="T:Fadd.Parser.ParseTree"/> that is being built..</param>
-            <returns>true if more tokens can be parsed on the current leaf; false if we should continue to next leaf (parse no more children).</returns>
-        </member>
-        <member name="M:Fadd.Parser.ParseTreeToken.ParseChildren(Fadd.Parser.Tokenizer,Fadd.Parser.ParseTree)">
-            <summary>
-            Should be called in <see cref="M:Fadd.Parser.ParseTreeToken.Parse(Fadd.Parser.Tokenizer,Fadd.Parser.ParseTree)"/> to let the Token parse all children.
-            </summary>
-            <param name="tokenizer">The <see cref="T:Fadd.Parser.Tokenizer"/> containing the data to parse.</param>
-            <param name="tree"><see cref="T:Fadd.Parser.ParseTree"/> that is being built..</param>
-            <returns>true if a child have been matched and parsed.</returns>
-            <remarks>Are called from <see cref="M:Fadd.Parser.ParseTreeToken.Parse(Fadd.Parser.Tokenizer,Fadd.Parser.ParseTree)"/>.</remarks>
-        </member>
-        <member name="M:Fadd.Parser.ParseTreeToken.ParseOneChild(Fadd.Parser.Tokenizer,Fadd.Parser.ParseTree)">
-            <summary>
-            Should be called in <see cref="M:Fadd.Parser.ParseTreeToken.Parse(Fadd.Parser.Tokenizer,Fadd.Parser.ParseTree)"/> to let the Token parse all children.
-            </summary>
-            <param name="tokenizer">The <see cref="T:Fadd.Parser.Tokenizer"/> containing the data to parse.</param>
-            <param name="tree"><see cref="T:Fadd.Parser.ParseTree"/> that is being built..</param>
-            <returns>true if a child have been matched and parsed.</returns>
-            <remarks>Are called from <see cref="M:Fadd.Parser.ParseTreeToken.Parse(Fadd.Parser.Tokenizer,Fadd.Parser.ParseTree)"/>.</remarks>
-        </member>
-        <member name="M:Fadd.Parser.ParseTreeToken.MatchChildren(Fadd.Parser.Tokenizer,Fadd.Parser.ParseTree,System.Type)">
-            <summary>
-            Used to check if another child got a match
-            </summary>
-            <param name="tokenizer"><see cref="T:Fadd.Parser.Tokenizer"/> used to read data.</param>
-            <param name="tree"><see cref="T:Fadd.Parser.ParseTree"/> being built.</param>
-            <param name="exceptMe"><see cref="T:Fadd.Parser.ParseTreeToken"/> that should not be included in the check.</param>
-            <returns>true if a child matches the current position in the <see cref="T:Fadd.Parser.Tokenizer"/></returns>
-        </member>
-        <member name="M:Fadd.Parser.ParseTreeToken.Add(Fadd.Parser.ParseTreeToken)">
-            <summary>
-            Add a  possible child token.
-            </summary>
-            <param name="parseTreeToken">The token.</param>
-        </member>
-        <member name="P:Fadd.Parser.ParseTreeToken.Parent">
-            <summary>
-            Get parent token
-            </summary>
-        </member>
-        <member name="P:Fadd.Parser.ParseTreeToken.FinalChild">
-            <summary>
-            This token is the final child in the current leaf, parse no more children
-            </summary>
-        </member>
-        <member name="M:Fadd.Parser.SimpleSQL.ParseTreeTokens.AndToken.Match(Fadd.Parser.Tokenizer,Fadd.Parser.ParseTree)">
-            <summary>
-            Check if the current position is the start of this token
-            </summary>
-            <returns>true if our token is the next one.</returns>
-        </member>
-        <member name="M:Fadd.Parser.SimpleSQL.ParseTreeTokens.AndToken.Parse(Fadd.Parser.Tokenizer,Fadd.Parser.ParseTree)">
-            <summary>
-            Parses the data in the specified <see cref="T:Fadd.Parser.Tokenizer"/>.
-            </summary>
-            <param name="tokenizer">The <see cref="T:Fadd.Parser.Tokenizer"/> containing the data to parse.</param>
-            <param name="tree"><see cref="T:Fadd.Parser.ParseTree"/> that is being built..</param>
-            <returns>true if more tokens can be parsed on the current leaf; false if we should continue to next leaf (parse no more children).</returns>
-        </member>
-        <member name="T:Fadd.Parser.SimpleSQL.Parser">
-            <summary>
-            Used to parse SQL conditions
-            </summary>
-        </member>
-        <member name="F:Fadd.Parser.SimpleSQL.Parser.WhiteSpaces">
-            <summary>
-            Chars interpreted as white spaces: NewLine,LineFeed,Tab,Space
-            </summary>
-        </member>
-        <member name="M:Fadd.Parser.SimpleSQL.Parser.#ctor">
-            <summary>
-            Initializes a new instance of the <see cref="T:Fadd.Parser.SimpleSQL.Parser"/> class.
-            </summary>
-        </member>
-        <member name="M:Fadd.Parser.SimpleSQL.Parser.Setup">
-            <summary>
-            Setup all tokens
-            </summary>
-        </member>
-        <member name="M:Fadd.Parser.SimpleSQL.Parser.Parse(System.String)">
-            <summary>
-            Parse the tree
-            </summary>
-            <param name="text">Text to parse.</param>
-            <returns>a parsed tree</returns>
-        </member>
-        <member name="M:Fadd.Parser.SimpleSQL.ParseTreeTokens.StarToken.Match(Fadd.Parser.Tokenizer,Fadd.Parser.ParseTree)">
-            <summary>
-            Check if the current position is the start of this token
-            </summary>
-            <returns>true if our token is the next one.</returns>
-        </member>
-        <member name="M:Fadd.Parser.SimpleSQL.ParseTreeTokens.StarToken.Parse(Fadd.Parser.Tokenizer,Fadd.Parser.ParseTree)">
-            <summary>
-            Parses the data in the specified <see cref="T:Fadd.Parser.Tokenizer"/>.
-            </summary>
-            <param name="tokenizer">The <see cref="T:Fadd.Parser.Tokenizer"/> containing the data to parse.</param>
-            <param name="tree"><see cref="T:Fadd.Parser.ParseTree"/> that is being built..</param>
-            <returns>true if more tokens can be parsed on the current leaf; false if we should continue to next leaf (parse no more children).</returns>
-        </member>
-        <member name="T:Fadd.Parser.Evaluator.Tokens.NotEqual">
-            <summary>
-            Not equal condition
-            </summary>
-        </member>
-        <member name="T:Fadd.Parser.Token">
-            <summary>
-            Base class for all objects that are used to build a tree.
-            </summary>
-        </member>
-        <member name="M:Fadd.Parser.Token.Add(Fadd.Parser.Token)">
-            <summary>
-            Adds the specified child.
-            </summary>
-            <param name="child">The child.</param>
-        </member>
-        <member name="M:Fadd.Parser.Token.GetEnumerator">
-            <summary>
-                                Returns an enumerator that iterates through the collection.
-            </summary>
-            <returns>
-                                A <see cref="T:System.Collections.Generic.IEnumerator`1" /> that can be used to iterate through the collection.
-            </returns>
-            <filterpriority>1</filterpriority>
-        </member>
-        <member name="M:Fadd.Parser.Token.System#Collections#IEnumerable#GetEnumerator">
-            <summary>
-                                Returns an enumerator that iterates through a collection.
-            </summary>
-            <returns>
-                                An <see cref="T:System.Collections.IEnumerator" /> object that can be used to iterate through the collection.
-            </returns>
-            <filterpriority>2</filterpriority>
-        </member>
-        <member name="M:Fadd.Parser.Token.ToString(System.Boolean)">
-            <summary>
-            String representation of the token
-            </summary>
-            <param name="includeChildren">Also include all children in the output</param>
-            <returns>Returns a human friendly string</returns>
-        </member>
-        <member name="P:Fadd.Parser.Token.TokenIdentifier">
-            <summary>
-            Used to determine the kind of this token
-            </summary>
-        </member>
-        <member name="P:Fadd.Parser.Token.Parent">
-            <summary>
-            Gets or sets the parent.
-            </summary>
-            <value>The parent.</value>
-        </member>
-        <member name="P:Fadd.Parser.Token.LastChild">
-            <summary>
-            Last added child in the current node.
-            </summary>
-        </member>
-        <member name="P:Fadd.Parser.Token.Children">
-            <summary>
-            Gets the items.
-            </summary>
-            <value>The items.</value>
-        </member>
-        <member name="P:Fadd.Parser.Token.Item(System.Int32)">
-            <summary>
-            Get one of the children
-            </summary>
-            <param name="index">zero-based index.</param>
-            <returns><see cref="T:Fadd.Parser.Token"/></returns>
-        </member>
-        <member name="P:Fadd.Parser.Token.Depth">
-            <summary>
-            Depth in parse tree.
-            </summary>
-        </member>
-        <member name="P:Fadd.Parser.Token.Count">
-            <summary>
-            Number of children.
-            </summary>
-        </member>
-        <member name="T:Fadd.Parser.Evaluator.Tokens.IConditional">
-            <summary>
-            Used to identify conditions (used by Property to see it the text is a property or something else)
-            </summary>
-        </member>
-        <member name="M:Fadd.Parser.Evaluator.Tokens.NotEqual.ToString">
-            <summary>
-            Condition string
-            </summary>
-            <returns>" != "</returns>
-        </member>
-        <member name="P:Fadd.Parser.Evaluator.Tokens.NotEqual.TokenIdentifier">
-            <summary>
-            Used to determine the kind of this token
-            </summary>
-            <value></value>
-        </member>
-        <member name="T:Fadd.Parser.Evaluator.Tokens.LessOrEqual">
-            <summary>
-             <![CDATA[
-            <=
-            ]]>
-            </summary>
-        </member>
-        <member name="M:Fadd.Parser.Evaluator.Tokens.LessOrEqual.ToString">
-            <summary>
-            Conditional representation.
-            </summary>
-            <returns><![CDATA[" <= "]]></returns>
-        </member>
-        <member name="P:Fadd.Parser.Evaluator.Tokens.LessOrEqual.TokenIdentifier">
-            <summary>
-            Used to determine the kind of this token
-            </summary>
-            <value></value>
-        </member>
-        <member name="T:Fadd.Parser.Evaluator.Tokens.Equal">
-            <summary>
-            = or ==
-            </summary>
-        </member>
-        <member name="M:Fadd.Parser.Evaluator.Tokens.Equal.ToString">
-            <summary>
-            Equal condition as string
-            </summary>
-            <returns>" == "</returns>
-        </member>
-        <member name="P:Fadd.Parser.Evaluator.Tokens.Equal.TokenIdentifier">
-            <summary>
-            Used to determine the kind of this token
-            </summary>
-            <value></value>
-        </member>
-        <member name="T:Fadd.Parser.Evaluator.Tokens.Context">
-            <summary>
-            We are getting into a sub context (nested conditions)
-            </summary>
-        </member>
-        <member name="P:Fadd.Parser.Evaluator.Tokens.Context.TokenIdentifier">
-            <summary>
-            Used to determine the kind of this token
-            </summary>
-            <value></value>
-        </member>
-        <member name="T:Fadd.Parser.Evaluator.ParseTreeTokens.OrToken">
-            <summary>
-            Parse a OR token
-            </summary>
-        </member>
-        <member name="M:Fadd.Parser.Evaluator.ParseTreeTokens.OrToken.Match(Fadd.Parser.Tokenizer,Fadd.Parser.ParseTree)">
-            <summary>
-            Check if the current position is the start of this token
-            </summary>
-            <returns>true if our token is the next one.</returns>
-        </member>
-        <member name="M:Fadd.Parser.Evaluator.ParseTreeTokens.OrToken.Parse(Fadd.Parser.Tokenizer,Fadd.Parser.ParseTree)">
-            <summary>
-            Parses the data in the specified <see cref="T:Fadd.Parser.Tokenizer"/>.
-            </summary>
-            <param name="tokenizer">The <see cref="T:Fadd.Parser.Tokenizer"/> containing the data to parse.</param>
-            <param name="tree"><see cref="T:Fadd.Parser.ParseTree"/> that is being built..</param>
-            <returns>true if more tokens can be parsed on the current leaf; false if we should continue to next leaf (parse no more children).</returns>
-        </member>
-        <member name="T:Fadd.Parser.Evaluator.Parser">
-            <summary>
-            Used to parse SQL conditions
-            </summary>
-        </member>
-        <member name="F:Fadd.Parser.Evaluator.Parser.WhiteSpaces">
-            <summary>
-            New Line, Line Feed, Tab and Space.
-            </summary>
-        </member>
-        <member name="M:Fadd.Parser.Evaluator.Parser.#ctor">
-            <summary>
-            Initializes a new instance of the <see cref="T:Fadd.Parser.Evaluator.Parser"/> class.
-            </summary>
-        </member>
-        <member name="M:Fadd.Parser.Evaluator.Parser.Setup">
-            <summary>
-            Setup all tokens
-            </summary>
-        </member>
-        <member name="M:Fadd.Parser.Evaluator.Parser.Parse(System.String)">
-            <summary>
-            Parse the tree
-            </summary>
-            <param name="text">Text to parse.</param>
-            <returns>a parsed tree</returns>
-        </member>
-        <member name="T:Fadd.Components.CircularDependenciesException">
-            <summary>
-            Thrown when components are dependent of each other and therefore cannot be created.
-            </summary>
-        </member>
-        <member name="M:Fadd.Components.CircularDependenciesException.#ctor(System.Collections.Generic.Stack{System.Type})">
-            <summary>
-            Initializes a new instance of the <see cref="T:Fadd.Components.CircularDependenciesException"/> class.
-            </summary>
-            <param name="types">The types.</param>
-        </member>
-        <member name="P:Fadd.Components.CircularDependenciesException.Message">
-            <summary>
-            Gets a message that describes the current exception.
-            </summary>
-            <value></value>
-            <returns>
-            The error message that explains the reason for the exception, or an empty string("").
-            </returns>
-        </member>
-        <member name="P:Fadd.Components.CircularDependenciesException.DependencyStack">
-            <summary>
-            Dependency stack (contains path for the circular dependencies).
-            </summary>
-        </member>
-        <member name="T:Fadd.Plugins.EvidenceRequestedEventArgs">
-            <summary>
-            Arguments for <see cref="T:Fadd.Plugins.EvidenceRequestedHandler"/>
-            </summary>
-        </member>
-        <member name="M:Fadd.Plugins.EvidenceRequestedEventArgs.#ctor(Fadd.Plugins.PluginTypeInfo)">
-            <summary>
-            Initializes a new instance of the <see cref="T:Fadd.Plugins.EvidenceRequestedEventArgs"/> class.
-            </summary>
-            <param name="typeInfo">Plugin assembly information.</param>
-        </member>
-        <member name="P:Fadd.Plugins.EvidenceRequestedEventArgs.Evidence">
-            <summary>
-            Evidence that the plugin should be loaded with.
-            </summary>
-        </member>
-        <member name="P:Fadd.Plugins.EvidenceRequestedEventArgs.TypeInformation">
-            <summary>
-            Plugin assembly information
-            </summary>
-        </member>
-        <member name="T:Fadd.Plugins.EvidenceRequestedHandler">
-            <summary>
-             Called when an assembly is about to be loaded and we need the evidence for it.
-             Specify the evidence by using <see cref="P:Fadd.Plugins.EvidenceRequestedEventArgs.Evidence"/>
-            </summary>
-            <param name="source">PluginManager</param>
-            <param name="args">Assembly information</param>
-        </member>
-        <member name="T:Fadd.Logging.ILogger">
-            <summary>
-            A logger is used to write log entries to a specific source, it can for instance be to the console
-            (<see cref="T:Fadd.Logging.ConsoleLogger"/>) or to a text file (<see cref="T:Fadd.Logging.TextFileLogger"/>).
-            </summary>
-        </member>
-        <member name="M:Fadd.Logging.ILogger.Trace(System.String)">
-            <summary>
-            Very detailed log messages, potentially of a high frequency and volume
-            </summary>
-            <param name="message">message written to the log.</param>
-        </member>
-        <member name="M:Fadd.Logging.ILogger.Trace(System.String,System.Exception)">
-            <summary>
-            Very detailed log messages, potentially of a high frequency and volume
-            </summary>
-            <param name="message">message written to the log.</param>
-            <param name="exception">an exception.</param>
-        </member>
-        <member name="M:Fadd.Logging.ILogger.Debug(System.String)">
-            <summary>
-            Less detailed and/or less frequent debugging messages
-            </summary>
-            <param name="message">message written to the log.</param>
-        </member>
-        <member name="M:Fadd.Logging.ILogger.Debug(System.String,System.Exception)">
-            <summary>
-            Less detailed and/or less frequent debugging messages
-            </summary>
-            <param name="message">message written to the log.</param>
-            <param name="exception">an exception.</param>
-        </member>
-        <member name="M:Fadd.Logging.ILogger.Info(System.String)">
-            <summary>
-            Informational messages
-            </summary>
-            <param name="message">message written to the log.</param>
-        </member>
-        <member name="M:Fadd.Logging.ILogger.Info(System.String,System.Exception)">
-            <summary>
-            Informational messages
-            </summary>
-            <param name="message">message written to the log.</param>
-            <param name="exception">an exception.</param>
-        </member>
-        <member name="M:Fadd.Logging.ILogger.Warning(System.String)">
-            <summary>
-            Warnings which don't appear to the user of the application
-            </summary>
-            <param name="message">message written to the log.</param>
-        </member>
-        <member name="M:Fadd.Logging.ILogger.Warning(System.String,System.Exception)">
-            <summary>
-            Warnings which don't appear to the user of the application
-            </summary>
-            <param name="message">message written to the log.</param>
-            <param name="exception">an exception.</param>
-        </member>
-        <member name="M:Fadd.Logging.ILogger.Error(System.String)">
-            <summary>
-            Error messages
-            </summary>
-            <param name="message">message written to the log.</param>
-        </member>
-        <member name="M:Fadd.Logging.ILogger.Error(System.String,System.Exception)">
-            <summary>
-            Error messages
-            </summary>
-            <param name="message">message written to the log.</param>
-            <param name="exception">an exception.</param>
-        </member>
-        <member name="M:Fadd.Logging.ILogger.Fatal(System.String)">
-            <summary>
-            Fatal error messages. After a fatal error, the application usually terminates.
-            </summary>
-            <param name="message">message written to the log.</param>
-        </member>
-        <member name="M:Fadd.Logging.ILogger.Fatal(System.String,System.Exception)">
-            <summary>
-            Fatal error messages. After a fatal error, the application usually terminates.
-            </summary>
-            <param name="message">message written to the log.</param>
-            <param name="exception">an exception.</param>
-        </member>
-        <member name="P:Fadd.Logging.ILogger.LoggerConfiguration">
-            <summary>
-            Gets the configuration used for the logger
-            </summary>
-            <remarks>
-            Can be null in case the logger lacks a configuration.
-            </remarks>
-        </member>
-        <member name="T:Fadd.Globalization.EmptyLanguageNode">
-            <summary>
-            This node is returned instead of null.
-            </summary>
-        </member>
-        <member name="T:Fadd.Globalization.LanguageNode">
-            <summary>
-            Contains language translations used to create multilingual applications
-            </summary>
-            <remarks>
-            The LanguageNode provides a base class for different implementations of a hierachial language structure
-            </remarks>
-        </member>
-        <member name="T:Fadd.Globalization.ILanguageNode">
-            <summary>
-            Contains language translations used to create multilingual applications
-            </summary>
-            <remarks>
-            The ILanguageNode provides a base class for different implementations of a hierachial language structure
-            </remarks>
-        </member>
-        <member name="M:Fadd.Globalization.ILanguageNode.GetText(System.Int32,System.String)">
-            <summary>
-            Get a text string in the specified language.
-            </summary>
-            <param name="lcid">Language to fetch from.</param>
-            <param name="textName">name of text to find.</param>
-            <returns>string if found; otherwise null.</returns>
-        </member>
-        <member name="M:Fadd.Globalization.ILanguageNode.GetText(System.Int32,System.String,System.Boolean)">
-            <summary>
-            Get a text string in the specified language.
-            </summary>
-            <param name="lcid">Language to fetch from.</param>
-            <param name="textName">name of text to find.</param>
-            <param name="checkPaths">check for paths in <paramref name="textName"/>.</param>
-            <returns>string if found; otherwise null.</returns>
-        </member>
-        <member name="M:Fadd.Globalization.ILanguageNode.GetChild(System.String)">
-            <summary>
-            Gets a sub category
-            </summary>
-            <param name="name">The category name</param>
-            <returns><see cref="T:Fadd.Globalization.ILanguageNode"/> if found; otherwise null.</returns>
-            <exception cref="T:System.ArgumentNullException">If name is null</exception>
-        </member>
-        <member name="M:Fadd.Globalization.ILanguageNode.GetTextCount(System.Int32)">
-            <summary>
-            Number of translated texts in the specified language.
-            </summary>
-            <param name="lcid">Language to get text from.</param>
-            <returns>Number of text items</returns>
-        </member>
-        <member name="M:Fadd.Globalization.ILanguageNode.Contains(System.String)">
-            <summary>
-            Determine if the node contains a text item with the specified name (for the current lcid)
-            </summary>
-            <returns>True if the node contains a language element with the specified name for the current language</returns>
-        </member>
-        <member name="M:Fadd.Globalization.ILanguageNode.Contains(System.String,System.Int32)">
-            <summary>
-            Determine if the node contains a text item with the specified name for the specified language
-            </summary>
-            <returns>True if the node contains a language element with the specified name for the specified language</returns>
-        </member>
-        <member name="M:Fadd.Globalization.ILanguageNode.ContainsLanguage(System.Int32)">
-            <summary>
-            Determine if a category contains a specific language.
-            </summary>
-            <param name="lcid">Language to get text from.</param>
-            <returns>true if the specified language contains the text string; false if not.</returns>
-        </member>
-        <member name="M:Fadd.Globalization.ILanguageNode.ContainsChild(System.String)">
-            <summary>
-            Checks if current language contains a child node with the specified name.
-            </summary>
-            <param name="name">Name of child node</param>
-            <returns>true if found; otherwise false.</returns>
-        </member>
-        <member name="M:Fadd.Globalization.ILanguageNode.ClearHierarchy">
-            <summary>Empties all saved values in the node and its sub nodes</summary>
-        </member>
-        <member name="P:Fadd.Globalization.ILanguageNode.ParentNode">
-            <summary>
-            Gets the parent language node.
-            </summary>
-            <remarks>
-            null if no parent node exists.
-            </remarks>
-        </member>
-        <member name="P:Fadd.Globalization.ILanguageNode.RootNode">
-            <summary>
-            Gets the mother of all nodes.
-            </summary>
-            <remarks>
-            Root node will return itself.
-            </remarks>
-        </member>
-        <member name="P:Fadd.Globalization.ILanguageNode.Count">
-            <summary>
-            Gets the number of languages (and not the number of text items).
-            </summary>
-        </member>
-        <member name="P:Fadd.Globalization.ILanguageNode.Name">
-            <summary>
-            Gets the name of this node.
-            </summary>
-        </member>
-        <member name="P:Fadd.Globalization.ILanguageNode.DefaultLCID">
-            <summary>
-            Gets language to use if the requested language is not found.
-            </summary>
-        </member>
-        <member name="P:Fadd.Globalization.ILanguageNode.Item(System.String)">
-            <summary>
-            Gets a localized text string in the current language.
-            </summary>
-            <param name="textName">Phrase to find, can also contain a path.</param>
-            <returns>text if found; [textName] if not.</returns>
-            <example>
-            <code>
-            lang["Name"] // => "Name"
-            lang["/Users/View/Name"] // => "Name"
-            lang["Naem"] // => "[Naem]" since it's missing
-            </code>
-            </example>
-        </member>
-        <member name="P:Fadd.Globalization.ILanguageNode.Item(System.String,System.Int32)">
-            <summary>
-            Gets a localized text string in the specified language.
-            </summary>
-            <param name="textName">Phrase to find, can also contain a path.</param>
-            <param name="lcid">Get translation from this language.</param>
-            <returns>text if found; [textName] if not.</returns>
-            <example>
-            <code>
-            lang["Name"] // => "Name"
-            lang["Name"] // => "Name"
-            lang["Naem"] // => "[Naem]" since it's missing
-            </code>
-            </example>
-        </member>
-        <member name="F:Fadd.Globalization.LanguageNode.Empty">
-            <summary>
-            An empty language node (used instead of null).
-            </summary>
-        </member>
-        <member name="M:Fadd.Globalization.LanguageNode.#ctor(System.Int32)">
-            <summary>
-            Initializes a new instance of the <see cref="T:Fadd.Globalization.LanguageNode"/> class.
-            </summary>
-            <param name="defaultLCID">The default LCID.</param>
-        </member>
-        <member name="M:Fadd.Globalization.LanguageNode.GetText(System.Int32,System.String)">
-            <summary>
-            Get a text string in the specified language.
-            </summary>
-            <param name="lcid">Language to fetch from.</param>
-            <param name="textName">name of text to find.</param>
-            <returns>string if found; otherwise null.</returns>
-        </member>
-        <member name="M:Fadd.Globalization.LanguageNode.GetText(System.Int32,System.String,System.Boolean)">
-            <summary>
-            Get a text string in the specified language.
-            </summary>
-            <param name="lcid">Language to fetch from.</param>
-            <param name="textName">name of text to find.</param>
-            <param name="checkPaths">check for paths in <paramref name="textName"/>.</param>
-            <returns>string if found; otherwise null.</returns>
-        </member>
-        <member name="M:Fadd.Globalization.LanguageNode.GetTextCount(System.Int32)">
-            <summary>
-            Number of translated texts in the specified language
-            </summary>
-            <param name="lcid"></param>
-            <returns></returns>
-        </member>
-        <member name="M:Fadd.Globalization.LanguageNode.Contains(System.String)">
-            <summary>
-            Determine if the node contains a text item with the specified name (for the current lcid)
-            </summary>
-            <param name="name"></param>
-            <returns>
-            True if the node contains a language element with the specified name for the current language
-            </returns>
-        </member>
-        <member name="M:Fadd.Globalization.LanguageNode.Contains(System.String,System.Int32)">
-            <summary>
-            Determine if the node contains a text item with the specified name for the specified language
-            </summary>
-            <param name="name"></param>
-            <param name="lcid"></param>
-            <returns>
-            True if the node contains a language element with the specified name for the specified language
-            </returns>
-        </member>
-        <member name="M:Fadd.Globalization.LanguageNode.ContainsLanguage(System.Int32)">
-            <summary>
-            Determine if a category contains a specific language.
-            </summary>
-            <param name="lcid"></param>
-            <returns></returns>
-        </member>
-        <member name="M:Fadd.Globalization.LanguageNode.ContainsChild(System.String)">
-            <summary>
-            Checks if current language contains a child node with the specified name.
-            </summary>
-            <param name="name">Name of child node</param>
-            <returns>true if found; otherwise false.</returns>
-        </member>
-        <member name="M:Fadd.Globalization.LanguageNode.ClearHierarchy">
-            <summary>Empties all saved values in the node and its sub nodes</summary>
-        </member>
-        <member name="M:Fadd.Globalization.LanguageNode.GetChild(System.String)">
-            <summary>
-            Gets a sub category
-            </summary>
-            <param name="name">The category name</param>
-            <returns>
-            	<see cref="T:Fadd.Globalization.ILanguageNode"/> if found; otherwise null.
-            </returns>
-            <exception cref="T:System.ArgumentNullException">If name is null</exception>
-        </member>
-        <member name="M:Fadd.Globalization.LanguageNode.CheckPaths(System.Int32,System.String)">
-            <summary>
-            Checks paths that are specified in text names
-            </summary>
-            <param name="textName">For instance /user/show/firstname</param>
-            <param name="lcid">language to check in</param>
-            <returns>string if language contains a path, otherwise null.</returns>
-        </member>
-        <member name="M:Fadd.Globalization.LanguageNode.Add(System.String,System.Int32,System.String)">
-            <summary>
-            Add a localized text string.
-            </summary>
-            <param name="lcid">locale</param>
-            <param name="name">Name identifying the string. Used to fetch the string later on.</param>
-            <param name="text">Localized string</param>
-        </member>
-        <member name="M:Fadd.Globalization.LanguageNode.Set(System.String,System.Int32,System.String)">
-            <summary>
-            Sets a localized text string. If the a string with the specified name exists it will be overwritten.
-            </summary>
-            <param name="lcid">locale</param>
-            <param name="name">Name identifying the string. Used to fetch the string later on.</param>
-            <param name="text">Localized string</param>
-        </member>
-        <member name="M:Fadd.Globalization.LanguageNode.AddChild(System.String)">
-            <summary>
-            Adds a sub category
-            </summary>
-            <param name="name">Name of the sub category</param>
-            <exception cref="T:System.ArgumentException">If a category with the specified name already exists</exception>
-            <exception cref="T:System.ArgumentNullException">If name is null</exception>
-        </member>
-        <member name="M:Fadd.Globalization.LanguageNode.EmptyValue(System.String)">
-            <summary>
-            Value that should be returned if the text is not found.
-            </summary>
-            <param name="name"></param>
-            <returns></returns>
-        </member>
-        <member name="M:Fadd.Globalization.LanguageNode.SetDefaultLCID(System.Int32)">
-            <summary>
-            Set default locale
-            </summary>
-            <param name="lcid">Locale to set.</param>
-        </member>
-        <member name="P:Fadd.Globalization.LanguageNode.Children">
-            <summary>
-            All child nodes.
-            </summary>
-        </member>
-        <member name="P:Fadd.Globalization.LanguageNode.ParentNode">
-            <summary>
-            Parent language category
-            </summary>
-        </member>
-        <member name="P:Fadd.Globalization.LanguageNode.RootNode">
-            <summary>
-            Mother of all nodes.
-            </summary>
-        </member>
-        <member name="P:Fadd.Globalization.LanguageNode.Item(System.String)">
-            <summary>
-            Get a localized text string in the current language.
-            </summary>
-            <param name="textName">Phrase to find.</param>
-            <returns>text if found; [textName] if not.</returns>
-            <example>
-            <code>
-            lang["Name"] // => "Name"
-            lang["Naem"] // => "[Naem]" since it's missing
-            </code>
-            </example>
-        </member>
-        <member name="P:Fadd.Globalization.LanguageNode.Item(System.String,System.Int32)">
-            <summary>
-            Get a localized text string
-            </summary>
-            <param name="lcid"></param>
-            <param name="textName">Phrase to find.</param>
-            <returns>text if found; [textName] if not.</returns>
-            <example>
-            <code>
-            lang["Name"] // => "Name"
-            lang["Naem"] // => "[Naem]" since it's missing
-            </code>
-            </example>
-        </member>
-        <member name="P:Fadd.Globalization.LanguageNode.Count">
-            <summary>
-            Number languages
-            </summary>
-        </member>
-        <member name="P:Fadd.Globalization.LanguageNode.Name">
-            <summary>
-            Returns the name of the node
-            </summary>
-        </member>
-        <member name="P:Fadd.Globalization.LanguageNode.DefaultLCID">
-            <summary>
-            LCID to use if the specified or current LCID is not found.
-            </summary>
-        </member>
-        <member name="M:Fadd.Globalization.EmptyLanguageNode.#ctor(System.Int32)">
-            <summary>
-            Initializes a new instance of the <see cref="T:Fadd.Globalization.EmptyLanguageNode"/> class.
-            </summary>
-            <param name="defaultLCID">The default LCID.</param>
-        </member>
-        <member name="M:Fadd.Globalization.EmptyLanguageNode.Add(System.String,System.Int32,System.String)">
-            <summary>
-            Add a localized text string.
-            </summary>
-            <param name="lcid">locale</param>
-            <param name="name">Name identifying the string. Used to fetch the string later on.</param>
-            <param name="text">Localized string</param>
-        </member>
-        <member name="M:Fadd.Globalization.EmptyLanguageNode.Set(System.String,System.Int32,System.String)">
-            <summary>
-            Sets a localized text string. If the a string with the specified name exists it will be overwritten.
-            </summary>
-            <param name="name">Name identifying the string. Used to fetch the string later on.</param>
-            <param name="lcid">locale</param>
-            <param name="text">Localized string</param>
-        </member>
-        <member name="M:Fadd.Globalization.EmptyLanguageNode.AddChild(System.String)">
-            <summary>
-            Adds a sub category
-            </summary>
-            <param name="name">Name of the sub category</param>
-            <exception cref="T:System.ArgumentException">If a category with the specified name already exists</exception>
-            <exception cref="T:System.ArgumentNullException">If name is null</exception>
-        </member>
-        <member name="M:Fadd.Globalization.EmptyLanguageNode.GetText(System.Int32,System.String)">
-            <summary>
-            Get a text string in the specified language.
-            </summary>
-            <param name="lcid">Language to fetch from.</param>
-            <param name="textName">name of text to find.</param>
-            <returns>string if found; otherwise null.</returns>
-        </member>
-        <member name="M:Fadd.Globalization.EmptyLanguageNode.GetText(System.Int32,System.String,System.Boolean)">
-            <summary>
-            Get a text string in the specified language.
-            </summary>
-            <param name="lcid">Language to fetch from.</param>
-            <param name="textName">name of text to find.</param>
-            <param name="checkPaths">check for paths in <paramref name="textName"/>.</param>
-            <returns>string if found; otherwise null.</returns>
-        </member>
-        <member name="M:Fadd.Globalization.EmptyLanguageNode.GetTextCount(System.Int32)">
-            <summary>
-            Number of translated texts in the specified language
-            </summary>
-            <param name="lcid"></param>
-            <returns></returns>
-        </member>
-        <member name="M:Fadd.Globalization.EmptyLanguageNode.Contains(System.String,System.Int32)">
-            <summary>
-            Determine if the node contains a text item with the specified name for the specified language
-            </summary>
-            <param name="name"></param>
-            <param name="lcid"></param>
-            <returns>
-            True if the node contains a language element with the specified name for the specified language
-            </returns>
-        </member>
-        <member name="M:Fadd.Globalization.EmptyLanguageNode.ContainsLanguage(System.Int32)">
-            <summary>
-            Determine if a category contains a specific language.
-            </summary>
-            <param name="lcid"></param>
-            <returns></returns>
-        </member>
-        <member name="M:Fadd.Globalization.EmptyLanguageNode.ClearHierarchy">
-            <summary>Empties all saved values in the node and its sub nodes</summary>
-        </member>
-        <member name="P:Fadd.Globalization.EmptyLanguageNode.Item(System.String)">
-            <summary>
-            Get a localized text string in the current language.
-            </summary>
-            <param name="textName">Phrase to find.</param>
-            <returns>text if found; [textName] if not.</returns>
-            <example>
-            <code>
-            lang["Name"] // => "Name"
-            lang["Naem"] // => "[Naem]" since it's missing
-            </code>
-            </example>
-        </member>
-        <member name="P:Fadd.Globalization.EmptyLanguageNode.Item(System.String,System.Int32)">
-            <summary>
-            Get a localized text string
-            </summary>
-            <param name="lcid"></param>
-            <param name="textName">Phrase to find.</param>
-            <returns>text if found; [textName] if not.</returns>
-            <example>
-            <code>
-            lang["Name"] // => "Name"
-            lang["Naem"] // => "[Naem]" since it's missing
-            </code>
-            </example>
-        </member>
-        <member name="P:Fadd.Globalization.EmptyLanguageNode.Count">
-            <summary>
-            Number languages
-            </summary>
-        </member>
-        <member name="T:Fadd.Components.ComponentFactory">
-            <summary>
-            Used to create and maintain components.
-            </summary>
-            <remarks>
-            Supports lazy loading which means that components will be loaded when
-            requested.
-            </remarks>
-        </member>
-        <member name="T:Fadd.Components.IComponentManager">
-            <summary>
-            Used to create and maintain components.
-            </summary>
-            <seealso cref="T:Fadd.Components.ComponentFactory"/>
-        </member>
-        <member name="T:Fadd.Components.IComponentProvider">
-            <summary>
-            Base interface used to provide components.
-            </summary>
-        </member>
-        <member name="M:Fadd.Components.IComponentProvider.Add``2(Fadd.Components.Parameter[])">
-            <summary>
-            Add a component.
-            </summary>
-            <typeparam name="InterfaceType">Interface type, used to request components.</typeparam>
-            <typeparam name="InstanceType">Instance type, used to create component.</typeparam>
-            <param name="constructorParameters">Extra parameters used in the constructor.</param>
-        </member>
-        <member name="M:Fadd.Components.IComponentProvider.AddInstance``1(System.Object)">
-            <summary>
-            Add an existing instance.
-            </summary>
-            <param name="instance"></param>
-            <typeparam name="T">Interface type being requested when getting this component</typeparam>
-            <exception cref="T:System.ArgumentException"></exception>
-        </member>
-        <member name="M:Fadd.Components.IComponentProvider.Contains(System.Type)">
-            <summary>
-            Checks whether a specific type exists (loaded or not loaded)
-            </summary>
-            <param name="interfaceType">Interface to check.</param>
-        </member>
-        <member name="M:Fadd.Components.IComponentProvider.Contains(System.String)">
-            <summary>
-            Checks whether a specific type exists (loaded or not loaded)
-            </summary>
-            <param name="name">Name of component.</param>
-        </member>
-        <member name="M:Fadd.Components.IComponentProvider.Get``1">
-            <summary>
-            Gets a component.
-            </summary>
-            <remarks>
-            The component will be created if needed.
-            </remarks>
-            <typeparam name="T">Type of component (interface)</typeparam>
-            <returns>Component if found; otherwise null.</returns>
-        </member>
-        <member name="M:Fadd.Components.IComponentManager.AddPrivate``2(Fadd.Components.Parameter[])">
-            <summary>
-            Add a private component.
-            </summary>
-            <remarks>
-            <para>
-            Private components are created like regular components when their dependencies are met,
-            the difference between private and regular components are that they are not accessible from anywhere.
-            </para>
-            <para>
-            Private components are typically used to instantiate components that are not used anywhere
-            but still need to be created when their dependencies have been met.
-            </para>
-            </remarks>
-            <typeparam name="InterfaceType">Interface type, used to request components.</typeparam>
-            <typeparam name="InstanceType">Instance type, used to create component.</typeparam>
-            <param name="constructorParameters">Extra parameters used in the constructor.</param>
-        </member>
-        <member name="M:Fadd.Components.IComponentManager.AddPrivate``2(System.Action{System.Object},Fadd.Components.Parameter[])">
-            <summary>
-            Add a private component.
-            </summary>
-            <remarks>
-            <para>
-            Private components are created like regular components when their dependencies are met,
-            the difference between private and regular components are that they are not accessible from anywhere.
-            </para>
-            <para>
-            Private components are typically used to instantiate components that are not used anywhere
-            but still need to be created when their dependencies have been met.
-            </para>
-            </remarks>
-            <typeparam name="InterfaceType">Interface type, used to request components.</typeparam>
-            <typeparam name="InstanceType">Instance type, used to create component.</typeparam>
-            <param name="constructorParameters">Extra parameters used in the constructor.</param>
-            <param name="componentCreated">A delegate to be invoked when the private component has been instantiated, will be passed the interface of the created component</param>
-        </member>
-        <member name="M:Fadd.Components.IComponentManager.AddPrivate(System.Type,System.Type,Fadd.Components.Parameter[])">
-            <summary>
-            Add a private component.
-            </summary>
-            <remarks>
-            <para>
-            Private components are created like regular components when their dependencies are met,
-            the difference between private and regular components are that they are not accessible from anywhere.
-            </para>
-            <para>
-            Private components are typically used to instantiate components that are not used anywhere
-            but still need to be created when their dependencies have been met.
-            </para>
-            </remarks>
-            <param name="interfaceType">Interface type, used to request components.</param>
-            <param name="instanceType">Instance type, used to create component.</param>
-            <param name="constructorParameters">Extra parameters used in the constructor.</param>
-        </member>
-        <member name="M:Fadd.Components.IComponentManager.AddType(System.Type,System.Type,Fadd.Components.Parameter[])">
-            <summary>
-            Add an component
-            </summary>
-            <param name="interfaceType">Interface type, used to request components.</param>
-            <param name="instanceType">Instance type, used to create component.</param>
-            <param name="constructorParameters">Extra parameters used in the constructor.</param>
-            <exception cref="T:System.ArgumentException"></exception>
-        </member>
-        <member name="M:Fadd.Components.IComponentManager.AddInstance(System.Type,System.Object)">
-            <summary>
-            Add an existing instance.
-            </summary>
-            <param name="interfaceType">The type the instance should be added as</param>
-            <param name="instance">The instance to add</param>
-        </member>
-        <member name="M:Fadd.Components.IComponentManager.IsCreated(System.Type)">
-            <summary>
-            Checks whether a certain component is created or not.
-            </summary>
-            <param name="interfaceType">Interface to check</param>
-            <returns>true if component have been created.</returns>
-        </member>
-        <member name="M:Fadd.Components.IComponentManager.IsCreated(System.String)">
-            <summary>
-            Gets if a component have been created or not.
-            </summary>
-            <param name="name">Component name.</param>
-            <returns>true if component have been created.</returns>
-        </member>
-        <member name="P:Fadd.Components.IComponentManager.Item(System.Type)">
-            <summary>
-            Gets a component
-            </summary>
-            <param name="interfaceType">Type of component to get.</param>
-            <returns>Component if found; otherwise null.</returns>
-        </member>
-        <member name="P:Fadd.Components.IComponentManager.Item(System.String)">
-            <summary>
-            Gets a component
-            </summary>
-            <param name="name">Name of component to get.</param>
-            <returns>Component if found; otherwise null.</returns>
-        </member>
-        <member name="M:Fadd.Components.ComponentFactory.Add``2(Fadd.Components.Parameter[])">
-            <summary>
-            Add a component.
-            </summary>
-            <typeparam name="InterfaceType">Interface type, used to request components.</typeparam>
-            <typeparam name="InstanceType">Instance type, used to create component.</typeparam>
-            <param name="constructorParameters">Extra parameters used in the constructor.</param>
-        </member>
-        <member name="M:Fadd.Components.ComponentFactory.AddType(System.Type,System.Type,Fadd.Components.Parameter[])">
-            <summary>
-            Add an component
-            </summary>
-            <param name="interfaceType">Interface type, used to request components.</param>
-            <param name="instanceType">Instance type, used to create component.</param>
-            <param name="constructorParameters">Extra parameters used in the constructor.</param>
-            <exception cref="T:System.ArgumentException">If <paramref name="interfaceType"/> is not an interface, or if <paramref name="instanceType"/> is not an implementation of the interface.</exception>
-        </member>
-        <member name="M:Fadd.Components.ComponentFactory.AddInstance``1(System.Object)">
-            <summary>
-            Add an existing instance.
-            </summary>
-            <param name="instance"></param>
-            <typeparam name="T">Interface type being requested when getting this component</typeparam>
-            <exception cref="T:System.ArgumentException"></exception>
-            <remarks>
-            <see cref="M:Fadd.Components.ComponentFactory.AddInstance``1(System.Object)"/> will also invoke the Created event.
-            </remarks>
-        </member>
-        <member name="M:Fadd.Components.ComponentFactory.AddInstance(System.Type,System.Object)">
-            <summary>
-            Add an existing instance.
-            </summary>
-            <param name="interfaceType">The type the instance should be added as</param>
-            <param name="instance">The instance to add</param>
-            <remarks>
-            <see cref="M:Fadd.Components.ComponentFactory.AddInstance(System.Type,System.Object)"/> will also invoke the Created event.
-            </remarks>
-            <exception cref="T:System.ArgumentException">If <paramref name="interfaceType"/> is not assignable from <paramref name="instance"/> type..</exception>
-        </member>
-        <member name="M:Fadd.Components.ComponentFactory.Contains(System.Type)">
-            <summary>
-            Checks whether a specific type exists (loaded or not loaded)
-            </summary>
-            <param name="interfaceType">Interface to check.</param>
-        </member>
-        <member name="M:Fadd.Components.ComponentFactory.Contains(System.String)">
-            <summary>
-            Checks whether a specific type exists (loaded or not loaded)
-            </summary>
-            <param name="name">Name of component.</param>
-        </member>
-        <member name="M:Fadd.Components.ComponentFactory.IsCreated(System.Type)">
-            <summary>
-            Checks whether a certain component is created or not.
-            </summary>
-            <param name="interfaceType">Interface to check</param>
-            <returns>true if component is created.</returns>
-        </member>
-        <member name="M:Fadd.Components.ComponentFactory.IsCreated(System.String)">
-            <summary>
-            Gets if a component have been created or not.
-            </summary>
-            <param name="name">Component name.</param>
-            <returns>true if component have been created.</returns>
-        </member>
-        <member name="M:Fadd.Components.ComponentFactory.Get``1">
-            <summary>
-            Get a component.
-            </summary>
-            <remarks>
-            The component will be created if needed.
-            </remarks>
-            <typeparam name="T">Type of component (interface)</typeparam>
-            <returns>Component if found; otherwise null.</returns>
-        </member>
-        <member name="M:Fadd.Components.ComponentFactory.AddPrivate``2(Fadd.Components.Parameter[])">
-            <summary>
-            Add a private component.
-            </summary>
-            <typeparam name="InterfaceType">Interface type, used to request components.</typeparam>
-            <typeparam name="InstanceType">Instance type, used to create component.</typeparam>
-            <param name="constructorParameters">Extra parameters used in the constructor.</param>
-            <remarks>
-            	<para>
-            Private components works as regular components, the only difference is that they are not
-            accessible from outside.
-            </para>
-            	<para>
-            Private components are typically used to instantiate components that should not be accessible
-            from anywhere, but they use public components must therefore be loaded when all dependencies
-            have been met.
-            </para>
-            </remarks>
-            <exception cref="T:System.ArgumentException">
-            If:
-            <list type="bullet">
-                <item>The <typeparamref name="InstanceType"/> is an interface (which obviously cannot be instantiated)</item>
-                <item>The <typeparamref name="InstanceType"/> isn't assignable to <typeparamref name="InterfaceType"/></item>
-                <item>The <typeparamref name="InterfaceType"/> has already been mapped to another instance</item>
-            </list>
-            </exception>
-        </member>
-        <member name="M:Fadd.Components.ComponentFactory.AddPrivate(System.Type,System.Type,Fadd.Components.Parameter[])">
-            <summary>
-            Add a private component.
-            </summary>
-            <param name="interfaceType">Interface type, used to request components.</param>
-            <param name="instanceType">Instance type, used to create component.</param>
-            <param name="constructorParameters">Extra parameters used in the constructor.</param>
-            <remarks>
-            	<para>
-            Private components works as regular components, the only difference is that they are not
-            accessible from outside.
-            </para>
-            	<para>
-            Private components are typically used to instantiate components that should not be accessible
-            from anywhere, but they use public components must therefore be loaded when all dependencies
-            have been met.
-            </para>
-            </remarks>
-            <exception cref="T:System.ArgumentException">
-            <list type="bullet">
-                <item>The <paramref name="instanceType"/> is an interface (which obviously cannot be instantiated)</item>
-                <item>The <paramref name="instanceType"/> isn't assignable to <paramref name="interfaceType"/></item>
-                <item>The <paramref name="interfaceType"/> has already been mapped to another instance</item>
-            </list>
-            </exception>
-        </member>
-        <member name="M:Fadd.Components.ComponentFactory.AddPrivate``2(System.Action{System.Object},Fadd.Components.Parameter[])">
-            <summary>
-            Add a private component.
-            </summary>
-            <typeparam name="InterfaceType">Interface type, used to request components.</typeparam>
-            <typeparam name="InstanceType">Instance type, used to create component.</typeparam>
-            <param name="componentCreated">A delegate to be invoked when the private component has been instantiated, will be passed the interface of the created component</param>
-            <param name="constructorParameters">Extra parameters used in the constructor.</param>
-            <remarks>
-            	<para>
-            Private components are created like regular components when their dependencies are met,
-            the difference between private and regular components are that they are not accessible from anywhere.
-            </para>
-            	<para>
-            Private components are typically used to instantiate components that are not used anywhere
-            but still need to be created when their dependencies have been met.
-            </para>
-            </remarks>
-            <exception cref="T:System.ArgumentException">
-            If:
-            <list type="bullet">
-                <item>The <typeparamref name="InstanceType"/> is an interface (which obviously cannot be instantiated)</item>
-                <item>The <typeparamref name="InstanceType"/> isn't assignable to <typeparamref name="InterfaceType"/></item>
-                <item>The <typeparamref name="InterfaceType"/> has already been mapped to another instance</item>
-            </list>
-            </exception>
-        </member>
-        <member name="M:Fadd.Components.ComponentFactory.LoadComponent(System.Type,Fadd.Components.ComponentFactory.TypeInformation,System.Collections.Generic.Stack{System.Type})">
-            <summary>
-            Loads a component and adds it to <see cref="F:Fadd.Components.ComponentFactory._instances"/> if successful
-            </summary>
-            <param name="interfaceType">Type what user will request</param>
-            <param name="typeInfo">Type to create</param>
-            <param name="dependenceyStack">Dependency stack, used to find circular dependencies. Type should be <paramref name="interfaceType"/></param>
-            <returns>Instance if created successfully; otherwise false.</returns>
-            <exception cref="T:Fadd.Components.CircularDependenciesException">If a circular dependency was detected.</exception>
-            <exception cref="T:System.InvalidOperationException">If a component have already been loaded.</exception>
-            <exception cref="T:System.Exception">If a component throws any exception during creation.</exception>
-        </member>
-        <member name="M:Fadd.Components.ComponentFactory.FindConstructor(Fadd.Components.ComponentFactory.TypeInformation,System.Collections.Generic.ICollection{System.Object},System.Collections.Generic.Stack{System.Type})">
-            <exception cref="T:Fadd.Components.MissingParametersException"><c>MissingParametersException</c>.</exception>
-            <exception cref="T:Fadd.Components.CircularDependenciesException"><c>CircularDependenciesException</c>.</exception>
-        </member>
-        <member name="M:Fadd.Components.ComponentFactory.CreateAll">
-            <summary>
-            Create all components that have not been created.
-            </summary>
-            <exception cref="T:Fadd.Components.LoadFailedException">If any of the components can't be loaded.</exception>
-        </member>
-        <member name="M:Fadd.Components.ComponentFactory.MovePrivateInstances">
-            <summary>
-            Move all private instances from <see cref="F:Fadd.Components.ComponentFactory._instances"/> to the <see cref="F:Fadd.Components.ComponentFactory._privateInstances"/> dictionary.
-            </summary>
-            <remarks>
-            locks <see cref="F:Fadd.Components.ComponentFactory._instances"/> first, and then <see cref="F:Fadd.Components.ComponentFactory._privateInstances"/>.
-            </remarks>
-        </member>
-        <member name="M:Fadd.Components.ComponentFactory.Get(System.Type)">
-            <summary>
-            Try to get a component.
-            </summary>
-            <param name="interfaceType">Type requested by users.</param>
-            <returns>object if created; otherwise null.</returns>
-            <remarks>
-            should only be used by external components.
-            </remarks>
-        </member>
-        <member name="M:Fadd.Components.ComponentFactory.Get(System.Type,System.Collections.Generic.Stack{System.Type})">
-            <summary>
-            Try to get a component, either loaded or not loaded. Will also try to find missing components.
-            </summary>
-            <param name="interfaceType">Type requested by users.</param>
-            <param name="dependencyStack">Stack to be able to track circular dependencies.</param>
-            <returns>object if created; otherwise null.</returns>
-        </member>
-        <member name="M:Fadd.Components.ComponentFactory.Visit(Fadd.Components.ComponentVisitor)">
-            <summary>
-            Visit all components
-            </summary>
-            <param name="visitor">Delegate to invoke with the found components</param>
-            <remarks>Does not visit private components</remarks>
-        </member>
-        <member name="M:Fadd.Components.ComponentFactory.VisitAll(Fadd.Components.ComponentVisitor)">
-            <summary>
-            Visits all components including private ones
-            </summary>
-            <remarks>
-            Components being added during the visit will not be processed.
-            </remarks>
-            <param name="visitor">Delegate to invoke with the found components</param>
-        </member>
-        <member name="E:Fadd.Components.ComponentFactory.ParametersRequested">
-            <summary>
-            We failed to find all constructor parameters for a certain type. You can use
-            these event to supply the missing parameters.
-            </summary>
-        </member>
-        <member name="P:Fadd.Components.ComponentFactory.NotCreated">
-            <summary>
-            Get all components that have not been created yet.
-            </summary>
-            <returns>I list of all not created components.</returns>
-        </member>
-        <member name="P:Fadd.Components.ComponentFactory.Item(System.Type)">
-            <summary>
-            Get a component
-            </summary>
-            <param name="interfaceType">Type of component to get.</param>
-            <returns>Component if found; otherwise null.</returns>
-        </member>
-        <member name="P:Fadd.Components.ComponentFactory.Fadd#Components#IComponentManager#Item(System.String)">
-            <summary>
-            Gets a component
-            </summary>
-            <param name="name">Name of component to get.</param>
-            <returns>Component if found; otherwise null.</returns>
-        </member>
-        <member name="E:Fadd.Components.ComponentFactory.ComponentMissing">
-            <summary>
-            Invoked when a component is missing.
-            </summary>
-        </member>
-        <member name="E:Fadd.Components.ComponentFactory.Created">
-            <summary>
-            Invoked when a component have been created (or if an instance have been added).
-            </summary>
-        </member>
-        <member name="P:Fadd.Components.ComponentFactory.TypeInformation.Type">
-            <summary>
-            Instance type
-            </summary>
-        </member>
-        <member name="P:Fadd.Components.ComponentFactory.TypeInformation.Dependencies">
-            <summary>
-            Other components that this one is dependent of.
-            </summary>
-            <remarks>
-            Usually used when shutting down components (to be able to shut them down in
-            the correct order).
-            </remarks>
-        </member>
-        <member name="P:Fadd.Components.ComponentFactory.TypeInformation.OnCreated">
-            <summary>
-            Gets a handler to be invoked upon the creation of the component
-            </summary>
-        </member>
-        <member name="T:Fadd.Components.ComponentVisitor">
-            <summary>
-            Used to visit all components.
-            </summary>
-            <param name="interfaceType">component interface.</param>
-            <param name="instance">instance.</param>
-        </member>
-        <member name="T:Fadd.Components.RequestComponentEventArgs">
-            <summary>
-            Arguments for <see cref="E:Fadd.Components.ComponentFactory.ComponentMissing"/>.
-            </summary>
-        </member>
-        <member name="M:Fadd.Components.RequestComponentEventArgs.#ctor(System.Type,System.Collections.Generic.Stack{System.Type})">
-            <summary>
-            Initializes a new instance of the <see cref="T:Fadd.Components.RequestComponentEventArgs"/> class.
-            </summary>
-            <param name="interfaceType">Requested component type.</param>
-            <param name="dependencyStack">The dependency stack.</param>
-        </member>
-        <member name="P:Fadd.Components.RequestComponentEventArgs.InstanceOrType">
-            <summary>
-            A component instance or type of instance to create.
-            </summary>
-            <example>
-            <code>
-            void ComponentMissing(object source, RequestComponentEventArgs args)
-            {
-                if (args.InterfaceType != typeof(IMyManager))
-                    return;
-
-            #if TEST
-                args.InstanceOrType = new MyManagerStub();
-            #else
-                args.InstanceOrType = typeof(MyManager);
-            #endif
-            }
-            </code>
-            </example>
-        </member>
-        <member name="P:Fadd.Components.RequestComponentEventArgs.InterfaceType">
-            <summary>
-            Requested component type
-            </summary>
-        </member>
-        <member name="P:Fadd.Components.RequestComponentEventArgs.DependencyStack">
-            <summary>
-            Dependency stack
-            </summary>
-        </member>
-        <member name="T:Fadd.Commands.ICommandDispatcher">
-            <summary>
-            This is a bit more advanced command pattern. The regular command pattern
-            ties the command to the the class that handles the command. This
-            pattern removes that binding and makes the commands independent of
-            the logic that executes it.
-            <para>
-            The pattern also allows multiple handlers for each command, and you
-            can also add handlers for unhandled commands.
-            </para>
-            </summary>
-            <example>
-            // Map a handler to a command:
-            distlight.Add(typeof(MyCommand), OnMyCommand);
-
-            // invoke my command:
-            if (!distlight.Invoke(new MyCommand(myUserId)))
-              Console.WriteLine("No one handled the command!");
-
-            </example>
-        </member>
-        <member name="M:Fadd.Commands.ICommandDispatcher.Add(System.Type,Fadd.Commands.CommandHandler)">
-            <summary>
-            Add a command handler.
-            </summary>
-            <param name="type">Must be a class, an attribute.</param>
-            <param name="handler">handler handling the command</param>
-            <exception cref="T:System.ArgumentException">If handler have been added to that type already.</exception>
-            <example>
-            Program.Commands.Add(typeof(MyCommand), OnMyCommand);
-            </example>
-        </member>
-        <member name="M:Fadd.Commands.ICommandDispatcher.Remove(System.Type,Fadd.Commands.CommandHandler)">
-            <summary>
-            Remove a command handler.
-            </summary>
-            <param name="type">type to remove</param>
-            <param name="handler">delegated that was mapped to the type.</param>
-        </member>
-        <member name="M:Fadd.Commands.ICommandDispatcher.Invoke(Fadd.Commands.Command,Fadd.Commands.CommandHandler)">
-            <summary>
-            Invoke a command.
-            </summary>
-            <param name="command">command to invoke.</param>
-            <param name="ignoreMe">Handled that should not be invoked.</param>
-            <returns>true if command was handled.</returns>
-        </member>
-        <member name="M:Fadd.Commands.ICommandDispatcher.Invoke(Fadd.Commands.Command)">
-            <summary>
-            Invoke a command.
-            </summary>
-            <param name="command">command to invoke.</param>
-            <returns>true if command was handled.</returns>
-        </member>
-        <member name="M:Fadd.Commands.ICommandDispatcher.Invoke(System.Object,Fadd.Commands.Command,Fadd.Commands.CommandHandler)">
-            <summary>
-            Invoke a command.
-            </summary>
-            <param name="source">object that is invoking the command.</param>
-            <param name="command">command to invoke.</param>
-            <param name="ignoreMe">Handled that should not be invoked.</param>
-            <returns>true if command was handled.</returns>
-        </member>
-        <member name="M:Fadd.Commands.ICommandDispatcher.Invoke(System.Object,Fadd.Commands.Command)">
-            <summary>
-            Invoke a command.
-            </summary>
-            <param name="source">object that is invoking the command.</param>
-            <param name="command">command to invoke.</param>
-            <returns>true if command was handled.</returns>
-        </member>
-        <member name="M:Fadd.Commands.ICommandDispatcher.BeginInvoke(Fadd.Commands.Command,System.AsyncCallback,System.Object)">
-            <summary>
-            Invoke a command asynchronously
-            </summary>
-            <param name="command">Command to invoke</param>
-            <returns>IAsyncResult if command was invoked successfully; otherwise null.</returns>
-            <param name="callback">Callback that is invoked then the command completes.</param>
-            <param name="state">object that you can use to identify the command in the <see cref="T:System.AsyncCallback"/>-method.</param>
-        </member>
-        <member name="M:Fadd.Commands.ICommandDispatcher.BeginInvoke(Fadd.Commands.Command,Fadd.Commands.CommandHandler,System.AsyncCallback,System.Object)">
-            <summary>
-            Invoke a command asynchronously
-            </summary>
-            <param name="command">Command to invoke</param>
-            <returns>IAsyncResult if command was invoked successfully; otherwise null.</returns>
-            <param name="ignoreMe">Handler that should not receive the command.</param>
-            <param name="callback">Callback that is invoked then the command completes.</param>
-            <param name="state">object that you can use to identify the command in the <see cref="T:System.AsyncCallback"/>-method.</param>
-        </member>
-        <member name="M:Fadd.Commands.ICommandDispatcher.BeginInvoke(System.Object,Fadd.Commands.Command,System.AsyncCallback,System.Object)">
-            <summary>
-            Invoke a command asynchronously
-            </summary>
-            <param name="command">Command to invoke</param>
-            <returns>IAsyncResult if command was invoked successfully; otherwise null.</returns>
-            <param name="source">object that is invoking the command.</param>
-            <param name="callback">Callback that is invoked then the command completes.</param>
-            <param name="state">object that you can use to identify the command in the <see cref="T:System.AsyncCallback"/>-method.</param>
-        </member>
-        <member name="M:Fadd.Commands.ICommandDispatcher.BeginInvoke(System.Object,Fadd.Commands.Command,Fadd.Commands.CommandHandler,System.AsyncCallback,System.Object)">
-            <summary>
-            Invoke a command asynchronously
-            </summary>
-            <param name="command">Command to invoke</param>
-            <returns>IAsyncResult if command was invoked successfully; otherwise null.</returns>
-            <param name="source">object that is invoking the command.</param>
-            <param name="ignoreMe">Handler that should not receive the command.</param>
-            <param name="callback">Callback that is invoked then the command completes.</param>
-            <param name="state">object that you can use to identify the command in the <see cref="T:System.AsyncCallback"/>-method.</param>
-        </member>
-        <member name="M:Fadd.Commands.ICommandDispatcher.EndInvoke(System.IAsyncResult)">
-            <summary>
-            Invoke this method when the command is complete, or if you want to wait
-            on the command.
-            </summary>
-            <param name="res"></param>
-            <returns></returns>
-        </member>
-        <member name="M:Fadd.Commands.ICommandDispatcher.Contains(System.Type)">
-            <summary>
-            Tells us if we have a handler for the specified type.
-            </summary>
-            <param name="type">Type to check</param>
-            <returns>True if a handler have been registered otherwise false.</returns>
-        </member>
-        <member name="E:Fadd.Commands.ICommandDispatcher.Unhandled">
-            <summary>
-            Handler for unhandled commands.
-            </summary>
-            <remarks>returning true will make the command look like it was handled</remarks>
-        </member>
-        <member name="T:Fadd.Check">
-            <summary>
-            Design by contract validator
-            </summary>
-        </member>
-        <member name="F:Fadd.Check.FieldRequired">
-            <summary>
-            "{0} must be specified."
-            </summary>
-        </member>
-        <member name="F:Fadd.Check.FieldNotEqual">
-            <summary>
-            "'{0}' do not equal '{1}'."
-            </summary>
-        </member>
-        <member name="F:Fadd.Check.FieldBetween">
-            <summary>
-            "'{0}' must be between {1} and {2}."
-            </summary>
-        </member>
-        <member name="F:Fadd.Check.FieldBetweenStr">
-            <summary>
-            "'{0}' must be between {1} and {2} characters."
-            </summary>
-        </member>
-        <member name="F:Fadd.Check.FieldMin">
-            <summary>
-            "'{0}' must be larger or equal to {1}."
-            </summary>
-        </member>
-        <member name="F:Fadd.Check.FieldMinStr">
-            <summary>
-            "'{0}' must be larger or equal to {1}."
-            </summary>
-        </member>
-        <member name="F:Fadd.Check.FieldTrue">
-            <summary>
-            "'{0}' must evaluate as true.
-            </summary>
-        </member>
-        <member name="F:Fadd.Check.FieldFalse">
-            <summary>
-            "'{0}' must evaluate as false.
-            </summary>
-        </member>
-        <member name="F:Fadd.Check.FieldMax">
-            <summary>
-            "'{0}' must be less or equal to {1}."
-            </summary>
-        </member>
-        <member name="F:Fadd.Check.FieldMaxStr">
-            <summary>
-            "'{0}' must be less or equal to {1}."
-            </summary>
-        </member>
-        <member name="F:Fadd.Check.FieldNotEmpty">
-            <summary>
-            "'{0}' must be specified and not empty."
-            </summary>
-        </member>
-        <member name="F:Fadd.Check.FieldType">
-            <summary>
-            "'{1}' must be assignable from {0}."
-            </summary>
-        </member>
-        <member name="F:Fadd.Check._language">
-            <summary>
-            Contains language information
-            </summary>
-        </member>
-        <member name="M:Fadd.Check.True(System.Boolean,System.String)">
-            <summary>
-            The specified statement/parameter must be true.
-            </summary>
-            <param name="statement">statement/parameter to evaluate.</param>
-            <param name="messageOrParamName">Name of the message or param.</param>
-            <exception cref="T:Fadd.CheckException">If statement is not true.</exception>
-        </member>
-        <member name="M:Fadd.Check.False(System.Boolean,System.String)">
-            <summary>
-            The specified statement/parameter must be false.
-            </summary>
-            <param name="statement">statement/parameter to evaluate.</param>
-            <param name="messageOrParamName">Name of the message or param.</param>
-            <exception cref="T:Fadd.CheckException">If statement is true.</exception>
-        </member>
-        <member name="M:Fadd.Check.NotEqual(System.Object,System.Object,System.String)">
-            <summary>
-            Two values can't be equal.
-            </summary>
-            <param name="value">value/constant to compare to.</param>
-            <param name="paramValue">parameter value.</param>
-            <param name="messageOrParamName">parameter name, or a error message.</param>
-            <exception cref="T:Fadd.CheckException">If contract fails.</exception>
-            <remarks><paramref name="value"/> and <paramref name="paramValue"/> are both required.</remarks>
-        </member>
-        <member name="M:Fadd.Check.Between(System.Int32,System.Int32,System.Int32,System.String)">
-            <summary>
-            Value must be between (or equal) min and max
-            </summary>
-            <param name="min">minimum value.</param>
-            <param name="max">maximum value.</param>
-            <param name="value">parameter value.</param>
-            <param name="messageOrParamName">parameter name, or a error message.</param>
-            <exception cref="T:Fadd.CheckException">If contract fails.</exception>
-        </member>
-        <member name="M:Fadd.Check.Between(System.Int32,System.Int32,System.String,System.String)">
-            <summary>
-            Betweens the specified min.
-            </summary>
-            <param name="min">minimum value.</param>
-            <param name="max">maximum value.</param>
-            <param name="value">parameter value to check. May not be null.</param>
-            <param name="messageOrParamName">parameter name, or a error message.</param>
-            <exception cref="T:Fadd.CheckException">If contract fails.</exception>
-        </member>
-        <member name="M:Fadd.Check.Between(System.Int32,System.Int32,System.String,System.String,System.Boolean)">
-            <summary>
-            Betweens the specified min.
-            </summary>
-            <param name="min">minimum value.</param>
-            <param name="max">maximum value.</param>
-            <param name="value">parameter value.</param>
-            <param name="messageOrParamName">parameter name, or a error message.</param>
-            <param name="required"><paramref name="value"/> may be null if this parameter is false.</param>
-            <exception cref="T:Fadd.CheckException">If contract fails.</exception>
-        </member>
-        <member name="M:Fadd.Check.Min(System.DateTime,System.DateTime,System.String)">
-            <summary>
-            Checks if the value is equal or larger.
-            </summary>
-            <param name="min">minimum value.</param>
-            <param name="value">parameter value.</param>
-            <param name="messageOrParamName">parameter name, or a error message.</param>
-            <exception cref="T:Fadd.CheckException">If contract fails.</exception>
-        </member>
-        <member name="M:Fadd.Check.Min(System.Int32,System.Int32,System.String)">
-            <summary>
-            Checks if the value is equal or larger.
-            </summary>
-            <param name="min">minimum value.</param>
-            <param name="value">parameter value.</param>
-            <param name="messageOrParamName">parameter name, or a error message.</param>
-            <exception cref="T:Fadd.CheckException">If contract fails.</exception>
-        </member>
-        <member name="M:Fadd.Check.Min(System.Int64,System.Int64,System.String)">
-            <summary>
-            Checks if the value is equal or larger.
-            </summary>
-            <param name="min">minimum value.</param>
-            <param name="value">parameter value.</param>
-            <param name="messageOrParamName">parameter name, or a error message.</param>
-            <exception cref="T:Fadd.CheckException">If contract fails.</exception>
-        </member>
-        <member name="M:Fadd.Check.Min(System.Int32,System.String,System.String)">
-            <summary>
-            Checks if the value is equal or larger.
-            </summary>
-            <param name="min">minimum value.</param>
-            <param name="value">parameter value (may not be null).</param>
-            <param name="messageOrParamName">parameter name, or a error message.</param>
-            <exception cref="T:Fadd.CheckException">If contract fails.</exception>
-        </member>
-        <member name="M:Fadd.Check.Min(System.Int32,System.String,System.String,System.Boolean)">
-            <summary>
-            Checks if the value is equal or larger.
-            </summary>
-            <param name="min">minimum value.</param>
-            <param name="value">parameter value.</param>
-            <param name="messageOrParamName">parameter name, or a error message.</param>
-            <param name="required"><paramref name="value"/> may be null if this parameter is false.</param>
-            <exception cref="T:Fadd.CheckException">If contract fails.</exception>
-        </member>
-        <member name="M:Fadd.Check.Max(System.Int32,System.Int32,System.String)">
-            <summary>
-            Checks if the value is less or equal.
-            </summary>
-            <param name="max">maximum value.</param>
-            <param name="value">parameter value.</param>
-            <param name="messageOrParamName">parameter name, or a error message.</param>
-            <exception cref="T:Fadd.CheckException">If contract fails.</exception>
-        </member>
-        <member name="M:Fadd.Check.Max(System.Int32,System.String,System.String)">
-            <summary>
-            Checks if the value is less or equal.
-            </summary>
-            <param name="max">maximum value.</param>
-            <param name="value">parameter value.</param>
-            <param name="messageOrParamName">parameter name, or a error message.</param>
-            <exception cref="T:Fadd.CheckException">If contract fails.</exception>
-        </member>
-        <member name="M:Fadd.Check.Max(System.Int32,System.String,System.String,System.Boolean)">
-            <summary>
-            Checks if the value is less or equal.
-            </summary>
-            <param name="max">maximum value.</param>
-            <param name="value">parameter value.</param>
-            <param name="messageOrParamName">parameter name, or a error message.</param>
-            <param name="required"><paramref name="value"/> may be null if this parameter is false.</param>
-            <exception cref="T:Fadd.CheckException">If contract fails.</exception>
-        </member>
-        <member name="M:Fadd.Check.Max(System.DateTime,System.DateTime,System.String)">
-            <summary>
-            Checks if the value is less or equal.
-            </summary>
-            <param name="max">max value.</param>
-            <param name="value">parameter value.</param>
-            <param name="messageOrParamName">parameter name, or a error message.</param>
-            <exception cref="T:Fadd.CheckException">If contract fails.</exception>
-        </member>
-        <member name="M:Fadd.Check.Require(System.Object,System.String)">
-            <summary>
-            Parameter is required (may not be null).
-            </summary>
-            <param name="value">parameter value.</param>
-            <param name="messageOrParamName">parameter name, or a error message.</param>
-            <exception cref="T:Fadd.CheckException">If contract fails.</exception>
-        </member>
-        <member name="M:Fadd.Check.NotEmpty(System.String,System.String)">
-            <summary>
-            The specified string may not be null or empty.
-            </summary>
-            <param name="value">parameter value.</param>
-            <param name="messageOrParamName">parameter name, or a error message.</param>
-            <exception cref="T:Fadd.CheckException">If contract fails.</exception>
-        </member>
-        <member name="M:Fadd.Check.Type(System.Type,System.Object,System.String)">
-            <summary>
-            Check if the specified type can be assigned from the parameter type.
-            </summary>
-            <param name="type">Type that the parameter must be  (or derive/implement).</param>
-            <param name="instance">instance</param>
-            <param name="messageOrParamName">error message or parameter name</param>
-        </member>
-        <member name="P:Fadd.Check.Language">
-            <summary>
-            Contains language information
-            </summary>
-            <remarks>
-            Language may only be specified once.
-            </remarks>
-            <exception cref="T:System.InvalidOperationException">If language have been previously specified.</exception>
-        </member>
-        <member name="T:Fadd.CheckException">
-            <summary>
-            Exception thrown when a validation fails.
-            </summary>
-        </member>
-        <member name="M:Fadd.CheckException.#ctor(System.String,System.String,System.String[])">
-            <summary>
-            Initializes a new instance of the <see cref="T:Fadd.CheckException"/> class.
-            </summary>
-            <param name="orgMessage">The original error message (have not been formatted).</param>
-            <param name="msg">Formatted message.</param>
-            <param name="arguments">Message arguments.</param>
-        </member>
-        <member name="M:Fadd.CheckException.#ctor(System.String,System.String)">
-            <summary>
-            Initializes a new instance of the <see cref="T:Fadd.CheckException"/> class.
-            </summary>
-            <param name="orgMessage">The original error message (have not been formatted).</param>
-            <param name="msg">Formatted message.</param>
-        </member>
-        <member name="P:Fadd.CheckException.OrgString">
-            <summary>
-            Unformatted error message, {0} have not been replaced with parameter name.
-            </summary>
-            <remarks>
-            Can be used if you want to translate messages.
-            </remarks>
-        </member>
-        <member name="P:Fadd.CheckException.Arguments">
-            <summary>
-            Arguments to string to format. First argument is parameter name.
-            </summary>
-        </member>
-        <member name="T:Fadd.Parser.SimpleSQL.Tokens.PropertyValue">
-            <summary>
-            Contains a value in a condition.
-            </summary>
-        </member>
-        <member name="T:Fadd.Parser.SimpleSQL.Tokens.IConditional">
-            <summary>
-            Used to identify conditions (used by Property to see it the text is a property or something else)
-            </summary>
-        </member>
-        <member name="M:Fadd.Parser.SimpleSQL.Tokens.PropertyValue.#ctor(Fadd.Parser.SimpleSQL.Tokens.Property)">
-            <summary>
-            Initializes a new instance of the <see cref="T:Fadd.Parser.SimpleSQL.Tokens.PropertyValue"/> class.
-            </summary>
-            <param name="property">Property that this value belongs to.</param>
-        </member>
-        <member name="M:Fadd.Parser.SimpleSQL.Tokens.PropertyValue.ToString">
-            <summary>
-            Returns SQL
-            </summary>
-            <returns>@[propertyName]</returns>
-        </member>
-        <member name="P:Fadd.Parser.SimpleSQL.Tokens.PropertyValue.TokenIdentifier">
-            <summary>
-            Identifier for this token.
-            </summary>
-        </member>
-        <member name="P:Fadd.Parser.SimpleSQL.Tokens.PropertyValue.Property">
-            <summary>
-            Property that this token belongs to.
-            </summary>
-        </member>
-        <member name="P:Fadd.Parser.SimpleSQL.Tokens.PropertyValue.Name">
-            <summary>
-            Name of the parameter.
-            </summary>
-        </member>
-        <member name="T:Fadd.Parser.SimpleSQL.Tokens.MoreThan">
-            <summary>
-            >
-            </summary>
-        </member>
-        <member name="M:Fadd.Parser.SimpleSQL.Tokens.MoreThan.ToString">
-            <summary>
-            Returns SQL
-            </summary>
-            <returns>" &gt; "</returns>
-        </member>
-        <member name="P:Fadd.Parser.SimpleSQL.Tokens.MoreThan.TokenIdentifier">
-            <summary>
-            Used to determine the kind of this token
-            </summary>
-            <value></value>
-        </member>
-        <member name="T:Fadd.Parser.SimpleSQL.Tokens.And">
-            <summary>
-            'AND' SQL token
-            </summary>
-        </member>
-        <member name="M:Fadd.Parser.SimpleSQL.Tokens.And.ToString">
-            <summary>
-            SQL 'AND' text
-            </summary>
-            <returns>" AND "</returns>
-        </member>
-        <member name="P:Fadd.Parser.SimpleSQL.Tokens.And.TokenIdentifier">
-            <summary>
-            Used to determine the kind of this token
-            </summary>
-            <value></value>
-        </member>
-        <member name="T:Fadd.Parser.SimpleSQL.ParseTreeTokens.MoreThanToken">
-            <summary>
-            Parse >=
-            </summary>
-        </member>
-        <member name="M:Fadd.Parser.SimpleSQL.ParseTreeTokens.MoreThanToken.Match(Fadd.Parser.Tokenizer,Fadd.Parser.ParseTree)">
-            <summary>
-            Check if the current position is the start of this token
-            </summary>
-            <returns>true if our token is the next one.</returns>
-        </member>
-        <member name="M:Fadd.Parser.SimpleSQL.ParseTreeTokens.MoreThanToken.Parse(Fadd.Parser.Tokenizer,Fadd.Parser.ParseTree)">
-            <summary>
-            Parses the data in the specified <see cref="T:Fadd.Parser.Tokenizer"/>.
-            </summary>
-            <param name="tokenizer">The <see cref="T:Fadd.Parser.Tokenizer"/> containing the data to parse.</param>
-            <param name="tree"><see cref="T:Fadd.Parser.ParseTree"/> that is being built..</param>
-            <returns>true if more tokens can be parsed on the current leaf; false if we should continue to next leaf (parse no more children).</returns>
-        </member>
-        <member name="M:Fadd.Parser.SimpleSQL.ParseTreeTokens.ClassToken.Match(Fadd.Parser.Tokenizer,Fadd.Parser.ParseTree)">
-            <summary>
-            Check if the current position is the start of this token
-            </summary>
-            <returns>true if our token is the next one.</returns>
-        </member>
-        <member name="M:Fadd.Parser.SimpleSQL.ParseTreeTokens.ClassToken.Parse(Fadd.Parser.Tokenizer,Fadd.Parser.ParseTree)">
-            <summary>
-            Parses the data in the specified <see cref="T:Fadd.Parser.Tokenizer"/>.
-            </summary>
-            <param name="tokenizer">The <see cref="T:Fadd.Parser.Tokenizer"/> containing the data to parse.</param>
-            <param name="tree"><see cref="T:Fadd.Parser.ParseTree"/> that is being built..</param>
-            <returns>true if more tokens can be parsed on the current leaf; false if we should continue to next leaf (parse no more children).</returns>
-        </member>
-        <member name="M:Fadd.Parser.SimpleSQL.ParseTreeTokens.FromToken.Match(Fadd.Parser.Tokenizer,Fadd.Parser.ParseTree)">
-            <summary>
-            Check if the current position is the start of this token
-            </summary>
-            <returns>true if our token is the next one.</returns>
-        </member>
-        <member name="M:Fadd.Parser.SimpleSQL.ParseTreeTokens.FromToken.Parse(Fadd.Parser.Tokenizer,Fadd.Parser.ParseTree)">
-            <summary>
-            Parses the data in the specified <see cref="T:Fadd.Parser.Tokenizer"/>.
-            </summary>
-            <param name="tokenizer">The <see cref="T:Fadd.Parser.Tokenizer"/> containing the data to parse.</param>
-            <param name="tree"><see cref="T:Fadd.Parser.ParseTree"/> that is being built..</param>
-            <returns>true if more tokens can be parsed on the current leaf; false if we should continue to next leaf (parse no more children).</returns>
-        </member>
-        <member name="T:Fadd.Parser.Evaluator.ParseTreeTokens.InToken">
-            <summary>
-            An IN token.
-            </summary>
-        </member>
-        <member name="M:Fadd.Parser.Evaluator.ParseTreeTokens.InToken.Match(Fadd.Parser.Tokenizer,Fadd.Parser.ParseTree)">
-            <summary>
-            Check if the current position is the start of this token
-            </summary>
-            <returns>true if our token is the next one.</returns>
-        </member>
-        <member name="M:Fadd.Parser.Evaluator.ParseTreeTokens.InToken.Parse(Fadd.Parser.Tokenizer,Fadd.Parser.ParseTree)">
-            <summary>
-            Parses the data in the specified <see cref="T:Fadd.Parser.Tokenizer"/>.
-            </summary>
-            <param name="tokenizer">The <see cref="T:Fadd.Parser.Tokenizer"/> containing the data to parse.</param>
-            <param name="tree"><see cref="T:Fadd.Parser.ParseTree"/> that is being built..</param>
-            <returns>true if more tokens can be parsed on the current leaf; false if we should continue to next leaf (parse no more children).</returns>
-        </member>
-        <member name="T:Fadd.Parser.Evaluator.Evaluator">
-            <summary>
-            Parses a condition string and compares it to an item
-            </summary>
-            <remarks>
-            This class is NOT threadsafe.
-            </remarks>
-        </member>
-        <member name="M:Fadd.Parser.Evaluator.Evaluator.#ctor(System.String,System.Object[])">
-            <summary>
-            Initializes a new instance of the <see cref="T:Fadd.Parser.Evaluator.Evaluator"/> class.
-            </summary>
-            <param name="conditionString">Conditions, should look like: "Age &gt;= ? AND FirstName == ?".</param>
-            <param name="parameters">Parameters used in the condition, for instance 17 and Jonas in the example above.</param>
-            <example>
-            Evaluator = new Evaluator("FirstName = ? AND Age = ?", "Adam", 10});
-            </example>
-        </member>
-        <member name="M:Fadd.Parser.Evaluator.Evaluator.#ctor(System.Object[])">
-            <summary>
-            Initializes a new instance of the <see cref="T:Fadd.Parser.Evaluator.Evaluator"/> class.
-            </summary>
-            <param name="conditionAndParameters">First index is conditions, the rest is parameters.</param>
-            <example>
-            Evaluator = new Evaluator(new object[]{"FirstName = ?", "Adam"});
-            </example>
-        </member>
-        <member name="M:Fadd.Parser.Evaluator.Evaluator.Evaluate(System.Object)">
-            <summary>
-            Evaluates an instance.
-            </summary>
-            <param name="instance">The instance.</param>
-            <returns></returns>
-        </member>
-        <member name="M:Fadd.Parser.Evaluator.Evaluator.Evaluate``1(System.Collections.Generic.IList{``0})">
-            <summary>
-            Go through a list and find all items.
-            </summary>
-            <typeparam name="T"></typeparam>
-            <param name="items"></param>
-            <returns></returns>
-        </member>
-        <member name="M:Fadd.Parser.Evaluator.Evaluator.Evaluate(Fadd.Parser.Token)">
-            <summary>
-            Evaluate all tokens in the same level.
-            </summary>
-            <param name="token"></param>
-            <returns></returns>
-        </member>
-        <member name="M:Fadd.Parser.Evaluator.Evaluator.CheckItem(Fadd.Parser.Token,System.Int32@)">
-            <summary>
-            Token should be a property name.
-            </summary>
-            <param name="token"></param>
-            <param name="tokenIndex"></param>
-            <returns></returns>
-            <remarks>
-            Will take three of the tokens (property CONDITION target) and evaluate them.
-            </remarks>
-            <exception cref="T:System.FormatException">If values can't be casted to property type</exception>
-        </member>
-        <member name="T:Fadd.Parser.Evaluator.MyType">
-            <summary>
-
-            </summary>
-        </member>
-        <member name="F:Fadd.Parser.Evaluator.MyType.A">
-            <summary>
-
-            </summary>
-        </member>
-        <member name="F:Fadd.Parser.Evaluator.MyType.B">
-            <summary>
-
-            </summary>
-        </member>
-        <member name="T:Fadd.Parser.Evaluator.TestUser">
-            <summary>
-            User used during testing.
-            </summary>
-        </member>
-        <member name="P:Fadd.Parser.Evaluator.TestUser.FirstName">
-            <summary>
-            Gets or sets the first name.
-            </summary>
-            <value>The first name.</value>
-        </member>
-        <member name="P:Fadd.Parser.Evaluator.TestUser.LastName">
-            <summary>
-            Gets or sets the last name.
-            </summary>
-            <value>The last name.</value>
-        </member>
-        <member name="P:Fadd.Parser.Evaluator.TestUser.Age">
-            <summary>
-            Gets or sets the age.
-            </summary>
-            <value>The age.</value>
-        </member>
-        <member name="P:Fadd.Parser.Evaluator.TestUser.Status">
-            <summary>
-            Gets or sets the status.
-            </summary>
-            <value>The status.</value>
-        </member>
-        <member name="P:Fadd.Parser.Evaluator.TestUser.MyType">
-            <summary>
-
-            </summary>
-        </member>
-        <member name="T:Fadd.Data.DataLayerException">
-            <summary>
-            Main exception in the data layer.
-            </summary>
-        </member>
-        <member name="M:Fadd.Data.DataLayerException.#ctor(System.String,System.Data.Common.DbException)">
-            <summary>
-            Initializes a new instance of the <see cref="T:Fadd.Data.DataLayerException"/> class.
-            </summary>
-            <param name="msg">Error message.</param>
-            <param name="innerException">Inner exception.</param>
-        </member>
-        <member name="M:Fadd.Data.DataLayerException.#ctor(System.String)">
-            <summary>
-            Initializes a new instance of the <see cref="T:Fadd.Data.DataLayerException"/> class.
-            </summary>
-            <param name="msg">Error message.</param>
-        </member>
-        <member name="M:Fadd.Data.DataLayerException.#ctor(System.String,System.String)">
-            <summary>
-            Initializes a new instance of the <see cref="T:Fadd.Data.DataLayerException"/> class.
-            </summary>
-            <param name="sql">SQL query that failed</param>
-            <param name="msg">Error message.</param>
-        </member>
-        <member name="M:Fadd.Data.DataLayerException.#ctor(System.String,System.String,System.Data.Common.DbException)">
-            <summary>
-            Initializes a new instance of the <see cref="T:Fadd.Data.DataLayerException"/> class.
-            </summary>
-            <param name="sql">SQL query that failed</param>
-            <param name="msg">Error message.</param>
-            <param name="innerException">Inner exception.</param>
-        </member>
-        <member name="P:Fadd.Data.DataLayerException.Sql">
-            <summary>
-            SQL query that failed.
-            </summary>
-        </member>
-        <member name="T:Fadd.Validation.ValidateRequiredAttribute">
-            <summary>
-            Checks whether a field have been specified or not.
-            </summary>
-            <para>
-            Language file items:
-            <list type="table">
-                <listheader>
-                    <term>ItemName</term>
-                    <description>Language text</description>
-                </listheader>
-                <item>
-                    <term>AlphaNumeric</term>
-                    <description>'{0}' may only contain alpha numeric letters.</description>
-                </item>
-            </list>
-            </para>
-        </member>
-        <member name="M:Fadd.Validation.ValidateRequiredAttribute.#ctor">
-            <summary>
-            Initializes a new instance of the <see cref="T:Fadd.Validation.ValidateRequiredAttribute"/> class.
-            </summary>
-        </member>
-        <member name="M:Fadd.Validation.ValidateRequiredAttribute.#ctor(System.Object)">
-            <summary>
-            Initializes a new instance of the <see cref="T:Fadd.Validation.ValidateRequiredAttribute"/> class.
-            </summary>
-            <param name="emptyValue">value is considered to be not specified if the value matches this parameter.</param>
-        </member>
-        <member name="M:Fadd.Validation.ValidateRequiredAttribute.Validate(System.Object,System.Object)">
-            <summary>
-            Validate value
-            </summary>
-            <param name="context">Can be used to send a context object to the validation class. Useful if you provide your own validation classes which need to get information from your application. <seealso cref="T:Fadd.Validation.BeforeValidationEventArgs"/></param>
-            <param name="value">value to validate</param>
-            <returns>
-            true if value passed the validation; otherwise false.
-            </returns>
-        </member>
-        <member name="M:Fadd.Validation.ValidateRequiredAttribute.SupportsType(System.Type)">
-            <summary>
-            Determines if the validation support the specified type.
-            </summary>
-            <param name="type">Property/Value type.</param>
-            <returns>true if type is supported.</returns>
-            <remarks>
-            Used when validation objects are generated.
-            </remarks>
-        </member>
-        <member name="M:Fadd.Validation.ValidateRequiredAttribute.Format(System.String,Fadd.Globalization.ILanguageNode)">
-            <summary>
-            Localize error if validation failed.
-            </summary>
-            <param name="fieldName">Localized field name.</param>
-            <param name="validationLanguage">Language node with all validation translations.</param>
-            <returns>A localized error message if the validation failed; otherwise null.</returns>
-            <example>
-            <code>
-            attribute.Localize("FirstName", "'{0}' is required");
-            // will return "'{0}' is required" if the validation failed, else null.
-            </code>
-            </example>
-        </member>
-        <member name="T:Fadd.Validation.ValidateHexAttribute">
-            <summary>
-            Validates that a string property represents valid Hex value (Value should not either too large or too small for an Int64).
-            </summary>
-        </member>
-        <member name="F:Fadd.Validation.ValidateHexAttribute.Name">
-            <summary>
-            Name of the language item for this validation.
-            </summary>
-        </member>
-        <member name="M:Fadd.Validation.ValidateHexAttribute.Validate(System.Object,System.Object)">
-            <summary>
-            Validate value
-            </summary>
-            <param name="context">Can be used to send a context object to the validation class. Useful if you provide your own validation classes which need to get information from your application. <seealso cref="T:Fadd.Validation.BeforeValidationEventArgs"/></param>
-            <param name="value">value to validate</param>
-            <returns>
-            true if value passed the validation; otherwise false.
-            </returns>
-            <exception cref="T:System.NotSupportedException">Thrown if the value supplied is not a <see cref="T:System.String"/></exception>
-        </member>
-        <member name="M:Fadd.Validation.ValidateHexAttribute.Format(System.String,Fadd.Globalization.ILanguageNode)">
-            <summary>
-            Localize error if validation failed.
-            </summary>
-            <param name="fieldName">Localized field name.</param>
-            <param name="validationLanguage">Language node with all validation translations.</param>
-            <returns>
-            A localized error message if the validation failed; otherwise null.
-            </returns>
-            <example>
-            	<code>
-            attribute.Localize("FirstName", "'{0}' is required");
-            // will return "'{0}' is required" if the validation failed, else null.
-            </code>
-            </example>
-        </member>
-        <member name="M:Fadd.Validation.ValidateHexAttribute.SupportsType(System.Type)">
-            <summary>
-            Determines if the validation class support the specified type.
-            </summary>
-            <param name="type">Property/Value type.</param>
-            <returns>true if the type is supported.</returns>
-            <remarks>
-            Used when validation objects are generated.
-            </remarks>
-        </member>
-        <member name="T:Fadd.Validation.ObjectValidator">
-            <summary>
-            Contains all validations for a certain type of object.
-            </summary>
-        </member>
-        <member name="F:Fadd.Validation.ObjectValidator.CacheValidators">
-            <summary>
-            true if we should save a list with all generated validators, or generate new ones each time.
-            </summary>
-        </member>
-        <member name="M:Fadd.Validation.ObjectValidator.Create(System.Type)">
-            <summary>
-            Create a new validation object.
-            </summary>
-            <param name="type">Type of object to validate</param>
-            <returns></returns>
-        </member>
-        <member name="M:Fadd.Validation.ObjectValidator.Validate(System.Object,System.String)">
-            <summary>
-            Validate a specific property.
-            </summary>
-            <param name="instance">Instance to validate</param>
-            <param name="propertyName">Name of property</param>
-            <returns>A list with all validations that failed. Or an empty list of no validations failed.</returns>
-        </member>
-        <member name="M:Fadd.Validation.ObjectValidator.Validate(System.Object,System.Object,System.String)">
-            <summary>
-            Validate a specific property.
-            </summary>
-            <param name="context">An application specific context that's passed to all validation attributes. Useful if you've implemented your own validations.</param>
-            <param name="instance">Instance to validate</param>
-            <param name="propertyName">Name of property</param>
-            <returns>
-            A list with all validations that failed. Or an empty list of no validations failed.
-            </returns>
-        </member>
-        <member name="M:Fadd.Validation.ObjectValidator.Validate(System.Object,System.String,System.Collections.Generic.IList{Fadd.Validation.ValidationError})">
-            <summary>
-            Validate a specific property.
-            </summary>
-            <param name="instance">Instance to validate</param>
-            <param name="propertyName">Name of property</param>
-            <param name="errors">List to fill with validation errors, must not be null.</param>
-        </member>
-        <member name="M:Fadd.Validation.ObjectValidator.Validate(System.Object,System.Object,System.String,System.Collections.Generic.IList{Fadd.Validation.ValidationError})">
-            <summary>
-            Validate a specific property.
-            </summary>
-            <param name="context">An application specific context that's passed to all validation attributes. Useful if you've implemented your own validations.</param>
-            <param name="instance">Instance to validate</param>
-            <param name="propertyName">Name of property</param>
-            <param name="errors">List to fill with validation errors, must not be null.</param>
-        </member>
-        <member name="M:Fadd.Validation.ObjectValidator.Validate(System.Object)">
-            <summary>
-            Validate all properties in the object.
-            </summary>
-            <param name="instance">Instance to validate</param>
-            <returns>A list with validation errors, or an empty list of all validations succeeded.</returns>
-        </member>
-        <member name="M:Fadd.Validation.ObjectValidator.Validate(System.Object,System.Object)">
-            <summary>
-            Validate all properties in the object.
-            </summary>
-            <param name="context">An application specific context that's passed to all validation attributes. Useful if you've implemented your own validations.</param>
-            <param name="model">Instance to validate</param>
-            <returns>A list with validation errors, or an empty list of all validations succeeded.</returns>
-        </member>
-        <member name="P:Fadd.Validation.ObjectValidator.Type">
-            <summary>
-            Type that this validator is for.
-            </summary>
-        </member>
-        <member name="T:Fadd.Validation.BeforeValidationEventArgs">
-            <summary>
-            Used to be able to provide context to validation classes during validation.
-            </summary>
-        </member>
-        <member name="M:Fadd.Validation.BeforeValidationEventArgs.#ctor(Fadd.Validation.ValidateAttribute)">
-            <summary>
-            Initializes a new instance of the <see cref="T:Fadd.Validation.BeforeValidationEventArgs"/> class.
-            </summary>
-            <param name="attribute">Attribute that is going to be validated.</param>
-        </member>
-        <member name="P:Fadd.Validation.BeforeValidationEventArgs.Attribute">
-            <summary>
-            Attribute about to be used for validation.
-            </summary>
-        </member>
-        <member name="P:Fadd.Validation.BeforeValidationEventArgs.Context">
-            <summary>
-            Context that should be passed to the validation class.
-            </summary>
-        </member>
-        <member name="T:Fadd.Plugins.IPluginInfo">
-            <summary>
-            Contains user information about a plugin.
-            </summary>
-            <remarks>
-            Should be returned in the current language.
-            </remarks>
-            <seealso cref="P:System.Globalization.CultureInfo.CurrentCulture"/>
-        </member>
-        <member name="P:Fadd.Plugins.IPluginInfo.Name">
-            <summary>
-            Name of the plugin, it should be in the local language if possible.
-            </summary>
-        </member>
-        <member name="P:Fadd.Plugins.IPluginInfo.Description">
-            <summary>
-            Description of what the plugin does. Shown to the end user.
-            </summary>
-            <remarks>
-            The description may contain links to other pages and images.
-            Just make sure that your controller can handle them.
-            Links should be opened in new windows and not leave the market place.
-            </remarks>
-        </member>
-        <member name="P:Fadd.Plugins.IPluginInfo.Homepage">
-            <summary>
-            Author homepage
-            </summary>
-        </member>
-        <member name="P:Fadd.Plugins.IPluginInfo.Copyright">
-            <summary>
-            Copyright owner of this plugin.
-            </summary>
-        </member>
-        <member name="T:Fadd.Logging.TextFileLogger">
-            <summary>
-            Writes log entries to a text file.
-            </summary>
-        </member>
-        <member name="T:Fadd.Logging.Logger">
-            <summary>
-            Logger base class (provides helpers for stack frames)
-            </summary>
-        </member>
-        <member name="M:Fadd.Logging.Logger.#ctor(Fadd.Logging.LogFormatter,Fadd.Logging.ILoggerConfiguration)">
-            <summary>
-            Initializes a new instance of the <see cref="T:Fadd.Logging.Logger"/> class.
-            </summary>
-            <param name="formatter">used to format log entries.</param>
-            <param name="configuration">Configures a logger.</param>
-        </member>
-        <member name="M:Fadd.Logging.Logger.GetStackFrames">
-            <summary>
-            Get a certain amount of stack frames.
-            </summary>
-            <returns></returns>
-        </member>
-        <member name="M:Fadd.Logging.Logger.GetStackNames">
-            <summary>
-            Get an array with class.method names from the stack trace.
-            </summary>
-            <returns></returns>
-        </member>
-        <member name="M:Fadd.Logging.Logger.FormatEntry(System.String,System.Exception)">
-            <summary>
-            Format a log entry, uses <see cref="F:Fadd.Logging.LogLevel.Debug"/>.
-            </summary>
-            <param name="message">Entry written by programmer.</param>
-            <param name="error">Exception if any, may be null.</param>
-            <returns>Formatted message</returns>
-        </member>
-        <member name="M:Fadd.Logging.Logger.FormatEntry(Fadd.Logging.LogLevel,System.String,System.Exception)">
-            <summary>
-            Format a log entry.
-            </summary>
-            <param name="logLevel">Importance of message</param>
-            <param name="message">Entry written by programmer.</param>
-            <param name="error">Exception if any, may be null.</param>
-            <returns>Formatted message</returns>
-        </member>
-        <member name="M:Fadd.Logging.Logger.Trace(System.String)">
-            <summary>
-            Very detailed log messages, potentially of a high frequency and volume
-            </summary>
-            <param name="message">message written to the log.</param>
-        </member>
-        <member name="M:Fadd.Logging.Logger.Trace(System.String,System.Exception)">
-            <summary>
-            Very detailed log messages, potentially of a high frequency and volume
-            </summary>
-            <param name="message">message written to the log.</param>
-            <param name="exception">an exception.</param>
-        </member>
-        <member name="M:Fadd.Logging.Logger.Debug(System.String)">
-            <summary>
-            Less detailed and/or less frequent debugging messages
-            </summary>
-            <param name="message">message written to the log.</param>
-        </member>
-        <member name="M:Fadd.Logging.Logger.Debug(System.String,System.Exception)">
-            <summary>
-            Less detailed and/or less frequent debugging messages
-            </summary>
-            <param name="message">message written to the log.</param>
-            <param name="exception">an exception.</param>
-        </member>
-        <member name="M:Fadd.Logging.Logger.Info(System.String)">
-            <summary>
-            Informational messages
-            </summary>
-            <param name="message">message written to the log.</param>
-        </member>
-        <member name="M:Fadd.Logging.Logger.Info(System.String,System.Exception)">
-            <summary>
-            Informational messages
-            </summary>
-            <param name="message">message written to the log.</param>
-            <param name="exception">an exception.</param>
-        </member>
-        <member name="M:Fadd.Logging.Logger.Warning(System.String)">
-            <summary>
-            Warnings which don't appear to the user of the application
-            </summary>
-            <param name="message">message written to the log.</param>
-        </member>
-        <member name="M:Fadd.Logging.Logger.Warning(System.String,System.Exception)">
-            <summary>
-            Warnings which don't appear to the user of the application
-            </summary>
-            <param name="message">message written to the log.</param>
-            <param name="exception">an exception.</param>
-        </member>
-        <member name="M:Fadd.Logging.Logger.Error(System.String)">
-            <summary>
-            Error messages
-            </summary>
-            <param name="message">message written to the log.</param>
-        </member>
-        <member name="M:Fadd.Logging.Logger.Error(System.String,System.Exception)">
-            <summary>
-            Error messages
-            </summary>
-            <param name="message">message written to the log.</param>
-            <param name="exception">an exception.</param>
-        </member>
-        <member name="M:Fadd.Logging.Logger.Fatal(System.String)">
-            <summary>
-            Fatal error messages. After a fatal error, the application usually terminates.
-            </summary>
-            <param name="message">message written to the log.</param>
-        </member>
-        <member name="M:Fadd.Logging.Logger.Fatal(System.String,System.Exception)">
-            <summary>
-            Fatal error messages. After a fatal error, the application usually terminates.
-            </summary>
-            <param name="message">message written to the log.</param>
-            <param name="exception">an exception.</param>
-        </member>
-        <member name="P:Fadd.Logging.Logger.LoggerConfiguration">
-            <summary>
-            Gets the configuration used for the logger
-            </summary>
-            <value></value>
-        </member>
-        <member name="F:Fadd.Logging.TextFileLogger._messages">
-            <summary>
-            Log entries that are waiting on being written
-            </summary>
-        </member>
-        <member name="F:Fadd.Logging.TextFileLogger._isWriting">
-            <summary>
-            We are currently writing log entries to disk
-            </summary>
-        </member>
-        <member name="M:Fadd.Logging.TextFileLogger.#ctor(Fadd.Logging.LogFormatter,Fadd.Logging.ILoggerConfiguration)">
-            <summary>
-            Initializes a new instance of the <see cref="T:Fadd.Logging.ConsoleLogger"/> class.
-            </summary>
-            <param name="logFormatter">The log formatter.</param>
-            <param name="configuration">Configuration for the logger.</param>
-            <exception cref="T:System.ArgumentException">Configuration is not of type <see cref="T:Fadd.Logging.TextFileConfiguration"/>.</exception>
-        </member>
-        <member name="M:Fadd.Logging.TextFileLogger.Trace(System.String)">
-            <summary>
-            Very detailed log messages, potentially of a high frequency and volume
-            </summary>
-            <param name="message">message written to the log.</param>
-        </member>
-        <member name="M:Fadd.Logging.TextFileLogger.Trace(System.String,System.Exception)">
-            <summary>
-            Very detailed log messages, potentially of a high frequency and volume
-            </summary>
-            <param name="message">message written to the log.</param>
-            <param name="exception">an exception.</param>
-        </member>
-        <member name="M:Fadd.Logging.TextFileLogger.Debug(System.String)">
-            <summary>
-            Less detailed and/or less frequent debugging messages
-            </summary>
-            <param name="message">message written to the log.</param>
-        </member>
-        <member name="M:Fadd.Logging.TextFileLogger.Debug(System.String,System.Exception)">
-            <summary>
-            Less detailed and/or less frequent debugging messages
-            </summary>
-            <param name="message">message written to the log.</param>
-            <param name="exception">an exception.</param>
-        </member>
-        <member name="M:Fadd.Logging.TextFileLogger.Info(System.String)">
-            <summary>
-            Informational messages
-            </summary>
-            <param name="message">message written to the log.</param>
-        </member>
-        <member name="M:Fadd.Logging.TextFileLogger.Info(System.String,System.Exception)">
-            <summary>
-            Informational messages
-            </summary>
-            <param name="message">message written to the log.</param>
-            <param name="exception">an exception.</param>
-        </member>
-        <member name="M:Fadd.Logging.TextFileLogger.Warning(System.String)">
-            <summary>
-            Warnings which don't appear to the user of the application
-            </summary>
-            <param name="message">message written to the log.</param>
-        </member>
-        <member name="M:Fadd.Logging.TextFileLogger.Warning(System.String,System.Exception)">
-            <summary>
-            Warnings which don't appear to the user of the application
-            </summary>
-            <param name="message">message written to the log.</param>
-            <param name="exception">an exception.</param>
-        </member>
-        <member name="M:Fadd.Logging.TextFileLogger.Error(System.String)">
-            <summary>
-            Error messages
-            </summary>
-            <param name="message">message written to the log.</param>
-        </member>
-        <member name="M:Fadd.Logging.TextFileLogger.Error(System.String,System.Exception)">
-            <summary>
-            Error messages
-            </summary>
-            <param name="message">message written to the log.</param>
-            <param name="exception">an exception.</param>
-        </member>
-        <member name="M:Fadd.Logging.TextFileLogger.Fatal(System.String)">
-            <summary>
-            Fatal error messages. After a fatal error, the application usually terminates.
-            </summary>
-            <param name="message">message written to the log.</param>
-        </member>
-        <member name="M:Fadd.Logging.TextFileLogger.Fatal(System.String,System.Exception)">
-            <summary>
-            Fatal error messages. After a fatal error, the application usually terminates.
-            </summary>
-            <param name="message">message written to the log.</param>
-            <param name="exception">an exception.</param>
-        </member>
-        <member name="T:Fadd.Logging.LogProvider">
-            <summary>
-            Contains all configuration settings for the logs and provide the
-            requested loggers to the <see cref="T:Fadd.Logging.LogManager"/> when a log is requested.
-            </summary>
-        </member>
-        <member name="M:Fadd.Logging.LogProvider.GetLogger(System.String)">
-            <summary>
-            Get a logger with the specified name.
-            </summary>
-            <param name="name"></param>
-            <returns></returns>
-        </member>
-        <member name="M:Fadd.Logging.LogProvider.GetCurrentClassLogger">
-            <summary>
-            Get logger for current class.
-            </summary>
-            <returns></returns>
-        </member>
-        <member name="T:Fadd.Logging.ILoggerConfiguration">
-            <summary>
-            This class contains the general configuration for <see cref="T:Fadd.Logging.ILogger"/>, while each logger has it's
-            own specific configuration on top of this interface.
-            </summary>
-        </member>
-        <member name="M:Fadd.Logging.ILoggerConfiguration.Deserialize(System.IO.Stream)">
-            <summary>
-            Load a configuration from an XML stream
-            </summary>
-            <param name="stream">XML stream to read from</param>
-        </member>
-        <member name="M:Fadd.Logging.ILoggerConfiguration.Serialize(System.IO.Stream)">
-            <summary>
-            Write configuration into a XML stream.
-            </summary>
-            <param name="stream">XML stream to write to</param>
-        </member>
-        <member name="P:Fadd.Logging.ILoggerConfiguration.Name">
-            <summary>
-            Name of this logging configuration.
-            </summary>
-            <remarks>
-            Used in the configuration files (section loggers) to map a logger to a log.
-            </remarks>
-        </member>
-        <member name="P:Fadd.Logging.ILoggerConfiguration.MinLevel">
-            <summary>
-            The lowest level that can be written to all logs that have this <see cref="T:Fadd.Logging.ILogger"/> attached.
-            </summary>
-        </member>
-        <member name="P:Fadd.Logging.ILoggerConfiguration.MaxLevel">
-            <summary>
-            The max level that can be written to all logs that has this l<see cref="T:Fadd.Logging.ILogger"/>ogger attached.
-            </summary>
-        </member>
-        <member name="P:Fadd.Logging.ILoggerConfiguration.StackFrameCount">
-            <summary>
-            Number of stack frames to include in the logging
-            </summary>
-        </member>
-        <member name="P:Fadd.Logging.ILoggerConfiguration.StackFrameStart">
-            <summary>
-            Which stack frame to start with.
-            </summary>
-            <remarks>To skip all logging frames, specify 5 as start.</remarks>
-        </member>
-        <member name="P:Fadd.Logging.ILoggerConfiguration.Formatter">
-            <summary>
-            Formatter used to transform logging information into text (or binary formats).
-            </summary>
-        </member>
-        <member name="T:Fadd.Logging.LogLevel">
-            <summary>
-            Log levels
-            </summary>
-        </member>
-        <member name="F:Fadd.Logging.LogLevel.Trace">
-            <summary>
-            Very detailed logs useful when trying to find bugs.
-            </summary>
-        </member>
-        <member name="F:Fadd.Logging.LogLevel.Info">
-            <summary>
-            Information such as state changes etc.
-            </summary>
-        </member>
-        <member name="F:Fadd.Logging.LogLevel.Debug">
-            <summary>
-            Information useful during debugging
-            </summary>
-        </member>
-        <member name="F:Fadd.Logging.LogLevel.Warning">
-            <summary>
-            Something did go as expected, but it's nothing serious and
-            executing can continue without any problems.
-            </summary>
-        </member>
-        <member name="F:Fadd.Logging.LogLevel.Error">
-            <summary>
-            Something went wrong, but we can handle it, alhtough the execution
-            cannot continue as expected.
-            </summary>
-        </member>
-        <member name="F:Fadd.Logging.LogLevel.Fatal">
-            <summary>
-            Something went wrong and we can't really handle it.
-            </summary>
-        </member>
-        <member name="T:Fadd.Globalization.MemLanguageNode">
-            <summary>
-            Contains translation texts that have been loaded into memory
-            </summary>
-        </member>
-        <member name="F:Fadd.Globalization.MemLanguageNode._languages">
-            <summary>
-            int is LCID, NameValueCollection contains all phrases.
-            </summary>
-        </member>
-        <member name="M:Fadd.Globalization.MemLanguageNode.#ctor(System.Int32,System.String)">
-            <summary>Instantiates a LanguageNode that holds the language data in memory</summary>
-            <param name="defaultLCID">The defualt language code</param>
-            <param name="name">The name of the node</param>
-        </member>
-        <member name="M:Fadd.Globalization.MemLanguageNode.GetText(System.Int32,System.String)">
-            <summary>
-            Get a text string in the specified language.
-            </summary>
-            <param name="lcid">Language to fetch from.</param>
-            <param name="textName">name of text to find.</param>
-            <returns>string if found; otherwise null.</returns>
-        </member>
-        <member name="M:Fadd.Globalization.MemLanguageNode.GetText(System.Int32,System.String,System.Boolean)">
-            <summary>
-            Get a text string in the specified language.
-            </summary>
-            <param name="lcid">Language to fetch from.</param>
-            <param name="textName">name of text to find.</param>
-            <param name="checkPaths">check for paths in <paramref name="textName"/>.</param>
-            <returns>string if found; otherwise null.</returns>
-        </member>
-        <member name="M:Fadd.Globalization.MemLanguageNode.Add(System.String,System.Int32,System.String)">
-            <summary>
-            Adds a text entry to the language node
-            </summary>
-            <param name="name">Name of the entry</param>
-            <param name="lcid">Language of the entry</param>
-            <param name="text">The text of the entry</param>
-        </member>
-        <member name="M:Fadd.Globalization.MemLanguageNode.Set(System.String,System.Int32,System.String)">
-            <summary>
-            Sets a localized text string. If the a string with the specified name exists it will be overwritten.
-            </summary>
-            <param name="name">Name identifying the string. Used to fetch the string later on.</param>
-            <param name="lcid">locale</param>
-            <param name="text">Localized string</param>
-        </member>
-        <member name="M:Fadd.Globalization.MemLanguageNode.AddChild(System.String)">
-            <summary>
-            Adds a sub category
-            </summary>
-            <param name="name">Name of the sub category</param>
-            <exception cref="T:System.ArgumentException">If a category with the specified name already exists</exception>
-            <exception cref="T:System.ArgumentNullException">If name is null</exception>
-        </member>
-        <member name="M:Fadd.Globalization.MemLanguageNode.GetTextCount(System.Int32)">
-            <summary>
-            Returns number of text entries in the requested language
-            </summary>
-            <param name="lcid">The language to examine</param>
-        </member>
-        <member name="M:Fadd.Globalization.MemLanguageNode.Contains(System.String,System.Int32)">
-            <summary>
-            Determine if the node contains a text item with the specified name for the specified language
-            </summary>
-            <param name="name"></param>
-            <param name="lcid"></param>
-            <returns>
-            True if the node contains a language element with the specified name for the specified language
-            </returns>
-        </member>
-        <member name="M:Fadd.Globalization.MemLanguageNode.ContainsLanguage(System.Int32)">
-            <summary>
-            Determine if a category contains a specific language.
-            </summary>
-            <param name="lcid"></param>
-            <returns></returns>
-        </member>
-        <member name="M:Fadd.Globalization.MemLanguageNode.ClearHierarchy">
-            <summary>Empties all saved values in the node and its subnodes</summary>
-        </member>
-        <member name="P:Fadd.Globalization.MemLanguageNode.Item(System.String)">
-            <summary>Returns the requested entry using the systems current language</summary>
-            <param name="textName">Name of the entry to retrieve</param>
-            <returns>The entry or if not found in the current language, default language or in parent nodes returns [textName]</returns>
-        </member>
-        <member name="P:Fadd.Globalization.MemLanguageNode.Item(System.String,System.Int32)">
-            <summary>
-            A requested text entry in the requested language
-            </summary>
-            <param name="textName">Name of the entry to retrieve</param>
-            <param name="lcid">Language code for the language to retrieve the text in</param>
-            <returns>The entry or if not found in the current language, default language or in parent nodes returns [textName]</returns>
-        </member>
-        <member name="P:Fadd.Globalization.MemLanguageNode.Count">
-            <summary>
-            Returns the number of languages in the node
-            </summary>
-            <remarks>Returns the number of languages and Not text entries</remarks>
-        </member>
-        <member name="T:Fadd.Commands.Tests.MyCommand">
-            <summary>
-
-            </summary>
-        </member>
-        <member name="T:Fadd.Commands.Command">
-            <summary>
-            A command that will be invoked
-            </summary>
-        </member>
-        <member name="M:Fadd.Commands.Command.SetHandled(System.Boolean)">
-            <summary>
-            Set handled state.
-            </summary>
-            <param name="handled"></param>
-        </member>
-        <member name="P:Fadd.Commands.Command.IsHandled">
-            <summary>
-            true if the command have been handled.
-            </summary>
-            <remarks>Can be used to determine if another
-            handler already have processed the command.</remarks>
-        </member>
-        <member name="M:Fadd.Commands.Tests.MyCommand.#ctor(System.String)">
-            <summary>
-            Initializes a new instance of the <see cref="T:Fadd.Commands.Tests.MyCommand"/> class.
-            </summary>
-            <param name="name">The name.</param>
-        </member>
-        <member name="P:Fadd.Commands.Tests.MyCommand.Name">
-            <summary>
-            Gets or sets the name.
-            </summary>
-            <value>The name.</value>
-        </member>
-        <member name="T:Fadd.Commands.Tests.MyAttr">
-            <summary>
-
-            </summary>
-        </member>
-        <member name="T:Fadd.Commands.Tests.AllTypes">
-            <summary>
-
-            </summary>
-        </member>
-        <member name="T:Fadd.Commands.Tests.DerivedCmd">
-            <summary>
-
-            </summary>
-        </member>
-        <member name="M:Fadd.Commands.Tests.DerivedCmd.#ctor(System.String)">
-            <summary>
-            Initializes a new instance of the <see cref="T:Fadd.Commands.Tests.DerivedCmd"/> class.
-            </summary>
-            <param name="name">The name.</param>
-        </member>
-        <member name="T:Fadd.Commands.Tests.myFace">
-            <summary>
-
-            </summary>
-        </member>
-        <member name="M:Fadd.Commands.Tests.AllTypes.#ctor(System.String)">
-            <summary>
-            Initializes a new instance of the <see cref="T:Fadd.Commands.Tests.AllTypes"/> class.
-            </summary>
-            <param name="name">The name.</param>
-        </member>
-        <member name="T:Fadd.Commands.Tests.UnknownCommand">
-            <summary>
-
-            </summary>
-        </member>
-        <member name="T:Fadd.Commands.Tests.MyAttrCommand">
-            <summary>
-
-            </summary>
-        </member>
-        <member name="M:Fadd.Commands.Tests.MyAttrCommand.#ctor(System.String)">
-            <summary>
-            Initializes a new instance of the <see cref="T:Fadd.Commands.Tests.MyAttrCommand"/> class.
-            </summary>
-            <param name="name">The name.</param>
-        </member>
-        <member name="P:Fadd.Commands.Tests.MyAttrCommand.Name">
-            <summary>
-            Gets or sets the name.
-            </summary>
-            <value>The name.</value>
-        </member>
-        <member name="T:Fadd.Commands.Tests.MyFaceCmd">
-            <summary>
-
-            </summary>
-        </member>
-        <member name="M:Fadd.Commands.Tests.MyFaceCmd.#ctor(System.String)">
-            <summary>
-            Initializes a new instance of the <see cref="T:Fadd.Commands.Tests.MyFaceCmd"/> class.
-            </summary>
-            <param name="name">The name.</param>
-        </member>
-        <member name="P:Fadd.Commands.Tests.MyFaceCmd.Name">
-            <summary>
-            Gets or sets the name.
-            </summary>
-            <value>The name.</value>
-        </member>
-        <member name="T:Fadd.Parser.SimpleSQL.Tokens.OrderBy">
-            <summary>
-            ORDER BY SQL Clause.
-            </summary>
-        </member>
-        <member name="M:Fadd.Parser.SimpleSQL.Tokens.OrderBy.ToString">
-            <summary>
-            Returns SQL
-            </summary>
-            <returns>" ORDER BY "</returns>
-        </member>
-        <member name="P:Fadd.Parser.SimpleSQL.Tokens.OrderBy.TokenIdentifier">
-            <summary>
-            Used to determine the kind of this token
-            </summary>
-        </member>
-        <member name="T:Fadd.Parser.SimpleSQL.Tokens.Class">
-            <summary>
-            Class/Table name
-            </summary>
-        </member>
-        <member name="M:Fadd.Parser.SimpleSQL.Tokens.Class.#ctor(System.String)">
-            <summary>
-            Initializes a new instance of the <see cref="T:Fadd.Parser.SimpleSQL.Tokens.Class"/> class.
-            </summary>
-            <param name="name">Name of class.</param>
-        </member>
-        <member name="M:Fadd.Parser.SimpleSQL.Tokens.Class.ToString">
-            <summary>
-            Returns SQL name
-            </summary>
-            <returns>Table name</returns>
-        </member>
-        <member name="P:Fadd.Parser.SimpleSQL.Tokens.Class.TokenIdentifier">
-            <summary>
-            Used to determine the kind of this token
-            </summary>
-        </member>
-        <member name="P:Fadd.Parser.SimpleSQL.Tokens.Class.Name">
-            <summary>
-            Name of class
-            </summary>
-        </member>
-        <member name="M:Fadd.Parser.SimpleSQL.ParseTreeTokens.LikeToken.Match(Fadd.Parser.Tokenizer,Fadd.Parser.ParseTree)">
-            <summary>
-            Check if the current position is the start of this token
-            </summary>
-            <returns>true if our token is the next one.</returns>
-        </member>
-        <member name="M:Fadd.Parser.SimpleSQL.ParseTreeTokens.LikeToken.Parse(Fadd.Parser.Tokenizer,Fadd.Parser.ParseTree)">
-            <summary>
-            Parses the data in the specified <see cref="T:Fadd.Parser.Tokenizer"/>.
-            </summary>
-            <param name="tokenizer">The <see cref="T:Fadd.Parser.Tokenizer"/> containing the data to parse.</param>
-            <param name="tree"><see cref="T:Fadd.Parser.ParseTree"/> that is being built..</param>
-            <returns>true if more tokens can be parsed on the current leaf; false if we should continue to next leaf (parse no more children).</returns>
-        </member>
-        <member name="T:Fadd.Parser.Evaluator.ParseTreeTokens.MoreThanToken">
-            <summary>
-            Parse >=
-            </summary>
-        </member>
-        <member name="M:Fadd.Parser.Evaluator.ParseTreeTokens.MoreThanToken.Match(Fadd.Parser.Tokenizer,Fadd.Parser.ParseTree)">
-            <summary>
-            Check if the current position is the start of this token
-            </summary>
-            <returns>true if our token is the next one.</returns>
-        </member>
-        <member name="M:Fadd.Parser.Evaluator.ParseTreeTokens.MoreThanToken.Parse(Fadd.Parser.Tokenizer,Fadd.Parser.ParseTree)">
-            <summary>
-            Parses the data in the specified <see cref="T:Fadd.Parser.Tokenizer"/>.
-            </summary>
-            <param name="tokenizer">The <see cref="T:Fadd.Parser.Tokenizer"/> containing the data to parse.</param>
-            <param name="tree"><see cref="T:Fadd.Parser.ParseTree"/> that is being built..</param>
-            <returns>true if more tokens can be parsed on the current leaf; false if we should continue to next leaf (parse no more children).</returns>
-        </member>
-        <member name="T:Fadd.Data.Mappings.IMapping">
-            <summary>
-            Contains a mapping between a database table and a .Net class.
-            </summary>
-        </member>
-        <member name="M:Fadd.Data.Mappings.IMapping.GetColumnName(System.String)">
-            <summary>
-            Gets column name from a property name.
-            </summary>
-            <param name="name"></param>
-            <returns></returns>
-        </member>
-        <member name="M:Fadd.Data.Mappings.IMapping.GetPrimaryKey">
-            <summary>
-            Gets current primary key.
-            </summary>
-            <returns>The primary key if exactly ONE is defined; otherwise null.</returns>
-        </member>
-        <member name="P:Fadd.Data.Mappings.IMapping.TableName">
-            <summary>
-            Gets table name.
-            </summary>
-        </member>
-        <member name="P:Fadd.Data.Mappings.IMapping.Type">
-            <summary>
-            Gets class type
-            </summary>
-        </member>
-        <member name="P:Fadd.Data.Mappings.IMapping.Properties">
-            <summary>
-            Gets all mapped properties
-            </summary>
-        </member>
-        <member name="P:Fadd.Data.Mappings.IMapping.PrimaryKeys">
-            <summary>
-            Gets all primary keys
-            </summary>
-        </member>
-        <member name="T:Fadd.Components.CreatedEventArgs">
-            <summary>
-            Arguments for <see cref="E:Fadd.Components.ComponentFactory.Created"/>.
-            </summary>
-        </member>
-        <member name="M:Fadd.Components.CreatedEventArgs.#ctor(System.Type,System.Object,Fadd.Components.CreateMode,System.Collections.Generic.Stack{System.Type})">
-            <summary>
-            Initializes a new instance of the <see cref="T:Fadd.Components.CreatedEventArgs"/> class.
-            </summary>
-            <param name="interfaceType">Type of the interface used to request instance.</param>
-            <param name="instance">Instance being returned when <see cref="P:Fadd.Components.CreatedEventArgs.InterfaceType"/> is being requested..</param>
-            <param name="createMode">How the component was created</param>
-            <param name="dependencyStack">Current dependency stack</param>
-        </member>
-        <member name="M:Fadd.Components.CreatedEventArgs.#ctor(System.Type,System.Object,Fadd.Components.CreateMode)">
-            <summary>
-            Initializes a new instance of the <see cref="T:Fadd.Components.CreatedEventArgs"/> class.
-            </summary>
-            <param name="interfaceType">Type of the interface used to request instance.</param>
-            <param name="instance">Instance being returned when <see cref="P:Fadd.Components.CreatedEventArgs.InterfaceType"/> is being requested..</param>
-            <param name="createMode">How the component was created</param>
-        </member>
-        <member name="P:Fadd.Components.CreatedEventArgs.InterfaceType">
-            <summary>
-            Type of the interface used to request instance
-            </summary>
-        </member>
-        <member name="P:Fadd.Components.CreatedEventArgs.Instance">
-            <summary>
-            Instance being returned when <see cref="P:Fadd.Components.CreatedEventArgs.InterfaceType"/> is being requested.
-            </summary>
-        </member>
-        <member name="P:Fadd.Components.CreatedEventArgs.CreateMode">
-            <summary>
-            How the component was created.
-            </summary>
-        </member>
-        <member name="P:Fadd.Components.CreatedEventArgs.DependencyStack">
-            <summary>
-            An hiearchy to where the component is created.
-            </summary>
-            <remarks>
-            null if an instance was added.
-            </remarks>
-        </member>
-        <member name="T:Fadd.Components.CreateMode">
-            <summary>
-            How the component was created.
-            </summary>
-        </member>
-        <member name="F:Fadd.Components.CreateMode.InstanceAdded">
-            <summary>
-            an instance was added.
-            </summary>
-        </member>
-        <member name="F:Fadd.Components.CreateMode.Created">
-            <summary>
-            Created normally
-            </summary>
-        </member>
-        <member name="T:Fadd.Commands.ObjectProxyMethod">
-            <summary>
-            Class for building information strings about a proxy method
-            </summary>
-        </member>
-        <member name="M:Fadd.Commands.ObjectProxyMethod.#ctor(System.Reflection.MethodInfo)">
-            <summary>
-            Instantiates a new object to parse and create readable data for a method
-            </summary>
-            <param name="methodInfo"></param>
-        </member>
-        <member name="M:Fadd.Commands.ObjectProxyMethod.GetGenericName(System.Reflection.MethodInfo,System.String)">
-            <summary>
-            <![CDATA[
-            Returns a full generic name if needed, ie GetThings<P, Q>
-            ]]>
-            </summary>
-            <param name="info">The method to generate the name for</param>
-            <param name="name">The methods name</param>
-        </member>
-        <member name="M:Fadd.Commands.ObjectProxyMethod.GetTypedName(System.Reflection.MethodInfo,System.String)">
-            <summary>
-            Joins method name together with all parameter types creating an identifying string for the method
-            </summary>
-            <param name="info">The method to generate the name for</param>
-            <param name="methodName">The method name</param>
-        </member>
-        <member name="M:Fadd.Commands.ObjectProxyMethod.GenerateGetMethodCall(System.Reflection.MethodInfo,System.String)">
-            <summary>
-            Retrieves the call to Type.GetMethod needed to retrieve the method
-            </summary>
-            <param name="info">The method to retrieve</param>
-            <param name="methodName">The correct name of the method to retrieve</param>
-            <returns>
-            ie. GetMethod("GetUser", new Type[]{typeof(Int32)})
-            </returns>
-        </member>
-        <member name="M:Fadd.Commands.ObjectProxyMethod.GetArgumentArray(System.Reflection.MethodInfo)">
-            <summary>
-            Retrieves a string representation of a list putting together all the parameters passed to the method in an object array
-            </summary>
-            <param name="info">The method for which to generate the argument array string</param>
-            <returns>ie new object[]{value, argument}</returns>
-        </member>
-        <member name="M:Fadd.Commands.ObjectProxyMethod.GetArgumentDeclaration(System.Reflection.MethodInfo,System.Collections.Generic.ICollection{System.Type})">
-            <summary>
-            Retrieves the argument list
-            </summary>
-            <param name="methodInfo">The method to generate the argument from</param>
-            <param name="neededTypes">A list to which the methods needed types can be added</param>
-            <returns>Ie GetData(int arg1, string arg4) => Int32 arg1, String arg4</returns>
-        </member>
-        <member name="P:Fadd.Commands.ObjectProxyMethod.GetMethodCall">
-            <summary>
-            Retrieves a string representing the call to Type.GetMethods needed to retrieve the method
-            </summary>
-            <returns>
-            ie. GetMethod("GetUserName", new Type[]{typeof(Int32), typeof(String)});
-            </returns>
-        </member>
-        <member name="P:Fadd.Commands.ObjectProxyMethod.ReturnType">
-            <summary>
-            Retrieves a string representation of the method return type
-            </summary>
-        </member>
-        <member name="P:Fadd.Commands.ObjectProxyMethod.Name">
-            <summary>
-            Retrieves the name of a method
-            </summary>
-        </member>
-        <member name="P:Fadd.Commands.ObjectProxyMethod.Signature">
-            <summary>
-            Retrieves a signature for the method, ie _getValuesInt32String
-            </summary>
-        </member>
-        <member name="P:Fadd.Commands.ObjectProxyMethod.Declaration">
-            <summary>
-            Retrieves a string for declaring the ObjectProxy method in the form <see cref="F:Fadd.Commands.ObjectProxyMethod.MethodDeclaration"/>
-            </summary>
-        </member>
-        <member name="P:Fadd.Commands.ObjectProxyMethod.NeededTypes">
-            <summary>
-            Retrieves a list of types the method depends on
-            </summary>
-        </member>
-        <member name="M:Fadd.Parser.SimpleSQL.ParseTreeTokens.OrderByPropertyToken.Match(Fadd.Parser.Tokenizer,Fadd.Parser.ParseTree)">
-            <summary>
-            Check if the current position is the start of this token
-            </summary>
-            <returns>true if our token is the next one.</returns>
-        </member>
-        <member name="M:Fadd.Parser.SimpleSQL.ParseTreeTokens.OrderByPropertyToken.Parse(Fadd.Parser.Tokenizer,Fadd.Parser.ParseTree)">
-            <summary>
-            Parses the data in the specified <see cref="T:Fadd.Parser.Tokenizer"/>.
-            </summary>
-            <param name="tokenizer">The <see cref="T:Fadd.Parser.Tokenizer"/> containing the data to parse.</param>
-            <param name="tree"><see cref="T:Fadd.Parser.ParseTree"/> that is being built..</param>
-            <returns>true if more tokens can be parsed on the current leaf; false if we should continue to next leaf (parse no more children).</returns>
-        </member>
-        <member name="T:Fadd.MapHierarchy`2">
-            <summary>
-            A dictionary mapping not only values but also sub nodes of the same <see cref="T:Fadd.MapHierarchy`2"/> type
-            </summary>
-        </member>
-        <member name="M:Fadd.MapHierarchy`2.#ctor">
-            <summary>
-            Instances the <see cref="T:Fadd.MapHierarchy`2"/>
-            </summary>
-        </member>
-        <member name="M:Fadd.MapHierarchy`2.#ctor(`0)">
-            <summary>
-            Instances the <see cref="T:Fadd.MapHierarchy`2"/> with a given name that can be used to identify the map later
-            </summary>
-            <param name="name">A unique name in a hierarchy to set for the map</param>
-        </member>
-        <member name="M:Fadd.MapHierarchy`2.Add(`0,`1)">
-            <summary>
-            Adds a value
-            </summary>
-            <param name="key">The key to map the value to</param>
-            <param name="value">The value to add</param>
-            <exception cref="T:System.ArgumentException">Thrown if a value has already been added with the given key</exception>
-        </member>
-        <member name="M:Fadd.MapHierarchy`2.Set(`0,`1)">
-            <summary>
-            Updates or adds a value defined by the specified key
-            </summary>
-            <param name="key">The key of the value to update or add</param>
-            <param name="value">The value to set for the specified key</param>
-        </member>
-        <member name="M:Fadd.MapHierarchy`2.Remove(`0)">
-            <summary>
-            Removes a value specified by the given key from the <see cref="T:Fadd.MapHierarchy`2"/>
-            </summary>
-            <param name="key">The key to remove the value for</param>
-            <returns>True if a value was removed</returns>
-        </member>
-        <member name="M:Fadd.MapHierarchy`2.GetChild(`0)">
-            <summary>
-            Retrieves a child using a key
-            </summary>
-            <param name="key">The key the child is mapped to</param>
-            <returns>Null if not found</returns>
-        </member>
-        <member name="M:Fadd.MapHierarchy`2.Contains(`0)">
-            <summary>
-            Returns true if a value mapped to the given key is contained by the map
-            </summary>
-            <param name="key">Key the value is supposed to be mapped to</param>
-            <returns>True if a key is found</returns>
-        </member>
-        <member name="M:Fadd.MapHierarchy`2.ContainsValue(`1)">
-            <summary>
-            Returns true if a value is mapped
-            </summary>
-            <param name="value">The value to examine whether or not it is contained by the map</param>
-            <returns>True if the value is found</returns>
-        </member>
-        <member name="M:Fadd.MapHierarchy`2.ContainsMap(`0)">
-            <summary>
-            Returns true if a child exists that is mapped with the given key
-            </summary>
-            <param name="key">The key to examine child mappings for</param>
-            <returns>True if a child is found</returns>
-        </member>
-        <member name="M:Fadd.MapHierarchy`2.ContainsMap(Fadd.MapHierarchy{`0,`1})">
-            <summary>
-            Returns true if the map contains the specified child
-            </summary>
-            <param name="map">The map to examine whether or not it is contained</param>
-            <returns>True if the map is a child of the instance</returns>
-        </member>
-        <member name="M:Fadd.MapHierarchy`2.RemoveChild(Fadd.MapHierarchy{`0,`1})">
-            <summary>
-            Removes a child if contained. Since the name set for the map will be used to remove the map a name must have been specified.
-            </summary>
-            <param name="map">The map to remove</param>
-            <returns>True if the child was removed</returns>
-            <remarks>If removed the <see cref="P:Fadd.MapHierarchy`2.Parent"/> will be set to null for the map</remarks>
-        </member>
-        <member name="M:Fadd.MapHierarchy`2.RemoveChild(`0)">
-            <summary>
-            Removes a child if contained
-            </summary>
-            <param name="key">The key or name of the child to remove</param>
-            <returns>True if the child was removed</returns>
-            <remarks>If removed the <see cref="P:Fadd.MapHierarchy`2.Parent"/> will be set to null for the map removed</remarks>
-        </member>
-        <member name="M:Fadd.MapHierarchy`2.AddChild(Fadd.MapHierarchy{`0,`1})">
-            <summary>
-            Adds a child to the <see cref="T:Fadd.MapHierarchy`2"/> using the name specified in <see cref="P:Fadd.MapHierarchy`2.Name"/>
-            </summary>
-            <param name="map">The map to add as a child, must have a defined se <see cref="P:Fadd.MapHierarchy`2.Name"/></param>
-            <exception cref="T:System.InvalidOperationException">
-            Thrown if the map is already a child of another <see cref="T:Fadd.MapHierarchy`2"/> instance,
-            it must be removed from there manually before being added to avoid hiding logical errors in code
-            </exception>
-        </member>
-        <member name="M:Fadd.MapHierarchy`2.AddChild(Fadd.MapHierarchy{`0,`1},`0)">
-            <summary>
-            Adds a child to the <see cref="T:Fadd.MapHierarchy`2"/> using the name supplied
-            </summary>
-            <param name="map">The map to add as a child</param>
-            <param name="key">The name to set for the map, will override any previous name</param>
-            <exception cref="T:System.InvalidOperationException">
-            Thrown if the map is already a child of another <see cref="T:Fadd.MapHierarchy`2"/> instance,
-            it must be removed from there manually before being added to avoid hiding logical errors in code
-            </exception>
-        </member>
-        <member name="M:Fadd.MapHierarchy`2.GetEnumerator">
-            <summary>
-            Returns an enumerator that can iterate through all the values contained by the map
-            </summary>
-        </member>
-        <member name="M:Fadd.MapHierarchy`2.System#Collections#Generic#IEnumerable{System#Collections#Generic#KeyValuePair{KeyType@ValueType}}#GetEnumerator">
-            <summary>
-            Returns an enumerator that can iterate through all the values contained by the map
-            </summary>
-        </member>
-        <member name="P:Fadd.MapHierarchy`2.Item(`0)">
-            <summary>
-            Sets or gets a value held by the map
-            </summary>
-            <param name="key">Key mapping the value</param>
-            <returns>Null if the value wasn't found</returns>
-        </member>
-        <member name="P:Fadd.MapHierarchy`2.Values">
-            <summary>
-            Retrieves all values held by the map
-            </summary>
-        </member>
-        <member name="P:Fadd.MapHierarchy`2.Children">
-            <summary>
-            Retrieves all child <see cref="T:Fadd.MapHierarchy`2"/> held by the map
-            </summary>
-        </member>
-        <member name="P:Fadd.MapHierarchy`2.Name">
-            <summary>
-            Retrieves the name identifying the map, is null if no name is set
-            </summary>
-        </member>
-        <member name="P:Fadd.MapHierarchy`2.Parent">
-            <summary>
-            Retrieves any parent to the map, is null if no parent is set
-            </summary>
-        </member>
-        <member name="T:Fadd.Components.ComponentAttribute">
-            <summary>
-            This attribute can be put on a component to let the system find and load it.
-            </summary>
-        </member>
-        <member name="M:Fadd.Components.ComponentAttribute.#ctor(System.Type)">
-            <summary>
-            Initializes a new instance of the <see cref="T:Fadd.Components.ComponentAttribute"/> class.
-            </summary>
-            <param name="interfaceType">Type of the interface used to access this component.</param>
-        </member>
-        <member name="M:Fadd.Components.ComponentAttribute.#ctor(System.Type,System.Boolean)">
-            <summary>
-            Initializes a new instance of the <see cref="T:Fadd.Components.ComponentAttribute"/> class.
-            </summary>
-            <param name="interfaceType">Type of the interface used to access this component.</param>
-            <param name="isPrivate">Component is private, and cannot therefore not be accessed from <see cref="T:Fadd.Components.IComponentManager"/>.</param>
-        </member>
-        <member name="P:Fadd.Components.ComponentAttribute.IsPrivate">
-            <summary>
-            Gets whether component is private.
-            </summary>
-            <remarks>
-            Private components cannot be accessed from <see cref="T:Fadd.Components.IComponentManager"/>.
-            </remarks>
-        </member>
-        <member name="P:Fadd.Components.ComponentAttribute.InterfaceType">
-            <summary>
-            Interface type used to access the component.
-            </summary>
-        </member>
-        <member name="T:Fadd.Validation.ValidateEmailAttribute">
-            <summary>
-            Validates that a string property is an correct email.
-            </summary>
-            <para>
-            Language file items:
-            <list type="table">
-                <listheader>
-                    <term>ItemName</term>
-                    <description>Language text</description>
-                </listheader>
-                <item>
-                    <term>Email</term>
-                    <description>'{0}' must be a valid email address.</description>
-                </item>
-            </list>
-            </para>
-        </member>
-        <member name="M:Fadd.Validation.ValidateEmailAttribute.Format(System.String,Fadd.Globalization.ILanguageNode)">
-            <summary>
-            Localize the error.
-            </summary>
-            <param name="fieldName">Localized field name.</param>
-            <param name="validationLanguage">Language node with all validation translations.</param>
-            <returns>A localized error message if the validation failed; otherwise null.</returns>
-            <example>
-            <code>
-            attribute.Localize("FirstName", "'{0}' is required");
-            // will return "'{0}' is required" if the validation failed, else null.
-            </code>
-            </example>
-        </member>
-        <member name="M:Fadd.Validation.ValidateEmailAttribute.SupportsType(System.Type)">
-            <summary>
-            Determines if the validation support the specified type.
-            </summary>
-            <param name="type">Property/Value type.</param>
-            <returns>true if type is supported.</returns>
-            <remarks>
-            Used when validation objects are generated.
-            </remarks>
-        </member>
-        <member name="M:Fadd.Validation.ValidateEmailAttribute.Validate(System.Object,System.Object)">
-            <summary>
-            Validate value
-            </summary>
-            <param name="context">Can be used to send a context object to the validation class. Useful if you provide your own validation classes which need to get information from your application. <seealso cref="T:Fadd.Validation.BeforeValidationEventArgs"/></param>
-            <param name="value">value to validate</param>
-            <returns>
-            true if value passed the validation; otherwise false.
-            </returns>
-        </member>
-        <member name="T:Fadd.Commands.IRemote">
-            <summary>
-            Tag commands with this interface to be able to transport them through the
-            CommandChannel.
-            </summary>
-        </member>
-        <member name="M:Fadd.Commands.IRemote.CopyReply(Fadd.Commands.Command)">
-            <summary>
-            Copy all stuff that have been modified by the command handler.
-            </summary>
-            <param name="from">Command to copy reply from.</param>
-        </member>
-        <member name="T:Fadd.Commands.CommandManager">
-            <summary>
-            This is a bit more advanced command pattern. The regular command pattern
-            ties the command to the the class that handles the command. This
-            pattern removes that binding and makes the commands independent of
-            the logic that executes it.
-            <para>
-            The pattern also allows multiple handlers for each command, and you
-            can also add handlers for unhandled commands.
-            </para>
-            </summary>
-            <example>
-            <code>
-            // Map a handler to a command:
-            dispatcher.Add(typeof(MyCommand), OnMyCommand);
-
-            // invoke my command:
-            if (!dispatcher.Invoke(new MyCommand(myUserId)))
-              Console.WriteLine("No one handled the command!");
-            </code>
-            </example>
-        </member>
-        <member name="F:Fadd.Commands.CommandManager.AsyncTimeout">
-            <summary>
-            When asynchronous invokes should be removed (if <see cref="M:Fadd.Commands.CommandManager.EndInvoke(System.IAsyncResult)"/> have not been called.)
-            </summary>
-        </member>
-        <member name="F:Fadd.Commands.CommandManager._attributes">
-            <summary>
-            Attributes list used for commands that have not been mapped.
-            </summary>
-        </member>
-        <member name="F:Fadd.Commands.CommandManager._classes">
-            <summary>
-            Classes/interfaces list used for command that have not been mapped.
-            </summary>
-        </member>
-        <member name="F:Fadd.Commands.CommandManager._commandHandlers">
-            <summary>
-            Each command is mapped to different handlers
-            when the command is invoked. This is done once,
-            then this list is used to invoke the commands (= speed increase)
-            </summary>
-        </member>
-        <member name="F:Fadd.Commands.CommandManager._interfaces">
-            <summary>
-            Classes/interfaces list used for command that have not been mapped.
-            </summary>
-        </member>
-        <member name="M:Fadd.Commands.CommandManager.#ctor">
-            <summary>
-            Initializes a new instance of the <see cref="T:Fadd.Commands.CommandManager"/> class.
-            </summary>
-        </member>
-        <member name="M:Fadd.Commands.CommandManager.#ctor(Fadd.Commands.CommandManager,System.Boolean)">
-            <summary>
-            Create a new command manager
-            </summary>
-            <param name="parent">Parent manager, it will receive all commands that are
-            invoked in this instance, or just all unhandled ones.</param>
-            <param name="dispatchAll">true if all commands should be sent to the parent; otherwise just all unhandled will be sent.</param>
-        </member>
-        <member name="M:Fadd.Commands.CommandManager.Add(System.Type,Fadd.Commands.CommandHandler)">
-            <summary>
-            Add a command handler.
-            </summary>
-            <param name="type">Must be a class, an attribute.</param>
-            <param name="handler">handler handling the command</param>
-            <exception cref="T:System.ArgumentException">If handler have been added to that type already.</exception>
-            <example>
-            Program.Commands.Add(typeof(MyCommand), OnMyCommand);
-            </example>
-        </member>
-        <member name="M:Fadd.Commands.CommandManager.Remove(System.Type,Fadd.Commands.CommandHandler)">
-            <summary>
-            Remove a command handler.
-            </summary>
-            <param name="type">type to remove</param>
-            <param name="handler">delegated that was mapped to the type.</param>
-        </member>
-        <member name="M:Fadd.Commands.CommandManager.Invoke(System.Object,Fadd.Commands.Command,Fadd.Commands.CommandHandler)">
-            <summary>
-            Invoke a command.
-            </summary>
-            <param name="source">object that is invoking the command.</param>
-            <param name="command">command to invoke.</param>
-            <param name="ignoreMe">Handled that should not be invoked.</param>
-            <returns>true if command was handled.</returns>
-        </member>
-        <member name="M:Fadd.Commands.CommandManager.Invoke(Fadd.Commands.Command)">
-            <summary>
-            Invoke a command.
-            </summary>
-            <param name="command">command to invoke.</param>
-            <returns>true if command was handled.</returns>
-        </member>
-        <member name="M:Fadd.Commands.CommandManager.Invoke(Fadd.Commands.Command,Fadd.Commands.CommandHandler)">
-            <summary>
-            Invoke a command.
-            </summary>
-            <param name="command">command to invoke.</param>
-            <param name="ignoreMe">Handled that should not be invoked.</param>
-            <returns>true if command was handled.</returns>
-        </member>
-        <member name="M:Fadd.Commands.CommandManager.Invoke(System.Object,Fadd.Commands.Command)">
-            <summary>
-            Invoke a command.
-            </summary>
-            <param name="source">object that is invoking the command.</param>
-            <param name="command">command to invoke.</param>
-            <returns>true if command was handled.</returns>
-        </member>
-        <member name="M:Fadd.Commands.CommandManager.BeginInvoke(System.Object,Fadd.Commands.Command,Fadd.Commands.CommandHandler,System.AsyncCallback,System.Object)">
-            <summary>
-            Invoke a command asynchronously
-            </summary>
-            <param name="source">object that is invoking the command.</param>
-            <param name="command">Command to invoke</param>
-            <param name="ignoreMe">Handler that should not receive the command.</param>
-            <param name="callback">Callback that is invoked then the command completes.</param>
-            <param name="state">object that you can use to identify the command in the <see cref="T:System.AsyncCallback"/>-method.</param>
-            <returns>IAsyncResult if command was invoked successfully; otherwise null.</returns>
-        </member>
-        <member name="M:Fadd.Commands.CommandManager.BeginInvoke(System.Object,Fadd.Commands.Command,System.AsyncCallback,System.Object)">
-            <summary>
-            Invoke a command asynchronously
-            </summary>
-            <param name="command">Command to invoke</param>
-            <returns>IAsyncResult if command was invoked successfully; otherwise null.</returns>
-            <param name="source">object that is invoking the command.</param>
-            <param name="callback">Callback that is invoked then the command completes.</param>
-            <param name="state">object that you can use to identify the command in the <see cref="T:System.AsyncCallback"/>-method.</param>
-        </member>
-        <member name="M:Fadd.Commands.CommandManager.BeginInvoke(Fadd.Commands.Command,Fadd.Commands.CommandHandler,System.AsyncCallback,System.Object)">
-            <summary>
-            Invoke a command asynchronously
-            </summary>
-            <param name="command">Command to invoke</param>
-            <returns>IAsyncResult if command was invoked successfully; otherwise null.</returns>
-            <param name="ignoreMe">Handler that should not receive the command.</param>
-            <param name="callback">Callback that is invoked then the command completes.</param>
-            <param name="state">object that you can use to identify the command in the <see cref="T:System.AsyncCallback"/>-method.</param>
-        </member>
-        <member name="M:Fadd.Commands.CommandManager.BeginInvoke(Fadd.Commands.Command,System.AsyncCallback,System.Object)">
-            <summary>
-            Invoke a command asynchronously
-            </summary>
-            <param name="command">Command to invoke</param>
-            <returns>IAsyncResult if command was invoked successfully; otherwise null.</returns>
-            <param name="callback">Callback that is invoked then the command completes.</param>
-            <param name="state">object that you can use to identify the command in the <see cref="T:System.AsyncCallback"/>-method.</param>
-        </member>
-        <member name="M:Fadd.Commands.CommandManager.EndInvoke(System.IAsyncResult)">
-            <summary>
-            Invoke this method when the command is complete, or if you want to wait
-            on the command.
-            </summary>
-            <param name="res"></param>
-            <returns></returns>
-        </member>
-        <member name="M:Fadd.Commands.CommandManager.Contains(System.Type)">
-            <summary>
-            Tells us if we have a handler for the specified type.
-            </summary>
-            <param name="type">Type to check</param>
-            <returns>True if a handler have been registered otherwise false.</returns>
-        </member>
-        <member name="M:Fadd.Commands.CommandManager.TriggerUnhandled(Fadd.Commands.Command)">
-            <summary>
-            </summary>
-            <param name="command"></param>
-            <returns></returns>
-        </member>
-        <member name="M:Fadd.Commands.CommandManager.InvokePropagationCancelled(Fadd.Commands.Command,Fadd.Commands.CommandHandler)">
-            <summary>
-            A command handler have canceled a command, this event gives you a chance to
-            ignore that cancellation.
-            </summary>
-            <param name="command">command that was canceled.</param>
-            <param name="handler">handler that canceled the command.</param>
-            <returns>true means that we can cancel; false that we should continue</returns>
-        </member>
-        <member name="M:Fadd.Commands.CommandManager.AddNewCommand(Fadd.Commands.Command)">
-            <summary>
-            Map a command that have never been mapped.
-            </summary>
-            <param name="command"></param>
-            <returns></returns>
-        </member>
-        <member name="M:Fadd.Commands.CommandManager.MapCommand(Fadd.Commands.Command,System.Collections.Generic.ICollection{Fadd.Commands.CommandHandler})">
-            <summary>
-            Map a command to all handlers.
-            this is done to speed up the invoke process.
-            </summary>
-            <param name="command"></param>
-            <param name="handlers"></param>
-        </member>
-        <member name="E:Fadd.Commands.CommandManager.PropagationCancelled">
-            <summary>
-            Event that can override the <see cref="P:Fadd.Commands.CommandEventArgs.CancelPropagation"/> property.
-            </summary>
-            <seealso cref="T:Fadd.Commands.PropagationHandler"/>
-        </member>
-        <member name="E:Fadd.Commands.CommandManager.Unhandled">
-            <summary>
-            Handler for unhandled commands.
-            </summary>
-            <remarks>returning true will make the command look like it was handled</remarks>
-        </member>
-        <member name="T:Fadd.Commands.AsyncQueueItemResult">
-            <summary>
-            Used to keep track of all asynchronous commands.
-            </summary>
-        </member>
-        <member name="P:Fadd.Commands.AsyncQueueItemResult.IsCompleted">
-            <summary>
-            Gets an indication whether the asynchronous operation has completed.
-            </summary>
-
-            <returns>
-            true if the operation is complete; otherwise, false.
-            </returns>
-            <filterpriority>2</filterpriority>
-        </member>
-        <member name="P:Fadd.Commands.AsyncQueueItemResult.AsyncWaitHandle">
-            <summary>
-            Gets a <see cref="T:System.Threading.WaitHandle"></see> that is used to wait for an asynchronous operation to complete.
-            </summary>
-
-            <returns>
-            A <see cref="T:System.Threading.WaitHandle"></see> that is used to wait for an asynchronous operation to complete.
-            </returns>
-            <filterpriority>2</filterpriority>
-        </member>
-        <member name="P:Fadd.Commands.AsyncQueueItemResult.AsyncState">
-            <summary>
-            Gets a user-defined object that qualifies or contains information about an asynchronous operation.
-            </summary>
-
-            <returns>
-            A user-defined object that qualifies or contains information about an asynchronous operation.
-            </returns>
-            <filterpriority>2</filterpriority>
-        </member>
-        <member name="P:Fadd.Commands.AsyncQueueItemResult.CompletedSynchronously">
-            <summary>
-            Gets an indication of whether the asynchronous operation completed synchronously.
-            </summary>
-
-            <returns>
-            true if the asynchronous operation completed synchronously; otherwise, false.
-            </returns>
-            <filterpriority>2</filterpriority>
-        </member>
-        <member name="T:Fadd.Parser.SimpleSQL.Tokens.Equal">
-            <summary>
-            =
-            </summary>
-        </member>
-        <member name="M:Fadd.Parser.SimpleSQL.Tokens.Equal.ToString">
-            <summary>
-            Returns SQL
-            </summary>
-            <returns>" = "</returns>
-        </member>
-        <member name="P:Fadd.Parser.SimpleSQL.Tokens.Equal.TokenIdentifier">
-            <summary>
-            Used to determine the kind of this token
-            </summary>
-            <value></value>
-        </member>
-        <member name="T:Fadd.Parser.SimpleSQL.Tokens.Comma">
-            <summary>
-            Represents a comma
-            </summary>
-        </member>
-        <member name="M:Fadd.Parser.SimpleSQL.Tokens.Comma.ToString">
-            <summary>
-            Conditional string
-            </summary>
-            <returns>", "</returns>
-        </member>
-        <member name="P:Fadd.Parser.SimpleSQL.Tokens.Comma.TokenIdentifier">
-            <summary>
-            Used to determine the kind of this token
-            </summary>
-        </member>
-        <member name="M:Fadd.Parser.SimpleSQL.ParseTreeTokens.OrderByToken.Match(Fadd.Parser.Tokenizer,Fadd.Parser.ParseTree)">
-            <summary>
-            Check if the current position is the start of this token
-            </summary>
-            <returns>true if our token is the next one.</returns>
-        </member>
-        <member name="M:Fadd.Parser.SimpleSQL.ParseTreeTokens.OrderByToken.Parse(Fadd.Parser.Tokenizer,Fadd.Parser.ParseTree)">
-            <summary>
-            Parses the data in the specified <see cref="T:Fadd.Parser.Tokenizer"/>.
-            </summary>
-            <param name="tokenizer">The <see cref="T:Fadd.Parser.Tokenizer"/> containing the data to parse.</param>
-            <param name="tree"><see cref="T:Fadd.Parser.ParseTree"/> that is being built..</param>
-            <returns>true if more tokens can be parsed on the current leaf; false if we should continue to next leaf (parse no more children).</returns>
-        </member>
-        <member name="T:Fadd.Parser.Evaluator.Tokens.Property">
-            <summary>
-            A property name
-            </summary>
-        </member>
-        <member name="M:Fadd.Parser.Evaluator.Tokens.Property.#ctor(System.String)">
-            <summary>
-            Initializes a new instance of the <see cref="T:Fadd.Parser.Evaluator.Tokens.Property"/> class.
-            </summary>
-            <param name="name">Name of property.</param>
-        </member>
-        <member name="M:Fadd.Parser.Evaluator.Tokens.Property.ToString">
-            <summary>
-            Returns name of property
-            </summary>
-            <returns>name of property</returns>
-        </member>
-        <member name="P:Fadd.Parser.Evaluator.Tokens.Property.TokenIdentifier">
-            <summary>
-            Used to determine the kind of this token
-            </summary>
-            <value></value>
-        </member>
-        <member name="P:Fadd.Parser.Evaluator.Tokens.Property.Name">
-            <summary>
-            Name of property
-            </summary>
-        </member>
-        <member name="T:Fadd.Data.ConnectionHelpers.SqlServerHelper">
-            <summary>
-            Connection helper for SQL Server.
-            </summary>
-        </member>
-        <member name="T:Fadd.Data.IConnectionHelper">
-            <summary>
-            Used
-            </summary>
-        </member>
-        <member name="M:Fadd.Data.IConnectionHelper.CreateConnection">
-            <summary>
-            Create a new connection to the database.
-            </summary>
-            <returns>An open database connection.</returns>
-            <exception cref="T:Fadd.Data.DataLayerException">If connection fails.</exception>
-        </member>
-        <member name="M:Fadd.Data.IConnectionHelper.GetNextSequenceValue(System.Data.IDbConnection,System.String)">
-            <summary>
-            Try to get
-            </summary>
-            <param name="connection">Connection to use.</param>
-            <param name="sequenceName">Name of the sequence/generator.</param>
-            <returns>A generated value.</returns>
-            <exception cref="T:Fadd.Data.DataLayerException">If something failed </exception>
-        </member>
-        <member name="M:Fadd.Data.IConnectionHelper.GetAutoIncrementValue(System.Data.IDbConnection,System.String)">
-            <summary>
-            Gets the latest auto incremented value from the database.
-            </summary>
-            <param name="connection">Connection used when the object was saved.</param>
-            <param name="columnName">Name of the column that the auto incremented value is for.</param>
-            <returns>auto incremented value</returns>
-            <exception cref="T:Fadd.Data.DataLayerException">If something failed </exception>
-        </member>
-        <member name="M:Fadd.Data.IConnectionHelper.Paging(System.String,System.Int32,System.Int32)">
-            <summary>
-            Modifies the SQL statement to include paging.
-            </summary>
-            <param name="sqlStatement">SQL statement generated by the DAL.</param>
-            <param name="page">0 based index</param>
-            <param name="pageSize">number of entries per page</param>
-            <returns>SQL statement with paging</returns>
-            <example>
-            <code>
-            helper.Paging("SELECT * FROM users", 5, 10); // --> "SELECT * FROM users LIMIT 10 OFFSET 50"
-            </code>
-            </example>
-        </member>
-        <member name="P:Fadd.Data.IConnectionHelper.ConnectionString">
-            <summary>
-            Connection string
-            </summary>
-        </member>
-        <member name="M:Fadd.Data.ConnectionHelpers.SqlServerHelper.#ctor(System.String)">
-            <summary>
-            Initializes a new instance of the <see cref="T:Fadd.Data.ConnectionHelpers.SqlServerHelper"/> class.
-            </summary>
-            <param name="connectionString">The connection string.</param>
-        </member>
-        <member name="M:Fadd.Data.ConnectionHelpers.SqlServerHelper.CreateConnection">
-            <summary>
-            Create a new connection to the database.
-            </summary>
-            <returns>An open database connection.</returns>
-            <exception cref="T:Fadd.Data.DataLayerException">If connection fails.</exception>
-        </member>
-        <member name="M:Fadd.Data.ConnectionHelpers.SqlServerHelper.GetNextSequenceValue(System.Data.IDbConnection,System.String)">
-            <summary>
-            Try to get
-            </summary>
-            <param name="connection">Connection to use.</param>
-            <param name="sequenceName">Name of the sequence/generator.</param>
-            <returns>A generated value.</returns>
-            <exception cref="T:System.NotSupportedException">SQL Server do not support sequences.</exception>
-        </member>
-        <member name="M:Fadd.Data.ConnectionHelpers.SqlServerHelper.GetAutoIncrementValue(System.Data.IDbConnection,System.String)">
-            <summary>
-            Gets the latest auto incremented value from the database.
-            </summary>
-            <param name="connection">Connection used when the object was saved.</param>
-            <param name="columnName">Name of the column that the auto incremented value is for.</param>
-            <returns>auto incremented value</returns>
-            <exception cref="T:Fadd.Data.DataLayerException">If something failed </exception>
-        </member>
-        <member name="M:Fadd.Data.ConnectionHelpers.SqlServerHelper.Paging(System.String,System.Int32,System.Int32)">
-            <summary>
-            Modifies the SQL statement to include paging.
-            </summary>
-            <param name="sqlStatement">SQL statement generated by the DAL.</param>
-            <param name="page">0 based index</param>
-            <param name="pageSize">number of entries per page</param>
-            <returns>SQL statement with paging</returns>
-            <example>
-            	<code>
-            helper.Paging("SELECT * FROM users", 5, 10); // --&gt; "SELECT * FROM users LIMIT 10 OFFSET 50"
-            </code>
-            </example>
-        </member>
-        <member name="P:Fadd.Data.ConnectionHelpers.SqlServerHelper.ConnectionString">
-            <summary>
-            Connection string
-            </summary>
-            <value></value>
-        </member>
-        <member name="T:Fadd.Components.ComponentLoader">
-            <summary>
-            This class can scan dependencies to find components and load them.
-            </summary>
-            <remarks>
-            How do we know the interface that a component want to register with?
-            </remarks>
-        </member>
-        <member name="M:Fadd.Components.ComponentLoader.AddAllComponents(Fadd.Components.IComponentManager)">
-            <summary>
-            Add all componentManager to the specified component manager.
-            </summary>
-            <param name="componentManager"></param>
-        </member>
-        <member name="M:Fadd.Components.ComponentLoader.AddComponents(System.Collections.Generic.List{System.Reflection.Assembly})">
-            <summary>
-            Add all components found in the specified assemblies.
-            </summary>
-            <param name="assemblies"></param>
-        </member>
-        <member name="M:Fadd.Components.ComponentLoader.Find(System.String)">
-            <summary>
-            Find components in the specified path.
-            </summary>
-            <param name="fullPath">Path and wild cards.</param>
-            <exception cref="T:System.Reflection.ReflectionTypeLoadException"></exception>
-            <exception cref="T:System.TypeLoadException"></exception>
-        </member>
-        <member name="M:Fadd.Components.ComponentLoader.FindInternal(System.String)">
-            <summary>
-            Finds the specified full path.
-            </summary>
-            <param name="fullPath">Path and wild cards.</param>
-            <exception cref="T:System.TypeLoadException"></exception>
-        </member>
-        <member name="P:Fadd.Components.ComponentLoader.Components">
-            <summary>
-            Information about all found components.
-            </summary>
-        </member>
-        <member name="T:Fadd.Validation.ValidateAlphaNumericAttribute">
-            <summary>
-            Validates that a string only contains letter, digits and any of: <![CDATA['"\<>|-_.:,;'^~¨'*!#¤%&/()=?`´+}][{€$££@§½ ]]>
-            </summary>
-            <remarks>
-            <para>
-            Language file items:
-            <list type="table">
-                <listheader>
-                    <term>ItemName</term>
-                    <description>Language text</description>
-                </listheader>
-                <item>
-                    <term>AlphaNumeric</term>
-                    <description>'{0}' may only contain alpha numeric letters.</description>
-                </item>
-            </list>
-            </para>
-            </remarks>
-        </member>
-        <member name="T:Fadd.Validation.ValidateLettersAndDigitsAttribute">
-            <summary>
-            Input may only be letters and digits, foreign chars (for instance åäö) etc are included.
-            </summary>
-            <para>
-            Language file items:
-            <list type="table">
-                <listheader>
-                    <term>ItemName</term>
-                    <description>Language text</description>
-                </listheader>
-                <item>
-                    <term>LettersAndDigits</term>
-                    <description>'{0}' may only contain letters and digits.</description>
-                </item>
-                <item>
-                    <term>LettersAndDigitsExtra</term>
-                    <description>'{0}' may only contain letters. digits and '{1}'.</description>
-                </item>
-            </list>
-            </para>
-        </member>
-        <member name="F:Fadd.Validation.ValidateLettersAndDigitsAttribute.ForeignCharacters">
-            <summary>
-            Foreign characters (letters used for instance in the Swedish language)
-            </summary>
-        </member>
-        <member name="F:Fadd.Validation.ValidateLettersAndDigitsAttribute.ForeignCharactersSDC">
-            <summary>
-            Foreign characters (letters used for instance in the Swedish language) and space, dot and comma.
-            </summary>
-        </member>
-        <member name="F:Fadd.Validation.ValidateLettersAndDigitsAttribute.SDC">
-            <summary>
-            Space, dot and comma.
-            </summary>
-        </member>
-        <member name="M:Fadd.Validation.ValidateLettersAndDigitsAttribute.#ctor">
-            <summary>
-            Initializes a new instance of the <see cref="T:Fadd.Validation.ValidateLettersAndDigitsAttribute"/> class.
-            </summary>
-        </member>
-        <member name="M:Fadd.Validation.ValidateLettersAndDigitsAttribute.#ctor(System.String)">
-            <summary>
-            Initializes a new instance of the <see cref="T:Fadd.Validation.ValidateLettersAndDigitsAttribute"/> class.
-            </summary>
-            <param name="extraCharacters">The extra characters.</param>
-        </member>
-        <member name="M:Fadd.Validation.ValidateLettersAndDigitsAttribute.Validate(System.Object,System.Object)">
-            <summary>
-            Validate value
-            </summary>
-            <param name="context">Can be used to send a context object to the validation class. Useful if you provide your own validation classes which need to get information from your application. <seealso cref="T:Fadd.Validation.BeforeValidationEventArgs"/></param>
-            <param name="value">value to validate</param>
-            <returns>
-            true if value passed the validation; otherwise false.
-            </returns>
-        </member>
-        <member name="M:Fadd.Validation.ValidateLettersAndDigitsAttribute.Format(System.String,Fadd.Globalization.ILanguageNode)">
-            <summary>
-            Localize error if validation failed.
-            </summary>
-            <param name="fieldName">Localized field name.</param>
-            <param name="validationLanguage">Language node with all validation translations.</param>
-            <returns>A localized error message if the validation failed; otherwise null.</returns>
-            <example>
-            <code>
-            attribute.Localize("FirstName", "'{0}' is required");
-            // will return "'{0}' is required" if the validation failed, else null.
-            </code>
-            </example>
-        </member>
-        <member name="M:Fadd.Validation.ValidateLettersAndDigitsAttribute.SupportsType(System.Type)">
-            <summary>
-            Determines if the validation support the specified type.
-            </summary>
-            <param name="type">Property/Value type.</param>
-            <returns>true if type is supported.</returns>
-            <remarks>
-            Used when validation objects are generated.
-            </remarks>
-        </member>
-        <member name="P:Fadd.Validation.ValidateLettersAndDigitsAttribute.ExtraCharacters">
-            <summary>
-            Gets the extra characters.
-            </summary>
-            <value>The extra characters.</value>
-        </member>
-        <member name="M:Fadd.Validation.ValidateAlphaNumericAttribute.#ctor">
-            <summary>
-            Initializes a new instance of the <see cref="T:Fadd.Validation.ValidateAlphaNumericAttribute"/> class.
-            </summary>
-        </member>
-        <member name="M:Fadd.Validation.ValidateAlphaNumericAttribute.#ctor(System.String)">
-            <summary>
-            Initializes a new instance of the <see cref="T:Fadd.Validation.ValidateAlphaNumericAttribute"/> class.
-            </summary>
-            <param name="extraCharacters">The extra characters.</param>
-        </member>
-        <member name="M:Fadd.Validation.ValidateAlphaNumericAttribute.Format(System.String,Fadd.Globalization.ILanguageNode)">
-            <summary>
-            Localize error if validation failed.
-            </summary>
-            <param name="fieldName">Localized field name.</param>
-            <param name="validationLanguage">Language node with all validation translations.</param>
-            <returns>A localized error message if the validation failed; otherwise null.</returns>
-            <example>
-            <code>
-            attribute.Localize("FirstName", "'{0}' is required");
-            // will return "'{0}' is required" if the validation failed, else null.
-            </code>
-            </example>
-        </member>
-        <member name="T:Fadd.Validation.LocalizedValidator">
-            <summary>
-            Does validation using the current language.
-            </summary>
-            <remarks>
-            This class is thread safe, meaning that you can have multiple threads using it at the same time.
-            </remarks>
-        </member>
-        <member name="M:Fadd.Validation.LocalizedValidator.#ctor(Fadd.Globalization.ILanguageNode)">
-            <summary>
-            Initializes a new instance of the <see cref="T:Fadd.Validation.LocalizedValidator"/> class.
-            </summary>
-            <param name="validationLanguage">Node with the validation language.</param>
-        </member>
-        <member name="M:Fadd.Validation.LocalizedValidator.Localize(System.Collections.Generic.IEnumerable{Fadd.Validation.ValidationError},Fadd.Globalization.ILanguageNode)">
-            <summary>
-            Localize all error messages.
-            </summary>
-            <param name="errors">A list with validation errors.</param>
-            <param name="modelLanguage"><see cref="T:Fadd.Globalization.LanguageNode"/> containing language strings for the validated model.</param>
-            <returns>A list with localized errors; or an empty list if no validations failed.</returns>
-        </member>
-        <member name="M:Fadd.Validation.LocalizedValidator.Validate(System.Object,System.Object,Fadd.Globalization.ILanguageNode)">
-            <summary>
-            Validates a model and returns errors in the current language.
-            </summary>
-            <remarks>
-            Current language are decided by <see cref="P:System.Globalization.CultureInfo.CurrentCulture"/>.
-            </remarks>
-            <param name="context">An application specific context that's passed to all validation attributes. Useful if you've implemented your own validations.</param>
-            <param name="model">Model being validated.</param>
-            <param name="language">Language node for the model.</param>
-            <returns>A collection with all validations that failed; an empty collection if not validations failed.</returns>
-        </member>
-        <member name="T:Fadd.Commands.FilteredDispatcher">
-            <summary>
-            <para>
-            This dispatcher is used to be able to specify which commands that can be invoked.
-            </para>
-            </summary>
-            <remarks>
-            <para>
-            A typical usage would be if you have a plugin system and you do not want to allow
-            all plugins to be able to execute all commands. Then you create a proxy dispatcher
-            and expose it to the plugins, instead of the core dispatcher which contains all command
-            mappings. In this way, your core system it still protected while plugins can access
-            a subset of it.
-            </para>
-            </remarks>
-        </member>
-        <member name="M:Fadd.Commands.FilteredDispatcher.#ctor(Fadd.Commands.ICommandDispatcher,System.Collections.Generic.List{System.Type},System.Collections.Generic.List{System.Type})">
-            <summary>
-            Initializes a new instance of the <see cref="T:Fadd.Commands.FilteredDispatcher"/> class.
-            </summary>
-            <param name="parent">Parent dispatcher (that is used by the rest of the system).</param>
-            <param name="executeCommands">Commands that may be invoked.</param>
-            <param name="handledCommands">Commands that may be handled.</param>
-        </member>
-        <member name="M:Fadd.Commands.FilteredDispatcher.#ctor(Fadd.Commands.ICommandDispatcher)">
-            <summary>
-            Initializes a new instance of the <see cref="T:Fadd.Commands.FilteredDispatcher"/> class.
-            </summary>
-            <param name="parent">Parent dispatcher (that is used by the rest of the system).</param>
-            <remarks>No commands are allowed unless you use the <see cref="E:Fadd.Commands.FilteredDispatcher.InvokeRequested"/> event.</remarks>
-        </member>
-        <member name="M:Fadd.Commands.FilteredDispatcher.Add(System.Type,Fadd.Commands.CommandHandler)">
-            <summary>
-            Add a command handler.
-            </summary>
-            <param name="type">Must be a class, an attribute.</param>
-            <param name="handler">handler handling the command</param>
-            <exception cref="T:System.ArgumentException">If handler have been added to that type already.</exception>
-            <exception cref="T:System.InvalidOperationException">The specified command may not be handled.</exception>
-            <example>
-            Program.Commands.Add(typeof(MyCommand), OnMyCommand);
-            </example>
-        </member>
-        <member name="M:Fadd.Commands.FilteredDispatcher.Remove(System.Type,Fadd.Commands.CommandHandler)">
-            <summary>
-            Remove a command handler.
-            </summary>
-            <param name="type">type to remove</param>
-            <param name="handler">delegated that was mapped to the type.</param>
-        </member>
-        <member name="M:Fadd.Commands.FilteredDispatcher.Invoke(System.Object,Fadd.Commands.Command,Fadd.Commands.CommandHandler)">
-            <summary>
-            Invoke a command.
-            </summary>
-            <param name="source">object that is invoking the command.</param>
-            <param name="command">command to invoke.</param>
-            <param name="ignoreMe">Handled that should not be invoked.</param>
-            <returns>true if command was handled.</returns>
-        </member>
-        <member name="M:Fadd.Commands.FilteredDispatcher.Invoke(Fadd.Commands.Command)">
-            <summary>
-            Invoke a command.
-            </summary>
-            <param name="command">command to invoke.</param>
-            <returns>true if command was handled.</returns>
-            <exception cref="T:System.InvalidOperationException">If you may not invoke the specified command.</exception>
-        </member>
-        <member name="M:Fadd.Commands.FilteredDispatcher.Invoke(Fadd.Commands.Command,Fadd.Commands.CommandHandler)">
-            <summary>
-            Invoke a command.
-            </summary>
-            <param name="command">command to invoke.</param>
-            <param name="ignoreMe">Handled that should not be invoked.</param>
-            <returns>true if command was handled.</returns>
-        </member>
-        <member name="M:Fadd.Commands.FilteredDispatcher.Invoke(System.Object,Fadd.Commands.Command)">
-            <summary>
-            Invoke a command.
-            </summary>
-            <param name="source">object that is invoking the command.</param>
-            <param name="command">command to invoke.</param>
-            <returns>true if command was handled.</returns>
-        </member>
-        <member name="M:Fadd.Commands.FilteredDispatcher.BeginInvoke(System.Object,Fadd.Commands.Command,System.AsyncCallback,System.Object)">
-            <summary>
-            Invoke a command asynchronously
-            </summary>
-            <param name="source">object that is invoking the command.</param>
-            <param name="command">Command to invoke</param>
-            <param name="callback">Callback that is invoked then the command completes.</param>
-            <param name="state">object that you can use to identify the command in the <see cref="T:System.AsyncCallback"/>-method.</param>
-            <returns>IAsyncResult if command was invoked successfully; otherwise null.</returns>
-            <exception cref="T:System.InvalidOperationException">If you may not invoke the specified command.</exception>
-        </member>
-        <member name="M:Fadd.Commands.FilteredDispatcher.BeginInvoke(System.Object,Fadd.Commands.Command,Fadd.Commands.CommandHandler,System.AsyncCallback,System.Object)">
-            <summary>
-            Invoke a command asynchronously
-            </summary>
-            <param name="command">Command to invoke</param>
-            <param name="source">object that is invoking the command.</param>
-            <param name="ignoreMe">Handler that should not receive the command.</param>
-            <param name="callback">Callback that is invoked then the command completes.</param>
-            <param name="state">object that you can use to identify the command in the <see cref="T:System.AsyncCallback"/>-method.</param>
-            <returns>IAsyncResult if command was invoked successfully; otherwise null.</returns>
-        </member>
-        <member name="M:Fadd.Commands.FilteredDispatcher.BeginInvoke(Fadd.Commands.Command,System.AsyncCallback,System.Object)">
-            <summary>
-            Invoke a command asynchronously
-            </summary>
-            <param name="command">Command to invoke</param>
-            <returns>IAsyncResult if command was invoked successfully; otherwise null.</returns>
-            <param name="callback">Callback that is invoked then the command completes.</param>
-            <param name="state">object that you can use to identify the command in the <see cref="T:System.AsyncCallback"/>-method.</param>
-        </member>
-        <member name="M:Fadd.Commands.FilteredDispatcher.BeginInvoke(Fadd.Commands.Command,Fadd.Commands.CommandHandler,System.AsyncCallback,System.Object)">
-            <summary>
-            Invoke a command asynchronously
-            </summary>
-            <param name="command">Command to invoke</param>
-            <returns>IAsyncResult if command was invoked successfully; otherwise null.</returns>
-            <param name="ignoreMe">Handler that should not receive the command.</param>
-            <param name="callback">Callback that is invoked then the command completes.</param>
-            <param name="state">object that you can use to identify the command in the <see cref="T:System.AsyncCallback"/>-method.</param>
-        </member>
-        <member name="M:Fadd.Commands.FilteredDispatcher.EndInvoke(System.IAsyncResult)">
-            <summary>
-            Invoke this method when the command is complete, or if you want to wait
-            on the command.
-            </summary>
-            <param name="res"></param>
-            <returns></returns>
-        </member>
-        <member name="M:Fadd.Commands.FilteredDispatcher.Contains(System.Type)">
-            <summary>
-            Tells us if we have a handler for the specified type.
-            </summary>
-            <param name="type">Type to check</param>
-            <returns>True if a handler have been registered otherwise false.</returns>
-        </member>
-        <member name="E:Fadd.Commands.FilteredDispatcher.UnhandledExceptionThrown">
-            <summary>
-            Occurs when an unhandled exception have been caught.
-            </summary>
-        </member>
-        <member name="E:Fadd.Commands.FilteredDispatcher.AddRequested">
-            <summary>
-            This event is invoked when someone tries to add a handler for a command.
-            </summary>
-        </member>
-        <member name="E:Fadd.Commands.FilteredDispatcher.InvokeRequested">
-            <summary>
-            This event is invoked when someone tries to invoke a command.
-            </summary>
-        </member>
-        <member name="E:Fadd.Commands.FilteredDispatcher.Unhandled">
-            <summary>
-            Handler for unhandled commands.
-            </summary>
-            <remarks>returning true will make the command look like it was handled</remarks>
-        </member>
-        <member name="T:Fadd.Commands.MappedCommand">
-            <summary>
-            A mapped command have been assigned all subscribers that
-            have been mapped to an interface, subclass, or attribute
-            that the command contains.
-            </summary>
-        </member>
-        <member name="P:Fadd.Commands.MappedCommand.Handlers">
-            <summary>
-            All delegates that will be invoked for this command.
-            </summary>
-        </member>
-        <member name="P:Fadd.Commands.MappedCommand.Dirty">
-            <summary>
-            Dirty means that a new handler have been added since
-            the command was last invoked.
-            This means that we need to recheck whether we got all
-            handlers.
-            </summary>
-        </member>
-        <member name="T:Fadd.Commands.ObjectProxyGenerator">
-            <summary>
-            Generates Object proxies.
-            </summary>
-            <todo>
-            Name the proxies with generic types to allow multiple generic types ie ListInt32Proxy and ListStringProxy.
-            Pretty up the use of properties a bit.
-            Add tests for interface hierarchies and properties.
-            Add support for events in interfaces.
-            </todo>
-        </member>
-        <member name="M:Fadd.Commands.ObjectProxyGenerator.#ctor(Fadd.Commands.ICommandDispatcher)">
-            <summary>
-            Initializes a new instance of the <see cref="T:Fadd.Commands.ObjectProxyGenerator"/> class.
-            </summary>
-            <param name="dispatcher">Dispatcher used to send events.</param>
-        </member>
-        <member name="M:Fadd.Commands.ObjectProxyGenerator.Generate(System.Type)">
-            <summary>
-            Generate an object proxy
-            </summary>
-            <param name="type">Type to generate a proxy for</param>
-            <returns></returns>
-        </member>
-        <member name="M:Fadd.Commands.ObjectProxyGenerator.Compile(System.Type,System.String)">
-            <summary>
-            Compiles the proxy type declaration string that has been build
-            </summary>
-            <param name="type">The type from which to create a proxy</param>
-            <param name="code">The code to compile</param>
-            <returns>The compiled object or null if it couldn't be created</returns>
-        </member>
-        <member name="M:Fadd.Commands.ObjectProxyGenerator.AddProperties(System.Type)">
-            <summary>
-            Add all properties
-            </summary>
-            <param name="interfaceType"></param>
-        </member>
-        <member name="M:Fadd.Commands.ObjectProxyGenerator.BuildClassText(System.Type)">
-            <summary>
-            Build code for a proxy class.
-            </summary>
-            <param name="type">Type to build code for.</param>
-            <returns>a complete class (in text).</returns>
-        </member>
-        <member name="T:Fadd.Parser.SimpleSQL.Tokens.LessThan">
-            <summary>
-            <![CDATA[
-            <
-            ]]>
-            </summary>
-        </member>
-        <member name="M:Fadd.Parser.SimpleSQL.Tokens.LessThan.ToString">
-            <summary>
-            Returns SQL
-            </summary>
-            <returns>" &lt; "</returns>
-        </member>
-        <member name="P:Fadd.Parser.SimpleSQL.Tokens.LessThan.TokenIdentifier">
-            <summary>
-            Used to determine the kind of this token
-            </summary>
-            <value></value>
-        </member>
-        <member name="T:Fadd.Parser.SimpleSQL.ParseTreeTokens.PropertyValueToken">
-            <summary>
-            Contains a property value
-            </summary>
-        </member>
-        <member name="M:Fadd.Parser.SimpleSQL.ParseTreeTokens.PropertyValueToken.Match(Fadd.Parser.Tokenizer,Fadd.Parser.ParseTree)">
-            <summary>
-            Check if the current position is the start of this token
-            </summary>
-            <returns>true if our token is the next one.</returns>
-        </member>
-        <member name="M:Fadd.Parser.SimpleSQL.ParseTreeTokens.PropertyValueToken.Parse(Fadd.Parser.Tokenizer,Fadd.Parser.ParseTree)">
-            <summary>
-            Parses the data in the specified <see cref="T:Fadd.Parser.Tokenizer"/>.
-            </summary>
-            <param name="tokenizer">The <see cref="T:Fadd.Parser.Tokenizer"/> containing the data to parse.</param>
-            <param name="tree"><see cref="T:Fadd.Parser.ParseTree"/> that is being built..</param>
-            <returns>true if more tokens can be parsed on the current leaf; false if we should continue to next leaf (parse no more children).</returns>
-        </member>
-        <member name="T:Fadd.Parser.SimpleSQL.ParseTreeTokens.OrToken">
-            <summary>
-            Parse a OR token
-            </summary>
-        </member>
-        <member name="M:Fadd.Parser.SimpleSQL.ParseTreeTokens.OrToken.Match(Fadd.Parser.Tokenizer,Fadd.Parser.ParseTree)">
-            <summary>
-            Check if the current position is the start of this token
-            </summary>
-            <returns>true if our token is the next one.</returns>
-        </member>
-        <member name="M:Fadd.Parser.SimpleSQL.ParseTreeTokens.OrToken.Parse(Fadd.Parser.Tokenizer,Fadd.Parser.ParseTree)">
-            <summary>
-            Parses the data in the specified <see cref="T:Fadd.Parser.Tokenizer"/>.
-            </summary>
-            <param name="tokenizer">The <see cref="T:Fadd.Parser.Tokenizer"/> containing the data to parse.</param>
-            <param name="tree"><see cref="T:Fadd.Parser.ParseTree"/> that is being built..</param>
-            <returns>true if more tokens can be parsed on the current leaf; false if we should continue to next leaf (parse no more children).</returns>
-        </member>
-        <member name="T:Fadd.Parser.Evaluator.ParseTreeTokens.PropertyValueToken">
-            <summary>
-            Contains a property value
-            </summary>
-        </member>
-        <member name="M:Fadd.Parser.Evaluator.ParseTreeTokens.PropertyValueToken.Match(Fadd.Parser.Tokenizer,Fadd.Parser.ParseTree)">
-            <summary>
-            Check if the current position is the start of this token
-            </summary>
-            <returns>true if our token is the next one.</returns>
-        </member>
-        <member name="M:Fadd.Parser.Evaluator.ParseTreeTokens.PropertyValueToken.Parse(Fadd.Parser.Tokenizer,Fadd.Parser.ParseTree)">
-            <summary>
-            Parses the data in the specified <see cref="T:Fadd.Parser.Tokenizer"/>.
-            </summary>
-            <param name="tokenizer">The <see cref="T:Fadd.Parser.Tokenizer"/> containing the data to parse.</param>
-            <param name="tree"><see cref="T:Fadd.Parser.ParseTree"/> that is being built..</param>
-            <returns>true if more tokens can be parsed on the current leaf; false if we should continue to next leaf (parse no more children).</returns>
-        </member>
-        <member name="T:Fadd.Data.ITransaction">
-            <summary>
-            Database transaction.
-            </summary>
-            <remarks>
-            Makes it possible to save a lot of changes only
-            if all changes can succeed.
-            </remarks>
-        </member>
-        <member name="T:Fadd.Data.IDataLayer">
-            <summary>
-            Base interface.
-            </summary>
-        </member>
-        <member name="M:Fadd.Data.IDataLayer.CreateTransaction(System.Data.IsolationLevel)">
-            <summary>
-            Creates a new transaction.
-            </summary>
-            <param name="level">On of the <see cref="T:System.Data.IsolationLevel"/>s.</param>
-            <returns>An object representing the new transaction.</returns>
-            <remarks>
-            Once the transaction has completed, you must explicitly commit or roll back the transaction by using the Commit or Rollback methods.
-            </remarks>
-        </member>
-        <member name="M:Fadd.Data.IDataLayer.CreateTransaction">
-            <summary>
-            Creates a new transaction.
-            </summary>
-            <returns>An object representing the new transaction.</returns>
-            <remarks>
-            Once the transaction has completed, you must explicitly commit or roll back the transaction by using the Commit or Rollback methods.
-            </remarks>
-        </member>
-        <member name="M:Fadd.Data.IDataLayer.Query``1(System.String,System.Object[])">
-            <summary>
-            Get a single object.
-            </summary>
-            <typeparam name="T">Type of object to fetch</typeparam>
-            <param name="statement">complete SQL statement with class/properties instead of table/columns.</param>
-            <param name="parameters">parameters used in the statement.</param>
-            <returns>object if found; otherwise null</returns>
-            <exception cref="T:Fadd.Data.Mappings.MappingException">If the class/table mapping is incorrect.</exception>
-            <exception cref="T:Fadd.Data.DataLayerException">If data layer fails.</exception>
-        </member>
-        <member name="M:Fadd.Data.IDataLayer.Execute``1(System.String,System.Object[])">
-            <summary>
-            Executes an statement in the database.
-            </summary>
-            <typeparam name="T">Type of object to fetch</typeparam>
-            <param name="statement">complete SQL statement with class/properties instead of table/columns.</param>
-            <param name="parameters">parameters used in the statement.</param>
-            <returns>object if found; otherwise null</returns>
-            <exception cref="T:Fadd.Data.Mappings.MappingException">If the class/table mapping is incorrect.</exception>
-            <exception cref="T:Fadd.Data.DataLayerException">If data layer fails.</exception>
-        </member>
-        <member name="M:Fadd.Data.IDataLayer.Get``1(System.String,System.Object[])">
-            <summary>
-            Get a single object.
-            </summary>
-            <typeparam name="T">Type of object to fetch.</typeparam>
-            <param name="conditions">Conditions (corresponds to statements in the WHERE clause).</param>
-            <param name="parameters">Parameters used in the where clause.</param>
-            <returns>object if found; otherwise null.</returns>
-            <exception cref="T:Fadd.Data.Mappings.MappingException">If the class/table mapping is incorrect.</exception>
-            <exception cref="T:Fadd.Data.DataLayerException">If data layer fails.</exception>
-        </member>
-        <member name="M:Fadd.Data.IDataLayer.GetById``1(System.Object)">
-            <summary>
-            Get a single object using its primary key
-            </summary>
-            <typeparam name="T">Type of object to fetch, must have a defined mapping.</typeparam>
-            <param name="id">Primary key value</param>
-            <returns>object if found; otherwise null.</returns>
-            <exception cref="T:Fadd.Data.Mappings.MappingException">If the class/table mapping is incorrect.</exception>
-            <exception cref="T:Fadd.Data.DataLayerException">If data layer fails.</exception>
-        </member>
-        <member name="M:Fadd.Data.IDataLayer.Find``1(System.String,System.Object[])">
-            <summary>
-            Retrieves a collection of items.
-            </summary>
-            <typeparam name="T">Type of item to get.</typeparam>
-            <param name="conditions">Conditions to limit.</param>
-            <param name="parameters">Parameters used in the condition.</param>
-            <returns>A list of objects; or an empty list</returns>
-        </member>
-        <member name="M:Fadd.Data.IDataLayer.Find``1">
-            <summary>
-            Retrieves all items of a certain type.
-            </summary>
-            <typeparam name="T">Type of item to get.</typeparam>
-            <returns>A list of objects; or an empty list</returns>
-        </member>
-        <member name="M:Fadd.Data.IDataLayer.Find``1(Fadd.Data.Statement)">
-            <summary>
-            Gets all items defined by the <see cref="T:Fadd.Data.Statement"/>.
-            </summary>
-            <typeparam name="T">type of items to get.</typeparam>
-            <param name="statement">Statement specifying which elements to get.</param>
-            <returns>A list of elements.</returns>
-        </member>
-        <member name="M:Fadd.Data.IDataLayer.Save(System.Object)">
-            <summary>
-            Save or update an object in the database (1. Checks if the PK is empty. 2. Checks if the object exists in the db).
-            </summary>
-            <param name="value">Value to create/update.</param>
-            <exception cref="T:Fadd.Data.Mappings.MappingException">If the class/table mapping is incorrect.</exception>
-            <exception cref="T:Fadd.Data.DataLayerException">If data layer fails.</exception>
-        </member>
-        <member name="M:Fadd.Data.IDataLayer.Create(System.Object)">
-            <summary>
-            Create a new object in the database.
-            </summary>
-            <param name="value">Object to create.</param>
-            <exception cref="T:Fadd.Data.Mappings.MappingException">If the class/table mapping is incorrect.</exception>
-            <exception cref="T:Fadd.Data.DataLayerException">If data layer fails.</exception>
-        </member>
-        <member name="M:Fadd.Data.IDataLayer.Update(System.Object)">
-            <summary>
-            Update an existing object.
-            </summary>
-            <param name="value">Object to update</param>
-            <exception cref="T:Fadd.Data.Mappings.MappingException">If the class/table mapping is incorrect.</exception>
-            <exception cref="T:Fadd.Data.DataLayerException">If data layer fails.</exception>
-        </member>
-        <member name="M:Fadd.Data.IDataLayer.ExistsById``1(System.Object)">
-            <summary>
-            Checks if an object exists by using it's primary key.
-            </summary>
-            <typeparam name="T">Type of object to check</typeparam>
-            <param name="id">Primary key</param>
-            <returns>true if object was found; otherwise false.</returns>
-            <exception cref="T:Fadd.Data.Mappings.MappingException">If the class/table mapping is incorrect.</exception>
-            <exception cref="T:Fadd.Data.DataLayerException">If data layer fails.</exception>
-        </member>
-        <member name="M:Fadd.Data.IDataLayer.Exists(System.Object)">
-            <summary>
-            Checks if an object exists by providing it.
-            </summary>
-            <param name="model">object to check</param>
-            <returns>true if object is stored in the database; otherwise false.</returns>
-            <exception cref="T:Fadd.Data.Mappings.MappingException">If the class/table mapping is incorrect.</exception>
-            <exception cref="T:Fadd.Data.DataLayerException">If data layer fails.</exception>
-        </member>
-        <member name="M:Fadd.Data.IDataLayer.Exists``1(System.String,System.Object[])">
-            <summary>
-            Checks if an object exists in the database
-            </summary>
-            <typeparam name="T">Type of object to check.</typeparam>
-            <param name="conditions">Conditions.</param>
-            <param name="arguments">Arguments used in the conditions.</param>
-            <returns>true if object is stored in the database; otherwise false.</returns>
-            <exception cref="T:Fadd.Data.Mappings.MappingException">If the class/table mapping is incorrect.</exception>
-            <exception cref="T:Fadd.Data.DataLayerException">If data layer fails.</exception>
-        </member>
-        <member name="M:Fadd.Data.IDataLayer.RemoveById``1(System.Object)">
-            <summary>
-            Removes an object by using it's id property.
-            </summary>
-            <typeparam name="T">Type of object to remove.</typeparam>
-            <param name="id">Primary key value</param>
-            <exception cref="T:Fadd.Data.Mappings.MappingException">RemoveById requires exactly one primary key.</exception>
-        </member>
-        <member name="M:Fadd.Data.IDataLayer.Remove``1(System.String,System.Object[])">
-            <summary>
-            Removes an object by using it's id property.
-            </summary>
-            <typeparam name="T">Type of object to remove.</typeparam>
-        </member>
-        <member name="P:Fadd.Data.IDataLayer.MappingProviders">
-            <summary>
-            Gets class that takes care of all providers.
-            </summary>
-        </member>
-        <member name="M:Fadd.Data.ITransaction.Cancel">
-            <summary>
-            Cancel all changes made with the transaction.
-            </summary>
-            <remarks>
-            Cancel will be called by Dispose if commit have
-            not been called before the transaction is disposed.
-            </remarks>
-        </member>
-        <member name="M:Fadd.Data.ITransaction.Commit">
-            <summary>
-            Write all changes to the database.
-            </summary>
-        </member>
-        <member name="T:Fadd.Data.CompiledStatement">
-            <summary>
-            Contains a compiled SQL statements.
-            </summary>
-            <remarks>
-            "Compiled" means that we've converted the statement from ObjectSQL
-            to real SQL with table and column names.
-            </remarks>
-        </member>
-        <member name="M:Fadd.Data.CompiledStatement.#ctor(Fadd.Data.Mappings.IMapping,System.String,System.Collections.Generic.IList{System.String},System.Collections.Generic.IList{System.String})">
-            <summary>
-            Initializes a new instance of the <see cref="T:Fadd.Data.CompiledStatement"/> class.
-            </summary>
-            <param name="mapping">Mapping between columns and properties</param>
-            <param name="sql">SQL statement.</param>
-            <param name="properties">Properties that have been selected. null if no properties have been specified.</param>
-            <param name="arguments">Arguments used in the SQL statement..</param>
-        </member>
-        <member name="P:Fadd.Data.CompiledStatement.Arguments">
-            <summary>
-            Gets properties that are used as arguments to the statement.
-            </summary>
-        </member>
-        <member name="P:Fadd.Data.CompiledStatement.Sql">
-            <summary>
-            Gets SQL statement.
-            </summary>
-        </member>
-        <member name="P:Fadd.Data.CompiledStatement.Mapping">
-            <summary>
-            Gets mappings between columns and properties.
-            </summary>
-        </member>
-        <member name="P:Fadd.Data.CompiledStatement.Properties">
-            <summary>
-            Gets properties that have been selected.
-            </summary>
-            <remarks>
-            null if no properties have been specified.
-            </remarks>
-        </member>
-        <member name="T:Fadd.Plugins.PluginTypeInfo">
-            <summary>
-            A found plugin and which of the requested types that it implements.
-            </summary>
-        </member>
-        <member name="M:Fadd.Plugins.PluginTypeInfo.#ctor(System.String,System.Type,System.Byte[])">
-            <summary>
-            Initializes a new instance of the <see cref="T:Fadd.Plugins.PluginTypeInfo"/> class.
-            </summary>
-            <param name="assemblyLocation">assembly that the plugin resides in.</param>
-            <param name="type">plugin type.</param>
-            <param name="publicKey">assemblies public key. should be used to decide the amount of access for the module.</param>
-        </member>
-        <member name="M:Fadd.Plugins.PluginTypeInfo.Add(System.Type)">
-            <summary>
-            Add another type
-            </summary>
-            <param name="type"></param>
-        </member>
-        <member name="P:Fadd.Plugins.PluginTypeInfo.PublicKey">
-            <summary>
-            Assemblies public key if signed.
-            </summary>
-        </member>
-        <member name="P:Fadd.Plugins.PluginTypeInfo.Assembly">
-            <summary>
-            Assembly full path
-            </summary>
-        </member>
-        <member name="P:Fadd.Plugins.PluginTypeInfo.Location">
-            <summary>
-            Location of DLL.
-            </summary>
-        </member>
-        <member name="P:Fadd.Plugins.PluginTypeInfo.Types">
-            <summary>
-            Requested types that exists in the assembly
-            </summary>
-        </member>
-        <member name="P:Fadd.Plugins.PluginTypeInfo.PublicKeyRaw">
-            <summary>
-            Assembly public key in byte format.
-            </summary>
-        </member>
-        <member name="T:Fadd.Components.LoadFailedException">
-            <summary>
-            thrown when components can't be loaded.
-            </summary>
-        </member>
-        <member name="M:Fadd.Components.LoadFailedException.#ctor(System.Collections.Generic.Dictionary{System.Type,System.Type})">
-            <summary>
-            Initializes a new instance of the <see cref="T:Fadd.Components.LoadFailedException"/> class.
-            </summary>
-            <param name="notLoadedComponents">The not loaded components.</param>
-        </member>
-        <member name="P:Fadd.Components.LoadFailedException.Message">
-            <summary>
-            Gets a message that describes the current exception.
-            </summary>
-            <value></value>
-            <returns>The error message that explains the reason for the exception, or an empty string("").</returns>
-        </member>
-        <member name="P:Fadd.Components.LoadFailedException.Components">
-            <summary>
-            Gets the not loaded components.
-            </summary>
-            <value>The not loaded components.</value>
-        </member>
-        <member name="T:Fadd.Commands.Net.DisconnectedEventArgs">
-            <summary>
-            Arguments for <see cref="T:Fadd.Commands.Net.DisconnectedHandler"/>
-            </summary>
-        </member>
-        <member name="M:Fadd.Commands.Net.DisconnectedEventArgs.#ctor(System.Net.Sockets.SocketError)">
-            <summary>
-            Initializes a new instance of the <see cref="T:Fadd.Commands.Net.DisconnectedEventArgs"/> class.
-            </summary>
-            <param name="error">Why we were disconnected.</param>
-            <remarks>SocketError.Success means that we disconnected due to invalid data/packet from the remote end.</remarks>
-        </member>
-        <member name="P:Fadd.Commands.Net.DisconnectedEventArgs.Error">
-            <summary>
-            Why we were disconnected.
-            </summary>
-        </member>
-        <member name="T:Fadd.Commands.Net.DisconnectedHandler">
-            <summary>
-            Called when a connection have been closed.
-            </summary>
-            <param name="source">Socket/Tunnel/Channel</param>
-            <param name="args">Why it was disconnected.</param>
-        </member>
-        <member name="T:Fadd.Parser.SimpleSQL.Tokens.Delete">
-            <summary>
-            DELETE FROM clause
-            </summary>
-        </member>
-        <member name="T:Fadd.Parser.SimpleSQL.Tokens.From">
-            <summary>
-            FROM SQL clause
-            </summary>
-        </member>
-        <member name="M:Fadd.Parser.SimpleSQL.Tokens.From.ToString">
-            <summary>
-            Returns SQL
-            </summary>
-            <returns>" FROM "</returns>
-        </member>
-        <member name="P:Fadd.Parser.SimpleSQL.Tokens.From.TokenIdentifier">
-            <summary>
-            Used to determine the kind of this token
-            </summary>
-        </member>
-        <member name="M:Fadd.Parser.SimpleSQL.Tokens.Delete.ToString">
-            <summary>
-            Returns SQL
-            </summary>
-            <returns>"DELETE FROM "</returns>
-        </member>
-        <member name="P:Fadd.Parser.SimpleSQL.Tokens.Delete.TokenIdentifier">
-            <summary>
-            Used to determine the kind of this token
-            </summary>
-            <value></value>
-        </member>
-        <member name="T:Fadd.Parser.SimpleSQL.ParseTreeTokens.MoreOrEqualToken">
-            <summary>
-            Parse >=
-            </summary>
-        </member>
-        <member name="M:Fadd.Parser.SimpleSQL.ParseTreeTokens.MoreOrEqualToken.Match(Fadd.Parser.Tokenizer,Fadd.Parser.ParseTree)">
-            <summary>
-            Check if the current position is the start of this token
-            </summary>
-            <returns>true if our token is the next one.</returns>
-        </member>
-        <member name="M:Fadd.Parser.SimpleSQL.ParseTreeTokens.MoreOrEqualToken.Parse(Fadd.Parser.Tokenizer,Fadd.Parser.ParseTree)">
-            <summary>
-            Parses the data in the specified <see cref="T:Fadd.Parser.Tokenizer"/>.
-            </summary>
-            <param name="tokenizer">The <see cref="T:Fadd.Parser.Tokenizer"/> containing the data to parse.</param>
-            <param name="tree"><see cref="T:Fadd.Parser.ParseTree"/> that is being built..</param>
-            <returns>true if more tokens can be parsed on the current leaf; false if we should continue to next leaf (parse no more children).</returns>
-        </member>
-        <member name="T:Fadd.Parser.SimpleSQL.ParseTreeTokens.InToken">
-            <summary>
-            An IN token.
-            </summary>
-        </member>
-        <member name="M:Fadd.Parser.SimpleSQL.ParseTreeTokens.InToken.Match(Fadd.Parser.Tokenizer,Fadd.Parser.ParseTree)">
-            <summary>
-            Check if the current position is the start of this token
-            </summary>
-            <returns>true if our token is the next one.</returns>
-        </member>
-        <member name="M:Fadd.Parser.SimpleSQL.ParseTreeTokens.InToken.Parse(Fadd.Parser.Tokenizer,Fadd.Parser.ParseTree)">
-            <summary>
-            Parses the data in the specified <see cref="T:Fadd.Parser.Tokenizer"/>.
-            </summary>
-            <param name="tokenizer">The <see cref="T:Fadd.Parser.Tokenizer"/> containing the data to parse.</param>
-            <param name="tree"><see cref="T:Fadd.Parser.ParseTree"/> that is being built..</param>
-            <returns>true if more tokens can be parsed on the current leaf; false if we should continue to next leaf (parse no more children).</returns>
-        </member>
-        <member name="T:Fadd.Globalization.DurationDetail">
-            <summary>
-            Enumeration specifying a detail level in which to display a duration
-            </summary>
-        </member>
-        <member name="F:Fadd.Globalization.DurationDetail.Months">
-            <summary>
-            Display duration in months and years
-            </summary>
-        </member>
-        <member name="F:Fadd.Globalization.DurationDetail.Days">
-            <summary>
-            Display duration in days, months and years
-            </summary>
-        </member>
-        <member name="F:Fadd.Globalization.DurationDetail.Hours">
-            <summary>
-            Display duration in hours, days, months and years
-            </summary>
-        </member>
-        <member name="F:Fadd.Globalization.DurationDetail.Minutes">
-            <summary>
-            Display duration in hours, days, months and years
-            </summary>
-        </member>
-        <member name="F:Fadd.Globalization.DurationDetail.Seconds">
-            <summary>
-            Display duration down to the second
-            </summary>
-        </member>
-        <member name="T:Fadd.Globalization.IDateTimeHelper">
-            <summary>
-            Interface for all localized date/time helpers.
-            </summary>
-        </member>
-        <member name="M:Fadd.Globalization.IDateTimeHelper.ParseDateTime(System.String)">
-            <summary>
-            Will try to parse the date/time using the local parser.
-            Will also try the default DateTime.Parse method if date is in an unknown format.
-            </summary>
-            <param name="value">date/time string</param>
-            <returns>A <see cref="T:System.DateTime"/></returns>
-            <exception cref="T:System.FormatException">If the date/time format is invalid.</exception>
-            <exception cref="T:System.ArgumentOutOfRangeException">If month/day/hour/minute/second are not within their ranges.</exception>
-        </member>
-        <member name="M:Fadd.Globalization.IDateTimeHelper.ParseDateTime(System.String,System.String)">
-            <summary>
-            Will try to parse the date/time using the local parser.
-            Will also try the default DateTime.Parse method if date is in an unknown format.
-            </summary>
-            <param name="date">date string (may be null/empty).</param>
-            <param name="time">time string (may be null/empty).</param>
-            <returns>A <see cref="T:System.DateTime"/></returns>
-            <exception cref="T:System.FormatException">If the date/time format is invalid.</exception>
-            <exception cref="T:System.ArgumentOutOfRangeException">If month/day/hour/minute/second are not within their ranges.</exception>
-        </member>
-        <member name="M:Fadd.Globalization.IDateTimeHelper.ParseDate(System.String)">
-            <summary>
-            Tries to parse a date string.
-            </summary>
-            <param name="value">Can contain a complete date or parts of it (which parts depends on the country).</param>
-            <returns>A <see cref="T:System.DateTime"/></returns>
-            <exception cref="T:System.FormatException">If the date format is invalid.</exception>
-            <exception cref="T:System.ArgumentOutOfRangeException">If month/day are not within their ranges.</exception>
-        </member>
-        <member name="M:Fadd.Globalization.IDateTimeHelper.ParseDate(System.String,System.Int32[],System.Int32)">
-            <summary>
-            Tries to parse a date string.
-            </summary>
-            <param name="value">Can contain a complete date or parts of it (which parts depends on the country).</param>
-            <param name="values">array that parsed values are written to.</param>
-            <param name="offset">where in array to start write values</param>
-            <exception cref="T:System.FormatException">If the date format is invalid.</exception>
-            <exception cref="T:System.ArgumentOutOfRangeException">If month/day are not within their ranges.</exception>
-        </member>
-        <member name="M:Fadd.Globalization.IDateTimeHelper.ParseTime(System.String)">
-            <summary>
-            Tries to parse a time string.
-            </summary>
-            <param name="value">Can contain a complete time or parts of it (which parts depends on the country).</param>
-            <returns>A <see cref="T:System.DateTime"/></returns>
-            <exception cref="T:System.FormatException">If the time format is invalid.</exception>
-            <exception cref="T:System.ArgumentOutOfRangeException">If hour/minute/second are not within their ranges.</exception>
-        </member>
-        <member name="M:Fadd.Globalization.IDateTimeHelper.ParseTime(System.String,System.Int32[],System.Int32)">
-            <summary>
-            Tries to parse a time string.
-            </summary>
-            <param name="value">Can contain a complete time or parts of it (which parts depends on the country).</param>
-            <param name="values">array that will be filled. Must contain three slots.</param>
-            <param name="offset">Where in the array to start write values</param>
-            <exception cref="T:System.FormatException">If the time format is invalid.</exception>
-            <exception cref="T:System.ArgumentOutOfRangeException">If hour/minute/second are not within their ranges.</exception>
-        </member>
-        <member name="M:Fadd.Globalization.IDateTimeHelper.ValidateDate(System.Int32,System.Int32,System.Int32,System.Boolean)">
-            <summary>
-            Validate a date.
-            </summary>
-            <param name="year">year value</param>
-            <param name="month">month value</param>
-            <param name="day">day value</param>
-            <param name="throwException">true if exceptions should be thrown on incorrect values.</param>
-            <returns>true if specified values are a correct date; otherwise false.</returns>
-        </member>
-        <member name="M:Fadd.Globalization.IDateTimeHelper.ValidateTime(System.Int32,System.Int32,System.Int32,System.Boolean)">
-            <summary>
-            Validate
-            </summary>
-            <param name="hour">hour</param>
-            <param name="minute">minute</param>
-            <param name="second">second</param>
-            <param name="throwException">true if exceptions should be thrown on incorrect values.</param>
-            <returns>true if specified values are a correct date; otherwise false.</returns>
-        </member>
-        <member name="M:Fadd.Globalization.IDateTimeHelper.FormatDate(System.DateTime)">
-            <summary>
-            Format a date as a string.
-            </summary>
-            <param name="dateTime">A date/time</param>
-            <returns>Examples: "Yesterday", "On monday"</returns>
-        </member>
-        <member name="M:Fadd.Globalization.IDateTimeHelper.FormatDateTime(System.DateTime)">
-            <summary>
-            Format a date/time as a string.
-            </summary>
-            <param name="dateTime">A date/time</param>
-            <returns>Examples: "Yesterday at 12:20pm", "On monday at 11:38am"</returns>
-        </member>
-        <member name="M:Fadd.Globalization.IDateTimeHelper.GetDuration(System.DateTime,System.DateTime,Fadd.Globalization.DurationDetail,System.Int32)">
-            <summary>
-            Get duration as a human friendly string.
-            </summary>
-            <param name="from">Start time of duration</param>
-            <param name="to">End time of duration</param>
-            <param name="durationDetail">The detail in which to display the duration</param>
-            <param name="measures">Number of time units to display</param>
-            <returns>
-            A string like: 1 month, 2 weeks, and 3 days.
-            </returns>
-        </member>
-        <member name="M:Fadd.Globalization.IDateTimeHelper.GetDuration(System.DateTime,System.DateTime)">
-            <summary>
-            Get duration as a human friendly string. Displays all time unit durations.
-            </summary>
-            <param name="from">Start time of duration</param>
-            <param name="to">End time of duration</param>
-        </member>
-        <member name="M:Fadd.Globalization.IDateTimeHelper.GetDuration(System.TimeSpan,Fadd.Globalization.DurationDetail,System.Int32)">
-            <summary>
-            Get duration as a human friendly string.
-            </summary>
-            <param name="span">The timespan for which to output the duration</param>
-            <param name="durationDetail">The detail in which to display the duration</param>
-            /// <param name="measures">Number of time measures to display</param>
-            <returns>
-            A string like: 1 month, 2 weeks, and 3 days.
-            </returns>
-            <remarks><see cref="F:Fadd.Globalization.DurationDetail.Months"/> cannot be used when using this method since counting of months
-            requires both to and from datetime information, in such a case user <see cref="M:Fadd.Globalization.IDateTimeHelper.GetDuration(System.DateTime,System.DateTime,Fadd.Globalization.DurationDetail,System.Int32)"/></remarks>
-        </member>
-        <member name="M:Fadd.Globalization.IDateTimeHelper.GetDuration(System.TimeSpan)">
-            <summary>
-            Get duration as a human friendly string. Displays all time unit durations.
-            </summary>
-            <param name="span">The timespan for which to output the duration</param>
-        </member>
-        <member name="T:Fadd.Data.Transaction">
-            <summary>
-            Create a a transaction
-            </summary>
-        </member>
-        <member name="T:Fadd.Data.DataLayerImp">
-            <summary>
-            Base class for database handling
-            </summary>
-        </member>
-        <member name="M:Fadd.Data.DataLayerImp.#ctor(Fadd.Data.IConnectionHelper)">
-            <summary>
-            Initializes a new instance of the <see cref="T:Fadd.Data.DataLayer"/> class.
-            </summary>
-            <param name="connectionHelper">The connection helper.</param>
-        </member>
-        <member name="M:Fadd.Data.DataLayerImp.Query``1(System.String,System.Object[])">
-            <summary>
-            Get a single object.
-            </summary>
-            <typeparam name="T">Type of object to fetch</typeparam>
-            <param name="statement">complete SQL statement with class/properties instead of table/columns.</param>
-            <param name="parameters">parameters used in the statement.</param>
-            <returns>object if found; otherwise null</returns>
-            <exception cref="T:Fadd.Data.Mappings.MappingException">If the class/table mapping is incorrect.</exception>
-            <exception cref="T:Fadd.Data.DataLayerException">If data layer fails.</exception>
-        </member>
-        <member name="M:Fadd.Data.DataLayerImp.QueryCollection``1(System.String,System.Object[])">
-            <summary>
-            Gets a list of items.
-            </summary>
-            <param name="statement">Statements to get</param>
-            <param name="parameters">parameters used in the statement.</param>
-            <returns>A list of items.</returns>
-        </member>
-        <member name="M:Fadd.Data.DataLayerImp.Execute``1(System.String,System.Object[])">
-            <summary>
-            Executes an statement in the database.
-            </summary>
-            <typeparam name="T">Type of object to fetch</typeparam>
-            <param name="statement">complete SQL statement with class/properties instead of table/columns.</param>
-            <param name="parameters">parameters used in the statement.</param>
-            <returns>object if found; otherwise null</returns>
-            <exception cref="T:Fadd.Data.Mappings.MappingException">If the class/table mapping is incorrect.</exception>
-            <exception cref="T:Fadd.Data.DataLayerException">If data layer fails.</exception>
-        </member>
-        <member name="M:Fadd.Data.DataLayerImp.Get``1(System.String,System.Object[])">
-            <summary>
-            Get a single object.
-            </summary>
-            <typeparam name="T">Type of object to fetch.</typeparam>
-            <param name="conditions">Conditions (corresponds to statements in the WHERE clause).</param>
-            <param name="parameters">Parameters used in the where clause.</param>
-            <returns>object if found; otherwise null.</returns>
-            <exception cref="T:Fadd.Data.Mappings.MappingException">If the class/table mapping is incorrect.</exception>
-            <exception cref="T:Fadd.Data.DataLayerException">If data layer fails.</exception>
-        </member>
-        <member name="M:Fadd.Data.DataLayerImp.GetById``1(System.Object)">
-            <summary>
-            Get a single object using its primary key
-            </summary>
-            <typeparam name="T">Type of object to fetch, must have a defined mapping.</typeparam>
-            <param name="id">Primary key value</param>
-            <returns>object if found; otherwise null.</returns>
-            <exception cref="T:Fadd.Data.Mappings.MappingException">If the class/table mapping is incorrect.</exception>
-            <exception cref="T:Fadd.Data.DataLayerException">If data layer fails.</exception>
-        </member>
-        <member name="M:Fadd.Data.DataLayerImp.Save(System.Object)">
-            <summary>
-            Save or update an object in the database (1. Checks if the PK is empty. 2. Checks if the object exists in the db).
-            </summary>
-            <param name="value">Value to create/update.</param>
-            <exception cref="T:Fadd.Data.Mappings.MappingException">If the class/table mapping is incorrect.</exception>
-            <exception cref="T:Fadd.Data.DataLayerException">If data layer fails.</exception>
-        </member>
-        <member name="M:Fadd.Data.DataLayerImp.Create(System.Object)">
-            <summary>
-            Create a new object in the database.
-            </summary>
-            <param name="value">Object to create.</param>
-            <exception cref="T:Fadd.Data.Mappings.MappingException">If the class/table mapping is incorrect.</exception>
-            <exception cref="T:Fadd.Data.DataLayerException">If data layer fails.</exception>
-        </member>
-        <member name="M:Fadd.Data.DataLayerImp.Update(System.Object)">
-            <summary>
-            Update an existing object.
-            </summary>
-            <param name="value">Object to update</param>
-            <exception cref="T:Fadd.Data.Mappings.MappingException">If the class/table mapping is incorrect.</exception>
-            <exception cref="T:Fadd.Data.DataLayerException">If data layer fails.</exception>
-        </member>
-        <member name="M:Fadd.Data.DataLayerImp.Update(System.Type,System.Object)">
-            <summary>
-            Update an existing object
-            </summary>
-            <param name="type"></param>
-            <param name="value"></param>
-            <exception cref="T:Fadd.Data.DataLayerException">If SQL query fails.</exception>
-        </member>
-        <member name="M:Fadd.Data.DataLayerImp.ExistsById``1(System.Object)">
-            <summary>
-            Checks if an object exists by using it's primary key.
-            </summary>
-            <typeparam name="T">Type of object to check</typeparam>
-            <param name="id">Primary key</param>
-            <returns>true if object was found; otherwise false.</returns>
-            <exception cref="T:Fadd.Data.Mappings.MappingException">If the class/table mapping is incorrect.</exception>
-            <exception cref="T:Fadd.Data.DataLayerException">If data layer fails.</exception>
-        </member>
-        <member name="M:Fadd.Data.DataLayerImp.Exists(System.Object)">
-            <summary>
-            Checks if an object exists by providing it.
-            </summary>
-            <param name="model">object to check</param>
-            <returns>true if object is stored in the database; otherwise false.</returns>
-            <exception cref="T:Fadd.Data.Mappings.MappingException">If the class/table mapping is incorrect.</exception>
-            <exception cref="T:Fadd.Data.DataLayerException">If data layer fails.</exception>
-        </member>
-        <member name="M:Fadd.Data.DataLayerImp.Exists``1(System.String,System.Object[])">
-            <summary>
-            Checks if an object exists in the database
-            </summary>
-            <typeparam name="T">Type of object to check.</typeparam>
-            <param name="conditions">Conditions.</param>
-            <param name="parameters">parameters used in the conditions.</param>
-            <returns>true if object is stored in the database; otherwise false.</returns>
-            <exception cref="T:Fadd.Data.Mappings.MappingException">If the class/table mapping is incorrect.</exception>
-            <exception cref="T:Fadd.Data.DataLayerException">If data layer fails.</exception>
-        </member>
-        <member name="M:Fadd.Data.DataLayerImp.Exists(Fadd.Data.CompiledStatement,System.Collections.Generic.IList{System.Object})">
-            <exception cref="T:Fadd.Data.DataLayerException"><c>DataLayerException</c>.</exception>
-        </member>
-        <member name="M:Fadd.Data.DataLayerImp.Execute(Fadd.Data.CompiledStatement,System.Collections.Generic.IList{System.Object})">
-            <exception cref="T:Fadd.Data.DataLayerException"><c>DataLayerException</c>.</exception>
-        </member>
-        <member name="M:Fadd.Data.DataLayerImp.Execute(System.String,System.Collections.Generic.IList{System.Object})">
-            <exception cref="T:Fadd.Data.DataLayerException"><c>DataLayerException</c>.</exception>
-        </member>
-        <member name="M:Fadd.Data.DataLayerImp.CreateCommand(System.Data.IDbConnection,Fadd.Data.CompiledStatement,System.Collections.Generic.IList{System.Object})">
-            <summary>
-            Creates a complete database command with the help of the compiled statement.
-            </summary>
-            <param name="connection">Used to create the command</param>
-            <param name="statement">statement to execute</param>
-            <param name="parameters">parameters used in the statement</param>
-            <returns>A filled command</returns>
-            <exception cref="T:System.ArgumentException">Parameter count doesn't match argument count in the statement.</exception>
-        </member>
-        <member name="M:Fadd.Data.DataLayerImp.Find``1(System.String,System.Object[])">
-            <summary>
-            Retrieves a collection of items.
-            </summary>
-            <typeparam name="T">Type of item to get.</typeparam>
-            <param name="conditions">Conditions to limit.</param>
-            <param name="parameters">Parameters used in the condition.</param>
-            <returns>A list of objects; or an empty list</returns>
-        </member>
-        <member name="M:Fadd.Data.DataLayerImp.Find``1">
-            <summary>
-            Retrieves all items of a certain type.
-            </summary>
-            <typeparam name="T">Type of item to get.</typeparam>
-            <returns>A list of objects; or an empty list</returns>
-        </member>
-        <member name="M:Fadd.Data.DataLayerImp.Find``1(Fadd.Data.Statement)">
-            <summary>
-            Gets all items defined by the <see cref="T:Fadd.Data.Statement"/>.
-            </summary>
-            <typeparam name="T">type of items to get.</typeparam>
-            <param name="statement">Statement specifying which elements to get.</param>
-            <returns>A list of elements.</returns>
-        </member>
-        <member name="M:Fadd.Data.DataLayerImp.RemoveById``1(System.Object)">
-            <summary>
-            Removes an object by using it's id property.
-            </summary>
-            <typeparam name="T">Type of object to remove.</typeparam>
-            <param name="id">Primary key value</param>
-            <exception cref="T:Fadd.Data.Mappings.MappingException">RemoveById requires exactly one primary key.</exception>
-        </member>
-        <member name="M:Fadd.Data.DataLayerImp.Remove``1(System.String,System.Object[])">
-            <summary>
-            Removes an object by using it's id property.
-            </summary>
-            <typeparam name="T">Type of object to remove.</typeparam>
-        </member>
-        <member name="M:Fadd.Data.DataLayerImp.CreateConnection">
-            <summary>
-            Creates a connection, we use this method instead of the one in
-            the connection helper to be able to use transactions (with a single connection).
-            </summary>
-            <returns>A database connection.</returns>
-        </member>
-        <member name="M:Fadd.Data.DataLayerImp.CreateCommand(System.Data.IDbConnection)">
-            <summary>
-            Create a command.
-            </summary>
-            <param name="connection">Connection used to create the command</param>
-            <returns>A <see cref="T:System.Data.IDbCommand"/></returns>
-        </member>
-        <member name="P:Fadd.Data.DataLayerImp.MappingProviders">
-            <summary>
-            Gets class that takes care of all providers.
-            </summary>
-        </member>
-        <member name="P:Fadd.Data.DataLayerImp.ConnectionHelper">
-            <summary>
-
-            </summary>
-        </member>
-        <member name="M:Fadd.Data.Transaction.#ctor(Fadd.Data.IConnectionHelper,System.Data.IsolationLevel)">
-            <summary>
-            Initializes a new instance of the <see cref="T:Fadd.Data.DataLayer"/> class.
-            </summary>
-        </member>
-        <member name="M:Fadd.Data.Transaction.#ctor(Fadd.Data.IConnectionHelper)">
-            <summary>
-            Initializes a new instance of the <see cref="T:Fadd.Data.DataLayer"/> class.
-            </summary>
-        </member>
-        <member name="M:Fadd.Data.Transaction.Cancel">
-            <summary>
-            Cancels all changes.
-            </summary>
-        </member>
-        <member name="M:Fadd.Data.Transaction.Commit">
-            <summary>
-            Makes all changes permanent in the database.
-            </summary>
-        </member>
-        <member name="M:Fadd.Data.Transaction.CreateConnection">
-            <summary>
-            We are not creating a connection, but returning the one used
-            in the transaction.
-            </summary>
-            <returns>A database connection.</returns>
-        </member>
-        <member name="M:Fadd.Data.Transaction.CreateCommand(System.Data.IDbConnection)">
-            <summary>
-            Creates the command.
-            </summary>
-            <returns></returns>
-        </member>
-        <member name="M:Fadd.Data.Transaction.CreateTransaction(System.Data.IsolationLevel)">
-            <summary>
-            Creates a new transaction.
-            </summary>
-            <param name="level">On of the <see cref="T:System.Data.IsolationLevel"/>s.</param>
-            <returns>An object representing the new transaction.</returns>
-            <remarks>
-            Once the transaction has completed, you must explicitly commit or roll back the transaction by using the Commit or Rollback methods.
-            </remarks>
-        </member>
-        <member name="M:Fadd.Data.Transaction.CreateTransaction">
-            <summary>
-            Creates a new transaction.
-            </summary>
-            <returns>An object representing the new transaction.</returns>
-            <remarks>
-            Once the transaction has completed, you must explicitly commit or roll back the transaction by using the Commit or Rollback methods.
-            </remarks>
-        </member>
-        <member name="M:Fadd.Data.Transaction.Dispose">
-            <summary>
-                                Performs application-defined tasks associated with freeing, releasing, or resetting unmanaged resources.
-            </summary>
-            <filterpriority>2</filterpriority>
-        </member>
-        <member name="E:Fadd.Data.Transaction.Committing">
-            <summary>
-            Transaction is about to be committed.
-            </summary>
-        </member>
-        <member name="E:Fadd.Data.Transaction.Committed">
-            <summary>
-            Transaction have been committed.
-            </summary>
-        </member>
-        <member name="E:Fadd.Data.Transaction.Canceling">
-            <summary>
-            Transaction is about to be canceled.
-            </summary>
-        </member>
-        <member name="E:Fadd.Data.Transaction.Canceled">
-            <summary>
-            Transaction have been canceled.
-            </summary>
-        </member>
-        <member name="M:Fadd.Data.TransactionWrapper.Commit">
-            <summary>
-            Don't do anything since someone have already created a transaction.
-            Let the initial creator commit.
-            </summary>
-        </member>
-        <member name="M:Fadd.Data.TransactionWrapper.Cancel">
-            <summary>
-            Don't do anything since someone have already created a transaction.
-            Let the initial creator commit or rollback.
-            </summary>
-            <exception cref="T:Fadd.Data.DataLayerException">To abort the transaction.</exception>
-        </member>
-        <member name="T:Fadd.Data.StatementCompiler">
-            <summary>
-            Compiles and caches SQL statements to speed up processing.
-            </summary>
-        </member>
-        <member name="M:Fadd.Data.StatementCompiler.#ctor(Fadd.Data.Mappings.Provider,System.Boolean)">
-            <summary>
-            Initializes a new instance of the <see cref="T:Fadd.Data.StatementCompiler"/> class.
-            </summary>
-            <param name="providers">The providers.</param>
-            <param name="cacheStatements">if set to <c>true</c> [cache statements].</param>
-        </member>
-        <member name="M:Fadd.Data.StatementCompiler.Compile(System.String)">
-            <summary>
-            Compiles an object SQL statement
-            </summary>
-            <param name="objectSql"></param>
-            <returns></returns>
-            <exception cref="T:System.FormatException"><c>FormatException</c>.</exception>
-            <exception cref="T:Fadd.Data.Mappings.MappingException">If mapping could not be found.</exception>
-        </member>
-        <member name="M:Fadd.Data.StatementCompiler.ScanProperties(Fadd.Parser.Token,System.Collections.Generic.ICollection{System.String})">
-            <summary>
-            Recursive scanning after properties.
-            </summary>
-            <param name="token"></param>
-            <param name="conditions"></param>
-        </member>
-        <member name="M:Fadd.Data.StatementCompiler.GetOrCreate(System.String,System.String,System.Object[])">
-            <summary>
-            Compile an Object SQL statement and return the corresponding SQL statement.
-            </summary>
-            <param name="key">Key used to identify this statement (if caching is turned on)</param>
-            <param name="objectSql">SQL statement with classes/properties instead of tables/columns.</param>
-            <param name="parameters"></param>
-            <returns></returns>
-        </member>
-        <member name="M:Fadd.Data.StatementCompiler.ParseToken(Fadd.Parser.Token,Fadd.Data.Mappings.IMapping)">
-            <summary>
-            Goes through a token and all it's children to convert properties/classes to columns/tables.
-            </summary>
-            <param name="token">Token to process</param>
-            <param name="mapping">Mapping file used during conversion.</param>
-        </member>
-        <member name="M:Fadd.Data.StatementCompiler.Get(System.String)">
-            <summary>
-            Get a previously compiled statement.
-            </summary>
-            <param name="key">Key used when storing the statement.</param>
-            <returns>Compiled statement if found; otherwise null.</returns>
-            <exception cref="T:System.InvalidOperationException">If statements are not cached.</exception>
-        </member>
-        <member name="M:Fadd.Data.StatementCompiler.Create(System.String,System.String)">
-            <summary>
-            Create a new compiled statement.
-            </summary>
-            <param name="key">Key used to store statement for future use.</param>
-            <param name="objectSql">ObjectSQL that should be compiled into plain sql.</param>
-            <returns>Compiled statement.</returns>
-        </member>
-        <member name="T:Fadd.Validation.ValidateMinAttribute">
-            <summary>
-            Specifies a max length.
-            </summary>
-            <remarks>
-            On a string it specified maximum number of letters, while on int it specifies the max number.
-            </remarks>
-            <para>
-            Language file items:
-            <list type="table">
-                <listheader>
-                    <term>ItemName</term>
-                    <description>Language text</description>
-                </listheader>
-                <item>
-                    <term>AlphaNumeric</term>
-                    <description>'{0}' may only contain alpha numeric letters.</description>
-                </item>
-            </list>
-            </para>
-        </member>
-        <member name="M:Fadd.Validation.ValidateMinAttribute.#ctor(System.Object)">
-            <summary>
-            Initializes a new instance of the <see cref="T:Fadd.Validation.ValidateMaxAttribute"/> class.
-            </summary>
-            <param name="value">minimum length. should match the type being validated, with the exception of string
-            where the type should be int.</param>
-        </member>
-        <member name="M:Fadd.Validation.ValidateMinAttribute.Validate(System.Object,System.Object)">
-            <summary>
-            Validate value
-            </summary>
-            <param name="context">Can be used to send a context object to the validation class. Useful if you provide your own validation classes which need to get information from your application. <seealso cref="T:Fadd.Validation.BeforeValidationEventArgs"/></param>
-            <param name="value">value to validate</param>
-            <returns>
-            true if value passed the validation; otherwise false.
-            </returns>
-        </member>
-        <member name="M:Fadd.Validation.ValidateMinAttribute.Format(System.String,Fadd.Globalization.ILanguageNode)">
-            <summary>
-            Localize error if validation failed.
-            </summary>
-            <param name="fieldName">Localized field name.</param>
-            <param name="validationLanguage">Language node with all validation translations.</param>
-            <returns>A localized error message if the validation failed; otherwise null.</returns>
-            <example>
-            <code>
-            attribute.Localize("FirstName", "'{0}' is required");
-            // will return "'{0}' is required" if the validation failed, else null.
-            </code>
-            </example>
-        </member>
-        <member name="M:Fadd.Validation.ValidateMinAttribute.SupportsType(System.Type)">
-            <summary>
-            Determines if the validation class support the specified type.
-            </summary>
-            <param name="type">Property/Value type.</param>
-            <returns>true if the type is supported.</returns>
-        </member>
-        <member name="P:Fadd.Validation.ValidateMinAttribute.Value">
-            <summary>
-            Minimum length
-            </summary>
-        </member>
-        <member name="T:Fadd.Validation.MissingPropertyException">
-            <summary>
-            thrown when the specified property is not found in the specified class.
-            </summary>
-        </member>
-        <member name="M:Fadd.Validation.MissingPropertyException.#ctor(System.String,System.String)">
-            <summary>
-            Initializes a new instance of the <see cref="T:Fadd.Validation.MissingPropertyException"/> class.
-            </summary>
-            <param name="className">Name of the class.</param>
-            <param name="propertyName">Name of the property.</param>
-        </member>
-        <member name="T:Fadd.Validation.ValidateMaxAttribute">
-            <summary>
-            Specifies a max length.
-            </summary>
-            <remarks>
-            On a string it specified maximum number of letters, while on int it specifies the max number.
-            </remarks>
-            <para>
-            Language file items:
-            <list type="table">
-                <listheader>
-                    <term>ItemName</term>
-                    <description>Language text</description>
-                </listheader>
-                <item>
-                    <term>Max</term>
-                    <description>'{0}' must be less or equal to {1}.</description>
-                </item>
-                <item>
-                    <term>MaxString</term>
-                    <description>'{0}' must be contain {1} or less characters.</description>
-                </item>
-            </list>
-            </para>
-        </member>
-        <member name="M:Fadd.Validation.ValidateMaxAttribute.#ctor(System.Object)">
-            <summary>
-            Initializes a new instance of the <see cref="T:Fadd.Validation.ValidateMaxAttribute"/> class.
-            </summary>
-            <param name="max">max length. should match the type being validated, with the exception of string
-            where the type should be int.</param>
-        </member>
-        <member name="M:Fadd.Validation.ValidateMaxAttribute.Validate(System.Object,System.Object)">
-            <summary>
-            Validate value
-            </summary>
-            <param name="context">Can be used to send a context object to the validation class. Useful if you provide your own validation classes which need to get information from your application. <seealso cref="T:Fadd.Validation.BeforeValidationEventArgs"/></param>
-            <param name="value">value to validate</param>
-            <returns>
-            true if value passed the validation; otherwise false.
-            </returns>
-        </member>
-        <member name="M:Fadd.Validation.ValidateMaxAttribute.Format(System.String,Fadd.Globalization.ILanguageNode)">
-            <summary>
-            Localize error if validation failed.
-            </summary>
-            <param name="fieldName">Localized field name.</param>
-            <param name="validationLanguage">Language node with all validation translations.</param>
-            <returns>A localized error message if the validation failed; otherwise null.</returns>
-            <example>
-            <code>
-            attribute.Localize("FirstName", "'{0}' is required");
-            // will return "'{0}' is required" if the validation failed, else null.
-            </code>
-            </example>
-        </member>
-        <member name="M:Fadd.Validation.ValidateMaxAttribute.SupportsType(System.Type)">
-            <summary>
-            Determines if the validation class support the specified type.
-            </summary>
-            <param name="type">Property/Value type.</param>
-            <returns>true if the type is supported.</returns>
-        </member>
-        <member name="P:Fadd.Validation.ValidateMaxAttribute.Max">
-            <summary>
-            Max length
-            </summary>
-        </member>
-        <member name="T:Fadd.Logging.LogFormatter">
-            <summary>
-            Used to format log output.
-            </summary>
-        </member>
-        <member name="M:Fadd.Logging.LogFormatter.Format(Fadd.Logging.LogLevel,System.String,System.Exception,System.String[])">
-            <summary>
-            Format a long message
-            </summary>
-            <param name="logLevel">Importance of the current message.</param>
-            <param name="message">Message being written</param>
-            <param name="exception">Exception, or null</param>
-            <param name="methodNames">Method names from the call stack.</param>
-            <returns>Formatted log entry.</returns>
-        </member>
-        <member name="M:Fadd.Logging.LogFormatter.Format(System.String,System.Exception,System.String[])">
-            <summary>
-            Format a long message
-            </summary>
-            <param name="message">Message being written</param>
-            <param name="exception">Exception, or null</param>
-            <param name="methodNames">Method names from the call stack.</param>
-            <returns>Formatted log entry.</returns>
-        </member>
-        <member name="T:Fadd.Commands.ObjectProxyReceiver">
-            <summary>
-            This class is used to receive and handle
-            </summary>
-        </member>
-        <member name="M:Fadd.Commands.ObjectProxyReceiver.#ctor(Fadd.Commands.ICommandDispatcher)">
-            <summary>
-            Initializes a new instance of the <see cref="T:Fadd.Commands.ObjectProxyReceiver"/> class.
-            </summary>
-            <param name="dispatcher">Dispatcher that the proxy commands will arrive on.</param>
-        </member>
-        <member name="M:Fadd.Commands.ObjectProxyReceiver.OnProxyRequest(System.Object,Fadd.Commands.CommandEventArgs)">
-            <summary>
-            Called when a proxy command arrives.
-            </summary>
-            <param name="source"></param>
-            <param name="args"></param>
-            <returns></returns>
-        </member>
-        <member name="E:Fadd.Commands.ObjectProxyReceiver.InstanceRequested">
-            <summary>
-            Event used to retrieve an instace for a specific type.
-            </summary>
-            <remarks>
-            The instance is used to invoke the requested method.
-            </remarks>
-        </member>
-        <member name="P:Fadd.Commands.ObjectProxyReceiver.Instances">
-            <summary>
-            Type to instance mappings
-            </summary>
-            <remarks>
-            Maps all types to object instances that are used to invoke the method calls.
-            </remarks>
-        </member>
-        <member name="T:Fadd.Commands.InstanceRequestedEventArgs">
-            <summary>
-            Arguments for <see cref="T:Fadd.Commands.InstanceRequestedHandler"/>
-            </summary>
-        </member>
-        <member name="M:Fadd.Commands.InstanceRequestedEventArgs.#ctor(System.Type)">
-            <summary>
-            Initializes a new instance of the <see cref="T:Fadd.Commands.InstanceRequestedEventArgs"/> class.
-            </summary>
-            <param name="type">Type of instance wanted.</param>
-        </member>
-        <member name="P:Fadd.Commands.InstanceRequestedEventArgs.Type">
-            <summary>
-            Type of instance wanted.
-            </summary>
-        </member>
-        <member name="P:Fadd.Commands.InstanceRequestedEventArgs.Instance">
-            <summary>
-            Instance that will be used to invoke method.
-            </summary>
-        </member>
-        <member name="T:Fadd.Commands.InstanceRequestedHandler">
-            <summary>
-            Delegate used by <see cref="T:Fadd.Commands.InstanceRequestedHandler"/> to find instance to invoke on.
-            </summary>
-            <param name="source"><see cref="T:Fadd.Commands.InstanceRequestedHandler"/></param>
-            <param name="args">Arguments</param>
-        </member>
-        <member name="T:Fadd.Parser.SimpleSQL.Tokens.Select">
-            <summary>
-            SELECT clause
-            </summary>
-        </member>
-        <member name="M:Fadd.Parser.SimpleSQL.Tokens.Select.ToString">
-            <summary>
-            Returns SQL
-            </summary>
-            <returns>"SELECT "</returns>
-        </member>
-        <member name="P:Fadd.Parser.SimpleSQL.Tokens.Select.TokenIdentifier">
-            <summary>
-            Used to determine the kind of this token
-            </summary>
-        </member>
-        <member name="T:Fadd.Parser.SimpleSQL.Tokens.OrderByProperty">
-            <summary>
-            Name of the property to sort by, and if the sort is ascending/descending.
-            </summary>
-        </member>
-        <member name="M:Fadd.Parser.SimpleSQL.Tokens.OrderByProperty.#ctor(System.String,System.Boolean)">
-            <summary>
-            Initializes a new instance of the <see cref="T:Fadd.Parser.SimpleSQL.Tokens.OrderByProperty"/> class.
-            </summary>
-            <param name="name">Name of the property.</param>
-            <param name="ascending">if set to <c>true</c> sort is ascending.</param>
-        </member>
-        <member name="M:Fadd.Parser.SimpleSQL.Tokens.OrderByProperty.ToString">
-            <summary>
-            Returns SQL
-            </summary>
-            <returns>Order by property</returns>
-        </member>
-        <member name="P:Fadd.Parser.SimpleSQL.Tokens.OrderByProperty.TokenIdentifier">
-            <summary>
-            Used to determine the kind of this token
-            </summary>
-        </member>
-        <member name="P:Fadd.Parser.SimpleSQL.Tokens.OrderByProperty.Property">
-            <summary>
-            Property that the order by is for
-            </summary>
-        </member>
-        <member name="P:Fadd.Parser.SimpleSQL.Tokens.OrderByProperty.Ascending">
-            <summary>
-            Ascending or Descending sort
-            </summary>
-        </member>
-        <member name="P:Fadd.Parser.SimpleSQL.Tokens.OrderByProperty.Name">
-            <summary>
-            Name of the property.
-            </summary>
-        </member>
-        <member name="T:Fadd.Parser.SimpleSQL.ParseTreeTokens.StopContext">
-            <summary>
-            Parse ), which is end of sub context / nesting.
-            </summary>
-        </member>
-        <member name="M:Fadd.Parser.SimpleSQL.ParseTreeTokens.StopContext.Match(Fadd.Parser.Tokenizer,Fadd.Parser.ParseTree)">
-            <summary>
-            Check if the current position is the start of this token
-            </summary>
-            <returns>true if our token is the next one.</returns>
-        </member>
-        <member name="M:Fadd.Parser.SimpleSQL.ParseTreeTokens.StopContext.Parse(Fadd.Parser.Tokenizer,Fadd.Parser.ParseTree)">
-            <summary>
-            Parses the data in the specified <see cref="T:Fadd.Parser.Tokenizer"/>.
-            </summary>
-            <param name="tokenizer">The <see cref="T:Fadd.Parser.Tokenizer"/> containing the data to parse.</param>
-            <param name="tree"><see cref="T:Fadd.Parser.ParseTree"/> that is being built..</param>
-            <returns>true if more tokens can be parsed on the current leaf; false if we should continue to next leaf (parse no more children).</returns>
-        </member>
-        <member name="T:Fadd.Parser.Evaluator.ParseTreeTokens.StopContext">
-            <summary>
-            Parse ), which is end of subcontext / nesting.
-            </summary>
-        </member>
-        <member name="M:Fadd.Parser.Evaluator.ParseTreeTokens.StopContext.Match(Fadd.Parser.Tokenizer,Fadd.Parser.ParseTree)">
-            <summary>
-            Check if the current position is the start of this token
-            </summary>
-            <returns>true if our token is the next one.</returns>
-        </member>
-        <member name="M:Fadd.Parser.Evaluator.ParseTreeTokens.StopContext.Parse(Fadd.Parser.Tokenizer,Fadd.Parser.ParseTree)">
-            <summary>
-            Parses the data in the specified <see cref="T:Fadd.Parser.Tokenizer"/>.
-            </summary>
-            <param name="tokenizer">The <see cref="T:Fadd.Parser.Tokenizer"/> containing the data to parse.</param>
-            <param name="tree"><see cref="T:Fadd.Parser.ParseTree"/> that is being built..</param>
-            <returns>true if more tokens can be parsed on the current leaf; false if we should continue to next leaf (parse no more children).</returns>
-        </member>
-        <member name="T:Fadd.Parser.Evaluator.ParseTreeTokens.StartContext">
-            <summary>
-            Parse (, which is start of one level nesting.
-            </summary>
-        </member>
-        <member name="M:Fadd.Parser.Evaluator.ParseTreeTokens.StartContext.Match(Fadd.Parser.Tokenizer,Fadd.Parser.ParseTree)">
-            <summary>
-            Check if the current position is the start of this token
-            </summary>
-            <returns>true if our token is the next one.</returns>
-        </member>
-        <member name="M:Fadd.Parser.Evaluator.ParseTreeTokens.StartContext.Parse(Fadd.Parser.Tokenizer,Fadd.Parser.ParseTree)">
-            <summary>
-            Parses the data in the specified <see cref="T:Fadd.Parser.Tokenizer"/>.
-            </summary>
-            <param name="tokenizer">The <see cref="T:Fadd.Parser.Tokenizer"/> containing the data to parse.</param>
-            <param name="tree"><see cref="T:Fadd.Parser.ParseTree"/> that is being built..</param>
-            <returns>true if more tokens can be parsed on the current leaf; false if we should continue to next leaf (parse no more children).</returns>
-        </member>
-        <member name="T:Fadd.Data.Mappings.ILoader">
-            <summary>
-            Provides a mapping between properties and columns in a table.
-            </summary>
-        </member>
-        <member name="M:Fadd.Data.Mappings.ILoader.GetMapping(System.String)">
-            <summary>
-            Get a mapping between a table and a class.
-            </summary>
-            <param name="className">Name of class, may not be full name</param>
-            <returns><see cref="T:Fadd.Data.Mappings.IMapping"/> if found; otherwise null.</returns>
-        </member>
-        <member name="T:Fadd.Plugins.PluginLoadedHandlerEventArgs`1">
-            <summary>
-            Arguments for <see cref="T:Fadd.Plugins.PluginLoadedHandler`1"/>
-            </summary>
-            <typeparam name="T">Implementation of IPlugin</typeparam>
-        </member>
-        <member name="M:Fadd.Plugins.PluginLoadedHandlerEventArgs`1.#ctor(`0,System.Reflection.Assembly,Fadd.Plugins.PluginTypeInfo)">
-            <summary>
-            Called when a plugin have been loaded.
-            </summary>
-            <param name="plugin">Plugin being loaded.</param>
-            <param name="assembly">Assembly that the plugin exist in.</param>
-            <param name="typeInfo">information about the plugin</param>
-            <remarks>Plugin have not been started yet.</remarks>
-        </member>
-        <member name="P:Fadd.Plugins.PluginLoadedHandlerEventArgs`1.Plugin">
-            <summary>
-            Plugin being loaded
-            </summary>
-        </member>
-        <member name="P:Fadd.Plugins.PluginLoadedHandlerEventArgs`1.Assembly">
-            <summary>
-            Assembly that the plugin exist in
-            </summary>
-        </member>
-        <member name="P:Fadd.Plugins.PluginLoadedHandlerEventArgs`1.TypeInfo">
-            <summary>
-            information about the plugin
-            </summary>
-        </member>
-        <member name="T:Fadd.Plugins.PluginLoadedHandler`1">
-             <summary>
-             Invoked when a plugin have been loaded into the system.
-             </summary>
-            <param name="source">PluginManager that loaded the plugin.</param>
-            <param name="args">Plugin information.</param>
-        </member>
-        <member name="T:Fadd.Logging.ConsoleConfiguration">
-            <summary>
-            How logs should be displayed in the console.
-            </summary>
-        </member>
-        <member name="T:Fadd.Logging.LoggerConfiguration">
-            <summary>
-            Default implementation of <see cref="T:Fadd.Logging.ILoggerConfiguration"/>.
-            </summary>
-        </member>
-        <member name="M:Fadd.Logging.LoggerConfiguration.Deserialize(System.IO.Stream)">
-            <summary>
-            Load a configuration from an xml stream
-            </summary>
-            <param name="stream">Xml stream to read from</param>
-        </member>
-        <member name="M:Fadd.Logging.LoggerConfiguration.Serialize(System.IO.Stream)">
-            <summary>
-            Write configuration into a XML stream.
-            </summary>
-            <param name="stream">Xml stream to write to</param>
-        </member>
-        <member name="P:Fadd.Logging.LoggerConfiguration.Name">
-            <summary>
-            Name of this logging configuration.
-            </summary>
-            <remarks>
-            Used in the configuration files (section loggers) to map a logger to a log.
-            </remarks>
-        </member>
-        <member name="P:Fadd.Logging.LoggerConfiguration.MinLevel">
-            <summary>
-            The lowest level that can be written to all logs that have this <see cref="T:Fadd.Logging.ILogger"/> attached.
-            </summary>
-        </member>
-        <member name="P:Fadd.Logging.LoggerConfiguration.MaxLevel">
-            <summary>
-            The max level that can be written to all logs that has this l<see cref="T:Fadd.Logging.ILogger"/>ogger attached.
-            </summary>
-        </member>
-        <member name="P:Fadd.Logging.LoggerConfiguration.StackFrameCount">
-            <summary>
-            Number of stack frames to include in the logging
-            </summary>
-        </member>
-        <member name="P:Fadd.Logging.LoggerConfiguration.StackFrameStart">
-            <summary>
-            Which stack frame to start with.
-            </summary>
-            <remarks>To skip all logging frames, specify 5 as start.</remarks>
-        </member>
-        <member name="P:Fadd.Logging.LoggerConfiguration.Formatter">
-            <summary>
-            Formatter used to transform logging information into text (or binary formats).
-            </summary>
-        </member>
-        <member name="P:Fadd.Logging.ConsoleConfiguration.TraceColor">
-            <summary>
-            Color on trace messages.
-            </summary>
-        </member>
-        <member name="P:Fadd.Logging.ConsoleConfiguration.DebugColor">
-            <summary>
-            Debug color
-            </summary>
-        </member>
-        <member name="P:Fadd.Logging.ConsoleConfiguration.FatalColor">
-            <summary>
-            Fatal color
-            </summary>
-        </member>
-        <member name="P:Fadd.Logging.ConsoleConfiguration.ErrorColor">
-            <summary>
-            Color on errors
-            </summary>
-        </member>
-        <member name="P:Fadd.Logging.ConsoleConfiguration.WarningColor">
-            <summary>
-            Color on warnings
-            </summary>
-        </member>
-        <member name="P:Fadd.Logging.ConsoleConfiguration.InfoColor">
-            <summary>
-            Color on info messages
-            </summary>
-        </member>
-        <member name="T:Fadd.Commands.FilterHandler">
-            <summary>
-            This delegate is invoked when a command is about to behing invoked or added to the dispatcher.
-            <para>
-            Throw <see cref="T:System.InvalidOperationException"/> if Type may not be handled/invoked.
-            </para>
-            </summary>
-            <param name="source">dispatcher that is being used.</param>
-            <param name="args">arguments with info</param>
-        </member>
-        <member name="T:Fadd.Commands.FilterEventArgs">
-            <summary>
-            Arguments for <see cref="T:Fadd.Commands.FilterHandler"/>.
-            </summary>
-        </member>
-        <member name="M:Fadd.Commands.FilterEventArgs.#ctor(System.Type)">
-            <summary>
-            Initializes a new instance of the <see cref="T:Fadd.Commands.FilterEventArgs"/> class.
-            </summary>
-            <param name="type">Type of command (if Invoke is called) or Type to handle (if Add is called).</param>
-        </member>
-        <member name="P:Fadd.Commands.FilterEventArgs.Type">
-            <summary>
-            Type of command (if Invoke is called) or Type to handle (if Add is called).
-            </summary>
-        </member>
-        <member name="T:Fadd.Commands.Net.CommandServer">
-            <summary>
-            Receives commands from the client and invoked them in the server dispatcher.
-            </summary>
-        </member>
-        <member name="M:Fadd.Commands.Net.CommandServer.#ctor(Fadd.Commands.CommandManager)">
-            <summary>
-            Initializes a new instance of the <see cref="T:Fadd.Commands.Net.CommandServer"/> class.
-            </summary>
-            <param name="mgr">Manager that the incoming commands are invoked in.</param>
-        </member>
-        <member name="M:Fadd.Commands.Net.CommandServer.Start(System.Net.IPAddress,System.Int32)">
-            <summary>
-            Starts the server.
-            </summary>
-            <param name="address">IP address that we accept incoming connections on.</param>
-            <param name="port">Port that the server accepts new connections on.</param>
-        </member>
-        <member name="M:Fadd.Commands.Net.CommandServer.Stop">
-            <summary>
-            Stops the server.
-            </summary>
-        </member>
-        <member name="T:Fadd.Parser.Tokenizer">
-            <summary>
-            Converts a string to a token tree.
-            </summary>
-        </member>
-        <member name="M:Fadd.Parser.Tokenizer.Parse(System.IO.Stream,Fadd.Parser.ParseTree)">
-            <summary>
-            Parses the specified stream.
-            </summary>
-            <param name="stream">Stream with text content.</param>
-            <param name="tree">Tree that will be filled with tokens.</param>
-        </member>
-        <member name="M:Fadd.Parser.Tokenizer.Parse(System.String,Fadd.Parser.ParseTree)">
-            <summary>
-            Parses the specified text.
-            </summary>
-            <param name="text">Text to parse.</param>
-            <param name="tree">Tree that will be filled with tokens.</param>
-            <exception cref="T:System.NotSupportedException">When we find unsupported tokens.</exception>
-        </member>
-        <member name="M:Fadd.Parser.Tokenizer.GetPrototype(System.Type)">
-            <summary>
-            Prototypes are used to
-            </summary>
-            <param name="type">The type.</param>
-            <returns></returns>
-        </member>
-        <member name="M:Fadd.Parser.Tokenizer.LookAhead(System.Int32)">
-            <summary>
-            Get a string for the next <paramref name="count"/> chars.
-            </summary>
-            <param name="count">Number of chars to peek.</param>
-            <returns>A string with <paramref name="count"/> characters.</returns>
-        </member>
-        <member name="M:Fadd.Parser.Tokenizer.LookAhead(System.Int32,System.String)">
-            <summary>
-            Get a string for the next <paramref name="count"/> chars.
-            </summary>
-            <param name="count">Number of chars to peek</param>
-            <param name="ignoreCharacters">Ignore these characters before starting to count</param>
-            <returns>A string with <paramref name="count"/> characters.</returns>
-        </member>
-        <member name="M:Fadd.Parser.Tokenizer.Previous">
-            <summary>
-            Get previous character
-            </summary>
-            <returns>A <see cref="T:System.Char"/></returns>
-            <remarks>Will not change the current position</remarks>
-        </member>
-        <member name="M:Fadd.Parser.Tokenizer.Previous(System.Int32)">
-            <summary>
-            Scroll back <paramref name="steps"/> and get that char.
-            </summary>
-            <param name="steps">Number of chars back</param>
-            <returns>A <see cref="T:System.Char"/></returns>
-            <remarks>Will not change the current position</remarks>
-        </member>
-        <member name="M:Fadd.Parser.Tokenizer.Peek(System.Int32)">
-            <summary>
-            Peek forward on a char
-            </summary>
-            <param name="steps">Which char index (from current position) to get.</param>
-            <returns>A <see cref="T:System.Char"/>.</returns>
-        </member>
-        <member name="M:Fadd.Parser.Tokenizer.Peek(System.String,System.Int32)">
-            <summary>
-            Peek forward on a char
-            </summary>
-            <param name="ignoreChars">Ignore these characters before string to peek</param>
-            <param name="steps">Which char index (from current position) to get.</param>
-            <returns>A <see cref="T:System.Char"/>.</returns>
-        </member>
-        <member name="M:Fadd.Parser.Tokenizer.PeekIgnore(System.String)">
-            <summary>
-            Get next position that do not contain the specified chars.
-            </summary>
-            <param name="ignoreChars"></param>
-            <returns></returns>
-        </member>
-        <member name="M:Fadd.Parser.Tokenizer.Peek">
-            <summary>
-            Peek on the next character
-            </summary>
-            <returns>The next character</returns>
-            <exception cref="T:System.InvalidOperationException">If trying to peek beyond last character in the string.</exception>
-        </member>
-        <member name="M:Fadd.Parser.Tokenizer.Peek(System.Boolean)">
-            <summary>
-            Peek forward
-            </summary>
-            <param name="throwException">true if extensions should be thrown</param>
-            <returns><see cref="F:System.Char.MinValue"/> if no extensions should be thrown and we are peeking beyond end of text.</returns>
-        </member>
-        <member name="M:Fadd.Parser.Tokenizer.Peek(System.String)">
-            <summary>
-            Peek at the next character.
-            </summary>
-            <param name="ignoreChars">Characters that are ignored (not counted).</param>
-            <returns>the next character, or <see cref="F:System.Char.MinValue"/> if no more characters exist.</returns>
-        </member>
-        <member name="M:Fadd.Parser.Tokenizer.Read(System.Int32)">
-            <summary>
-            Read X number of characters
-            </summary>
-            <param name="length">number of characters to read</param>
-            <returns>A string</returns>
-            <remarks>Moves current position forward.</remarks>
-        </member>
-        <member name="M:Fadd.Parser.Tokenizer.Read">
-            <summary>
-            Read a character
-            </summary>
-            <returns>A char</returns>
-            <remarks>Moves current position forward.</remarks>
-        </member>
-        <member name="M:Fadd.Parser.Tokenizer.Ignore(System.String)">
-            <summary>
-            Ignore all specified chars
-            </summary>
-            <param name="ignoreCharacters">chars to ignore</param>
-            <returns>true if end of text is not hit.</returns>
-            <remarks>Moves current position forward.</remarks>
-        </member>
-        <member name="P:Fadd.Parser.Tokenizer.CurrentPosition">
-            <summary>
-            Returns index of current position as a string.
-            </summary>
-        </member>
-        <member name="P:Fadd.Parser.Tokenizer.Prototypes">
-            <summary>
-            All prototype tokens.
-            </summary>
-        </member>
-        <member name="P:Fadd.Parser.Tokenizer.EOF">
-            <summary>
-            We are at end of text
-            </summary>
-        </member>
-        <member name="P:Fadd.Parser.Tokenizer.PeekEOF">
-            <summary>
-            Next character is the last one.
-            </summary>
-        </member>
-        <member name="T:Fadd.Parser.SimpleSQL.Tokens.EndContext">
-            <summary>
-            End of context.
-            </summary>
-        </member>
-        <member name="M:Fadd.Parser.SimpleSQL.Tokens.EndContext.ToString">
-            <summary>
-            Returns SQL
-            </summary>
-            <returns>(</returns>
-        </member>
-        <member name="P:Fadd.Parser.SimpleSQL.Tokens.EndContext.TokenIdentifier">
-            <summary>
-            Used to determine the kind of this token
-            </summary>
-            <value></value>
-        </member>
-        <member name="T:Fadd.Parser.Evaluator.Tokens.In">
-            <summary>
-            A IN clause.
-            </summary>
-        </member>
-        <member name="P:Fadd.Parser.Evaluator.Tokens.In.TokenIdentifier">
-            <summary>
-            Used to determine the kind of this token
-            </summary>
-        </member>
-        <member name="T:Fadd.Data.Mappings.Provider">
-            <summary>
-            Provides mappings between tables and classes.
-            </summary>
-            <remarks>
-            <para>
-            Mappings are loaded using one or more different loaders. In this way
-            you can provide your own special way of loading mappings, or use one of
-            our built in loaders such as mirror loader and XmlLoader.
-            </para>
-            <para>
-            You can also add mappings manually by using the <see cref="M:Fadd.Data.Mappings.Provider.AddMapping(Fadd.Data.Mappings.IMapping)"/> method.
-            </para>
-            </remarks>
-        </member>
-        <member name="M:Fadd.Data.Mappings.Provider.AddMapping(Fadd.Data.Mappings.IMapping)">
-            <summary>
-            Add a mapping.
-            </summary>
-            <param name="mapping">Mapping file.</param>
-        </member>
-        <member name="M:Fadd.Data.Mappings.Provider.GetMapping(System.String)">
-            <summary>
-            Get a mapping file.
-            </summary>
-            <remarks>
-            Will go through all different loaders until of of them return a mapping.
-            All found mappings are cached.
-            </remarks>
-            <param name="className">class to fetch a mapping for.</param>
-            <returns><see cref="T:Fadd.Data.Mappings.IMapping"/> if found; otherwise null.</returns>
-        </member>
-        <member name="M:Fadd.Data.Mappings.Provider.Add(Fadd.Data.Mappings.ILoader)">
-            <summary>
-            Add a <see cref="T:Fadd.Data.Mappings.ILoader"/>.
-            </summary>
-            <param name="loader"></param>
-        </member>
-        <member name="T:Fadd.Validator">
-            <summary>
-            General usage validator class.
-            </summary>
-            <remarks>
-            <para>Check all FieldXXXXX constants to see what you need to translate.</para>
-            </remarks>
-        </member>
-        <member name="F:Fadd.Validator.FieldDouble">
-            <summary>
-            '{0}' is not a double.
-            </summary>
-        </member>
-        <member name="F:Fadd.Validator.FieldCurrency">
-            <summary>
-            '{0}' is not a valid amount.
-            </summary>
-            <remarks>Uses Double validation internally</remarks>
-        </member>
-        <member name="F:Fadd.Validator.FieldNumber">
-            <summary>
-            '{0}' is not a number.
-            </summary>
-        </member>
-        <member name="F:Fadd.Validator.FieldBoolean">
-            <summary>
-            '{0}' must be {1} or {2}.
-            </summary>
-            <seealso cref="M:Fadd.Validator.Boolean(System.String,System.String,System.Boolean)"/>
-            <see cref="F:Fadd.Validator.FieldValueFalse"/>
-            <see cref="F:Fadd.Validator.FieldValueTrue"/>
-        </member>
-        <member name="F:Fadd.Validator.FieldEmail">
-            <summary>
-            '{0}' is not a valid email address.
-            </summary>
-            <seealso cref="M:Fadd.Validator.Email(System.String,System.String,System.Boolean)"/>
-            <seealso cref="F:Fadd.Validator.EmailRegEx"/>
-        </member>
-        <member name="F:Fadd.Validator.FieldLettersOrDigits">
-            <summary>
-            '{0}' can only contain letters or digits.
-            </summary>
-            <seealso cref="M:Fadd.Validator.LettersOrDigits(System.String,System.String,System.Boolean)"/>
-        </member>
-        <member name="F:Fadd.Validator.FieldLettersOrDigitsExtra">
-            <summary>
-            '{0}' can only contain letters, digits and the following characters: '{1}'.
-            </summary>
-            <seealso cref="M:Fadd.Validator.LettersOrDigits(System.String,System.String,System.Boolean,System.String)"/>
-        </member>
-        <member name="F:Fadd.Validator.FieldPassword">
-            <summary>
-            '{0}' can only contain letters, digits and any of the following characters: {1}
-            </summary>
-            <seealso cref="F:Fadd.Validator.PasswordChars"/>
-            <seealso cref="M:Fadd.Validator.Password(System.String,System.String,System.Boolean)"/>
-        </member>
-        <member name="F:Fadd.Validator.FieldRequired">
-            <summary>
-            '{0}' is required.
-            </summary>
-            <seealso cref="M:Fadd.Validator.Required(System.String,System.String)"/>
-        </member>
-        <member name="F:Fadd.Validator.FieldValueFalse">
-            <summary>
-            Used to check if a field is false.
-            </summary>
-            <seealso cref="M:Fadd.Validator.Boolean(System.String,System.String,System.Boolean)"/>
-        </member>
-        <member name="F:Fadd.Validator.FieldValueTrue">
-            <summary>
-            Text: True
-            </summary>
-            <seealso cref="M:Fadd.Validator.Boolean(System.String,System.String,System.Boolean)"/>
-        </member>
-        <member name="F:Fadd.Validator.FieldAlphaNumeric">
-            <summary>
-            '{0}' may only contain writable characters.
-            </summary>
-            <remarks>ascii 32-126, 128-167, 224-238.</remarks>
-        </member>
-        <member name="F:Fadd.Validator.FieldHex">
-            <summary>
-            Name of the string to display when testing hex fail
-            </summary>
-        </member>
-        <member name="F:Fadd.Validator.FieldLetters">
-            <summary>
-            Name of string to display when testing letters fail
-            </summary>
-        </member>
-        <member name="F:Fadd.Validator.FieldLettersSpecial">
-            <summary>
-            Name of string to display when testing letters fail
-            </summary>
-        </member>
-        <member name="F:Fadd.Validator.FieldDigits">
-            <summary>
-            '{0}' may only contain digits
-            </summary>
-        </member>
-        <member name="F:Fadd.Validator.FieldDigitsExtra">
-            <summary>
-            '{0}' may only contain digits and the following characters: '{1}'
-            </summary>
-        </member>
-        <member name="F:Fadd.Validator.FieldBetween">
-            <summary>
-            '{0}' must be between '{1}' and '{2}'
-            </summary>
-        </member>
-        <member name="F:Fadd.Validator.FieldMin">
-            <summary>
-            '{0}' must be '{1}' or more
-            </summary>
-        </member>
-        <member name="F:Fadd.Validator.FieldMax">
-            <summary>
-            '{0}' must be '{1}' or less
-            </summary>
-        </member>
-        <member name="F:Fadd.Validator.ValidChars">
-            <summary>
-            Characters that are valid in alphanumeric fields.
-            </summary>
-        </member>
-        <member name="F:Fadd.Validator.SqlSafeChars">
-            <summary>
-            SQL Safe characters (not including '")
-            </summary>
-        </member>
-        <member name="F:Fadd.Validator.Space">
-            <summary>
-            Space character.
-            </summary>
-        </member>
-        <member name="F:Fadd.Validator.EmailRegEx">
-            <summary>
-            Regex used to validate emails.
-            </summary>
-            <seealso cref="M:Fadd.Validator.Email(System.String,System.String,System.Boolean)"/>
-        </member>
-        <member name="F:Fadd.Validator.Language">
-            <summary>
-            Language manager used if no one else have been specified.
-            </summary>
-        </member>
-        <member name="F:Fadd.Validator.PasswordChars">
-            <summary>
-            Extra characters that are allowed in passwords.
-            </summary>
-            <seealso cref="M:Fadd.Validator.Password(System.String,System.String,System.Boolean)"/>
-        </member>
-        <member name="F:Fadd.Validator._errors">
-            <summary>
-            A list with all errors found.
-            </summary>
-        </member>
-        <member name="F:Fadd.Validator._modelLang">
-            <summary>
-            Language translation for all "name" parameters.
-            </summary>
-        </member>
-        <member name="F:Fadd.Validator._validatorLang">
-            <summary>
-            Language for the validator (i.e. "Field {0} is required.")
-            </summary>
-        </member>
-        <member name="M:Fadd.Validator.#ctor(System.Collections.Specialized.NameValueCollection)">
-            <summary>
-            Create a new validator.
-            </summary>
-            <param name="errors">collection to be filled with errors</param>
-        </member>
-        <member name="M:Fadd.Validator.#ctor(System.Collections.Specialized.NameValueCollection,Fadd.Globalization.ILanguageNode)">
-            <summary>
-            Create a new validator.
-            </summary>
-            <param name="errors">collection to be filled with errors</param>
-            <param name="modelLanguage">language translation for all "name" parameters</param>
-        </member>
-        <member name="M:Fadd.Validator.#ctor(Fadd.Globalization.ILanguageNode)">
-            <summary>
-            Create a new validator.
-            </summary>
-            <param name="modelLanguage">language translation for all "name" parameters</param>
-        </member>
-        <member name="M:Fadd.Validator.#ctor">
-            <summary>
-            Create a new validator
-            </summary>
-        </member>
-        <member name="M:Fadd.Validator.Max(System.String,System.Int32,System.Object,System.Boolean)">
-            <summary>
-            Check whether the specified field is within the limit.
-            </summary>
-            <param name="name">field name.</param>
-            <param name="max">max value.</param>
-            <param name="value">value to check.</param>
-            <param name="required">if set to <c>true</c> the field is required.</param>
-            <returns>true if the field is within the limit</returns>
-            <remarks>
-            number are check to be less or equal to max. Strings are checked on the number of characters.
-            </remarks>
-        </member>
-        <member name="M:Fadd.Validator.Min(System.String,System.Int32,System.Object,System.Boolean)">
-            <summary>
-            Check whether the specified field is within the limit.
-            </summary>
-            <param name="name">field name.</param>
-            <param name="min">min value.</param>
-            <param name="value">value to check.</param>
-            <param name="required">if set to <c>true</c> the field is required.</param>
-            <returns>true if the field is within the limit</returns>
-            <remarks>
-            number are check to be less or equal to min. Strings are checked on the number of characters.
-            </remarks>
-        </member>
-        <member name="M:Fadd.Validator.Between(System.String,System.Int32,System.Int32,System.Object,System.Boolean)">
-            <summary>
-            Check whether the specified field is within the limit.
-            </summary>
-            <param name="name">field name.</param>
-            <param name="min">min value.</param>
-            <param name="max">max value</param>
-            <param name="value">value to check.</param>
-            <param name="required">if set to <c>true</c> the field is required.</param>
-            <returns>true if the field is within the limit</returns>
-            <remarks>
-            number are check to be less or equal to min. Strings are checked on the number of characters.
-            </remarks>
-        </member>
-        <member name="M:Fadd.Validator.LettersOrDigits(System.String,System.String,System.Boolean)">
-            <summary>
-            Validate that a string only contains letters or digits.
-            </summary>
-            <param name="name">Form parameter name.</param>
-            <param name="value">value to validate</param>
-            <param name="required">may not be null or empty if true.</param>
-            <returns>value if valid; otherwise string.Empty</returns>
-            <seealso cref="M:Fadd.Validator.LettersOrDigits(System.String,System.String,System.Boolean,System.String)"/>
-        </member>
-        <member name="M:Fadd.Validator.LettersOrDigits(System.String,System.String,System.Boolean,System.String)">
-            <summary>
-            Validate that a string only contains letters, digits or the specified characters
-            </summary>
-            <param name="name">Form parameter name.</param>
-            <param name="value">value to validate</param>
-            <param name="required">may not be null or empty if true.</param>
-            <param name="extraCharacters">any other allowed characters.</param>
-            <returns>value if valid; otherwise string.Empty</returns>
-            <seealso cref="M:Fadd.Validator.LettersOrDigits(System.String,System.String,System.Boolean)"/>
-        </member>
-        <member name="M:Fadd.Validator.Password(System.String,System.String,System.Boolean)">
-            <summary>
-            Validate that a string only contains letters or digits or any of the <see cref="F:Fadd.Validator.PasswordChars"/>.
-            </summary>
-            <param name="name">Form parameter name.</param>
-            <param name="value">value to validate</param>
-            <param name="required">field may not be empty or null if true</param>
-            <returns>vaue if valid; otherwise string.Empty</returns>
-            <seealso cref="M:Fadd.Validator.LettersOrDigits(System.String,System.String,System.Boolean)"/>
-        </member>
-        <member name="M:Fadd.Validator.Required(System.String,System.String)">
-            <summary>
-            Check's weather a parameter is null or not.
-            </summary>
-            <param name="name">Parameter in form</param>
-            <returns>true if value is not null/empty; otherwise false.</returns>
-            <param name="value">value that cannot be null or empty.</param>
-        </member>
-        <member name="M:Fadd.Validator.String(System.String,System.String,System.Boolean)">
-            <summary>
-            Validate a string parameter in the form
-            </summary>
-            <param name="name">Form parameter name.</param>
-            <param name="value">value to validate as string.</param>
-            <param name="required">field may not be empty or null if true.</param>
-            <returns>vaue if valid; otherwise string.Empty</returns>
-            <seealso cref="M:Fadd.Validator.LettersOrDigits(System.String,System.String,System.Boolean)"/>
-            <seealso cref="M:Fadd.Validator.AlphaNumeric(System.String,System.String,System.Boolean)"/>
-        </member>
-        <member name="M:Fadd.Validator.AddDefaultPhrases">
-            <summary>
-            add default language phrases (only english)
-            </summary>
-        </member>
-        <member name="M:Fadd.Validator.Contains(System.String,System.Char)">
-            <summary>
-            Checks wether a string contains a specific character.
-            </summary>
-            <param name="s">source</param>
-            <param name="ch">character to find.</param>
-            <returns>true if found; otherwise false.</returns>
-        </member>
-        <member name="M:Fadd.Validator.Format(System.String,System.String)">
-            <summary>
-            format an error message
-            </summary>
-            <param name="format">string containing the formatting</param>
-            <param name="fieldName">name of the field that the error ocurred for.</param>
-            <returns>formatted string</returns>
-        </member>
-        <member name="M:Fadd.Validator.Format(System.String,System.String,System.String)">
-            <summary>
-            format an error message
-            </summary>
-            <param name="format">string containing the formatting</param>
-            <param name="fieldName">name of the field that the error ocurred for.</param>
-            <param name="extra">extra value in the formatting</param>
-            <returns>formatted string</returns>
-        </member>
-        <member name="M:Fadd.Validator.Format(System.String,System.String,System.String,System.String)">
-            <summary>
-            format an error message
-            </summary>
-            <param name="format">string containing the formatting</param>
-            <param name="fieldName">name of the field that the error ocurred for.</param>
-            <param name="extra">extra value in the formatting</param>
-            <param name="extra2">third parameter in the formatting</param>
-            <returns>formatted string</returns>
-        </member>
-        <member name="M:Fadd.Validator.Char(System.String,System.String,System.Boolean)">
-            <summary>
-            Check whether the specified value is an character.
-            </summary>
-            <param name="name">Name of the parameter</param>
-            <param name="value">Parameter value to validate</param>
-            <param name="required">Paramater is required (adds an error if it's not specified)</param>
-            <returns>value if parameter is an int; char.MinValue if not.</returns>
-        </member>
-        <member name="M:Fadd.Validator.Char(System.String,System.String)">
-            <summary>
-            Check whether the specified value is an character.
-            </summary>
-            <param name="name">Name of the parameter</param>
-            <param name="value">Parameter value to validate</param>
-            <returns>value if parameter is an int; char.MinValue if not.</returns>
-        </member>
-        <member name="M:Fadd.Validator.Integer(System.String,System.String,System.Boolean)">
-            <summary>
-            Check whether the specified value is an integer.
-            </summary>
-            <param name="name">Name of the parameter</param>
-            <param name="value">Parameter value to validate</param>
-            <param name="required">Paramater is required (adds an error if it's not specified)</param>
-            <returns>value if parameter is an int; 0 if not.</returns>
-        </member>
-        <member name="M:Fadd.Validator.Double(System.String,System.String,System.Boolean)">
-            <summary>
-            Check whether the specified value is a double.
-            </summary>
-            <param name="name">Name of the parameter</param>
-            <param name="value">Parameter value to validate</param>
-            <param name="required">Paramater is required (adds an error if it's not specified)</param>
-            <returns>value if parameter is a double; 0 if not.</returns>
-        </member>
-        <member name="M:Fadd.Validator.Currency(System.String,System.String,System.Boolean)">
-            <summary>
-            Check whether the specified value is a currency amount.
-            </summary>
-            <param name="name">Name of the parameter</param>
-            <param name="value">Parameter value to validate</param>
-            <param name="required">Paramater is required (adds an error if it's not specified)</param>
-            <returns>value if parameter is a currency amount; 0 if not.</returns>
-        </member>
-        <member name="M:Fadd.Validator.Double(System.String,System.String,System.Boolean,System.String)">
-            <summary>
-            Check whether the specified value is a double.
-            </summary>
-            <param name="name">Name of the parameter</param>
-            <param name="value">Parameter value to validate</param>
-            <param name="required">Paramater is required (adds an error if it's not specified)</param>
-            <returns>value if parameter is a double; 0 if not.</returns>
-            <param name="formatString">error string</param>
-        </member>
-        <member name="M:Fadd.Validator.AlphaNumeric(System.String,System.String,System.Boolean)">
-            <summary>
-            Check whether the specified value is an integer.
-            </summary>
-            <param name="name">Name of the parameter</param>
-            <param name="value">Parameter value to validate</param>
-            <param name="required">Paramater is required (adds an error if it's not specified)</param>
-            <returns>value if parameter contains valid characters; string.Empty if not.</returns>
-            <remarks>ascii 32-126, 128-167, 224-238.</remarks>
-        </member>
-        <member name="M:Fadd.Validator.Digits(System.String,System.String,System.Boolean)">
-            <summary>
-            Check if a value is digits only
-            </summary>
-            <param name="name">Field name.</param>
-            <param name="value">value to validate</param>
-            <param name="required">true if field is required (may not be empty)</param>
-            <returns>string if validated, otherwise string.Empty</returns>
-        </member>
-        <member name="M:Fadd.Validator.Digits(System.String,System.String,System.Boolean,System.String)">
-            <summary>
-            Check if a value is digits only
-            </summary>
-            <param name="name">Field name.</param>
-            <param name="value">value to validate</param>
-            <param name="extraAllowedCharacters">extra characters that is allowed.</param>
-            <param name="required">true if field is required (may not be empty)</param>
-            <returns>string if validated, otherwise string.Empty</returns>
-        </member>
-        <member name="M:Fadd.Validator.Letters(System.String,System.String,System.Boolean)">
-            <summary>
-            Validates a string to consist of letters.
-            </summary>
-            <param name="name">field name</param>
-            <param name="value">value to validate</param>
-            <param name="required">field is required</param>
-            <returns>string if valid, string.Empty if not.</returns>
-        </member>
-        <member name="M:Fadd.Validator.Letters(System.String,System.String,System.Boolean,System.String)">
-            <summary>
-            Validates a string to consist of letters plus specified characters.
-            </summary>
-            <param name="name">The name of the parameter</param>
-            <param name="value">The value to validate</param>
-            <param name="required">If the value is required</param>
-            <param name="extraAllowedCharacters">A string consisting of extra allowed characters</param>
-            <returns>The validated string or string.Empty if validation failed</returns>
-        </member>
-        <member name="M:Fadd.Validator.Hex(System.String,System.String,System.Boolean)">
-            <summary>
-            Validates a string to be in trimmed hex letters
-            </summary>
-            <param name="name">The name of the parameter</param>
-            <param name="value">The value to test</param>
-            <param name="required">If the parameter is required</param>
-            <returns>The value or string.Empty if validation failed</returns>
-        </member>
-        <member name="M:Fadd.Validator.Email(System.String,System.String,System.Boolean)">
-            <summary>
-            validates email address using a regexp.
-            </summary>
-            <param name="name">field name</param>
-            <param name="value">value to validate</param>
-            <param name="required">field is required (may not be null or empty).</param>
-            <returns>value if validation is ok; otherwise string.Empty.</returns>
-        </member>
-        <member name="M:Fadd.Validator.Between(System.String,System.String,System.Int32,System.Int32,System.Boolean)">
-            <summary>
-            validates that a certain number is within the specified interval
-            </summary>
-            <param name="name">field name</param>
-            <param name="value">value to validate</param>
-            <param name="max">The maximum value that value is allowed to be</param>
-            <param name="min">The minimum value that value is allowed to be</param>
-            <param name="required">field is required (may not be null or empty).</param>
-            <returns>value if validation is ok; otherwise 0.</returns>
-        </member>
-        <member name="M:Fadd.Validator.Between(System.String,System.String,System.Double,System.Double,System.Boolean)">
-            <summary>
-            validates that a certain number is within the specified interval
-            </summary>
-            <param name="name">field name</param>
-            <param name="value">value to validate</param>
-            <param name="max">The maximum value that value is allowed to be</param>
-            <param name="min">The minimum value that value is allowed to be</param>
-            <param name="required">field is required (may not be null or empty).</param>
-            <returns>value if validation is ok; otherwise 0.</returns>
-        </member>
-        <member name="M:Fadd.Validator.Boolean(System.String,System.String,System.Boolean)">
-            <summary>
-            Checks whether a field contains true (can also be in native language).
-            </summary>
-            <param name="name">field name</param>
-            <param name="value">value to validate</param>
-            <param name="required">field is required (may not be null or empty).</param>
-            <returns>true if value is true; false if value is false or if validation failed.</returns>
-            <seealso cref="F:Fadd.Validator.FieldValueTrue"/>
-            <remarks>Check validation errors to see if error ocurred.</remarks>
-        </member>
-        <member name="M:Fadd.Validator.SetDefaultMgr">
-            <summary>
-            Set default language.
-            </summary>
-        </member>
-        <member name="P:Fadd.Validator.ContainsErrors">
-            <summary>
-            true of validation generated errors.
-            </summary>
-        </member>
-        <member name="P:Fadd.Validator.Errors">
-            <summary>
-            Collection of validation errors.
-            </summary>
-        </member>
-        <member name="T:Fadd.Plugins.PluginFinder">
-            <summary>
-            General purpose plugin finder class.
-            </summary>
-            <remarks>
-            This class scans a directory after all classes that contains the specified types.
-            All assembly checking is done in a separate app domain, which means that no dlls are loaded
-            during the process.
-            </remarks>
-        </member>
-        <member name="M:Fadd.Plugins.PluginFinder.#ctor">
-            <summary>
-            Initializes a new instance of the <see cref="T:Fadd.Plugins.PluginFinder"/> class.
-            </summary>
-        </member>
-        <member name="M:Fadd.Plugins.PluginFinder.Find(System.String,System.Collections.Generic.IEnumerable{System.Type})">
-            <summary>
-            Finds the specified full path.
-            </summary>
-            <param name="fullPath">Path and wildcards.</param>
-            <param name="types">Types wanted.</param>
-            <example>
-            <code>
-            List&gt;Type&lt; types = new List&gt;Type&lt;();
-            types.Add(typeof(IPlayer));
-            types.Add(typeof(IViewer));
-            finder.Find("C:\\myapp\\plugins\\plugin*.dll", types);
-            </code>
-            </example>
-            <exception cref="T:System.Reflection.ReflectionTypeLoadException"></exception>
-            <exception cref="T:System.TypeLoadException"></exception>
-        </member>
-        <member name="M:Fadd.Plugins.PluginFinder.FindInternal(System.String,System.Collections.Generic.IEnumerable{System.Type})">
-            <summary>
-            Finds the specified full path.
-            </summary>
-            <param name="fullPath">Path and wildcards.</param>
-            <param name="types">Types wanted.</param>
-            <example>
-            <code>
-            List&gt;Type&lt; types = new List&gt;Type&lt;();
-            types.Add(typeof(IPlayer));
-            types.Add(typeof(IViewer));
-            finder.Find("C:\\myapp\\plugins\\plugin*.dll", types);
-            </code>
-            </example>
-            <exception cref="T:System.TypeLoadException"></exception>
-        </member>
-        <member name="M:Fadd.Plugins.PluginFinder.Add(Fadd.Plugins.PluginTypeInfo@,System.Reflection.Assembly,System.Type,System.Byte[])">
-            <summary>
-            Adds the specified plugin.
-            </summary>
-            <param name="plugin">The plugin.</param>
-            <param name="assembly">Assembly that the plugin resides in.</param>
-            <param name="type">Plugin interface type.</param>
-            <param name="publicKey">Public key, should be used to decide the amount of access for the module.</param>
-        </member>
-        <member name="P:Fadd.Plugins.PluginFinder.Plugins">
-            <summary>
-            All found plugins
-            </summary>
-        </member>
-        <member name="T:Fadd.Components.ComponentNameAttribute">
-            <summary>
-            Used to specify a name for a component.
-            </summary>
-        </member>
-        <member name="M:Fadd.Components.ComponentNameAttribute.#ctor(System.String)">
-            <summary>
-            Initializes a new instance of the <see cref="T:Fadd.Components.ComponentNameAttribute"/> class.
-            </summary>
-            <param name="name">Name of the component.</param>
-        </member>
-        <member name="P:Fadd.Components.ComponentNameAttribute.Name">
-            <summary>
-            Name of the component.
-            </summary>
-        </member>
-        <member name="T:Fadd.Commands.Net.CommandPacket">
-            <summary>
-            Packet sent through the channel. Keeps track of a command and its reply.
-            </summary>
-        </member>
-        <member name="M:Fadd.Commands.Net.CommandPacket.#ctor(System.Int32,Fadd.Commands.Command)">
-            <summary>
-            Initializes a new instance of the <see cref="T:Fadd.Commands.Net.CommandPacket"/> class.
-            </summary>
-            <param name="sequenceNumber">The sequence number.</param>
-            <param name="command">Command .</param>
-        </member>
-        <member name="T:Fadd.Parser.SimpleSQL.Tokens.Like">
-            <summary>
-            LIKE keyword
-            </summary>
-        </member>
-        <member name="M:Fadd.Parser.SimpleSQL.Tokens.Like.ToString">
-            <summary>
-            Conditional string
-            </summary>
-            <returns>" LIKE "</returns>
-        </member>
-        <member name="P:Fadd.Parser.SimpleSQL.Tokens.Like.TokenIdentifier">
-            <summary>
-            Used to determine the kind of this token
-            </summary>
-        </member>
-        <member name="T:Fadd.Parser.SimpleSQL.Tokens.BitwiseOperator">
-            <summary>
-            Operator used for bitwise operations
-            </summary>
-        </member>
-        <member name="M:Fadd.Parser.SimpleSQL.Tokens.BitwiseOperator.#ctor(System.Char)">
-            <summary>
-            Initializes a new instance of the <see cref="T:Fadd.Parser.SimpleSQL.Tokens.BitwiseOperator"/> class.
-            </summary>
-            <param name="token">Bitwise char.</param>
-        </member>
-        <member name="M:Fadd.Parser.SimpleSQL.Tokens.BitwiseOperator.ToString">
-            <summary>
-            Returns SQL
-            </summary>
-            <returns>The token wrapped with spaces</returns>
-        </member>
-        <member name="P:Fadd.Parser.SimpleSQL.Tokens.BitwiseOperator.TokenIdentifier">
-            <summary>
-            Used to determine the kind of this token
-            </summary>
-            <value></value>
-        </member>
-        <member name="T:Fadd.Parser.SimpleSQL.ParseTreeTokens.LessOrEqualToken">
-            <summary>
-            Parse <![CDATA[<=]]>
-            </summary>
-        </member>
-        <member name="M:Fadd.Parser.SimpleSQL.ParseTreeTokens.LessOrEqualToken.Match(Fadd.Parser.Tokenizer,Fadd.Parser.ParseTree)">
-            <summary>
-            Check if the current position is the start of this token
-            </summary>
-            <returns>true if our token is the next one.</returns>
-        </member>
-        <member name="M:Fadd.Parser.SimpleSQL.ParseTreeTokens.LessOrEqualToken.Parse(Fadd.Parser.Tokenizer,Fadd.Parser.ParseTree)">
-            <summary>
-            Parses the data in the specified <see cref="T:Fadd.Parser.Tokenizer"/>.
-            </summary>
-            <param name="tokenizer">The <see cref="T:Fadd.Parser.Tokenizer"/> containing the data to parse.</param>
-            <param name="tree"><see cref="T:Fadd.Parser.ParseTree"/> that is being built..</param>
-            <returns>true if more tokens can be parsed on the current leaf; false if we should continue to next leaf (parse no more children).</returns>
-        </member>
-        <member name="T:Fadd.Parser.Evaluator.Tokens.MoreThan">
-            <summary>
-            >
-            </summary>
-        </member>
-        <member name="P:Fadd.Parser.Evaluator.Tokens.MoreThan.TokenIdentifier">
-            <summary>
-            Used to determine the kind of this token
-            </summary>
-            <value></value>
-        </member>
-        <member name="T:Fadd.Parser.Evaluator.ParseTreeTokens.EqualToken">
-            <summary>
-            Parse == or =
-            </summary>
-        </member>
-        <member name="M:Fadd.Parser.Evaluator.ParseTreeTokens.EqualToken.Match(Fadd.Parser.Tokenizer,Fadd.Parser.ParseTree)">
-            <summary>
-            Check if the current position is the start of this token
-            </summary>
-            <returns>true if our token is the next one.</returns>
-        </member>
-        <member name="M:Fadd.Parser.Evaluator.ParseTreeTokens.EqualToken.Parse(Fadd.Parser.Tokenizer,Fadd.Parser.ParseTree)">
-            <summary>
-            Parses the data in the specified <see cref="T:Fadd.Parser.Tokenizer"/>.
-            </summary>
-            <param name="tokenizer">The <see cref="T:Fadd.Parser.Tokenizer"/> containing the data to parse.</param>
-            <param name="tree"><see cref="T:Fadd.Parser.ParseTree"/> that is being built..</param>
-            <returns>true if more tokens can be parsed on the current leaf; false if we should continue to next leaf (parse no more children).</returns>
-        </member>
-        <member name="T:Fadd.Data.Mappings.XmlLoader">
-            <summary>
-            Loads mappings from embedded XML files.
-            </summary>
-            <remarks>
-            <para>
-            En mapping file can look like this:
-            <code>
-            <![CDATA[
-            <?xml version="1.0" encoding="utf-8" ?>
-            <class name="Gate.BusinessObjects.AdminTodo, Gate.BusinessObjects" table="admin_todos">
-              <id name="Id" column="id" type="integer" generator="autoincrement" />
-              <property name="Name" column="name" type="string"/>
-              <property name="SiteId" column="site_id" type="integer"/>
-              <property name="MethodName" column="action" type="string"/>
-              <property name="MethodId" column="action_id" type="string"/>
-              <property name="Controller" column="controller" type="string"/>
-              <property name="Description" column="description" type="string"/>
-            </class>
-            ]]>
-            </code>
-            </para>
-            <para>
-            class 'name' is a assembly qualified name.
-            </para>
-            <para>
-            generator can be 'autoincrement' (works with databases such as SQL Server or MySQL), 'sequence' (works with PostgreSQL, looks for a sequence
-            with the name '[tablename]_id_seq'), 'guid' (Fadd.Data generates the guid), any other values are interpreted as
-            a sequence name (and will be used as such depending on the database type).
-            </para>
-            <para>
-            Property/Id 'type' attribute is not yet used.
-            Will be used along with the 'length' attribute when creating/upgrading tables/columns.
-            </para>
-            </remarks>
-        </member>
-        <member name="M:Fadd.Data.Mappings.XmlLoader.#ctor(System.Reflection.Assembly)">
-            <summary>
-            Initializes a new instance of the <see cref="T:Fadd.Data.Mappings.XmlLoader"/> class.
-            </summary>
-            <param name="assembly">An assembly to look in.</param>
-            <remarks>
-            You can add more assemblies by using <see cref="M:Fadd.Data.Mappings.XmlLoader.AddAssembly(System.Reflection.Assembly)"/>
-            </remarks>
-        </member>
-        <member name="M:Fadd.Data.Mappings.XmlLoader.AddAssembly(System.Reflection.Assembly)">
-            <summary>
-            Add another assembly that mappings can be found in.
-            </summary>
-            <param name="assembly">Assembly to add.</param>
-        </member>
-        <member name="M:Fadd.Data.Mappings.XmlLoader.FindClass(System.String)">
-            <summary>
-            Scan after types that match the name.
-            </summary>
-            <param name="className">name of class to scan for</param>
-            <returns>A list with matches.</returns>
-        </member>
-        <member name="M:Fadd.Data.Mappings.XmlLoader.GetMapping(System.String)">
-            <summary>
-            Get an mapping.
-            </summary>
-            <param name="className">Name of class.</param>
-            <returns><see cref="T:Fadd.Data.Mappings.IMapping"/> if found; otherwise null.</returns>
-            <exception cref="T:Fadd.Data.Mappings.MappingException">Failed to find any attributes in the class element.</exception>
-        </member>
-        <member name="T:Fadd.Data.Mappings.MappingException">
-            <summary>
-            Throw during mapping exceptions.
-            </summary>
-        </member>
-        <member name="M:Fadd.Data.Mappings.MappingException.#ctor(System.Type,System.String)">
-            <summary>
-            Initializes a new instance of the <see cref="T:Fadd.Data.Mappings.MappingException"/> class.
-            </summary>
-            <param name="msg">Error message.</param>
-            <param name="mappingType">Type that the mapping failed for.</param>
-        </member>
-        <member name="M:Fadd.Data.Mappings.MappingException.#ctor(System.Type,System.String,System.Data.Common.DbException)">
-            <summary>
-            Initializes a new instance of the <see cref="T:Fadd.Data.Mappings.MappingException"/> class.
-            </summary>
-            <param name="msg">Error message.</param>
-            <param name="innerException">Inner exception.</param>
-            <param name="mappingType">Type that the mapping failed for.</param>
-        </member>
-        <member name="P:Fadd.Data.Mappings.MappingException.MappingType">
-            <summary>
-            Type that the mapping failed for.
-            </summary>
-        </member>
-        <member name="T:Fadd.Validation.ValidateRegularExpression">
-            <summary>
-            Let's you validate a string field using regular expressions.
-            </summary>
-        </member>
-        <member name="M:Fadd.Validation.ValidateRegularExpression.#ctor(System.Object,System.String)">
-            <summary>
-            Initializes a new instance of the <see cref="T:Fadd.Validation.ValidateRegularExpression"/> class.
-            </summary>
-            <param name="value">The value.</param>
-            <param name="languageName">Name in language text to use, or a error message.</param>
-            <seealso cref="M:Fadd.Validation.ValidateRegularExpression.Format(System.String,Fadd.Globalization.ILanguageNode)"/>
-            <example>
-            // will use the supplied text as error message if validation fails.
-            [ValidateRegularExpression("^[a-zA-Z0-9_\.\-]+@[a-zA-Z0-9_\.\-]+\.[a-zA-Z]{2,4}$", "Incorrect email")]
-            public string Email{get;set;}
-
-            //will use the InvalidEmail text from the language file
-            [ValidateRegularExpression("^[a-zA-Z0-9_\.\-]+@[a-zA-Z0-9_\.\-]+\.[a-zA-Z]{2,4}$", "InvalidEmail")]
-            public string Email{get;set;}
-            </example>
-        </member>
-        <member name="M:Fadd.Validation.ValidateRegularExpression.Validate(System.Object,System.Object)">
-            <summary>
-            Validate value
-            </summary>
-            <param name="context">Can be used to send a context object to the validation class. Useful if you provide your own validation classes which need to get information from your application. <seealso cref="T:Fadd.Validation.BeforeValidationEventArgs"/></param>
-            <param name="value">value to validate</param>
-            <returns>
-            true if value passed the validation; otherwise false.
-            </returns>
-        </member>
-        <member name="M:Fadd.Validation.ValidateRegularExpression.Format(System.String,Fadd.Globalization.ILanguageNode)">
-            <summary>
-            Localize error if validation failed.
-            </summary>
-            <param name="fieldName">Localized field name.</param>
-            <param name="validationLanguage">Language node with all validation translations.</param>
-            <returns>A localized error message if the validation failed; otherwise null.</returns>
-            <example>
-            <code>
-            attribute.Localize("FirstName", "'{0}' is required");
-            // will return "'{0}' is required" if the validation failed, else null.
-            </code>
-            </example>
-        </member>
-        <member name="M:Fadd.Validation.ValidateRegularExpression.SupportsType(System.Type)">
-            <summary>
-            Determines if the validation class support the specified type.
-            </summary>
-            <param name="type">Property/Value type.</param>
-            <returns>true if the type is supported.</returns>
-        </member>
-        <member name="P:Fadd.Validation.ValidateRegularExpression.Value">
-            <summary>
-            Regular Expression
-            </summary>
-        </member>
-        <member name="T:Fadd.Plugins.PluginStartedEventArgs`1">
-            <summary>
-            Arguments for <see cref="T:Fadd.Plugins.PluginStartedHandler`1"/>
-            </summary>
-            <typeparam name="T">A plugin implementation</typeparam>
-        </member>
-        <member name="M:Fadd.Plugins.PluginStartedEventArgs`1.#ctor(`0)">
-            <summary>
-            Initializes a new instance of the <see cref="T:Fadd.Plugins.PluginStartedEventArgs`1"/> class.
-            </summary>
-            <param name="plugin">Plugin that have been started.</param>
-        </member>
-        <member name="P:Fadd.Plugins.PluginStartedEventArgs`1.Plugin">
-            <summary>
-            Plugin that have been started.
-            </summary>
-        </member>
-        <member name="T:Fadd.Plugins.PluginStartedHandler`1">
-            <summary>
-             Triggered when a plugin have been started.
-            </summary>
-            <param name="source">Plugin manager</param>
-            <param name="args">Plugin instance</param>
-            <typeparam name="T">A plugin implementation</typeparam>
-        </member>
-        <member name="T:Fadd.Plugins.PluginManager`1">
-            <summary>
-            This class is responsible of loading all modules in a system.
-            </summary>
-        </member>
-        <member name="T:Fadd.Plugins.IApplication">
-            <summary>
-            Application interface exposed to the clients.
-            </summary>
-        </member>
-        <member name="M:Fadd.Plugins.PluginManager`1.#ctor(Fadd.Plugins.IApplication)">
-            <summary>
-            Initializes a new instance of the <see cref="T:Fadd.Plugins.PluginManager`1"/> class.
-            </summary>
-            <param name="application">Interface exposed to plugins.</param>
-        </member>
-        <member name="M:Fadd.Plugins.PluginManager`1.#ctor">
-            <summary>
-            Initializes a new instance of the <see cref="T:Fadd.Plugins.PluginManager`1"/> class.
-            </summary>
-        </member>
-        <member name="M:Fadd.Plugins.PluginManager`1.GetEvidence(Fadd.Plugins.PluginTypeInfo)">
-            <summary>
-            Called when a plugin assembly is about to be loaded.
-            </summary>
-            <param name="typeInfo">Information about the assembly.</param>
-            <returns>Evidence that the <see cref="T:System.Reflection.Assembly"/> should be loaded with.</returns>
-            <remarks>
-            The assembly is used to determine which security settings a plugin <see cref="T:System.Reflection.Assembly"/> should be loaded with.
-            </remarks>
-        </member>
-        <member name="M:Fadd.Plugins.PluginManager`1.LoadModules">
-            <summary>
-            Loads modules with the correct <see cref="T:System.Security.Policy.Evidence"/> and correct protection level.
-            </summary>
-        </member>
-        <member name="M:Fadd.Plugins.PluginManager`1.StartModules(System.Collections.Generic.IDictionary{System.String,`0},System.Collections.Generic.IDictionary{System.String,`0})">
-            <summary>
-            Loads all modules that can be loaded (their dependencies have been loaded.)
-            </summary>
-            <param name="loaded"></param>
-            <param name="dependent"></param>
-            <returns></returns>
-            <remarks>Call this method as long as it returns true.</remarks>
-        </member>
-        <member name="M:Fadd.Plugins.PluginManager`1.OnPluginLoaded(`0,System.Reflection.Assembly,Fadd.Plugins.PluginTypeInfo)">
-            <summary>
-            Called when a plugin have been loaded.
-            </summary>
-            <param name="plugin">Module being loaded.</param>
-            <param name="assembly">Assembly that the plugin exist in.</param>
-            <param name="typeInfo">information about the plugin</param>
-            <remarks>Plugin have not been started yet.</remarks>
-        </member>
-        <member name="M:Fadd.Plugins.PluginManager`1.Add(`0)">
-            <summary>
-            Manually add a plugin
-            </summary>
-            <param name="plugin">Plugin to add</param>
-            <remarks>
-            Used if you want to inject a known plugin to let it be loaded when all dependencies have been met.
-            </remarks>
-        </member>
-        <member name="M:Fadd.Plugins.PluginManager`1.Start">
-            <summary>
-            Loads all modules
-            </summary>
-        </member>
-        <member name="M:Fadd.Plugins.PluginManager`1.StartPlugin(`0)">
-            <summary>
-            Calls start in a <see cref="T:Fadd.Plugins.IPlugin"/>.
-            </summary>
-            <param name="plugin">plugin to start</param>
-            <exception cref="T:System.ArgumentNullException"></exception>
-        </member>
-        <member name="E:Fadd.Plugins.PluginManager`1.PluginsLoaded">
-            <summary>
-            Triggered when all plugins have been loaded, but not started yet.
-            </summary>
-        </member>
-        <member name="P:Fadd.Plugins.PluginManager`1.Item(System.String)">
-            <summary>
-            Access a loaded plugin.
-            </summary>
-            <value>plugin if found; otherwise null.</value>
-        </member>
-        <member name="P:Fadd.Plugins.PluginManager`1.PluginPath">
-            <summary>
-            Folder in which plugins resides.
-            </summary>
-            <remarks>Can also contain wildcards</remarks>
-            <example>
-            <code>
-            pluginMgr.Path = "plugins\\plugin*.dll";
-            </code>
-            </example>
-        </member>
-        <member name="P:Fadd.Plugins.PluginManager`1.IgnoredPlugins">
-            <summary>
-            All plugins that should not be loaded.
-            </summary>
-        </member>
-        <member name="P:Fadd.Plugins.PluginManager`1.Plugins">
-            <summary>
-            A list with all loaded plugins.
-            </summary>
-        </member>
-        <member name="E:Fadd.Plugins.PluginManager`1.PluginLoaded">
-            <summary>
-            A plugin have been loaded into the system
-            </summary>
-        </member>
-        <member name="E:Fadd.Plugins.PluginManager`1.PluginStarted">
-            <summary>
-            A plugin have been started.
-            </summary>
-        </member>
-        <member name="E:Fadd.Plugins.PluginManager`1.EvidenceRequested">
-            <summary>
-            An plugin assembly is about to be loaded and the system needs to know which <see cref="T:System.Security.Policy.Evidence"/> the plugin assembly should be loaded with.
-            </summary>
-            <remarks>
-            Plugins are loaded into the Internet zone per default.
-            </remarks>
-        </member>
-        <member name="E:Fadd.Plugins.PluginManager`1.ApplicationRequested">
-            <summary>
-            Called when a plugin is about to be started and we need to get the application interface
-            that should be used when starting the plugin.
-            </summary>
-        </member>
-        <member name="T:Fadd.Plugins.IPlugin">
-            <summary>
-            All plugins must derive this interface.
-            </summary>
-        </member>
-        <member name="M:Fadd.Plugins.IPlugin.Start(Fadd.Plugins.IApplication)">
-            <summary>
-            Start the module
-            </summary>
-            <param name="application">Application interface exposed towards the plugins.</param>
-        </member>
-        <member name="P:Fadd.Plugins.IPlugin.PluginName">
-            <summary>
-            This name is used to determine dependencies, should always be in english.
-            Should not be confused with the human friendly name in <see cref="P:Fadd.Plugins.IPlugin.PluginInfo"/>.
-            </summary>
-        </member>
-        <member name="P:Fadd.Plugins.IPlugin.PluginInfo">
-            <summary>
-            Information about the plugin.
-            </summary>
-        </member>
-        <member name="P:Fadd.Plugins.IPlugin.Dependencies">
-            <summary>
-            Other plugins that this one depends on. The list should contain <see cref="P:Fadd.Plugins.IPlugin.PluginName"/>s.
-            </summary>
-            <value>should never be null.</value>
-        </member>
-        <member name="T:Fadd.MonthSpan">
-            <summary>
-            Calculates the number of months and days between two dates (and add the overlapping days).
-            </summary>
-        </member>
-        <member name="M:Fadd.MonthSpan.Create(System.DateTime,System.DateTime)">
-            <summary>
-            Creates a monthspan between two dates
-            </summary>
-            <param name="from">from which date to calculate.</param>
-            <param name="to">end date.</param>
-            <returns>Number of months and days between the two dates.</returns>
-        </member>
-        <member name="P:Fadd.MonthSpan.Months">
-            <summary>
-            Number of months
-            </summary>
-        </member>
-        <member name="P:Fadd.MonthSpan.Days">
-            <summary>
-            Number of days
-            </summary>
-        </member>
-        <member name="T:Fadd.Compiler">
-            <summary>
-            A general code compiler used to compile objects at runtime.
-            </summary>
-            <remarks>
-            This class is NOT thread safe.
-            </remarks>
-        </member>
-        <member name="M:Fadd.Compiler.#ctor">
-            <summary>
-            Initializes a new instance of the <see cref="T:Fadd.Compiler"/> class.
-            </summary>
-        </member>
-        <member name="M:Fadd.Compiler.Add(System.Type)">
-            <summary>
-            Add a type that is used in the generated object
-            </summary>
-            <param name="type">the type</param>
-        </member>
-        <member name="M:Fadd.Compiler.CheckTypes">
-            <summary>
-            Fills name spaces and assemblies with info from the added types.
-            </summary>
-        </member>
-        <member name="M:Fadd.Compiler.Compile(System.String)">
-            <summary>
-            Compile the code.
-            </summary>
-            <param name="code">C# code.</param>
-            <returns>An assembly containing the compiled objects</returns>
-            <exception cref="T:System.InvalidOperationException">If compilation fails.</exception>
-        </member>
-        <member name="M:Fadd.Compiler.CreateInstance``1(System.Object[])">
-            <summary>
-            Create a new object of the specified type
-            </summary>
-            <param name="contructorArguments">Constructor parameters</param>
-            <typeparam name="T">Type of object to create</typeparam>
-            <returns>object if we could create it; otherwise null</returns>
-        </member>
-        <member name="M:Fadd.Compiler.GetTypeName(System.Type)">
-            <summary>
-            Used to get correct names for generics.
-            </summary>
-            <param name="type">Type to generate a strig name for.</param>
-            <returns>Type as a code string</returns>
-            <example>
-            <code>
-            <![CDATA[
-            string typeName = typeof(List<string>).Name; // will become: List`1
-            typeName = Compiler.GetTypeName(typeof(List<string>)); // will become: System.Collections.Generic.List<string>
-            ]]>
-            </code>
-            </example>
-        </member>
-        <member name="M:Fadd.Compiler.GetTypeName(System.Type,System.Boolean)">
-            <summary>
-            Used to get correct names for generics.
-            </summary>
-            <param name="type">Type to generate a strig name for.</param>
-            <param name="useFullName">true if FullName should be used (including namespace in typename)</param>
-            <returns>Type as a code string</returns>
-            <example>
-            <code>
-            <![CDATA[
-            string typeName = typeof(List<string>).Name; // will become: List`1
-            typeName = Compiler.GetTypeName(typeof(List<string>)); // will become: System.Collections.Generic.List<string>
-            ]]>
-            </code>
-            </example>
-        </member>
-        <member name="T:Fadd.CompilerException">
-            <summary>
-            Thrown if code compilation fails.
-            </summary>
-            <remarks>
-            <see cref="P:System.Exception.Data"/> contains an item called <c>code</c> which contains the compiled code.
-            </remarks>
-        </member>
-        <member name="M:Fadd.CompilerException.#ctor(System.String,System.CodeDom.Compiler.CompilerErrorCollection)">
-            <summary>
-            Initializes a new instance of the <see cref="T:Fadd.CompilerException"/> class.
-            </summary>
-            <param name="errorMessage">The error message.</param>
-            <param name="errorCollection">A list with all compiler generated errors.</param>
-        </member>
-        <member name="M:Fadd.CompilerException.ToString">
-            <summary>
-            Creates and returns a string representation of the current exception.
-            </summary>
-            <returns>
-            A string representation of the current exception.
-            </returns>
-            <PermissionSet>
-            	<IPermission class="System.Security.Permissions.FileIOPermission, mscorlib, Version=2.0.3600.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" version="1" PathDiscovery="*AllFiles*"/>
-            </PermissionSet>
-        </member>
-        <member name="P:Fadd.CompilerException.Errors">
-            <summary>
-            A list with all compiler generated errors.
-            </summary>
-        </member>
-        <member name="T:Fadd.Commands.TypeMapping">
-            <summary>
-            The purpose of this class is to maintain all delegates for
-            one of following types: attributes, interfaces and classes.
-            </summary>
-            <remarks>
-            These lists are used to map all commands to their subscribers.
-            </remarks>
-        </member>
-        <member name="M:Fadd.Commands.TypeMapping.Add(System.Type,Fadd.Commands.CommandHandler)">
-            <summary>
-            Add a handler
-            </summary>
-            <param name="key"></param>
-            <param name="handler"></param>
-            <exception cref="T:System.ArgumentException">If handler have been added already.</exception>
-        </member>
-        <member name="M:Fadd.Commands.TypeMapping.System#Collections#Generic#IEnumerable{System#Collections#Generic#KeyValuePair{System#Type@System#Collections#Generic#List{Fadd#Commands#CommandHandler}}}#GetEnumerator">
-            <summary>
-            Returns an enumerator that iterates through the collection.
-            </summary>
-
-            <returns>
-            A <see cref="T:System.Collections.Generic.IEnumerator`1"></see> that can be used to iterate through the collection.
-            </returns>
-            <filterpriority>1</filterpriority>
-        </member>
-        <member name="M:Fadd.Commands.TypeMapping.GetEnumerator">
-            <summary>
-            Returns an enumerator that iterates through a collection.
-            </summary>
-
-            <returns>
-            An <see cref="T:System.Collections.IEnumerator"></see> object that can be used to iterate through the collection.
-            </returns>
-            <filterpriority>2</filterpriority>
-        </member>
-        <member name="T:Fadd.Commands.Tests.GenericTestObject`2">
-            <summary>
-            Test object using generic types
-            </summary>
-            <typeparam name="T">The first value to use the type of</typeparam>
-            <typeparam name="K">The second value to use the type of</typeparam>
-        </member>
-        <member name="M:Fadd.Commands.Tests.GenericTestObject`2.TestIt(System.String,System.Int32)">
-            <summary>
-            Tests it.
-            </summary>
-            <param name="myArg">String format</param>
-            <param name="value">A value to use in the string</param>
-            <returns>string.Format(myArg, value, typeof(T), typeof(K))</returns>
-        </member>
-        <member name="M:Fadd.Commands.Tests.GenericTestObject`2.TestIt(System.String,System.Boolean)">
-            <summary>
-            Tests it.
-            </summary>
-            <param name="myArg">String format</param>
-            <param name="value">A value to use in the string</param>
-            <returns>string.Format(myArg, value, typeof(T), typeof(K))</returns>
-        </member>
-        <member name="M:Fadd.Commands.Tests.GenericTestObject`2.RetrieveGenericDictionary``2(System.EventHandler{System.EventArgs})">
-            <summary>
-            Retrieves a dictionary using the two specified types with some random arguments in
-            </summary>
-        </member>
-        <member name="M:Fadd.Commands.Tests.GenericTestObject`2.DoThis">
-            <summary>
-            Does the this.
-            </summary>
-        </member>
-        <member name="P:Fadd.Commands.Tests.GenericTestObject`2.Id">
-            <summary>
-            Modify the id of the testobject
-            </summary>
-        </member>
-        <member name="T:Fadd.Commands.CommandHandler">
-            <summary>
-            Delegate used to handle commands.
-            </summary>
-            <param name="source"><see cref="T:Fadd.Commands.ICommandDispatcher"/> that the command was invoked in.</param>
-            <returns>true if command was handled.</returns>
-            <param name="args">command arguments.</param>
-        </member>
-        <member name="T:Fadd.Commands.CommandEventArgs">
-            <summary>
-            Event arguments for <see cref="T:Fadd.Commands.CommandHandler"/>.
-            </summary>
-        </member>
-        <member name="M:Fadd.Commands.CommandEventArgs.#ctor(Fadd.Commands.Command)">
-            <summary>
-            Initializes a new instance of the <see cref="T:Fadd.Commands.CommandEventArgs"/> class.
-            </summary>
-            <param name="command">command that was invoked.</param>
-        </member>
-        <member name="M:Fadd.Commands.CommandEventArgs.#ctor(Fadd.Commands.Command,System.Boolean)">
-            <summary>
-            Initializes a new instance of the <see cref="T:Fadd.Commands.CommandEventArgs"/> class.
-            </summary>
-            <param name="command">command that was invoked.</param>
-            <param name="isAsynchrounous">Command is being invoked asynchrounosly.</param>
-        </member>
-        <member name="P:Fadd.Commands.CommandEventArgs.Command">
-            <summary>
-            Command that was invoked.
-            </summary>
-        </member>
-        <member name="P:Fadd.Commands.CommandEventArgs.CancelPropagation">
-            <summary>
-            Abort the handled of this command.
-            </summary>
-            <remarks>
-            The event <see cref="E:Fadd.Commands.CommandManager.PropagationCancelled"/> can override this property.
-            </remarks>
-        </member>
-        <member name="P:Fadd.Commands.CommandEventArgs.IsAsynchronous">
-            <summary>
-            Command is being invoked asynchrounosly.
-            </summary>
-        </member>
-        <member name="T:Fadd.Parser.SimpleSQL.Tokens.NotEqual">
-            <summary>
-            Not equal condition
-            </summary>
-        </member>
-        <member name="M:Fadd.Parser.SimpleSQL.Tokens.NotEqual.ToString">
-            <summary>
-            Returns SQL
-            </summary>
-            <returns>" &lt;&gt; "</returns>
-        </member>
-        <member name="P:Fadd.Parser.SimpleSQL.Tokens.NotEqual.TokenIdentifier">
-            <summary>
-            Used to determine the kind of this token
-            </summary>
-            <value></value>
-        </member>
-        <member name="T:Fadd.Parser.SimpleSQL.Tokens.MoreOrEqual">
-            <summary>
-            >=
-            </summary>
-        </member>
-        <member name="M:Fadd.Parser.SimpleSQL.Tokens.MoreOrEqual.ToString">
-            <summary>
-            Returns SQL
-            </summary>
-            <returns>" &gt;= "</returns>
-        </member>
-        <member name="P:Fadd.Parser.SimpleSQL.Tokens.MoreOrEqual.TokenIdentifier">
-            <summary>
-            Used to determine the kind of this token
-            </summary>
-            <value></value>
-        </member>
-        <member name="T:Fadd.Parser.SimpleSQL.ParseTreeTokens.PropertyToken">
-            <summary>
-            Parsing a property
-            </summary>
-        </member>
-        <member name="M:Fadd.Parser.SimpleSQL.ParseTreeTokens.PropertyToken.Match(Fadd.Parser.Tokenizer,Fadd.Parser.ParseTree)">
-            <summary>
-            Check if the current position is the start of this token
-            </summary>
-            <returns>true if our token is the next one.</returns>
-        </member>
-        <member name="M:Fadd.Parser.SimpleSQL.ParseTreeTokens.PropertyToken.Parse(Fadd.Parser.Tokenizer,Fadd.Parser.ParseTree)">
-            <summary>
-            Parses the data in the specified <see cref="T:Fadd.Parser.Tokenizer"/>.
-            </summary>
-            <param name="tokenizer">The <see cref="T:Fadd.Parser.Tokenizer"/> containing the data to parse.</param>
-            <param name="tree"><see cref="T:Fadd.Parser.ParseTree"/> that is being built..</param>
-            <returns>true if more tokens can be parsed on the current leaf; false if we should continue to next leaf (parse no more children).</returns>
-        </member>
-        <member name="T:Fadd.Parser.SimpleSQL.SqlTokenIds">
-            <summary>
-            All tokens used during parsing
-            </summary>
-        </member>
-        <member name="F:Fadd.Parser.SimpleSQL.SqlTokenIds.And">
-            <summary>
-            AND
-            </summary>
-        </member>
-        <member name="F:Fadd.Parser.SimpleSQL.SqlTokenIds.Or">
-            <summary>
-            OR
-            </summary>
-        </member>
-        <member name="F:Fadd.Parser.SimpleSQL.SqlTokenIds.In">
-            <summary>
-            IN ( XXX )
-            </summary>
-        </member>
-        <member name="F:Fadd.Parser.SimpleSQL.SqlTokenIds.StartNesting">
-            <summary>
-            (
-            </summary>
-        </member>
-        <member name="F:Fadd.Parser.SimpleSQL.SqlTokenIds.EndNesting">
-            <summary>
-            )
-            </summary>
-        </member>
-        <member name="T:Fadd.Parser.ParseTree">
-            <summary>
-            A generated tree with all tokens from the text
-            </summary>
-        </member>
-        <member name="M:Fadd.Parser.ParseTree.#ctor">
-            <summary>
-            Initializes a new instance of the <see cref="T:Fadd.Parser.ParseTree"/> class.
-            </summary>
-        </member>
-        <member name="M:Fadd.Parser.ParseTree.#ctor(System.Int32)">
-            <summary>
-            Initializes a new instance of the <see cref="T:Fadd.Parser.ParseTree"/> class.
-            </summary>
-            <param name="trailLength">Number of items to keep in the <see cref="P:Fadd.Parser.ParseTree.Trail"/>.</param>
-        </member>
-        <member name="M:Fadd.Parser.ParseTree.Add(Fadd.Parser.Token)">
-            <summary>
-            Add a new token to the tree.
-            </summary>
-            <param name="token"></param>
-        </member>
-        <member name="M:Fadd.Parser.ParseTree.AddChild(Fadd.Parser.Token)">
-            <summary>
-            Adds a child node.
-            </summary>
-            <param name="token">Token to be added as a child.</param>
-            <remarks>this method will also set the token as <see cref="P:Fadd.Parser.ParseTree.Current"/>.</remarks>
-            todo: remove this one and fix haml
-        </member>
-        <member name="M:Fadd.Parser.ParseTree.GetEnumerator">
-            <summary>
-            Returns an enumerator that iterates through the collection.
-            </summary>
-            <returns>
-            A <see cref="T:System.Collections.Generic.IEnumerator`1" /> that can be used to iterate through the collection.
-            </returns>
-            <filterpriority>1</filterpriority>
-        </member>
-        <member name="M:Fadd.Parser.ParseTree.System#Collections#IEnumerable#GetEnumerator">
-            <summary>
-            Returns an enumerator that iterates through a collection.
-            </summary>
-            <returns>
-            An <see cref="T:System.Collections.IEnumerator" /> object that can be used to iterate through the collection.
-            </returns>
-            <filterpriority>2</filterpriority>
-        </member>
-        <member name="M:Fadd.Parser.ParseTree.IntoNode">
-            <summary>
-            Next item is a child to the current node.
-            </summary>
-        </member>
-        <member name="M:Fadd.Parser.ParseTree.OutOfNode">
-            <summary>
-            Go out of one level of nesting.
-            </summary>
-        </member>
-        <member name="M:Fadd.Parser.ParseTree.Reset">
-            <summary>
-            Back to root node.
-            </summary>
-        </member>
-        <member name="M:Fadd.Parser.ParseTree.ToString">
-            <summary>
-            Displays parse tree as a tree.
-            </summary>
-            <returns></returns>
-        </member>
-        <member name="P:Fadd.Parser.ParseTree.Current">
-            <summary>
-            Current node
-            </summary>
-        </member>
-        <member name="P:Fadd.Parser.ParseTree.Item(System.Int32)">
-            <summary>
-            Get one of the children
-            </summary>
-            <param name="index"></param>
-            <returns></returns>
-        </member>
-        <member name="P:Fadd.Parser.ParseTree.Count">
-            <summary>
-            Number of root items.
-            </summary>
-        </member>
-        <member name="P:Fadd.Parser.ParseTree.LastInserted">
-            <summary>
-            The node that was inserted last.
-            </summary>
-        </member>
-        <member name="P:Fadd.Parser.ParseTree.Trail">
-            <summary>
-            A trail with the <see cref="P:Fadd.Parser.ParseTree.TrailLength"/> number of previously added nodes, independent of the tree/depth.
-            </summary>
-        </member>
-        <member name="P:Fadd.Parser.ParseTree.TrailLength">
-            <summary>
-            Number of items to keep in the trail.
-            </summary>
-            <remarks>
-            Specified in the constructor, default value is 3.
-            </remarks>
-        </member>
-        <member name="P:Fadd.Parser.ParseTree.Root">
-            <summary>
-            Root in the tree.
-            </summary>
-        </member>
-        <member name="T:Fadd.Parser.Evaluator.Tokens.Or">
-            <summary>
-            OR condition ("||" in C#)
-            </summary>
-        </member>
-        <member name="M:Fadd.Parser.Evaluator.Tokens.Or.ToString">
-            <summary>
-            OR condition as string
-            </summary>
-            <returns>" || "</returns>
-        </member>
-        <member name="P:Fadd.Parser.Evaluator.Tokens.Or.TokenIdentifier">
-            <summary>
-            Used to determine the kind of this token
-            </summary>
-            <value></value>
-        </member>
-        <member name="T:Fadd.CurrentCulture">
-            <summary>
-            Class to provide transparent retrieval of LCID for silverlight and normal .Net projects
-            </summary>
-        </member>
-        <member name="P:Fadd.CurrentCulture.LCID">
-            <summary>
-            Gets the LCID for the current thread
-            </summary>
-        </member>
-        <member name="T:Fadd.Components.MissingParametersException">
-            <summary>
-            Thrown when we cant find all parameters for a component.
-            </summary>
-        </member>
-        <member name="M:Fadd.Components.MissingParametersException.#ctor(System.Type,System.Collections.Generic.Dictionary{System.String,System.Object})">
-            <summary>
-            Initializes a new instance of the <see cref="T:Fadd.Components.MissingParametersException"/> class.
-            </summary>
-            <param name="type">Type that we are missing parameters for.</param>
-            <param name="parameters">Parameters that have been specified.</param>
-        </member>
-        <member name="M:Fadd.Components.MissingParametersException.#ctor(System.Type,System.Collections.Generic.Dictionary{System.String,System.Object},System.Collections.Generic.Dictionary{System.Reflection.ConstructorInfo,System.Reflection.ParameterInfo})">
-            <summary>
-            Initializes a new instance of the <see cref="T:Fadd.Components.MissingParametersException"/> class.
-            </summary>
-            <param name="type">Type that we are missing parameters for.</param>
-            <param name="missingParameters">The parameters missing for specified constructors</param>
-            <param name="suppliedParameters">Parameters supplied through configuration</param>
-        </member>
-        <member name="P:Fadd.Components.MissingParametersException.InterfaceType">
-            <summary>
-            Type that we are missing parameters for.
-            </summary>
-        </member>
-        <member name="P:Fadd.Components.MissingParametersException.SuppliedParameters">
-            <summary>
-            Paramaters that have been specified.
-            </summary>
-        </member>
-        <member name="T:Fadd.Validation.ValidateDigitsAttribute">
-            <summary>
-            Makes sure that only digits have been entered.
-            </summary>
-            <para>
-            Language file items:
-            <list type="table">
-                <listheader>
-                    <term>ItemName</term>
-                    <description>Language text</description>
-                </listheader>
-                <item>
-                    <term>Digits</term>
-                    <description>'{0}' may only contain digits.</description>
-                </item>
-                <item>
-                    <term>DigitsExtra</term>
-                    <description>'{0}' may only contain digits and "{1}".</description>
-                </item>
-            </list>
-            </para>
-        </member>
-        <member name="F:Fadd.Validation.ValidateDigitsAttribute.Name">
-            <summary>
-            Name used in language files.
-            </summary>
-        </member>
-        <member name="M:Fadd.Validation.ValidateDigitsAttribute.#ctor">
-            <summary>
-            Initializes a new instance of the <see cref="T:Fadd.Validation.ValidateAttribute"/> class.
-            </summary>
-        </member>
-        <member name="M:Fadd.Validation.ValidateDigitsAttribute.#ctor(System.String)">
-            <summary>
-            Initializes a new instance of the <see cref="T:Fadd.Validation.ValidateAttribute"/> class.
-            </summary>
-            <param name="extraChars">extra characters that are valid.</param>
-        </member>
-        <member name="M:Fadd.Validation.ValidateDigitsAttribute.Validate(System.Object,System.Object)">
-            <summary>
-            Validate value
-            </summary>
-            <param name="context">Can be used to send a context object to the validation class. Useful if you provide your own validation classes which need to get information from your application. <seealso cref="T:Fadd.Validation.BeforeValidationEventArgs"/></param>
-            <param name="value">value to validate</param>
-            <returns>
-            true if value passed the validation; otherwise false.
-            </returns>
-        </member>
-        <member name="M:Fadd.Validation.ValidateDigitsAttribute.Format(System.String,Fadd.Globalization.ILanguageNode)">
-            <summary>
-            Localize error if validation failed.
-            </summary>
-            <param name="fieldName">Localized field name.</param>
-            <param name="validationLanguage">Language node with all validation translations.</param>
-            <returns>A localized error message if the validation failed; otherwise null.</returns>
-            <example>
-            <code>
-            attribute.Localize("FirstName", "'{0}' is required");
-            // will return "'{0}' is required" if the validation failed, else null.
-            </code>
-            </example>
-        </member>
-        <member name="M:Fadd.Validation.ValidateDigitsAttribute.SupportsType(System.Type)">
-            <summary>
-            Determines if the validation class support the specified type.
-            </summary>
-            <param name="type">Property/Value type.</param>
-            <returns>true if the type is supported.</returns>
-        </member>
-        <member name="T:Fadd.ItemEventArgs`1">
-            <summary>
-            General purpose arguments class for events containing only one item.
-            </summary>
-            <typeparam name="T">Type of item</typeparam>
-        </member>
-        <member name="M:Fadd.ItemEventArgs`1.#ctor(`0)">
-            <summary>
-            Initializes a new instance of the <see cref="T:Fadd.ItemEventArgs`1"/> class.
-            </summary>
-            <param name="item">The item.</param>
-        </member>
-        <member name="P:Fadd.ItemEventArgs`1.Item">
-            <summary>
-            Gets or sets the item.
-            </summary>
-            <value>The item.</value>
-        </member>
-        <member name="T:Fadd.Components.Test.Mixed">
-            <summary>
-            Tests both cascaded creation (since extensionmgr needs to create usermgr) and extra parameters.
-            </summary>
-        </member>
-        <member name="T:Fadd.Commands.ObjectProxyTypeNameGenerator">
-            <summary>
-            Class to generate readable names from arbitrary types
-            </summary>
-        </member>
-        <member name="M:Fadd.Commands.ObjectProxyTypeNameGenerator.StripGenerics(System.String,System.Int32)">
-            <summary>
-            Removes any `X from generic type names, ie Dictionary`2.
-            If the name lacks any `X entry ie Int32 it will simply be left untouched
-            </summary>
-            <param name="name">The name to strip from generic parameter count</param>
-            <param name="arguments">Number of arguments held</param>
-        </member>
-        <member name="M:Fadd.Commands.ObjectProxyTypeNameGenerator.GetName(System.Type)">
-            <summary>
-            Retrieves the name of the class, ie for <see cref="T:System.Collections.Generic.Dictionary`2"/> =&gt; Dictionary
-            </summary>
-            <param name="type">The type to generate a name for</param>
-        </member>
-        <member name="M:Fadd.Commands.ObjectProxyTypeNameGenerator.GetGenericName(System.Type)">
-            <summary>
-            <![CDATA[
-            Retrieves name of class including any generic types, ie Dictionary<int, string>
-            ]]>
-            </summary>
-            <param name="type">The type to generate a name for</param>
-        </member>
-        <member name="M:Fadd.Commands.ObjectProxyTypeNameGenerator.GetTypedName(System.Type)">
-            <summary>
-            Retrieves a name of the type with any generic type arguments joined with name.
-            </summary>
-            <param name="type">The type to generate a name for</param>
-            <example>
-            <![CDATA[
-            Dictionary<int, string> => DictionaryInt32String.
-            Useful for naming ie arbitrary methods when building objects using reflection.
-            ]]>
-            </example>
-        </member>
-        <member name="M:Fadd.Commands.ObjectProxyTypeNameGenerator.GetFullName(System.Type)">
-            <summary>
-            Retrieves the full name of a class, ie System.Collections.Generic.Dictionary
-            </summary>
-            <param name="type">The type to return the full name for</param>
-        </member>
-        <member name="T:Fadd.Commands.Net.Binding">
-            <summary>
-            A object binding. Used to copy properties from one object to another.
-            </summary>
-        </member>
-        <member name="M:Fadd.Commands.Net.Binding.Copy(System.Object,System.Object)">
-            <summary>
-            Copies the specified from.
-            </summary>
-            <param name="from">object to copy from.</param>
-            <param name="to">objec to copy to.</param>
-            <exception cref="T:System.ArgumentNullException">If either from or to are null</exception>
-            <exception cref="T:System.ArgumentException">If "to" is not assignabled from "from".</exception>
-        </member>
-        <member name="T:Fadd.Parser.SimpleSQL.Tokens.Where">
-            <summary>
-            WHERE clause
-            </summary>
-        </member>
-        <member name="M:Fadd.Parser.SimpleSQL.Tokens.Where.ToString">
-            <summary>
-            Returns SQL
-            </summary>
-            <returns>" WHERE "</returns>
-        </member>
-        <member name="P:Fadd.Parser.SimpleSQL.Tokens.Where.TokenIdentifier">
-            <summary>
-            Used to determine the kind of this token
-            </summary>
-        </member>
-        <member name="T:Fadd.Parser.SimpleSQL.ParseTreeTokens.LessThanToken">
-            <summary>
-            Parse <![CDATA[<]]>
-            </summary>
-        </member>
-        <member name="M:Fadd.Parser.SimpleSQL.ParseTreeTokens.LessThanToken.Match(Fadd.Parser.Tokenizer,Fadd.Parser.ParseTree)">
-            <summary>
-            Check if the current position is the start of this token
-            </summary>
-            <returns>true if our token is the next one.</returns>
-        </member>
-        <member name="M:Fadd.Parser.SimpleSQL.ParseTreeTokens.LessThanToken.Parse(Fadd.Parser.Tokenizer,Fadd.Parser.ParseTree)">
-            <summary>
-            Parses the data in the specified <see cref="T:Fadd.Parser.Tokenizer"/>.
-            </summary>
-            <param name="tokenizer">The <see cref="T:Fadd.Parser.Tokenizer"/> containing the data to parse.</param>
-            <param name="tree"><see cref="T:Fadd.Parser.ParseTree"/> that is being built..</param>
-            <returns>true if more tokens can be parsed on the current leaf; false if we should continue to next leaf (parse no more children).</returns>
-        </member>
-        <member name="T:Fadd.Parser.Evaluator.Tokens.MoreOrEqual">
-            <summary>
-            >=
-            </summary>
-        </member>
-        <member name="P:Fadd.Parser.Evaluator.Tokens.MoreOrEqual.TokenIdentifier">
-            <summary>
-            Used to determine the kind of this token
-            </summary>
-            <value></value>
-        </member>
-        <member name="T:Fadd.Parser.Evaluator.ParseTreeTokens.PropertyToken">
-            <summary>
-            Parsing a property
-            </summary>
-        </member>
-        <member name="M:Fadd.Parser.Evaluator.ParseTreeTokens.PropertyToken.Match(Fadd.Parser.Tokenizer,Fadd.Parser.ParseTree)">
-            <summary>
-            Check if the current position is the start of this token
-            </summary>
-            <returns>true if our token is the next one.</returns>
-        </member>
-        <member name="M:Fadd.Parser.Evaluator.ParseTreeTokens.PropertyToken.Parse(Fadd.Parser.Tokenizer,Fadd.Parser.ParseTree)">
-            <summary>
-            Parses the data in the specified <see cref="T:Fadd.Parser.Tokenizer"/>.
-            </summary>
-            <param name="tokenizer">The <see cref="T:Fadd.Parser.Tokenizer"/> containing the data to parse.</param>
-            <param name="tree"><see cref="T:Fadd.Parser.ParseTree"/> that is being built..</param>
-            <returns>true if more tokens can be parsed on the current leaf; false if we should continue to next leaf (parse no more children).</returns>
-        </member>
-        <member name="T:Fadd.Parser.Evaluator.ParseTreeTokens.MoreOrEqualToken">
-            <summary>
-            Parse >=
-            </summary>
-        </member>
-        <member name="M:Fadd.Parser.Evaluator.ParseTreeTokens.MoreOrEqualToken.Match(Fadd.Parser.Tokenizer,Fadd.Parser.ParseTree)">
-            <summary>
-            Check if the current position is the start of this token
-            </summary>
-            <returns>true if our token is the next one.</returns>
-        </member>
-        <member name="M:Fadd.Parser.Evaluator.ParseTreeTokens.MoreOrEqualToken.Parse(Fadd.Parser.Tokenizer,Fadd.Parser.ParseTree)">
-            <summary>
-            Parses the data in the specified <see cref="T:Fadd.Parser.Tokenizer"/>.
-            </summary>
-            <param name="tokenizer">The <see cref="T:Fadd.Parser.Tokenizer"/> containing the data to parse.</param>
-            <param name="tree"><see cref="T:Fadd.Parser.ParseTree"/> that is being built..</param>
-            <returns>true if more tokens can be parsed on the current leaf; false if we should continue to next leaf (parse no more children).</returns>
-        </member>
-        <member name="T:Fadd.Parser.Evaluator.ParseTreeTokens.AndToken">
-            <summary>
-            Parse 'AND'
-            </summary>
-        </member>
-        <member name="M:Fadd.Parser.Evaluator.ParseTreeTokens.AndToken.Match(Fadd.Parser.Tokenizer,Fadd.Parser.ParseTree)">
-            <summary>
-            Check if the current position is the start of this token
-            </summary>
-            <returns>true if our token is the next one.</returns>
-        </member>
-        <member name="M:Fadd.Parser.Evaluator.ParseTreeTokens.AndToken.Parse(Fadd.Parser.Tokenizer,Fadd.Parser.ParseTree)">
-            <summary>
-            Parses the data in the specified <see cref="T:Fadd.Parser.Tokenizer"/>.
-            </summary>
-            <param name="tokenizer">The <see cref="T:Fadd.Parser.Tokenizer"/> containing the data to parse.</param>
-            <param name="tree"><see cref="T:Fadd.Parser.ParseTree"/> that is being built..</param>
-            <returns>true if more tokens can be parsed on the current leaf; false if we should continue to next leaf (parse no more children).</returns>
-        </member>
-        <member name="T:Fadd.Globalization.DateTimeHelper">
-            <summary>
-            Used to parse and format date/times using the current language.
-            </summary>
-            todo: Copy latest documentation from IDateTimeHelper.
-        </member>
-        <member name="M:Fadd.Globalization.DateTimeHelper.Add(System.Int32,Fadd.Globalization.IDateTimeHelper)">
-            <summary>
-            Add a parser.
-            </summary>
-            <param name="lcid"></param>
-            <param name="parser"></param>
-            <returns></returns>
-        </member>
-        <member name="M:Fadd.Globalization.DateTimeHelper.AddDefaultParsers">
-            <summary>
-            Add default language parsers.
-            </summary>
-        </member>
-        <member name="M:Fadd.Globalization.DateTimeHelper.ParseDateTime(System.String)">
-            <summary>
-            Will try to parse the date/time using the local parser.
-            Will also try the default DateTime.Parse method if date is in an unknown format.
-            </summary>
-            <param name="value">date/time string</param>
-            <returns>A <see cref="T:System.DateTime"/></returns>
-            <exception cref="T:System.FormatException">If the date/time format is invalid.</exception>
-            <exception cref="T:System.ArgumentOutOfRangeException">If month/day/hour/minute/second are not within their ranges.</exception>
-        </member>
-        <member name="M:Fadd.Globalization.DateTimeHelper.ParseDateTime(System.String,System.String)">
-            <summary>
-            Will try to parse the date/time using the local parser.
-            Will also try the default DateTime.Parse method if date is in an unknown format.
-            </summary>
-            <param name="date">date string (may be null/empty).</param>
-            <param name="time">time string (may be null/empty).</param>
-            <returns>A <see cref="T:System.DateTime"/></returns>
-            <exception cref="T:System.FormatException">If the date/time format is invalid.</exception>
-            <exception cref="T:System.ArgumentOutOfRangeException">If month/day/hour/minute/second are not within their ranges.</exception>
-        </member>
-        <member name="M:Fadd.Globalization.DateTimeHelper.ParseDate(System.String)">
-            <summary>
-            Tries to parse a date string.
-            </summary>
-            <param name="value">Can contain a complete date or parts of it (which parts depends on the country).</param>
-            <returns>A <see cref="T:System.DateTime"/> containing the date (time is 0) if parsed successfully; otherwise <see cref="F:System.DateTime.MinValue"/>.</returns>
-        </member>
-        <member name="M:Fadd.Globalization.DateTimeHelper.ParseDate(System.String,System.Int32[],System.Int32)">
-            <summary>
-            Tries to parse a date string.
-            </summary>
-            <param name="value">Can contain a complete date or parts of it (which parts depends on the country).</param>
-            <param name="values">array that parsed values are written to.</param>
-            <param name="offset">where in array to start write values</param>
-            <returns>true if parsed successfully; otherwise false</returns>
-        </member>
-        <member name="M:Fadd.Globalization.DateTimeHelper.ParseTime(System.String)">
-            <summary>
-            Tries to parse a time string.
-            </summary>
-            <param name="value">Can contain a complete time or parts of it (which parts depends on the country).</param>
-            <returns>A <see cref="T:System.DateTime"/> containing the time (date is 0) if parsed successfully; otherwise <see cref="F:System.DateTime.MinValue"/>.</returns>
-        </member>
-        <member name="M:Fadd.Globalization.DateTimeHelper.ParseTime(System.String,System.Int32[],System.Int32)">
-            <summary>
-            Tries to parse a time string.
-            </summary>
-            <param name="value">Can contain a complete time or parts of it (which parts depends on the country).</param>
-            <param name="values">array that will be filled. Must contain three slots.</param>
-            <param name="offset">Where in the array to start write values</param>
-            <returns>true if parsed successfully; otherwise false.</returns>
-        </member>
-        <member name="M:Fadd.Globalization.DateTimeHelper.ValidateDate(System.Int32,System.Int32,System.Int32,System.Boolean)">
-            <summary>
-            Validate a date.
-            </summary>
-            <param name="year">year value</param>
-            <param name="month">month value</param>
-            <param name="day">day value</param>
-            <param name="throwException">true if exceptions should be thrown on incorrect values.</param>
-            <returns>true if specified values are a correct date; otherwise false.</returns>
-        </member>
-        <member name="M:Fadd.Globalization.DateTimeHelper.ValidateTime(System.Int32,System.Int32,System.Int32,System.Boolean)">
-            <summary>
-            Validate
-            </summary>
-            <param name="hour">hour</param>
-            <param name="minute">minute</param>
-            <param name="second">second</param>
-            <param name="throwException">true if exceptions should be thrown on incorrect values.</param>
-            <returns>true if specified values are a correct date; otherwise false.</returns>
-        </member>
-        <member name="M:Fadd.Globalization.DateTimeHelper.FormatDate(System.DateTime)">
-            <summary>
-            Format a date as a string.
-            </summary>
-            <param name="dateTime">A date/time</param>
-            <returns>Examples: "Yesterday", "On monday"</returns>
-        </member>
-        <member name="M:Fadd.Globalization.DateTimeHelper.FormatDateTime(System.DateTime)">
-            <summary>
-            Format a date/time as a string.
-            </summary>
-            <param name="dateTime">A date/time</param>
-            <returns>Examples: "Yesterday at 12:20pm", "On monday at 11:38am"</returns>
-        </member>
-        <member name="M:Fadd.Globalization.DateTimeHelper.GetDuration(System.DateTime,System.DateTime,Fadd.Globalization.DurationDetail,System.Int32)">
-            <summary>
-            Get duration as a human friendly string.
-            </summary>
-            <param name="from">Start time of duration</param>
-            <param name="to">End time of duration</param>
-            <param name="durationDetail">The detail in which to display the duration</param>
-            <param name="measures">Number of time units to display</param>
-            <returns>
-            A string like: 1 month, 2 weeks, and 3 days.
-            </returns>
-        </member>
-        <member name="M:Fadd.Globalization.DateTimeHelper.GetDuration(System.DateTime,System.DateTime)">
-            <summary>
-            Get duration as a human friendly string. Displays all time unit durations.
-            </summary>
-            <param name="from">Start time of duration</param>
-            <param name="to">End time of duration</param>
-        </member>
-        <member name="M:Fadd.Globalization.DateTimeHelper.GetDuration(System.TimeSpan,Fadd.Globalization.DurationDetail,System.Int32)">
-            <summary>
-            Get duration as a human friendly string.
-            </summary>
-            <param name="span">The timespan for which to output the duration</param>
-            <param name="durationDetail">The detail in which to display the duration</param>
-            /// <param name="measures">Number of time measures to display</param>
-            <returns>
-            A string like: 1 month, 2 weeks, and 3 days.
-            </returns>
-            <remarks><see cref="F:Fadd.Globalization.DurationDetail.Months"/> cannot be used when using this method since counting of months
-            requires both to and from datetime information, in such a case user <see cref="M:Fadd.Globalization.DateTimeHelper.GetDuration(System.DateTime,System.DateTime,Fadd.Globalization.DurationDetail,System.Int32)"/></remarks>
-        </member>
-        <member name="M:Fadd.Globalization.DateTimeHelper.GetDuration(System.TimeSpan)">
-            <summary>
-            Get duration as a human friendly string. Displays all time unit durations.
-            </summary>
-            <param name="span">The timespan for which to output the duration</param>
-        </member>
-        <member name="T:Fadd.Data.TransactionEventArgs">
-            <summary>
-            Event arguments for transaction events.
-            </summary>
-        </member>
-        <member name="M:Fadd.Data.TransactionEventArgs.#ctor(Fadd.Data.ITransaction,System.Data.IDbConnection)">
-            <summary>
-            Initializes a new instance of the <see cref="T:Fadd.Data.TransactionEventArgs"/> class.
-            </summary>
-            <param name="transaction">Transaction.</param>
-            <param name="connection">The connection.</param>
-        </member>
-        <member name="P:Fadd.Data.TransactionEventArgs.Transaction">
-            <summary>
-            Transaction that the event is for.
-            </summary>
-        </member>
-        <member name="P:Fadd.Data.TransactionEventArgs.Connection">
-            <summary>
-            Connection that the transaction is being invoked in.
-            </summary>
-        </member>
-        <member name="T:Fadd.Data.DataLayer">
-            <summary>
-            Main class in the data access layer.
-            </summary>
-        </member>
-        <member name="M:Fadd.Data.DataLayer.#ctor(Fadd.Data.IConnectionHelper)">
-            <summary>
-            Initializes a new instance of the <see cref="T:Fadd.Data.DataLayer"/> class.
-            </summary>
-            <param name="connectionHelper">The connection helper.</param>
-        </member>
-        <member name="M:Fadd.Data.DataLayer.CreateConnection">
-            <summary>
-            Creates a connection, we use this method instead of the one in
-            the connection helper to be able to use transactions (with a single connection).
-            </summary>
-            <returns>A database connection.</returns>
-        </member>
-        <member name="M:Fadd.Data.DataLayer.CreateCommand(System.Data.IDbConnection)">
-            <summary>
-            Create a command.
-            </summary>
-            <returns></returns>
-        </member>
-        <member name="M:Fadd.Data.DataLayer.CreateTransaction(System.Data.IsolationLevel)">
-            <summary>
-            Creates a new transaction.
-            </summary>
-            <param name="level">On of the <see cref="T:System.Data.IsolationLevel"/>s.</param>
-            <returns>An object representing the new transaction.</returns>
-            <remarks>
-            Once the transaction has completed, you must explicitly commit or roll back the transaction by using the Commit or Rollback methods.
-            </remarks>
-        </member>
-        <member name="M:Fadd.Data.DataLayer.CreateTransaction">
-            <summary>
-            Creates a new transaction.
-            </summary>
-            <returns>An object representing the new transaction.</returns>
-            <remarks>
-            Once the transaction has completed, you must explicitly commit or roll back the transaction by using the Commit or Rollback methods.
-            </remarks>
-        </member>
-        <member name="T:Fadd.Validation.ValidationError">
-            <summary>
-            An validation error.
-            </summary>
-        </member>
-        <member name="M:Fadd.Validation.ValidationError.#ctor(System.String,Fadd.Validation.ValidateAttribute)">
-            <summary>
-
-            </summary>
-            <param name="name">Property/Argument that validation failed for.</param>
-            <param name="attribute">Kind of validation that failed.</param>
-        </member>
-        <member name="P:Fadd.Validation.ValidationError.Name">
-            <summary>
-            Property/Argument that validation failed for
-            </summary>
-        </member>
-        <member name="P:Fadd.Validation.ValidationError.Attribute">
-            <summary>
-            Kind of validation that failed
-            </summary>
-        </member>
-        <member name="T:Fadd.Logging.ILogFormatter">
-            <summary>
-            Used to format log entries.
-            </summary>
-        </member>
-        <member name="M:Fadd.Logging.ILogFormatter.Format(Fadd.Logging.LogLevel,System.String,System.Exception,System.String[])">
-            <summary>
-            Format a long message
-            </summary>
-            <param name="logLevel">Importance of the current message.</param>
-            <param name="message">Message being written</param>
-            <param name="exception">Exception, or null</param>
-            <param name="methodNames">Method names from the call stack.</param>
-            <returns>Formatted log entry.</returns>
-        </member>
-        <member name="T:Fadd.Commands.PropagationHandler">
-            <summary>
-            Delegate used to determine if the command propagation can be cancelled.
-            </summary>
-            <param name="source">Distlight that the command was going through.</param>
-            <param name="args">Event information.</param>
-            <returns>true of command can be cancelled.</returns>
-            <seealso cref="P:Fadd.Commands.CommandEventArgs.CancelPropagation"/>
-        </member>
-        <member name="T:Fadd.Commands.PropagationEventArgs">
-            <summary>
-            Event arguments for <see cref="T:Fadd.Commands.PropagationHandler"/>.
-            </summary>
-        </member>
-        <member name="M:Fadd.Commands.PropagationEventArgs.#ctor(Fadd.Commands.Command,Fadd.Commands.CommandHandler)">
-            <summary>
-            Initializes a new instance of the <see cref="T:Fadd.Commands.PropagationEventArgs"/> class.
-            </summary>
-            <param name="command">Command that was cancelled.</param>
-            <param name="handler">Handler that cancelled the propagation</param>
-        </member>
-        <member name="P:Fadd.Commands.PropagationEventArgs.Command">
-            <summary>
-            Command that was cancelled by a handler
-            </summary>
-        </member>
-        <member name="P:Fadd.Commands.PropagationEventArgs.Handler">
-            <summary>
-            Handler that which to cancel the command.
-            </summary>
-        </member>
-        <member name="T:Fadd.Commands.Net.TestCommand">
-            <summary>
-            Used to test inner classes.
-            </summary>
-        </member>
-        <member name="M:Fadd.Commands.Net.TestCommand.CopyReply(Fadd.Commands.Command)">
-            <summary>
-            Copy all stuff that have been modified by the command handler.
-            </summary>
-            <param name="from">Command to copy reply from.</param>
-        </member>
-        <member name="T:Fadd.Commands.Net.BinaryChannel">
-            <summary>
-            Transports commands in binary format.
-            </summary>
-        </member>
-        <member name="F:Fadd.Commands.Net.BinaryChannel.ObjectReceived">
-            <summary>
-            Invoked when we have recieved a packet from the remote end.
-            </summary>
-        </member>
-        <member name="M:Fadd.Commands.Net.BinaryChannel.#ctor(System.Net.Sockets.Socket)">
-            <summary>
-            Initializes a new instance of the <see cref="T:Fadd.Commands.Net.BinaryChannel"/> class.
-            </summary>
-            <param name="socket">The socket.</param>
-        </member>
-        <member name="M:Fadd.Commands.Net.BinaryChannel.#ctor">
-            <summary>
-            Initializes a new instance of the <see cref="T:Fadd.Commands.Net.BinaryChannel"/> class.
-            </summary>
-        </member>
-        <member name="M:Fadd.Commands.Net.BinaryChannel.Finalize">
-            <summary>
-            Releases unmanaged resources and performs other cleanup operations before the
-            <see cref="T:Fadd.Commands.Net.BinaryChannel"/> is reclaimed by garbage collection.
-            </summary>
-        </member>
-        <member name="M:Fadd.Commands.Net.BinaryChannel.Send(System.Object)">
-            <summary>
-            Sends the specified value.
-            </summary>
-            <param name="value">object to serialize and send.</param>
-        </member>
-        <member name="M:Fadd.Commands.Net.BinaryChannel.Send(System.Byte[])">
-            <summary>
-             Send a packet to the client.
-            </summary>
-            <param name="bytes"></param>
-        </member>
-        <member name="M:Fadd.Commands.Net.BinaryChannel.ProcessInBuffer(System.Byte[],System.Int32,System.Int32)">
-            <summary>
-            Goes through all incoming bytes and creates a packet.
-            One or more calls might be required to get a complete packet.
-            </summary>
-            <param name="inbuffer">buffer to process</param>
-            <param name="index">where to start processing</param>
-            <param name="count">total number of bytes in buffer.</param>
-            <returns>number of bytes that are handled</returns>
-        </member>
-        <member name="M:Fadd.Commands.Net.BinaryChannel.OnBufferReceived(System.Byte[])">
-            <summary>
-            Called when a object buffer have been received completely.
-            </summary>
-            <param name="buffer">The buffer.</param>
-        </member>
-        <member name="M:Fadd.Commands.Net.BinaryChannel.Close">
-            <summary>
-            Closes this instance.
-            </summary>
-        </member>
-        <member name="M:Fadd.Commands.Net.BinaryChannel.Open(System.Net.IPEndPoint)">
-            <summary>
-            Connect to an endpoint.
-            </summary>
-            <param name="endPoint">Where to connect</param>
-            <exception cref="T:System.Net.Sockets.SocketException">if connection fails.</exception>
-        </member>
-        <member name="M:Fadd.Commands.Net.BinaryChannel.Dispose">
-            <summary>
-            Performs application-defined tasks associated with freeing, releasing, or resetting unmanaged resources.
-            </summary>
-            <filterpriority>2</filterpriority>
-        </member>
-        <member name="P:Fadd.Commands.Net.BinaryChannel.ShouldReconnect">
-            <summary>
-            true if we should reconnect when getting disconnected.
-            </summary>
-        </member>
-        <member name="E:Fadd.Commands.Net.BinaryChannel.Disconnected">
-            <summary>
-            Invoked when channel is disconnected (except when <see cref="M:Fadd.Commands.Net.BinaryChannel.Close"/> are called).
-            </summary>
-        </member>
-        <member name="T:Fadd.Commands.Net.ObjectReceivedEventArgs">
-            <summary>
-            Event args for <see cref="T:Fadd.Commands.Net.ObjectReceivedHandler"/>
-            </summary>
-        </member>
-        <member name="M:Fadd.Commands.Net.ObjectReceivedEventArgs.#ctor(System.Object)">
-            <summary>
-            Initializes a new instance of the <see cref="T:Fadd.Commands.Net.ObjectReceivedEventArgs"/> class.
-            </summary>
-            <param name="value">object received from remote end.</param>
-        </member>
-        <member name="P:Fadd.Commands.Net.ObjectReceivedEventArgs.Object">
-            <summary>
-            Bytes received from remote end.
-            </summary>
-        </member>
-        <member name="T:Fadd.Commands.Net.ObjectReceivedHandler">
-            <summary>
-            Invoked when an object have been received from the remote end.
-            </summary>
-            <param name="source">Client that received the object.</param>
-            <param name="args">object received.</param>
-        </member>
-        <member name="T:Fadd.Parser.SimpleSQL.Tokens.In">
-            <summary>
-            A IN clause.
-            </summary>
-        </member>
-        <member name="M:Fadd.Parser.SimpleSQL.Tokens.In.ToString">
-            <summary>
-            Returns SQL
-            </summary>
-            <returns>" IN"</returns>
-        </member>
-        <member name="P:Fadd.Parser.SimpleSQL.Tokens.In.TokenIdentifier">
-            <summary>
-            Used to determine the kind of this token
-            </summary>
-        </member>
-        <member name="T:Fadd.Parser.SimpleSQL.Tokens.Context">
-            <summary>
-            We are getting into a sub context (nested conditions)
-            </summary>
-        </member>
-        <member name="M:Fadd.Parser.SimpleSQL.Tokens.Context.ToString">
-            <summary>
-            Returns SQL
-            </summary>
-            <returns>(</returns>
-        </member>
-        <member name="P:Fadd.Parser.SimpleSQL.Tokens.Context.TokenIdentifier">
-            <summary>
-            Used to determine the kind of this token
-            </summary>
-            <value></value>
-        </member>
-        <member name="T:Fadd.Parser.SimpleSQL.ParseTreeTokens.NotEqualToken">
-            <summary>
-            <![CDATA[
-            Parse <> or !=
-            ]]>
-            </summary>
-        </member>
-        <member name="M:Fadd.Parser.SimpleSQL.ParseTreeTokens.NotEqualToken.Match(Fadd.Parser.Tokenizer,Fadd.Parser.ParseTree)">
-            <summary>
-            Check if the current position is the start of this token
-            </summary>
-            <returns>true if our token is the next one.</returns>
-        </member>
-        <member name="M:Fadd.Parser.SimpleSQL.ParseTreeTokens.NotEqualToken.Parse(Fadd.Parser.Tokenizer,Fadd.Parser.ParseTree)">
-            <summary>
-            Parses the data in the specified <see cref="T:Fadd.Parser.Tokenizer"/>.
-            </summary>
-            <param name="tokenizer">The <see cref="T:Fadd.Parser.Tokenizer"/> containing the data to parse.</param>
-            <param name="tree"><see cref="T:Fadd.Parser.ParseTree"/> that is being built..</param>
-            <returns>true if more tokens can be parsed on the current leaf; false if we should continue to next leaf (parse no more children).</returns>
-        </member>
-        <member name="T:Fadd.Parser.Evaluator.Tokens.LessThan">
-            <summary>
-            <![CDATA[
-            <
-            ]]>
-            </summary>
-        </member>
-        <member name="M:Fadd.Parser.Evaluator.Tokens.LessThan.ToString">
-            <summary>
-            Less tan condition
-            </summary>
-            <returns>
-            <![CDATA[" < "]]>
-            </returns>
-        </member>
-        <member name="P:Fadd.Parser.Evaluator.Tokens.LessThan.TokenIdentifier">
-            <summary>
-            Used to determine the kind of this token
-            </summary>
-            <value></value>
-        </member>
-        <member name="T:Fadd.Parser.Evaluator.ParseTreeTokens.LessThanToken">
-            <summary>
-            Parse <![CDATA[<]]>
-            </summary>
-        </member>
-        <member name="M:Fadd.Parser.Evaluator.ParseTreeTokens.LessThanToken.Match(Fadd.Parser.Tokenizer,Fadd.Parser.ParseTree)">
-            <summary>
-            Check if the current position is the start of this token
-            </summary>
-            <returns>true if our token is the next one.</returns>
-        </member>
-        <member name="M:Fadd.Parser.Evaluator.ParseTreeTokens.LessThanToken.Parse(Fadd.Parser.Tokenizer,Fadd.Parser.ParseTree)">
-            <summary>
-            Parses the data in the specified <see cref="T:Fadd.Parser.Tokenizer"/>.
-            </summary>
-            <param name="tokenizer">The <see cref="T:Fadd.Parser.Tokenizer"/> containing the data to parse.</param>
-            <param name="tree"><see cref="T:Fadd.Parser.ParseTree"/> that is being built..</param>
-            <returns>true if more tokens can be parsed on the current leaf; false if we should continue to next leaf (parse no more children).</returns>
-        </member>
-        <member name="T:Fadd.Data.Mappings.XmlMappingReader">
-            <summary>
-            Reads a mapping definition from an XML reader.
-            </summary>
-        </member>
-        <member name="M:Fadd.Data.Mappings.XmlMappingReader.#ctor(System.Xml.XmlTextReader,System.Type)">
-            <summary>
-            Initializes a new instance of the <see cref="T:Fadd.Data.Mappings.XmlMappingReader"/> class.
-            </summary>
-            <param name="reader">Reader containing mapping XML.</param>
-            <param name="type">Type that the mapping is for.</param>
-        </member>
-        <member name="M:Fadd.Data.Mappings.XmlMappingReader.Read">
-            <summary>
-            Read mapping.
-            </summary>
-            <returns>Mapping if found</returns>
-            <exception cref="T:Fadd.Data.Mappings.MappingException">If mapping is incorrect (syntax).</exception>
-        </member>
-        <member name="M:Fadd.Data.Mappings.XmlMappingReader.ProcessPropertyAttribute">
-            <summary>
-            Go through property attributes
-            </summary>
-            <exception cref="T:Fadd.Data.Mappings.MappingException"><c>MappingException</c>.</exception>
-        </member>
-        <member name="M:Fadd.Data.Mappings.XmlMappingReader.ProcessPrimaryKeyAttribute">
-            <exception cref="T:Fadd.Data.Mappings.MappingException"><c>MappingException</c>.</exception>
-        </member>
-        <member name="M:Fadd.Data.Mappings.XmlMappingReader.ProcessClassAttribute">
-            <exception cref="T:Fadd.Data.Mappings.MappingException"><c>MappingException</c>.</exception>
-        </member>
-        <member name="T:Fadd.Data.Mappings.Mapping">
-            <summary>
-            Default mapping implementation
-            </summary>
-        </member>
-        <member name="M:Fadd.Data.Mappings.Mapping.#ctor(System.Type,System.String)">
-            <summary>
-            Initializes a new instance of the <see cref="T:Fadd.Data.Mappings.Mapping"/> class.
-            </summary>
-            <param name="type">Type that the mapping is for.</param>
-            <param name="tableName">Name of the database table.</param>
-        </member>
-        <member name="M:Fadd.Data.Mappings.Mapping.GetColumnName(System.String)">
-            <summary>
-            Get a column name from a property name.
-            </summary>
-            <param name="name"></param>
-            <returns></returns>
-        </member>
-        <member name="M:Fadd.Data.Mappings.Mapping.GetPrimaryKey">
-            <summary>
-            Gets current primary key.
-            </summary>
-            <returns>The primary key if exactly ONE is defined; otherwise null.</returns>
-        </member>
-        <member name="M:Fadd.Data.Mappings.Mapping.Add(System.String,System.String)">
-            <summary>
-            Add a property mapping
-            </summary>
-            <param name="propertyName">Class property</param>
-            <param name="columnName">Table column</param>
-        </member>
-        <member name="M:Fadd.Data.Mappings.Mapping.Add(System.String,System.String,System.Boolean,System.String)">
-            <summary>
-            Add a property mapping
-            </summary>
-            <param name="propertyName">Class property</param>
-            <param name="columnName">Table column</param>
-            <param name="isPrimaryKey">True if property is a primary key.</param>
-            <param name="generatorType">Type of generator used.</param>
-        </member>
-        <member name="P:Fadd.Data.Mappings.Mapping.TableName">
-            <summary>
-            Name of database table.
-            </summary>
-        </member>
-        <member name="P:Fadd.Data.Mappings.Mapping.Type">
-            <summary>
-            Type that the mapping is for.
-            </summary>
-        </member>
-        <member name="P:Fadd.Data.Mappings.Mapping.Properties">
-            <summary>
-            Gets all properties
-            </summary>
-        </member>
-        <member name="P:Fadd.Data.Mappings.Mapping.PrimaryKeys">
-            <summary>
-            Gets all primary keys
-            </summary>
-        </member>
-        <member name="T:Fadd.Components.ComponentTypeInfo">
-            <summary>
-            A found plugin and which of the requested types that it implements.
-            </summary>
-        </member>
-        <member name="M:Fadd.Components.ComponentTypeInfo.#ctor(System.String,System.Byte[],System.Type,System.Type)">
-            <summary>
-            Initializes a new instance of the <see cref="T:Fadd.Components.ComponentTypeInfo"/> class.
-            </summary>
-            <param name="assemblyLocation">assembly that the plugin resides in.</param>
-            <param name="publicKey">assemblies public key. should be used to decide the amount of access for the module.</param>
-            <param name="instanceType">Type to create</param>
-            <param name="interfaceType">Type used when fetching the component</param>
-            <exception cref="T:System.ArgumentNullException">types or assembly location is null.</exception>
-        </member>
-        <member name="M:Fadd.Components.ComponentTypeInfo.#ctor(System.String,System.Byte[],System.Type,System.Type,System.Boolean)">
-            <summary>
-            Initializes a new instance of the <see cref="T:Fadd.Components.ComponentTypeInfo"/> class.
-            </summary>
-            <param name="assemblyLocation">assembly that the plugin resides in.</param>
-            <param name="publicKey">assemblies public key. should be used to decide the amount of access for the module.</param>
-            <param name="instanceType">Type to create</param>
-            <param name="interfaceType">Type used when fetching the component</param>
-            <param name="isPrivate">Component is private</param>
-            <exception cref="T:System.ArgumentNullException">types or assembly location is null.</exception>
-        </member>
-        <member name="P:Fadd.Components.ComponentTypeInfo.PublicKey">
-            <summary>
-            Gets the assembly's public key (if signed).
-            </summary>
-        </member>
-        <member name="P:Fadd.Components.ComponentTypeInfo.Location">
-            <summary>
-            Gets location of DLL.
-            </summary>
-        </member>
-        <member name="P:Fadd.Components.ComponentTypeInfo.PublicKeyRaw">
-            <summary>
-            Gets assembly public key in byte format.
-            </summary>
-        </member>
-        <member name="P:Fadd.Components.ComponentTypeInfo.InterfaceType">
-            <summary>
-            Gets a the type used when accessing the component.
-            </summary>
-        </member>
-        <member name="P:Fadd.Components.ComponentTypeInfo.InstanceType">
-            <summary>
-            Gets the type to create
-            </summary>
-        </member>
-        <member name="P:Fadd.Components.ComponentTypeInfo.IsPrivate">
-            <summary>
-            Gets a value indicating whether the component is private.
-            </summary>
-            <value>
-            	<c>true</c> if the component is private; otherwise, <c>false</c>.
-            </value>
-        </member>
-        <member name="T:Fadd.Validation.ValidateContainsAttribute">
-            <summary>
-            Attribute to specify that a property might only contain the specified letters (does not fail if the string is null or empty)
-            </summary>
-        </member>
-        <member name="F:Fadd.Validation.ValidateContainsAttribute.Name">
-            <summary>
-            The language node item name for the attribute, should be in the form 'Parameter {0} has invalid characters, allowed characters are {1}'
-            </summary>
-        </member>
-        <member name="M:Fadd.Validation.ValidateContainsAttribute.#ctor(System.String)">
-            <summary>
-            Initializes a new instance of the <see cref="T:Fadd.Validation.ValidateContainsAttribute"/> class.
-            </summary>
-            <param name="allowedLetters">The allowed letters</param>
-        </member>
-        <member name="M:Fadd.Validation.ValidateContainsAttribute.Validate(System.Object,System.Object)">
-            <summary>
-            Validate value
-            </summary>
-            <param name="context">Can be used to send a context object to the validation class. Useful if you provide your own validation classes which need to get information from your application. <seealso cref="T:Fadd.Validation.BeforeValidationEventArgs"/></param>
-            <param name="value">value to validate</param>
-            <returns>
-            true if value passed the validation; otherwise false.
-            </returns>
-            <exception cref="T:System.NotSupportedException">If a value not of <see cref="T:System.String"/> type was supplied</exception>
-        </member>
-        <member name="M:Fadd.Validation.ValidateContainsAttribute.Format(System.String,Fadd.Globalization.ILanguageNode)">
-            <summary>
-            Localize error if validation failed.
-            </summary>
-            <param name="fieldName">Localized field name.</param>
-            <param name="validationLanguage">Language node with all validation translations.</param>
-        </member>
-        <member name="M:Fadd.Validation.ValidateContainsAttribute.SupportsType(System.Type)">
-            <summary>
-            Determines if the validation class support the specified type.
-            </summary>
-            <param name="type">Property/Value type.</param>
-            <returns>true if the type is a string</returns>
-        </member>
-        <member name="T:Fadd.Logging.ConsoleLogProvider">
-            <summary>
-            Temporary class to get logging during development.
-            </summary>
-        </member>
-        <member name="M:Fadd.Logging.ConsoleLogProvider.GetLogger(System.String)">
-            <summary>
-            Get a logger with the specified name.
-            </summary>
-            <param name="name"></param>
-            <returns></returns>
-        </member>
-        <member name="M:Fadd.Logging.ConsoleLogProvider.GetCurrentClassLogger">
-            <summary>
-            Get logger for current class.
-            </summary>
-            <returns></returns>
-        </member>
-        <member name="T:Fadd.Property">
-            <summary>
-            General purpose class to get/set properties by specifying their name as text.
-            </summary>
-            <example>
-            <code>
-            User user = new User();
-            Property.Set(user, "FirstName", "Jonas"); // same as user.FirstName = "Jonas";
-            Property.Set(user, "CreatedAt", "2008-12-30 14:00"); // the CreatedAt property is of type DateTime, the Property class automatically converts it from string.
-            Property.Set(user, "Age", "20"); // age is int, which means that it will automatically be converted.
-            </code>
-            </example>
-            todo: Add the ability to extend the object with own additions.
-        </member>
-        <member name="M:Fadd.Property.Set(System.Object,System.String,System.Object)">
-            <summary>
-            Assign a property value to the specified object.
-            </summary>
-            <param name="item">Object that has the property</param>
-            <param name="propertyName">Name of the property</param>
-            <param name="value">Value, this method will try to cast incorrect types (and even try to parse certain types).</param>
-            <exception cref="T:System.ArgumentException">If value is not correct (i.e. null when null is not accepted etc)</exception>
-            <exception cref="T:System.InvalidOperationException">If assigner object could not be generated.</exception>
-            <exception cref="T:System.InvalidCastException">If assigner object can't cast to the correct type.</exception>
-        </member>
-        <member name="M:Fadd.Property.Get(System.Object,System.String)">
-            <summary>
-            Get a property value from the specified object.
-            </summary>
-            <param name="item">Object that has the property</param>
-            <param name="propertyName">Name of the property</param>
-            <returns>property value</returns>
-            <exception cref="T:System.ArgumentException">If value is not correct (i.e. null when null is not accepted etc)</exception>
-            <exception cref="T:System.InvalidOperationException">If assigner object could not be generated.</exception>
-            <exception cref="T:System.InvalidCastException">If assigner object can't cast to the correct type.</exception>
-        </member>
-        <member name="T:Fadd.IPropertiesObject">
-            <summary>
-            Base object for property assigner.
-            </summary>
-        </member>
-        <member name="M:Fadd.IPropertiesObject.Set(System.Object,System.String,System.Object)">
-            <summary>
-
-            </summary>
-            <param name="item"></param>
-            <param name="propertyName"></param>
-            <param name="value"></param>
-        </member>
-        <member name="M:Fadd.IPropertiesObject.Get(System.Object,System.String)">
-            <summary>
-
-            </summary>
-            <param name="item"></param>
-            <param name="propertyName"></param>
-            <returns></returns>
-        </member>
-        <member name="T:Fadd.CanSetHandler">
-            <summary>
-            Used to determine
-            </summary>
-            <param name="instance"></param>
-            <param name="propertyName"></param>
-            <returns></returns>
-        </member>
-        <member name="T:Fadd.Parser.Evaluator.ParseTreeTokens.NotEqualToken">
-            <summary>
-            <![CDATA[
-            Parse <> or !=
-            ]]>
-            </summary>
-        </member>
-        <member name="M:Fadd.Parser.Evaluator.ParseTreeTokens.NotEqualToken.Match(Fadd.Parser.Tokenizer,Fadd.Parser.ParseTree)">
-            <summary>
-            Check if the current position is the start of this token
-            </summary>
-            <returns>true if our token is the next one.</returns>
-        </member>
-        <member name="M:Fadd.Parser.Evaluator.ParseTreeTokens.NotEqualToken.Parse(Fadd.Parser.Tokenizer,Fadd.Parser.ParseTree)">
-            <summary>
-            Parses the data in the specified <see cref="T:Fadd.Parser.Tokenizer"/>.
-            </summary>
-            <param name="tokenizer">The <see cref="T:Fadd.Parser.Tokenizer"/> containing the data to parse.</param>
-            <param name="tree"><see cref="T:Fadd.Parser.ParseTree"/> that is being built..</param>
-            <returns>true if more tokens can be parsed on the current leaf; false if we should continue to next leaf (parse no more children).</returns>
-        </member>
-        <member name="T:Fadd.Data.Mappings.MirrorLoader">
-            <summary>
-            Tables and Classes are identical.
-            </summary>
-            <remarks>
-            Since they are identical, we create a mapping which simply returns the
-            same values for the mapping.
-            </remarks>
-        </member>
-        <member name="M:Fadd.Data.Mappings.MirrorLoader.#ctor(System.Reflection.Assembly,System.String)">
-            <summary>
-            Initializes a new instance of the <see cref="T:Fadd.Data.Mappings.MirrorLoader"/> class.
-            </summary>
-            <param name="assembly">Assembly that will be scanned after mappings.</param>
-            <param name="generatorType">"sequence" or "autoincrement"</param>
-            <remarks>
-            Specifying "sequence" means that the system will look for generators/sequences called "[tablename]_id_seq".
-            </remarks>
-        </member>
-        <member name="M:Fadd.Data.Mappings.MirrorLoader.GetMapping(System.String)">
-            <summary>
-            Gets the mapping.
-            </summary>
-            <param name="className">Name of the class to get mapping for.</param>
-            <returns><see cref="T:Fadd.Data.Mappings.IMapping"/> if found; otherwise null.</returns>
-        </member>
-        <member name="M:Fadd.Data.Mappings.MirrorLoader.FindClass(System.String)">
-            <exception cref="T:System.InvalidOperationException">Multiple classes found.</exception>
-        </member>
-        <member name="M:Fadd.Data.Mappings.MirrorLoader.Add(System.Reflection.Assembly)">
-            <summary>
-            Add an assembly in which we can look for mappings.
-            </summary>
-            <param name="assembly">An assembly</param>
-        </member>
-        <member name="T:Fadd.Logging.NullLogger">
-            <summary>
-            Logger that doesnt log at all.
-            (Used in classes that got log member var but no logger.
-            the option would have been a lot of if statements).
-            </summary>
-        </member>
-        <member name="M:Fadd.Logging.NullLogger.Trace(System.String)">
-            <summary>
-            Very detailed log messages, potentially of a high frequency and volume
-            </summary>
-            <param name="message">message written to the log.</param>
-        </member>
-        <member name="M:Fadd.Logging.NullLogger.Trace(System.String,System.Exception)">
-            <summary>
-            Very detailed log messages, potentially of a high frequency and volume
-            </summary>
-            <param name="message">message written to the log.</param>
-            <param name="exception">an exception.</param>
-        </member>
-        <member name="M:Fadd.Logging.NullLogger.Debug(System.String)">
-            <summary>
-            Less detailed and/or less frequent debugging messages
-            </summary>
-            <param name="message">message written to the log.</param>
-        </member>
-        <member name="M:Fadd.Logging.NullLogger.Debug(System.String,System.Exception)">
-            <summary>
-            Less detailed and/or less frequent debugging messages
-            </summary>
-            <param name="message">message written to the log.</param>
-            <param name="exception">an exception.</param>
-        </member>
-        <member name="M:Fadd.Logging.NullLogger.Info(System.String)">
-            <summary>
-            Informational messages
-            </summary>
-            <param name="message">message written to the log.</param>
-        </member>
-        <member name="M:Fadd.Logging.NullLogger.Info(System.String,System.Exception)">
-            <summary>
-            Informational messages
-            </summary>
-            <param name="message">message written to the log.</param>
-            <param name="exception">an exception.</param>
-        </member>
-        <member name="M:Fadd.Logging.NullLogger.Warning(System.String)">
-            <summary>
-            Warnings which don't appear to the user of the application
-            </summary>
-            <param name="message">message written to the log.</param>
-        </member>
-        <member name="M:Fadd.Logging.NullLogger.Warning(System.String,System.Exception)">
-            <summary>
-            Warnings which don't appear to the user of the application
-            </summary>
-            <param name="message">message written to the log.</param>
-            <param name="exception">an exception.</param>
-        </member>
-        <member name="M:Fadd.Logging.NullLogger.Error(System.String)">
-            <summary>
-            Error messages
-            </summary>
-            <param name="message">message written to the log.</param>
-        </member>
-        <member name="M:Fadd.Logging.NullLogger.Error(System.String,System.Exception)">
-            <summary>
-            Error messages
-            </summary>
-            <param name="message">message written to the log.</param>
-            <param name="exception">an exception.</param>
-        </member>
-        <member name="M:Fadd.Logging.NullLogger.Fatal(System.String)">
-            <summary>
-            Fatal error messages. After a fatal error, the application usually terminates.
-            </summary>
-            <param name="message">message written to the log.</param>
-        </member>
-        <member name="M:Fadd.Logging.NullLogger.Fatal(System.String,System.Exception)">
-            <summary>
-            Fatal error messages. After a fatal error, the application usually terminates.
-            </summary>
-            <param name="message">message written to the log.</param>
-            <param name="exception">an exception.</param>
-        </member>
-        <member name="P:Fadd.Logging.NullLogger.LoggerConfiguration">
-            <summary>
-            Gets the configuration used for the logger
-            </summary>
-            <value></value>
-        </member>
-        <member name="T:Fadd.Commands.UnhandledExceptionDelegate">
-            <summary>
-            Delegate used when a unhandled exception have been caught.
-            </summary>
-        </member>
-        <member name="T:Fadd.Commands.UnhandledExceptionEventArgs">
-            <summary>
-            Arguments for <see cref="T:Fadd.Commands.UnhandledExceptionDelegate"/>
-            </summary>
-        </member>
-        <member name="M:Fadd.Commands.UnhandledExceptionEventArgs.#ctor(System.Exception)">
-            <summary>
-            Initializes a new instance of the <see cref="T:Fadd.Commands.UnhandledExceptionEventArgs"/> class.
-            </summary>
-            <param name="err">caught exception.</param>
-        </member>
-        <member name="P:Fadd.Commands.UnhandledExceptionEventArgs.Exception">
-            <summary>
-            Caught exception
-            </summary>
-        </member>
-        <member name="T:Fadd.Commands.Net.ObjectCopier">
-            <summary>
-            Copies get/set properties from one object to another.
-            </summary>
-        </member>
-        <member name="M:Fadd.Commands.Net.ObjectCopier.Finalize">
-            <summary>
-            Releases unmanaged resources and performs other cleanup operations before the
-            <see cref="T:Fadd.Commands.Net.ObjectCopier"/> is reclaimed by garbage collection.
-            </summary>
-        </member>
-        <member name="M:Fadd.Commands.Net.ObjectCopier.Dispose">
-            <summary>
-            Performs application-defined tasks associated with freeing, releasing, or resetting unmanaged resources.
-            </summary>
-            <filterpriority>2</filterpriority>
-        </member>
-        <member name="M:Fadd.Commands.Net.ObjectCopier.Copy(System.Object,System.Object)">
-            <summary>
-            Copies all get/set properties from one object to another.
-            </summary>
-            <param name="from">From.</param>
-            <param name="to">To.</param>
-        </member>
-        <member name="T:Fadd.Parser.SimpleSQL.Tokens.Star">
-            <summary>
-            Star *
-            </summary>
-        </member>
-        <member name="M:Fadd.Parser.SimpleSQL.Tokens.Star.ToString">
-            <summary>
-            SQL Star
-            </summary>
-            <returns>" * "</returns>
-        </member>
-        <member name="P:Fadd.Parser.SimpleSQL.Tokens.Star.TokenIdentifier">
-            <summary>
-            Used to determine the kind of this token
-            </summary>
-        </member>
-        <member name="T:Fadd.Parser.SimpleSQL.Tokens.Property">
-            <summary>
-            A property name
-            </summary>
-        </member>
-        <member name="M:Fadd.Parser.SimpleSQL.Tokens.Property.#ctor(System.String)">
-            <summary>
-            Initializes a new instance of the <see cref="T:Fadd.Parser.SimpleSQL.Tokens.Property"/> class.
-            </summary>
-            <param name="name">Name of property.</param>
-        </member>
-        <member name="M:Fadd.Parser.SimpleSQL.Tokens.Property.ToString">
-            <summary>
-            Returns SQL
-            </summary>
-            <returns>column name</returns>
-        </member>
-        <member name="P:Fadd.Parser.SimpleSQL.Tokens.Property.TokenIdentifier">
-            <summary>
-            Used to determine the kind of this token
-            </summary>
-            <value></value>
-        </member>
-        <member name="P:Fadd.Parser.SimpleSQL.Tokens.Property.Name">
-            <summary>
-            Name of property
-            </summary>
-        </member>
-        <member name="T:Fadd.Parser.SimpleSQL.Tokens.Or">
-            <summary>
-            OR condition ("||" in C#)
-            </summary>
-        </member>
-        <member name="M:Fadd.Parser.SimpleSQL.Tokens.Or.ToString">
-            <summary>
-            Returns SQL
-            </summary>
-            <returns>" OR "</returns>
-        </member>
-        <member name="P:Fadd.Parser.SimpleSQL.Tokens.Or.TokenIdentifier">
-            <summary>
-            Used to determine the kind of this token
-            </summary>
-            <value></value>
-        </member>
-        <member name="T:Fadd.Parser.SimpleSQL.ParseTreeTokens.StartContext">
-            <summary>
-            Parse (, which is start of one level nesting.
-            </summary>
-        </member>
-        <member name="M:Fadd.Parser.SimpleSQL.ParseTreeTokens.StartContext.Match(Fadd.Parser.Tokenizer,Fadd.Parser.ParseTree)">
-            <summary>
-            Check if the current position is the start of this token
-            </summary>
-            <returns>true if our token is the next one.</returns>
-        </member>
-        <member name="M:Fadd.Parser.SimpleSQL.ParseTreeTokens.StartContext.Parse(Fadd.Parser.Tokenizer,Fadd.Parser.ParseTree)">
-            <summary>
-            Parses the data in the specified <see cref="T:Fadd.Parser.Tokenizer"/>.
-            </summary>
-            <param name="tokenizer">The <see cref="T:Fadd.Parser.Tokenizer"/> containing the data to parse.</param>
-            <param name="tree"><see cref="T:Fadd.Parser.ParseTree"/> that is being built..</param>
-            <returns>true if more tokens can be parsed on the current leaf; false if we should continue to next leaf (parse no more children).</returns>
-        </member>
-        <member name="T:Fadd.Parser.SimpleSQL.ParseTreeTokens.EqualToken">
-            <summary>
-            Parse == or =
-            </summary>
-        </member>
-        <member name="M:Fadd.Parser.SimpleSQL.ParseTreeTokens.EqualToken.Match(Fadd.Parser.Tokenizer,Fadd.Parser.ParseTree)">
-            <summary>
-            Check if the current position is the start of this token
-            </summary>
-            <returns>true if our token is the next one.</returns>
-        </member>
-        <member name="M:Fadd.Parser.SimpleSQL.ParseTreeTokens.EqualToken.Parse(Fadd.Parser.Tokenizer,Fadd.Parser.ParseTree)">
-            <summary>
-            Parses the data in the specified <see cref="T:Fadd.Parser.Tokenizer"/>.
-            </summary>
-            <param name="tokenizer">The <see cref="T:Fadd.Parser.Tokenizer"/> containing the data to parse.</param>
-            <param name="tree"><see cref="T:Fadd.Parser.ParseTree"/> that is being built..</param>
-            <returns>true if more tokens can be parsed on the current leaf; false if we should continue to next leaf (parse no more children).</returns>
-        </member>
-        <member name="M:Fadd.Parser.SimpleSQL.ParseTreeTokens.ParameterValueToken.Match(Fadd.Parser.Tokenizer,Fadd.Parser.ParseTree)">
-            <summary>
-            Check if the current position is the start of this token
-            </summary>
-            <returns>true if our token is the next one.</returns>
-        </member>
-        <member name="M:Fadd.Parser.SimpleSQL.ParseTreeTokens.ParameterValueToken.Parse(Fadd.Parser.Tokenizer,Fadd.Parser.ParseTree)">
-            <summary>
-            Parses the data in the specified <see cref="T:Fadd.Parser.Tokenizer"/>.
-            </summary>
-            <param name="tokenizer">The <see cref="T:Fadd.Parser.Tokenizer"/> containing the data to parse.</param>
-            <param name="tree"><see cref="T:Fadd.Parser.ParseTree"/> that is being built..</param>
-            <returns>true if more tokens can be parsed on the current leaf; false if we should continue to next leaf (parse no more children).</returns>
-        </member>
-        <member name="M:Fadd.Parser.SimpleSQL.ParseTreeTokens.BitwiseToken.Match(Fadd.Parser.Tokenizer,Fadd.Parser.ParseTree)">
-            <summary>
-            Check if the current position is the start of this token
-            </summary>
-            <param name="tokenizer"></param>
-            <param name="tree"></param>
-            <returns>true if our token is the next one.</returns>
-        </member>
-        <member name="T:Fadd.Parser.Evaluator.Tokens.And">
-            <summary>
-            <![CDATA[&&]]>
-            </summary>
-        </member>
-        <member name="M:Fadd.Parser.Evaluator.Tokens.And.ToString">
-            <summary>
-            Returns &amp;&amp;.
-            </summary>
-            <returns>" &amp;&amp; "</returns>
-        </member>
-        <member name="P:Fadd.Parser.Evaluator.Tokens.And.TokenIdentifier">
-            <summary>
-            Used to determine the kind of this token
-            </summary>
-            <value></value>
-        </member>
-        <member name="T:Fadd.Parser.Evaluator.ParseTreeTokens.LessOrEqualToken">
-            <summary>
-            Parse <![CDATA[<=]]>
-            </summary>
-        </member>
-        <member name="M:Fadd.Parser.Evaluator.ParseTreeTokens.LessOrEqualToken.Match(Fadd.Parser.Tokenizer,Fadd.Parser.ParseTree)">
-            <summary>
-            Check if the current position is the start of this token
-            </summary>
-            <returns>true if our token is the next one.</returns>
-        </member>
-        <member name="M:Fadd.Parser.Evaluator.ParseTreeTokens.LessOrEqualToken.Parse(Fadd.Parser.Tokenizer,Fadd.Parser.ParseTree)">
-            <summary>
-            Parses the data in the specified <see cref="T:Fadd.Parser.Tokenizer"/>.
-            </summary>
-            <param name="tokenizer">The <see cref="T:Fadd.Parser.Tokenizer"/> containing the data to parse.</param>
-            <param name="tree"><see cref="T:Fadd.Parser.ParseTree"/> that is being built..</param>
-            <returns>true if more tokens can be parsed on the current leaf; false if we should continue to next leaf (parse no more children).</returns>
-        </member>
-        <member name="T:Fadd.Plugins.ApplicationRequestedEventArgs`1">
-            <summary>
-            Arguments for <see cref="T:Fadd.Plugins.ApplicationRequestedHandler`1"/>
-            </summary>
-            <typeparam name="T">Plugin type</typeparam>
-        </member>
-        <member name="M:Fadd.Plugins.ApplicationRequestedEventArgs`1.#ctor(`0)">
-            <summary>
-            Initializes a new instance of the <see cref="T:Fadd.Plugins.ApplicationRequestedEventArgs`1"/> class.
-            </summary>
-            <param name="plugin">Plugin being started.</param>
-        </member>
-        <member name="P:Fadd.Plugins.ApplicationRequestedEventArgs`1.Plugin">
-            <summary>
-            Plugin being started
-            </summary>
-        </member>
-        <member name="P:Fadd.Plugins.ApplicationRequestedEventArgs`1.Application">
-            <summary>
-            Application that the plugin should be started with.
-            </summary>
-        </member>
-        <member name="T:Fadd.Plugins.ApplicationRequestedHandler`1">
-            <summary>
-            A plugin is about to be started and it needs a <see cref="T:Fadd.Plugins.IApplication"/> interface to be passed to it.
-            </summary>
-            <typeparam name="T">A type that implements <see cref="T:Fadd.Plugins.IPlugin"/>.</typeparam>
-            <param name="source"><see cref="T:Fadd.Plugins.PluginManager`1"/></param>
-            <param name="args">Arguments.</param>
-        </member>
-        <member name="T:Fadd.Logging.ConsoleLogger">
-            <summary>
-            The console logger is used to display logging in the console window.
-            Different priorities are shown in different color, instead of showing the priority text.
-            </summary>
-        </member>
-        <member name="M:Fadd.Logging.ConsoleLogger.#ctor(Fadd.Logging.LogFormatter,Fadd.Logging.ILoggerConfiguration)">
-            <summary>
-            Initializes a new instance of the <see cref="T:Fadd.Logging.ConsoleLogger"/> class.
-            </summary>
-            <param name="logFormatter">The log formatter.</param>
-            <param name="configuration">Configuration for the logger.</param>
-        </member>
-        <member name="M:Fadd.Logging.ConsoleLogger.Trace(System.String)">
-            <summary>
-            Very detailed log messages, potentially of a high frequency and volume
-            </summary>
-            <param name="message">message written to the log.</param>
-        </member>
-        <member name="M:Fadd.Logging.ConsoleLogger.Trace(System.String,System.Exception)">
-            <summary>
-            Very detailed log messages, potentially of a high frequency and volume
-            </summary>
-            <param name="message">message written to the log.</param>
-            <param name="exception">an exception.</param>
-        </member>
-        <member name="M:Fadd.Logging.ConsoleLogger.Debug(System.String)">
-            <summary>
-            Less detailed and/or less frequent debugging messages
-            </summary>
-            <param name="message">message written to the log.</param>
-        </member>
-        <member name="M:Fadd.Logging.ConsoleLogger.Debug(System.String,System.Exception)">
-            <summary>
-            Less detailed and/or less frequent debugging messages
-            </summary>
-            <param name="message">message written to the log.</param>
-            <param name="exception">an exception.</param>
-        </member>
-        <member name="M:Fadd.Logging.ConsoleLogger.Info(System.String)">
-            <summary>
-            Informational messages
-            </summary>
-            <param name="message">message written to the log.</param>
-        </member>
-        <member name="M:Fadd.Logging.ConsoleLogger.Info(System.String,System.Exception)">
-            <summary>
-            Informational messages
-            </summary>
-            <param name="message">message written to the log.</param>
-            <param name="exception">an exception.</param>
-        </member>
-        <member name="M:Fadd.Logging.ConsoleLogger.Warning(System.String)">
-            <summary>
-            Warnings which don't appear to the user of the application
-            </summary>
-            <param name="message">message written to the log.</param>
-        </member>
-        <member name="M:Fadd.Logging.ConsoleLogger.Warning(System.String,System.Exception)">
-            <summary>
-            Warnings which don't appear to the user of the application
-            </summary>
-            <param name="message">message written to the log.</param>
-            <param name="exception">an exception.</param>
-        </member>
-        <member name="M:Fadd.Logging.ConsoleLogger.Error(System.String)">
-            <summary>
-            Error messages
-            </summary>
-            <param name="message">message written to the log.</param>
-        </member>
-        <member name="M:Fadd.Logging.ConsoleLogger.Error(System.String,System.Exception)">
-            <summary>
-            Error messages
-            </summary>
-            <param name="message">message written to the log.</param>
-            <param name="exception">an exception.</param>
-        </member>
-        <member name="M:Fadd.Logging.ConsoleLogger.Fatal(System.String)">
-            <summary>
-            Fatal error messages. After a fatal error, the application usually terminates.
-            </summary>
-            <param name="message">message written to the log.</param>
-        </member>
-        <member name="M:Fadd.Logging.ConsoleLogger.Fatal(System.String,System.Exception)">
-            <summary>
-            Fatal error messages. After a fatal error, the application usually terminates.
-            </summary>
-            <param name="message">message written to the log.</param>
-            <param name="exception">an exception.</param>
-        </member>
-        <member name="T:Fadd.Components.ParametersRequestedEventArgs">
-            <summary>
-            Used to retreive parameters.
-            </summary>
-        </member>
-        <member name="M:Fadd.Components.ParametersRequestedEventArgs.#ctor(System.Type,System.Type)">
-            <summary>
-            Initializes a new instance of the <see cref="T:Fadd.Components.ParametersRequestedEventArgs"/> class.
-            </summary>
-            <param name="interfaceType">Interface used to fetch the component.</param>
-            <param name="instanceType">Type used to create the component (the type that we need constructor parameters for).</param>
-        </member>
-        <member name="P:Fadd.Components.ParametersRequestedEventArgs.InstanceType">
-            <summary>
-            Type used to create the component (the type that we need constructor parameters for).
-            </summary>
-        </member>
-        <member name="P:Fadd.Components.ParametersRequestedEventArgs.InterfaceType">
-            <summary>
-            Interface used to fetch the component
-            </summary>
-        </member>
-        <member name="P:Fadd.Components.ParametersRequestedEventArgs.Parameters">
-            <summary>
-            Constructor parameters.
-            </summary>
-        </member>
-        <member name="T:Fadd.Parser.SimpleSQL.Tokens.Insert">
-            <summary>
-            INSERT INTO clause
-            </summary>
-        </member>
-        <member name="M:Fadd.Parser.SimpleSQL.Tokens.Insert.ToString">
-            <summary>
-            returns SQL
-            </summary>
-            <returns>"INSERT INTO "</returns>
-        </member>
-        <member name="P:Fadd.Parser.SimpleSQL.Tokens.Insert.TokenIdentifier">
-            <summary>
-            Used to determine the kind of this token
-            </summary>
-            <value></value>
-        </member>
-        <member name="M:Fadd.Parser.SimpleSQL.ParseTreeTokens.WhereToken.Match(Fadd.Parser.Tokenizer,Fadd.Parser.ParseTree)">
-            <summary>
-            Check if the current position is the start of this token
-            </summary>
-            <returns>true if our token is the next one.</returns>
-        </member>
-        <member name="M:Fadd.Parser.SimpleSQL.ParseTreeTokens.WhereToken.Parse(Fadd.Parser.Tokenizer,Fadd.Parser.ParseTree)">
-            <summary>
-            Parses the data in the specified <see cref="T:Fadd.Parser.Tokenizer"/>.
-            </summary>
-            <param name="tokenizer">The <see cref="T:Fadd.Parser.Tokenizer"/> containing the data to parse.</param>
-            <param name="tree"><see cref="T:Fadd.Parser.ParseTree"/> that is being built..</param>
-            <returns>true if more tokens can be parsed on the current leaf; false if we should continue to next leaf (parse no more children).</returns>
-        </member>
-        <member name="T:Fadd.Parser.Evaluator.EvaluatorTokenIds">
-            <summary>
-            All tokens used during parsing
-            </summary>
-        </member>
-        <member name="F:Fadd.Parser.Evaluator.EvaluatorTokenIds.And">
-            <summary>
-            AND
-            </summary>
-        </member>
-        <member name="F:Fadd.Parser.Evaluator.EvaluatorTokenIds.Or">
-            <summary>
-            OR
-            </summary>
-        </member>
-        <member name="F:Fadd.Parser.Evaluator.EvaluatorTokenIds.In">
-            <summary>
-            IN ( XXX )
-            </summary>
-        </member>
-        <member name="F:Fadd.Parser.Evaluator.EvaluatorTokenIds.StartNesting">
-            <summary>
-            (
-            </summary>
-        </member>
-        <member name="F:Fadd.Parser.Evaluator.EvaluatorTokenIds.EndNesting">
-            <summary>
-            )
-            </summary>
-        </member>
-        <member name="T:Fadd.Globalization.ILanguageWatcher">
-            <summary>
-            Loads and watches language files on disk.
-            </summary>
-            <remarks>
-            Future version can watch different file types, and load them using different loaders.
-            </remarks>
-        </member>
-        <member name="M:Fadd.Globalization.ILanguageWatcher.Add(System.String)">
-            <summary>
-            Load and watch another file on disk.
-            </summary>
-            <param name="filename">Relative or absolute path to language file.</param>
-            <returns>Node that have been loaded.</returns>
-        </member>
-        <member name="P:Fadd.Globalization.ILanguageWatcher.RootNode">
-            <summary>
-            Root language node.
-            </summary>
-        </member>
-        <member name="T:Fadd.Data.Statement">
-            <summary>
-            Query statement
-            </summary>
-        </member>
-        <member name="M:Fadd.Data.Statement.#ctor(System.String,System.Object[])">
-            <summary>
-            Initializes a new instance of the <see cref="T:Fadd.Data.Statement"/> class.
-            </summary>
-            <param name="conditions">Conditions (corresponds to the WHERE clause) using property names.</param>
-            <param name="arguments">Argument values used in the condition.</param>
-        </member>
-        <member name="M:Fadd.Data.Statement.#ctor">
-            <summary>
-            Initializes a new instance of the <see cref="T:Fadd.Data.Statement"/> class.
-            </summary>
-        </member>
-        <member name="M:Fadd.Data.Statement.OrderBy(System.String[])">
-            <summary>
-            Properties to sort by.
-            </summary>
-            <param name="properties">properties separated by comma, with or without ASC/DESC.</param>
-            <returns>the current statement</returns>
-            <example>new Statement("FirstName = ?", firstName).OrderBy("LastName DESC, FirstName")</example>
-        </member>
-        <member name="M:Fadd.Data.Statement.GroupBy(System.String[])">
-            <summary>
-            Properties to group the statement by
-            </summary>
-            <param name="properties">Properties to group by, separated by comma.</param>
-            <returns></returns>
-            <example>new Statement(string.Empty).GroupBy("LastName, FirstName")</example>
-        </member>
-        <member name="M:Fadd.Data.Statement.Paging(System.Int32,System.Int32)">
-            <summary>
-            Get a certain amount of entries.
-            </summary>
-            <param name="page">0 based index. 0 = first page, 1 = second page..</param>
-            <param name="itemsPerPage">Number of entries per page.</param>
-            <returns></returns>
-        </member>
-        <member name="M:Fadd.Data.Statement.GetHashCode">
-            <summary>
-            Calculates hash code by concatenating the strings for all statement parts.
-            </summary>
-            <returns></returns>
-        </member>
-        <member name="P:Fadd.Data.Statement.Arguments">
-            <summary>
-            Arguments being used in <see cref="T:Fadd.Data.Statement"/>.
-            </summary>
-        </member>
-        <member name="P:Fadd.Data.Statement.Conditions">
-            <summary>
-            Conditions (corresponds to the WHERE clause) using property names
-            </summary>
-        </member>
-        <member name="P:Fadd.Data.Statement.OrderByClause">
-            <summary>
-            Property names + ASC/DESC
-            </summary>
-        </member>
-        <member name="P:Fadd.Data.Statement.GroupByClause">
-            <summary>
-            Property names to group by
-            </summary>
-        </member>
-        <member name="P:Fadd.Data.Statement.Page">
-            <summary>
-            0 based index. 0 = first page, 1 = second page..
-            </summary>
-        </member>
-        <member name="P:Fadd.Data.Statement.PageSize">
-            <summary>
-            Number of entries per page
-            </summary>
-        </member>
-        <member name="T:Fadd.Data.ConnectionConfiguration">
-            <summary>
-            Database connection configuration
-            </summary>
-        </member>
-        <member name="P:Fadd.Data.ConnectionConfiguration.DriverName">
-            <summary>
-            Assembly qualified name of the .Net driver to use.
-            </summary>
-        </member>
-        <member name="P:Fadd.Data.ConnectionConfiguration.ConnectionString">
-            <summary>
-            Connection string
-            </summary>
-        </member>
-        <member name="P:Fadd.Data.ConnectionConfiguration.ConnectionType">
-            <summary>
-            Connection type.
-            </summary>
-        </member>
-        <member name="T:Fadd.Validation.ValidateWebURL">
-            <summary>
-            Validates a string as  http(s)/ftp url.
-            </summary>
-        </member>
-        <member name="F:Fadd.Validation.ValidateWebURL.Name">
-            <summary>
-            Name of the language item for this validation.
-            </summary>
-        </member>
-        <member name="M:Fadd.Validation.ValidateWebURL.Format(System.String,Fadd.Globalization.ILanguageNode)">
-            <summary>
-            Localize error if validation failed.
-            </summary>
-            <param name="fieldName">Localized field name.</param>
-            <param name="validationLanguage">Language node with all validation translations.</param>
-            <returns>A localized error message if the validation failed; otherwise null.</returns>
-            <example>
-            <code>
-            attribute.Localize("FirstName", "'{0}' is required");
-            // will return "'{0}' is required" if the validation failed, else null.
-            </code>
-            </example>
-        </member>
-        <member name="M:Fadd.Validation.ValidateWebURL.SupportsType(System.Type)">
-            <summary>
-            Determines if the validation support the specified type.
-            </summary>
-            <param name="type">Property/Value type.</param>
-            <returns>true if type is supported.</returns>
-            <remarks>
-            Used when validation objects are generated.
-            </remarks>
-        </member>
-        <member name="M:Fadd.Validation.ValidateWebURL.Validate(System.Object,System.Object)">
-            <summary>
-            Validate the URL
-            </summary>
-            <param name="instance">Object instance (of the object being tested).</param>
-            <param name="value">Value to test</param>
-            <returns>true if value is an URL; otherwise false.</returns>
-            <exception cref="T:System.NotSupportedException">If type is not supported.</exception>
-        </member>
-        <member name="T:Fadd.TabStringBuilder">
-            <summary>
-            Wrapper for the <see cref="P:Fadd.TabStringBuilder.StringBuilder"/> class adding support for tabbing easily
-            </summary>
-            <usage><![CDATA[
-            TabStringBuilder sb = new TabStringBuilder();
-            sb.AppendLineInc("<div>");
-            sb.AppendLine(@"<input type=""button"" value=""My Button"" />);
-            sb.AppendLineDec("</div>");
-
-            Would give the result:
-            <div>
-            	<input type="button" value="My Button" />
-            </div>
-
-            Without having you worry about what tab indentation your on, neat!
-            ]]></usage>
-        </member>
-        <member name="M:Fadd.TabStringBuilder.#ctor">
-            <summary>
-            Instances a blank <see cref="T:Fadd.TabStringBuilder"/>
-            </summary>
-        </member>
-        <member name="M:Fadd.TabStringBuilder.#ctor(System.Text.StringBuilder,System.Int32)">
-            <summary>
-            Instance the <see cref="T:Fadd.TabStringBuilder"/> with a <see cref="P:Fadd.TabStringBuilder.StringBuilder"/> and a start intendation
-            </summary>
-            <param name="stringBuilder">A <see cref="P:Fadd.TabStringBuilder.StringBuilder"/> to append text to</param>
-            <param name="intendation">
-            Can be used to start writing with tabs using a set intendation when data has previously been written to the
-            <see cref="P:Fadd.TabStringBuilder.StringBuilder"/> with intendation.
-            </param>
-        </member>
-        <member name="M:Fadd.TabStringBuilder.ToString">
-            <summary>
-            The built string
-            </summary>
-            <returns>Generated string</returns>
-        </member>
-        <member name="M:Fadd.TabStringBuilder.SetIntendation(System.Int32)">
-            <summary>
-            Changes the <see cref="F:Fadd.TabStringBuilder._tabs"/> to contain the specified number of tab characters
-            </summary>
-            <param name="intendation">Number of tab characters to set</param>
-        </member>
-        <member name="M:Fadd.TabStringBuilder.AppendLine(System.String)">
-            <summary>
-            Appends tabs followed by the specified value and a line termination to the string
-            </summary>
-            <param name="value">The value to add</param>
-        </member>
-        <member name="M:Fadd.TabStringBuilder.AppendLine(System.Object)">
-            <summary>
-            Appends tabs followed by the specified value and a line termination to the string
-            </summary>
-            <param name="value">The value to add</param>
-        </member>
-        <member name="M:Fadd.TabStringBuilder.AppendLine">
-            <summary>
-            Appends a empty line without tabs
-            </summary>
-        </member>
-        <member name="M:Fadd.TabStringBuilder.Append(System.String)">
-            <summary>
-            Just appends plain string to the underlying <see cref="P:Fadd.TabStringBuilder.StringBuilder"/> without any tabs
-            </summary>
-            <param name="value">The value to add</param>
-        </member>
-        <member name="M:Fadd.TabStringBuilder.Append(System.Object)">
-            <summary>
-            Appends tabs and value to the string
-            </summary>
-            <param name="value">The value to add</param>
-        </member>
-        <member name="M:Fadd.TabStringBuilder.AppendLineInc">
-            <summary>
-            Adds a new line and increases the tab indendation
-            </summary>
-            <example><![CDATA[
-            sb.Append("<div>");
-            sb.AppendLineInc();
-            sb.AppendLine("<img src.../>");
-            sb.AppendLineDec("</div>");
-
-            =>
-            <div>
-            	<img src.../>
-            </div>
-            ]]></example>
-        </member>
-        <member name="M:Fadd.TabStringBuilder.AppendLineInc(System.String)">
-            <summary>
-            Appends tabs and value to the string after which the intendation is increased
-            </summary>
-            <param name="value">The value to append</param>
-            <remarks>The tab intendation is increased after adding the value</remarks>
-            <example><![CDATA[
-            sb.AppendLineInc("<div>");
-            sb.AppendLine("<span>Example</span>");
-
-            Would give:
-            <div>
-            	<span>Example</span>
-            ]]></example>
-        </member>
-        <member name="M:Fadd.TabStringBuilder.AppendLineInc(System.Object)">
-            <summary>
-            Appends tabs and value to the string after which the intendation is increased
-            </summary>
-            <param name="value">The value to append</param>
-            <remarks>The tab intendation is increased after adding the value</remarks>
-            <example><![CDATA[
-            sb.AppendLineInc("<div>");
-            sb.AppendLine("<span>Example</span>");
-
-            Would give:
-            <div>
-            	<span>Example</span>
-            ]]></example>
-        </member>
-        <member name="M:Fadd.TabStringBuilder.AppendLineDec(System.String)">
-            <summary>
-            Decreases the intendation and appends tabs and value to the string
-            </summary>
-            <param name="value">The value to append</param>
-            <remarks>The tab intendation is decreased before adding the value</remarks>
-            <example><![CDATA[
-            sb.AppendLineInc("<div>");
-            sb.AppendLine("<span>Example</span>");
-            sb.AppendLineDec("<div>");
-
-            Would give:
-            <div>
-            	<span>Example</span>
-            </div>
-            ]]></example>
-        </member>
-        <member name="M:Fadd.TabStringBuilder.AppendLineDec(System.Object)">
-            <summary>
-            Decreases the intendation and appends tabs and value to the string
-            </summary>
-            <param name="value">The value to append</param>
-            <remarks>The tab intendation is decreased before adding the value</remarks>
-            <example><![CDATA[
-            sb.AppendLineInc("<div>");
-            sb.AppendLine("<span>Example</span>");
-            sb.AppendLineDec("<div>");
-
-            Would give:
-            <div>
-            	<span>Example</span>
-            </div>
-            ]]></example>
-        </member>
-        <member name="P:Fadd.TabStringBuilder.StringBuilder">
-            <summary>
-            Retrieves the <see cref="P:Fadd.TabStringBuilder.StringBuilder"/> used by the class
-            </summary>
-        </member>
-        <member name="T:Fadd.Commands.ObjectProxyCommand">
-            <summary>
-            Command sent by a TypeProxy
-            </summary>
-        </member>
-        <member name="M:Fadd.Commands.ObjectProxyCommand.#ctor(System.Type,System.Reflection.MethodInfo,System.Object[])">
-            <summary>
-            Initializes a new instance of the <see cref="T:Fadd.Commands.ObjectProxyCommand"/> class.
-            </summary>
-            <param name="type">Type of object to execute method on.</param>
-            <param name="method">Method to call.</param>
-            <param name="arguments">Argumens that should be passed to the method.</param>
-        </member>
-        <member name="P:Fadd.Commands.ObjectProxyCommand.ReturnValue">
-            <summary>
-            Return value from method call.
-            </summary>
-        </member>
-        <member name="P:Fadd.Commands.ObjectProxyCommand.Type">
-            <summary>
-            Type of object to execute method on.
-            </summary>
-        </member>
-        <member name="P:Fadd.Commands.ObjectProxyCommand.Method">
-            <summary>
-            Method to call.
-            </summary>
-        </member>
-        <member name="P:Fadd.Commands.ObjectProxyCommand.Args">
-            <summary>
-            Argumens that should be passed to the method call.
-            </summary>
-        </member>
-        <member name="P:Fadd.Commands.ObjectProxyCommand.Exception">
-            <summary>
-            Exception thrown during method call
-            </summary>
-        </member>
-        <member name="T:Fadd.Commands.ObjectProxyProperty">
-            <summary>
-            Class for building information strings about a proxy property
-            </summary>
-        </member>
-        <member name="M:Fadd.Commands.ObjectProxyProperty.#ctor(System.Reflection.PropertyInfo)">
-            <summary>
-            Instantiates and builds information about a property
-            </summary>
-            <param name="propertyInfo"></param>
-        </member>
-        <member name="M:Fadd.Commands.ObjectProxyProperty.BuildDeclaration(Fadd.Commands.ObjectProxyProperty)">
-            <summary>
-            Builds a declaration string for the property proxy
-            </summary>
-            <param name="property">The property to build a proxy declaration for</param>
-        </member>
-        <member name="P:Fadd.Commands.ObjectProxyProperty.Signature">
-            <summary>
-            Retrieves a signature for the property, ie _propertyName
-            </summary>
-        </member>
-        <member name="P:Fadd.Commands.ObjectProxyProperty.Name">
-            <summary>
-            Retrieves the property name
-            </summary>
-        </member>
-        <member name="P:Fadd.Commands.ObjectProxyProperty.ReturnType">
-            <summary>
-            Retrieves the return type for the property
-            </summary>
-        </member>
-        <member name="P:Fadd.Commands.ObjectProxyProperty.Declaration">
-            <summary>
-            Retrieves the property declaration string
-            </summary>
-        </member>
-        <member name="P:Fadd.Commands.ObjectProxyProperty.PropertyType">
-            <summary>
-            Retrieves the property type
-            </summary>
-        </member>
-        <member name="P:Fadd.Commands.ObjectProxyProperty.HasGet">
-            <summary>
-            Returns true if the property has a get field
-            </summary>
-        </member>
-        <member name="P:Fadd.Commands.ObjectProxyProperty.HasSet">
-            <summary>
-            Returns true if the property has a set field
-            </summary>
-        </member>
-        <member name="T:Fadd.Commands.AsyncQueueItem">
-            <summary>
-            Invokes all handlers for a command.
-            </summary>
-        </member>
-        <member name="M:Fadd.Commands.AsyncQueueItem.#ctor(System.Object,Fadd.Commands.Command,Fadd.Commands.CommandManager,System.AsyncCallback,Fadd.Commands.AsyncQueueItemResult)">
-            <summary>
-            Initializes a new instance of the <see cref="T:Fadd.Commands.AsyncQueueItem"/> class.
-            </summary>
-            <param name="source">used as "source" in the command event delegate.</param>
-            <param name="cmd">command being executed.</param>
-            <param name="cmdMgr">Used to check if propagation may be cancelled.</param>
-            <param name="callBack">callback when command have been executed..</param>
-            <param name="result">async result.</param>
-        </member>
-        <member name="T:Fadd.Parser.SimpleSQL.Tokens.LessOrEqual">
-            <summary>
-             <![CDATA[
-            <=
-            ]]>
-            </summary>
-        </member>
-        <member name="M:Fadd.Parser.SimpleSQL.Tokens.LessOrEqual.ToString">
-            <summary>
-            Returns SQL
-            </summary>
-            <returns>" &lt;= "</returns>
-        </member>
-        <member name="P:Fadd.Parser.SimpleSQL.Tokens.LessOrEqual.TokenIdentifier">
-            <summary>
-            Used to determine the kind of this token
-            </summary>
-            <value></value>
-        </member>
-        <member name="M:Fadd.Parser.SimpleSQL.ParseTreeTokens.SelectToken.Match(Fadd.Parser.Tokenizer,Fadd.Parser.ParseTree)">
-            <summary>
-            Check if the current position is the start of this token
-            </summary>
-            <returns>true if our token is the next one.</returns>
-        </member>
-        <member name="M:Fadd.Parser.SimpleSQL.ParseTreeTokens.SelectToken.Parse(Fadd.Parser.Tokenizer,Fadd.Parser.ParseTree)">
-            <summary>
-            Parses the data in the specified <see cref="T:Fadd.Parser.Tokenizer"/>.
-            </summary>
-            <param name="tokenizer">The <see cref="T:Fadd.Parser.Tokenizer"/> containing the data to parse.</param>
-            <param name="tree"><see cref="T:Fadd.Parser.ParseTree"/> that is being built..</param>
-            <returns>true if more tokens can be parsed on the current leaf; false if we should continue to next leaf (parse no more children).</returns>
-        </member>
-        <member name="M:Fadd.Parser.SimpleSQL.ParseTreeTokens.CommaToken.Match(Fadd.Parser.Tokenizer,Fadd.Parser.ParseTree)">
-            <summary>
-            Check if the current position is the start of this token
-            </summary>
-            <returns>true if our token is the next one.</returns>
-        </member>
-        <member name="M:Fadd.Parser.SimpleSQL.ParseTreeTokens.CommaToken.Parse(Fadd.Parser.Tokenizer,Fadd.Parser.ParseTree)">
-            <summary>
-            Parses the data in the specified <see cref="T:Fadd.Parser.Tokenizer"/>.
-            </summary>
-            <param name="tokenizer">The <see cref="T:Fadd.Parser.Tokenizer"/> containing the data to parse.</param>
-            <param name="tree"><see cref="T:Fadd.Parser.ParseTree"/> that is being built..</param>
-            <returns>true if more tokens can be parsed on the current leaf; false if we should continue to next leaf (parse no more children).</returns>
-        </member>
-        <member name="T:Fadd.Parser.Evaluator.Tokens.PropertyValue">
-            <summary>
-            Contains a value in a condition.
-            </summary>
-        </member>
-        <member name="M:Fadd.Parser.Evaluator.Tokens.PropertyValue.#ctor(Fadd.Parser.Evaluator.Tokens.Property)">
-            <summary>
-            Initializes a new instance of the <see cref="T:Fadd.Parser.Evaluator.Tokens.PropertyValue"/> class.
-            </summary>
-            <param name="property">Property that this value belongs to.</param>
-        </member>
-        <member name="M:Fadd.Parser.Evaluator.Tokens.PropertyValue.ToString">
-            <summary>
-            Question mark as string
-            </summary>
-            <returns>"?"</returns>
-        </member>
-        <member name="P:Fadd.Parser.Evaluator.Tokens.PropertyValue.TokenIdentifier">
-            <summary>
-            Identifier for this token.
-            </summary>
-        </member>
-        <member name="P:Fadd.Parser.Evaluator.Tokens.PropertyValue.Property">
-            <summary>
-            Property that this token belongs to.
-            </summary>
-        </member>
-        <member name="T:Fadd.Globalization.Localizations.DateTimeHelper1053">
-            <summary>
-            Used to parse Swedish dates and times.
-            </summary>
-        </member>
-        <member name="M:Fadd.Globalization.Localizations.DateTimeHelper1053.#cctor">
-            <summary>
-            Static constructor setting up helping maps
-            </summary>
-        </member>
-        <member name="M:Fadd.Globalization.Localizations.DateTimeHelper1053.ParseDateTime(System.String)">
-            <summary>
-            Will try to parse the date/time using the local parser.
-            Will also try the default <see cref="M:System.DateTime.Parse(System.String)"/> method if date is in an unknown format.
-            </summary>
-            <param name="value">date/time string</param>
-            <returns>A <see cref="T:System.DateTime"/> if parsed successfully; otherwise <see cref="F:System.DateTime.MinValue"/>.</returns>
-            <exception cref="T:System.FormatException">If the date/time format is invalid.</exception>
-            <exception cref="T:System.ArgumentOutOfRangeException">If month/day/hour/minute/second are not within their ranges.</exception>
-            <remarks>
-            Can parse one of the following formats:<br/>
-            YYYY-MM-DD HH:MM:SS <br/>
-            YYYY-MM-DD HH:MM<br/>
-            YYYYMMDDHHMM<br/>
-            YYYYMMDDHHMMSS<br/>
-            YYMMDDHHMM
-            </remarks>
-        </member>
-        <member name="M:Fadd.Globalization.Localizations.DateTimeHelper1053.ParseDateTime(System.String,System.String)">
-            <summary>
-            Will try to parse the date/time using the local parser.
-            Will also try the default <see cref="M:System.DateTime.Parse(System.String)"/> method if date is in an unknown format.
-            </summary>
-            <param name="date">date string. Date will be set to current if value is not specified.</param>
-            <param name="time">time string. Time will be set to current if not specified.</param>
-            <returns>A <see cref="T:System.DateTime"/></returns>
-            <exception cref="T:System.FormatException">If the date/time format is invalid.</exception>
-            <exception cref="T:System.ArgumentOutOfRangeException">If month/day/hour/minute/second are not within their ranges.</exception>
-        </member>
-        <member name="M:Fadd.Globalization.Localizations.DateTimeHelper1053.ParseDate(System.String)">
-            <summary>
-            Tries to parse a date string.
-            </summary>
-            <param name="value">Can contain a complete date or parts of it (which parts depends on the country).</param>
-            <returns>
-            A <see cref="T:System.DateTime"/> containing the date (time is 0) if parsed successfully; otherwise <see cref="F:System.DateTime.MinValue"/>.
-            </returns>
-            <remarks>
-            YYYY-MM-DD
-            YYYYMMDD
-            YYMMDD
-            MMDD
-            </remarks>
-        </member>
-        <member name="M:Fadd.Globalization.Localizations.DateTimeHelper1053.ParseDate(System.String,System.Int32[],System.Int32)">
-            <summary>
-            Can parse one of the following formats:
-            YYYY-MM-DD
-            YYYYMMDD
-            YYMMDD
-            MMDD
-            </summary>
-            <param name="value">contains a date string.</param>
-            <param name="values">array that parsed values are written to.</param>
-            <param name="offset">where in array to start write values</param>
-            <exception cref="T:System.FormatException">If value contains an unknown format.</exception>
-            <exception cref="T:System.ArgumentException">If month/day are not within their ranges.</exception>
-            <exception cref="T:System.ArgumentOutOfRangeException"><c>offset</c> is out of range.</exception>
-        </member>
-        <member name="M:Fadd.Globalization.Localizations.DateTimeHelper1053.ParseTime(System.String)">
-            <summary>
-            Tries to parse a time string.
-            </summary>
-            <param name="value">Can contain a complete time or parts of it (which parts depends on the country).</param>
-            <returns>A <see cref="T:System.DateTime"/> containing the time (date is 0) if parsed successfully; otherwise <see cref="F:System.DateTime.MinValue"/>.</returns>
-        </member>
-        <member name="M:Fadd.Globalization.Localizations.DateTimeHelper1053.ParseTime(System.String,System.Int32[],System.Int32)">
-            <summary>
-            Can parse one of the following formats:
-            HH:MM:SS
-            HH:MM
-            HHMM
-            HHMMSS
-            </summary>
-            <param name="value">a time value</param>
-            <param name="values">array that will be filled. Must contain three slots.</param>
-            <param name="offset">Where in the array to start write values</param>
-            <returns>true if parsed successfully; otherwise false.</returns>
-            <exception cref="T:System.ArgumentOutOfRangeException"><c>offset</c> is out of range.</exception>
-            <exception cref="T:System.FormatException">Invalid time format.</exception>
-        </member>
-        <member name="M:Fadd.Globalization.Localizations.DateTimeHelper1053.ValidateDate(System.Int32,System.Int32,System.Int32,System.Boolean)">
-            <summary>
-            Validate a date
-            </summary>
-            <param name="year">year value</param>
-            <param name="month">month value</param>
-            <param name="day">day value</param>
-            <param name="throwException">throw exceptions</param>
-            <returns>true if specified values are a correct date; otherwise false.</returns>
-            <exception cref="T:System.ArgumentException">If any of the values are not in the allowed ranges.</exception>
-            <exception cref="T:System.FormatException">Month must be between 1 and 12.</exception>
-        </member>
-        <member name="M:Fadd.Globalization.Localizations.DateTimeHelper1053.ValidateTime(System.Int32,System.Int32,System.Boolean)">
-            <summary>
-            Validate a time value.
-            </summary>
-            <param name="hour">hour</param>
-            <param name="minute">minute</param>
-            <param name="throwException">throw exceptions</param>
-            <exception cref="T:System.ArgumentException">If any of the values are not in the allowed ranges.</exception>
-        </member>
-        <member name="M:Fadd.Globalization.Localizations.DateTimeHelper1053.ValidateTime(System.Int32,System.Int32,System.Int32,System.Boolean)">
-            <summary>
-
-            </summary>
-            <param name="hour"></param>
-            <param name="minute"></param>
-            <param name="second"></param>
-            <param name="throwException"></param>
-            <exception cref="T:System.ArgumentException">If any of the values are not in the allowed ranges.</exception>
-        </member>
-        <member name="M:Fadd.Globalization.Localizations.DateTimeHelper1053.FormatDate(System.DateTime)">
-            <summary>
-            Format a date as a string.
-            </summary>
-            <param name="dateTime">A date/time</param>
-            <returns>Examples: "Yesterday", "On monday"</returns>
-        </member>
-        <member name="M:Fadd.Globalization.Localizations.DateTimeHelper1053.FormatDateTime(System.DateTime)">
-            <summary>
-            Format a date as a string.
-            </summary>
-            <param name="dateTime">A date/time</param>
-            <returns>Examples: "Yesterday at 12:20pm", "On Monday at 11:38am"</returns>
-        </member>
-        <member name="M:Fadd.Globalization.Localizations.DateTimeHelper1053.GetDuration(System.DateTime,System.DateTime,Fadd.Globalization.DurationDetail,System.Int32)">
-            <summary>
-            Get duration as a human friendly string.
-            </summary>
-            <param name="from">Start time of duration</param>
-            <param name="to">End time of duration</param>
-            <param name="durationDetail">The detail in which to display the duration</param>
-            <param name="measures">Number of time units to display</param>
-            <returns>
-            A string like: 1 month, 2 weeks, and 3 days.
-            </returns>
-        </member>
-        <member name="M:Fadd.Globalization.Localizations.DateTimeHelper1053.GetDuration(System.DateTime,System.DateTime)">
-            <summary>
-            Get duration as a human friendly string. Displays all time unit durations.
-            </summary>
-            <param name="from">Start time of duration</param>
-            <param name="to">End time of duration</param>
-            <returns></returns>
-        </member>
-        <member name="M:Fadd.Globalization.Localizations.DateTimeHelper1053.GetDuration(System.TimeSpan,Fadd.Globalization.DurationDetail,System.Int32)">
-            <summary>
-            Get duration as a human friendly string.
-            </summary>
-            <param name="span">The timespan for which to output the duration</param>
-            <param name="durationDetail">The detail in which to display the duration</param>
-            <param name="measures">Number of time measures to display</param>
-            <returns>
-            A string like: 1 month, 2 weeks, and 3 days.
-            </returns>
-            <remarks><see cref="F:Fadd.Globalization.DurationDetail.Months"/> cannot be used when using this method since counting of months
-            requires both to and from date time information, in such a case user <see cref="M:Fadd.Globalization.Localizations.DateTimeHelper1053.GetDuration(System.TimeSpan)"/></remarks>
-            <exception cref="T:System.InvalidOperationException">Since <see cref="T:System.TimeSpan"/> is given as duration months cannot be calculated, try GetDuration(DateTime, DateTime, DurationDetail) instead.</exception>
-        </member>
-        <member name="M:Fadd.Globalization.Localizations.DateTimeHelper1053.GetDuration(System.TimeSpan)">
-            <summary>
-            Get duration as a human friendly string. Displays all time unit durations.
-            </summary>
-            <param name="span">The timespan for which to output the duration</param>
-            <returns></returns>
-        </member>
-        <member name="M:Fadd.Globalization.Localizations.DateTimeHelper1053.GetAmount(Fadd.MonthSpan,System.TimeSpan,Fadd.Globalization.DurationDetail,System.Boolean)">
-            <summary>
-            Displays a value defined by the <see cref="T:Fadd.Globalization.DurationDetail"/> either as a part or as a total
-            </summary>
-            <param name="monthSpan">Number of months and days</param>
-            <param name="timeSpan">TimeSpan containing detailed times</param>
-            <param name="getDetail">The time unit to retrieve</param>
-            <param name="showTotal">True if the total amount of the time unit should be returned or just a portion of it</param>
-            <returns>A string in the form 'amount timunitname, '</returns>
-        </member>
-        <member name="M:Fadd.Globalization.Localizations.DateTimeHelper1053.GetName(System.String,System.Int32)">
-            <summary>
-            Retrieves a singular or plural name with amount and comma padded, ie '3 månader, ' or '1 månad, '
-            </summary>
-            <param name="pluralName">The name in plural (used to map for singular name)</param>
-            <param name="amount">The amount to display</param>
-        </member>
-        <member name="T:Fadd.Data.Mappings.PropertyMapping">
-            <summary>
-            Mappings for properties.
-            </summary>
-        </member>
-        <member name="M:Fadd.Data.Mappings.PropertyMapping.#ctor(System.String,System.String)">
-            <summary>
-            Initializes a new instance of the <see cref="T:Fadd.Data.Mappings.PropertyMapping"/> class.
-            </summary>
-            <param name="propertyName">Name of the class property.</param>
-            <param name="columnName">Name of the database column.</param>
-        </member>
-        <member name="P:Fadd.Data.Mappings.PropertyMapping.ColumnName">
-            <summary>
-            Gets or sets name in table
-            </summary>
-        </member>
-        <member name="P:Fadd.Data.Mappings.PropertyMapping.PropertyName">
-            <summary>
-            Gets or sets name in class.
-            </summary>
-        </member>
-        <member name="P:Fadd.Data.Mappings.PropertyMapping.IsPrimaryKey">
-            <summary>
-            Gets or sets whether this property is part of the primary key
-            </summary>
-        </member>
-        <member name="P:Fadd.Data.Mappings.PropertyMapping.Generator">
-            <summary>
-            Gets or sets how the value is generated.
-            </summary>
-            <remarks>
-            <list type="table">
-            <item>
-            <term>sequence</term>
-            <description>Looks for a sequence named "[tableName]_id_seq"</description>
-            </item>
-            <item>
-            <term>autoincrement</term>
-            <description>Uses database specific code to fetch value after insert.
-            <para>ONLY VALID FOR PRIMARY KEYS</para>
-            </description>
-            </item>
-            <item>
-            <term>guid</term>
-            <description>generate a globally unique identifier.</description>
-            </item>
-            <item>
-            <term>any other value</term>
-            <description>specifies a sequence/generator name</description>
-            </item>
-            </list>
-            </remarks>
-        </member>
-        <member name="T:Fadd.Data.ConnectionHelpers.PostgreSqlHelper">
-            <summary>
-            Connection helper specialized for PostgreSQL database.
-            </summary>
-        </member>
-        <member name="M:Fadd.Data.ConnectionHelpers.PostgreSqlHelper.#ctor(System.String)">
-            <summary>
-            Initializes a new instance of the <see cref="T:Fadd.Data.ConnectionHelpers.PostgreSqlHelper"/> class.
-            </summary>
-            <param name="connectionString">The connection string.</param>
-        </member>
-        <member name="M:Fadd.Data.ConnectionHelpers.PostgreSqlHelper.CreateConnection">
-            <summary>
-            Create a new connection to the database.
-            </summary>
-            <returns>An open database connection.</returns>
-            <exception cref="T:Fadd.Data.DataLayerException">If connection fails.</exception>
-        </member>
-        <member name="M:Fadd.Data.ConnectionHelpers.PostgreSqlHelper.GetNextSequenceValue(System.Data.IDbConnection,System.String)">
-            <summary>
-            Try to get
-            </summary>
-            <param name="connection">Connection to use.</param>
-            <param name="sequenceName">Name of the sequence/generator.</param>
-            <returns>A generated value.</returns>
-            <exception cref="T:Fadd.Data.DataLayerException">If something failed </exception>
-        </member>
-        <member name="M:Fadd.Data.ConnectionHelpers.PostgreSqlHelper.GetAutoIncrementValue(System.Data.IDbConnection,System.String)">
-            <summary>
-            Gets the latest auto incremented value from the database.
-            </summary>
-            <param name="connection">Connection used when the object was saved.</param>
-            <param name="columnName">Name of the column that the auto incremented value is for.</param>
-            <returns>auto incremented value</returns>
-            <exception cref="T:Fadd.Data.DataLayerException">If something failed </exception>
-            <exception cref="T:System.NotSupportedException">Not supported by PostgreSQL</exception>
-        </member>
-        <member name="M:Fadd.Data.ConnectionHelpers.PostgreSqlHelper.Paging(System.String,System.Int32,System.Int32)">
-            <summary>
-            Modifies the SQL statement to include paging.
-            </summary>
-            <param name="sqlStatement">SQL statement generated by the DAL.</param>
-            <param name="page">0 based index</param>
-            <param name="pageSize">number of entries per page</param>
-            <returns>SQL statement with paging</returns>
-            <example>
-            	<code>
-            helper.Paging("SELECT * FROM users", 5, 10); // --&gt; "SELECT * FROM users LIMIT 10 OFFSET 50"
-            </code>
-            </example>
-        </member>
-        <member name="P:Fadd.Data.ConnectionHelpers.PostgreSqlHelper.ConnectionString">
-            <summary>
-            Connection string
-            </summary>
-            <value></value>
-        </member>
-    </members>
-</doc>
diff --git a/HttpServer/trunk/dlls/Fadd.dll b/HttpServer/trunk/dlls/Fadd.dll
deleted file mode 100644
index 234a65f..0000000
Binary files a/HttpServer/trunk/dlls/Fadd.dll and /dev/null differ
diff --git a/HttpServer/trunk/dlls/xunit.dll b/HttpServer/trunk/dlls/xunit.dll
deleted file mode 100644
index c02db48..0000000
Binary files a/HttpServer/trunk/dlls/xunit.dll and /dev/null differ
ViewGit